ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggYWRhOGFkNi4uZDM1N2UxYiAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTUxLDYgKzUxLDcgQEAKIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CiBIZW5rIFZlcmdvbmV0IDxIZW5rLlZlcmdvbmV0QGdtYWlsLmNvbT4KIEhlbnJpayBLcmV0enNjaG1hciA8aGVubmVAbmFjaHR3aW5kaGVpbS5kZT4KK0hlbnJpayBSeWRiZXJnIDxyeWRiZXJnQGJpdG1hdGgub3JnPgogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgogSmFjb2IgU2hpbiA8SmFjb2IuU2hpbkBhbWQuY29tPgogSmFtZXMgQm90dG9tbGV5IDxqZWpiQG11bGdyYXZlLihub25lKT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbWVpIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1tZWkKaW5kZXggMGVjOGI4MS4uODBkOTg4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1tZWkKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1tZWkKQEAgLTE0LDMgKzE0LDE4IEBACiAJCVRoZSAvc3lzL2NsYXNzL21laS9tZWlOIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGZvcgogCQllYWNoIHByb2JlZCBtZWkgZGV2aWNlCiAKK1doYXQ6CQkvc3lzL2NsYXNzL21laS9tZWlOL2Z3X3N0YXR1cworRGF0ZToJCU5vdiAyMDE0CitLZXJuZWxWZXJzaW9uOgkzLjE5CitDb250YWN0OglUb21hcyBXaW5rbGVyIDx0b21hcy53aW5rbGVyQGludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOglEaXNwbGF5IGZ3IHN0YXR1cyByZWdpc3RlcnMgY29udGVudAorCisJCVRoZSBNRSBGVyB3cml0ZXMgaXRzIHN0YXR1cyBpbmZvcm1hdGlvbiBpbnRvIGZ3IHN0YXR1cworCQlyZWdpc3RlcnMgZm9yIEJJT1MgYW5kIE9TIHRvIG1vbml0b3IgZncgaGVhbHRoLgorCisJCVRoZSByZWdpc3RlciBjb250YWlucyBydW5uaW5nIHN0YXRlLCBwb3dlciBtYW5hZ2VtZW50CisJCXN0YXRlLCBlcnJvciBjb2RlcywgYW5kIG90aGVycy4gVGhlIHdheSB0aGUgcmVnaXN0ZXJzCisJCWFyZSBkZWNvZGVkIGRlcGVuZHMgb24gUENIIG9yIFNvQyBnZW5lcmF0aW9uLgorCQlBbHNvIG51bWJlciBvZiByZWdpc3RlcnMgdmFyaWVzIGJldHdlZW4gMSBhbmQgNgorCQlkZXBlbmRpbmcgb24gZ2VuZXJhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1kZWxsLWxhcHRvcCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tZGVsbC1sYXB0b3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5Njk0NDMuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1kZWxsLWxhcHRvcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLVdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvZGVsbDo6a2JkX2JhY2tsaWdodC9hbHNfc2V0dGluZwotRGF0ZToJCURlY2VtYmVyIDIwMTQKLUtlcm5lbFZlcnNpb246CTMuMTkKLUNvbnRhY3Q6CUdhYnJpZWxlIE1henpvdHRhIDxnYWJyaWVsZS5tenRAZ21haWwuY29tPiwKLQkJUGFsaSBSb2jDoXIgPHBhbGkucm9oYXJAZ21haWwuY29tPgotRGVzY3JpcHRpb246Ci0JCVRoaXMgZmlsZSBhbGxvd3MgdG8gY29udHJvbCB0aGUgYXV0b21hdGljIGtleWJvYXJkCi0JCWlsbHVtaW5hdGlvbiBtb2RlIG9uIHNvbWUgc3lzdGVtcyB0aGF0IGhhdmUgYW4gYW1iaWVudAotCQlsaWdodCBzZW5zb3IuIFdyaXRlIDEgdG8gdGhpcyBmaWxlIHRvIGVuYWJsZSB0aGUgYXV0bwotCQltb2RlLCAwIHRvIGRpc2FibGUgaXQuCi0KLVdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvZGVsbDo6a2JkX2JhY2tsaWdodC9zdGFydF90cmlnZ2VycwotRGF0ZToJCURlY2VtYmVyIDIwMTQKLUtlcm5lbFZlcnNpb246CTMuMTkKLUNvbnRhY3Q6CUdhYnJpZWxlIE1henpvdHRhIDxnYWJyaWVsZS5tenRAZ21haWwuY29tPiwKLQkJUGFsaSBSb2jDoXIgPHBhbGkucm9oYXJAZ21haWwuY29tPgotRGVzY3JpcHRpb246Ci0JCVRoaXMgZmlsZSBhbGxvd3MgdG8gY29udHJvbCB0aGUgaW5wdXQgdHJpZ2dlcnMgdGhhdAotCQl0dXJuIG9uIHRoZSBrZXlib2FyZCBiYWNrbGlnaHQgaWxsdW1pbmF0aW9uIHRoYXQgaXMKLQkJZGlzYWJsZWQgYmVjYXVzZSBvZiBpbmFjdGl2aXR5LgotCQlSZWFkIHRoZSBmaWxlIHRvIHNlZSB0aGUgdHJpZ2dlcnMgYXZhaWxhYmxlLiBUaGUgb25lcwotCQllbmFibGVkIGFyZSBwcmVjZWRlZCBieSAnKycsIHRob3NlIGRpc2FibGVkIGJ5ICctJy4KLQotCQlUbyBlbmFibGUgYSB0cmlnZ2VyLCB3cml0ZSBpdHMgbmFtZSBwcmVjZWRlZCBieSAnKycgdG8KLQkJdGhpcyBmaWxlLiBUbyBkaXNhYmxlIGEgdHJpZ2dlciwgd3JpdGUgaXRzIG5hbWUgcHJlY2VkZWQKLQkJYnkgJy0nIGluc3RlYWQuCi0KLQkJRm9yIGV4YW1wbGUsIHRvIGVuYWJsZSB0aGUga2V5Ym9hcmQgYXMgdHJpZ2dlciBydW46Ci0JCSAgICBlY2hvICtrZXlib2FyZCA+IC9zeXMvY2xhc3MvbGVkcy9kZWxsOjprYmRfYmFja2xpZ2h0L3N0YXJ0X3RyaWdnZXJzCi0JCVRvIGRpc2FibGUgaXQ6Ci0JCSAgICBlY2hvIC1rZXlib2FyZCA+IC9zeXMvY2xhc3MvbGVkcy9kZWxsOjprYmRfYmFja2xpZ2h0L3N0YXJ0X3RyaWdnZXJzCi0KLQkJTm90ZSB0aGF0IG5vdCBhbGwgdGhlIGF2YWlsYWJsZSB0cmlnZ2VycyBjYW4gYmUgY29uZmlndXJlZC4KLQotV2hhdDoJCS9zeXMvY2xhc3MvbGVkcy9kZWxsOjprYmRfYmFja2xpZ2h0L3N0b3BfdGltZW91dAotRGF0ZToJCURlY2VtYmVyIDIwMTQKLUtlcm5lbFZlcnNpb246CTMuMTkKLUNvbnRhY3Q6CUdhYnJpZWxlIE1henpvdHRhIDxnYWJyaWVsZS5tenRAZ21haWwuY29tPiwKLQkJUGFsaSBSb2jDoXIgPHBhbGkucm9oYXJAZ21haWwuY29tPgotRGVzY3JpcHRpb246Ci0JCVRoaXMgZmlsZSBhbGxvd3MgdG8gc3BlY2lmeSB0aGUgaW50ZXJ2YWwgYWZ0ZXIgd2hpY2ggdGhlCi0JCWtleWJvYXJkIGlsbHVtaW5hdGlvbiBpcyBkaXNhYmxlZCBiZWNhdXNlIG9mIGluYWN0aXZpdHkuCi0JCVRoZSB0aW1lb3V0cyBhcmUgZXhwcmVzc2VkIGluIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzIGFuZAotCQlkYXlzLCBmb3Igd2hpY2ggdGhlIHN5bWJvbHMgYXJlICdzJywgJ20nLCAnaCcgYW5kICdkJwotCQlyZXNwZWN0aXZlbHkuCi0KLQkJVG8gY29uZmlndXJlIHRoZSB0aW1lb3V0LCB3cml0ZSB0byB0aGlzIGZpbGUgYSB2YWx1ZSBhbG9uZwotCQl3aXRoIGFueSB0aGUgYWJvdmUgdW5pdHMuIElmIG5vIHVuaXQgaXMgc3BlY2lmaWVkLCB0aGUgdmFsdWUKLQkJaXMgYXNzdW1lZCB0byBiZSBleHByZXNzZWQgaW4gc2Vjb25kcy4KLQotCQlGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSB0aW1lb3V0IHRvIDEwIG1pbnV0ZXMgcnVuOgotCQkgICAgZWNobyAxMG0gPiAvc3lzL2NsYXNzL2xlZHMvZGVsbDo6a2JkX2JhY2tsaWdodC9zdG9wX3RpbWVvdXQKLQotCQlOb3RlIHRoYXQgd2hlbiB0aGlzIGZpbGUgaXMgcmVhZCwgdGhlIHJldHVybmVkIHZhbHVlIG1pZ2h0IGJlCi0JCWV4cHJlc3NlZCBpbiBhIGRpZmZlcmVudCB1bml0IHRoYW4gdGhlIG9uZSB1c2VkIHdoZW4gdGhlIHRpbWVvdXQKLQkJd2FzIHNldC4KLQotCQlBbHNvIG5vdGUgdGhhdCBvbmx5IHNvbWUgdGltZW91dHMgYXJlIHN1cHBvcnRlZCBhbmQgdGhhdAotCQlzb21lIHN5c3RlbXMgbWlnaHQgZmFsbCBiYWNrIHRvIGEgc3BlY2lmaWMgdGltZW91dCBpbiBjYXNlCi0JCWFuIGludmFsaWQgdGltZW91dCBpcyB3cml0dGVuIHRvIHRoaXMgZmlsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtLWJvYXJkcyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtLWJvYXJkcwppbmRleCA1NTZjODY2Li5iNzg1NjRiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcm0tYm9hcmRzCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtLWJvYXJkcwpAQCAtMjMsNyArMjMsNyBAQAogICAgIHJhbmdlIG9mIDB4MjAwIGJ5dGVzLgogCiAtIHN5c2NvbjogdGhlIHJvb3Qgbm9kZSBvZiB0aGUgSW50ZWdyYXRvciBwbGF0Zm9ybXMgbXVzdCBoYXZlIGEKLSAgc3lzdGVtIGNvbnRyb2xsZXIgbm9kZSBwb2ludG9uZyB0byB0aGUgY29udHJvbCByZWdpc3RlcnMsCisgIHN5c3RlbSBjb250cm9sbGVyIG5vZGUgcG9pbnRpbmcgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzLAogICB3aXRoIHRoZSBjb21wYXRpYmxlIHN0cmluZwogICAiYXJtLGludGVncmF0b3ItYXAtc3lzY29uIgogICAiYXJtLGludGVncmF0b3ItY3Atc3lzY29uIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9mdy1jZmcudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9mdy1jZmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1M2ZiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2Z3LWNmZy50eHQKQEAgLTAsMCArMSw3MiBAQAorKiBRRU1VIEZpcm13YXJlIENvbmZpZ3VyYXRpb24gYmluZGluZ3MgZm9yIEFSTQorCitRRU1VJ3MgYXJtLXNvZnRtbXUgYW5kIGFhcmNoNjQtc29mdG1tdSBlbXVsYXRpb24gLyB2aXJ0dWFsaXphdGlvbiB0YXJnZXRzCitwcm92aWRlIHRoZSBmb2xsb3dpbmcgRmlybXdhcmUgQ29uZmlndXJhdGlvbiBpbnRlcmZhY2Ugb24gdGhlICJ2aXJ0IiBtYWNoaW5lCit0eXBlOgorCistIEEgd3JpdGUtb25seSwgMTYtYml0IHdpZGUgc2VsZWN0b3IgKG9yIGNvbnRyb2wpIHJlZ2lzdGVyLAorLSBhIHJlYWQtd3JpdGUsIDY0LWJpdCB3aWRlIGRhdGEgcmVnaXN0ZXIuCisKK1FFTVUgZXhwb3NlcyB0aGUgY29udHJvbCBhbmQgZGF0YSByZWdpc3RlciB0byBBUk0gZ3Vlc3RzIGFzIG1lbW9yeSBtYXBwZWQKK3JlZ2lzdGVyczsgdGhlaXIgbG9jYXRpb24gaXMgY29tbXVuaWNhdGVkIHRvIHRoZSBndWVzdCdzIFVFRkkgZmlybXdhcmUgaW4gdGhlCitEVEIgdGhhdCBRRU1VIHBsYWNlcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBndWVzdCdzIERSQU0uCisKK1RoZSBndWVzdCB3cml0ZXMgYSBzZWxlY3RvciB2YWx1ZSAoYSBrZXkpIHRvIHRoZSBzZWxlY3RvciByZWdpc3RlciwgYW5kIHRoZW4KK2NhbiByZWFkIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgKHByb2R1Y2VkIGJ5IFFFTVUpIHZpYSB0aGUgZGF0YSByZWdpc3Rlci4gSWYKK3RoZSBzZWxlY3RlZCBlbnRyeSBpcyB3cml0YWJsZSwgdGhlIGd1ZXN0IGNhbiByZXdyaXRlIGl0IHRocm91Z2ggdGhlIGRhdGEKK3JlZ2lzdGVyLgorCitUaGUgc2VsZWN0b3IgcmVnaXN0ZXIgdGFrZXMga2V5cyBpbiBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuCisKK1RoZSBkYXRhIHJlZ2lzdGVyIGFsbG93cyBhY2Nlc3NlcyB3aXRoIDgsIDE2LCAzMiBhbmQgNjQtYml0IHdpZHRoIChvbmx5IGF0CitvZmZzZXQgMCBvZiB0aGUgcmVnaXN0ZXIpLiBBY2Nlc3NlcyBsYXJnZXIgdGhhbiBhIGJ5dGUgYXJlIGludGVycHJldGVkIGFzCithcnJheXMsIGJ1bmRsZWQgdG9nZXRoZXIgb25seSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLiBUaGUgYnl0ZXMgY29uc3RpdHV0aW5nCitzdWNoIGEgd29yZCwgaW4gaW5jcmVhc2luZyBhZGRyZXNzIG9yZGVyLCBjb3JyZXNwb25kIHRvIHRoZSBieXRlcyB0aGF0IHdvdWxkCitoYXZlIGJlZW4gdHJhbnNmZXJyZWQgYnkgYnl0ZS13aWRlIGFjY2Vzc2VzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKK1RoZSBpbnRlcmZhY2UgYWxsb3dzIGd1ZXN0IGZpcm13YXJlIHRvIGRvd25sb2FkIHZhcmlvdXMgcGFyYW1ldGVycyBhbmQgYmxvYnMKK3RoYXQgYWZmZWN0IGhvdyB0aGUgZmlybXdhcmUgd29ya3MgYW5kIHdoYXQgdGFibGVzIGl0IGluc3RhbGxzIGZvciB0aGUgZ3Vlc3QKK09TLiBGb3IgZXhhbXBsZSwgYm9vdCBvcmRlciBvZiBkZXZpY2VzLCBBQ1BJIHRhYmxlcywgU01CSU9TIHRhYmxlcywga2VybmVsIGFuZAoraW5pdHJkIGltYWdlcyBmb3IgZGlyZWN0IGtlcm5lbCBib290aW5nLCB2aXJ0dWFsIG1hY2hpbmUgVVVJRCwgU01QIGluZm9ybWF0aW9uLAordmlydHVhbCBOVU1BIHRvcG9sb2d5LCBhbmQgc28gb24uCisKK1RoZSBhdXRob3JpdGF0aXZlIHJlZ2lzdHJ5IG9mIHRoZSB2YWxpZCBzZWxlY3RvciB2YWx1ZXMgYW5kIHRoZWlyIG1lYW5pbmdzIGlzCit0aGUgUUVNVSBzb3VyY2UgY29kZTsgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBibG9icyBjb3JyZXNwb25kaW5nIHRvIHRoZQoraW5kaXZpZHVhbCBrZXkgdmFsdWVzIGlzIGFsc28gZGVmaW5lZCBpbiB0aGUgUUVNVSBzb3VyY2UgY29kZS4KKworVGhlIHByZXNlbmNlIG9mIHRoZSByZWdpc3RlcnMgY2FuIGJlIHZlcmlmaWVkIGJ5IHNlbGVjdGluZyB0aGUgInNpZ25hdHVyZSIgYmxvYgord2l0aCBrZXkgMHgwMDAwLCBhbmQgcmVhZGluZyBmb3VyIGJ5dGVzIGZyb20gdGhlIGRhdGEgcmVnaXN0ZXIuIFRoZSByZXR1cm5lZAorc2lnbmF0dXJlIGlzICJRRU1VIi4KKworVGhlIG91dGVybW9zdCBwcm90b2NvbCAoaW52b2x2aW5nIHRoZSB3cml0ZSAvIHJlYWQgc2VxdWVuY2VzIG9mIHRoZSBjb250cm9sIGFuZAorZGF0YSByZWdpc3RlcnMpIGlzIGV4cGVjdGVkIHRvIGJlIHZlcnNpb25lZCwgYW5kL29yIGRlc2NyaWJlZCBieSBmZWF0dXJlIGJpdHMuCitUaGUgaW50ZXJmYWNlIHJldmlzaW9uIC8gZmVhdHVyZSBiaXRtYXAgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGtleSAweDAwMDEuIFRoZQorYmxvYiB0byBiZSByZWFkIGZyb20gdGhlIGRhdGEgcmVnaXN0ZXIgaGFzIHNpemUgNCwgYW5kIGl0IGlzIHRvIGJlIGludGVycHJldGVkCithcyBhIHVpbnQzMl90IHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci4gVGhlIGN1cnJlbnQgdmFsdWUKKyhjb3JyZXNwb25kaW5nIHRvIHRoZSBhYm92ZSBvdXRlciBwcm90b2NvbCkgaXMgemVyby4KKworVGhlIGd1ZXN0IGtlcm5lbCBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIHRoZXNlIHJlZ2lzdGVycyAoYWx0aG91Z2ggaXQgaXMKK2NlcnRhaW5seSBhbGxvd2VkIHRvKTsgdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzIGFyZSBkb2N1bWVudGVkIGhlcmUgYmVjYXVzZQordGhpcyBpcyB3aGVyZSBkZXZpY2UgdHJlZSBiaW5kaW5ncyByZXNpZGUgaW4gZ2VuZXJhbC4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKworLSBjb21wYXRpYmxlOiAicWVtdSxmdy1jZmctbW1pbyIuCisKKy0gcmVnOiB0aGUgTU1JTyByZWdpb24gdXNlZCBieSB0aGUgZGV2aWNlLgorICAqIEJ5dGVzIDB4MCB0byAweDcgY292ZXIgdGhlIGRhdGEgcmVnaXN0ZXIuCisgICogQnl0ZXMgMHg4IHRvIDB4OSBjb3ZlciB0aGUgc2VsZWN0b3IgcmVnaXN0ZXIuCisgICogRnVydGhlciByZWdpc3RlcnMgbWF5IGJlIGFwcGVuZGVkIHRvIHRoZSByZWdpb24gaW4gY2FzZSBvZiBmdXR1cmUgaW50ZXJmYWNlCisgICAgcmV2aXNpb25zIC8gZmVhdHVyZSBiaXRzLgorCitFeGFtcGxlOgorCisvIHsKKwkjc2l6ZS1jZWxscyA9IDwweDI+OworCSNhZGRyZXNzLWNlbGxzID0gPDB4Mj47CisKKwlmdy1jZmdAOTAyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicWVtdSxmdy1jZmctbW1pbyI7CisJCXJlZyA9IDwweDAgMHg5MDIwMDAwIDB4MCAweGE+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dyYXBoLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncmFwaC50eHQKaW5kZXggMWE2OWMwNy4uZmNiMWM2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dyYXBoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3JhcGgudHh0CkBAIC0xOSw3ICsxOSw3IEBACiBtYXkgYmUgZGVzY3JpYmVkIGJ5IHNwZWNpYWxpemVkIGJpbmRpbmdzIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjb25uZWN0aW9uLgogCiBUbyBzZWUgaG93IHRoaXMgYmluZGluZyBhcHBsaWVzIHRvIHZpZGVvIHBpcGVsaW5lcywgZm9yIGV4YW1wbGUsIHNlZQotRG9jdW1lbnRhdGlvbi9kZXZpY2UtdHJlZS9iaW5kaW5ncy9tZWRpYS92aWRlby1pbnRlcmZhY2VzLnR4dC4KK0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS92aWRlby1pbnRlcmZhY2VzLnR4dC4KIEhlcmUgdGhlIHBvcnRzIGRlc2NyaWJlIGRhdGEgaW50ZXJmYWNlcywgYW5kIHRoZSBsaW5rcyBiZXR3ZWVuIHRoZW0gYXJlCiB0aGUgY29ubmVjdGluZyBkYXRhIGJ1c2VzLiBBIHNpbmdsZSBwb3J0IHdpdGggbXVsdGlwbGUgY29ubmVjdGlvbnMgY2FuCiBjb3JyZXNwb25kIHRvIG11bHRpcGxlIGRldmljZXMgYmVpbmcgY29ubmVjdGVkIHRvIHRoZSBzYW1lIHBoeXNpY2FsIGJ1cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXN0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXN0LnR4dAppbmRleCA0MzdlMGRiLi40YzI2ZmRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2kyYy1zdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9pMmMtc3QudHh0CkBAIC0zMSw3ICszMSw3IEBACiAJY29tcGF0aWJsZQk9ICJzdCxjb21tcy1zc2M0LWkyYyI7CiAJcmVnCQk9IDwweGZlZDQwMDAwIDB4MTEwPjsKIAlpbnRlcnJ1cHRzCT0gIDxHSUNfU1BJIDE4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQljbG9ja3MJCT0gPCZDTEtfU19JQ05fUkVHXzA+OworCWNsb2NrcwkJPSA8JmNsa19zX2EwX2xzIENMS19JQ05fUkVHPjsKIAljbG9jay1uYW1lcwk9ICJzc2MiOwogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCXBpbmN0cmwtbmFtZXMJPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQKaW5kZXggOWY0ZTM4Mi4uOWY0MWQwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dApAQCAtNDcsNiArNDcsNyBAQAogZGFsbGFzLGRzNDUxMAkJQ1BVIFN1cGVydmlzb3Igd2l0aCBOb252b2xhdGlsZSBNZW1vcnkgYW5kIFByb2dyYW1tYWJsZSBJL08KIGRhbGxhcyxkczc1CQlEaWdpdGFsIFRoZXJtb21ldGVyIGFuZCBUaGVybW9zdGF0CiBkbGcsZGE5MDUzCQlEQTkwNTM6IGZsZXhpYmxlIHN5c3RlbSBsZXZlbCBQTUlDIHdpdGggbXVsdGljb3JlIHN1cHBvcnQKK2RsZyxkYTkwNjMJCURBOTA2Mzogc3lzdGVtIFBNSUMgZm9yIHF1YWQtY29yZSBhcHBsaWNhdGlvbiBwcm9jZXNzb3JzCiBlcHNvbixyeDgwMjUJCUhpZ2gtU3RhYmlsaXR5LiBJMkMtQnVzIElOVEVSRkFDRSBSRUFMIFRJTUUgQ0xPQ0sgTU9EVUxFCiBlcHNvbixyeDg1ODEJCUkyQy1CVVMgSU5URVJGQUNFIFJFQUwgVElNRSBDTE9DSyBNT0RVTEUKIGZzbCxtYWczMTEwCQlNQUczMTEwOiBYdHJpbnNpYyBIaWdoIEFjY3VyYWN5LCAzRCBNYWduZXRvbWV0ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC9ncGlvLWtleXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L2dwaW8ta2V5cy50eHQKaW5kZXggYTRhMzhmYy4uNDRiNzA1NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L2dwaW8ta2V5cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L2dwaW8ta2V5cy50eHQKQEAgLTEwLDEyICsxMCwxMyBAQAogRWFjaCBidXR0b24gKGtleSkgaXMgcmVwcmVzZW50ZWQgYXMgYSBzdWItbm9kZSBvZiAiZ3Bpby1rZXlzIjoKIFN1Ym5vZGUgcHJvcGVydGllczoKIAorCS0gZ3Bpb3M6IE9GIGRldmljZS10cmVlIGdwaW8gc3BlY2lmaWNhdGlvbi4KKwktIGludGVycnVwdHM6IHRoZSBpbnRlcnJ1cHQgbGluZSBmb3IgdGhhdCBpbnB1dC4KIAktIGxhYmVsOiBEZXNjcmlwdGl2ZSBuYW1lIG9mIHRoZSBrZXkuCiAJLSBsaW51eCxjb2RlOiBLZXljb2RlIHRvIGVtaXQuCiAKLVJlcXVpcmVkIG11dHVhbCBleGNsdXNpdmUgc3Vibm9kZS1wcm9wZXJ0aWVzOgotCS0gZ3Bpb3M6IE9GIGRldmljZS10cmVlIGdwaW8gc3BlY2lmaWNhdGlvbi4KLQktIGludGVycnVwdHM6IHRoZSBpbnRlcnJ1cHQgbGluZSBmb3IgdGhhdCBpbnB1dAorTm90ZSB0aGF0IGVpdGhlciAiaW50ZXJydXB0cyIgb3IgImdwaW9zIiBwcm9wZXJ0aWVzIGNhbiBiZSBvbWl0dGVkLCBidXQgbm90Citib3RoIGF0IHRoZSBzYW1lIHRpbWUuIFNwZWNpZnlpbmcgYm90aCBwcm9wZXJ0aWVzIGlzIGFsbG93ZWQuCiAKIE9wdGlvbmFsIHN1Ym5vZGUtcHJvcGVydGllczoKIAktIGxpbnV4LGlucHV0LXR5cGU6IFNwZWNpZnkgZXZlbnQgdHlwZSB0aGlzIGJ1dHRvbi9rZXkgZ2VuZXJhdGVzLgpAQCAtMjMsNiArMjQsOSBAQAogCS0gZGVib3VuY2UtaW50ZXJ2YWw6IERlYm91bmNpbmcgaW50ZXJ2YWwgdGltZSBpbiBtaWxsaXNlY29uZHMuCiAJICBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRzIHRvIDUuCiAJLSBncGlvLWtleSx3YWtldXA6IEJvb2xlYW4sIGJ1dHRvbiBjYW4gd2FrZS11cCB0aGUgc3lzdGVtLgorCS0gbGludXgsY2FuLWRpc2FibGU6IEJvb2xlYW4sIGluZGljYXRlcyB0aGF0IGJ1dHRvbiBpcyBjb25uZWN0ZWQKKwkgIHRvIGRlZGljYXRlZCAobm90IHNoYXJlZCkgaW50ZXJydXB0IHdoaWNoIGNhbiBiZSBkaXNhYmxlZCB0bworCSAgc3VwcHJlc3MgZXZlbnRzIGZyb20gdGhlIGJ1dHRvbi4KIAogRXhhbXBsZSBub2RlczoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3N0bXBlLWtleXBhZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvc3RtcGUta2V5cGFkLnR4dAppbmRleCAxYjk3MjIyLi4xMmJiNzcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvc3RtcGUta2V5cGFkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvc3RtcGUta2V5cGFkLnR4dApAQCAtOCw2ICs4LDggQEAKICAtIGRlYm91bmNlLWludGVydmFsICAgICAgICA6IERlYm91bmNpbmcgaW50ZXJ2YWwgdGltZSBpbiBtaWxsaXNlY29uZHMKICAtIHN0LHNjYW4tY291bnQgICAgICAgICAgICA6IFNjYW5uaW5nIGN5Y2xlcyBlbGFwc2VkIGJlZm9yZSBrZXkgZGF0YSBpcyB1cGRhdGVkCiAgLSBzdCxuby1hdXRvcmVwZWF0ICAgICAgICAgOiBJZiBzcGVjaWZpZWQgZGV2aWNlIHdpbGwgbm90IGF1dG9yZXBlYXQKKyAtIGtleXBhZCxudW0tcm93cyAgICAgICAgICA6IFNlZSAuL21hdHJpeC1rZXltYXAudHh0CisgLSBrZXlwYWQsbnVtLWNvbHVtbnMgICAgICAgOiBTZWUgLi9tYXRyaXgta2V5bWFwLnR4dAogCiBFeGFtcGxlOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RhdmluY2lfZW1hYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RhdmluY2lfZW1hYy50eHQKaW5kZXggMDMyODA4OC4uMjRjNWNkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXZpbmNpX2VtYWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGF2aW5jaV9lbWFjLnR4dApAQCAtNCw3ICs0LDggQEAKIGZvciB0aGUgZGF2aW5jaV9lbWFjIGludGVyZmFjZSBjb250YWlucy4KIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZTogInRpLGRhdmluY2ktZG02NDY3LWVtYWMiIG9yICJ0aSxhbTM1MTctZW1hYyIKKy0gY29tcGF0aWJsZTogInRpLGRhdmluY2ktZG02NDY3LWVtYWMiLCAidGksYW0zNTE3LWVtYWMiIG9yCisgICJ0aSxkbTgxNi1lbWFjIgogLSByZWc6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UKIC0gdGksZGF2aW5jaS1jdHJsLXJlZy1vZmZzZXQ6IG9mZnNldCB0byBjb250cm9sIHJlZ2lzdGVyCiAtIHRpLGRhdmluY2ktY3RybC1tb2QtcmVnLW9mZnNldDogb2Zmc2V0IHRvIGNvbnRyb2wgbW9kdWxlIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NoLW1zaW9mLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc2gtbXNpb2YudHh0CmluZGV4IGQxMWMzNzIuLjRjMzg4YmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc2gtbXNpb2YudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc2gtbXNpb2YudHh0CkBAIC0zMCw2ICszMCwyMiBAQAogCQkJIHNwZWNpZmllcnMsIG9uZSBmb3IgdHJhbnNtaXNzaW9uLCBhbmQgb25lIGZvcgogCQkJIHJlY2VwdGlvbi4KIC0gZG1hLW5hbWVzICAgICAgICAgICAgOiBNdXN0IGNvbnRhaW4gYSBsaXN0IG9mIHR3byBETUEgbmFtZXMsICJ0eCIgYW5kICJyeCIuCistIHJlbmVzYXMsZHRkbCAgICAgICAgIDogZGVsYXkgc3luYyBzaWduYWwgKHNldHVwKSBpbiB0cmFuc21pdCBtb2RlLgorCQkJIE11c3QgY29udGFpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisJCQkgMCAgIChubyBiaXQgZGVsYXkpCisJCQkgNTAgICgwLjUtY2xvY2stY3ljbGUgZGVsYXkpCisJCQkgMTAwICgxLWNsb2NrLWN5Y2xlIGRlbGF5KQorCQkJIDE1MCAoMS41LWNsb2NrLWN5Y2xlIGRlbGF5KQorCQkJIDIwMCAoMi1jbG9jay1jeWNsZSBkZWxheSkKKworLSByZW5lc2FzLHN5bmNkbCAgICAgICA6IGRlbGF5IHN5bmMgc2lnbmFsIChob2xkKSBpbiB0cmFuc21pdCBtb2RlLgorCQkJIE11c3QgY29udGFpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisJCQkgMCAgIChubyBiaXQgZGVsYXkpCisJCQkgNTAgICgwLjUtY2xvY2stY3ljbGUgZGVsYXkpCisJCQkgMTAwICgxLWNsb2NrLWN5Y2xlIGRlbGF5KQorCQkJIDE1MCAoMS41LWNsb2NrLWN5Y2xlIGRlbGF5KQorCQkJIDIwMCAoMi1jbG9jay1jeWNsZSBkZWxheSkKKwkJCSAzMDAgKDMtY2xvY2stY3ljbGUgZGVsYXkpCiAKIE9wdGlvbmFsIHByb3BlcnRpZXMsIGRlcHJlY2F0ZWQgZm9yIHNvY3R5cGUtc3BlY2lmaWMgYmluZGluZ3M6CiAtIHJlbmVzYXMsdHgtZmlmby1zaXplIDogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHR4IGZpZm8gc2l6ZSBnaXZlbiBpbiB3b3JkcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZlbmRvci1wcmVmaXhlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dAppbmRleCBiMWRmMGFkLi5kNDQzMjc5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dApAQCAtOSw3ICs5LDYgQEAKIGFkYXB0ZXZhCUFkYXB0ZXZhLCBJbmMuCiBhZGkJQW5hbG9nIERldmljZXMsIEluYy4KIGFlcm9mbGV4Z2Fpc2xlcglBZXJvZmxleCBHYWlzbGVyIEFCCi1hawlBc2FoaSBLYXNlaSBDb3JwLgogYWxsd2lubmVyCUFsbHdpbm5lciBUZWNobm9sb2d5IENvLiwgTHRkLgogYWx0cglBbHRlcmEgQ29ycC4KIGFtY2MJQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbiAoQVBNLCBmb3JtYWxseSBBTUNDKQpAQCAtMjAsNiArMTksNyBAQAogYXBtCUFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24gKEFQTSkKIGFybQlBUk0gTHRkLgogYXJtYWRldXMJQVJNYWRldXMgU3lzdGVtcyBTQVJMCithc2FoaS1rYXNlaQlBc2FoaSBLYXNlaSBDb3JwLgogYXRtZWwJQXRtZWwgQ29ycG9yYXRpb24KIGF1bwlBVSBPcHRyb25pY3MgQ29ycG9yYXRpb24KIGF2YWdvCUF2YWdvIFRlY2hub2xvZ2llcwpAQCAtMTI3LDYgKzEyNyw3IEBACiBwb3dlcnZyCVBvd2VyVlIgKGRlcHJlY2F0ZWQsIHVzZSBpbWcpCiBxY2EJUXVhbGNvbW0gQXRoZXJvcywgSW5jLgogcWNvbQlRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYworcWVtdQlRRU1VLCBhIGdlbmVyaWMgYW5kIG9wZW4gc291cmNlIG1hY2hpbmUgZW11bGF0b3IgYW5kIHZpcnR1YWxpemVyCiBxbmFwCVFOQVAgU3lzdGVtcywgSW5jLgogcmFkeGEJUmFkeGEKIHJhaWRzb25pYwlSYWlkU29uaWMgVGVjaG5vbG9neSBHbWJICkBAIC0xNjgsNiArMTY5LDcgQEAKIHYzCVYzIFNlbWljb25kdWN0b3IKIHZhcmlzY2l0ZQlWYXJpc2NpdGUgTHRkLgogdmlhCVZJQSBUZWNobm9sb2dpZXMsIEluYy4KK3ZpcnRpbwlWaXJ0dWFsIEkvTyBEZXZpY2UgU3BlY2lmaWNhdGlvbiwgZGV2ZWxvcGVkIGJ5IHRoZSBPQVNJUyBjb25zb3J0aXVtCiB2b2lwYWMJVm9pcGFjIFRlY2hub2xvZ2llcyBzLnIuby4KIHdpbmJvbmQgV2luYm9uZCBFbGVjdHJvbmljcyBjb3JwLgogd2xmCVdvbGZzb24gTWljcm9lbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA0ZGY3M2RhLi4xNzZkNGZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTI3Nyw2ICsxMjc3LDcgQEAKIAlpODA0Mi5ub3RpbWVvdXQJW0hXXSBJZ25vcmUgdGltZW91dCBjb25kaXRpb24gc2lnbmFsbGVkIGJ5IGNvbnRyb2xsZXIKIAlpODA0Mi5yZXNldAlbSFddIFJlc2V0IHRoZSBjb250cm9sbGVyIGR1cmluZyBpbml0IGFuZCBjbGVhbnVwCiAJaTgwNDIudW5sb2NrCVtIV10gVW5sb2NrIChpZ25vcmUpIHRoZSBrZXlsb2NrCisJaTgwNDIua2JkcmVzZXQgIFtIV10gUmVzZXQgZGV2aWNlIGNvbm5lY3RlZCB0byBLQkQgcG9ydAogCiAJaTgxMD0JCVtIVyxEUk1dCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggOWJmZmRmYy4uODViMDIyMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTY2LDYgKzY2LDggQEAKIHJvdXRlL21heF9zaXplIC0gSU5URUdFUgogCU1heGltdW0gbnVtYmVyIG9mIHJvdXRlcyBhbGxvd2VkIGluIHRoZSBrZXJuZWwuICBJbmNyZWFzZQogCXRoaXMgd2hlbiB1c2luZyBsYXJnZSBudW1iZXJzIG9mIGludGVyZmFjZXMgYW5kL29yIHJvdXRlcy4KKwlGcm9tIGxpbnV4IGtlcm5lbCAzLjYgb253YXJkcywgdGhpcyBpcyBkZXByZWNhdGVkIGZvciBpcHY0CisJYXMgcm91dGUgY2FjaGUgaXMgbm8gbG9uZ2VyIHVzZWQuCiAKIG5laWdoL2RlZmF1bHQvZ2NfdGhyZXNoMSAtIElOVEVHRVIKIAlNaW5pbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIGtlZXAuICBHYXJiYWdlIGNvbGxlY3RvciB3aWxsIG5vdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90YXJnZXQvdGNtX21vZF9idWlsZGVyLnB5IGIvRG9jdW1lbnRhdGlvbi90YXJnZXQvdGNtX21vZF9idWlsZGVyLnB5CmluZGV4IDIzMGNlNzEuLjJiNDc3MDQgMTAwNzU1Ci0tLSBhL0RvY3VtZW50YXRpb24vdGFyZ2V0L3RjbV9tb2RfYnVpbGRlci5weQorKysgYi9Eb2N1bWVudGF0aW9uL3RhcmdldC90Y21fbW9kX2J1aWxkZXIucHkKQEAgLTM4OSw5ICszODksNiBAQAogCWJ1ZiArPSAiCS5yZWxlYXNlX2NtZAkJCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfcmVsZWFzZV9jbWQsXG4iCiAJYnVmICs9ICIJLnNodXRkb3duX3Nlc3Npb24JCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfc2h1dGRvd25fc2Vzc2lvbixcbiIKIAlidWYgKz0gIgkuY2xvc2Vfc2Vzc2lvbgkJCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfY2xvc2Vfc2Vzc2lvbixcbiIKLQlidWYgKz0gIgkuc3RvcF9zZXNzaW9uCQkJPSAiICsgZmFicmljX21vZF9uYW1lICsgIl9zdG9wX3Nlc3Npb24sXG4iCi0JYnVmICs9ICIJLmZhbGxfYmFja190b19lcmwwCQk9ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3Jlc2V0X25leHVzLFxuIgotCWJ1ZiArPSAiCS5zZXNzX2xvZ2dlZF9pbgkJCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfc2Vzc19sb2dnZWRfaW4sXG4iCiAJYnVmICs9ICIJLnNlc3NfZ2V0X2luZGV4CQkJPSAiICsgZmFicmljX21vZF9uYW1lICsgIl9zZXNzX2dldF9pbmRleCxcbiIKIAlidWYgKz0gIgkuc2Vzc19nZXRfaW5pdGlhdG9yX3NpZAkJPSBOVUxMLFxuIgogCWJ1ZiArPSAiCS53cml0ZV9wZW5kaW5nCQkJPSAiICsgZmFicmljX21vZF9uYW1lICsgIl93cml0ZV9wZW5kaW5nLFxuIgpAQCAtNDAyLDcgKzM5OSw3IEBACiAJYnVmICs9ICIJLnF1ZXVlX2RhdGFfaW4JCQk9ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX2RhdGFfaW4sXG4iCiAJYnVmICs9ICIJLnF1ZXVlX3N0YXR1cwkJCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfcXVldWVfc3RhdHVzLFxuIgogCWJ1ZiArPSAiCS5xdWV1ZV90bV9yc3AJCQk9ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX3RtX3JzcCxcbiIKLQlidWYgKz0gIgkuaXNfc3RhdGVfcmVtb3ZlCQk9ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX2lzX3N0YXRlX3JlbW92ZSxcbiIKKwlidWYgKz0gIgkuYWJvcnRlZF90YXNrCQkJPSAiICsgZmFicmljX21vZF9uYW1lICsgIl9hYm9ydGVkX3Rhc2ssXG4iCiAJYnVmICs9ICIJLypcbiIKIAlidWYgKz0gIgkgKiBTZXR1cCBmdW5jdGlvbiBwb2ludGVycyBmb3IgZ2VuZXJpYyBsb2dpYyBpbiB0YXJnZXRfY29yZV9mYWJyaWNfY29uZmlnZnMuY1xuIgogCWJ1ZiArPSAiCSAqL1xuIgpAQCAtNDI4LDcgKzQyNSw3IEBACiAJYnVmICs9ICIJLypcbiIKIAlidWYgKz0gIgkgKiBSZWdpc3RlciB0aGUgdG9wIGxldmVsIHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHdpdGggVENNIGNvcmVcbiIKIAlidWYgKz0gIgkgKi9cbiIKLQlidWYgKz0gIglmYWJyaWMgPSB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzX2luaXQoVEhJU19NT0RVTEUsIFwiIiArIGZhYnJpY19tb2RfbmFtZVs0Ol0gKyAiXCIpO1xuIgorCWJ1ZiArPSAiCWZhYnJpYyA9IHRhcmdldF9mYWJyaWNfY29uZmlnZnNfaW5pdChUSElTX01PRFVMRSwgXCIiICsgZmFicmljX21vZF9uYW1lICsgIlwiKTtcbiIKIAlidWYgKz0gIglpZiAoSVNfRVJSKGZhYnJpYykpIHtcbiIKIAlidWYgKz0gIgkJcHJpbnRrKEtFUk5fRVJSIFwidGFyZ2V0X2ZhYnJpY19jb25maWdmc19pbml0KCkgZmFpbGVkXFxuXCIpO1xuIgogCWJ1ZiArPSAiCQlyZXR1cm4gUFRSX0VSUihmYWJyaWMpO1xuIgpAQCAtNTk1LDcgKzU5Miw3IEBACiAJCWlmIHJlLnNlYXJjaCgnZ2V0X2ZhYnJpY19uYW1lJywgZm8pOgogCQkJYnVmICs9ICJjaGFyICoiICsgZmFicmljX21vZF9uYW1lICsgIl9nZXRfZmFicmljX25hbWUodm9pZClcbiIKIAkJCWJ1ZiArPSAie1xuIgotCQkJYnVmICs9ICIJcmV0dXJuIFwiIiArIGZhYnJpY19tb2RfbmFtZVs0Ol0gKyAiXCI7XG4iCisJCQlidWYgKz0gIglyZXR1cm4gXCIiICsgZmFicmljX21vZF9uYW1lICsgIlwiO1xuIgogCQkJYnVmICs9ICJ9XG5cbiIKIAkJCWJ1ZmkgKz0gImNoYXIgKiIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX2dldF9mYWJyaWNfbmFtZSh2b2lkKTtcbiIKIAkJCWNvbnRpbnVlCkBAIC04MjAsMjcgKzgxNyw2IEBACiAJCQlidWYgKz0gIn1cblxuIgogCQkJYnVmaSArPSAidm9pZCAiICsgZmFicmljX21vZF9uYW1lICsgIl9jbG9zZV9zZXNzaW9uKHN0cnVjdCBzZV9zZXNzaW9uICopO1xuIgogCi0JCWlmIHJlLnNlYXJjaCgnc3RvcF9zZXNzaW9uXClcKCcsIGZvKToKLQkJCWJ1ZiArPSAidm9pZCAiICsgZmFicmljX21vZF9uYW1lICsgIl9zdG9wX3Nlc3Npb24oc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MsIGludCBzZXNzX3NsZWVwICwgaW50IGNvbm5fc2xlZXApXG4iCi0JCQlidWYgKz0gIntcbiIKLQkJCWJ1ZiArPSAiCXJldHVybjtcbiIKLQkJCWJ1ZiArPSAifVxuXG4iCi0JCQlidWZpICs9ICJ2b2lkICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3N0b3Bfc2Vzc2lvbihzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqLCBpbnQsIGludCk7XG4iCi0KLQkJaWYgcmUuc2VhcmNoKCdmYWxsX2JhY2tfdG9fZXJsMFwpXCgnLCBmbyk6Ci0JCQlidWYgKz0gInZvaWQgIiArIGZhYnJpY19tb2RfbmFtZSArICJfcmVzZXRfbmV4dXMoc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MpXG4iCi0JCQlidWYgKz0gIntcbiIKLQkJCWJ1ZiArPSAiCXJldHVybjtcbiIKLQkJCWJ1ZiArPSAifVxuXG4iCi0JCQlidWZpICs9ICJ2b2lkICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3Jlc2V0X25leHVzKHN0cnVjdCBzZV9zZXNzaW9uICopO1xuIgotCi0JCWlmIHJlLnNlYXJjaCgnc2Vzc19sb2dnZWRfaW5cKVwoJywgZm8pOgotCQkJYnVmICs9ICJpbnQgIiArIGZhYnJpY19tb2RfbmFtZSArICJfc2Vzc19sb2dnZWRfaW4oc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MpXG4iCi0JCQlidWYgKz0gIntcbiIKLQkJCWJ1ZiArPSAiCXJldHVybiAwO1xuIgotCQkJYnVmICs9ICJ9XG5cbiIKLQkJCWJ1ZmkgKz0gImludCAiICsgZmFicmljX21vZF9uYW1lICsgIl9zZXNzX2xvZ2dlZF9pbihzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqKTtcbiIKLQogCQlpZiByZS5zZWFyY2goJ3Nlc3NfZ2V0X2luZGV4XClcKCcsIGZvKToKIAkJCWJ1ZiArPSAidTMyICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3Nlc3NfZ2V0X2luZGV4KHN0cnVjdCBzZV9zZXNzaW9uICpzZV9zZXNzKVxuIgogCQkJYnVmICs9ICJ7XG4iCkBAIC04OTgsMTkgKzg3NCwxOCBAQAogCQkJYnVmaSArPSAiaW50ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX3N0YXR1cyhzdHJ1Y3Qgc2VfY21kICopO1xuIgogCiAJCWlmIHJlLnNlYXJjaCgncXVldWVfdG1fcnNwXClcKCcsIGZvKToKLQkJCWJ1ZiArPSAiaW50ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX3RtX3JzcChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG4iCisJCQlidWYgKz0gInZvaWQgIiArIGZhYnJpY19tb2RfbmFtZSArICJfcXVldWVfdG1fcnNwKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcbiIKIAkJCWJ1ZiArPSAie1xuIgotCQkJYnVmICs9ICIJcmV0dXJuIDA7XG4iCisJCQlidWYgKz0gIglyZXR1cm47XG4iCiAJCQlidWYgKz0gIn1cblxuIgotCQkJYnVmaSArPSAiaW50ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX3RtX3JzcChzdHJ1Y3Qgc2VfY21kICopO1xuIgorCQkJYnVmaSArPSAidm9pZCAiICsgZmFicmljX21vZF9uYW1lICsgIl9xdWV1ZV90bV9yc3Aoc3RydWN0IHNlX2NtZCAqKTtcbiIKIAotCQlpZiByZS5zZWFyY2goJ2lzX3N0YXRlX3JlbW92ZVwpXCgnLCBmbyk6Ci0JCQlidWYgKz0gImludCAiICsgZmFicmljX21vZF9uYW1lICsgIl9pc19zdGF0ZV9yZW1vdmUoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuIgorCQlpZiByZS5zZWFyY2goJ2Fib3J0ZWRfdGFza1wpXCgnLCBmbyk6CisJCQlidWYgKz0gInZvaWQgIiArIGZhYnJpY19tb2RfbmFtZSArICJfYWJvcnRlZF90YXNrKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcbiIKIAkJCWJ1ZiArPSAie1xuIgotCQkJYnVmICs9ICIJcmV0dXJuIDA7XG4iCisJCQlidWYgKz0gIglyZXR1cm47XG4iCiAJCQlidWYgKz0gIn1cblxuIgotCQkJYnVmaSArPSAiaW50ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX2lzX3N0YXRlX3JlbW92ZShzdHJ1Y3Qgc2VfY21kICopO1xuIgotCisJCQlidWZpICs9ICJ2b2lkICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX2Fib3J0ZWRfdGFzayhzdHJ1Y3Qgc2VfY21kICopO1xuIgogCiAJcmV0ID0gcC53cml0ZShidWYpCiAJaWYgcmV0OgpAQCAtMTAxOCwxMSArOTkzLDExIEBACiAJdGNtX21vZF9idWlsZF9rYnVpbGQoZmFicmljX21vZF9kaXIsIGZhYnJpY19tb2RfbmFtZSkKIAl0Y21fbW9kX2J1aWxkX2tjb25maWcoZmFicmljX21vZF9kaXIsIGZhYnJpY19tb2RfbmFtZSkKIAotCWlucHV0ID0gcmF3X2lucHV0KCJXb3VsZCB5b3UgbGlrZSB0byBhZGQgIiArIGZhYnJpY19tb2RfbmFtZSArICJ0byBkcml2ZXJzL3RhcmdldC9NYWtlZmlsZS4uPyBbeWVzLG5vXTogIikKKwlpbnB1dCA9IHJhd19pbnB1dCgiV291bGQgeW91IGxpa2UgdG8gYWRkICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiIHRvIGRyaXZlcnMvdGFyZ2V0L01ha2VmaWxlLi4/IFt5ZXMsbm9dOiAiKQogCWlmIGlucHV0ID09ICJ5ZXMiIG9yIGlucHV0ID09ICJ5IjoKIAkJdGNtX21vZF9hZGRfa2J1aWxkKHRjbV9kaXIsIGZhYnJpY19tb2RfbmFtZSkKIAotCWlucHV0ID0gcmF3X2lucHV0KCJXb3VsZCB5b3UgbGlrZSB0byBhZGQgIiArIGZhYnJpY19tb2RfbmFtZSArICJ0byBkcml2ZXJzL3RhcmdldC9LY29uZmlnLi4/IFt5ZXMsbm9dOiAiKQorCWlucHV0ID0gcmF3X2lucHV0KCJXb3VsZCB5b3UgbGlrZSB0byBhZGQgIiArIGZhYnJpY19tb2RfbmFtZSArICIgdG8gZHJpdmVycy90YXJnZXQvS2NvbmZpZy4uPyBbeWVzLG5vXTogIikKIAlpZiBpbnB1dCA9PSAieWVzIiBvciBpbnB1dCA9PSAieSI6CiAJCXRjbV9tb2RfYWRkX2tjb25maWcodGNtX2RpciwgZmFicmljX21vZF9uYW1lKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvY3B1LWNvb2xpbmctYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9jcHUtY29vbGluZy1hcGkudHh0CmluZGV4IGZjYTI0YzkuLjc1M2U0N2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGhlcm1hbC9jcHUtY29vbGluZy1hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9jcHUtY29vbGluZy1hcGkudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBXcml0dGVuIGJ5IEFtaXQgRGFuaWVsIEthY2hoYXAgPGFtaXQua2FjaGhhcEBsaW5hcm8ub3JnPgogCi1VcGRhdGVkOiAxMiBNYXkgMjAxMgorVXBkYXRlZDogNiBKYW4gMjAxNQogCiBDb3B5cmlnaHQgKGMpICAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQoaHR0cDovL3d3dy5zYW1zdW5nLmNvbSkKIApAQCAtMjUsNyArMjUsMTggQEAKIAogICAgY2xpcF9jcHVzOiBjcHVtYXNrIG9mIGNwdXMgd2hlcmUgdGhlIGZyZXF1ZW5jeSBjb25zdHJhaW50cyB3aWxsIGhhcHBlbi4KIAotMS4xLjIgdm9pZCBjcHVmcmVxX2Nvb2xpbmdfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldikKKzEuMS4yIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpvZl9jcHVmcmVxX2Nvb2xpbmdfcmVnaXN0ZXIoCisJc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNsaXBfY3B1cykKKworICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgY3B1ZnJlcSBjb29saW5nIGRldmljZSB3aXRoCisgICAgdGhlIG5hbWUgInRoZXJtYWwtY3B1ZnJlcS0leCIgbGlua2luZyBpdCB3aXRoIGEgZGV2aWNlIHRyZWUgbm9kZSwgaW4KKyAgICBvcmRlciB0byBiaW5kIGl0IHZpYSB0aGUgdGhlcm1hbCBEVCBjb2RlLiBUaGlzIGFwaSBjYW4gc3VwcG9ydCBtdWx0aXBsZQorICAgIGluc3RhbmNlcyBvZiBjcHVmcmVxIGNvb2xpbmcgZGV2aWNlcy4KKworICAgIG5wOiBwb2ludGVyIHRvIHRoZSBjb29saW5nIGRldmljZSBkZXZpY2UgdHJlZSBub2RlCisgICAgY2xpcF9jcHVzOiBjcHVtYXNrIG9mIGNwdXMgd2hlcmUgdGhlIGZyZXF1ZW5jeSBjb25zdHJhaW50cyB3aWxsIGhhcHBlbi4KKworMS4xLjMgdm9pZCBjcHVmcmVxX2Nvb2xpbmdfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldikKIAogICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIHRoZSAidGhlcm1hbC1jcHVmcmVxLSV4IiBjb29saW5nIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBkZGI5YWM4Li5hYWEwMzlkIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjk2LDcgKzY5Niw3IEBACiBXOglodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiBTOglTdXBwb3J0ZWQKIEY6CXNvdW5kL3NvYy9ibGFja2Zpbi8qCi0gCisKIEFOQUxPRyBERVZJQ0VTIElOQyBJSU8gRFJJVkVSUwogTToJTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CiBNOglNaWNoYWVsIEhlbm5lcmljaCA8TWljaGFlbC5IZW5uZXJpY2hAYW5hbG9nLmNvbT4KQEAgLTcwOCw2ICs3MDgsMTYgQEAKIEY6CWRyaXZlcnMvc3RhZ2luZy9paW8vKi9hZCoKIEY6CXN0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctYmZpbi10aW1lci5jCiAKK0FORFJPSUQgRFJJVkVSUworTToJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KK006CUFydmUgSGr4bm5lduVnIDxhcnZlQGFuZHJvaWQuY29tPgorTToJUmlsZXkgQW5kcmV3cyA8cmlhbmRyZXdzQGFuZHJvaWQuY29tPgorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dyZWdraC9zdGFnaW5nLmdpdAorTDoJZGV2ZWxAZHJpdmVyZGV2Lm9zdW9zbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9hbmRyb2lkLworRjoJZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvCisKIEFPQSAoQXBwbGUgT25ib2FyZCBBdWRpbykgQUxTQSBEUklWRVIKIE06CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiBMOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwpAQCAtNzI0LDE1ICs3MzQsMTUgQEAKIEY6CWRyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKIAogQVBQTEUgQkNNNTk3NCBNVUxUSVRPVUNIIERSSVZFUgotTToJSGVucmlrIFJ5ZGJlcmcgPHJ5ZGJlcmdAZXVyb21haWwuc2U+CitNOglIZW5yaWsgUnlkYmVyZyA8cnlkYmVyZ0BiaXRtYXRoLm9yZz4KIEw6CWxpbnV4LWlucHV0QHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAorUzoJT2RkIGZpeGVzCiBGOglkcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYwogCiBBUFBMRSBTTUMgRFJJVkVSCi1NOglIZW5yaWsgUnlkYmVyZyA8cnlkYmVyZ0BldXJvbWFpbC5zZT4KK006CUhlbnJpayBSeWRiZXJnIDxyeWRiZXJnQGJpdG1hdGgub3JnPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwotUzoJTWFpbnRhaW5lZAorUzoJT2RkIGZpeGVzCiBGOglkcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKIAogQVBQTEVUQUxLIE5FVFdPUksgTEFZRVIKQEAgLTc1NCwxMyArNzY0LDYgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbWVkaWEvaTJjL2FwdGluYS1wbGwuKgogCi1BUkFTQU4gQ09NUEFDVCBGTEFTSCBQQVRBIENPTlRST0xMRVIKLU06CVZpcmVzaCBLdW1hciA8dmlyZXNoLmxpbnV4QGdtYWlsLmNvbT4KLUw6CWxpbnV4LWlkZUB2Z2VyLmtlcm5lbC5vcmcKLVM6CU1haW50YWluZWQKLUY6CWluY2x1ZGUvbGludXgvcGF0YV9hcmFzYW5fY2ZfZGF0YS5oCi1GOglkcml2ZXJzL2F0YS9wYXRhX2FyYXNhbl9jZi5jCi0KIEFSQyBGUkFNRUJVRkZFUiBEUklWRVIKIE06CUpheWEgS3VtYXIgPGpheWFsa0BpbnR3b3Jrcy5iaXo+CiBTOglNYWludGFpbmVkCkBAIC0yMjU5LDYgKzIyNjIsNyBAQAogQlRSRlMgRklMRSBTWVNURU0KIE06CUNocmlzIE1hc29uIDxjbG1AZmIuY29tPgogTToJSm9zZWYgQmFjaWsgPGpiYWNpa0BmYi5jb20+CitNOglEYXZpZCBTdGVyYmEgPGRzdGVyYmFAc3VzZS5jej4KIEw6CWxpbnV4LWJ0cmZzQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2J0cmZzLndpa2kua2VybmVsLm9yZy8KIFE6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LWJ0cmZzL2xpc3QvCkBAIC0yMzQ1LDcgKzIzNDksOCBAQAogTToJT2xpdmVyIEhhcnRrb3BwIDxzb2NrZXRjYW5AaGFydGtvcHAubmV0PgogTDoJbGludXgtY2FuQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2dpdG9yaW91cy5vcmcvbGludXgtY2FuCi1UOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9saW51eC1jYW4vbGludXgtY2FuLW5leHQuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21rbC9saW51eC1jYW4uZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21rbC9saW51eC1jYW4tbmV4dC5naXQKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4udHh0CiBGOgluZXQvY2FuLwpAQCAtMjM2MCw3ICsyMzY1LDggQEAKIE06CU1hcmMgS2xlaW5lLUJ1ZGRlIDxta2xAcGVuZ3V0cm9uaXguZGU+CiBMOglsaW51eC1jYW5Admdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vZ2l0b3Jpb3VzLm9yZy9saW51eC1jYW4KLVQ6CWdpdCBnaXQ6Ly9naXRvcmlvdXMub3JnL2xpbnV4LWNhbi9saW51eC1jYW4tbmV4dC5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWtsL2xpbnV4LWNhbi5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWtsL2xpbnV4LWNhbi1uZXh0LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9uZXQvY2FuLwogRjoJaW5jbHVkZS9saW51eC9jYW4vZGV2LmgKQEAgLTMxODIsNyArMzE4OCw3IEBACiBROglodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtZG1hZW5naW5lL2xpc3QvCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2RtYS8KLUY6CWluY2x1ZGUvbGludXgvZG1hKgorRjoJaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAogRjoJRG9jdW1lbnRhdGlvbi9kbWFlbmdpbmUvCiBUOglnaXQgZ2l0Oi8vZ2l0LmluZnJhZGVhZC5vcmcvdXNlcnMvdmtvdWwvc2xhdmUtZG1hLmdpdAogCkBAIC00NzQ4LDIwICs0NzU0LDIwIEBACiBGOglkcml2ZXJzL3Njc2kvaXByLioKIAogSUJNIFBvd2VyIFZpcnR1YWwgRXRoZXJuZXQgRGV2aWNlIERyaXZlcgotTToJU2FudGlhZ28gTGVvbiA8c2FudGlsQGxpbnV4LnZuZXQuaWJtLmNvbT4KK006CVRob21hcyBGYWxjb24gPHRsZmFsY29uQGxpbnV4LnZuZXQuaWJtLmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguKgogCiBJQk0gUG93ZXIgVmlydHVhbCBTQ1NJIERldmljZSBEcml2ZXJzCi1NOglOYXRoYW4gRm9udGVub3QgPG5mb250QGxpbnV4LnZuZXQuaWJtLmNvbT4KK006CVR5cmVsIERhdHd5bGVyIDx0eXJlbGRAbGludXgudm5ldC5pYm0uY29tPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpKgogRjoJZHJpdmVycy9zY3NpL2libXZzY3NpL3Zpb3NycC5oCiAKIElCTSBQb3dlciBWaXJ0dWFsIEZDIERldmljZSBEcml2ZXJzCi1NOglCcmlhbiBLaW5nIDxicmtpbmdAbGludXgudm5ldC5pYm0uY29tPgorTToJVHlyZWwgRGF0d3lsZXIgPHR5cmVsZEBsaW51eC52bmV0LmlibS5jb20+CiBMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjKgpAQCAtNDkyOSw3ICs0OTM1LDYgQEAKIAogSU5QVVQgKEtFWUJPQVJELCBNT1VTRSwgSk9ZU1RJQ0ssIFRPVUNIU0NSRUVOKSBEUklWRVJTCiBNOglEbWl0cnkgVG9yb2tob3YgPGRtaXRyeS50b3Jva2hvdkBnbWFpbC5jb20+Ci1NOglEbWl0cnkgVG9yb2tob3YgPGR0b3JAbWFpbC5ydT4KIEw6CWxpbnV4LWlucHV0QHZnZXIua2VybmVsLm9yZwogUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtaW5wdXQvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZHRvci9pbnB1dC5naXQKQEAgLTQ5NDAsMTAgKzQ5NDUsMTAgQEAKIEY6CWluY2x1ZGUvbGludXgvaW5wdXQvCiAKIElOUFVUIE1VTFRJVE9VQ0ggKE1UKSBQUk9UT0NPTAotTToJSGVucmlrIFJ5ZGJlcmcgPHJ5ZGJlcmdAZXVyb21haWwuc2U+CitNOglIZW5yaWsgUnlkYmVyZyA8cnlkYmVyZ0BiaXRtYXRoLm9yZz4KIEw6CWxpbnV4LWlucHV0QHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9yeWRiZXJnL2lucHV0LW10LmdpdAotUzoJTWFpbnRhaW5lZAorUzoJT2RkIGZpeGVzCiBGOglEb2N1bWVudGF0aW9uL2lucHV0L211bHRpLXRvdWNoLXByb3RvY29sLnR4dAogRjoJZHJpdmVycy9pbnB1dC9pbnB1dC1tdC5jCiBLOglcYihBQlN8U1lOKV9NVF8KQEAgLTQ5NTEsNyArNDk1Niw2IEBACiBJTlRFTCBDNjAwIFNFUklFUyBTQVMgQ09OVFJPTExFUiBEUklWRVIKIE06CUludGVsIFNDVSBMaW51eCBzdXBwb3J0IDxpbnRlbC1saW51eC1zY3VAaW50ZWwuY29tPgogTToJQXJ0dXIgUGFzemtpZXdpY3ogPGFydHVyLnBhc3praWV3aWN6QGludGVsLmNvbT4KLU06CURhdmUgSmlhbmcgPGRhdmUuamlhbmdAaW50ZWwuY29tPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC9pbnRlbC1zYXMvaXNjaQogUzoJU3VwcG9ydGVkCkBAIC01Mjc5LDYgKzUyODMsMTUgQEAKIFE6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LXJkbWEvbGlzdC8KIEY6CWRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci8KIAorSVNDU0kgRVhURU5TSU9OUyBGT1IgUkRNQSAoSVNFUikgVEFSR0VUCitNOglTYWdpIEdyaW1iZXJnIDxzYWdpZ0BtZWxsYW5veC5jb20+CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L25hYi90YXJnZXQtcGVuZGluZy5naXQgbWFzdGVyCitMOglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZworTDoJdGFyZ2V0LWRldmVsQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCitXOglodHRwOi8vd3d3LmxpbnV4LWlzY3NpLm9yZworRjoJZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydAorCiBJU0ROIFNVQlNZU1RFTQogTToJS2Fyc3RlbiBLZWlsIDxpc2RuQGxpbnV4LXBpbmdpLmRlPgogTDoJaXNkbjRsaW51eEBsaXN0c2Vydi5pc2RuNGxpbnV4LmRlIChzdWJzY3JpYmVycy1vbmx5KQpAQCAtNTY5Myw2ICs1NzA2LDQ5IEBACiBGOglpbmNsdWRlL2xpbnV4L2xndWVzdCouaAogRjoJdG9vbHMvbGd1ZXN0LwogCitMSUJBVEEgU1VCU1lTVEVNIChTZXJpYWwgYW5kIFBhcmFsbGVsIEFUQSBkcml2ZXJzKQorTToJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgorTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2F0YS8KK0Y6CWluY2x1ZGUvbGludXgvYXRhLmgKK0Y6CWluY2x1ZGUvbGludXgvbGliYXRhLmgKKworTElCQVRBIFBBVEEgQVJBU0FOIENPTVBBQ1QgRkxBU0ggQ09OVFJPTExFUgorTToJVmlyZXNoIEt1bWFyIDx2aXJlc2gubGludXhAZ21haWwuY29tPgorTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0CitTOglNYWludGFpbmVkCitGOglpbmNsdWRlL2xpbnV4L3BhdGFfYXJhc2FuX2NmX2RhdGEuaAorRjoJZHJpdmVycy9hdGEvcGF0YV9hcmFzYW5fY2YuYworCitMSUJBVEEgUEFUQSBEUklWRVJTCitNOglCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6IDxiLnpvbG5pZXJraWVAc2Ftc3VuZy5jb20+CitNOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CitMOglsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RqL2xpYmF0YS5naXQKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvYXRhL3BhdGFfKi5jCitGOglkcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCisKK0xJQkFUQSBTQVRBIEFIQ0kgUExBVEZPUk0gZGV2aWNlcyBzdXBwb3J0CitNOglIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorTToJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgorTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2F0YS9haGNpX3BsYXRmb3JtLmMKK0Y6CWRyaXZlcnMvYXRhL2xpYmFoY2lfcGxhdGZvcm0uYworRjoJaW5jbHVkZS9saW51eC9haGNpX3BsYXRmb3JtLmgKKworTElCQVRBIFNBVEEgUFJPTUlTRSBUWDIvVFg0IENPTlRST0xMRVIgRFJJVkVSCitNOglNaWthZWwgUGV0dGVyc3NvbiA8bWlrcGVsaW51eEBnbWFpbC5jb20+CitMOglsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RqL2xpYmF0YS5naXQKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS4qCisKIExJQkxPQ0tERVAKIE06CVNhc2hhIExldmluIDxzYXNoYS5sZXZpbkBvcmFjbGUuY29tPgogUzoJTWFpbnRhaW5lZApAQCAtNjk3NywxNCArNzAzMywxMiBAQAogTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAbGluYXJvLm9yZz4KIE06CVJvYiBIZXJyaW5nIDxyb2JoK2R0QGtlcm5lbC5vcmc+CiBMOglkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL2ZkdC5zZWNyZXRsYWIuY2EKLVQ6CWdpdCBnaXQ6Ly9naXQuc2VjcmV0bGFiLmNhL2dpdC9saW51eC0yLjYuZ2l0CitXOglodHRwOi8vd3d3LmRldmljZXRyZWUub3JnLworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9nbGlrZWx5L2xpbnV4LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9vZi8KIEY6CWluY2x1ZGUvbGludXgvb2YqLmgKIEY6CXNjcmlwdHMvZHRjLwotSzoJb2ZfZ2V0X3Byb3BlcnR5Ci1LOglvZl9tYXRjaF90YWJsZQogCiBPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUgQklORElOR1MKIE06CVJvYiBIZXJyaW5nIDxyb2JoK2R0QGtlcm5lbC5vcmc+CkBAIC03MjI5LDcgKzcyODMsNyBAQAogRjoJZHJpdmVycy9wY2kvaG9zdC8qbGF5ZXJzY2FwZSoKIAogUENJIERSSVZFUiBGT1IgSU1YNgotTToJUmljaGFyZCBaaHUgPHI2NTAzN0BmcmVlc2NhbGUuY29tPgorTToJUmljaGFyZCBaaHUgPFJpY2hhcmQuWmh1QGZyZWVzY2FsZS5jb20+CiBNOglMdWNhcyBTdGFjaCA8bC5zdGFjaEBwZW5ndXRyb25peC5kZT4KIEw6CWxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC03Mzk5LDYgKzc0NTMsNyBAQAogUElOIENPTlRST0wgU1VCU1lTVEVNCiBNOglMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CiBMOglsaW51eC1ncGlvQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW51c3cvbGludXgtcGluY3RybC5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGluY3RybC8KIEY6CWluY2x1ZGUvbGludXgvcGluY3RybC8KQEAgLTc1NjYsMTIgKzc2MjEsNiBAQAogUzoJT2Jzb2xldGUKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvCiAKLVBST01JU0UgU0FUQSBUWDIvVFg0IENPTlRST0xMRVIgTElCQVRBIERSSVZFUgotTToJTWlrYWVsIFBldHRlcnNzb24gPG1pa3BlbGludXhAZ21haWwuY29tPgotTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLioKLQogUFMzIE5FVFdPUksgU1VQUE9SVAogTToJR2VvZmYgTGV2YW5kIDxnZW9mZkBpbmZyYWRlYWQub3JnPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtNzczNyw4ICs3Nzg2LDcgQEAKIEY6CWRyaXZlcnMvc2NzaS9xbGEyeHh4LwogCiBRTE9HSUMgUUxBNFhYWCBpU0NTSSBEUklWRVIKLU06CVZpa2FzIENoYXVkaGFyeSA8dmlrYXMuY2hhdWRoYXJ5QHFsb2dpYy5jb20+Ci1NOglpc2NzaS1kcml2ZXJAcWxvZ2ljLmNvbQorTToJUUxvZ2ljLVN0b3JhZ2UtVXBzdHJlYW1AcWxvZ2ljLmNvbQogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9zY3NpL0xJQ0VOU0UucWxhNHh4eApAQCAtODU0NiwyNSArODU5NCw2IEBACiBGOglkcml2ZXJzL21pc2MvcGhhbnRvbS5jCiBGOglpbmNsdWRlL3VhcGkvbGludXgvcGhhbnRvbS5oCiAKLVNFUklBTCBBVEEgKFNBVEEpIFNVQlNZU1RFTQotTToJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgotTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZwotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0Ci1TOglTdXBwb3J0ZWQKLUY6CWRyaXZlcnMvYXRhLwotRjoJaW5jbHVkZS9saW51eC9hdGEuaAotRjoJaW5jbHVkZS9saW51eC9saWJhdGEuaAotCi1TRVJJQUwgQVRBIEFIQ0kgUExBVEZPUk0gZGV2aWNlcyBzdXBwb3J0Ci1NOglIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotTToJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgotTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZwotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0Ci1TOglTdXBwb3J0ZWQKLUY6CWRyaXZlcnMvYXRhL2FoY2lfcGxhdGZvcm0uYwotRjoJZHJpdmVycy9hdGEvbGliYWhjaV9wbGF0Zm9ybS5jCi1GOglpbmNsdWRlL2xpbnV4L2FoY2lfcGxhdGZvcm0uaAotCiBTRVJWRVIgRU5HSU5FUyAxMEdicHMgaVNDU0kgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgogTToJSmF5YW1vaGFuIEthbGxpY2thbCA8amF5YW1vaGFuLmthbGxpY2thbEBlbXVsZXguY29tPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTk1MzMsNyArOTU2Miw4IEBACiBUSSBCQU5ER0FQIEFORCBUSEVSTUFMIERSSVZFUgogTToJRWR1YXJkbyBWYWxlbnRpbiA8ZWR1YmV6dmFsQGdtYWlsLmNvbT4KIEw6CWxpbnV4LXBtQHZnZXIua2VybmVsLm9yZwotUzoJU3VwcG9ydGVkCitMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy90aGVybWFsL3RpLXNvYy10aGVybWFsLwogCiBUSSBDTE9DSyBEUklWRVIKQEAgLTEwMTQ2LDYgKzEwMTc2LDcgQEAKIE06CSJIYW5zIEouIEtvY2giIDxoamtAaGFuc2prb2NoLmRlPgogTToJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KIFM6CU1haW50YWluZWQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JlZ2toL2NoYXItbWlzYy5naXQKIEY6CURvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbAogRjoJZHJpdmVycy91aW8vCiBGOglpbmNsdWRlL2xpbnV4L3VpbyouaApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBiMWMzMjU0Li5jOGUxN2MwIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAzCiBQQVRDSExFVkVMID0gMTkKIFNVQkxFVkVMID0gMAotRVhUUkFWRVJTSU9OID0gLXJjMQorRVhUUkFWRVJTSU9OID0gLXJjNwogTkFNRSA9IERpc2Vhc2VkIE5ld3QKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTM5MSw2ICszOTEsNyBAQAogIyBOZWVkZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBPPSBvcHRpb24KIExJTlVYSU5DTFVERSAgICA6PSBcCiAJCS1JJChzcmN0cmVlKS9hcmNoLyQoaGRyLWFyY2gpL2luY2x1ZGUgXAorCQktSWFyY2gvJChoZHItYXJjaCkvaW5jbHVkZS9nZW5lcmF0ZWQvdWFwaSBcCiAJCS1JYXJjaC8kKGhkci1hcmNoKS9pbmNsdWRlL2dlbmVyYXRlZCBcCiAJCSQoaWYgJChLQlVJTERfU1JDKSwgLUkkKHNyY3RyZWUpL2luY2x1ZGUpIFwKIAkJLUlpbmNsdWRlIFwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKaW5kZXggMDc2YzM1Yy4uOThhMTUyNSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKQEAgLTI4NSw4ICsyODUsMTIgQEAKIAkJCWlmIChyLT5wYXJlbnQgfHwgIXItPnN0YXJ0IHx8ICFyLT5mbGFncykKIAkJCQljb250aW51ZTsKIAkJCWlmIChwY2lfaGFzX2ZsYWcoUENJX1BST0JFX09OTFkpIHx8Ci0JCQkgICAgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9QQ0lfRklYRUQpKQotCQkJCXBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGkpOworCQkJICAgIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfUENJX0ZJWEVEKSkgeworCQkJCWlmIChwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKSA9PSAwKQorCQkJCQljb250aW51ZTsKKworCQkJCXBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpKTsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9mYXVsdC5jIGIvYXJjaC9hbHBoYS9tbS9mYXVsdC5jCmluZGV4IDk4ODM4YTAuLjlkMGFjMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvbW0vZmF1bHQuYworKysgYi9hcmNoL2FscGhhL21tL2ZhdWx0LmMKQEAgLTE1Niw2ICsxNTYsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvbW0vZmF1bHQuYyBiL2FyY2gvYXJjL21tL2ZhdWx0LmMKaW5kZXggNmY3ZTNhNi4uNTYzY2IyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvbW0vZmF1bHQuYworKysgYi9hcmNoL2FyYy9tbS9mYXVsdC5jCkBAIC0xNjEsNiArMTYxLDggQEAKIAogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJZ290byBvdXRfb2ZfbWVtb3J5OworCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJZ290byBiYWRfYXJlYTsKIAllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJZ290byBkb19zaWdidXM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtZGIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMKaW5kZXggMTQ2NjU4MC4uNzBiMTk0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMKQEAgLTIwMywyNyArMjAzLDMgQEAKIAkJY29tcGF0aWJsZSA9ICJsaW51eCxzcGRpZi1kaXIiOwogCX07CiB9OwotCi0mcGluY3RybCB7Ci0JLyoKLQkgKiBUaGVzZSBwaW5zIG1pZ2h0IGJlIG11eGVkIGFzIEkyUyBieQotCSAqIHRoZSBib290bG9hZGVyLCBidXQgaXQgY29uZmxpY3RzCi0JICogd2l0aCB0aGUgcmVhbCBJMlMgcGlucyB0aGF0IGFyZQotCSAqIG11eGVkIHVzaW5nIGkyc19waW5zLiBXZSBtdXN0IG11eAotCSAqIHRob3NlIHBpbnMgdG8gYSBmdW5jdGlvbiBvdGhlciB0aGFuCi0JICogSTJTLgotCSAqLwotCXBpbmN0cmwtMCA9IDwmaG9nX3BpbnMxICZob2dfcGluczI+OwotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0KLQlob2dfcGluczE6IGhvZy1waW5zMSB7Ci0JCW1hcnZlbGwscGlucyA9ICJtcHA2IiwgICJtcHA4IiwgIm1wcDEwIiwKLQkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOwotCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCX07Ci0KLQlob2dfcGluczI6IGhvZy1waW5zMiB7Ci0JCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDciLCAibXBwOSI7Ci0JCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKLQl9OwotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOTI2My5kdHNpCmluZGV4IDE0Njc3NTAuLmU4YzZjNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjMuZHRzaQpAQCAtOTUzLDYgKzk1Myw4IEBACiAJCQlpbnRlcnJ1cHRzID0gPDI2IElSUV9UWVBFX0xFVkVMX0hJR0ggMz47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZiPjsKKwkJCWNsb2NrcyA9IDwmbGNkX2Nsaz4sIDwmbGNkX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJsY2RjX2NsayIsICJoY2xrIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cwppbmRleCAyOGU3ZTIwLi5hOThhYzFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS1tYXJ2ZWxsLWRtcC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEtbWFydmVsbC1kbXAuZHRzCkBAIC02NSw2ICs2NSw4IEBACiB9OwogCiAmc2RoY2kyIHsKKwlicm9rZW4tY2Q7CisJYnVzLXdpZHRoID0gPDg+OwogCW5vbi1yZW1vdmFibGU7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpCmluZGV4IDM1MjUzYzkuLmUyZjYxZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEuZHRzaQpAQCAtODMsNyArODMsOCBAQAogCQkJY29tcGF0aWJsZSA9ICJtcnZsLHB4YXYzLW1tYyI7CiAJCQlyZWcgPSA8MHhhYjEwMDAgMHgyMDA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NESU8xWElOPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9ORkNfRUNDPiwgPCZjaGlwIENMS0lEX05GQz47CisJCQljbG9jay1uYW1lcyA9ICJpbyIsICJjb3JlIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKQEAgLTM0OCwzNiArMzQ5LDYgQEAKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJfTsKLQotCQkJZ3BpbzQ6IGdwaW9ANTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKLQkJCQlyZWcgPSA8MHg1MDAwIDB4NDAwPjsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQkJCXBvcnRlOiBncGlvLXBvcnRANCB7Ci0JCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKLQkJCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQkJc25wcyxuci1ncGlvcyA9IDwzMj47Ci0JCQkJCXJlZyA9IDwwPjsKLQkJCQl9OwotCQkJfTsKLQotCQkJZ3BpbzU6IGdwaW9AYzAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKLQkJCQlyZWcgPSA8MHhjMDAwIDB4NDAwPjsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQkJCXBvcnRmOiBncGlvLXBvcnRANSB7Ci0JCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKLQkJCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQkJc25wcyxuci1ncGlvcyA9IDwzMj47Ci0JCQkJCXJlZyA9IDwwPjsKLQkJCQl9OwotCQkJfTsKIAkJfTsKIAogCQljaGlwOiBjaGlwLWNvbnRyb2xAZWEwMDAwIHsKQEAgLTQ2Niw2ICs0MzcsMjEgQEAKIAkJCXJhbmdlcyA9IDwwIDB4ZmMwMDAwIDB4MTAwMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc2ljPjsKIAorCQkJc21fZ3BpbzE6IGdwaW9ANTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCQlyZWcgPSA8MHg1MDAwIDB4NDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRmOiBncGlvLXBvcnRANSB7CisJCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJc25wcyxuci1ncGlvcyA9IDwzMj47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQl9OworCQkJfTsKKwogCQkJaTJjMjogaTJjQDcwMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC01MTYsNiArNTAyLDIxIEBACiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKKwkJCXNtX2dwaW8wOiBncGlvQGMwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3BpbyI7CisJCQkJcmVnID0gPDB4YzAwMCAweDQwMD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0ZTogZ3Bpby1wb3J0QDQgeworCQkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8tcG9ydCI7CisJCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJCXNucHMsbnItZ3Bpb3MgPSA8MzI+OworCQkJCQlyZWcgPSA8MD47CisJCQkJfTsKKwkJCX07CisKIAkJCXN5c2N0cmw6IHBpbi1jb250cm9sbGVyQGQwMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4ycS1zeXN0ZW0tY3RybCI7CiAJCQkJcmVnID0gPDB4ZDAwMCAweDEwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3LWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3LWV2bS5kdHMKaW5kZXggMTBiNzI1Yy4uYWQ0MTE4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTctZXZtLmR0cwpAQCAtNDk5LDIzICs0OTksMjMgQEAKIAkJfTsKIAkJcGFydGl0aW9uQDUgewogCQkJbGFiZWwgPSAiUVNQSS51LWJvb3Qtc3BsLW9zIjsKLQkJCXJlZyA9IDwweDAwMTQwMDAwIDB4MDAwMTAwMDA+OworCQkJcmVnID0gPDB4MDAxNDAwMDAgMHgwMDA4MDAwMD47CiAJCX07CiAJCXBhcnRpdGlvbkA2IHsKIAkJCWxhYmVsID0gIlFTUEkudS1ib290LWVudiI7Ci0JCQlyZWcgPSA8MHgwMDE1MDAwMCAweDAwMDEwMDAwPjsKKwkJCXJlZyA9IDwweDAwMWMwMDAwIDB4MDAwMTAwMDA+OwogCQl9OwogCQlwYXJ0aXRpb25ANyB7CiAJCQlsYWJlbCA9ICJRU1BJLnUtYm9vdC1lbnYuYmFja3VwMSI7Ci0JCQlyZWcgPSA8MHgwMDE2MDAwMCAweDAwMTAwMDA+OworCQkJcmVnID0gPDB4MDAxZDAwMDAgMHgwMDEwMDAwPjsKIAkJfTsKIAkJcGFydGl0aW9uQDggewogCQkJbGFiZWwgPSAiUVNQSS5rZXJuZWwiOwotCQkJcmVnID0gPDB4MDAxNzAwMDAgMHgwODAwMDAwPjsKKwkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDgwMDAwMD47CiAJCX07CiAJCXBhcnRpdGlvbkA5IHsKIAkJCWxhYmVsID0gIlFTUEkuZmlsZS1zeXN0ZW0iOwotCQkJcmVnID0gPDB4MDA5NzAwMDAgMHgwMTY5MDAwMD47CisJCQlyZWcgPSA8MHgwMDllMDAwMCAweDAxNjIwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaQppbmRleCAyMjc3MWJjLi42M2Y4YjAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9kcmE3LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy5kdHNpCkBAIC0xMjU3LDYgKzEyNTcsOCBAQAogCQkJCXR4LWZpZm8tcmVzaXplOwogCQkJCW1heGltdW0tc3BlZWQgPSAic3VwZXItc3BlZWQiOwogCQkJCWRyX21vZGUgPSAib3RnIjsKKwkJCQlzbnBzLGRpc191M19zdXNwaHlfcXVpcms7CisJCQkJc25wcyxkaXNfdTJfc3VzcGh5X3F1aXJrOwogCQkJfTsKIAkJfTsKIApAQCAtMTI3OCw2ICsxMjgwLDggQEAKIAkJCQl0eC1maWZvLXJlc2l6ZTsKIAkJCQltYXhpbXVtLXNwZWVkID0gImhpZ2gtc3BlZWQiOwogCQkJCWRyX21vZGUgPSAib3RnIjsKKwkJCQlzbnBzLGRpc191M19zdXNwaHlfcXVpcms7CisJCQkJc25wcyxkaXNfdTJfc3VzcGh5X3F1aXJrOwogCQkJfTsKIAkJfTsKIApAQCAtMTI5OSw2ICsxMzAzLDggQEAKIAkJCQl0eC1maWZvLXJlc2l6ZTsKIAkJCQltYXhpbXVtLXNwZWVkID0gImhpZ2gtc3BlZWQiOwogCQkJCWRyX21vZGUgPSAib3RnIjsKKwkJCQlzbnBzLGRpc191M19zdXNwaHlfcXVpcms7CisJCQkJc25wcyxkaXNfdTJfc3VzcGh5X3F1aXJrOwogCQkJfTsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpCmluZGV4IDBhMjI5ZmMuLmQ3NWM4OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLmR0c2kKQEAgLTczNiw3ICs3MzYsNyBAQAogCiAJZHBfcGh5OiB2aWRlby1waHlAMTAwNDA3MjAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kcC12aWRlby1waHkiOwotCQlyZWcgPSA8MHgxMDA0MDcyMCA0PjsKKwkJc2Ftc3VuZyxwbXUtc3lzY29uID0gPCZwbXVfc3lzdGVtX2NvbnRyb2xsZXI+OwogCQkjcGh5LWNlbGxzID0gPDA+OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtYXJuZGFsZS1vY3RhLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtYXJuZGFsZS1vY3RhLmR0cwppbmRleCBhYTdhN2Q3Li5kYjJjMWM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLWFybmRhbGUtb2N0YS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC1hcm5kYWxlLW9jdGEuZHRzCkBAIC0zNzIsMyArMzcyLDcgQEAKICZ1c2JkcmRfZHdjM18xIHsKIAlkcl9tb2RlID0gImhvc3QiOwogfTsKKworJmNjaSB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLmR0c2kKaW5kZXggNTE3ZTUwZi4uNmQzOGY4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAuZHRzaQpAQCAtMTIwLDcgKzEyMCw3IEBACiAJCX07CiAJfTsKIAotCWNjaUAxMGQyMDAwMCB7CisJY2NpOiBjY2lAMTBkMjAwMDAgewogCQljb21wYXRpYmxlID0gImFybSxjY2ktNDAwIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtNTAzLDggKzUwMyw4IEBACiAJfTsKIAogCWRwX3BoeTogdmlkZW8tcGh5QDEwMDQwNzI4IHsKLQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtZHAtdmlkZW8tcGh5IjsKLQkJcmVnID0gPDB4MTAwNDA3MjggND47CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDIwLWRwLXZpZGVvLXBoeSI7CisJCXNhbXN1bmcscG11LXN5c2NvbiA9IDwmcG11X3N5c3RlbV9jb250cm9sbGVyPjsKIAkJI3BoeS1jZWxscyA9IDwwPjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXgyNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjUuZHRzaQppbmRleCA1OGQzYzNjLi5lNGQzYWVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXgyNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LmR0c2kKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDI1LWNzcGkiLCAiZnNsLGlteDM1LWNzcGkiOwogCQkJCXJlZyA9IDwweDQzZmE0MDAwIDB4NDAwMD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIDYyPiwgPCZjbGtzIDYyPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgNzg+LCA8JmNsa3MgNzg+OwogCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJwZXIiOwogCQkJCWludGVycnVwdHMgPSA8MTQ+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0zNjksNyArMzY5LDcgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXgyNS1wd20iLCAiZnNsLGlteDI3LXB3bSI7CiAJCQkJI3B3bS1jZWxscyA9IDwyPjsKIAkJCQlyZWcgPSA8MHg1M2ZhMDAwMCAweDQwMDA+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyAxMDY+LCA8JmNsa3MgMzY+OworCQkJCWNsb2NrcyA9IDwmY2xrcyAxMDY+LCA8JmNsa3MgNTI+OwogCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJwZXIiOwogCQkJCWludGVycnVwdHMgPSA8MzY+OwogCQkJfTsKQEAgLTM4OCw3ICszODgsNyBAQAogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDI1LXB3bSIsICJmc2wsaW14MjctcHdtIjsKIAkJCQkjcHdtLWNlbGxzID0gPDI+OwogCQkJCXJlZyA9IDwweDUzZmE4MDAwIDB4NDAwMD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIDEwNz4sIDwmY2xrcyAzNj47CisJCQkJY2xvY2tzID0gPCZjbGtzIDEwNz4sIDwmY2xrcyA1Mj47CiAJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7CiAJCQkJaW50ZXJydXB0cyA9IDw0MT47CiAJCQl9OwpAQCAtNDI5LDcgKzQyOSw3IEBACiAJCQlwd200OiBwd21ANTNmYzgwMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDI1LXB3bSIsICJmc2wsaW14MjctcHdtIjsKIAkJCQlyZWcgPSA8MHg1M2ZjODAwMCAweDQwMDA+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyAxMDg+LCA8JmNsa3MgMzY+OworCQkJCWNsb2NrcyA9IDwmY2xrcyAxMDg+LCA8JmNsa3MgNTI+OwogCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJwZXIiOwogCQkJCWludGVycnVwdHMgPSA8NDI+OwogCQkJfTsKQEAgLTQ3Niw3ICs0NzYsNyBAQAogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDI1LXB3bSIsICJmc2wsaW14MjctcHdtIjsKIAkJCQkjcHdtLWNlbGxzID0gPDI+OwogCQkJCXJlZyA9IDwweDUzZmUwMDAwIDB4NDAwMD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIDEwNT4sIDwmY2xrcyAzNj47CisJCQkJY2xvY2tzID0gPCZjbGtzIDEwNT4sIDwmY2xrcyA1Mj47CiAJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7CiAJCQkJaW50ZXJydXB0cyA9IDwyNj47CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEtYmFiYmFnZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1iYWJiYWdlLmR0cwppbmRleCA1NjU2OWNlLi42NDliZWZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1iYWJiYWdlLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1iYWJiYWdlLmR0cwpAQCAtMTI3LDI0ICsxMjcsMTIgQEAKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwogCi0JCXJlZ191c2JoMV92YnVzOiByZWd1bGF0b3JAMCB7Ci0JCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0JCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYmgxcmVnPjsKLQkJCXJlZyA9IDwwPjsKLQkJCXJlZ3VsYXRvci1uYW1lID0gInVzYmgxX3ZidXMiOwotCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47Ci0JCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKLQkJCWdwaW8gPSA8JmdwaW8yIDUgR1BJT19BQ1RJVkVfSElHSD47Ci0JCQllbmFibGUtYWN0aXZlLWhpZ2g7Ci0JCX07Ci0KLQkJcmVnX3VzYm90Z192YnVzOiByZWd1bGF0b3JAMSB7CisJCXJlZ19odWJfcmVzZXQ6IHJlZ3VsYXRvckAwIHsKIAkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNib3RncmVnPjsKLQkJCXJlZyA9IDwxPjsKLQkJCXJlZ3VsYXRvci1uYW1lID0gInVzYm90Z192YnVzIjsKKwkJCXJlZyA9IDwwPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gImh1Yl9yZXNldCI7CiAJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKIAkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OwogCQkJZ3BpbyA9IDwmZ3BpbzEgNyBHUElPX0FDVElWRV9ISUdIPjsKQEAgLTE3Niw2ICsxNjQsNyBAQAogCQkJcmVnID0gPDA+OwogCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX0RVTU1ZPjsKIAkJCWNsb2NrLW5hbWVzID0gIm1haW5fY2xrIjsKKwkJCXJlc2V0LWdwaW9zID0gPCZncGlvMiA1IEdQSU9fQUNUSVZFX0xPVz47CiAJCX07CiAJfTsKIH07CkBAIC00MTksNyArNDA4LDcgQEAKICZ1c2JoMSB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNiaDE+OwotCXZidXMtc3VwcGx5ID0gPCZyZWdfdXNiaDFfdmJ1cz47CisJdmJ1cy1zdXBwbHkgPSA8JnJlZ19odWJfcmVzZXQ+OwogCWZzbCx1c2JwaHkgPSA8JnVzYmgxcGh5PjsKIAlwaHlfdHlwZSA9ICJ1bHBpIjsKIAlzdGF0dXMgPSAib2theSI7CkBAIC00MjksNyArNDE4LDYgQEAKIAlkcl9tb2RlID0gIm90ZyI7CiAJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CiAJcGh5X3R5cGUgPSAidXRtaV93aWRlIjsKLQl2YnVzLXN1cHBseSA9IDwmcmVnX3VzYm90Z192YnVzPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLmR0c2kKaW5kZXggNGZjMDNiNy4uMjEwOWQwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaQpAQCAtMzM1LDggKzMzNSw4IEBACiAJCQl2cHU6IHZwdUAwMjA0MDAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJjbm0sY29kYTk2MCI7CiAJCQkJcmVnID0gPDB4MDIwNDAwMDAgMHgzYzAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkJICAgICAgICAgICAgIDwwIDEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWludGVycnVwdHMgPSA8MCAxMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJICAgICA8MCAzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJCWludGVycnVwdC1uYW1lcyA9ICJiaXQiLCAianBlZyI7CiAJCQkJY2xvY2tzID0gPCZjbGtzIElNWDZRRExfQ0xLX1ZQVV9BWEk+LAogCQkJCQkgPCZjbGtzIElNWDZRRExfQ0xLX01NRENfQ0gwX0FYST4sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1zZGIuZHRzCmluZGV4IDFlNmU1Y2MuLmMxMDhiYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1zZGIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1zZGIuZHRzCkBAIC0xNTksMTMgKzE1OSwyOCBAQAogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0MT47CiAJcGh5LXN1cHBseSA9IDwmcmVnX2VuZXRfM3YzPjsKIAlwaHktbW9kZSA9ICJyZ21paSI7CisJcGh5LWhhbmRsZSA9IDwmZXRocGh5MT47CiAJc3RhdHVzID0gIm9rYXkiOworCisJbWRpbyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlldGhwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQlyZWcgPSA8MT47CisJCX07CisKKwkJZXRocGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJcmVnID0gPDI+OworCQl9OworCX07CiB9OwogCiAmZmVjMiB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldDI+OwogCXBoeS1tb2RlID0gInJnbWlpIjsKKwlwaHktaGFuZGxlID0gPCZldGhwaHkyPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLmR0c2kKaW5kZXggNjU3ZGExNC4uYzcwYmIyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbHMxMDIxYS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEuZHRzaQpAQCAtMTQyLDYgKzE0Miw3IEBACiAJCXNjZmc6IHNjZmdAMTU3MDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLXNjZmciLCAic3lzY29uIjsKIAkJCXJlZyA9IDwweDAgMHgxNTcwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWJpZy1lbmRpYW47CiAJCX07CiAKIAkJY2xvY2tnZW46IGNsb2NraW5nQDFlZTEwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTAwLmR0cwppbmRleCA1M2YzY2EwLi5iNTUwYzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTAwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTAwLmR0cwpAQCAtNzAwLDExICs3MDAsOSBAQAogCQl9OwogCX07CiAKKwkvKiBFdGhlcm5ldCBpcyBvbiBzb21lIGVhcmx5IGRldmVsb3BtZW50IGJvYXJkcyBhbmQgcWVtdSAqLwogCWV0aGVybmV0QGdwbWMgewogCQljb21wYXRpYmxlID0gInNtc2MsbGFuOTFjOTQiOwotCi0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0KIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzI+OwogCQlpbnRlcnJ1cHRzID0gPDIyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwkvKiBncGlvNTQgKi8KIAkJcmVnID0gPDEgMHgzMDAgMHhmPjsJCS8qIDE2IGJ5dGUgSU8gcmFuZ2UgYXQgb2Zmc2V0IDB4MzAwICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLmR0c2kKaW5kZXggM2UwNjdkZC4uNjE5NGQ2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmIuZHRzaQpAQCAtMTU1LDYgKzE1NSwxNSBAQAogfTsKIAogJnBpbmN0cmwgeworCXBjZmdfcHVsbF9ub25lX2Rydl84bWE6IHBjZmctcHVsbC1ub25lLWRydi04bWEgeworCQlkcml2ZS1zdHJlbmd0aCA9IDw4PjsKKwl9OworCisJcGNmZ19wdWxsX3VwX2Rydl84bWE6IHBjZmctcHVsbC11cC1kcnYtOG1hIHsKKwkJYmlhcy1wdWxsLXVwOworCQlkcml2ZS1zdHJlbmd0aCA9IDw4PjsKKwl9OworCiAJYmFja2xpZ2h0IHsKIAkJYmxfZW46IGJsLWVuIHsKIAkJCXJvY2tjaGlwLHBpbnMgPSA8NyAyIFJLX0ZVTkNfR1BJTyAmcGNmZ19wdWxsX25vbmU+OwpAQCAtMTczLDYgKzE4MiwyNyBAQAogCQl9OwogCX07CiAKKwlzZG1tYyB7CisJCS8qCisJCSAqIERlZmF1bHQgZHJpdmUgc3RyZW5ndGggaXNuJ3QgZW5vdWdoIHRvIGFjaGlldmUgZXZlbgorCQkgKiBoaWdoLXNwZWVkIG1vZGUgb24gRVZCIGJvYXJkIHNvIGJ1bXAgdXAgdG8gOG1hLgorCQkgKi8KKwkJc2RtbWNfYnVzNDogc2RtbWMtYnVzNCB7CisJCQlyb2NrY2hpcCxwaW5zID0gPDYgMTYgUktfRlVOQ18xICZwY2ZnX3B1bGxfdXBfZHJ2XzhtYT4sCisJCQkJCTw2IDE3IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX3VwX2Rydl84bWE+LAorCQkJCQk8NiAxOCBSS19GVU5DXzEgJnBjZmdfcHVsbF91cF9kcnZfOG1hPiwKKwkJCQkJPDYgMTkgUktfRlVOQ18xICZwY2ZnX3B1bGxfdXBfZHJ2XzhtYT47CisJCX07CisKKwkJc2RtbWNfY2xrOiBzZG1tYy1jbGsgeworCQkJcm9ja2NoaXAscGlucyA9IDw2IDIwIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX25vbmVfZHJ2XzhtYT47CisJCX07CisKKwkJc2RtbWNfY21kOiBzZG1tYy1jbWQgeworCQkJcm9ja2NoaXAscGlucyA9IDw2IDIxIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX3VwX2Rydl84bWE+OworCQl9OworCX07CisKIAl1c2IgewogCQlob3N0X3ZidXNfZHJ2OiBob3N0LXZidXMtZHJ2IHsKIAkJCXJvY2tjaGlwLHBpbnMgPSA8MCAxNCBSS19GVU5DX0dQSU8gJnBjZmdfcHVsbF9ub25lPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDN4bWIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDN4bWIuZHRzaQppbmRleCA0OWMxMGQzLi43N2UwMzY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzeG1iLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkM3htYi5kdHNpCkBAIC0xNzYsNyArMTc2LDcgQEAKIAkJCSJIZWFkcGhvbmUgSmFjayIsICJIUE9VVFIiLAogCQkJIklOMkwiLCAiTGluZSBJbiBKYWNrIiwKIAkJCSJJTjJSIiwgIkxpbmUgSW4gSmFjayIsCi0JCQkiTUlDQklBUyIsICJJTjFMIiwKKwkJCSJNaWMiLCAiTUlDQklBUyIsCiAJCQkiSU4xTCIsICJNaWMiOwogCiAJCWF0bWVsLHNzYy1jb250cm9sbGVyID0gPCZzc2MwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDQuZHRzaQppbmRleCAxYjBmMzBjLi5iOTQ5OTVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQ0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkNC5kdHNpCkBAIC0xMDA4LDcgKzEwMDgsNyBAQAogCiAJCQlwaXQ6IHRpbWVyQGZjMDY4NjMwIHsKIAkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXBpdCI7Ci0JCQkJcmVnID0gPDB4ZmMwNjg2MzAgMHhmPjsKKwkJCQlyZWcgPSA8MHhmYzA2ODYzMCAweDEwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDMgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQljbG9ja3MgPSA8JmgzMmNrPjsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1uaGsxNS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1uaGsxNS5kdHMKaW5kZXggYThjMDBlZS4uM2QwYjg3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstbmhrMTUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLW5oazE1LmR0cwpAQCAtMjUsMTEgKzI1LDExIEBACiAJCXN0bXBlMjQwMV8xIHsKIAkJCXN0bXBlMjQwMV8xX25oa19tb2RlOiBzdG1wZTI0MDFfMV9uaGsgewogCQkJCW5oa19jZmcxIHsKLQkJCQkJc3RlLHBpbnMgPSAiR1BJTzc2X0IyMCI7IC8vIElSUSBsaW5lCisJCQkJCXBpbnMgPSAiR1BJTzc2X0IyMCI7IC8vIElSUSBsaW5lCiAJCQkJCXN0ZSxpbnB1dCA9IDwwPjsKIAkJCQl9OwogCQkJCW5oa19jZmcyIHsKLQkJCQkJc3RlLHBpbnMgPSAiR1BJTzc3X0I4IjsgLy8gcmVzZXQgbGluZQorCQkJCQlwaW5zID0gIkdQSU83N19COCI7IC8vIHJlc2V0IGxpbmUKIAkJCQkJc3RlLG91dHB1dCA9IDwxPjsKIAkJCQl9OwogCQkJfTsKQEAgLTM3LDExICszNywxMSBAQAogCQlzdG1wZTI0MDFfMiB7CiAJCQlzdG1wZTI0MDFfMl9uaGtfbW9kZTogc3RtcGUyNDAxXzJfbmhrIHsKIAkJCQluaGtfY2ZnMSB7Ci0JCQkJCXN0ZSxwaW5zID0gIkdQSU83OF9BOCI7IC8vIElSUSBsaW5lCisJCQkJCXBpbnMgPSAiR1BJTzc4X0E4IjsgLy8gSVJRIGxpbmUKIAkJCQkJc3RlLGlucHV0ID0gPDA+OwogCQkJCX07CiAJCQkJbmhrX2NmZzIgewotCQkJCQlzdGUscGlucyA9ICJHUElPNzlfQzkiOyAvLyByZXNldCBsaW5lCisJCQkJCXBpbnMgPSAiR1BJTzc5X0M5IjsgLy8gcmVzZXQgbGluZQogCQkJCQlzdGUsb3V0cHV0ID0gPDE+OwogCQkJCX07CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQppbmRleCA3YjQwOTlmLi5kNWM0NjY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQpAQCAtMTcsMTQgKzE3LDYgQEAKIAogCWFsaWFzZXMgewogCQlldGhlcm5ldDAgPSAmZW1hYzsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKLQkJc2VyaWFsNCA9ICZ1YXJ0NDsKLQkJc2VyaWFsNSA9ICZ1YXJ0NTsKLQkJc2VyaWFsNiA9ICZ1YXJ0NjsKLQkJc2VyaWFsNyA9ICZ1YXJ0NzsKIAl9OwogCiAJY2hvc2VuIHsKQEAgLTM5LDYgKzMxLDE0IEBACiAJCQkJIDwmYWhiX2dhdGVzIDQ0PjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CisKKwkJZnJhbWVidWZmZXJAMSB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzaW1wbGUtZnJhbWVidWZmZXIiLCAic2ltcGxlLWZyYW1lYnVmZmVyIjsKKwkJCWFsbHdpbm5lcixwaXBlbGluZSA9ICJkZV9mZTAtZGVfYmUwLWxjZDAtaGRtaSI7CisJCQljbG9ja3MgPSA8JnBsbDUgMT4sIDwmYWhiX2dhdGVzIDM2PiwgPCZhaGJfZ2F0ZXMgNDM+LAorCQkJCSA8JmFoYl9nYXRlcyA0ND4sIDwmYWhiX2dhdGVzIDQ2PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CiAJfTsKIAogCWNwdXMgewpAQCAtNDM4LDggKzQzOCw4IEBACiAJCQlyZWctbmFtZXMgPSAicGh5X2N0cmwiLCAicG11MSIsICJwbXUyIjsKIAkJCWNsb2NrcyA9IDwmdXNiX2NsayA4PjsKIAkJCWNsb2NrLW5hbWVzID0gInVzYl9waHkiOwotCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDE+LCA8JnVzYl9jbGsgMj47Ci0JCQlyZXNldC1uYW1lcyA9ICJ1c2IxX3Jlc2V0IiwgInVzYjJfcmVzZXQiOworCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDA+LCA8JnVzYl9jbGsgMT4sIDwmdXNiX2NsayAyPjsKKwkJCXJlc2V0LW5hbWVzID0gInVzYjBfcmVzZXQiLCAidXNiMV9yZXNldCIsICJ1c2IyX3Jlc2V0IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCBmZTNjNTU5Li5iZmE3NDI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1vbGludXhpbm8tbWljcm8uZHRzCkBAIC01NSw2ICs1NSwxMiBAQAogCW1vZGVsID0gIk9saW1leCBBMTBzLU9saW51eGlubyBNaWNybyI7CiAJY29tcGF0aWJsZSA9ICJvbGltZXgsYTEwcy1vbGludXhpbm8tbWljcm8iLCAiYWxsd2lubmVyLHN1bjVpLWExMHMiOwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDI7CisJCXNlcmlhbDIgPSAmdWFydDM7CisJfTsKKwogCXNvY0AwMWMwMDAwMCB7CiAJCWVtYWM6IGV0aGVybmV0QDAxYzBiMDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kKaW5kZXggMWI3NjY2Ny4uMmU3ZDgyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMuZHRzaQpAQCAtMTgsMTAgKzE4LDYgQEAKIAogCWFsaWFzZXMgewogCQlldGhlcm5ldDAgPSAmZW1hYzsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKIAl9OwogCiAJY2hvc2VuIHsKQEAgLTM5MCw4ICszODYsOCBAQAogCQkJcmVnLW5hbWVzID0gInBoeV9jdHJsIiwgInBtdTEiOwogCQkJY2xvY2tzID0gPCZ1c2JfY2xrIDg+OwogCQkJY2xvY2stbmFtZXMgPSAidXNiX3BoeSI7Ci0JCQlyZXNldHMgPSA8JnVzYl9jbGsgMT47Ci0JCQlyZXNldC1uYW1lcyA9ICJ1c2IxX3Jlc2V0IjsKKwkJCXJlc2V0cyA9IDwmdXNiX2NsayAwPiwgPCZ1c2JfY2xrIDE+OworCQkJcmVzZXQtbmFtZXMgPSAidXNiMF9yZXNldCIsICJ1c2IxX3Jlc2V0IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtaHNnLWg3MDIuZHRzCmluZGV4IGVlZWQxZjIuLmM3YmUzYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLWhzZy1oNzAyLmR0cwpAQCAtNTMsNiArNTMsMTAgQEAKIAltb2RlbCA9ICJIU0cgSDcwMiI7CiAJY29tcGF0aWJsZSA9ICJoc2csaDcwMiIsICJhbGx3aW5uZXIsc3VuNWktYTEzIjsKIAorCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnVhcnQxOworCX07CisKIAlzb2NAMDFjMDAwMDAgewogCQltbWMwOiBtbWNAMDFjMGYwMDAgewogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8tbWljcm8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKaW5kZXggOTE2ZWU4Yi4uM2RlY2VmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKQEAgLTU0LDYgKzU0LDEwIEBACiAJbW9kZWwgPSAiT2xpbWV4IEExMy1PbGludXhpbm8gTWljcm8iOwogCWNvbXBhdGlibGUgPSAib2xpbWV4LGExMy1vbGludXhpbm8tbWljcm8iLCAiYWxsd2lubmVyLHN1bjVpLWExMyI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MTsKKwl9OworCiAJc29jQDAxYzAwMDAwIHsKIAkJbW1jMDogbW1jQDAxYzBmMDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCmluZGV4IGUzMWQyOTEuLmI0MjFmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCkBAIC01NSw2ICs1NSwxMCBAQAogCW1vZGVsID0gIk9saW1leCBBMTMtT2xpbnV4aW5vIjsKIAljb21wYXRpYmxlID0gIm9saW1leCxhMTMtb2xpbnV4aW5vIiwgImFsbHdpbm5lcixzdW41aS1hMTMiOwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDE7CisJfTsKKwogCXNvY0AwMWMwMDAwMCB7CiAJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaQppbmRleCBjMzUyMTdlLi5jNTU2Njg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaQpAQCAtMTYsMTEgKzE2LDYgQEAKIC8gewogCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OwogCi0JYWxpYXNlcyB7Ci0JCXNlcmlhbDAgPSAmdWFydDE7Ci0JCXNlcmlhbDEgPSAmdWFydDM7Ci0JfTsKLQogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0zNDksOCArMzQ0LDggQEAKIAkJCXJlZy1uYW1lcyA9ICJwaHlfY3RybCIsICJwbXUxIjsKIAkJCWNsb2NrcyA9IDwmdXNiX2NsayA4PjsKIAkJCWNsb2NrLW5hbWVzID0gInVzYl9waHkiOwotCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDE+OwotCQkJcmVzZXQtbmFtZXMgPSAidXNiMV9yZXNldCI7CisJCQlyZXNldHMgPSA8JnVzYl9jbGsgMD4sIDwmdXNiX2NsayAxPjsKKwkJCXJlc2V0LW5hbWVzID0gInVzYjBfcmVzZXQiLCAidXNiMV9yZXNldCI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCmluZGV4IGY0NzE1NmIuLjFlN2U3YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCkBAIC01MywxMiArNTMsNiBAQAogCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAKIAlhbGlhc2VzIHsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKLQkJc2VyaWFsNCA9ICZ1YXJ0NDsKLQkJc2VyaWFsNSA9ICZ1YXJ0NTsKIAkJZXRoZXJuZXQwID0gJmdtYWM7CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWJhbmFuYXBpLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1iYW5hbmFwaS5kdHMKaW5kZXggMWNmMTIxNC4uYmQ3YjE1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWJhbmFuYXBpLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtYmFuYW5hcGkuZHRzCkBAIC01NSw2ICs1NSwxMiBAQAogCW1vZGVsID0gIkxlTWFrZXIgQmFuYW5hIFBpIjsKIAljb21wYXRpYmxlID0gImxlbWFrZXIsYmFuYW5hcGkiLCAiYWxsd2lubmVyLHN1bjdpLWEyMCI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0MzsKKwkJc2VyaWFsMiA9ICZ1YXJ0NzsKKwl9OworCiAJc29jQDAxYzAwMDAwIHsKIAkJc3BpMDogc3BpQDAxYzA1MDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaHVtbWluZ2JpcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWh1bW1pbmdiaXJkLmR0cwppbmRleCAwZTRiZmEzLi4wYmNlZmNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaHVtbWluZ2JpcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1odW1taW5nYmlyZC5kdHMKQEAgLTE5LDYgKzE5LDE0IEBACiAJbW9kZWwgPSAiTWVycmlpIEEyMCBIdW1taW5nYmlyZCI7CiAJY29tcGF0aWJsZSA9ICJtZXJyaWksYTIwLWh1bW1pbmdiaXJkIiwgImFsbHdpbm5lcixzdW43aS1hMjAiOwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDI7CisJCXNlcmlhbDIgPSAmdWFydDM7CisJCXNlcmlhbDMgPSAmdWFydDQ7CisJCXNlcmlhbDQgPSAmdWFydDU7CisJfTsKKwogCXNvY0AwMWMwMDAwMCB7CiAJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCA5ZDY2OWNkZi4uNjZjYzc3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMKQEAgLTIwLDYgKzIwLDkgQEAKIAljb21wYXRpYmxlID0gIm9saW1leCxhMjAtb2xpbnV4aW5vLW1pY3JvIiwgImFsbHdpbm5lcixzdW43aS1hMjAiOwogCiAJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDY7CisJCXNlcmlhbDIgPSAmdWFydDc7CiAJCXNwaTAgPSAmc3BpMTsKIAkJc3BpMSA9ICZzcGkyOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCmluZGV4IGUyMWNlNTkuLjg5NzQ5Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCkBAIC01NCwxNCArNTQsNiBAQAogCiAJYWxpYXNlcyB7CiAJCWV0aGVybmV0MCA9ICZnbWFjOwotCQlzZXJpYWwwID0gJnVhcnQwOwotCQlzZXJpYWwxID0gJnVhcnQxOwotCQlzZXJpYWwyID0gJnVhcnQyOwotCQlzZXJpYWwzID0gJnVhcnQzOwotCQlzZXJpYWw0ID0gJnVhcnQ0OwotCQlzZXJpYWw1ID0gJnVhcnQ1OwotCQlzZXJpYWw2ID0gJnVhcnQ2OwotCQlzZXJpYWw3ID0gJnVhcnQ3OwogCX07CiAKIAljaG9zZW4gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy1pcHBvLXE4aC12NS5kdHMKaW5kZXggN2YyMTE3Yy4uMzJhZDgwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMtaXBwby1xOGgtdjUuZHRzCkBAIC01NSw2ICs1NSwxMCBAQAogCW1vZGVsID0gIklwcG8gUThIIER1YWwgQ29yZSBUYWJsZXQgKHY1KSI7CiAJY29tcGF0aWJsZSA9ICJpcHBvLHE4aC12NSIsICJhbGx3aW5uZXIsc3VuOGktYTIzIjsKIAorCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnJfdWFydDsKKwl9OworCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiZWFybHlwcmludGsgY29uc29sZT10dHlTMCwxMTUyMDAiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCmluZGV4IDA3NDZjZDEuLjg2NTg0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCkBAIC01MiwxNSArNTIsNiBAQAogLyB7CiAJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAotCWFsaWFzZXMgewotCQlzZXJpYWwwID0gJnVhcnQwOwotCQlzZXJpYWwxID0gJnVhcnQxOwotCQlzZXJpYWwyID0gJnVhcnQyOwotCQlzZXJpYWwzID0gJnVhcnQzOwotCQlzZXJpYWw0ID0gJnVhcnQ0OwotCQlzZXJpYWw1ID0gJnJfdWFydDsKLQl9OwotCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC1vcHRpbXVzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC1vcHRpbXVzLmR0cwppbmRleCA1MDY5NDhmLi4xMWVjNzEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAtb3B0aW11cy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLW9wdGltdXMuZHRzCkBAIC01NCw2ICs1NCwxMSBAQAogCW1vZGVsID0gIk1lcnJpaSBBODAgT3B0aW11cyBCb2FyZCI7CiAJY29tcGF0aWJsZSA9ICJtZXJyaWksYTgwLW9wdGltdXMiLCAiYWxsd2lubmVyLHN1bjlpLWE4MCI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0NDsKKwl9OworCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiZWFybHlwcmludGsgY29uc29sZT10dHlTMCwxMTUyMDAiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC5kdHNpCmluZGV4IDQ5NDcxNGYuLjllZjQ0MzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaQpAQCAtNTIsMTYgKzUyLDYgQEAKIC8gewogCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAKLQlhbGlhc2VzIHsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKLQkJc2VyaWFsNCA9ICZ1YXJ0NDsKLQkJc2VyaWFsNSA9ICZ1YXJ0NTsKLQkJc2VyaWFsNiA9ICZyX3VhcnQ7Ci0JfTsKLQogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLXNlYWJvYXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtc2VhYm9hcmQuZHRzCmluZGV4IGVhMjgyYzcuLmUyZmVkMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtc2VhYm9hcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtc2VhYm9hcmQuZHRzCkBAIC00MDYsNyArNDA2LDcgQEAKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAKIAkJbWFnbmV0b21ldGVyQGMgewotCQkJY29tcGF0aWJsZSA9ICJhayxhazg5NzUiOworCQkJY29tcGF0aWJsZSA9ICJhc2FoaS1rYXNlaSxhazg5NzUiOwogCQkJcmVnID0gPDB4Yz47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvPjsKIAkJCWludGVycnVwdHMgPSA8VEVHUkFfR1BJTyhOLCA1KSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLXR3ci5kdHMgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC10d3IuZHRzCmluZGV4IGEwZjc2MjEuLmYyYjY0YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLXR3ci5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtdHdyLmR0cwpAQCAtMTI5LDEzICsxMjksMjggQEAKIAogJmZlYzAgewogCXBoeS1tb2RlID0gInJtaWkiOworCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTA+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzA+OwogCXN0YXR1cyA9ICJva2F5IjsKKworCW1kaW8geworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJZXRocGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJcmVnID0gPDA+OworCQl9OworCisJCWV0aHBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCXJlZyA9IDwxPjsKKwkJfTsKKwl9OwogfTsKIAogJmZlYzEgewogCXBoeS1tb2RlID0gInJtaWkiOworCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTE+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzE+OwogCXN0YXR1cyA9ICJva2F5IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZwppbmRleCA1ZWYxNGRlLi4zZDBjNWQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnCkBAIC04NCw3ICs4NCw4IEBACiBDT05GSUdfUE9XRVJfU1VQUExZPXkKIENPTkZJR19CQVRURVJZX1NCUz15CiBDT05GSUdfQ0hBUkdFUl9UUFM2NTA5MD15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorQ09ORklHX1NFTlNPUlNfTE05MD15CiBDT05GSUdfVEhFUk1BTD15CiBDT05GSUdfRVhZTk9TX1RIRVJNQUw9eQogQ09ORklHX0VYWU5PU19USEVSTUFMX0NPUkU9eQpAQCAtMTA5LDExICsxMTAsMjYgQEAKIENPTkZJR19SRUdVTEFUT1JfUzJNUFMxMT15CiBDT05GSUdfUkVHVUxBVE9SX1M1TTg3Njc9eQogQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA5MD15CitDT05GSUdfRFJNPXkKK0NPTkZJR19EUk1fQlJJREdFPXkKK0NPTkZJR19EUk1fUFROMzQ2MD15CitDT05GSUdfRFJNX1BTODYyMj15CitDT05GSUdfRFJNX0VYWU5PUz15CitDT05GSUdfRFJNX0VYWU5PU19GSU1EPXkKK0NPTkZJR19EUk1fRVhZTk9TX0RQPXkKK0NPTkZJR19EUk1fUEFORUw9eQorQ09ORklHX0RSTV9QQU5FTF9TSU1QTEU9eQogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1NJTVBMRT15CiBDT05GSUdfRVhZTk9TX1ZJREVPPXkKIENPTkZJR19FWFlOT1NfTUlQSV9EU0k9eQorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CitDT05GSUdfTENEX1BMQVRGT1JNPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfN3gxND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCmluZGV4IDIzMjhmZTcuLmJjMzkzYjdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZwpAQCAtMzM4LDYgKzMzOCw3IEBACiBDT05GSUdfVVNCX1hIQ0lfSENEPXkKIENPTkZJR19VU0JfWEhDSV9NVkVCVT15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9FWFlOT1M9eQogQ09ORklHX1VTQl9FSENJX1RFR1JBPXkKIENPTkZJR19VU0JfRUhDSV9IQ0RfU1RJPXkKIENPTkZJR19VU0JfRUhDSV9IQ0RfUExBVEZPUk09eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnCmluZGV4IGMyYzNhODUuLjY2N2Q5ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcKQEAgLTY4LDcgKzY4LDcgQEAKIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPXkKLUNPTkZJR19HRU5FUklDX0NQVUZSRVFfQ1BVMD15CitDT05GSUdfQ1BVRlJFUV9EVD15CiAjIENPTkZJR19BUk1fT01BUDJQTFVTX0NQVUZSRVEgaXMgbm90IHNldAogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAppbmRleCA2NmNlMTc2Li43YjAxNTIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKQEAgLTM4LDYgKzM4LDE2IEBACiAJdmNwdS0+YXJjaC5oY3IgPSBIQ1JfR1VFU1RfTUFTSzsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZjcHVfZ2V0X2hjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmFyY2guaGNyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9zZXRfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBoY3IpCit7CisJdmNwdS0+YXJjaC5oY3IgPSBoY3I7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21vZGVfaXNfMzJiaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMjU0ZTA2NS4uMDRiNGVhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xMjUsOSArMTI1LDYgQEAKIAkgKiBBbnl0aGluZyB0aGF0IGlzIG5vdCB1c2VkIGRpcmVjdGx5IGZyb20gYXNzZW1ibHkgY29kZSBnb2VzCiAJICogaGVyZS4KIAkgKi8KLQkvKiBkY2FjaGUgc2V0L3dheSBvcGVyYXRpb24gcGVuZGluZyAqLwotCWludCBsYXN0X3BjcHU7Ci0JY3B1bWFza190IHJlcXVpcmVfZGNhY2hlX2ZsdXNoOwogCiAJLyogRG9uJ3QgcnVuIHRoZSBndWVzdCBvbiB0aGlzIHZjcHUgKi8KIAlib29sIHBhdXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX21tdS5oCmluZGV4IDYzZTBlY2MuLjFiY2E4ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9tbXUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fbW11LmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAKQEAgLTE2MSwxMyArMTYyLDEwIEBACiAJcmV0dXJuICh2Y3B1LT5hcmNoLmNwMTVbYzFfU0NUTFJdICYgMGIxMDEpID09IDBiMTAxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGh2YV90IGh2YSwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJCSAgICAgYm9vbCBpcGFfdW5jYWNoZWQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19jb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGZuX3QgcGZuLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCQkgICAgICAgYm9vbCBpcGFfdW5jYWNoZWQpCiB7Ci0JaWYgKCF2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpIHx8IGlwYV91bmNhY2hlZCkKLQkJa3ZtX2ZsdXNoX2RjYWNoZV90b19wb2MoKHZvaWQgKilodmEsIHNpemUpOwotCQogCS8qCiAJICogSWYgd2UgYXJlIGdvaW5nIHRvIGluc2VydCBhbiBpbnN0cnVjdGlvbiBwYWdlIGFuZCB0aGUgaWNhY2hlIGlzCiAJICogZWl0aGVyIFZJUFQgb3IgUElQVCwgdGhlcmUgaXMgYSBwb3RlbnRpYWwgcHJvYmxlbSB3aGVyZSB0aGUgaG9zdApAQCAtMTc5LDE4ICsxNzcsNzcgQEAKIAkgKgogCSAqIFZJVlQgY2FjaGVzIGFyZSB0YWdnZWQgdXNpbmcgYm90aCB0aGUgQVNJRCBhbmQgdGhlIFZNSUQgYW5kIGRvZXNuJ3QKIAkgKiBuZWVkIGFueSBraW5kIG9mIGZsdXNoaW5nIChEREkgMDQwNkMuYiAtIFBhZ2UgQjMtMTM5MikuCisJICoKKwkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgdGhyb3VnaCBhIGtlcm5lbCBtYXBwaW5nICh1c2luZyB0aGUKKwkgKiB1c2VyLXNwYWNlIG1hcHBpbmcgaGFzIHByb3ZlZCB0byBiZSB0aGUgd3JvbmcKKwkgKiBzb2x1dGlvbikuIEZvciB0aGF0LCB3ZSBuZWVkIHRvIGttYXAgb25lIHBhZ2UgYXQgYSB0aW1lLAorCSAqIGFuZCBpdGVyYXRlIG92ZXIgdGhlIHJhbmdlLgogCSAqLwotCWlmIChpY2FjaGVfaXNfcGlwdCgpKSB7Ci0JCV9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlKGh2YSwgaHZhICsgc2l6ZSk7Ci0JfSBlbHNlIGlmICghaWNhY2hlX2lzX3ZpdnRfYXNpZF90YWdnZWQoKSkgeworCisJYm9vbCBuZWVkX2ZsdXNoID0gIXZjcHVfaGFzX2NhY2hlX2VuYWJsZWQodmNwdSkgfHwgaXBhX3VuY2FjaGVkOworCisJVk1fQlVHX09OKHNpemUgJiBQQUdFX01BU0spOworCisJaWYgKCFuZWVkX2ZsdXNoICYmICFpY2FjaGVfaXNfcGlwdCgpKQorCQlnb3RvIHZpcHRfY2FjaGU7CisKKwl3aGlsZSAoc2l6ZSkgeworCQl2b2lkICp2YSA9IGttYXBfYXRvbWljX3BmbihwZm4pOworCisJCWlmIChuZWVkX2ZsdXNoKQorCQkJa3ZtX2ZsdXNoX2RjYWNoZV90b19wb2ModmEsIFBBR0VfU0laRSk7CisKKwkJaWYgKGljYWNoZV9pc19waXB0KCkpCisJCQlfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZSgodW5zaWduZWQgbG9uZyl2YSwKKwkJCQkJCSAgICh1bnNpZ25lZCBsb25nKXZhICsgUEFHRV9TSVpFKTsKKworCQlzaXplIC09IFBBR0VfU0laRTsKKwkJcGZuKys7CisKKwkJa3VubWFwX2F0b21pYyh2YSk7CisJfQorCit2aXB0X2NhY2hlOgorCWlmICghaWNhY2hlX2lzX3BpcHQoKSAmJiAhaWNhY2hlX2lzX3ZpdnRfYXNpZF90YWdnZWQoKSkgewogCQkvKiBhbnkga2luZCBvZiBWSVBUIGNhY2hlICovCiAJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogCX0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2ZsdXNoX2RjYWNoZV9wdGUocHRlX3QgcHRlKQoreworCXZvaWQgKnZhID0ga21hcF9hdG9taWMocHRlX3BhZ2UocHRlKSk7CisKKwlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYyh2YSwgUEFHRV9TSVpFKTsKKworCWt1bm1hcF9hdG9taWModmEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fZmx1c2hfZGNhY2hlX3BtZChwbWRfdCBwbWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gUE1EX1NJWkU7CisJcGZuX3QgcGZuID0gcG1kX3BmbihwbWQpOworCisJd2hpbGUgKHNpemUpIHsKKwkJdm9pZCAqdmEgPSBrbWFwX2F0b21pY19wZm4ocGZuKTsKKworCQlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYyh2YSwgUEFHRV9TSVpFKTsKKworCQlwZm4rKzsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisKKwkJa3VubWFwX2F0b21pYyh2YSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fZmx1c2hfZGNhY2hlX3B1ZChwdWRfdCBwdWQpCit7Cit9CisKICNkZWZpbmUga3ZtX3ZpcnRfdG9fcGh5cyh4KQkJdmlydF90b19pZG1hcCgodW5zaWduZWQgbG9uZykoeCkpCiAKLXZvaWQgc3RhZ2UyX2ZsdXNoX3ZtKHN0cnVjdCBrdm0gKmt2bSk7Cit2b2lkIGt2bV9zZXRfd2F5X2ZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cit2b2lkIGt2bV90b2dnbGVfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhc19lbmFibGVkKTsKIAogI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKaW5kZXggNzA1YmI3Ni4uMGMzZjVhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCkBAIC00MTMsNiArNDEzLDcgQEAKICNkZWZpbmUgX19OUl9nZXRyYW5kb20JCQkoX19OUl9TWVNDQUxMX0JBU0UrMzg0KQogI2RlZmluZSBfX05SX21lbWZkX2NyZWF0ZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM4NSkKICNkZWZpbmUgX19OUl9icGYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzg2KQorI2RlZmluZSBfX05SX2V4ZWN2ZWF0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM4NykKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgU1dJcyBhcmUgQVJNIHByaXZhdGUuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCmluZGV4IGU1MTgzM2YuLjA1NzQ1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCkBAIC0zOTYsNiArMzk2LDcgQEAKIAkJQ0FMTChzeXNfZ2V0cmFuZG9tKQogLyogMzg1ICovCUNBTEwoc3lzX21lbWZkX2NyZWF0ZSkKIAkJQ0FMTChzeXNfYnBmKQorCQlDQUxMKHN5c19leGVjdmVhdCkKICNpZm5kZWYgc3lzY2FsbHNfY291bnRlZAogLmVxdSBzeXNjYWxsc19wYWRkaW5nLCAoKE5SX3N5c2NhbGxzICsgMykgJiB+MykgLSBOUl9zeXNjYWxscwogI2RlZmluZSBzeXNjYWxsc19jb3VudGVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKaW5kZXggNDE3NmRmNy4uMWEwMDQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUwpAQCAtMjUzLDIxICsyNTMsMjIgQEAKIAkuZW5kbQogCiAJLm1hY3JvCXJlc3RvcmVfdXNlcl9yZWdzLCBmYXN0ID0gMCwgb2Zmc2V0ID0gMAotCWxkcglyMSwgW3NwLCAjXG9mZnNldCArIFNfUFNSXQlAIGdldCBjYWxsaW5nIGNwc3IKLQlsZHIJbHIsIFtzcCwgI1xvZmZzZXQgKyBTX1BDXSEJQCBnZXQgcGMKKwltb3YJcjIsIHNwCisJbGRyCXIxLCBbcjIsICNcb2Zmc2V0ICsgU19QU1JdCUAgZ2V0IGNhbGxpbmcgY3BzcgorCWxkcglsciwgW3IyLCAjXG9mZnNldCArIFNfUENdIQlAIGdldCBwYwogCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1Y2KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfMzJ2NkspCiAJQCBXZSBtdXN0IGF2b2lkIGNscmV4IGR1ZSB0byBDb3J0ZXgtQTE1IGVycmF0dW0gIzgzMDMyMQotCXN0cmV4CXIxLCByMiwgW3NwXQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCisJc3RyZXgJcjEsIHIyLCBbcjJdCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKICNlbmRpZgogCS5pZglcZmFzdAotCWxkbWRiCXNwLCB7cjEgLSBscn1eCQkJQCBnZXQgY2FsbGluZyByMSAtIGxyCisJbGRtZGIJcjIsIHtyMSAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIxIC0gbHIKIAkuZWxzZQotCWxkbWRiCXNwLCB7cjAgLSBscn1eCQkJQCBnZXQgY2FsbGluZyByMCAtIGxyCisJbGRtZGIJcjIsIHtyMCAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIwIC0gbHIKIAkuZW5kaWYKIAltb3YJcjAsIHIwCQkJCUAgQVJNdjVUIGFuZCBlYXJsaWVyIHJlcXVpcmUgYSBub3AKIAkJCQkJCUAgYWZ0ZXIgbGRtIHt9XgotCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX1BDCisJYWRkCXNwLCBzcCwgI1xvZmZzZXQgKyBTX0ZSQU1FX1NJWkUKIAltb3ZzCXBjLCBscgkJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCiAJLmVuZG0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggZjdjNjVhZC4uNTU3ZTEyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xMTYsOCArMTE2LDE0IEBACiAJCXJldCA9IDE7CiAJfQogCi0JaWYgKGxlZnQgPiAoczY0KWFybXBtdS0+bWF4X3BlcmlvZCkKLQkJbGVmdCA9IGFybXBtdS0+bWF4X3BlcmlvZDsKKwkvKgorCSAqIExpbWl0IHRoZSBtYXhpbXVtIHBlcmlvZCB0byBwcmV2ZW50IHRoZSBjb3VudGVyIHZhbHVlCisJICogZnJvbSBvdmVydGFraW5nIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIHByb2dyYW0uIEluCisJICogZWZmZWN0IHdlIGFyZSByZWR1Y2luZyBtYXhfcGVyaW9kIHRvIGFjY291bnQgZm9yCisJICogaW50ZXJydXB0IGxhdGVuY3kgKGFuZCB3ZSBhcmUgYmVpbmcgdmVyeSBjb25zZXJ2YXRpdmUpLgorCSAqLworCWlmIChsZWZ0ID4gKGFybXBtdS0+bWF4X3BlcmlvZCA+PiAxKSkKKwkJbGVmdCA9IGFybXBtdS0+bWF4X3BlcmlvZCA+PiAxOwogCiAJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX3JlZ3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX3JlZ3MuYwppbmRleCA2ZTQzNzljLi41OTJkZGEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9yZWdzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfcmVncy5jCkBAIC0yOCwzICsyOCwxMSBAQAogewogCXJldHVybiBQRVJGX1NBTVBMRV9SRUdTX0FCSV8zMjsKIH0KKwordm9pZCBwZXJmX2dldF9yZWdzX3VzZXIoc3RydWN0IHBlcmZfcmVncyAqcmVnc191c2VyLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVnc191c2VyX2NvcHkpCit7CisJcmVnc191c2VyLT5yZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCXJlZ3NfdXNlci0+YWJpID0gcGVyZl9yZWdfYWJpKGN1cnJlbnQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCBmOWM4NjM5Li5lNTU0MDhlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtNjU3LDEwICs2NTcsMTMgQEAKIAogCS8qCiAJICogRW5zdXJlIHRoYXQgc3RhcnQvc2l6ZSBhcmUgYWxpZ25lZCB0byBhIHBhZ2UgYm91bmRhcnkuCi0JICogU2l6ZSBpcyBhcHByb3ByaWF0ZWx5IHJvdW5kZWQgZG93biwgc3RhcnQgaXMgcm91bmRlZCB1cC4KKwkgKiBTaXplIGlzIHJvdW5kZWQgZG93biwgc3RhcnQgaXMgcm91bmRlZCB1cC4KIAkgKi8KLQlzaXplIC09IHN0YXJ0ICYgflBBR0VfTUFTSzsKIAlhbGlnbmVkX3N0YXJ0ID0gUEFHRV9BTElHTihzdGFydCk7CisJaWYgKGFsaWduZWRfc3RhcnQgPiBzdGFydCArIHNpemUpCisJCXNpemUgPSAwOworCWVsc2UKKwkJc2l6ZSAtPSBhbGlnbmVkX3N0YXJ0IC0gc3RhcnQ7CiAKICNpZm5kZWYgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQKIAlpZiAoYWxpZ25lZF9zdGFydCA+IFVMT05HX01BWCkgewpAQCAtMTA0Niw2ICsxMDQ5LDE1IEBACiAJCXNlcV9wcmludGYobSwgIm1vZGVsIG5hbWVcdDogJXMgcmV2ICVkICglcylcbiIsCiAJCQkgICBjcHVfbmFtZSwgY3B1aWQgJiAxNSwgZWxmX3BsYXRmb3JtKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKKwkJc2VxX3ByaW50ZihtLCAiQm9nb01JUFNcdDogJWx1LiUwMmx1XG4iLAorCQkJICAgcGVyX2NwdShjcHVfZGF0YSwgaSkubG9vcHNfcGVyX2ppZmZ5IC8gKDUwMDAwMFVML0haKSwKKwkJCSAgIChwZXJfY3B1KGNwdV9kYXRhLCBpKS5sb29wc19wZXJfamlmZnkgLyAoNTAwMFVML0haKSkgJSAxMDApOworI2Vsc2UKKwkJc2VxX3ByaW50ZihtLCAiQm9nb01JUFNcdDogJWx1LiUwMmx1XG4iLAorCQkJICAgbG9vcHNfcGVyX2ppZmZ5IC8gKDUwMDAwMC9IWiksCisJCQkgICAobG9vcHNfcGVyX2ppZmZ5IC8gKDUwMDAvSFopKSAlIDEwMCk7CisjZW5kaWYKIAkJLyogZHVtcCBvdXQgdGhlIHByb2Nlc3NvciBmZWF0dXJlcyAqLwogCQlzZXFfcHV0cyhtLCAiRmVhdHVyZXNcdDogIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwppbmRleCA1ZTYwNTJlLi44NmVmMjQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCkBAIC0zODcsNiArMzg3LDE4IEBACiAKIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQogeworCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBib2dvc3VtID0gMDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQlib2dvc3VtICs9IHBlcl9jcHUoY3B1X2RhdGEsIGNwdSkubG9vcHNfcGVyX2ppZmZ5OworCisJcHJpbnRrKEtFUk5fSU5GTyAiU01QOiBUb3RhbCBvZiAlZCBwcm9jZXNzb3JzIGFjdGl2YXRlZCAiCisJICAgICAgICIoJWx1LiUwMmx1IEJvZ29NSVBTKS5cbiIsCisJICAgICAgIG51bV9vbmxpbmVfY3B1cygpLAorCSAgICAgICBib2dvc3VtIC8gKDUwMDAwMC9IWiksCisJICAgICAgIChib2dvc3VtIC8gKDUwMDAvSFopKSAlIDEwMCk7CisKIAloeXBfbW9kZV9jaGVjaygpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vYXJtLmMgYi9hcmNoL2FybS9rdm0vYXJtLmMKaW5kZXggMmQ2ZDkxMC4uMGIwZDU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL2FybS5jCisrKyBiL2FyY2gvYXJtL2t2bS9hcm0uYwpAQCAtMjgxLDE1ICsyODEsNiBAQAogCXZjcHUtPmNwdSA9IGNwdTsKIAl2Y3B1LT5hcmNoLmhvc3RfY3B1X2NvbnRleHQgPSB0aGlzX2NwdV9wdHIoa3ZtX2hvc3RfY3B1X3N0YXRlKTsKIAotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGlzIHZjcHUgcmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGZsdXNoZWQgb24KLQkgKiB0aGlzIHBoeXNpY2FsIENQVS4gVGhpcyBpcyBhIGNvbnNlcXVlbmNlIG9mIGRvaW5nIGRjYWNoZQotCSAqIG9wZXJhdGlvbnMgYnkgc2V0L3dheSBvbiB0aGlzIHZjcHUuIFdlIGRvIGl0IGhlcmUgdG8gYmUgaW4KLQkgKiBhIG5vbi1wcmVlbXB0aWJsZSBzZWN0aW9uLgotCSAqLwotCWlmIChjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdShjcHUsICZ2Y3B1LT5hcmNoLnJlcXVpcmVfZGNhY2hlX2ZsdXNoKSkKLQkJZmx1c2hfY2FjaGVfYWxsKCk7IC8qIFdlJ2QgcmVhbGx5IHdhbnQgdjdfZmx1c2hfZGNhY2hlX2FsbCgpICovCi0KIAlrdm1fYXJtX3NldF9ydW5uaW5nX3ZjcHUodmNwdSk7CiB9CiAKQEAgLTU0MSw3ICs1MzIsNiBAQAogCQlyZXQgPSBrdm1fY2FsbF9oeXAoX19rdm1fdmNwdV9ydW4sIHZjcHUpOwogCiAJCXZjcHUtPm1vZGUgPSBPVVRTSURFX0dVRVNUX01PREU7Ci0JCXZjcHUtPmFyY2gubGFzdF9wY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQlrdm1fZ3Vlc3RfZXhpdCgpOwogCQl0cmFjZV9rdm1fZXhpdCgqdmNwdV9wYyh2Y3B1KSk7CiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vY29wcm9jLmMgYi9hcmNoL2FybS9rdm0vY29wcm9jLmMKaW5kZXggNzkyOGRiZC4uZjNkODhkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL2NvcHJvYy5jCisrKyBiL2FyY2gvYXJtL2t2bS9jb3Byb2MuYwpAQCAtMTg5LDgyICsxODksNDAgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2VlIG5vdGUgYXQgQVJNIEFSTSBCMS4xNC40ICovCisvKgorICogU2VlIG5vdGUgYXQgQVJNdjcgQVJNIEIxLjE0LjQgKFRMO0RSOiBTL1cgb3BzIGFyZSBub3QgZWFzaWx5IHZpcnR1YWxpemVkKS4KKyAqLwogc3RhdGljIGJvb2wgYWNjZXNzX2Rjc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJY29uc3Qgc3RydWN0IGNvcHJvY19wYXJhbXMgKnAsCiAJCQljb25zdCBzdHJ1Y3QgY29wcm9jX3JlZyAqcikKIHsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgY3B1OwotCiAJaWYgKCFwLT5pc193cml0ZSkKIAkJcmV0dXJuIHJlYWRfZnJvbV93cml0ZV9vbmx5KHZjcHUsIHApOwogCi0JY3B1ID0gZ2V0X2NwdSgpOwotCi0JY3B1bWFza19zZXRhbGwoJnZjcHUtPmFyY2gucmVxdWlyZV9kY2FjaGVfZmx1c2gpOwotCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJnZjcHUtPmFyY2gucmVxdWlyZV9kY2FjaGVfZmx1c2gpOwotCi0JLyogSWYgd2Ugd2VyZSBhbHJlYWR5IHByZWVtcHRlZCwgdGFrZSB0aGUgbG9uZyB3YXkgYXJvdW5kICovCi0JaWYgKGNwdSAhPSB2Y3B1LT5hcmNoLmxhc3RfcGNwdSkgewotCQlmbHVzaF9jYWNoZV9hbGwoKTsKLQkJZ290byBkb25lOwotCX0KLQotCXZhbCA9ICp2Y3B1X3JlZyh2Y3B1LCBwLT5SdDEpOwotCi0Jc3dpdGNoIChwLT5DUm0pIHsKLQljYXNlIDY6CQkJLyogVXBncmFkZSBEQ0lTVyB0byBEQ0NJU1csIGFzIHBlciBIQ1IuU1dJTyAqLwotCWNhc2UgMTQ6CQkvKiBEQ0NJU1cgKi8KLQkJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxNCwgMiIgOiA6ICJyIiAodmFsKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSAxMDoJCS8qIERDQ1NXICovCi0JCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDIiIDogOiAiciIgKHZhbCkpOwotCQlicmVhazsKLQl9Ci0KLWRvbmU6Ci0JcHV0X2NwdSgpOwotCisJa3ZtX3NldF93YXlfZmx1c2godmNwdSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qCiAgKiBHZW5lcmljIGFjY2Vzc29yIGZvciBWTSByZWdpc3RlcnMuIE9ubHkgY2FsbGVkIGFzIGxvbmcgYXMgSENSX1RWTQotICogaXMgc2V0LgorICogaXMgc2V0LiAgSWYgdGhlIGd1ZXN0IGVuYWJsZXMgdGhlIE1NVSwgd2Ugc3RvcCB0cmFwcGluZyB0aGUgVk0KKyAqIHN5c19yZWdzIGFuZCBsZWF2ZSBpdCBpbiBjb21wbGV0ZSBjb250cm9sIG9mIHRoZSBjYWNoZXMuCisgKgorICogVXNlZCBieSB0aGUgY3B1LXNwZWNpZmljIGNvZGUuCiAgKi8KLXN0YXRpYyBib29sIGFjY2Vzc192bV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICBjb25zdCBzdHJ1Y3QgY29wcm9jX3BhcmFtcyAqcCwKLQkJCSAgY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgKnIpCitib29sIGFjY2Vzc192bV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkgICBjb25zdCBzdHJ1Y3QgY29wcm9jX3BhcmFtcyAqcCwKKwkJICAgY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgKnIpCiB7CisJYm9vbCB3YXNfZW5hYmxlZCA9IHZjcHVfaGFzX2NhY2hlX2VuYWJsZWQodmNwdSk7CisKIAlCVUdfT04oIXAtPmlzX3dyaXRlKTsKIAogCXZjcHUtPmFyY2guY3AxNVtyLT5yZWddID0gKnZjcHVfcmVnKHZjcHUsIHAtPlJ0MSk7CiAJaWYgKHAtPmlzXzY0Yml0KQogCQl2Y3B1LT5hcmNoLmNwMTVbci0+cmVnICsgMV0gPSAqdmNwdV9yZWcodmNwdSwgcC0+UnQyKTsKIAotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogU0NUTFIgYWNjZXNzb3IuIE9ubHkgY2FsbGVkIGFzIGxvbmcgYXMgSENSX1RWTSBpcyBzZXQuICBJZiB0aGUKLSAqIGd1ZXN0IGVuYWJsZXMgdGhlIE1NVSwgd2Ugc3RvcCB0cmFwcGluZyB0aGUgVk0gc3lzX3JlZ3MgYW5kIGxlYXZlCi0gKiBpdCBpbiBjb21wbGV0ZSBjb250cm9sIG9mIHRoZSBjYWNoZXMuCi0gKgotICogVXNlZCBieSB0aGUgY3B1LXNwZWNpZmljIGNvZGUuCi0gKi8KLWJvb2wgYWNjZXNzX3NjdGxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJICBjb25zdCBzdHJ1Y3QgY29wcm9jX3BhcmFtcyAqcCwKLQkJICBjb25zdCBzdHJ1Y3QgY29wcm9jX3JlZyAqcikKLXsKLQlhY2Nlc3Nfdm1fcmVnKHZjcHUsIHAsIHIpOwotCi0JaWYgKHZjcHVfaGFzX2NhY2hlX2VuYWJsZWQodmNwdSkpIHsJLyogTU1VK0NhY2hlcyBlbmFibGVkPyAqLwotCQl2Y3B1LT5hcmNoLmhjciAmPSB+SENSX1RWTTsKLQkJc3RhZ2UyX2ZsdXNoX3ZtKHZjcHUtPmt2bSk7Ci0JfQotCisJa3ZtX3RvZ2dsZV9jYWNoZSh2Y3B1LCB3YXNfZW5hYmxlZCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2t2bS9jb3Byb2MuaCBiL2FyY2gvYXJtL2t2bS9jb3Byb2MuaAppbmRleCAxYTQ0YmJlLi44OGQyNGEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rdm0vY29wcm9jLmgKKysrIGIvYXJjaC9hcm0va3ZtL2NvcHJvYy5oCkBAIC0xNTMsOCArMTUzLDggQEAKICNkZWZpbmUgaXM2NAkJLmlzXzY0ID0gdHJ1ZQogI2RlZmluZSBpczMyCQkuaXNfNjQgPSBmYWxzZQogCi1ib29sIGFjY2Vzc19zY3RscihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCSAgY29uc3Qgc3RydWN0IGNvcHJvY19wYXJhbXMgKnAsCi0JCSAgY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgKnIpOworYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJICAgY29uc3Qgc3RydWN0IGNvcHJvY19wYXJhbXMgKnAsCisJCSAgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcmVnICpyKTsKIAogI2VuZGlmIC8qIF9fQVJNX0tWTV9DT1BST0NfTE9DQUxfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vY29wcm9jX2ExNS5jIGIvYXJjaC9hcm0va3ZtL2NvcHJvY19hMTUuYwppbmRleCBlNmY0YWU0Li5hNzEzNjc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rdm0vY29wcm9jX2ExNS5jCisrKyBiL2FyY2gvYXJtL2t2bS9jb3Byb2NfYTE1LmMKQEAgLTM0LDcgKzM0LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29wcm9jX3JlZyBhMTVfcmVnc1tdID0gewogCS8qIFNDVExSOiBzd2FwcGVkIGJ5IGludGVycnVwdC5TLiAqLwogCXsgQ1JuKCAxKSwgQ1JtKCAwKSwgT3AxKCAwKSwgT3AyKCAwKSwgaXMzMiwKLQkJCWFjY2Vzc19zY3RsciwgcmVzZXRfdmFsLCBjMV9TQ1RMUiwgMHgwMEM1MDA3OCB9LAorCQkJYWNjZXNzX3ZtX3JlZywgcmVzZXRfdmFsLCBjMV9TQ1RMUiwgMHgwMEM1MDA3OCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBrdm1fY29wcm9jX3RhcmdldF90YWJsZSBhMTVfdGFyZ2V0X3RhYmxlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2NvcHJvY19hNy5jIGIvYXJjaC9hcm0va3ZtL2NvcHJvY19hNy5jCmluZGV4IDE3ZmM3Y2QuLmIxOWU0NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS9jb3Byb2NfYTcuYworKysgYi9hcmNoL2FybS9rdm0vY29wcm9jX2E3LmMKQEAgLTM3LDcgKzM3LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29wcm9jX3JlZyBhN19yZWdzW10gPSB7CiAJLyogU0NUTFI6IHN3YXBwZWQgYnkgaW50ZXJydXB0LlMuICovCiAJeyBDUm4oIDEpLCBDUm0oIDApLCBPcDEoIDApLCBPcDIoIDApLCBpczMyLAotCQkJYWNjZXNzX3NjdGxyLCByZXNldF92YWwsIGMxX1NDVExSLCAweDAwQzUwODc4IH0sCisJCQlhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIGMxX1NDVExSLCAweDAwQzUwODc4IH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGt2bV9jb3Byb2NfdGFyZ2V0X3RhYmxlIGE3X3RhcmdldF90YWJsZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2t2bS9tbXUuYyBiL2FyY2gvYXJtL2t2bS9tbXUuYwppbmRleCAxZGM5Nzc4Li4xMzY2NjI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rdm0vbW11LmMKKysrIGIvYXJjaC9hcm0va3ZtL21tdS5jCkBAIC01OCw2ICs1OCwyNiBAQAogCQlrdm1fY2FsbF9oeXAoX19rdm1fdGxiX2ZsdXNoX3ZtaWRfaXBhLCBrdm0sIGlwYSk7CiB9CiAKKy8qCisgKiBELUNhY2hlIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBUaGV5IHRha2UgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBieQorICogdmFsdWUsIGFzIHRoZXkgYXJlIGZsdXNoaW5nIHRoZSBjYWNoZSB1c2luZyB0aGUga2VybmVsIG1hcHBpbmcgKG9yCisgKiBrbWFwIG9uIDMyYml0KS4KKyAqLworc3RhdGljIHZvaWQga3ZtX2ZsdXNoX2RjYWNoZV9wdGUocHRlX3QgcHRlKQoreworCV9fa3ZtX2ZsdXNoX2RjYWNoZV9wdGUocHRlKTsKK30KKworc3RhdGljIHZvaWQga3ZtX2ZsdXNoX2RjYWNoZV9wbWQocG1kX3QgcG1kKQoreworCV9fa3ZtX2ZsdXNoX2RjYWNoZV9wbWQocG1kKTsKK30KKworc3RhdGljIHZvaWQga3ZtX2ZsdXNoX2RjYWNoZV9wdWQocHVkX3QgcHVkKQoreworCV9fa3ZtX2ZsdXNoX2RjYWNoZV9wdWQocHVkKTsKK30KKwogc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlKHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGUsCiAJCQkJICBpbnQgbWluLCBpbnQgbWF4KQogewpAQCAtMTE5LDYgKzEzOSwyNiBAQAogCXB1dF9wYWdlKHZpcnRfdG9fcGFnZShwbWQpKTsKIH0KIAorLyoKKyAqIFVubWFwcGluZyB2cyBkY2FjaGUgbWFuYWdlbWVudDoKKyAqCisgKiBJZiBhIGd1ZXN0IG1hcHMgY2VydGFpbiBtZW1vcnkgcGFnZXMgYXMgdW5jYWNoZWQsIGFsbCB3cml0ZXMgd2lsbAorICogYnlwYXNzIHRoZSBkYXRhIGNhY2hlIGFuZCBnbyBkaXJlY3RseSB0byBSQU0uICBIb3dldmVyLCB0aGUgQ1BVcworICogY2FuIHN0aWxsIHNwZWN1bGF0ZSByZWFkcyAobm90IHdyaXRlcykgYW5kIGZpbGwgY2FjaGUgbGluZXMgd2l0aAorICogZGF0YS4KKyAqCisgKiBUaG9zZSBjYWNoZSBsaW5lcyB3aWxsIGJlICpjbGVhbiogY2FjaGUgbGluZXMgdGhvdWdoLCBzbyBhCisgKiBjbGVhbitpbnZhbGlkYXRlIG9wZXJhdGlvbiBpcyBlcXVpdmFsZW50IHRvIGFuIGludmFsaWRhdGUKKyAqIG9wZXJhdGlvbiwgYmVjYXVzZSBubyBjYWNoZSBsaW5lcyBhcmUgbWFya2VkIGRpcnR5LgorICoKKyAqIFRob3NlIGNsZWFuIGNhY2hlIGxpbmVzIGNvdWxkIGJlIGZpbGxlZCBwcmlvciB0byBhbiB1bmNhY2hlZCB3cml0ZQorICogYnkgdGhlIGd1ZXN0LCBhbmQgdGhlIGNhY2hlIGNvaGVyZW50IElPIHN1YnN5c3RlbSB3b3VsZCB0aGVyZWZvcmUKKyAqIGVuZCB1cCB3cml0aW5nIG9sZCBkYXRhIHRvIGRpc2suCisgKgorICogVGhpcyBpcyB3aHkgcmlnaHQgYWZ0ZXIgdW5tYXBwaW5nIGEgcGFnZS9zZWN0aW9uIGFuZCBpbnZhbGlkYXRpbmcKKyAqIHRoZSBjb3JyZXNwb25kaW5nIFRMQnMsIHdlIGNhbGwga3ZtX2ZsdXNoX2RjYWNoZV9wKigpIHRvIG1ha2Ugc3VyZQorICogdGhlIElPIHN1YnN5c3RlbSB3aWxsIG5ldmVyIGhpdCBpbiB0aGUgY2FjaGUuCisgKi8KIHN0YXRpYyB2b2lkIHVubWFwX3B0ZXMoc3RydWN0IGt2bSAqa3ZtLCBwbWRfdCAqcG1kLAogCQkgICAgICAgcGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kKQogewpAQCAtMTI4LDkgKzE2OCwxNiBAQAogCXN0YXJ0X3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7CiAJZG8gewogCQlpZiAoIXB0ZV9ub25lKCpwdGUpKSB7CisJCQlwdGVfdCBvbGRfcHRlID0gKnB0ZTsKKwogCQkJa3ZtX3NldF9wdGUocHRlLCBfX3B0ZSgwKSk7Ci0JCQlwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UocHRlKSk7CiAJCQlrdm1fdGxiX2ZsdXNoX3ZtaWRfaXBhKGt2bSwgYWRkcik7CisKKwkJCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2FjaGUgZm9yIGRldmljZSBtYXBwaW5ncyAqLworCQkJaWYgKChwdGVfdmFsKG9sZF9wdGUpICYgUEFHRV9TMl9ERVZJQ0UpICE9IFBBR0VfUzJfREVWSUNFKQorCQkJCWt2bV9mbHVzaF9kY2FjaGVfcHRlKG9sZF9wdGUpOworCisJCQlwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UocHRlKSk7CiAJCX0KIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIApAQCAtMTQ5LDggKzE5NiwxMyBAQAogCQluZXh0ID0ga3ZtX3BtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAoIXBtZF9ub25lKCpwbWQpKSB7CiAJCQlpZiAoa3ZtX3BtZF9odWdlKCpwbWQpKSB7CisJCQkJcG1kX3Qgb2xkX3BtZCA9ICpwbWQ7CisKIAkJCQlwbWRfY2xlYXIocG1kKTsKIAkJCQlrdm1fdGxiX2ZsdXNoX3ZtaWRfaXBhKGt2bSwgYWRkcik7CisKKwkJCQlrdm1fZmx1c2hfZGNhY2hlX3BtZChvbGRfcG1kKTsKKwogCQkJCXB1dF9wYWdlKHZpcnRfdG9fcGFnZShwbWQpKTsKIAkJCX0gZWxzZSB7CiAJCQkJdW5tYXBfcHRlcyhrdm0sIHBtZCwgYWRkciwgbmV4dCk7CkBAIC0xNzMsOCArMjI1LDEzIEBACiAJCW5leHQgPSBrdm1fcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCWlmICghcHVkX25vbmUoKnB1ZCkpIHsKIAkJCWlmIChwdWRfaHVnZSgqcHVkKSkgeworCQkJCXB1ZF90IG9sZF9wdWQgPSAqcHVkOworCiAJCQkJcHVkX2NsZWFyKHB1ZCk7CiAJCQkJa3ZtX3RsYl9mbHVzaF92bWlkX2lwYShrdm0sIGFkZHIpOworCisJCQkJa3ZtX2ZsdXNoX2RjYWNoZV9wdWQob2xkX3B1ZCk7CisKIAkJCQlwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UocHVkKSk7CiAJCQl9IGVsc2UgewogCQkJCXVubWFwX3BtZHMoa3ZtLCBwdWQsIGFkZHIsIG5leHQpOwpAQCAtMjA5LDEwICsyNjYsOSBAQAogCiAJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKIAlkbyB7Ci0JCWlmICghcHRlX25vbmUoKnB0ZSkpIHsKLQkJCWh2YV90IGh2YSA9IGdmbl90b19odmEoa3ZtLCBhZGRyID4+IFBBR0VfU0hJRlQpOwotCQkJa3ZtX2ZsdXNoX2RjYWNoZV90b19wb2MoKHZvaWQqKWh2YSwgUEFHRV9TSVpFKTsKLQkJfQorCQlpZiAoIXB0ZV9ub25lKCpwdGUpICYmCisJCSAgICAocHRlX3ZhbCgqcHRlKSAmIFBBR0VfUzJfREVWSUNFKSAhPSBQQUdFX1MyX0RFVklDRSkKKwkJCWt2bV9mbHVzaF9kY2FjaGVfcHRlKCpwdGUpOwogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogfQogCkBAIC0yMjYsMTIgKzI4MiwxMCBAQAogCWRvIHsKIAkJbmV4dCA9IGt2bV9wbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJaWYgKCFwbWRfbm9uZSgqcG1kKSkgewotCQkJaWYgKGt2bV9wbWRfaHVnZSgqcG1kKSkgewotCQkJCWh2YV90IGh2YSA9IGdmbl90b19odmEoa3ZtLCBhZGRyID4+IFBBR0VfU0hJRlQpOwotCQkJCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKCh2b2lkKilodmEsIFBNRF9TSVpFKTsKLQkJCX0gZWxzZSB7CisJCQlpZiAoa3ZtX3BtZF9odWdlKCpwbWQpKQorCQkJCWt2bV9mbHVzaF9kY2FjaGVfcG1kKCpwbWQpOworCQkJZWxzZQogCQkJCXN0YWdlMl9mbHVzaF9wdGVzKGt2bSwgcG1kLCBhZGRyLCBuZXh0KTsKLQkJCX0KIAkJfQogCX0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQpAQCAtMjQ2LDEyICszMDAsMTAgQEAKIAlkbyB7CiAJCW5leHQgPSBrdm1fcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCWlmICghcHVkX25vbmUoKnB1ZCkpIHsKLQkJCWlmIChwdWRfaHVnZSgqcHVkKSkgewotCQkJCWh2YV90IGh2YSA9IGdmbl90b19odmEoa3ZtLCBhZGRyID4+IFBBR0VfU0hJRlQpOwotCQkJCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKCh2b2lkKilodmEsIFBVRF9TSVpFKTsKLQkJCX0gZWxzZSB7CisJCQlpZiAocHVkX2h1Z2UoKnB1ZCkpCisJCQkJa3ZtX2ZsdXNoX2RjYWNoZV9wdWQoKnB1ZCk7CisJCQllbHNlCiAJCQkJc3RhZ2UyX2ZsdXNoX3BtZHMoa3ZtLCBwdWQsIGFkZHIsIG5leHQpOwotCQkJfQogCQl9CiAJfSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiB9CkBAIC0yNzgsNyArMzMwLDcgQEAKICAqIEdvIHRocm91Z2ggdGhlIHN0YWdlIDIgcGFnZSB0YWJsZXMgYW5kIGludmFsaWRhdGUgYW55IGNhY2hlIGxpbmVzCiAgKiBiYWNraW5nIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCB0byB0aGUgVk0uCiAgKi8KLXZvaWQgc3RhZ2UyX2ZsdXNoX3ZtKHN0cnVjdCBrdm0gKmt2bSkKK3N0YXRpYyB2b2lkIHN0YWdlMl9mbHVzaF92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7CiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKQEAgLTkwNSw2ICs5NTcsMTIgQEAKIAlyZXR1cm4gIXBmbl92YWxpZChwZm4pOwogfQogCitzdGF0aWMgdm9pZCBjb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGZuX3QgcGZuLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgYm9vbCB1bmNhY2hlZCkKK3sKKwlfX2NvaGVyZW50X2NhY2hlX2d1ZXN0X3BhZ2UodmNwdSwgcGZuLCBzaXplLCB1bmNhY2hlZCk7Cit9CisKIHN0YXRpYyBpbnQgdXNlcl9tZW1fYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBmYXVsdF9pcGEsCiAJCQkgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsIHVuc2lnbmVkIGxvbmcgaHZhLAogCQkJICB1bnNpZ25lZCBsb25nIGZhdWx0X3N0YXR1cykKQEAgLTk5NCw4ICsxMDUyLDcgQEAKIAkJCWt2bV9zZXRfczJwbWRfd3JpdGFibGUoJm5ld19wbWQpOwogCQkJa3ZtX3NldF9wZm5fZGlydHkocGZuKTsKIAkJfQotCQljb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHZjcHUsIGh2YSAmIFBNRF9NQVNLLCBQTURfU0laRSwKLQkJCQkJICBmYXVsdF9pcGFfdW5jYWNoZWQpOworCQljb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHZjcHUsIHBmbiwgUE1EX1NJWkUsIGZhdWx0X2lwYV91bmNhY2hlZCk7CiAJCXJldCA9IHN0YWdlMl9zZXRfcG1kX2h1Z2Uoa3ZtLCBtZW1jYWNoZSwgZmF1bHRfaXBhLCAmbmV3X3BtZCk7CiAJfSBlbHNlIHsKIAkJcHRlX3QgbmV3X3B0ZSA9IHBmbl9wdGUocGZuLCBtZW1fdHlwZSk7CkBAIC0xMDAzLDggKzEwNjAsNyBAQAogCQkJa3ZtX3NldF9zMnB0ZV93cml0YWJsZSgmbmV3X3B0ZSk7CiAJCQlrdm1fc2V0X3Bmbl9kaXJ0eShwZm4pOwogCQl9Ci0JCWNvaGVyZW50X2NhY2hlX2d1ZXN0X3BhZ2UodmNwdSwgaHZhLCBQQUdFX1NJWkUsCi0JCQkJCSAgZmF1bHRfaXBhX3VuY2FjaGVkKTsKKwkJY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZSh2Y3B1LCBwZm4sIFBBR0VfU0laRSwgZmF1bHRfaXBhX3VuY2FjaGVkKTsKIAkJcmV0ID0gc3RhZ2UyX3NldF9wdGUoa3ZtLCBtZW1jYWNoZSwgZmF1bHRfaXBhLCAmbmV3X3B0ZSwKIAkJCXBncHJvdF92YWwobWVtX3R5cGUpID09IHBncHJvdF92YWwoUEFHRV9TMl9ERVZJQ0UpKTsKIAl9CkBAIC0xNDExLDMgKzE0NjcsNzEgQEAKIAl1bm1hcF9zdGFnZTJfcmFuZ2Uoa3ZtLCBncGEsIHNpemUpOwogCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIH0KKworLyoKKyAqIFNlZSBub3RlIGF0IEFSTXY3IEFSTSBCMS4xNC40IChUTDtEUjogUy9XIG9wcyBhcmUgbm90IGVhc2lseSB2aXJ0dWFsaXplZCkuCisgKgorICogTWFpbiBwcm9ibGVtczoKKyAqIC0gUy9XIG9wcyBhcmUgbG9jYWwgdG8gYSBDUFUgKG5vdCBicm9hZGNhc3QpCisgKiAtIFdlIGhhdmUgbGluZSBtaWdyYXRpb24gYmVoaW5kIG91ciBiYWNrIChzcGVjdWxhdGlvbikKKyAqIC0gU3lzdGVtIGNhY2hlcyBkb24ndCBzdXBwb3J0IFMvVyBhdCBhbGwgKGRhbW4hKQorICoKKyAqIEluIHRoZSBmYWNlIG9mIHRoZSBhYm92ZSwgdGhlIGJlc3Qgd2UgY2FuIGRvIGlzIHRvIHRyeSBhbmQgY29udmVydAorICogUy9XIG9wcyB0byBWQSBvcHMuIEJlY2F1c2UgdGhlIGd1ZXN0IGlzIG5vdCBhbGxvd2VkIHRvIGluZmVyIHRoZQorICogUy9XIHRvIFBBIG1hcHBpbmcsIGl0IGNhbiBvbmx5IHVzZSBTL1cgdG8gbnVrZSB0aGUgd2hvbGUgY2FjaGUsCisgKiB3aGljaCBpcyBhIHJhdGhlciBnb29kIHRoaW5nIGZvciB1cy4KKyAqCisgKiBBbHNvLCBpdCBpcyBvbmx5IHVzZWQgd2hlbiB0dXJuaW5nIGNhY2hlcyBvbi9vZmYgKCJUaGUgZXhwZWN0ZWQKKyAqIHVzYWdlIG9mIHRoZSBjYWNoZSBtYWludGVuYW5jZSBpbnN0cnVjdGlvbnMgdGhhdCBvcGVyYXRlIGJ5IHNldC93YXkKKyAqIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FjaGUgbWFpbnRlbmFuY2UgaW5zdHJ1Y3Rpb25zIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIHBvd2VyZG93biBhbmQgcG93ZXJ1cCBvZiBjYWNoZXMsIGlmIHRoaXMgaXMgcmVxdWlyZWQgYnkKKyAqIHRoZSBpbXBsZW1lbnRhdGlvbi4iKS4KKyAqCisgKiBXZSB1c2UgdGhlIGZvbGxvd2luZyBwb2xpY3k6CisgKgorICogLSBJZiB3ZSB0cmFwIGEgUy9XIG9wZXJhdGlvbiwgd2UgZW5hYmxlIFZNIHRyYXBwaW5nIHRvIGRldGVjdAorICogICBjYWNoZXMgYmVpbmcgdHVybmVkIG9uL29mZiwgYW5kIGRvIGEgZnVsbCBjbGVhbi4KKyAqCisgKiAtIFdlIGZsdXNoIHRoZSBjYWNoZXMgb24gYm90aCBjYWNoZXMgYmVpbmcgdHVybmVkIG9uIGFuZCBvZmYuCisgKgorICogLSBPbmNlIHRoZSBjYWNoZXMgYXJlIGVuYWJsZWQsIHdlIHN0b3AgdHJhcHBpbmcgVk0gb3BzLgorICovCit2b2lkIGt2bV9zZXRfd2F5X2ZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGhjciA9IHZjcHVfZ2V0X2hjcih2Y3B1KTsKKworCS8qCisJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBkbyBhIFMvVyBvcGVyYXRpb24KKwkgKiAoaS5lLiBIQ1JfVFZNIG5vdCBzZXQpIGZsdXNoIHRoZSB3aG9sZSBtZW1vcnksIGFuZCBzZXQgdGhlCisJICogVk0gdHJhcHBpbmcuCisJICoKKwkgKiBPdGhlcndpc2UsIHJlbHkgb24gdGhlIFZNIHRyYXBwaW5nIHRvIHdhaXQgZm9yIHRoZSBNTVUgKworCSAqIENhY2hlcyB0byBiZSB0dXJuZWQgb2ZmLiBBdCB0aGF0IHBvaW50LCB3ZSdsbCBiZSBhYmxlIHRvCisJICogY2xlYW4gdGhlIGNhY2hlcyBhZ2Fpbi4KKwkgKi8KKwlpZiAoIShoY3IgJiBIQ1JfVFZNKSkgeworCQl0cmFjZV9rdm1fc2V0X3dheV9mbHVzaCgqdmNwdV9wYyh2Y3B1KSwKKwkJCQkJdmNwdV9oYXNfY2FjaGVfZW5hYmxlZCh2Y3B1KSk7CisJCXN0YWdlMl9mbHVzaF92bSh2Y3B1LT5rdm0pOworCQl2Y3B1X3NldF9oY3IodmNwdSwgaGNyIHwgSENSX1RWTSk7CisJfQorfQorCit2b2lkIGt2bV90b2dnbGVfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhc19lbmFibGVkKQoreworCWJvb2wgbm93X2VuYWJsZWQgPSB2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpOworCisJLyoKKwkgKiBJZiBzd2l0Y2hpbmcgdGhlIE1NVStjYWNoZXMgb24sIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2FjaGVzLgorCSAqIElmIHN3aXRjaGluZyBpdCBvZmYsIG5lZWQgdG8gY2xlYW4gdGhlIGNhY2hlcy4KKwkgKiBDbGVhbiArIGludmFsaWRhdGUgZG9lcyB0aGUgdHJpY2sgYWx3YXlzLgorCSAqLworCWlmIChub3dfZW5hYmxlZCAhPSB3YXNfZW5hYmxlZCkKKwkJc3RhZ2UyX2ZsdXNoX3ZtKHZjcHUtPmt2bSk7CisKKwkvKiBDYWNoZXMgYXJlIG5vdyBvbiwgc3RvcCB0cmFwcGluZyBWTSBvcHMgKHVudGlsIGEgUy9XIG9wKSAqLworCWlmIChub3dfZW5hYmxlZCkKKwkJdmNwdV9zZXRfaGNyKHZjcHUsIHZjcHVfZ2V0X2hjcih2Y3B1KSAmIH5IQ1JfVFZNKTsKKworCXRyYWNlX2t2bV90b2dnbGVfY2FjaGUoKnZjcHVfcGModmNwdSksIHdhc19lbmFibGVkLCBub3dfZW5hYmxlZCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vdHJhY2UuaCBiL2FyY2gvYXJtL2t2bS90cmFjZS5oCmluZGV4IGIxZDY0MGYuLmI2YTZlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS90cmFjZS5oCisrKyBiL2FyY2gvYXJtL2t2bS90cmFjZS5oCkBAIC0yMjMsNiArMjIzLDQ1IEBACiAJCSAgX19lbnRyeS0+dmNwdV9wYywgX19lbnRyeS0+cjAsIF9fZW50cnktPmltbSkKICk7CiAKK1RSQUNFX0VWRU5UKGt2bV9zZXRfd2F5X2ZsdXNoLAorCSAgICBUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHZjcHVfcGMsIGJvb2wgY2FjaGUpLAorCSAgICBUUF9BUkdTKHZjcHVfcGMsIGNhY2hlKSwKKworCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAorCQkgICAgX19maWVsZCgJdW5zaWduZWQgbG9uZywJdmNwdV9wYwkJKQorCQkgICAgX19maWVsZCgJYm9vbCwJCWNhY2hlCQkpCisJICAgICksCisKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJCSAgICBfX2VudHJ5LT52Y3B1X3BjCQk9IHZjcHVfcGM7CisJCSAgICBfX2VudHJ5LT5jYWNoZQkJPSBjYWNoZTsKKwkgICAgKSwKKworCSAgICBUUF9wcmludGsoIlMvVyBmbHVzaCBhdCAweCUwMTZseCAoY2FjaGUgJXMpIiwKKwkJICAgICAgX19lbnRyeS0+dmNwdV9wYywgX19lbnRyeS0+Y2FjaGUgPyAib24iIDogIm9mZiIpCispOworCitUUkFDRV9FVkVOVChrdm1fdG9nZ2xlX2NhY2hlLAorCSAgICBUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHZjcHVfcGMsIGJvb2wgd2FzLCBib29sIG5vdyksCisJICAgIFRQX0FSR1ModmNwdV9wYywgd2FzLCBub3cpLAorCisJICAgIFRQX1NUUlVDVF9fZW50cnkoCisJCSAgICBfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAl2Y3B1X3BjCQkpCisJCSAgICBfX2ZpZWxkKAlib29sLAkJd2FzCQkpCisJCSAgICBfX2ZpZWxkKAlib29sLAkJbm93CQkpCisJICAgICksCisKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJCSAgICBfX2VudHJ5LT52Y3B1X3BjCQk9IHZjcHVfcGM7CisJCSAgICBfX2VudHJ5LT53YXMJCT0gd2FzOworCQkgICAgX19lbnRyeS0+bm93CQk9IG5vdzsKKwkgICAgKSwKKworCSAgICBUUF9wcmludGsoIlZNIG9wIGF0IDB4JTAxNmx4IChjYWNoZSB3YXMgJXMsIG5vdyAlcykiLAorCQkgICAgICBfX2VudHJ5LT52Y3B1X3BjLCBfX2VudHJ5LT53YXMgPyAib24iIDogIm9mZiIsCisJCSAgICAgIF9fZW50cnktPm5vdyA/ICJvbiIgOiAib2ZmIikKKyk7CisKICNlbmRpZiAvKiBfVFJBQ0VfS1ZNX0ggKi8KIAogI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtc2FtYTUuYwppbmRleCA4ZmI5ZWY1Li45N2Y3MzY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtc2FtYTUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtc2FtYTUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0yNiw4ICsyNywyNSBAQAogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCitzdGF0aWMgaW50IGtzejgwODFfcGh5X2ZpeHVwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpCit7CisJaW50IHZhbHVlOworCisJdmFsdWUgPSBwaHlfcmVhZChwaHksIDB4MTYpOworCXZhbHVlICY9IH4weDIwOworCXBoeV93cml0ZShwaHksIDB4MTYsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgc2FtYTVfZHRfZGV2aWNlX2luaXQodm9pZCkKIHsKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJhdG1lbCxzYW1hNWQ0ZWsiKSAmJgorCSAgIElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikpIHsKKwkJcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl9pZCgiZmMwMjgwMDAuZXRoZXJuZTowMCIsCisJCQkJCQlrc3o4MDgxX3BoeV9maXh1cCk7CisJfQorCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jCmluZGV4IDU5NTE2NjAuLjJkYWVmNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAkJcG9zdF9kaXZfdGFibGVbMV0uZGl2ID0gMTsKIAkJcG9zdF9kaXZfdGFibGVbMl0uZGl2ID0gMTsKIAkJdmlkZW9fZGl2X3RhYmxlWzFdLmRpdiA9IDE7Ci0JCXZpZGVvX2Rpdl90YWJsZVsyXS5kaXYgPSAxOworCQl2aWRlb19kaXZfdGFibGVbM10uZGl2ID0gMTsKIAl9CiAKIAljbGtbSU1YNlFETF9QTEwxX0JZUEFTU19TUkNdID0gaW14X2Nsa19tdXgoInBsbDFfYnlwYXNzX3NyYyIsIGJhc2UgKyAweDAwLCAxNCwgMiwgcGxsX2J5cGFzc19zcmNfc2VscywgQVJSQVlfU0laRShwbGxfYnlwYXNzX3NyY19zZWxzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnN4LmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnN4LmMKaW5kZXggMTczNTRhMS4uNWEzZTVhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZzeC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2c3guYwpAQCAtNTU4LDYgKzU1OCw5IEBACiAJY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX0dQVV9DT1JFX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEwzX1BGRDBdKTsKIAljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfR1BVX0FYSV9TRUxdLCBjbGtzW0lNWDZTWF9DTEtfUExMM19QRkQwXSk7CiAKKwljbGtfc2V0X3BhcmVudChjbGtzW0lNWDZTWF9DTEtfUVNQSTFfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDJfQlVTXSk7CisJY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX1FTUEkyX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEwyX0JVU10pOworCiAJLyogU2V0IGluaXRpYWwgcG93ZXIgbW9kZSAqLwogCWlteDZxX3NldF9scG0oV0FJVF9DTE9DS0VEKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jCmluZGV4IDM1ODVjYjMuLmNjZWY4ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYwpAQCAtMTkwLDYgKzE5MCwxMyBAQAogCWFyY2hfaW9yZW1hcF9jYWxsZXIgPSBhcm1hZGFfcGNpZV93YV9pb3JlbWFwX2NhbGxlcjsKIAogCS8qCisJICogV2Ugc2hvdWxkIHN3aXRjaCB0aGUgUEwzMTAgdG8gSS9PIGNvaGVyZW5jeSBtb2RlIG9ubHkgaWYKKwkgKiBJL08gY29oZXJlbmN5IGlzIGFjdHVhbGx5IGVuYWJsZWQuCisJICovCisJaWYgKCFjb2hlcmVuY3lfYXZhaWxhYmxlKCkpCisJCXJldHVybjsKKworCS8qCiAJICogQWRkIHRoZSBQTDMxMCBwcm9wZXJ0eSAiYXJtLGlvLWNvaGVyZW50Ii4gVGhpcyBtYWtlcyBzdXJlIHRoZQogCSAqIG91dGVyIHN5bmMgb3BlcmF0aW9uIGlzIG5vdCB1c2VkLCB3aGljaCBhbGxvd3MgdG8KIAkgKiB3b3JrYXJvdW5kIHRoZSBzeXN0ZW0gZXJyYXR1bSB0aGF0IGNhdXNlcyBkZWFkbG9ja3Mgd2hlbgpAQCAtMjQ2LDkgKzI1MywxNCBAQAogCXJldHVybiB0eXBlOwogfQogCisvKgorICogQXMgYSBwcmVjYXV0aW9uLCB3ZSBjdXJyZW50bHkgY29tcGxldGVseSBkaXNhYmxlIGhhcmR3YXJlIEkvTworICogY29oZXJlbmN5LCB1bnRpbCBlbm91Z2ggdGVzdGluZyBpcyBkb25lIHdpdGggYXV0b21hdGljIEkvTworICogc3luY2hyb25pemF0aW9uIGJhcnJpZXJzIHRvIHZhbGlkYXRlIHRoYXQgaXQgaXMgYSBwcm9wZXIgc29sdXRpb24uCisgKi8KIGludCBjb2hlcmVuY3lfYXZhaWxhYmxlKHZvaWQpCiB7Ci0JcmV0dXJuIGNvaGVyZW5jeV90eXBlKCkgIT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX05PTkU7CisJcmV0dXJuIGZhbHNlOwogfQogCiBpbnQgX19pbml0IGNvaGVyZW5jeV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IDYwODA3OWEuLmI2MWMwNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCkBAIC03Nyw2ICs3NywyNCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworLyogU29tZSBib2FyZHMgbmVlZCBib2FyZCBuYW1lIGZvciBsZWdhY3kgdXNlcnNwYWNlIGluIC9wcm9jL2NwdWluZm8gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuOTAwX2JvYXJkc19jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKKwkibm9raWEsb21hcDMtbjkwMCIsCisJTlVMTCwKK307CisKK0RUX01BQ0hJTkVfU1RBUlQoT01BUDNfTjkwMF9EVCwgIk5va2lhIFJYLTUxIGJvYXJkIikKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG9tYXAzNDMwX2luaXRfZWFybHksCisJLmluaXRfbWFjaGluZQk9IG9tYXBfZ2VuZXJpY19pbml0LAorCS5pbml0X2xhdGUJPSBvbWFwM19pbml0X2xhdGUsCisJLmluaXRfdGltZQk9IG9tYXAzX3N5bmMzMmtfdGltZXJfaW5pdCwKKwkuZHRfY29tcGF0CT0gbjkwMF9ib2FyZHNfY29tcGF0LAorCS5yZXN0YXJ0CT0gb21hcDN4eHhfcmVzdGFydCwKK01BQ0hJTkVfRU5ECisKKy8qIEdlbmVyaWMgb21hcDMgYm9hcmRzLCBtb3N0IGJvYXJkcyBjYW4gdXNlIHRoZXNlICovCiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgb21hcDNfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewogCSJ0aSxvbWFwMzQzMCIsCiAJInRpLG9tYXAzIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi5oCmluZGV4IDM3N2VlYTguLjY0ZTQ0ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24uaApAQCAtMjExLDYgKzIxMSw3IEBACiBleHRlcm4gc3RydWN0IGRldmljZSAqb21hcDJfZ2V0X2wzX2RldmljZSh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlICpvbWFwNF9nZXRfZHNwX2RldmljZSh2b2lkKTsKIAordW5zaWduZWQgaW50IG9tYXA0X3hsYXRlX2lycSh1bnNpZ25lZCBpbnQgaHdpcnEpOwogdm9pZCBvbWFwX2dpY19vZl9pbml0KHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKQEAgLTI0OSw2ICsyNTAsNyBAQAogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBvbWFwNF9zbXBfb3BzOwogCiBleHRlcm4gdm9pZCBvbWFwNV9zZWNvbmRhcnlfc3RhcnR1cCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXA1X3NlY29uZGFyeV9oeXBfc3RhcnR1cCh2b2lkKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19QTSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmgKaW5kZXggYTNjMDEzMy4uYTgwYWMyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmgKQEAgLTI4Niw2ICsyODYsMTAgQEAKICNkZWZpbmUgT01BUDVYWFhfQ09OVFJPTF9TVEFUVVMgICAgICAgICAgICAgICAgMHgxMzQKICNkZWZpbmUgT01BUDVfREVWSUNFVFlQRV9NQVNLICAgICAgICAgICgweDcgPDwgNikKIAorLyogRFJBN1hYIENPTlRST0wgQ09SRSBCT09UU1RSQVAgKi8KKyNkZWZpbmUgRFJBN19DVFJMX0NPUkVfQk9PVFNUUkFQCTB4NmM0CisjZGVmaW5lIERSQTdfU1BFRURTRUxFQ1RfTUFTSwkJKDB4MyA8PCA4KQorCiAvKgogICogUkVWSVNJVDogVGhpcyBsaXN0IG9mIHJlZ2lzdGVycyBpcyBub3QgY29tcHJlaGVuc2l2ZSAtIHRoZXJlIGFyZSBtb3JlCiAgKiB0aGF0IHNob3VsZCBiZSBhZGRlZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaGVhZHNtcC5TCmluZGV4IDQ5OTNkNGIuLjZkMWRmZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhlYWRzbXAuUwpAQCAtMjIsNiArMjIsNyBAQAogCiAvKiBQaHlzaWNhbCBhZGRyZXNzIG5lZWRlZCBzaW5jZSBNTVUgbm90IGVuYWJsZWQgeWV0IG9uIHNlY29uZGFyeSBjb3JlICovCiAjZGVmaW5lIEFVWF9DT1JFX0JPT1QwX1BBCQkJMHg0ODI4MTgwMAorI2RlZmluZSBBUElfSFlQX0VOVFJZCQkJCTB4MTAyCiAKIC8qCiAgKiBPTUFQNSBzcGVjaWZpYyBlbnRyeSBwb2ludCBmb3Igc2Vjb25kYXJ5IENQVSB0byBqdW1wIGZyb20gUk9NCkBAIC00MSw2ICs0MiwyNiBAQAogCWIJc2Vjb25kYXJ5X3N0YXJ0dXAKIEVORFBST0Mob21hcDVfc2Vjb25kYXJ5X3N0YXJ0dXApCiAvKgorICogU2FtZSBhcyBvbWFwNV9zZWNvbmRhcnlfc3RhcnR1cCBleGNlcHQgd2UgY2FsbCBpbnRvIHRoZSBST00gdG8KKyAqIGVuYWJsZSBIWVAgbW9kZSBmaXJzdC4gIFRoaXMgaXMgY2FsbGVkIGluc3RlYWQgb2YKKyAqIG9tYXA1X3NlY29uZGFyeV9zdGFydHVwIGlmIHRoZSBwcmltYXJ5IENQVSB3YXMgcHV0IGludG8gSFlQIG1vZGUgYnkKKyAqIHRoZSBib290IGxvYWRlci4KKyAqLworRU5UUlkob21hcDVfc2Vjb25kYXJ5X2h5cF9zdGFydHVwKQord2FpdF8yOglsZHIJcjIsID1BVVhfQ09SRV9CT09UMF9QQQlAIHJlYWQgZnJvbSBBdXhDb3JlQm9vdDAKKwlsZHIJcjAsIFtyMl0KKwltb3YJcjAsIHIwLCBsc3IgIzUKKwltcmMJcDE1LCAwLCByNCwgYzAsIGMwLCA1CisJYW5kCXI0LCByNCwgIzB4MGYKKwljbXAJcjAsIHI0CisJYm5lCXdhaXRfMgorCWxkcglyMTIsID1BUElfSFlQX0VOVFJZCisJYWRyCXIwLCBoeXBfYm9vdAorCXNtYwkjMAoraHlwX2Jvb3Q6CisJYglzZWNvbmRhcnlfc3RhcnR1cAorRU5EUFJPQyhvbWFwNV9zZWNvbmRhcnlfaHlwX3N0YXJ0dXApCisvKgogICogT01BUDQgc3BlY2lmaWMgZW50cnkgcG9pbnQgZm9yIHNlY29uZGFyeSBDUFUgdG8ganVtcCBmcm9tIFJPTQogICogY29kZS4gIFRoaXMgcm91dGluZSBhbHNvIHByb3ZpZGVzIGEgaG9sZGluZyBmbGFnIGludG8gd2hpY2gKICAqIHNlY29uZGFyeSBjb3JlIGlzIGhlbGQgdW50aWwgd2UncmUgcmVhZHkgZm9yIGl0IHRvIGluaXRpYWxpc2UuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMKaW5kZXggMjU2ZTg0ZS4uNTMwNWVjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLXNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1zbXAuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgogCiAjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KKyNpbmNsdWRlIDxhc20vdmlydC5oPgogCiAjaW5jbHVkZSAib21hcC1zZWN1cmUuaCIKICNpbmNsdWRlICJvbWFwLXdha2V1cGdlbi5oIgpAQCAtMjI3LDggKzIyOCwxNiBAQAogCWlmIChvbWFwX3NlY3VyZV9hcGlzX3N1cHBvcnQoKSkKIAkJb21hcF9hdXhjb3JlYm9vdF9hZGRyKHZpcnRfdG9fcGh5cyhzdGFydHVwX2FkZHIpKTsKIAllbHNlCi0JCXdyaXRlbF9yZWxheGVkKHZpcnRfdG9fcGh5cyhvbWFwNV9zZWNvbmRhcnlfc3RhcnR1cCksCi0JCQkgICAgICAgYmFzZSArIE9NQVBfQVVYX0NPUkVfQk9PVF8xKTsKKwkJLyoKKwkJICogSWYgdGhlIGJvb3QgQ1BVIGlzIGluIEhZUCBtb2RlIHRoZW4gc3RhcnQgc2Vjb25kYXJ5CisJCSAqIENQVSBpbiBIWVAgbW9kZSBhcyB3ZWxsLgorCQkgKi8KKwkJaWYgKChfX2Jvb3RfY3B1X21vZGUgJiBNT0RFX01BU0spID09IEhZUF9NT0RFKQorCQkJd3JpdGVsX3JlbGF4ZWQodmlydF90b19waHlzKG9tYXA1X3NlY29uZGFyeV9oeXBfc3RhcnR1cCksCisJCQkJICAgICAgIGJhc2UgKyBPTUFQX0FVWF9DT1JFX0JPT1RfMSk7CisJCWVsc2UKKwkJCXdyaXRlbF9yZWxheGVkKHZpcnRfdG9fcGh5cyhvbWFwNV9zZWNvbmRhcnlfc3RhcnR1cCksCisJCQkJICAgICAgIGJhc2UgKyBPTUFQX0FVWF9DT1JFX0JPT1RfMSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMKaW5kZXggYjdjYjQ0YS4uY2MzMGU0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LWNvbW1vbi5jCkBAIC0yNTYsNiArMjU2LDM4IEBACiB9CiBvbWFwX2Vhcmx5X2luaXRjYWxsKG9tYXA0X3Nhcl9yYW1faW5pdCk7CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGdpY19tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUtZ2ljIiwgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpnaWNfbm9kZTsKKwordW5zaWduZWQgaW50IG9tYXA0X3hsYXRlX2lycSh1bnNpZ25lZCBpbnQgaHdpcnEpCit7CisJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBpcnFfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaWYgKCFnaWNfbm9kZSkKKwkJZ2ljX25vZGUgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgZ2ljX21hdGNoKTsKKworCWlmIChXQVJOX09OKCFnaWNfbm9kZSkpCisJCXJldHVybiBod2lycTsKKworCWlycV9kYXRhLm5wID0gZ2ljX25vZGU7CisJaXJxX2RhdGEuYXJnc19jb3VudCA9IDM7CisJaXJxX2RhdGEuYXJnc1swXSA9IDA7CisJaXJxX2RhdGEuYXJnc1sxXSA9IGh3aXJxIC0gT01BUDQ0WFhfSVJRX0dJQ19TVEFSVDsKKwlpcnFfZGF0YS5hcmdzWzJdID0gSVJRX1RZUEVfTEVWRUxfSElHSDsKKworCWlycSA9IGlycV9jcmVhdGVfb2ZfbWFwcGluZygmaXJxX2RhdGEpOworCWlmIChXQVJOX09OKCFpcnEpKQorCQlpcnEgPSBod2lycTsKKworCXJldHVybiBpcnE7Cit9CisKIHZvaWQgX19pbml0IG9tYXBfZ2ljX29mX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwppbmRleCBjYmI5MDhkLi45MDI1ZmZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwpAQCAtMzUzNCw5ICszNTM0LDE1IEBACiAKIAltcHVfaXJxc19jbnQgPSBfY291bnRfbXB1X2lycXMob2gpOwogCWZvciAoaSA9IDA7IGkgPCBtcHVfaXJxc19jbnQ7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgaXJxOworCisJCWlmIChvaC0+eGxhdGVfaXJxKQorCQkJaXJxID0gb2gtPnhsYXRlX2lycSgob2gtPm1wdV9pcnFzICsgaSktPmlycSk7CisJCWVsc2UKKwkJCWlycSA9IChvaC0+bXB1X2lycXMgKyBpKS0+aXJxOwogCQkocmVzICsgciktPm5hbWUgPSAob2gtPm1wdV9pcnFzICsgaSktPm5hbWU7Ci0JCShyZXMgKyByKS0+c3RhcnQgPSAob2gtPm1wdV9pcnFzICsgaSktPmlycTsKLQkJKHJlcyArIHIpLT5lbmQgPSAob2gtPm1wdV9pcnFzICsgaSktPmlycTsKKwkJKHJlcyArIHIpLT5zdGFydCA9IGlycTsKKwkJKHJlcyArIHIpLT5lbmQgPSBpcnE7CiAJCShyZXMgKyByKS0+ZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKIAkJcisrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKaW5kZXggMzVjYTZlZi4uNWI0MmZhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKQEAgLTY3Niw2ICs2NzYsNyBAQAogCXNwaW5sb2NrX3QJCQlfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlub2RlOwogCXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZgkqX21wdV9wb3J0OworCXVuc2lnbmVkIGludAkJCSgqeGxhdGVfaXJxKSh1bnNpZ25lZCBpbnQpOwogCXUxNgkJCQlmbGFnczsKIAl1OAkJCQltcHVfcnRfaWR4OwogCXU4CQkJCXJlc3BvbnNlX2xhdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYwppbmRleCBjMzE0YjNjLi5mNWU2OGE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCkBAIC00NzksNiArNDc5LDcgQEAKIAkuY2xhc3MJCT0gJm9tYXA0NHh4X2RtYV9od21vZF9jbGFzcywKIAkuY2xrZG1fbmFtZQk9ICJsM19kbWFfY2xrZG0iLAogCS5tcHVfaXJxcwk9IG9tYXA0NHh4X2RtYV9zeXN0ZW1faXJxcywKKwkueGxhdGVfaXJxCT0gb21hcDRfeGxhdGVfaXJxLAogCS5tYWluX2Nsawk9ICJsM19kaXZfY2siLAogCS5wcmNtID0gewogCQkub21hcDQgPSB7CkBAIC02NDAsNiArNjQxLDcgQEAKIAkuY2xhc3MJCT0gJm9tYXA0NHh4X2Rpc3BjX2h3bW9kX2NsYXNzLAogCS5jbGtkbV9uYW1lCT0gImwzX2Rzc19jbGtkbSIsCiAJLm1wdV9pcnFzCT0gb21hcDQ0eHhfZHNzX2Rpc3BjX2lycXMsCisJLnhsYXRlX2lycQk9IG9tYXA0X3hsYXRlX2lycSwKIAkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfZHNzX2Rpc3BjX3NkbWFfcmVxcywKIAkubWFpbl9jbGsJPSAiZHNzX2Rzc19jbGsiLAogCS5wcmNtID0gewpAQCAtNjkzLDYgKzY5NSw3IEBACiAJLmNsYXNzCQk9ICZvbWFwNDR4eF9kc2lfaHdtb2RfY2xhc3MsCiAJLmNsa2RtX25hbWUJPSAibDNfZHNzX2Nsa2RtIiwKIAkubXB1X2lycXMJPSBvbWFwNDR4eF9kc3NfZHNpMV9pcnFzLAorCS54bGF0ZV9pcnEJPSBvbWFwNF94bGF0ZV9pcnEsCiAJLnNkbWFfcmVxcwk9IG9tYXA0NHh4X2Rzc19kc2kxX3NkbWFfcmVxcywKIAkubWFpbl9jbGsJPSAiZHNzX2Rzc19jbGsiLAogCS5wcmNtID0gewpAQCAtNzI2LDYgKzcyOSw3IEBACiAJLmNsYXNzCQk9ICZvbWFwNDR4eF9kc2lfaHdtb2RfY2xhc3MsCiAJLmNsa2RtX25hbWUJPSAibDNfZHNzX2Nsa2RtIiwKIAkubXB1X2lycXMJPSBvbWFwNDR4eF9kc3NfZHNpMl9pcnFzLAorCS54bGF0ZV9pcnEJPSBvbWFwNF94bGF0ZV9pcnEsCiAJLnNkbWFfcmVxcwk9IG9tYXA0NHh4X2Rzc19kc2kyX3NkbWFfcmVxcywKIAkubWFpbl9jbGsJPSAiZHNzX2Rzc19jbGsiLAogCS5wcmNtID0gewpAQCAtNzg0LDYgKzc4OCw3IEBACiAJICovCiAJLmZsYWdzCQk9IEhXTU9EX1NXU1VQX1NJRExFLAogCS5tcHVfaXJxcwk9IG9tYXA0NHh4X2Rzc19oZG1pX2lycXMsCisJLnhsYXRlX2lycQk9IG9tYXA0X3hsYXRlX2lycSwKIAkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfZHNzX2hkbWlfc2RtYV9yZXFzLAogCS5tYWluX2Nsawk9ICJkc3NfNDhtaHpfY2xrIiwKIAkucHJjbSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYwppbmRleCAzZTk1MjMwLi43YzNmYWMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNTR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzU0eHhfZGF0YS5jCkBAIC0yODgsNiArMjg4LDcgQEAKIAkuY2xhc3MJCT0gJm9tYXA1NHh4X2RtYV9od21vZF9jbGFzcywKIAkuY2xrZG1fbmFtZQk9ICJkbWFfY2xrZG0iLAogCS5tcHVfaXJxcwk9IG9tYXA1NHh4X2RtYV9zeXN0ZW1faXJxcywKKwkueGxhdGVfaXJxCT0gb21hcDRfeGxhdGVfaXJxLAogCS5tYWluX2Nsawk9ICJsM19pY2xrX2RpdiIsCiAJLnByY20gPSB7CiAJCS5vbWFwNCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAppbmRleCBhOGU0YjU4Li42MTYzZDY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCkBAIC00OTgsNiArNDk4LDcgQEAKIAl1OCBucl9pcnFzOwogCWNvbnN0IHN0cnVjdCBvbWFwX3ByY21faXJxICppcnFzOwogCWludCBpcnE7CisJdW5zaWduZWQgaW50ICgqeGxhdGVfaXJxKSh1bnNpZ25lZCBpbnQpOwogCXZvaWQgKCpyZWFkX3BlbmRpbmdfaXJxcykodW5zaWduZWQgbG9uZyAqZXZlbnRzKTsKIAl2b2lkICgqb2NwX2JhcnJpZXIpKHZvaWQpOwogCXZvaWQgKCpzYXZlX2FuZF9jbGVhcl9pcnFlbikodTMyICpzYXZlZF9tYXNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMKaW5kZXggY2MxNzBmYi4uNDA4YzY0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAkuaXJxcwkJCT0gb21hcDRfcHJjbV9pcnFzLAogCS5ucl9pcnFzCQk9IEFSUkFZX1NJWkUob21hcDRfcHJjbV9pcnFzKSwKIAkuaXJxCQkJPSAxMSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQsCisJLnhsYXRlX2lycQkJPSBvbWFwNF94bGF0ZV9pcnEsCiAJLnJlYWRfcGVuZGluZ19pcnFzCT0gJm9tYXA0NHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcywKIAkub2NwX2JhcnJpZXIJCT0gJm9tYXA0NHh4X3BybV9vY3BfYmFycmllciwKIAkuc2F2ZV9hbmRfY2xlYXJfaXJxZW4JPSAmb21hcDQ0eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuLApAQCAtNzUxLDggKzc1MiwxMCBAQAogCQl9CiAKIAkJLyogT25jZSBPTUFQNCBEVCBpcyBmaWxsZWQgYXMgd2VsbCAqLwotCQlpZiAoaXJxX251bSA+PSAwKQorCQlpZiAoaXJxX251bSA+PSAwKSB7CiAJCQlvbWFwNF9wcmNtX2lycV9zZXR1cC5pcnEgPSBpcnFfbnVtOworCQkJb21hcDRfcHJjbV9pcnFfc2V0dXAueGxhdGVfaXJxID0gTlVMTDsKKwkJfQogCX0KIAogCW9tYXA0NHh4X3BybV9lbmFibGVfaW9fd2FrZXVwKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybV9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCmluZGV4IDc3OTk0MGMuLmRlYTI4MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCkBAIC0xODcsNiArMTg3LDcgQEAKICAqLwogdm9pZCBvbWFwX3ByY21faXJxX2NsZWFudXAodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxOwogCWludCBpOwogCiAJaWYgKCFwcmNtX2lycV9zZXR1cCkgewpAQCAtMjExLDcgKzIxMiwxMSBAQAogCWtmcmVlKHByY21faXJxX3NldHVwLT5wcmlvcml0eV9tYXNrKTsKIAlwcmNtX2lycV9zZXR1cC0+cHJpb3JpdHlfbWFzayA9IE5VTEw7CiAKLQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihwcmNtX2lycV9zZXR1cC0+aXJxLCBOVUxMKTsKKwlpZiAocHJjbV9pcnFfc2V0dXAtPnhsYXRlX2lycSkKKwkJaXJxID0gcHJjbV9pcnFfc2V0dXAtPnhsYXRlX2lycShwcmNtX2lycV9zZXR1cC0+aXJxKTsKKwllbHNlCisJCWlycSA9IHByY21faXJxX3NldHVwLT5pcnE7CisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoaXJxLCBOVUxMKTsKIAogCWlmIChwcmNtX2lycV9zZXR1cC0+YmFzZV9pcnEgPiAwKQogCQlpcnFfZnJlZV9kZXNjcyhwcmNtX2lycV9zZXR1cC0+YmFzZV9pcnEsCkBAIC0yNTksNiArMjY0LDcgQEAKIAlpbnQgb2Zmc2V0LCBpOwogCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYzsKIAlzdHJ1Y3QgaXJxX2NoaXBfdHlwZSAqY3Q7CisJdW5zaWduZWQgaW50IGlycTsKIAogCWlmICghaXJxX3NldHVwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5OCw3ICszMDQsMTEgQEAKIAkJCQkxIDw8IChvZmZzZXQgJiAweDFmKTsKIAl9CiAKLQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihpcnFfc2V0dXAtPmlycSwgb21hcF9wcmNtX2lycV9oYW5kbGVyKTsKKwlpZiAoaXJxX3NldHVwLT54bGF0ZV9pcnEpCisJCWlycSA9IGlycV9zZXR1cC0+eGxhdGVfaXJxKGlycV9zZXR1cC0+aXJxKTsKKwllbHNlCisJCWlycSA9IGlycV9zZXR1cC0+aXJxOworCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKGlycSwgb21hcF9wcmNtX2lycV9oYW5kbGVyKTsKIAogCWlycV9zZXR1cC0+YmFzZV9pcnEgPSBpcnFfYWxsb2NfZGVzY3MoLTEsIDAsIGlycV9zZXR1cC0+bnJfcmVncyAqIDMyLAogCQkwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXIuYwppbmRleCA0ZjYxMTQ4Li43ZDQ1Yzg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci5jCkBAIC01NCw2ICs1NCw3IEBACiAKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJjb250cm9sLmgiCiAjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKICNpbmNsdWRlICJvbWFwLXNlY3VyZS5oIgogCkBAIC00OTYsNyArNDk3LDggQEAKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJc3RhdGljIHN0cnVjdCBjbGsgKnN5c19jbGs7CiAJdW5zaWduZWQgbG9uZyByYXRlOwotCXVuc2lnbmVkIGludCByZWcsIG51bSwgZGVuOworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgbG9uZyBsb25nIG51bSwgZGVuOwogCiAJYmFzZSA9IGlvcmVtYXAoUkVBTFRJTUVfQ09VTlRFUl9CQVNFLCBTWl8zMik7CiAJaWYgKCFiYXNlKSB7CkBAIC01MTEsMTMgKzUxMyw0MiBAQAogCX0KIAogCXJhdGUgPSBjbGtfZ2V0X3JhdGUoc3lzX2Nsayk7CisKKwlpZiAoc29jX2lzX2RyYTd4eCgpKSB7CisJCS8qCisJCSAqIEVycmF0YSBpODU2IHNheXMgdGhlIDMyLjc2OEtIeiBjcnlzdGFsIGRvZXMgbm90IHN0YXJ0IGF0CisJCSAqIHBvd2VyIG9uLCBzbyB0aGUgQ1BVIGZhbGxzIGJhY2sgdG8gYW4gZW11bGF0ZWQgMzJLSHogY2xvY2sKKwkJICogYmFzZWQgb24gc3lzY2xrIC8gNjEwIGluc3RlYWQuIFRoaXMgY2F1c2VzIHRoZSBtYXN0ZXIgY291bnRlcgorCQkgKiBmcmVxdWVuY3kgdG8gbm90IGJlIDYuMTQ0TUh6IGJ1dCBhdCBzeXNjbGsgLyA2MTAgKiAzNzUgLyAyCisJCSAqIChPUiBzeXNjbGsgKiA3NSAvIDI0NCkKKwkJICoKKwkJICogVGhpcyBhZmZlY3RzIGF0IGxlYXN0IHRoZSBEUkE3L0FNNTcyeCAxLjAsIDEuMSByZXZpc2lvbnMuCisJCSAqIE9mIGNvdXJzZSBhbnkgYm9hcmQgYnVpbHQgd2l0aG91dCBhIHBvcHVsYXRlZCAzMi43NjhLSHoKKwkJICogY3J5c3RhbCB3b3VsZCBhbHNvIG5lZWQgdGhpcyBmaXggZXZlbiBpZiB0aGUgQ1BVIGlzIGZpeGVkCisJCSAqIGxhdGVyLgorCQkgKgorCQkgKiBFaXRoZXIgY2FzZSBjYW4gYmUgZGV0ZWN0ZWQgYnkgdXNpbmcgdGhlIHR3byBzcGVlZHNlbGVjdCBiaXRzCisJCSAqIElmIHRoZXkgYXJlIG5vdCAwLCB0aGVuIHRoZSAzMi43NjhLSHogY2xvY2sgZHJpdmluZyB0aGUKKwkJICogY29hcnNlIGNvdW50ZXIgdGhhdCBjb3JyZWN0cyB0aGUgZmluZSBjb3VudGVyIGV2ZXJ5IHRpbWUgaXQKKwkJICogdGlja3MgaXMgYWN0dWFsbHkgcmF0ZS82MTAgcmF0aGVyIHRoYW4gMzIuNzY4S0h6IGFuZCB3ZQorCQkgKiBzaG91bGQgY29tcGVuc2F0ZSB0byBhdm9pZCB0aGUgNTcwcHBtIChhdCAyME1IeiwgbXVjaCB3b3JzZQorCQkgKiBhdCBvdGhlciByYXRlcykgdG9vIGZhc3Qgc3lzdGVtIHRpbWUuCisJCSAqLworCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoRFJBN19DVFJMX0NPUkVfQk9PVFNUUkFQKTsKKwkJaWYgKHJlZyAmIERSQTdfU1BFRURTRUxFQ1RfTUFTSykgeworCQkJbnVtID0gNzU7CisJCQlkZW4gPSAyNDQ7CisJCQlnb3RvIHN5c2NsazFfYmFzZWQ7CisJCX0KKwl9CisKIAkvKiBOdW1lcmF0b3IvZGVudW1lcmF0b3IgdmFsdWVzIHJlZmVyIFRSTSBSZWFsdGltZSBDb3VudGVyIHNlY3Rpb24gKi8KIAlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDEyMDAwMDA6CisJY2FzZSAxMjAwMDAwMDoKIAkJbnVtID0gNjQ7CiAJCWRlbiA9IDEyNTsKIAkJYnJlYWs7Ci0JY2FzZSAxMzAwMDAwOgorCWNhc2UgMTMwMDAwMDA6CiAJCW51bSA9IDc2ODsKIAkJZGVuID0gMTYyNTsKIAkJYnJlYWs7CkBAIC01MjksMTEgKzU2MCwxMSBAQAogCQludW0gPSAxOTI7CiAJCWRlbiA9IDYyNTsKIAkJYnJlYWs7Ci0JY2FzZSAyNjAwMDAwOgorCWNhc2UgMjYwMDAwMDA6CiAJCW51bSA9IDM4NDsKIAkJZGVuID0gMTYyNTsKIAkJYnJlYWs7Ci0JY2FzZSAyNzAwMDAwOgorCWNhc2UgMjcwMDAwMDA6CiAJCW51bSA9IDI1NjsKIAkJZGVuID0gMTEyNTsKIAkJYnJlYWs7CkBAIC01NDUsNiArNTc2LDcgQEAKIAkJYnJlYWs7CiAJfQogCitzeXNjbGsxX2Jhc2VkOgogCS8qIFByb2dyYW0gbnVtZXJhdG9yIGFuZCBkZW51bWVyYXRvciByZWdpc3RlcnMgKi8KIAlyZWcgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBJTkNSRU1FTlRFUl9OVU1FUkFUT1JfT0ZGU0VUKSAmCiAJCQlOVU1FUkFUT1JfREVOVU1FUkFUT1JfTUFTSzsKQEAgLTU1Niw3ICs1ODgsNyBAQAogCXJlZyB8PSBkZW47CiAJd3JpdGVsX3JlbGF4ZWQocmVnLCBiYXNlICsgSU5DUkVNRU5URVJfREVOVU1FUkFUT1JfUkVMT0FEX09GRlNFVCk7CiAKLQlhcmNoX3RpbWVyX2ZyZXEgPSAocmF0ZSAvIGRlbikgKiBudW07CisJYXJjaF90aW1lcl9mcmVxID0gRElWX1JPVU5EX1VQX1VMTChyYXRlICogbnVtLCBkZW4pOwogCXNldF9jbnRmcmVxKCk7CiAKIAlpb3VubWFwKGJhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90d2wtY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3R3bC1jb21tb24uYwppbmRleCA0NDU3ZTczLi4yOTJlY2EwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3R3bC1jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3R3bC1jb21tb24uYwpAQCAtNjYsMTkgKzY2LDI0IEBACiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGJ1cywgY2xrcmF0ZSwgJnBtaWNfaTJjX2JvYXJkX2luZm8sIDEpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKIHZvaWQgX19pbml0IG9tYXA0X3BtaWNfaW5pdChjb25zdCBjaGFyICpwbWljX3R5cGUsCiAJCSAgICBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhICpwbWljX2RhdGEsCiAJCSAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQogewogCS8qIFBNSUMgcGFydCovCisJdW5zaWduZWQgaW50IGlycTsKKwogCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzeXNfbmlycTEiLCBPTUFQX1BJTl9JTlBVVF9QVUxMVVAgfCBPTUFQX1BJTl9PRkZfV0FLRVVQRU5BQkxFKTsKIAlvbWFwX211eF9pbml0X3NpZ25hbCgiZnJlZl9jbGswX291dC5zeXNfZHJtX21zZWN1cmUiLCBPTUFQX1BJTl9PVVRQVVQpOwotCW9tYXBfcG1pY19pbml0KDEsIDQwMCwgcG1pY190eXBlLCA3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCwgcG1pY19kYXRhKTsKKwlpcnEgPSBvbWFwNF94bGF0ZV9pcnEoNyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpOworCW9tYXBfcG1pY19pbml0KDEsIDQwMCwgcG1pY190eXBlLCBpcnEsIHBtaWNfZGF0YSk7CiAKIAkvKiBSZWdpc3RlciBhZGRpdGlvbmFsIGRldmljZXMgb24gaTJjMSBidXMgaWYgbmVlZGVkICovCiAJaWYgKGRldmljZXMpCiAJCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGRldmljZXMsIG5yX2RldmljZXMpOwogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IG9tYXBfcG1pY19sYXRlX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcm9ja2NoaXAuYyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcm9ja2NoaXAuYwppbmRleCBkMjI2YjcxLi5hNjExZjQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3JvY2tjaGlwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9yb2NrY2hpcC5jCkBAIC0xOSwxMSArMTksMzcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogCisjZGVmaW5lIFJLMzI4OF9HUkZfU09DX0NPTjAgMHgyNDQKKworc3RhdGljIHZvaWQgX19pbml0IHJvY2tjaGlwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJyb2NrY2hpcCxyazMyODgiKSkgeworCQlzdHJ1Y3QgcmVnbWFwICpncmY7CisKKwkJLyoKKwkJICogRGlzYWJsZSBhdXRvIGp0YWcvc2RtbWMgc3dpdGNoaW5nIHRoYXQgY2F1c2VzIGlzc3VlcworCQkgKiB3aXRoIHRoZSBtbWMgY29udHJvbGxlcnMgbWFraW5nIHRoZW0gdW5yZWxpYWJsZQorCQkgKi8KKwkJZ3JmID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZSgicm9ja2NoaXAscmszMjg4LWdyZiIpOworCQlpZiAoIUlTX0VSUihncmYpKQorCQkJcmVnbWFwX3dyaXRlKGdyZiwgUkszMjg4X0dSRl9TT0NfQ09OMCwgMHgxMDAwMDAwMCk7CisJCWVsc2UKKwkJCXByX2Vycigicm9ja2NoaXA6IGNvdWxkIG5vdCBnZXQgZ3JmIHN5c2NvblxuIik7CisJfQorCisJb2ZfY2xrX2luaXQoTlVMTCk7CisJY2xvY2tzb3VyY2Vfb2ZfaW5pdCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcm9ja2NoaXBfZHRfaW5pdCh2b2lkKQogewogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKQEAgLTQyLDYgKzY4LDcgQEAKIERUX01BQ0hJTkVfU1RBUlQoUk9DS0NISVBfRFQsICJSb2NrY2hpcCBDb3J0ZXgtQTkgKERldmljZSBUcmVlKSIpCiAJLmwyY19hdXhfdmFsCT0gMCwKIAkubDJjX2F1eF9tYXNrCT0gfjAsCisJLmluaXRfdGltZQk9IHJvY2tjaGlwX3RpbWVyX2luaXQsCiAJLmR0X2NvbXBhdAk9IHJvY2tjaGlwX2JvYXJkX2R0X2NvbXBhdCwKIAkuaW5pdF9tYWNoaW5lCT0gcm9ja2NoaXBfZHRfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwZTZldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCmluZGV4IDY2ZjY3ODEuLjQ0NGYyMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwLmg+CisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9hcm0tZ2ljLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgpAQCAtMjczLDYgKzI3NSwyMiBAQAogCQkJCSAgICAgIHNpemVvZihhcGU2ZXZtX2xlZHNfcGRhdGEpKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGFwZTZldm1fbGVnYWN5X2luaXRfdGltZSh2b2lkKQoreworCS8qIERvIG5vdCBpbnZva2UgRFQtYmFzZWQgdGltZXJzIHZpYSBjbG9ja3NvdXJjZV9vZl9pbml0KCkgKi8KK30KKworc3RhdGljIHZvaWQgX19pbml0IGFwZTZldm1fbGVnYWN5X2luaXRfaXJxKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZjEwMDEwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmMTAwMjAwMCwgMHgxMDAwKTsKKworCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworCisJLyogRG8gbm90IGludm9rZSBEVC1iYXNlZCBpbnRlcnJ1cHQgY29kZSB2aWEgaXJxY2hpcF9pbml0KCkgKi8KK30KKworCiBzdGF0aWMgY29uc3QgY2hhciAqYXBlNmV2bV9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0ZGF0YSA9IHsKIAkicmVuZXNhcyxhcGU2ZXZtIiwKIAlOVUxMLApAQCAtMjgwLDcgKzI5OCw5IEBACiAKIERUX01BQ0hJTkVfU1RBUlQoQVBFNkVWTV9EVCwgImFwZTZldm0iKQogCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKKwkuaW5pdF9pcnEgICAgICAgPSBhcGU2ZXZtX2xlZ2FjeV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gYXBlNmV2bV9hZGRfc3RhbmRhcmRfZGV2aWNlcywKIAkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLAogCS5kdF9jb21wYXQJPSBhcGU2ZXZtX2JvYXJkc19jb21wYXRfZHQsCisJLmluaXRfdGltZQk9IGFwZTZldm1fbGVnYWN5X2luaXRfdGltZSwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMKaW5kZXggZjgxOTdlYi4uNjViMTI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXIuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgpAQCAtODExLDYgKzgxMywxNiBAQAogCQkJCQkgIGxhZ2VyX2tzejgwNDFfZml4dXApOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgbGFnZXJfbGVnYWN5X2luaXRfaXJxKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZjEwMDEwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmMTAwMjAwMCwgMHgxMDAwKTsKKworCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworCisJLyogRG8gbm90IGludm9rZSBEVC1iYXNlZCBpbnRlcnJ1cHQgY29kZSB2aWEgaXJxY2hpcF9pbml0KCkgKi8KK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsYWdlcl9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0Y29uc3QgPSB7CiAJInJlbmVzYXMsbGFnZXIiLAogCU5VTEwsCkBAIC04MTksNiArODMxLDcgQEAKIERUX01BQ0hJTkVfU1RBUlQoTEFHRVJfRFQsICJsYWdlciIpCiAJLnNtcAkJPSBzbXBfb3BzKHI4YTc3OTBfc21wX29wcyksCiAJLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAorCS5pbml0X2lycQk9IGxhZ2VyX2xlZ2FjeV9pbml0X2lycSwKIAkuaW5pdF90aW1lCT0gcmNhcl9nZW4yX3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZQk9IGxhZ2VyX2luaXQsCiAJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKaW5kZXggNzlhZDkzZC4uZDE5MWNmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKQEAgLTgwMCw3ICs4MDAsMTQgQEAKIAl2b2lkIF9faW9tZW0gKmludGNfbXNrX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhlNjkwMDA0MCwgMHgxMCk7CiAJdm9pZCBfX2lvbWVtICpwZmNfaW50YV9jdHJsID0gaW9yZW1hcF9ub2NhY2hlKDB4ZTYwNTgwN2MsIDB4NCk7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9TSE1PQklMRV9MRUdBQ1kKKwl2b2lkIF9faW9tZW0gKmdpY19kaXN0X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhjMjgwMDAwMCwgMHgxMDAwKTsKKwl2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZSgweGMyMDAwMDAwLCAweDEwMDApOworCisJZ2ljX2luaXQoMCwgMjksIGdpY19kaXN0X2Jhc2UsIGdpY19jcHVfYmFzZSk7CisjZWxzZQogCWlycWNoaXBfaW5pdCgpOworI2VuZGlmCiAKIAkvKiByb3V0ZSBzaWduYWxzIHRvIEdJQyAqLwogCWlvd3JpdGUzMigweDAsIHBmY19pbnRhX2N0cmwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3Nzc4LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYwppbmRleCAxNzBiZDE0Li5jZWY4ODk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYwpAQCAtNTc2LDExICs1NzYsMTggQEAKIHZvaWQgX19pbml0IHI4YTc3NzhfaW5pdF9pcnFfZHQodm9pZCkKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmZTcwMDAwMCwgMHgwMDEwMDAwMCk7CisjaWZkZWYgQ09ORklHX0FSQ0hfU0hNT0JJTEVfTEVHQUNZCisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZmU0MzgwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmZTQzMDAwMCwgMHgxMDAwKTsKKyNlbmRpZgogCiAJQlVHX09OKCFiYXNlKTsKIAorI2lmZGVmIENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWQorCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworI2Vsc2UKIAlpcnFjaGlwX2luaXQoKTsKLQorI2VuZGlmCiAJLyogcm91dGUgYWxsIGludGVycnVwdHMgdG8gQVJNICovCiAJX19yYXdfd3JpdGVsKDB4NzNmZmZmZmYsIGJhc2UgKyBJTlQyTlRTUjApOwogCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSU5UMk5UU1IxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3Nzc5LmMKaW5kZXggNjE1NmQxNy4uMjdkY2VhZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCkBAIC03MjAsMTAgKzcyMCwxNyBAQAogCiB2b2lkIF9faW5pdCByOGE3Nzc5X2luaXRfaXJxX2R0KHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0FSQ0hfU0hNT0JJTEVfTEVHQUNZCisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZjAwMDEwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmMDAwMDEwMCwgMHgxMDAwKTsKKyNlbmRpZgogCWdpY19hcmNoX2V4dG4uaXJxX3NldF93YWtlID0gcjhhNzc3OV9zZXRfd2FrZTsKIAorI2lmZGVmIENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWQorCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworI2Vsc2UKIAlpcnFjaGlwX2luaXQoKTsKLQorI2VuZGlmCiAJLyogcm91dGUgYWxsIGludGVycnVwdHMgdG8gQVJNICovCiAJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIElOVDJOVFNSMCk7CiAJX19yYXdfd3JpdGVsKDB4M2ZmZmZmZmYsIElOVDJOVFNSMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yY2FyLWdlbjIuYwppbmRleCAzZGQ2ZWRkLi5jYzk0NzBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcmNhci1nZW4yLmMKQEAgLTEzMyw3ICsxMzMsOSBAQAogI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCiAJcmNhcl9nZW4yX2Nsb2Nrc19pbml0KG1vZGUpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfU0hNT0JJTEVfTVVMVEkKIAljbG9ja3NvdXJjZV9vZl9pbml0KCk7CisjZW5kaWYKIH0KIAogc3RydWN0IG1lbW9yeV9yZXNlcnZlX2NvbmZpZyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczYTAuYwppbmRleCA5M2ViZTM0Li5mYjVlMWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMKQEAgLTU5NSw2ICs1OTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlbmVzYXNfaW50Y19pcnFwaW5fY29uZmlnIGlycXBpbjBfcGxhdGZvcm1fZGF0YSA9IHsKIAkuaXJxX2Jhc2UgPSBpcnFfcGluKDApLCAvKiBJUlEwIC0+IElSUTcgKi8KKwkuY29udHJvbF9wYXJlbnQgPSB0cnVlLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcnFwaW4wX3Jlc291cmNlc1tdID0gewpAQCAtNjU2LDYgKzY1Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVuZXNhc19pbnRjX2lycXBpbl9jb25maWcgaXJxcGluMl9wbGF0Zm9ybV9kYXRhID0gewogCS5pcnFfYmFzZSA9IGlycV9waW4oMTYpLCAvKiBJUlExNiAtPiBJUlEyMyAqLworCS5jb250cm9sX3BhcmVudCA9IHRydWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlycXBpbjJfcmVzb3VyY2VzW10gPSB7CkBAIC02ODYsNiArNjg4LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZW5lc2FzX2ludGNfaXJxcGluX2NvbmZpZyBpcnFwaW4zX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmlycV9iYXNlID0gaXJxX3BpbigyNCksIC8qIElSUTI0IC0+IElSUTMxICovCisJLmNvbnRyb2xfcGFyZW50ID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxcGluM19yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYwppbmRleCBmMWQwMjdhLi4wZWRmMmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS90aW1lci5jCkBAIC03MCw2ICs3MCwxOCBAQAogCWlmICghbWF4X2ZyZXEpCiAJCXJldHVybjsKIAorI2lmZGVmIENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWQorCS8qIE5vbi1tdWx0aXBsYXRmb3JtIHI4YTczYTQgU29DIGNhbm5vdCB1c2UgYXJjaCB0aW1lciBkdWUKKwkgKiB0byBHSUMgYmVpbmcgaW5pdGlhbGl6ZWQgZnJvbSBDIGFuZCBhcmNoIHRpbWVyIHZpYSBEVCAqLworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInJlbmVzYXMscjhhNzNhNCIpKQorCQloYXNfYXJjaF90aW1lciA9IGZhbHNlOworCisJLyogTm9uLW11bHRpcGxhdGZvcm0gcjhhNzc5MCBTb0MgY2Fubm90IHVzZSBhcmNoIHRpbWVyIGR1ZQorCSAqIHRvIEdJQyBiZWluZyBpbml0aWFsaXplZCBmcm9tIEMgYW5kIGFyY2ggdGltZXIgdmlhIERUICovCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgicmVuZXNhcyxyOGE3NzkwIikpCisJCWhhc19hcmNoX3RpbWVyID0gZmFsc2U7CisjZW5kaWYKKwogCWlmICghaGFzX2FyY2hfdGltZXIgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0FSTV9BUkNIX1RJTUVSKSkgewogCQlpZiAoaXNfYTdfYThfYTkpCiAJCQlzaG1vYmlsZV9zZXR1cF9kZWxheV9oeihtYXhfZnJlcSwgMSwgMyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwppbmRleCA3ODY0Nzk3Li5hNjczYzdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKQEAgLTE5NDAsMTggKzE5NDAsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXJtX2lvbW11X3JlbGVhc2VfbWFwcGluZyk7CiAKLS8qKgotICogYXJtX2lvbW11X2F0dGFjaF9kZXZpY2UKLSAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlcgotICogQG1hcHBpbmc6IGlvIGFkZHJlc3Mgc3BhY2UgbWFwcGluZyBzdHJ1Y3R1cmUgKHJldHVybmVkIGZyb20KLSAqCWFybV9pb21tdV9jcmVhdGVfbWFwcGluZykKLSAqCi0gKiBBdHRhY2hlcyBzcGVjaWZpZWQgaW8gYWRkcmVzcyBzcGFjZSBtYXBwaW5nIHRvIHRoZSBwcm92aWRlZCBkZXZpY2UsCi0gKiBNb3JlIHRoYW4gb25lIGNsaWVudCBtaWdodCBiZSBhdHRhY2hlZCB0byB0aGUgc2FtZSBpbyBhZGRyZXNzIHNwYWNlCi0gKiBtYXBwaW5nLgotICovCi1pbnQgYXJtX2lvbW11X2F0dGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyAqbWFwcGluZykKK3N0YXRpYyBpbnQgX19hcm1faW9tbXVfYXR0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcgKm1hcHBpbmcpCiB7CiAJaW50IGVycjsKIApAQCAtMTk2NSwxNSArMTk1NSwzNSBAQAogCXByX2RlYnVnKCJBdHRhY2hlZCBJT01NVSBjb250cm9sbGVyIHRvICVzIGRldmljZS5cbiIsIGRldl9uYW1lKGRldikpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoYXJtX2lvbW11X2F0dGFjaF9kZXZpY2UpOwogCiAvKioKLSAqIGFybV9pb21tdV9kZXRhY2hfZGV2aWNlCisgKiBhcm1faW9tbXVfYXR0YWNoX2RldmljZQogICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyCisgKiBAbWFwcGluZzogaW8gYWRkcmVzcyBzcGFjZSBtYXBwaW5nIHN0cnVjdHVyZSAocmV0dXJuZWQgZnJvbQorICoJYXJtX2lvbW11X2NyZWF0ZV9tYXBwaW5nKQogICoKLSAqIERldGFjaGVzIHRoZSBwcm92aWRlZCBkZXZpY2UgZnJvbSBhIHByZXZpb3VzbHkgYXR0YWNoZWQgbWFwLgorICogQXR0YWNoZXMgc3BlY2lmaWVkIGlvIGFkZHJlc3Mgc3BhY2UgbWFwcGluZyB0byB0aGUgcHJvdmlkZWQgZGV2aWNlLgorICogVGhpcyByZXBsYWNlcyB0aGUgZG1hIG9wZXJhdGlvbnMgKGRtYV9tYXBfb3BzIHBvaW50ZXIpIHdpdGggdGhlCisgKiBJT01NVSBhd2FyZSB2ZXJzaW9uLgorICoKKyAqIE1vcmUgdGhhbiBvbmUgY2xpZW50IG1pZ2h0IGJlIGF0dGFjaGVkIHRvIHRoZSBzYW1lIGlvIGFkZHJlc3Mgc3BhY2UKKyAqIG1hcHBpbmcuCiAgKi8KLXZvaWQgYXJtX2lvbW11X2RldGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGFybV9pb21tdV9hdHRhY2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcgKm1hcHBpbmcpCit7CisJaW50IGVycjsKKworCWVyciA9IF9fYXJtX2lvbW11X2F0dGFjaF9kZXZpY2UoZGV2LCBtYXBwaW5nKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2V0X2RtYV9vcHMoZGV2LCAmaW9tbXVfb3BzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFybV9pb21tdV9hdHRhY2hfZGV2aWNlKTsKKworc3RhdGljIHZvaWQgX19hcm1faW9tbXVfZGV0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nICptYXBwaW5nOwogCkBAIC0xOTg5LDYgKzE5OTksMTkgQEAKIAogCXByX2RlYnVnKCJEZXRhY2hlZCBJT01NVSBjb250cm9sbGVyIGZyb20gJXMgZGV2aWNlLlxuIiwgZGV2X25hbWUoZGV2KSk7CiB9CisKKy8qKgorICogYXJtX2lvbW11X2RldGFjaF9kZXZpY2UKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlcgorICoKKyAqIERldGFjaGVzIHRoZSBwcm92aWRlZCBkZXZpY2UgZnJvbSBhIHByZXZpb3VzbHkgYXR0YWNoZWQgbWFwLgorICogVGhpcyB2b2lkcyB0aGUgZG1hIG9wZXJhdGlvbnMgKGRtYV9tYXBfb3BzIHBvaW50ZXIpCisgKi8KK3ZvaWQgYXJtX2lvbW11X2RldGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCV9fYXJtX2lvbW11X2RldGFjaF9kZXZpY2UoZGV2KTsKKwlzZXRfZG1hX29wcyhkZXYsIE5VTEwpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoYXJtX2lvbW11X2RldGFjaF9kZXZpY2UpOwogCiBzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzICphcm1fZ2V0X2lvbW11X2RtYV9tYXBfb3BzKGJvb2wgY29oZXJlbnQpCkBAIC0yMDExLDcgKzIwMzQsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKGFybV9pb21tdV9hdHRhY2hfZGV2aWNlKGRldiwgbWFwcGluZykpIHsKKwlpZiAoX19hcm1faW9tbXVfYXR0YWNoX2RldmljZShkZXYsIG1hcHBpbmcpKSB7CiAJCXByX3dhcm4oIkZhaWxlZCB0byBhdHRhY2hlZCBkZXZpY2UgJXMgdG8gSU9NTVVfbWFwcGluZ1xuIiwKIAkJCQlkZXZfbmFtZShkZXYpKTsKIAkJYXJtX2lvbW11X3JlbGVhc2VfbWFwcGluZyhtYXBwaW5nKTsKQEAgLTIwMjUsNyArMjA0OCw3IEBACiB7CiAJc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nICptYXBwaW5nID0gZGV2LT5hcmNoZGF0YS5tYXBwaW5nOwogCi0JYXJtX2lvbW11X2RldGFjaF9kZXZpY2UoZGV2KTsKKwlfX2FybV9pb21tdV9kZXRhY2hfZGV2aWNlKGRldik7CiAJYXJtX2lvbW11X3JlbGVhc2VfbWFwcGluZyhtYXBwaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZHVtcC5jIGIvYXJjaC9hcm0vbW0vZHVtcC5jCmluZGV4IDU5NDI0OTMuLjlmZThlMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2R1bXAuYworKysgYi9hcmNoL2FybS9tbS9kdW1wLmMKQEAgLTIyMCw5ICsyMjAsNiBAQAogCXN0YXRpYyBjb25zdCBjaGFyIHVuaXRzW10gPSAiS01HVFBFIjsKIAl1NjQgcHJvdCA9IHZhbCAmIHBnX2xldmVsW2xldmVsXS5tYXNrOwogCi0JaWYgKGFkZHIgPCBVU0VSX1BHVEFCTEVTX0NFSUxJTkcpCi0JCXJldHVybjsKLQogCWlmICghc3QtPmxldmVsKSB7CiAJCXN0LT5sZXZlbCA9IGxldmVsOwogCQlzdC0+Y3VycmVudF9wcm90ID0gcHJvdDsKQEAgLTMwOCwxNSArMzA1LDEzIEBACiAJcGdkX3QgKnBnZCA9IHN3YXBwZXJfcGdfZGlyOwogCXN0cnVjdCBwZ19zdGF0ZSBzdDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgaSwgcGdkb2ZmID0gVVNFUl9QR1RBQkxFU19DRUlMSU5HIC8gUEdESVJfU0laRTsKKwl1bnNpZ25lZCBpOwogCiAJbWVtc2V0KCZzdCwgMCwgc2l6ZW9mKHN0KSk7CiAJc3Quc2VxID0gbTsKIAlzdC5tYXJrZXIgPSBhZGRyZXNzX21hcmtlcnM7CiAKLQlwZ2QgKz0gcGdkb2ZmOwotCi0JZm9yIChpID0gcGdkb2ZmOyBpIDwgUFRSU19QRVJfUEdEOyBpKyssIHBnZCsrKSB7CisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BHRDsgaSsrLCBwZ2QrKykgewogCQlhZGRyID0gaSAqIFBHRElSX1NJWkU7CiAJCWlmICghcGdkX25vbmUoKnBnZCkpIHsKIAkJCXdhbGtfcHVkKCZzdCwgcGdkLCBhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCA5OGFkOWM3Li4yNDk1YzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC02NTgsOCArNjU4LDggQEAKIAkJLnN0YXJ0ICA9ICh1bnNpZ25lZCBsb25nKV9zdGV4dCwKIAkJLmVuZCAgICA9ICh1bnNpZ25lZCBsb25nKV9faW5pdF9iZWdpbiwKICNpZmRlZiBDT05GSUdfQVJNX0xQQUUKLQkJLm1hc2sgICA9IH5QTURfU0VDVF9SRE9OTFksCi0JCS5wcm90ICAgPSBQTURfU0VDVF9SRE9OTFksCisJCS5tYXNrICAgPSB+TF9QTURfU0VDVF9SRE9OTFksCisJCS5wcm90ICAgPSBMX1BNRF9TRUNUX1JET05MWSwKICNlbHNlCiAJCS5tYXNrICAgPSB+KFBNRF9TRUNUX0FQWCB8IFBNRF9TRUNUX0FQX1dSSVRFKSwKIAkJLnByb3QgICA9IFBNRF9TRUNUX0FQWCB8IFBNRF9TRUNUX0FQX1dSSVRFLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwppbmRleCBjZGE3YzQwLi40ZTZlZjg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbXUuYworKysgYi9hcmNoL2FybS9tbS9tbXUuYwpAQCAtMTMyOSw4ICsxMzI5LDggQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBtYXBfbG93bWVtKHZvaWQpCiB7CiAJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnOwotCXVuc2lnbmVkIGxvbmcga2VybmVsX3hfc3RhcnQgPSByb3VuZF9kb3duKF9fcGEoX3N0ZXh0KSwgU0VDVElPTl9TSVpFKTsKLQl1bnNpZ25lZCBsb25nIGtlcm5lbF94X2VuZCA9IHJvdW5kX3VwKF9fcGEoX19pbml0X2VuZCksIFNFQ1RJT05fU0laRSk7CisJcGh5c19hZGRyX3Qga2VybmVsX3hfc3RhcnQgPSByb3VuZF9kb3duKF9fcGEoX3N0ZXh0KSwgU0VDVElPTl9TSVpFKTsKKwlwaHlzX2FkZHJfdCBrZXJuZWxfeF9lbmQgPSByb3VuZF91cChfX3BhKF9faW5pdF9lbmQpLCBTRUNUSU9OX1NJWkUpOwogCiAJLyogTWFwIGFsbCB0aGUgbG93bWVtIG1lbW9yeSBiYW5rcy4gKi8KIAlmb3JfZWFjaF9tZW1ibG9jayhtZW1vcnksIHJlZykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvTWFrZWZpbGUKaW5kZXggMWM0M2NlYy4uMDY2Njg4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L01ha2VmaWxlCkBAIC04NSw2ICs4NSw3IEBACiAjIFdlIHVzZSBNUlBST1BFUl9GSUxFUyBhbmQgQ0xFQU5fRklMRVMgbm93CiBhcmNoY2xlYW46CiAJJChRKSQoTUFLRSkgJChjbGVhbik9JChib290KQorCSQoUSkkKE1BS0UpICQoY2xlYW4pPSQoYm9vdCkvZHRzCiAKIGRlZmluZSBhcmNoaGVscAogICBlY2hvICAnKiBJbWFnZS5neiAgICAgIC0gQ29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgKGFyY2gvJChBUkNIKS9ib290L0ltYWdlLmd6KScKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvTWFrZWZpbGUgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL01ha2VmaWxlCmluZGV4IDNiOGQ0MjcuLmM2MmIwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9NYWtlZmlsZQpAQCAtMyw2ICszLDQgQEAKIGR0cy1kaXJzICs9IGFybQogZHRzLWRpcnMgKz0gY2F2aXVtCiAKLWFsd2F5cwkJOj0gJChkdGIteSkKIHN1YmRpci15CTo9ICQoZHRzLWRpcnMpCi1jbGVhbi1maWxlcwk6PSAqLmR0YgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cwppbmRleCBjYjMwNzNlLi5kNDI5MTI5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cworKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cwpAQCAtMjIsNyArMjIsNyBAQAogCX07CiAKIAljaG9zZW4gewotCQlzdGRvdXQtcGF0aCA9ICZzb2NfdWFydDA7CisJCXN0ZG91dC1wYXRoID0gInNlcmlhbDA6MTE1MjAwbjgiOwogCX07CiAKIAlwc2NpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWcgYi9hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnCmluZGV4IGRkMzAxYmUuLjUzNzZkOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWcKKysrIGIvYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZwpAQCAtMSw2ICsxLDcgQEAKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0ZIQU5ETEU9eQogQ09ORklHX0FVRElUPXkKIENPTkZJR19OT19IWl9JRExFPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQpAQCAtMTMsMTQgKzE0LDEyIEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19SRVNPVVJDRV9DT1VOVEVSUz15CiBDT05GSUdfTUVNQ0c9eQogQ09ORklHX01FTUNHX1NXQVA9eQogQ09ORklHX01FTUNHX0tNRU09eQogQ09ORklHX0NHUk9VUF9IVUdFVExCPXkKICMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NIRURfQVVUT0dST1VQPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CkBAIC05Miw3ICs5MSw2IEBACiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKIENPTkZJR19WSVJUSU9fQ09OU09MRT15CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfSE1DX0RSViBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKIENPTkZJR19TUElfUEwwMjI9eQogQ09ORklHX0dQSU9fUEwwNjE9eQpAQCAtMTMzLDYgKzEzMSw4IEBACiBDT05GSUdfRVhUNF9GUz15CiBDT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUz15CitDT05GSUdfUVVPVEE9eQorQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX0ZVU0VfRlM9eQogQ09ORklHX0NVU0U9eQogQ09ORklHX1ZGQVRfRlM9eQpAQCAtMTUyLDE0ICsxNTIsMTUgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUj15CiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfS0VZUz15CiBDT05GSUdfU0VDVVJJVFk9eQogQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPXkKIENPTkZJR19BUk02NF9DUllQVE89eQogQ09ORklHX0NSWVBUT19TSEExX0FSTTY0X0NFPXkKIENPTkZJR19DUllQVE9fU0hBMl9BUk02NF9DRT15CiBDT05GSUdfQ1JZUFRPX0dIQVNIX0FSTTY0X0NFPXkKLUNPTkZJR19DUllQVE9fQUVTX0FSTTY0X0NFPXkKIENPTkZJR19DUllQVE9fQUVTX0FSTTY0X0NFX0NDTT15CiBDT05GSUdfQ1JZUFRPX0FFU19BUk02NF9DRV9CTEs9eQogQ09ORklHX0NSWVBUT19BRVNfQVJNNjRfTkVPTl9CTEs9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaAppbmRleCBiMWZhNGU2Li5mYmUwY2EzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCBhY2U3MDY4Li44ZTc5N2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTM5LDYgKzM5LDcgQEAKIAl1NjQJCXJlZ19pZF9hYTY0cGZyMDsKIAl1NjQJCXJlZ19pZF9hYTY0cGZyMTsKIAorCXUzMgkJcmVnX2lkX2RmcjA7CiAJdTMyCQlyZWdfaWRfaXNhcjA7CiAJdTMyCQlyZWdfaWRfaXNhcjE7CiAJdTMyCQlyZWdfaWRfaXNhcjI7CkBAIC01MSw2ICs1MiwxMCBAQAogCXUzMgkJcmVnX2lkX21tZnIzOwogCXUzMgkJcmVnX2lkX3BmcjA7CiAJdTMyCQlyZWdfaWRfcGZyMTsKKworCXUzMgkJcmVnX212ZnIwOworCXUzMgkJcmVnX212ZnIxOworCXUzMgkJcmVnX212ZnIyOwogfTsKIAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBjcHVpbmZvX2FybTY0LCBjcHVfZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggZDM0MTg5Yi4uOWNlM2U2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNTIsMTMgKzUyLDE0IEBACiAJZGV2LT5hcmNoZGF0YS5kbWFfb3BzID0gb3BzOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZXRfYXJjaF9kbWFfY29oZXJlbnRfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NldHVwX2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX2Jhc2UsIHU2NCBzaXplLAorCQkJCSAgICAgIHN0cnVjdCBpb21tdV9vcHMgKmlvbW11LCBib29sIGNvaGVyZW50KQogewotCWRldi0+YXJjaGRhdGEuZG1hX2NvaGVyZW50ID0gdHJ1ZTsKLQlzZXRfZG1hX29wcyhkZXYsICZjb2hlcmVudF9zd2lvdGxiX2RtYV9vcHMpOwotCXJldHVybiAwOworCWRldi0+YXJjaGRhdGEuZG1hX2NvaGVyZW50ID0gY29oZXJlbnQ7CisJaWYgKGNvaGVyZW50KQorCQlzZXRfZG1hX29wcyhkZXYsICZjb2hlcmVudF9zd2lvdGxiX2RtYV9vcHMpOwogfQotI2RlZmluZSBzZXRfYXJjaF9kbWFfY29oZXJlbnRfb3BzCXNldF9hcmNoX2RtYV9jb2hlcmVudF9vcHMKKyNkZWZpbmUgYXJjaF9zZXR1cF9kbWFfb3BzCWFyY2hfc2V0dXBfZG1hX29wcwogCiAvKiBkbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaW4gYSBkcml2ZXIgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXZpY2VfZG1hX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAppbmRleCA4MTI3ZTQ1Li4zY2I0Yzg1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC00MSw2ICs0MSwxOCBAQAogc3RhdGljIGlubGluZSB2b2lkIHZjcHVfcmVzZXRfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl2Y3B1LT5hcmNoLmhjcl9lbDIgPSBIQ1JfR1VFU1RfRkxBR1M7CisJaWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9FTDFfMzJCSVQsIHZjcHUtPmFyY2guZmVhdHVyZXMpKQorCQl2Y3B1LT5hcmNoLmhjcl9lbDIgJj0gfkhDUl9SVzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZjcHVfZ2V0X2hjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmFyY2guaGNyX2VsMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZjcHVfc2V0X2hjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgaGNyKQoreworCXZjcHUtPmFyY2guaGNyX2VsMiA9IGhjcjsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICp2Y3B1X3BjKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAwYjdkZmRiLi5hY2QxMDFhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xMTYsOSArMTE2LDYgQEAKIAkgKiBBbnl0aGluZyB0aGF0IGlzIG5vdCB1c2VkIGRpcmVjdGx5IGZyb20gYXNzZW1ibHkgY29kZSBnb2VzCiAJICogaGVyZS4KIAkgKi8KLQkvKiBkY2FjaGUgc2V0L3dheSBvcGVyYXRpb24gcGVuZGluZyAqLwotCWludCBsYXN0X3BjcHU7Ci0JY3B1bWFza190IHJlcXVpcmVfZGNhY2hlX2ZsdXNoOwogCiAJLyogRG9uJ3QgcnVuIHRoZSBndWVzdCAqLwogCWJvb2wgcGF1c2U7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oCmluZGV4IDE0YTc0ZjEuLmFkY2Y0OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oCkBAIC0yNDMsMjQgKzI0Myw0NiBAQAogCXJldHVybiAodmNwdV9zeXNfcmVnKHZjcHUsIFNDVExSX0VMMSkgJiAwYjEwMSkgPT0gMGIxMDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHZhX3QgaHZhLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJICAgICBib29sIGlwYV91bmNhY2hlZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NvaGVyZW50X2NhY2hlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwZm5fdCBwZm4sCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCSAgICAgICBib29sIGlwYV91bmNhY2hlZCkKIHsKKwl2b2lkICp2YSA9IHBhZ2VfYWRkcmVzcyhwZm5fdG9fcGFnZShwZm4pKTsKKwogCWlmICghdmNwdV9oYXNfY2FjaGVfZW5hYmxlZCh2Y3B1KSB8fCBpcGFfdW5jYWNoZWQpCi0JCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKCh2b2lkICopaHZhLCBzaXplKTsKKwkJa3ZtX2ZsdXNoX2RjYWNoZV90b19wb2ModmEsIHNpemUpOwogCiAJaWYgKCFpY2FjaGVfaXNfYWxpYXNpbmcoKSkgewkJLyogUElQVCAqLwotCQlmbHVzaF9pY2FjaGVfcmFuZ2UoaHZhLCBodmEgKyBzaXplKTsKKwkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXZhLAorCQkJCSAgICh1bnNpZ25lZCBsb25nKXZhICsgc2l6ZSk7CiAJfSBlbHNlIGlmICghaWNhY2hlX2lzX2Fpdml2dCgpKSB7CS8qIG5vbiBBU0lELXRhZ2dlZCBWSVZUICovCiAJCS8qIGFueSBraW5kIG9mIFZJUFQgY2FjaGUgKi8KIAkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fZmx1c2hfZGNhY2hlX3B0ZShwdGVfdCBwdGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZShwdGUpOworCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKHBhZ2VfYWRkcmVzcyhwYWdlKSwgUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2ZsdXNoX2RjYWNoZV9wbWQocG1kX3QgcG1kKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gcG1kX3BhZ2UocG1kKTsKKwlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYyhwYWdlX2FkZHJlc3MocGFnZSksIFBNRF9TSVpFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2ZsdXNoX2RjYWNoZV9wdWQocHVkX3QgcHVkKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gcHVkX3BhZ2UocHVkKTsKKwlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYyhwYWdlX2FkZHJlc3MocGFnZSksIFBVRF9TSVpFKTsKK30KKwogI2RlZmluZSBrdm1fdmlydF90b19waHlzKHgpCQlfX3ZpcnRfdG9fcGh5cygodW5zaWduZWQgbG9uZykoeCkpCiAKLXZvaWQgc3RhZ2UyX2ZsdXNoX3ZtKHN0cnVjdCBrdm0gKmt2bSk7Cit2b2lkIGt2bV9zZXRfd2F5X2ZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cit2b2lkIGt2bV90b2dnbGVfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhc19lbmFibGVkKTsKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX01NVV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZGYyMjMxNC4uMjEwZDYzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTI5OCw3ICsyOTgsNiBAQAogI2RlZmluZSBwZm5fcG1kKHBmbixwcm90KQkoX19wbWQoKChwaHlzX2FkZHJfdCkocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpKQogI2RlZmluZSBta19wbWQocGFnZSxwcm90KQlwZm5fcG1kKHBhZ2VfdG9fcGZuKHBhZ2UpLHByb3QpCiAKLSNkZWZpbmUgcG1kX3BhZ2UocG1kKSAgICAgICAgICAgcGZuX3RvX3BhZ2UoX19waHlzX3RvX3BmbihwbWRfdmFsKHBtZCkgJiBQSFlTX01BU0spKQogI2RlZmluZSBwdWRfd3JpdGUocHVkKQkJcHRlX3dyaXRlKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX3BmbihwdWQpCQkoKChwdWRfdmFsKHB1ZCkgJiBQVURfTUFTSykgJiBQSFlTX01BU0spID4+IFBBR0VfU0hJRlQpCiAKQEAgLTQwMSw3ICs0MDAsNyBAQAogCXJldHVybiAocG1kX3QgKilwdWRfcGFnZV92YWRkcigqcHVkKSArIHBtZF9pbmRleChhZGRyKTsKIH0KIAotI2RlZmluZSBwdWRfcGFnZShwdWQpICAgICAgICAgICBwbWRfcGFnZShwdWRfcG1kKHB1ZCkpCisjZGVmaW5lIHB1ZF9wYWdlKHB1ZCkJCXBmbl90b19wYWdlKF9fcGh5c190b19wZm4ocHVkX3ZhbChwdWQpICYgUEhZU19NQVNLKSkKIAogI2VuZGlmCS8qIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDIgKi8KIApAQCAtNDM3LDYgKzQzNiw4IEBACiAJcmV0dXJuIChwdWRfdCAqKXBnZF9wYWdlX3ZhZGRyKCpwZ2QpICsgcHVkX2luZGV4KGFkZHIpOwogfQogCisjZGVmaW5lIHBnZF9wYWdlKHBnZCkJCXBmbl90b19wYWdlKF9fcGh5c190b19wZm4ocGdkX3ZhbChwZ2QpICYgUEhZU19NQVNLKSkKKwogI2VuZGlmICAvKiBDT05GSUdfQVJNNjRfUEdUQUJMRV9MRVZFTFMgPiAzICovCiAKICNkZWZpbmUgcGdkX0VSUk9SKHBnZCkJCV9fcGdkX2Vycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChwZ2QpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMjg2YjFiZS4uZjliZTMwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlIDxhc20vZnBzaW1kLmg+CiAjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1od2RlZi5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApAQCAtMTIzLDkgKzEyNCw2IEBACiAvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KIGV4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIAotLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KLSNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQotCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiAjZGVmaW5lIGNwdV9yZWxheCgpCQkJYmFycmllcigpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA0OWM5YWVmLi4yM2U5NDMyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICNkZWZpbmUgX19BUk1fTlJfY29tcGF0X2NhY2hlZmx1c2gJKF9fQVJNX05SX0NPTVBBVF9CQVNFKzIpCiAjZGVmaW5lIF9fQVJNX05SX2NvbXBhdF9zZXRfdGxzCQkoX19BUk1fTlJfQ09NUEFUX0JBU0UrNSkKIAotI2RlZmluZSBfX05SX2NvbXBhdF9zeXNjYWxscwkJMzg2CisjZGVmaW5lIF9fTlJfY29tcGF0X3N5c2NhbGxzCQkzODgKICNlbmRpZgogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19DTE9ORQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oCmluZGV4IDg4OTNjZWIuLjI3MjI0NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkMzIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZDMyLmgKQEAgLTc5NSwzICs3OTUsNSBAQAogX19TWVNDQUxMKF9fTlJfbWVtZmRfY3JlYXRlLCBzeXNfbWVtZmRfY3JlYXRlKQogI2RlZmluZSBfX05SX2JwZiAzODYKIF9fU1lTQ0FMTChfX05SX2JwZiwgc3lzX2JwZikKKyNkZWZpbmUgX19OUl9leGVjdmVhdCAzODcKK19fU1lTQ0FMTChfX05SX2V4ZWN2ZWF0LCBjb21wYXRfc3lzX2V4ZWN2ZWF0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jCmluZGV4IDU3YjY0MTcuLjA3ZDQzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCSAqIElmIHdlIGhhdmUgQUFyY2gzMiwgd2UgY2FyZSBhYm91dCAzMi1iaXQgZmVhdHVyZXMgZm9yIGNvbXBhdC4gVGhlc2UKIAkgKiByZWdpc3RlcnMgc2hvdWxkIGJlIFJFUzAgb3RoZXJ3aXNlLgogCSAqLworCWRpZmYgfD0gQ0hFQ0soaWRfZGZyMCwgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfaXNhcjAsIGJvb3QsIGN1ciwgY3B1KTsKIAlkaWZmIHw9IENIRUNLKGlkX2lzYXIxLCBib290LCBjdXIsIGNwdSk7CiAJZGlmZiB8PSBDSEVDSyhpZF9pc2FyMiwgYm9vdCwgY3VyLCBjcHUpOwpAQCAtMTY1LDYgKzE2NiwxMCBAQAogCWRpZmYgfD0gQ0hFQ0soaWRfcGZyMCwgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfcGZyMSwgYm9vdCwgY3VyLCBjcHUpOwogCisJZGlmZiB8PSBDSEVDSyhtdmZyMCwgYm9vdCwgY3VyLCBjcHUpOworCWRpZmYgfD0gQ0hFQ0sobXZmcjEsIGJvb3QsIGN1ciwgY3B1KTsKKwlkaWZmIHw9IENIRUNLKG12ZnIyLCBib290LCBjdXIsIGNwdSk7CisKIAkvKgogCSAqIE1pc21hdGNoZWQgQ1BVIGZlYXR1cmVzIGFyZSBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIERvbid0IGV2ZW4KIAkgKiBwcmV0ZW5kIHRvIHN1cHBvcnQgdGhlbS4KQEAgLTE4OSw2ICsxOTQsNyBAQAogCWluZm8tPnJlZ19pZF9hYTY0cGZyMCA9IHJlYWRfY3B1aWQoSURfQUE2NFBGUjBfRUwxKTsKIAlpbmZvLT5yZWdfaWRfYWE2NHBmcjEgPSByZWFkX2NwdWlkKElEX0FBNjRQRlIxX0VMMSk7CiAKKwlpbmZvLT5yZWdfaWRfZGZyMCA9IHJlYWRfY3B1aWQoSURfREZSMF9FTDEpOwogCWluZm8tPnJlZ19pZF9pc2FyMCA9IHJlYWRfY3B1aWQoSURfSVNBUjBfRUwxKTsKIAlpbmZvLT5yZWdfaWRfaXNhcjEgPSByZWFkX2NwdWlkKElEX0lTQVIxX0VMMSk7CiAJaW5mby0+cmVnX2lkX2lzYXIyID0gcmVhZF9jcHVpZChJRF9JU0FSMl9FTDEpOwpAQCAtMjAyLDYgKzIwOCwxMCBAQAogCWluZm8tPnJlZ19pZF9wZnIwID0gcmVhZF9jcHVpZChJRF9QRlIwX0VMMSk7CiAJaW5mby0+cmVnX2lkX3BmcjEgPSByZWFkX2NwdWlkKElEX1BGUjFfRUwxKTsKIAorCWluZm8tPnJlZ19tdmZyMCA9IHJlYWRfY3B1aWQoTVZGUjBfRUwxKTsKKwlpbmZvLT5yZWdfbXZmcjEgPSByZWFkX2NwdWlkKE1WRlIxX0VMMSk7CisJaW5mby0+cmVnX212ZnIyID0gcmVhZF9jcHVpZChNVkZSMl9FTDEpOworCiAJY3B1aW5mb19kZXRlY3RfaWNhY2hlX3BvbGljeShpbmZvKTsKIAogCWNoZWNrX2xvY2FsX2NwdV9lcnJhdGEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2VmaS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMKaW5kZXggNmZhYzI1My4uMmJiNDM0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMKQEAgLTMyNiw2ICszMjYsNyBAQAogCiAJLyogYm9vdCB0aW1lIGlkbWFwX3BnX2RpciBpcyBpbmNvbXBsZXRlLCBzbyBmaWxsIGluIG1pc3NpbmcgcGFydHMgKi8KIAllZmlfc2V0dXBfaWRtYXAoKTsKKwllYXJseV9tZW11bm1hcChtZW1tYXAubWFwLCBtZW1tYXAubWFwX2VuZCAtIG1lbW1hcC5tYXApOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCByZW1hcF9yZWdpb24oZWZpX21lbW9yeV9kZXNjX3QgKm1kLCB2b2lkICoqbmV3KQpAQCAtMzgwLDcgKzM4MSw2IEBACiAJfQogCiAJbWFwc2l6ZSA9IG1lbW1hcC5tYXBfZW5kIC0gbWVtbWFwLm1hcDsKLQllYXJseV9tZW11bm1hcChtZW1tYXAubWFwLCBtYXBzaXplKTsKIAogCWlmIChlZmlfcnVudGltZV9kaXNhYmxlZCgpKSB7CiAJCXByX2luZm8oIkVGSSBydW50aW1lIHNlcnZpY2VzIHdpbGwgYmUgZGlzYWJsZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZmQwMjdiMS4uOWI2ZjcxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KICNpbmNsdWRlIDxhc20vaW5zbi5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wZXJmX3JlZ3MuYyBiL2FyY2gvYXJtNjQva2VybmVsL3BlcmZfcmVncy5jCmluZGV4IDY3NjJhZDcuLjNmNjJiMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3BlcmZfcmVncy5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3BlcmZfcmVncy5jCkBAIC01MCwzICs1MCwxMSBAQAogCWVsc2UKIAkJcmV0dXJuIFBFUkZfU0FNUExFX1JFR1NfQUJJXzY0OwogfQorCit2b2lkIHBlcmZfZ2V0X3JlZ3NfdXNlcihzdHJ1Y3QgcGVyZl9yZWdzICpyZWdzX3VzZXIsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzX3VzZXJfY29weSkKK3sKKwlyZWdzX3VzZXItPnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisJcmVnc191c2VyLT5hYmkgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYwppbmRleCBiODA5OTExLi4yMGZlMjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMKQEAgLTQwMiw2ICs0MDIsNyBAQAogCXJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKCk7CiAKIAllZmlfaWRtYXBfaW5pdCgpOworCWVhcmx5X2lvcmVtYXBfcmVzZXQoKTsKIAogCXVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zbXBfc3Bpbl90YWJsZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wX3NwaW5fdGFibGUuYwppbmRleCA0ZjkzYzY3Li4xNDk0NGU1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zbXBfc3Bpbl90YWJsZS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcF9zcGluX3RhYmxlLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jcHVfb3BzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KIAogZXh0ZXJuIHZvaWQgc2Vjb25kYXJ5X2hvbGRpbmdfcGVuKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jCmluZGV4IDM3NzFiNzIuLjJkNmI2MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zdXNwZW5kLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8YXNtL2RlYnVnLW1vbml0b3JzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KQEAgLTk4LDcgKzk5LDE4IEBACiAJICovCiAJcmV0ID0gX19jcHVfc3VzcGVuZF9lbnRlcihhcmcsIGZuKTsKIAlpZiAocmV0ID09IDApIHsKLQkJY3B1X3N3aXRjaF9tbShtbS0+cGdkLCBtbSk7CisJCS8qCisJCSAqIFdlIGFyZSByZXN1bWluZyBmcm9tIHJlc2V0IHdpdGggVFRCUjBfRUwxIHNldCB0byB0aGUKKwkJICogaWRtYXAgdG8gZW5hYmxlIHRoZSBNTVU7IHJlc3RvcmUgdGhlIGFjdGl2ZV9tbSBtYXBwaW5ncyBpbgorCQkgKiBUVEJSMF9FTDEgdW5sZXNzIHRoZSBhY3RpdmVfbW0gPT0gJmluaXRfbW0sIGluIHdoaWNoIGNhc2UKKwkJICogdGhlIHRocmVhZCBlbnRlcmVkIF9fY3B1X3N1c3BlbmQgd2l0aCBUVEJSMF9FTDEgc2V0IHRvCisJCSAqIHJlc2VydmVkIFRUQlIwIHBhZ2UgdGFibGVzIGFuZCBzaG91bGQgYmUgcmVzdG9yZWQgYXMgc3VjaC4KKwkJICovCisJCWlmIChtbSA9PSAmaW5pdF9tbSkKKwkJCWNwdV9zZXRfcmVzZXJ2ZWRfdHRicjAoKTsKKwkJZWxzZQorCQkJY3B1X3N3aXRjaF9tbShtbS0+cGdkLCBtbSk7CisKIAkJZmx1c2hfdGxiX2FsbCgpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAuUyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCmluZGV4IGZiZTkwOWYuLmMzY2E4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC5TCisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCkBAIC0xMDE0LDYgKzEwMTQsNyBAQAogCSAqIEluc3RlYWQsIHdlIGludmFsaWRhdGUgU3RhZ2UtMiBmb3IgdGhpcyBJUEEsIGFuZCB0aGUKIAkgKiB3aG9sZSBvZiBTdGFnZS0xLiBXZWVwLi4uCiAJICovCisJbHNyCXgxLCB4MSwgIzEyCiAJdGxiaQlpcGFzMmUxaXMsIHgxCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGVuc3VyZSBjb21wbGV0aW9uIG9mIHRoZSBpbnZhbGlkYXRpb24gYXQgU3RhZ2UtMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jCmluZGV4IDcwYTc4MTYuLjBiNDMyNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMKKysrIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwpAQCAtOTAsNyArOTAsNiBAQAogCQkJaWYgKCFjcHVfaGFzXzMyYml0X2VsMSgpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJY3B1X3Jlc2V0ID0gJmRlZmF1bHRfcmVnc19yZXNldDMyOwotCQkJdmNwdS0+YXJjaC5oY3JfZWwyICY9IH5IQ1JfUlc7CiAJCX0gZWxzZSB7CiAJCQljcHVfcmVzZXQgPSAmZGVmYXVsdF9yZWdzX3Jlc2V0OwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwppbmRleCAzZDdjMmRmLi5mMzFlOGJiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKQEAgLTY5LDY4ICs2OSwzMSBAQAogCXJldHVybiBjY3NpZHI7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX2RjX2Npc3codTMyIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUoImRjIGNpc3csICV4MCIgOiA6ICJyIiAodmFsKSk7Ci0JZHNiKGlzaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2RjX2Nzdyh1MzIgdmFsKQotewotCWFzbSB2b2xhdGlsZSgiZGMgY3N3LCAleDAiIDogOiAiciIgKHZhbCkpOwotCWRzYihpc2gpOwotfQotCi0vKiBTZWUgbm90ZSBhdCBBUk0gQVJNIEIxLjE0LjQgKi8KKy8qCisgKiBTZWUgbm90ZSBhdCBBUk12NyBBUk0gQjEuMTQuNCAoVEw7RFI6IFMvVyBvcHMgYXJlIG5vdCBlYXNpbHkgdmlydHVhbGl6ZWQpLgorICovCiBzdGF0aWMgYm9vbCBhY2Nlc3NfZGNzdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBjcHU7Ci0KIAlpZiAoIXAtPmlzX3dyaXRlKQogCQlyZXR1cm4gcmVhZF9mcm9tX3dyaXRlX29ubHkodmNwdSwgcCk7CiAKLQljcHUgPSBnZXRfY3B1KCk7Ci0KLQljcHVtYXNrX3NldGFsbCgmdmNwdS0+YXJjaC5yZXF1aXJlX2RjYWNoZV9mbHVzaCk7Ci0JY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmdmNwdS0+YXJjaC5yZXF1aXJlX2RjYWNoZV9mbHVzaCk7Ci0KLQkvKiBJZiB3ZSB3ZXJlIGFscmVhZHkgcHJlZW1wdGVkLCB0YWtlIHRoZSBsb25nIHdheSBhcm91bmQgKi8KLQlpZiAoY3B1ICE9IHZjcHUtPmFyY2gubGFzdF9wY3B1KSB7Ci0JCWZsdXNoX2NhY2hlX2FsbCgpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JdmFsID0gKnZjcHVfcmVnKHZjcHUsIHAtPlJ0KTsKLQotCXN3aXRjaCAocC0+Q1JtKSB7Ci0JY2FzZSA2OgkJCS8qIFVwZ3JhZGUgRENJU1cgdG8gRENDSVNXLCBhcyBwZXIgSENSLlNXSU8gKi8KLQljYXNlIDE0OgkJLyogRENDSVNXICovCi0JCWRvX2RjX2Npc3codmFsKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDEwOgkJLyogRENDU1cgKi8KLQkJZG9fZGNfY3N3KHZhbCk7Ci0JCWJyZWFrOwotCX0KLQotZG9uZToKLQlwdXRfY3B1KCk7Ci0KKwlrdm1fc2V0X3dheV9mbHVzaCh2Y3B1KTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKICAqIEdlbmVyaWMgYWNjZXNzb3IgZm9yIFZNIHJlZ2lzdGVycy4gT25seSBjYWxsZWQgYXMgbG9uZyBhcyBIQ1JfVFZNCi0gKiBpcyBzZXQuCisgKiBpcyBzZXQuIElmIHRoZSBndWVzdCBlbmFibGVzIHRoZSBNTVUsIHdlIHN0b3AgdHJhcHBpbmcgdGhlIFZNCisgKiBzeXNfcmVncyBhbmQgbGVhdmUgaXQgaW4gY29tcGxldGUgY29udHJvbCBvZiB0aGUgY2FjaGVzLgogICovCiBzdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgY29uc3Qgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCQkJICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOworCWJvb2wgd2FzX2VuYWJsZWQgPSB2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpOwogCiAJQlVHX09OKCFwLT5pc193cml0ZSk7CiAKQEAgLTE0MywyNSArMTA2LDcgQEAKIAkJdmNwdV9jcDE1XzY0X2xvdyh2Y3B1LCByLT5yZWcpID0gdmFsICYgMHhmZmZmZmZmZlVMOwogCX0KIAotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogU0NUTFJfRUwxIGFjY2Vzc29yLiBPbmx5IGNhbGxlZCBhcyBsb25nIGFzIEhDUl9UVk0gaXMgc2V0LiAgSWYgdGhlCi0gKiBndWVzdCBlbmFibGVzIHRoZSBNTVUsIHdlIHN0b3AgdHJhcHBpbmcgdGhlIFZNIHN5c19yZWdzIGFuZCBsZWF2ZQotICogaXQgaW4gY29tcGxldGUgY29udHJvbCBvZiB0aGUgY2FjaGVzLgotICovCi1zdGF0aWMgYm9vbCBhY2Nlc3Nfc2N0bHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKLQkJCSBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQotewotCWFjY2Vzc192bV9yZWcodmNwdSwgcCwgcik7Ci0KLQlpZiAodmNwdV9oYXNfY2FjaGVfZW5hYmxlZCh2Y3B1KSkgewkvKiBNTVUrQ2FjaGVzIGVuYWJsZWQ/ICovCi0JCXZjcHUtPmFyY2guaGNyX2VsMiAmPSB+SENSX1RWTTsKLQkJc3RhZ2UyX2ZsdXNoX3ZtKHZjcHUtPmt2bSk7Ci0JfQotCisJa3ZtX3RvZ2dsZV9jYWNoZSh2Y3B1LCB3YXNfZW5hYmxlZCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM3Nyw3ICszMjIsNyBAQAogCSAgTlVMTCwgcmVzZXRfbXBpZHIsIE1QSURSX0VMMSB9LAogCS8qIFNDVExSX0VMMSAqLwogCXsgT3AwKDBiMTEpLCBPcDEoMGIwMDApLCBDUm4oMGIwMDAxKSwgQ1JtKDBiMDAwMCksIE9wMigwYjAwMCksCi0JICBhY2Nlc3Nfc2N0bHIsIHJlc2V0X3ZhbCwgU0NUTFJfRUwxLCAweDAwQzUwMDc4IH0sCisJICBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIFNDVExSX0VMMSwgMHgwMEM1MDA3OCB9LAogCS8qIENQQUNSX0VMMSAqLwogCXsgT3AwKDBiMTEpLCBPcDEoMGIwMDApLCBDUm4oMGIwMDAxKSwgQ1JtKDBiMDAwMCksIE9wMigwYjAxMCksCiAJICBOVUxMLCByZXNldF92YWwsIENQQUNSX0VMMSwgMCB9LApAQCAtNjU3LDcgKzYwMiw3IEBACiAgKiByZWdpc3RlcikuCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIGNwMTVfcmVnc1tdID0gewotCXsgT3AxKCAwKSwgQ1JuKCAxKSwgQ1JtKCAwKSwgT3AyKCAwKSwgYWNjZXNzX3NjdGxyLCBOVUxMLCBjMV9TQ1RMUiB9LAorCXsgT3AxKCAwKSwgQ1JuKCAxKSwgQ1JtKCAwKSwgT3AyKCAwKSwgYWNjZXNzX3ZtX3JlZywgTlVMTCwgYzFfU0NUTFIgfSwKIAl7IE9wMSggMCksIENSbiggMiksIENSbSggMCksIE9wMiggMCksIGFjY2Vzc192bV9yZWcsIE5VTEwsIGMyX1RUQlIwIH0sCiAJeyBPcDEoIDApLCBDUm4oIDIpLCBDUm0oIDApLCBPcDIoIDEpLCBhY2Nlc3Nfdm1fcmVnLCBOVUxMLCBjMl9UVEJSMSB9LAogCXsgT3AxKCAwKSwgQ1JuKCAyKSwgQ1JtKCAwKSwgT3AyKCAyKSwgYWNjZXNzX3ZtX3JlZywgTlVMTCwgYzJfVFRCQ1IgfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9kdW1wLmMKaW5kZXggY2YzM2YzMy4uZDU0ZGM5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9kdW1wLmMKKysrIGIvYXJjaC9hcm02NC9tbS9kdW1wLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2luaXQuYyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jCmluZGV4IGJhYzQ5MmMuLmM5NTQ2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jCkBAIC0zMzUsMTQgKzMzNSw4IEBACiAKIHZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWlmICgha2VlcF9pbml0cmQpIHsKLQkJaWYgKHN0YXJ0ID09IGluaXRyZF9zdGFydCkKLQkJCXN0YXJ0ID0gcm91bmRfZG93bihzdGFydCwgUEFHRV9TSVpFKTsKLQkJaWYgKGVuZCA9PSBpbml0cmRfZW5kKQotCQkJZW5kID0gcm91bmRfdXAoZW5kLCBQQUdFX1NJWkUpOwotCisJaWYgKCFrZWVwX2luaXRyZCkKIAkJZnJlZV9yZXNlcnZlZF9hcmVhKCh2b2lkICopc3RhcnQsICh2b2lkICopZW5kLCAwLCAiaW5pdHJkIik7Ci0JfQogfQogCiBzdGF0aWMgaW50IF9faW5pdCBrZWVwaW5pdHJkX3NldHVwKGNoYXIgKl9fdW51c2VkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9tb2R1bGUuYwppbmRleCAyYzk0MTI5Li4xNjRlZmEwIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTksMTIgKzE5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCi12b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3ZvaWQgbW9kdWxlX2FyY2hfZnJlZWluZ19pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAl2ZnJlZShtb2QtPmFyY2guc3ltaW5mbyk7CiAJbW9kLT5hcmNoLnN5bWluZm8gPSBOVUxMOwotCi0JdmZyZWUobW9kdWxlX3JlZ2lvbik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3JlbGEoRWxmMzJfUmVsYSAqcmVsYSwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLApAQCAtMjkxLDEyICsyODksMyBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQotaW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLCBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKLQkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKLXsKLQl2ZnJlZShtb2R1bGUtPmFyY2guc3ltaW5mbyk7Ci0JbW9kdWxlLT5hcmNoLnN5bWluZm8gPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21tL2ZhdWx0LmMgYi9hcmNoL2F2cjMyL21tL2ZhdWx0LmMKaW5kZXggMGVjYTkzMy4uZDIyM2E4YiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXZyMzIvbW0vZmF1bHQuYwpAQCAtMTQyLDYgKzE0Miw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKaW5kZXggNmY0YmFjOS4uMjNlYWRhNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYwpAQCAtNyw2ICs3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3N5bmNfc2VyaWFsLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9zeW5jX3NlcmlhbC5jCmluZGV4IDA4YTMxM2YuLmY3NzIwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAJCQkJICBzdHJ1Y3QgdGltZXNwZWMgKnRzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGRldiA9IE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOworCWludCBkZXYgPSBNSU5PUihmaWxlX2lub2RlKGZpbGUpLT5pX3JkZXYpOwogCWludCBhdmFpbDsKIAlzdHJ1Y3Qgc3luY19wb3J0ICpwb3J0OwogCXVuc2lnbmVkIGNoYXIgKnN0YXJ0OwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNTExMjNmOS4uYWYwNGNiNiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2NyaXMva2VybmVsL21vZHVsZS5jCkBAIC0zNiw3ICszNiw3IEBACiB9CiAKIC8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jICovCi12b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3ZvaWQgbW9kdWxlX21lbWZyZWUodm9pZCAqbW9kdWxlX3JlZ2lvbikKIHsKIAlrZnJlZShtb2R1bGVfcmVnaW9uKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9tbS9mYXVsdC5jIGIvYXJjaC9jcmlzL21tL2ZhdWx0LmMKaW5kZXggMTc5MGYyMi4uMjY4NmE3YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9jcmlzL21tL2ZhdWx0LmMKQEAgLTE3Niw2ICsxNzYsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKaW5kZXggNjdiMWQxNi4uMDYzNWJkNiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYworKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCkBAIC05NCw3ICs5NCw3IEBACiAJCQkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07CiAJCQkJaWYgKCFyLT5zdGFydCkKIAkJCQkJY29udGludWU7Ci0JCQkJcGNpX2NsYWltX3Jlc291cmNlKGRldiwgaWR4KTsKKwkJCQlwY2lfY2xhaW1fYnJpZGdlX3Jlc291cmNlKGRldiwgaWR4KTsKIAkJCX0KIAkJfQogCQlwY2liaW9zX2FsbG9jYXRlX2J1c19yZXNvdXJjZXMoJmJ1cy0+Y2hpbGRyZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vZmF1bHQuYyBiL2FyY2gvZnJ2L21tL2ZhdWx0LmMKaW5kZXggOWE2NjM3Mi4uZWM0OTE3ZCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbW0vZmF1bHQuYworKysgYi9hcmNoL2Zydi9tbS9mYXVsdC5jCkBAIC0xNjgsNiArMTY4LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBmM2I1MWI1Li45NWMzOWI5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0xMSw3ICsxMSw3IEBACiAKIAogCi0jZGVmaW5lIE5SX3N5c2NhbGxzCQkJMzE4IC8qIGxlbmd0aCBvZiBzeXNjYWxsIHRhYmxlICovCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkJMzE5IC8qIGxlbmd0aCBvZiBzeXNjYWxsIHRhYmxlICovCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgc3RvcCBzY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2ggZnJvbSBjb21wbGFpbmluZyBhYm91dApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL2lhNjQvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAppbmRleCA0YzIyNDBjLi40NjEwNzk1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMzMxLDUgKzMzMSw2IEBACiAjZGVmaW5lIF9fTlJfZ2V0cmFuZG9tCQkJMTMzOQogI2RlZmluZSBfX05SX21lbWZkX2NyZWF0ZQkJMTM0MAogI2RlZmluZSBfX05SX2JwZgkJCTEzNDEKKyNkZWZpbmUgX19OUl9leGVjdmVhdAkJCTEzNDIKIAogI2VuZGlmIC8qIF9VQVBJX0FTTV9JQTY0X1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCmluZGV4IDYxNWVmODEuLmU3OTVjYjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCkBAIC04OTMsMTMgKzg5MywxMyBAQAogfQogCiAvKiB3cmFwcGVyIHRvIHNpbGVuY2Ugc2VjdGlvbiBtaXNtYXRjaCB3YXJuaW5nICovCi1pbnQgX19yZWYgYWNwaV9tYXBfbHNhcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHBoeXNpZCwgaW50ICpwY3B1KQoraW50IF9fcmVmIGFjcGlfbWFwX2NwdShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBwaHlzaWQsIGludCAqcGNwdSkKIHsKIAlyZXR1cm4gX2FjcGlfbWFwX2xzYXBpYyhoYW5kbGUsIHBoeXNpZCwgcGNwdSk7CiB9Ci1FWFBPUlRfU1lNQk9MKGFjcGlfbWFwX2xzYXBpYyk7CitFWFBPUlRfU1lNQk9MKGFjcGlfbWFwX2NwdSk7CiAKLWludCBhY3BpX3VubWFwX2xzYXBpYyhpbnQgY3B1KQoraW50IGFjcGlfdW5tYXBfY3B1KGludCBjcHUpCiB7CiAJaWE2NF9jcHVfdG9fc2FwaWNpZFtjcHVdID0gLTE7CiAJc2V0X2NwdV9wcmVzZW50KGNwdSwgZmFsc2UpOwpAQCAtOTEwLDggKzkxMCw3IEBACiAKIAlyZXR1cm4gKDApOwogfQotCi1FWFBPUlRfU1lNQk9MKGFjcGlfdW5tYXBfbHNhcGljKTsKK0VYUE9SVF9TWU1CT0woYWNwaV91bm1hcF9jcHUpOwogI2VuZGlmCQkJCS8qIENPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVICovCiAKICNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggZjVlOTZkZi4uZmNmOGI4YyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTc3OSw2ICsxNzc5LDcgQEAKIAlkYXRhOCBzeXNfZ2V0cmFuZG9tCiAJZGF0YTggc3lzX21lbWZkX2NyZWF0ZQkJCS8vIDEzNDAKIAlkYXRhOCBzeXNfYnBmCisJZGF0YTggc3lzX2V4ZWN2ZWF0CiAKIAkub3JnIHN5c19jYWxsX3RhYmxlICsgOCpOUl9zeXNjYWxscwkvLyBndWFyZCBhZ2FpbnN0IGZhaWx1cmVzIHRvIGluY3JlYXNlIE5SX3N5c2NhbGxzCiAjZW5kaWYgLyogX19JQTY0X0FTTV9QQVJBVklSVFVBTElaRURfTkFUSVZFICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYwppbmRleCAyNDYwM2JlLi4yOTc1NGFhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKQEAgLTMwNSwxNCArMzA1LDEyIEBACiAjZW5kaWYgLyogIVVTRV9CUkwgKi8KIAogdm9pZAotbW9kdWxlX2ZyZWUgKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK21vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdCAoc3RydWN0IG1vZHVsZSAqbW9kKQogewotCWlmIChtb2QgJiYgbW9kLT5hcmNoLmluaXRfdW53X3RhYmxlICYmCi0JICAgIG1vZHVsZV9yZWdpb24gPT0gbW9kLT5tb2R1bGVfaW5pdCkgeworCWlmIChtb2QtPmFyY2guaW5pdF91bndfdGFibGUpIHsKIAkJdW53X3JlbW92ZV91bndpbmRfdGFibGUobW9kLT5hcmNoLmluaXRfdW53X3RhYmxlKTsKIAkJbW9kLT5hcmNoLmluaXRfdW53X3RhYmxlID0gTlVMTDsKIAl9Ci0JdmZyZWUobW9kdWxlX3JlZ2lvbik7CiB9CiAKIC8qIEhhdmUgd2UgYWxyZWFkeSBzZWVuIG9uZSBvZiB0aGVzZSByZWxvY2F0aW9ucz8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jIGIvYXJjaC9pYTY0L21tL2ZhdWx0LmMKaW5kZXggNzIyNWRhZC4uYmE1YmE3YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9pYTY0L21tL2ZhdWx0LmMKQEAgLTE3Miw2ICsxNzIsOCBAQAogCQkgKi8KIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7CiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKSB7CisJCQlnb3RvIGJhZF9hcmVhOwogCQl9IGVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKSB7CiAJCQlzaWduYWwgPSBTSUdCVVM7CiAJCQlnb3RvIGJhZF9hcmVhOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9wY2kuYyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKaW5kZXggMjkxYTU4Mi4uOTAwY2M5MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC00ODcsNDUgKzQ4NywzOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlzX3ZhbGlkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgpCi17Ci0JdW5zaWduZWQgaW50IGksIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdLCAqYnVzcjsKLQotCWlmICghZGV2LT5idXMpCi0JCXJldHVybiAwOwotCi0JcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShkZXYtPmJ1cywgYnVzciwgaSkgewotCQlpZiAoIWJ1c3IgfHwgKChidXNyLT5mbGFncyBeIGRldnItPmZsYWdzKSAmIHR5cGVfbWFzaykpCi0JCQljb250aW51ZTsKLQkJaWYgKChkZXZyLT5zdGFydCkgJiYgKGRldnItPnN0YXJ0ID49IGJ1c3ItPnN0YXJ0KSAmJgotCQkJCShkZXZyLT5lbmQgPD0gYnVzci0+ZW5kKSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcGNpYmlvc19maXh1cF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHN0YXJ0LCBpbnQgbGltaXQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBzdGFydDsgaSA8IGxpbWl0OyBpKyspIHsKLQkJaWYgKCFkZXYtPnJlc291cmNlW2ldLmZsYWdzKQotCQkJY29udGludWU7Ci0JCWlmICgoaXNfdmFsaWRfcmVzb3VyY2UoZGV2LCBpKSkpCi0JCQlwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKTsKLQl9Ci19Ci0KIHZvaWQgcGNpYmlvc19maXh1cF9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JcGNpYmlvc19maXh1cF9yZXNvdXJjZXMoZGV2LCAwLCBQQ0lfQlJJREdFX1JFU09VUkNFUyk7CisJaW50IGlkeDsKKworCWlmICghZGV2LT5idXMpCisJCXJldHVybjsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgUENJX0JSSURHRV9SRVNPVVJDRVM7IGlkeCsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZkZXYtPnJlc291cmNlW2lkeF07CisKKwkJaWYgKCFyLT5mbGFncyB8fCByLT5wYXJlbnQgfHwgIXItPnN0YXJ0KQorCQkJY29udGludWU7CisKKwkJcGNpX2NsYWltX3Jlc291cmNlKGRldiwgaWR4KTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2liaW9zX2ZpeHVwX2RldmljZV9yZXNvdXJjZXMpOwogCiBzdGF0aWMgdm9pZCBwY2liaW9zX2ZpeHVwX2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlwY2liaW9zX2ZpeHVwX3Jlc291cmNlcyhkZXYsIFBDSV9CUklER0VfUkVTT1VSQ0VTLCBQQ0lfTlVNX1JFU09VUkNFUyk7CisJaW50IGlkeDsKKworCWlmICghZGV2LT5idXMpCisJCXJldHVybjsKKworCWZvciAoaWR4ID0gUENJX0JSSURHRV9SRVNPVVJDRVM7IGlkeCA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpZHgrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCisJCWlmICghci0+ZmxhZ3MgfHwgci0+cGFyZW50IHx8ICFyLT5zdGFydCkKKwkJCWNvbnRpbnVlOworCisJCXBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpZHgpOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9mYXVsdC5jIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKaW5kZXggZTljNmE4MC4uZTNkNGQ0ODkwMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKQEAgLTIwMCw2ICsyMDAsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDc1ZTc1ZDcuLjI0NGUwZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8dWFwaS9hc20vdW5pc3RkLmg+CiAKIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMzU1CisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzNTYKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL202OGsvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAppbmRleCAyYzFiZWM5Li42MWZiNmNiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMzYwLDUgKzM2MCw2IEBACiAjZGVmaW5lIF9fTlJfZ2V0cmFuZG9tCQkzNTIKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJMzUzCiAjZGVmaW5lIF9fTlJfYnBmCQkzNTQKKyNkZWZpbmUgX19OUl9leGVjdmVhdAkJMzU1CiAKICNlbmRpZiAvKiBfVUFQSV9BU01fTTY4S19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TCmluZGV4IDJjYTIxOWUuLmEwZWM0MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUwpAQCAtMzc1LDQgKzM3NSw1IEBACiAJLmxvbmcgc3lzX2dldHJhbmRvbQogCS5sb25nIHN5c19tZW1mZF9jcmVhdGUKIAkubG9uZyBzeXNfYnBmCisJLmxvbmcgc3lzX2V4ZWN2ZWF0CQkvKiAzNTUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2ZhdWx0LmMgYi9hcmNoL202OGsvbW0vZmF1bHQuYwppbmRleCAyYmQ3NDg3Li5iMmYwNGFlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vZmF1bHQuYworKysgYi9hcmNoL202OGsvbW0vZmF1bHQuYwpAQCAtMTQ1LDYgKzE0NSw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBtYXBfZXJyOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gYnVzX2VycjsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL21ldGFnL21tL2ZhdWx0LmMgYi9hcmNoL21ldGFnL21tL2ZhdWx0LmMKaW5kZXggMzMyNjgwZS4uMmRlNWRjNiAxMDA2NDQKLS0tIGEvYXJjaC9tZXRhZy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbWV0YWcvbW0vZmF1bHQuYwpAQCAtMTQxLDYgKzE0MSw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvbW0vZmF1bHQuYyBiL2FyY2gvbWljcm9ibGF6ZS9tbS9mYXVsdC5jCmluZGV4IGZhNGNmNTIuLmQ0NmE1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9tbS9mYXVsdC5jCkBAIC0yMjQsNiArMjI0LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9wY2kvcGNpLWNvbW1vbi5jIGIvYXJjaC9taWNyb2JsYXplL3BjaS9wY2ktY29tbW9uLmMKaW5kZXggYjMwZTQxYy4uNDg1MjhmYiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL3BjaS9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL3BjaS9wY2ktY29tbW9uLmMKQEAgLTEwMjYsNiArMTAyNiw4IEBACiAJCQkgcHIsIChwciAmJiBwci0+bmFtZSkgPyBwci0+bmFtZSA6ICJuaWwiKTsKIAogCQlpZiAocHIgJiYgIShwci0+ZmxhZ3MgJiBJT1JFU09VUkNFX1VOU0VUKSkgeworCQkJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKKwogCQkJaWYgKHJlcXVlc3RfcmVzb3VyY2UocHIsIHJlcykgPT0gMCkKIAkJCQljb250aW51ZTsKIAkJCS8qCkBAIC0xMDM1LDYgKzEwMzcsMTIgQEAKIAkJCSAqLwogCQkJaWYgKHJlcGFyZW50X3Jlc291cmNlcyhwciwgcmVzKSA9PSAwKQogCQkJCWNvbnRpbnVlOworCisJCQlpZiAoZGV2ICYmIGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTSAmJgorCQkJICAgIHBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LAorCQkJCQkJIGkgKyBQQ0lfQlJJREdFX1JFU09VUkNFUykgPT0gMCkKKwkJCQljb250aW51ZTsKKwogCQl9CiAJCXByX3dhcm4oIlBDSTogQ2Fubm90IGFsbG9jYXRlIHJlc291cmNlIHJlZ2lvbiAiKTsKIAkJcHJfY29udCgiJWQgb2YgUENJIGJyaWRnZSAlZCwgd2lsbCByZW1hcFxuIiwgaSwgYnVzLT5udW1iZXIpOwpAQCAtMTIyNyw3ICsxMjM1LDEwIEBACiAJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kLAogCQkJCSAodW5zaWduZWQgaW50KXItPmZsYWdzKTsKIAotCQkJcGNpX2NsYWltX3Jlc291cmNlKGRldiwgaSk7CisJCQlpZiAocGNpX2NsYWltX3Jlc291cmNlKGRldiwgaSkgPT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJcGNpX2NsYWltX2JyaWRnZV9yZXNvdXJjZShkZXYsIGkpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vZmF1bHQuYyBiL2FyY2gvbWlwcy9tbS9mYXVsdC5jCmluZGV4IGJlY2M0MmIuLjcwYWI1ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9mYXVsdC5jCkBAIC0xNTgsNiArMTU4LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9uZXQvYnBmX2ppdC5jIGIvYXJjaC9taXBzL25ldC9icGZfaml0LmMKaW5kZXggOWZkNjgzNC4uNWQ2MTM5MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL25ldC9icGZfaml0LmMKKysrIGIvYXJjaC9taXBzL25ldC9icGZfaml0LmMKQEAgLTEzODgsNyArMTM4OCw3IEBACiB2b2lkIGJwZl9qaXRfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKQogewogCWlmIChmcC0+aml0ZWQpCi0JCW1vZHVsZV9mcmVlKE5VTEwsIGZwLT5icGZfZnVuYyk7CisJCW1vZHVsZV9tZW1mcmVlKGZwLT5icGZfZnVuYyk7CiAKIAlicGZfcHJvZ191bmxvY2tfZnJlZShmcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvbW0vZmF1bHQuYyBiL2FyY2gvbW4xMDMwMC9tbS9mYXVsdC5jCmluZGV4IDM1MTZjYmQuLjBjMmNjNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbW4xMDMwMC9tbS9mYXVsdC5jCkBAIC0yNjIsNiArMjYyLDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYwppbmRleCBmZWJiOWNkLi5iNWIwMzZmIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJCQlpZiAoIXItPmZsYWdzKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAoIXItPnN0YXJ0IHx8Ci0JCQkJICAgIHBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGlkeCkgPCAwKSB7CisJCQkJICAgIHBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpZHgpIDwgMCkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIlBDSToiCiAJCQkJCSAgICAgICAiIENhbm5vdCBhbGxvY2F0ZSByZXNvdXJjZSIKIAkJCQkJICAgICAgICIgcmVnaW9uICVkIG9mIGJyaWRnZSAlc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCmluZGV4IDZiNDMzOWYuLjQ3MWZmMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYwpAQCAtMjgxLDQyICsyODEsMzcgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBpc192YWxpZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KQotewotCXVuc2lnbmVkIGludCBpLCB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU07Ci0Jc3RydWN0IHJlc291cmNlICpkZXZyID0gJmRldi0+cmVzb3VyY2VbaWR4XSwgKmJ1c3I7Ci0KLQlpZiAoZGV2LT5idXMpIHsKLQkJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShkZXYtPmJ1cywgYnVzciwgaSkgewotCQkJaWYgKCFidXNyIHx8IChidXNyLT5mbGFncyBeIGRldnItPmZsYWdzKSAmIHR5cGVfbWFzaykKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKGRldnItPnN0YXJ0ICYmCi0JCQkgICAgZGV2ci0+c3RhcnQgPj0gYnVzci0+c3RhcnQgJiYKLQkJCSAgICBkZXZyLT5lbmQgPD0gYnVzci0+ZW5kKQotCQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHBjaWJpb3NfZml4dXBfZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCWludCBsaW1pdCwgaTsKKwlpbnQgaWR4OwogCi0JaWYgKGRldi0+YnVzLT5udW1iZXIgIT0gMCkKKwlpZiAoIWRldi0+YnVzKQogCQlyZXR1cm47CiAKLQlsaW1pdCA9IChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpID8KLQkJUENJX0JSSURHRV9SRVNPVVJDRVMgOiBQQ0lfTlVNX1JFU09VUkNFUzsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IFBDSV9CUklER0VfUkVTT1VSQ0VTOyBpZHgrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOwogCi0JZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKLQkJaWYgKCFkZXYtPnJlc291cmNlW2ldLmZsYWdzKQorCQlpZiAoIXItPmZsYWdzIHx8IHItPnBhcmVudCB8fCAhci0+c3RhcnQpCiAJCQljb250aW51ZTsKIAotCQlpZiAoaXNfdmFsaWRfcmVzb3VyY2UoZGV2LCBpKSkKLQkJCXBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGkpOworCQlwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpZHgpOworCX0KK30KKworc3RhdGljIHZvaWQgcGNpYmlvc19maXh1cF9icmlkZ2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IGlkeDsKKworCWlmICghZGV2LT5idXMpCisJCXJldHVybjsKKworCWZvciAoaWR4ID0gUENJX0JSSURHRV9SRVNPVVJDRVM7IGlkeCA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpZHgrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCisJCWlmICghci0+ZmxhZ3MgfHwgci0+cGFyZW50IHx8ICFyLT5zdGFydCkKKwkJCWNvbnRpbnVlOworCisJCXBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpZHgpOwogCX0KIH0KIApAQCAtMzMwLDcgKzMyNSw3IEBACiAKIAlpZiAoYnVzLT5zZWxmKSB7CiAJCXBjaV9yZWFkX2JyaWRnZV9iYXNlcyhidXMpOwotCQlwY2liaW9zX2ZpeHVwX2RldmljZV9yZXNvdXJjZXMoYnVzLT5zZWxmKTsKKwkJcGNpYmlvc19maXh1cF9icmlkZ2VfcmVzb3VyY2VzKGJ1cy0+c2VsZik7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvY3B1aW5mby5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvY3B1aW5mby5jCmluZGV4IDUxZDViYjkuLmEyMjM2OTFkIDEwMDY0NAotLS0gYS9hcmNoL25pb3MyL2tlcm5lbC9jcHVpbmZvLmMKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvY3B1aW5mby5jCkBAIC03Miw2ICs3Miw3IEBACiAJY3B1aW5mby5oYXNfZGl2ID0gZmNwdV9oYXMoY3B1LCAiYWx0cixoYXMtZGl2Iik7CiAJY3B1aW5mby5oYXNfbXVsID0gZmNwdV9oYXMoY3B1LCAiYWx0cixoYXMtbXVsIik7CiAJY3B1aW5mby5oYXNfbXVseCA9IGZjcHVfaGFzKGNwdSwgImFsdHIsaGFzLW11bHgiKTsKKwljcHVpbmZvLm1tdSA9IGZjcHVfaGFzKGNwdSwgImFsdHIsaGFzLW1tdSIpOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX05JT1MyX0hXX0RJVl9TVVBQT1JUKSAmJiAhY3B1aW5mby5oYXNfZGl2KQogCQllcnJfY3B1KCJESVYiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL2VudHJ5LlMgYi9hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TCmluZGV4IDgzYmNhMTcuLjBiZGZkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbmlvczIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUwpAQCAtMzY1LDMwICszNjUsMTQgQEAKIAlHRVRfVEhSRUFEX0lORk8JcjEKIAlsZHcJcjQsIFRJX1BSRUVNUFRfQ09VTlQocjEpCiAJYm5lCXI0LCByMCwgcmVzdG9yZV9hbGwKLQotbmVlZF9yZXNjaGVkOgogCWxkdwlyNCwgVElfRkxBR1MocjEpCQkvKiA/IE5lZWQgcmVzY2hlZCBzZXQgKi8KIAlCVEJaCXIxMCwgcjQsIFRJRl9ORUVEX1JFU0NIRUQsIHJlc3RvcmVfYWxsCiAJbGR3CXI0LCBQVF9FU1RBVFVTKHNwKQkvKiA/IEludGVycnVwdHMgb2ZmICovCiAJYW5kaQlyMTAsIHI0LCBFU1RBVFVTX0VQSUUKIAliZXEJcjEwLCByMCwgcmVzdG9yZV9hbGwKLQltb3ZpYQlyNCwgUFJFRU1QVF9BQ1RJVkUKLQlzdHcJcjQsIFRJX1BSRUVNUFRfQ09VTlQocjEpCi0JcmRjdGwJcjEwLCBzdGF0dXMJCS8qIGVuYWJsZSBpbnRycyBhZ2FpbiAqLwotCW9yaQlyMTAsIHIxMCAsU1RBVFVTX1BJRQotCXdyY3RsCXN0YXR1cywgcjEwCi0JUFVTSAlyMQotCWNhbGwJc2NoZWR1bGUKLQlQT1AJcjEKLQltb3YJcjQsIHIwCi0Jc3R3CXI0LCBUSV9QUkVFTVBUX0NPVU5UKHIxKQotCXJkY3RsCXIxMCwgc3RhdHVzCQkvKiBkaXNhYmxlIGludHJzICovCi0JYW5kaQlyMTAsIHIxMCwgJWxvKH5TVEFUVVNfUElFKQotCXdyY3RsCXN0YXR1cywgcjEwCi0JYnIJbmVlZF9yZXNjaGVkCi0jZWxzZQotCWJyCXJlc3RvcmVfYWxsCisJY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQogI2VuZGlmCisJYnIJcmVzdG9yZV9hbGwKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBBIGZldyBzeXNjYWxsIHdyYXBwZXJzCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jCmluZGV4IGNjOTI0YTMuLmUyZTNmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jCkBAIC0zNiw3ICszNiw3IEBACiB9CiAKIC8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jICovCi12b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3ZvaWQgbW9kdWxlX21lbWZyZWUodm9pZCAqbW9kdWxlX3JlZ2lvbikKIHsKIAlrZnJlZShtb2R1bGVfcmVnaW9uKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZjlkMjc4OC4uMmQwZWEyNSAxMDA2NDQKLS0tIGEvYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCiAJLyogU2V0IHVwIHRvIHJldHVybiBmcm9tIHVzZXJzcGFjZTsganVtcCB0byBmaXhlZCBhZGRyZXNzIHNpZ3JldHVybgogCSAgIHRyYW1wb2xpbmUgb24ga3VzZXIgcGFnZS4gICovCi0JcmVncy0+cmEgPSAodW5zaWduZWQgbG9uZykgKDB4MTA0MCk7CisJcmVncy0+cmEgPSAodW5zaWduZWQgbG9uZykgKDB4MTA0NCk7CiAKIAkvKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzaWduYWwgaGFuZGxlciAqLwogCXJlZ3MtPnNwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9mYXVsdC5jIGIvYXJjaC9uaW9zMi9tbS9mYXVsdC5jCmluZGV4IDE1YTBiYjUuLjM0NDI5ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbmlvczIvbW0vZmF1bHQuYworKysgYi9hcmNoL25pb3MyL21tL2ZhdWx0LmMKQEAgLTEzNSw2ICsxMzUsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9vcGVucmlzYy9tbS9mYXVsdC5jIGIvYXJjaC9vcGVucmlzYy9tbS9mYXVsdC5jCmluZGV4IDA3MDNhY2YuLjIzMGFjMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvb3BlbnJpc2MvbW0vZmF1bHQuYworKysgYi9hcmNoL29wZW5yaXNjL21tL2ZhdWx0LmMKQEAgLTE3MSw2ICsxNzEsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbGRjdy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbGRjdy5oCmluZGV4IGQyZDExYjcuLjgxMjFhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xkY3cuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9sZGN3LmgKQEAgLTMzLDExICszMywxOCBAQAogCiAjZW5kaWYgLyohQ09ORklHX1BBMjAqLwogCi0vKiBMRENXLCB0aGUgb25seSBhdG9taWMgcmVhZC13cml0ZSBvcGVyYXRpb24gUEEtUklTQyBoYXMuICpzaWdoKi4gICovCisvKiBMRENXLCB0aGUgb25seSBhdG9taWMgcmVhZC13cml0ZSBvcGVyYXRpb24gUEEtUklTQyBoYXMuICpzaWdoKi4KKyAgIFdlIGRvbid0IGV4cGxpY2l0bHkgZXhwb3NlIHRoYXQgIiphIiBtYXkgYmUgd3JpdHRlbiBhcyByZWxvYWQKKyAgIGZhaWxzIHRvIGZpbmQgYSByZWdpc3RlciBpbiBjbGFzcyBSMV9SRUdTIHdoZW4gImEiIG5lZWRzIHRvIGJlCisgICByZWxvYWRlZCB3aGVuIGdlbmVyYXRpbmcgNjQtYml0IFBJQyBjb2RlLiAgSW5zdGVhZCwgd2UgY2xvYmJlcgorICAgbWVtb3J5IHRvIGluZGljYXRlIHRvIHRoZSBjb21waWxlciB0aGF0IHRoZSBhc3NlbWJseSBjb2RlIHJlYWRzCisgICBvciB3cml0ZXMgdG8gaXRlbXMgb3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4gdGhlIGlucHV0IGFuZCBvdXRwdXQKKyAgIG9wZXJhbmRzLiAgVGhpcyBtYXkgcGVzc2ltaXplIHRoZSBjb2RlIHNvbWV3aGF0IGJ1dCBfX2xkY3cgaXMKKyAgIHVzdWFsbHkgdXNlZCB3aXRoaW4gY29kZSBibG9ja3Mgc3Vycm91bmRlZCBieSBtZW1vcnkgYmFycmlvcnMuICAqLwogI2RlZmluZSBfX2xkY3coYSkgKHsJCQkJCQlcCiAJdW5zaWduZWQgX19yZXQ7CQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKF9fTERDVyAiIDAoJTIpLCUwIgkJCVwKLQkJOiAiPXIiIChfX3JldCksICIrbSIgKCooYSkpIDogInIiIChhKSk7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oX19MRENXICIgMCglMSksJTAiCQkJXAorCQk6ICI9ciIgKF9fcmV0KSA6ICJyIiAoYSkgOiAibWVtb3J5Iik7CQlcCiAJX19yZXQ7CQkJCQkJCVwKIH0pCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA1MGRmYWZjLi41ODIyZThlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCkBAIC0yOTgsMTQgKzI5OCwxMCBAQAogfQogI2VuZGlmCiAKLQotLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfYWxsb2MgKi8KLXZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKQordm9pZCBtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCWtmcmVlKG1vZC0+YXJjaC5zZWN0aW9uKTsKIAltb2QtPmFyY2guc2VjdGlvbiA9IE5VTEw7Ci0KLQl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKIH0KIAogLyogQWRkaXRpb25hbCBieXRlcyBuZWVkZWQgaW4gZnJvbnQgb2YgaW5kaXZpZHVhbCBzZWN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vZmF1bHQuYyBiL2FyY2gvcGFyaXNjL21tL2ZhdWx0LmMKaW5kZXggM2NhOWMxMS4uZTUxMjBlNiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vZmF1bHQuYworKysgYi9hcmNoL3BhcmlzYy9tbS9mYXVsdC5jCkBAIC0yNTYsNiArMjU2LDggQEAKIAkJICovCiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGJhZF9hcmVhOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcnlwdG8vc2hhMS5jIGIvYXJjaC9wb3dlcnBjL2NyeXB0by9zaGExLmMKaW5kZXggZDNmZWJhNWEyLi5jMTU0Y2ViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3J5cHRvL3NoYTEuYworKysgYi9hcmNoL3Bvd2VycGMvY3J5cHRvL3NoYTEuYwpAQCAtMTU0LDQgKzE1NCw1IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNIQTEgU2VjdXJlIEhhc2ggQWxnb3JpdGhtIik7CiAKK01PRFVMRV9BTElBU19DUllQVE8oInNoYTEiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oInNoYTEtcG93ZXJwYyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tleGVjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2V4ZWMuaAppbmRleCAxOWMzNmNiLi5hNDZmNWY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2V4ZWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2V4ZWMuaApAQCAtODYsNiArODYsMTEgQEAKIGV4dGVybiB2b2lkIHJlc2VydmVfY3Jhc2hrZXJuZWwodm9pZCk7CiBleHRlcm4gdm9pZCBtYWNoaW5lX2tleGVjX21hc2tfaW50ZXJydXB0cyh2b2lkKTsKIAorc3RhdGljIGlubGluZSBib29sIGtkdW1wX2luX3Byb2dyZXNzKHZvaWQpCit7CisJcmV0dXJuIGNyYXNoaW5nX2NwdSA+PSAwOworfQorCiAjZWxzZSAvKiAhQ09ORklHX0tFWEVDICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfa2V4ZWNfc2Vjb25kYXJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IH0KIApAQCAtMTA2LDYgKzExMSwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wga2R1bXBfaW5fcHJvZ3Jlc3Modm9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfS0VYRUMgKi8KICNlbmRpZiAvKiAhIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAppbmRleCBjZTk1NzdkLi45MTA2MmVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC0zNjYsMyArMzY2LDQgQEAKIFNZU0NBTExfU1BVKGdldHJhbmRvbSkKIFNZU0NBTExfU1BVKG1lbWZkX2NyZWF0ZSkKIFNZU0NBTExfU1BVKGJwZikKK0NPTVBBVF9TWVMoZXhlY3ZlYXQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGViYzRmMTYuLjBiZTZjNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0yMyw5ICsyMyw5IEBACiAjZGVmaW5lIFRIUkVBRF9TSVpFCQkoMSA8PCBUSFJFQURfU0hJRlQpCiAKICNpZmRlZiBDT05GSUdfUFBDNjQKLSNkZWZpbmUgQ1VSUkVOVF9USFJFQURfSU5GTyhkZXN0LCBzcCkJY2xycmRpIGRlc3QsIHNwLCBUSFJFQURfU0hJRlQKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQURfSU5GTyhkZXN0LCBzcCkJc3RyaW5naWZ5X2luX2MoY2xycmRpIGRlc3QsIHNwLCBUSFJFQURfU0hJRlQpCiAjZWxzZQotI2RlZmluZSBDVVJSRU5UX1RIUkVBRF9JTkZPKGRlc3QsIHNwKQlybHdpbm0gZGVzdCwgc3AsIDAsIDAsIDMxLVRIUkVBRF9TSElGVAorI2RlZmluZSBDVVJSRU5UX1RIUkVBRF9JTkZPKGRlc3QsIHNwKQlzdHJpbmdpZnlfaW5fYyhybHdpbm0gZGVzdCwgc3AsIDAsIDAsIDMxLVRIUkVBRF9TSElGVCkKICNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtNzEsMTIgKzcxLDEzIEBACiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCShUSFJFQURfU0hJRlQgLSBQQUdFX1NISUZUKQogCiAvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLwotcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2N1cnJlbnRfcjEgYXNtKCJyMSIpOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfdGhyZWFkX2luZm8odm9pZCkKIHsKLQkvKiBnY2M0LCBhdCBsZWFzdCwgaXMgc21hcnQgZW5vdWdoIHRvIHR1cm4gdGhpcyBpbnRvIGEgc2luZ2xlCi0JICogcmx3aW5tIGZvciBwcGMzMiBhbmQgY2xycmRpIGZvciBwcGM2NCAqLwotCXJldHVybiAoc3RydWN0IHRocmVhZF9pbmZvICopKF9fY3VycmVudF9yMSAmIH4oVEhSRUFEX1NJWkUtMSkpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJYXNtIChDVVJSRU5UX1RIUkVBRF9JTkZPKCUwLDEpIDogIj1yIiAodmFsKSk7CisKKwlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKXZhbDsKIH0KIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGUwZGEwMjEuLjM2Yjc5YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDx1YXBpL2FzbS91bmlzdGQuaD4KIAogCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTM2MgorI2RlZmluZSBfX05SX3N5c2NhbGxzCQkzNjMKIAogI2RlZmluZSBfX05SX19leGl0IF9fTlJfZXhpdAogI2RlZmluZSBOUl9zeXNjYWxscwlfX05SX3N5c2NhbGxzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IGY1NTM1MWYuLmVmNWI1YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCkBAIC0zODQsNSArMzg0LDYgQEAKICNkZWZpbmUgX19OUl9nZXRyYW5kb20JCTM1OQogI2RlZmluZSBfX05SX21lbWZkX2NyZWF0ZQkzNjAKICNkZWZpbmUgX19OUl9icGYJCTM2MQorI2RlZmluZSBfX05SX2V4ZWN2ZWF0CQkzNjIKIAogI2VuZGlmIC8qIF9VQVBJX0FTTV9QT1dFUlBDX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYwppbmRleCA4NzliM2FhLi5mOTZkMWVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYwpAQCAtMzMwLDcgKzMzMCw3IEBACiAgICAgICAgICogdXNpbmcgZGVidWdnZXIgSVBJLgogICAgICAgICAqLwogCi0JaWYgKGNyYXNoaW5nX2NwdSA9PSAtMSkKKwlpZiAoIWtkdW1wX2luX3Byb2dyZXNzKCkpCiAJCWtleGVjX3ByZXBhcmVfY3B1cygpOwogCiAJcHJfZGVidWcoImtleGVjOiBTdGFydGluZyBzd2l0Y2hvdmVyIHNlcXVlbmNlLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IDM3ZDUxMmQuLjJhNTI1YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC0xMTg0LDYgKzExODQsOCBAQAogCQkJIHByLCAocHIgJiYgcHItPm5hbWUpID8gcHItPm5hbWUgOiAibmlsIik7CiAKIAkJaWYgKHByICYmICEocHItPmZsYWdzICYgSU9SRVNPVVJDRV9VTlNFVCkpIHsKKwkJCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBidXMtPnNlbGY7CisKIAkJCWlmIChyZXF1ZXN0X3Jlc291cmNlKHByLCByZXMpID09IDApCiAJCQkJY29udGludWU7CiAJCQkvKgpAQCAtMTE5Myw2ICsxMTk1LDExIEBACiAJCQkgKi8KIAkJCWlmIChyZXBhcmVudF9yZXNvdXJjZXMocHIsIHJlcykgPT0gMCkKIAkJCQljb250aW51ZTsKKworCQkJaWYgKGRldiAmJiBpIDwgUENJX0JSSURHRV9SRVNPVVJDRV9OVU0gJiYKKwkJCSAgICBwY2lfY2xhaW1fYnJpZGdlX3Jlc291cmNlKGRldiwKKwkJCQkJCWkgKyBQQ0lfQlJJREdFX1JFU09VUkNFUykgPT0gMCkKKwkJCQljb250aW51ZTsKIAkJfQogCQlwcl93YXJuaW5nKCJQQ0k6IENhbm5vdCBhbGxvY2F0ZSByZXNvdXJjZSByZWdpb24gIgogCQkJICAgIiVkIG9mIFBDSSBicmlkZ2UgJWQsIHdpbGwgcmVtYXBcbiIsIGksIGJ1cy0+bnVtYmVyKTsKQEAgLTE0MDEsNyArMTQwOCwxMCBAQAogCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXItPmVuZCwKIAkJCQkgKHVuc2lnbmVkIGludClyLT5mbGFncyk7CiAKLQkJCXBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGkpOworCQkJaWYgKHBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGkpID09IDApCisJCQkJY29udGludWU7CisKKwkJCXBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKaW5kZXggOGVjMDE3Yy4uOGIyZDJkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCkBAIC03MDAsNiArNzAwLDcgQEAKIAlzbXBfc3RvcmVfY3B1X2luZm8oY3B1KTsKIAlzZXRfZGVjKHRiX3RpY2tzX3Blcl9qaWZmeSk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CisJY3B1X2NhbGxpbl9tYXBbY3B1XSA9IDE7CiAKIAlpZiAoc21wX29wcy0+c2V0dXBfY3B1KQogCQlzbXBfb3BzLT5zZXR1cF9jcHUoY3B1KTsKQEAgLTczOCwxNCArNzM5LDYgQEAKIAlub3RpZnlfY3B1X3N0YXJ0aW5nKGNwdSk7CiAJc2V0X2NwdV9vbmxpbmUoY3B1LCB0cnVlKTsKIAotCS8qCi0JICogQ1BVIG11c3QgYmUgbWFya2VkIGFjdGl2ZSBhbmQgb25saW5lIGJlZm9yZSB3ZSBzaWduYWwgYmFjayB0byB0aGUKLQkgKiBtYXN0ZXIsIGJlY2F1c2UgdGhlIHNjaGVkdWxlciBuZWVkcyB0byBzZWUgdGhlIGNwdV9vbmxpbmUgYW5kCi0JICogY3B1X2FjdGl2ZSBiaXRzIHNldC4KLQkgKi8KLQlzbXBfd21iKCk7Ci0JY3B1X2NhbGxpbl9tYXBbY3B1XSA9IDE7Ci0KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAljcHVfc3RhcnR1cF9lbnRyeShDUFVIUF9PTkxJTkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2NvcHJvX2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vY29wcm9fZmF1bHQuYwppbmRleCA1YTIzNmYwLi4xYjUzMDVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vY29wcm9fZmF1bHQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vY29wcm9fZmF1bHQuYwpAQCAtNzYsNyArNzYsNyBAQAogCQlpZiAoKmZsdCAmIFZNX0ZBVUxUX09PTSkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0X3VubG9jazsKLQkJfSBlbHNlIGlmICgqZmx0ICYgVk1fRkFVTFRfU0lHQlVTKSB7CisJCX0gZWxzZSBpZiAoKmZsdCAmIChWTV9GQVVMVF9TSUdCVVMgfCBWTV9GQVVMVF9TSUdTRUdWKSkgewogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwppbmRleCBlYjc5OTA3Li42MTU0YjBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwpAQCAtNDM3LDYgKzQzNyw4IEBACiAJICovCiAJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgZmxhZ3MpOwogCWlmICh1bmxpa2VseShmYXVsdCAmIChWTV9GQVVMVF9SRVRSWXxWTV9GQVVMVF9FUlJPUikpKSB7CisJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQlyYyA9IG1tX2ZhdWx0X2Vycm9yKHJlZ3MsIGFkZHJlc3MsIGZhdWx0KTsKIAkJaWYgKHJjID49IE1NX0ZBVUxUX1JFVFVSTikKIAkJCWdvdG8gYmFpbDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDFjYTEyNWIuLmQxOTE2YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYwpAQCAtNjk5LDcgKzY5OSw3IEBACiB2b2lkIGJwZl9qaXRfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKQogewogCWlmIChmcC0+aml0ZWQpCi0JCW1vZHVsZV9mcmVlKE5VTEwsIGZwLT5icGZfZnVuYyk7CisJCW1vZHVsZV9tZW1mcmVlKGZwLT5icGZfZnVuYyk7CiAKIAlicGZfcHJvZ191bmxvY2tfZnJlZShmcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC13cmFwcGVycy5TIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtd3JhcHBlcnMuUwppbmRleCA1NGVjYThiLi4wNTA5YmNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC13cmFwcGVycy5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXdyYXBwZXJzLlMKQEAgLTQwLDcgKzQwLDYgQEAKIAliCTFmOwkJCQkJCVwKIEVORF9GVFJfU0VDVElPTigwLCAxKTsJCQkJCQlcCiAJbGQJcjEyLG9wYWxfdHJhY2Vwb2ludF9yZWZjb3VudEB0b2MocjIpOwkJXAotCXN0ZAlyMTIsMzIocjEpOwkJCQkJXAogCWNtcGRpCXIxMiwwOwkJCQkJCVwKIAlibmUtCUxBQkVMOwkJCQkJCVwKIDE6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9zZXR1cC5jCmluZGV4IGI3MDBhMzIuLmQyZGU3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9zZXR1cC5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAkgKiBhbGwgY3B1cyBhdCBib290LiBHZXQgdGhlc2UgcmVnIHZhbHVlcyBvZiBjdXJyZW50IGNwdSBhbmQgdXNlIHRoZQogCSAqIHNhbWUgYWNjcm9zcyBhbGwgY3B1cy4KIAkgKi8KLQl1aW50NjRfdCBscGNyX3ZhbCA9IG1mc3ByKFNQUk5fTFBDUik7CisJdWludDY0X3QgbHBjcl92YWwgPSBtZnNwcihTUFJOX0xQQ1IpICYgfih1NjQpTFBDUl9QRUNFMTsKIAl1aW50NjRfdCBoaWQwX3ZhbCA9IG1mc3ByKFNQUk5fSElEMCk7CiAJdWludDY0X3QgaGlkMV92YWwgPSBtZnNwcihTUFJOX0hJRDEpOwogCXVpbnQ2NF90IGhpZDRfdmFsID0gbWZzcHIoU1BSTl9ISUQ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IDQ2OTc1MWQuLmI1NjgyZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGFzbS90cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wbHBhcl93cmFwcGVycy5oPgorI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogI2luY2x1ZGUgPGFzbS9mYWR1bXAuaD4KIAogI2luY2x1ZGUgInBzZXJpZXMuaCIKQEAgLTI2Nyw4ICsyNjgsMTMgQEAKIAkJICogb3V0IHRvIHRoZSB1c2VyLCBidXQgYXQgbGVhc3QgdGhpcyB3aWxsIHN0b3AgdXMgZnJvbQogCQkgKiBjb250aW51aW5nIG9uIGZ1cnRoZXIgYW5kIGNyZWF0aW5nIGFuIGV2ZW4gbW9yZQogCQkgKiBkaWZmaWN1bHQgdG8gZGVidWcgc2l0dWF0aW9uLgorCQkgKgorCQkgKiBUaGVyZSBpcyBhIGtub3duIHByb2JsZW0gd2hlbiBrZHVtcCdpbmcsIGlmIGNwdXMgYXJlIG9mZmxpbmUKKwkJICogdGhlIGFib3ZlIGNhbGwgd2lsbCBmYWlsLiBSYXRoZXIgdGhhbiBwYW5pY2tpbmcgYWdhaW4sIGtlZXAKKwkJICogZ29pbmcgYW5kIGhvcGUgdGhlIGtkdW1wIGtlcm5lbCBpcyBhbHNvIGxpdHRsZSBlbmRpYW4sIHdoaWNoCisJCSAqIGl0IHVzdWFsbHkgaXMuCiAJCSAqLwotCQlpZiAocmMpCisJCWlmIChyYyAmJiAha2R1bXBfaW5fcHJvZ3Jlc3MoKSkKIAkJCXBhbmljKCJDb3VsZCBub3QgZW5hYmxlIGJpZyBlbmRpYW4gZXhjZXB0aW9ucyIpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IDViMTUwZjAuLjEzYzZlMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTMzNyw2ICszMzcsNyBAQAogCWFyZ3MudG9rZW4gPSBydGFzX3Rva2VuKCJzZXQtaW5kaWNhdG9yIik7CiAJaWYgKGFyZ3MudG9rZW4gPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpCiAJCXJldHVybjsKKwlhcmdzLnRva2VuID0gY3B1X3RvX2JlMzIoYXJncy50b2tlbik7CiAJYXJncy5uYXJncyA9IGNwdV90b19iZTMyKDMpOwogCWFyZ3MubnJldCA9IGNwdV90b19iZTMyKDEpOwogCWFyZ3MucmV0cyA9ICZhcmdzLmFyZ3NbM107CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jCmluZGV4IDMyMDQwYWMuLmFmYmUwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIHN0cnVjdCBkYmZzX2QyZmNfaGRyIHsKIAl1NjQJbGVuOwkJLyogTGVuZ3RoIG9mIGQyZmMgYnVmZmVyIHdpdGhvdXQgaGVhZGVyICovCiAJdTE2CXZlcnNpb247CS8qIFZlcnNpb24gb2YgaGVhZGVyICovCi0JY2hhcgl0b2RfZXh0WzE2XTsJLyogVE9EIGNsb2NrIGZvciBkMmZjICovCisJY2hhcgl0b2RfZXh0W1NUT1JFX0NMT0NLX0VYVF9TSVpFXTsgLyogVE9EIGNsb2NrIGZvciBkMmZjICovCiAJdTY0CWNvdW50OwkJLyogTnVtYmVyIG9mIFZNIGd1ZXN0cyBpbiBkMmZjIGJ1ZmZlciAqLwogCWNoYXIJcmVzZXJ2ZWRbMzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCmluZGV4IDM3YjkwOTEuLjE2YWEwYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0zNiw3ICszNiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgbm90cmFjZSB1bnNpZ25lZCBsb25nIGFyY2hfbG9jYWxfc2F2ZV9mbGFncyh2b2lkKQogewotCXJldHVybiBfX2FyY2hfbG9jYWxfaXJxX3N0b3NtKDB4MDApOworCXJldHVybiBfX2FyY2hfbG9jYWxfaXJxX3N0bnNtKDB4ZmYpOwogfQogCiBzdGF0aWMgaW5saW5lIG5vdHJhY2UgdW5zaWduZWQgbG9uZyBhcmNoX2xvY2FsX2lycV9zYXZlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aW1leC5oCmluZGV4IDhiZWVlMWMuLjk4ZWIyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aW1leC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC02NywyMCArNjcsMjIgQEAKIAlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7CiB9CiAKLSNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLworI2RlZmluZSBTVE9SRV9DTE9DS19FWFRfU0laRQkxNgkvKiBzdGNrZSB3cml0ZXMgMTYgYnl0ZXMgKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfdG9kX2Nsb2NrX2V4dChjaGFyIGNsa1sxNl0pCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X3RvZF9jbG9ja19leHQoY2hhciAqY2xrKQogewotCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihjbGspXTsgfSBhZGRydHlwZTsKKwl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1tTVE9SRV9DTE9DS19FWFRfU0laRV07IH0gYWRkcnR5cGU7CiAKIAlhc20gdm9sYXRpbGUoInN0Y2tlICUwIiA6ICI9USIgKCooYWRkcnR5cGUgKikgY2xrKSA6IDogImNjIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGdldF90b2RfY2xvY2sodm9pZCkKIHsKLQl1bnNpZ25lZCBjaGFyIGNsa1sxNl07CisJdW5zaWduZWQgY2hhciBjbGtbU1RPUkVfQ0xPQ0tfRVhUX1NJWkVdOworCiAJZ2V0X3RvZF9jbG9ja19leHQoY2xrKTsKIAlyZXR1cm4gKigodW5zaWduZWQgbG9uZyBsb25nICopJmNsa1sxXSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaCBiL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IDJiNDQ2Y2YuLjY3ODc4YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCkBAIC0yODksNyArMjg5LDggQEAKICNkZWZpbmUgX19OUl9icGYJCTM1MQogI2RlZmluZSBfX05SX3MzOTBfcGNpX21taW9fd3JpdGUJMzUyCiAjZGVmaW5lIF9fTlJfczM5MF9wY2lfbW1pb19yZWFkCQkzNTMKLSNkZWZpbmUgTlJfc3lzY2FsbHMgMzU0CisjZGVmaW5lIF9fTlJfZXhlY3ZlYXQJCTM1NAorI2RlZmluZSBOUl9zeXNjYWxscyAzNTUKIAogLyogCiAgKiBUaGVyZSBhcmUgc29tZSBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgbm90IHByZXNlbnQgb24gNjQgYml0LCBzb21lCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYwppbmRleCBiODliNTkxLi40MDlkMTUyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKQEAgLTU1LDE0ICs1NSwxMCBAQAogfQogI2VuZGlmCiAKLS8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jICovCi12b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3ZvaWQgbW9kdWxlX2FyY2hfZnJlZWluZ19pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKLQlpZiAobW9kKSB7Ci0JCXZmcmVlKG1vZC0+YXJjaC5zeW1pbmZvKTsKLQkJbW9kLT5hcmNoLnN5bWluZm8gPSBOVUxMOwotCX0KLQl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKKwl2ZnJlZShtb2QtPmFyY2guc3ltaW5mbyk7CisJbW9kLT5hcmNoLnN5bWluZm8gPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBjaGVja19yZWxhKEVsZl9SZWxhICpyZWxhLCBzdHJ1Y3QgbW9kdWxlICptZSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCBhMjk4NzI0Li45MzllYzQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCkBAIC0zNjIsMyArMzYyLDQgQEAKIFNZU0NBTEwoc3lzX2JwZixzeXNfYnBmLGNvbXBhdF9zeXNfYnBmKQogU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCxzeXNfczM5MF9wY2lfbW1pb193cml0ZSxjb21wYXRfc3lzX3MzOTBfcGNpX21taW9fd3JpdGUpCiBTWVNDQUxMKHN5c19uaV9zeXNjYWxsLHN5c19zMzkwX3BjaV9tbWlvX3JlYWQsY29tcGF0X3N5c19zMzkwX3BjaV9tbWlvX3JlYWQpCitTWVNDQUxMKHN5c19leGVjdmVhdCxzeXNfZXhlY3ZlYXQsY29tcGF0X3N5c19leGVjdmVhdCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXByb2Jlcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC91cHJvYmVzLmMKaW5kZXggZjZiM2NkMC4uY2M3MzI4MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91cHJvYmVzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91cHJvYmVzLmMKQEAgLTQ4LDYgKzQ4LDMwIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgaW50IGNoZWNrX3Blcl9ldmVudCh1bnNpZ25lZCBzaG9ydCBjYXVzZSwgdW5zaWduZWQgbG9uZyBjb250cm9sLAorCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKCEocmVncy0+cHN3Lm1hc2sgJiBQU1dfTUFTS19QRVIpKQorCQlyZXR1cm4gMDsKKwkvKiB1c2VyIHNwYWNlIHNpbmdsZSBzdGVwICovCisJaWYgKGNvbnRyb2wgPT0gMCkKKwkJcmV0dXJuIDE7CisJLyogb3ZlciBpbmRpY2F0aW9uIGZvciBzdG9yYWdlIGFsdGVyYXRpb24gKi8KKwlpZiAoKGNvbnRyb2wgJiAweDIwMjAwMDAwKSAmJiAoY2F1c2UgJiAweDIwMDApKQorCQlyZXR1cm4gMTsKKwlpZiAoY2F1c2UgJiAweDgwMDApIHsKKwkJLyogYWxsIGJyYW5jaGVzICovCisJCWlmICgoY29udHJvbCAmIDB4ODA4MDAwMDApID09IDB4ODAwMDAwMDApCisJCQlyZXR1cm4gMTsKKwkJLyogYnJhbmNoIGludG8gc2VsZWN0ZWQgcmFuZ2UgKi8KKwkJaWYgKCgoY29udHJvbCAmIDB4ODA4MDAwMDApID09IDB4ODA4MDAwMDApICYmCisJCSAgICByZWdzLT5wc3cuYWRkciA+PSBjdXJyZW50LT50aHJlYWQucGVyX3VzZXIuc3RhcnQgJiYKKwkJICAgIHJlZ3MtPnBzdy5hZGRyIDw9IGN1cnJlbnQtPnRocmVhZC5wZXJfdXNlci5lbmQpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIGludCBhcmNoX3Vwcm9iZV9wb3N0X3hvbChzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBmaXh1cCA9IHByb2JlX2dldF9maXh1cF90eXBlKGF1cHJvYmUtPmluc24pOwpAQCAtNzEsOSArOTUsMTMgQEAKIAkJaWYgKHJlZ3MtPnBzdy5hZGRyIC0gdXRhc2stPnhvbF92YWRkciA9PSBpbGVuKQogCQkJcmVncy0+cHN3LmFkZHIgPSB1dGFzay0+dmFkZHIgKyBpbGVuOwogCX0KLQkvKiBJZiBwZXIgdHJhY2luZyB3YXMgYWN0aXZlIGdlbmVyYXRlIHRyYXAgKi8KLQlpZiAocmVncy0+cHN3Lm1hc2sgJiBQU1dfTUFTS19QRVIpCi0JCWRvX3Blcl90cmFwKHJlZ3MpOworCWlmIChjaGVja19wZXJfZXZlbnQoY3VycmVudC0+dGhyZWFkLnBlcl9ldmVudC5jYXVzZSwKKwkJCSAgICBjdXJyZW50LT50aHJlYWQucGVyX3VzZXIuY29udHJvbCwgcmVncykpIHsKKwkJLyogZml4IHBlciBhZGRyZXNzICovCisJCWN1cnJlbnQtPnRocmVhZC5wZXJfZXZlbnQuYWRkcmVzcyA9IHV0YXNrLT52YWRkcjsKKwkJLyogdHJpZ2dlciBwZXIgZXZlbnQgKi8KKwkJc2V0X3B0X3JlZ3NfZmxhZyhyZWdzLCBQSUZfUEVSX1RSQVApOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA2LDYgKzEzNCw3IEBACiAJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1VQUk9CRV9TSU5HTEVTVEVQKTsKIAlyZWdzLT5pbnRfY29kZSA9IGF1cHJvYmUtPnNhdmVkX2ludF9jb2RlOwogCXJlZ3MtPnBzdy5hZGRyID0gY3VycmVudC0+dXRhc2stPnZhZGRyOworCWN1cnJlbnQtPnRocmVhZC5wZXJfZXZlbnQuYWRkcmVzcyA9IGN1cnJlbnQtPnV0YXNrLT52YWRkcjsKIH0KIAogdW5zaWduZWQgbG9uZyBhcmNoX3VyZXRwcm9iZV9oaWphY2tfcmV0dXJuX2FkZHIodW5zaWduZWQgbG9uZyB0cmFtcG9saW5lLApAQCAtMTQ2LDE3ICsxNzUsMjAgQEAKIAlfX3JjOwkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgZW11X3N0b3JlX3JpbChwdHIsIGlucHV0KQkJCVwKKyNkZWZpbmUgZW11X3N0b3JlX3JpbChyZWdzLCBwdHIsIGlucHV0KQkJCVwKICh7CQkJCQkJCVwKIAl1bnNpZ25lZCBpbnQgbWFzayA9IHNpemVvZigqKHB0cikpIC0gMTsJCVwKKwlfX3R5cGVvZl9fKHB0cikgX19wdHIgPSAocHRyKTsJCQlcCiAJaW50IF9fcmMgPSAwOwkJCQkJXAogCQkJCQkJCVwKIAlpZiAoIXRlc3RfZmFjaWxpdHkoMzQpKQkJCQlcCiAJCV9fcmMgPSBFTVVfSUxMRUdBTF9PUDsJCQlcCi0JZWxzZSBpZiAoKHU2NCBfX2ZvcmNlKXB0ciAmIG1hc2spCQlcCisJZWxzZSBpZiAoKHU2NCBfX2ZvcmNlKV9fcHRyICYgbWFzaykJCVwKIAkJX19yYyA9IEVNVV9TUEVDSUZJQ0FUSU9OOwkJXAotCWVsc2UgaWYgKHB1dF91c2VyKCooaW5wdXQpLCBwdHIpKQkJXAorCWVsc2UgaWYgKHB1dF91c2VyKCooaW5wdXQpLCBfX3B0cikpCQlcCiAJCV9fcmMgPSBFTVVfQUREUkVTU0lORzsJCQlcCisJaWYgKF9fcmMgPT0gMCkJCQkJCVwKKwkJc2ltX3N0b3JfZXZlbnQocmVncywgX19wdHIsIG1hc2sgKyAxKTsJXAogCV9fcmM7CQkJCQkJXAogfSkKIApAQCAtMTk4LDYgKzIzMCwyNSBAQAogfTsKIAogLyoKKyAqIElmIHVzZXIgcGVyIHJlZ2lzdGVycyBhcmUgc2V0dXAgdG8gdHJhY2Ugc3RvcmFnZSBhbHRlcmF0aW9ucyBhbmQgYW4KKyAqIGVtdWxhdGVkIHN0b3JlIHRvb2sgcGxhY2Ugb24gYSBmaXR0aW5nIGFkZHJlc3MgYSB1c2VyIHRyYXAgaXMgZ2VuZXJhdGVkLgorICovCitzdGF0aWMgdm9pZCBzaW1fc3Rvcl9ldmVudChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqYWRkciwgaW50IGxlbikKK3sKKwlpZiAoIShyZWdzLT5wc3cubWFzayAmIFBTV19NQVNLX1BFUikpCisJCXJldHVybjsKKwlpZiAoIShjdXJyZW50LT50aHJlYWQucGVyX3VzZXIuY29udHJvbCAmIFBFUl9FVkVOVF9TVE9SRSkpCisJCXJldHVybjsKKwlpZiAoKHZvaWQgKiljdXJyZW50LT50aHJlYWQucGVyX3VzZXIuc3RhcnQgPiAoYWRkciArIGxlbikpCisJCXJldHVybjsKKwlpZiAoKHZvaWQgKiljdXJyZW50LT50aHJlYWQucGVyX3VzZXIuZW5kIDwgYWRkcikKKwkJcmV0dXJuOworCWN1cnJlbnQtPnRocmVhZC5wZXJfZXZlbnQuYWRkcmVzcyA9IHJlZ3MtPnBzdy5hZGRyOworCWN1cnJlbnQtPnRocmVhZC5wZXJfZXZlbnQuY2F1c2UgPSBQRVJfRVZFTlRfU1RPUkUgPj4gMTY7CisJc2V0X3B0X3JlZ3NfZmxhZyhyZWdzLCBQSUZfUEVSX1RSQVApOworfQorCisvKgogICogcGMgcmVsYXRpdmUgaW5zdHJ1Y3Rpb25zIGFyZSBlbXVsYXRlZCwgc2luY2UgcGFyYW1ldGVycyBtYXkgbm90IGJlCiAgKiBhY2Nlc3NpYmxlIGZyb20gdGhlIHhvbCBhcmVhIGR1ZSB0byByYW5nZSBsaW1pdGF0aW9ucy4KICAqLwpAQCAtMjQ5LDEzICszMDAsMTMgQEAKIAkJCXJjID0gZW11X2xvYWRfcmlsKCh1MzIgX191c2VyICopdXB0ciwgJnJ4LT51NjQpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzogLyogc3RocmwgKi8KLQkJCXJjID0gZW11X3N0b3JlX3JpbCgodTE2IF9fdXNlciAqKXVwdHIsICZyeC0+dTE2WzNdKTsKKwkJCXJjID0gZW11X3N0b3JlX3JpbChyZWdzLCAodTE2IF9fdXNlciAqKXVwdHIsICZyeC0+dTE2WzNdKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MGI6IC8qIHN0Z3JsICovCi0JCQlyYyA9IGVtdV9zdG9yZV9yaWwoKHU2NCBfX3VzZXIgKil1cHRyLCAmcngtPnU2NCk7CisJCQlyYyA9IGVtdV9zdG9yZV9yaWwocmVncywgKHU2NCBfX3VzZXIgKil1cHRyLCAmcngtPnU2NCk7CiAJCQlicmVhazsKIAkJY2FzZSAweDBmOiAvKiBzdHJsICovCi0JCQlyYyA9IGVtdV9zdG9yZV9yaWwoKHUzMiBfX3VzZXIgKil1cHRyLCAmcngtPnUzMlsxXSk7CisJCQlyYyA9IGVtdV9zdG9yZV9yaWwocmVncywgKHUzMiBfX3VzZXIgKil1cHRyLCAmcngtPnUzMlsxXSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYwppbmRleCA3ZjAwODlkLi5lMzQxMjJlNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92dGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYwpAQCAtMTI4LDggKzEyOCw2IEBACiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8odHNrKTsKIAl1NjQgdGltZXIsIHN5c3RlbTsKIAotCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKLQogCXRpbWVyID0gUzM5MF9sb3djb3JlLmxhc3RfdXBkYXRlX3RpbWVyOwogCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lciA9IGdldF92dGltZXIoKTsKIAlTMzkwX2xvd2NvcmUuc3lzdGVtX3RpbWVyICs9IHRpbWVyIC0gUzM5MF9sb3djb3JlLmxhc3RfdXBkYXRlX3RpbWVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA4MTE5MzdiLi45MDY1ZDVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYworKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMzc0LDYgKzM3NCwxMiBAQAogCQkJCWRvX25vX2NvbnRleHQocmVncyk7CiAJCQllbHNlCiAJCQkJcGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTsKKwkJfSBlbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpIHsKKwkJCS8qIEtlcm5lbCBtb2RlPyBIYW5kbGUgZXhjZXB0aW9ucyBvciBkaWUgKi8KKwkJCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQkJCWRvX25vX2NvbnRleHQocmVncyk7CisJCQllbHNlCisJCQkJZG9fc2lnc2VndihyZWdzLCBTRUdWX01BUEVSUik7CiAJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJCS8qIEtlcm5lbCBtb2RlPyBIYW5kbGUgZXhjZXB0aW9ucyBvciBkaWUgKi8KIAkJCWlmICghdXNlcl9tb2RlKHJlZ3MpKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggYmU5OTM1Ny4uM2NmOGNjMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0zMjIsMTEgKzMyMiwxMiBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19nbWFwX3NlZ21lbnRfZ2FkZHIodW5zaWduZWQgbG9uZyAqZW50cnkpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIG1hc2s7CiAKIAlvZmZzZXQgPSAodW5zaWduZWQgbG9uZykgZW50cnkgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7CiAJb2Zmc2V0ID0gKG9mZnNldCAmIChQVFJTX1BFUl9QTUQgLSAxKSkgKiBQTURfU0laRTsKLQlwYWdlID0gcG1kX3RvX3BhZ2UoKHBtZF90ICopIGVudHJ5KTsKKwltYXNrID0gfihQVFJTX1BFUl9QTUQgKiBzaXplb2YocG1kX3QpIC0gMSk7CisJcGFnZSA9IHZpcnRfdG9fcGFnZSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykgZW50cnkgJiBtYXNrKSk7CiAJcmV0dXJuIHBhZ2UtPmluZGV4ICsgb2Zmc2V0OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXQuUyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdC5TCmluZGV4IDdlNDVkMTMuLmJhNDRjOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdC5TCisrKyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdC5TCkBAIC0yMiw4ICsyMiw4IEBACiAgKiBza2JfY29weV9iaXRzIHRha2VzIDQgcGFyYW1ldGVyczoKICAqICAgJXIyID0gc2tiIHBvaW50ZXIKICAqICAgJXIzID0gb2Zmc2V0IGludG8gc2tiIGRhdGEKLSAqICAgJXI0ID0gbGVuZ3RoIHRvIGNvcHkKLSAqICAgJXI1ID0gcG9pbnRlciB0byB0ZW1wIGJ1ZmZlcgorICogICAlcjQgPSBwb2ludGVyIHRvIHRlbXAgYnVmZmVyCisgKiAgICVyNSA9IGxlbmd0aCB0byBjb3B5CiAgKi8KICNkZWZpbmUgU0tCREFUQQklcjgKIApAQCAtNDQsOCArNDQsOSBAQAogCiBza19sb2FkX3dvcmRfc2xvdzoKIAlsZ3IJJXI5LCVyMgkJCSMgc2F2ZSAlcjIKLQlsaGkJJXI0LDQJCQkjIDQgYnl0ZXMKLQlsYQklcjUsMTYwKCVyMTUpCQkjIHBvaW50ZXIgdG8gdGVtcCBidWZmZXIKKwlsZ3IJJXIzLCVyMQkJCSMgb2Zmc2V0CisJbGEJJXI0LDE2MCglcjE1KQkJIyBwb2ludGVyIHRvIHRlbXAgYnVmZmVyCisJbGdoaQklcjUsNAkJCSMgNCBieXRlcwogCWJyYXNsCSVyMTQsc2tiX2NvcHlfYml0cwkjIGdldCBkYXRhIGZyb20gc2tiCiAJbAklcjUsMTYwKCVyMTUpCQkjIGxvYWQgcmVzdWx0IGZyb20gdGVtcCBidWZmZXIKIAlsdGdyCSVyMiwlcjIJCQkjIHNldCBjYyB0byAoJXIyICE9IDApCkBAIC02OSw4ICs3MCw5IEBACiAKIHNrX2xvYWRfaGFsZl9zbG93OgogCWxncgklcjksJXIyCQkJIyBzYXZlICVyMgotCWxoaQklcjQsMgkJCSMgMiBieXRlcwotCWxhCSVyNSwxNjIoJXIxNSkJCSMgcG9pbnRlciB0byB0ZW1wIGJ1ZmZlcgorCWxncgklcjMsJXIxCQkJIyBvZmZzZXQKKwlsYQklcjQsMTYyKCVyMTUpCQkjIHBvaW50ZXIgdG8gdGVtcCBidWZmZXIKKwlsZ2hpCSVyNSwyCQkJIyAyIGJ5dGVzCiAJYnJhc2wJJXIxNCxza2JfY29weV9iaXRzCSMgZ2V0IGRhdGEgZnJvbSBza2IKIAl4YwkxNjAoMiwlcjE1KSwxNjAoJXIxNSkKIAlsCSVyNSwxNjAoJXIxNSkJCSMgbG9hZCByZXN1bHQgZnJvbSB0ZW1wIGJ1ZmZlcgpAQCAtOTUsOCArOTcsOSBAQAogCiBza19sb2FkX2J5dGVfc2xvdzoKIAlsZ3IJJXI5LCVyMgkJCSMgc2F2ZSAlcjIKLQlsaGkJJXI0LDEJCQkjIDEgYnl0ZXMKLQlsYQklcjUsMTYzKCVyMTUpCQkjIHBvaW50ZXIgdG8gdGVtcCBidWZmZXIKKwlsZ3IJJXIzLCVyMQkJCSMgb2Zmc2V0CisJbGEJJXI0LDE2MyglcjE1KQkJIyBwb2ludGVyIHRvIHRlbXAgYnVmZmVyCisJbGdoaQklcjUsMQkJCSMgMSBieXRlCiAJYnJhc2wJJXIxNCxza2JfY29weV9iaXRzCSMgZ2V0IGRhdGEgZnJvbSBza2IKIAl4YwkxNjAoMywlcjE1KSwxNjAoJXIxNSkKIAlsCSVyNSwxNjAoJXIxNSkJCSMgbG9hZCByZXN1bHQgZnJvbSB0ZW1wIGJ1ZmZlcgpAQCAtMTA0LDExICsxMDcsMTEgQEAKIAlsZ3IJJXIyLCVyOQkJCSMgcmVzdG9yZSAlcjIKIAlicgklcjgKIAotCS8qIEEgPSAoKih1OCAqKShza2ItPmRhdGErSykgJiAweGYpIDw8IDIgKi8KKwkvKiBYID0gKCoodTggKikoc2tiLT5kYXRhK0spICYgMHhmKSA8PCAyICovCiBFTlRSWShza19sb2FkX2J5dGVfbXNoKQogCWxsZ2ZyCSVyMSwlcjMJCQkjIGV4dGVuZCBvZmZzZXQKIAljbHIJJXIxMSwlcjMJCSMgaGxlbiA8IG9mZnNldCA/Ci0JamxlCXNrX2xvYWRfYnl0ZV9zbG93CisJamxlCXNrX2xvYWRfYnl0ZV9tc2hfc2xvdwogCWxoaQklcjEyLDAKIAlpYwklcjEyLDAoJXIxLCVyMTApCSMgZ2V0IGJ5dGUgZnJvbSBza2IKIAluaWxsCSVyMTIsMHgwZgpAQCAtMTE4LDggKzEyMSw5IEBACiAKIHNrX2xvYWRfYnl0ZV9tc2hfc2xvdzoKIAlsZ3IJJXI5LCVyMgkJCSMgc2F2ZSAlcjIKLQlsaGkJJXI0LDIJCQkjIDIgYnl0ZXMKLQlsYQklcjUsMTYyKCVyMTUpCQkjIHBvaW50ZXIgdG8gdGVtcCBidWZmZXIKKwlsZ3IJJXIzLCVyMQkJCSMgb2Zmc2V0CisJbGEJJXI0LDE2MyglcjE1KQkJIyBwb2ludGVyIHRvIHRlbXAgYnVmZmVyCisJbGdoaQklcjUsMQkJCSMgMSBieXRlCiAJYnJhc2wJJXIxNCxza2JfY29weV9iaXRzCSMgZ2V0IGRhdGEgZnJvbSBza2IKIAl4YwkxNjAoMywlcjE1KSwxNjAoJXIxNSkKIAlsCSVyMTIsMTYwKCVyMTUpCQkjIGxvYWQgcmVzdWx0IGZyb20gdGVtcCBidWZmZXIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGM1MmFjNzcuLmJiZDE5ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMKKysrIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwpAQCAtNDMxLDggKzQzMSw4IEBACiAJCUVNSVQ0X0RJU1AoMHg4ODUwMDAwMCwgSyk7CiAJCWJyZWFrOwogCWNhc2UgQlBGX0FMVSB8IEJQRl9ORUc6IC8qIEEgPSAtQSAqLwotCQkvKiBsbnIgJXI1LCVyNSAqLwotCQlFTUlUMigweDExNTUpOworCQkvKiBsY3IgJXI1LCVyNSAqLworCQlFTUlUMigweDEzNTUpOwogCQlicmVhazsKIAljYXNlIEJQRl9KTVAgfCBCUEZfSkE6IC8qIGlwICs9IEsgKi8KIAkJb2Zmc2V0ID0gYWRkcnNbaSArIEtdICsgaml0LT5zdGFydCAtIGppdC0+cHJnOwpAQCAtNDQ4LDE1ICs0NDgsMTIgQEAKIAkJbWFzayA9IDB4ODAwMDAwOyAvKiBqZSAqLwoga2JyYW5jaDoJLyogRW1pdCBjb21wYXJlIGlmIHRoZSBicmFuY2ggdGFyZ2V0cyBhcmUgZGlmZmVyZW50ICovCiAJCWlmIChmaWx0ZXItPmp0ICE9IGZpbHRlci0+amYpIHsKLQkJCWlmIChLIDw9IDE2MzgzKQotCQkJCS8qIGNoaSAlcjUsPEs+ICovCi0JCQkJRU1JVDRfSU1NKDB4YTc1ZTAwMDAsIEspOwotCQkJZWxzZSBpZiAodGVzdF9mYWNpbGl0eSgyMSkpCisJCQlpZiAodGVzdF9mYWNpbGl0eSgyMSkpCiAJCQkJLyogY2xmaSAlcjUsPEs+ICovCiAJCQkJRU1JVDZfSU1NKDB4YzI1ZjAwMDAsIEspOwogCQkJZWxzZQotCQkJCS8qIGMgJXI1LDxkKEspPiglcjEzKSAqLwotCQkJCUVNSVQ0X0RJU1AoMHg1OTUwZDAwMCwgRU1JVF9DT05TVChLKSk7CisJCQkJLyogY2wgJXI1LDxkKEspPiglcjEzKSAqLworCQkJCUVNSVQ0X0RJU1AoMHg1NTUwZDAwMCwgRU1JVF9DT05TVChLKSk7CiAJCX0KIGJyYW5jaDoJCWlmIChmaWx0ZXItPmp0ID09IGZpbHRlci0+amYpIHsKIAkJCWlmIChmaWx0ZXItPmp0ID09IDApCkBAIC01MDIsOCArNDk5LDggQEAKIHhicmFuY2g6CS8qIEVtaXQgY29tcGFyZSBpZiB0aGUgYnJhbmNoIHRhcmdldHMgYXJlIGRpZmZlcmVudCAqLwogCQlpZiAoZmlsdGVyLT5qdCAhPSBmaWx0ZXItPmpmKSB7CiAJCQlqaXQtPnNlZW4gfD0gU0VFTl9YUkVHOwotCQkJLyogY3IgJXI1LCVyMTIgKi8KLQkJCUVNSVQyKDB4MTk1Yyk7CisJCQkvKiBjbHIgJXI1LCVyMTIgKi8KKwkJCUVNSVQyKDB4MTU1Yyk7CiAJCX0KIAkJZ290byBicmFuY2g7CiAJY2FzZSBCUEZfSk1QIHwgQlBGX0pTRVQgfCBCUEZfWDogLyogaXAgKz0gKEEgJiBYKSA/IGp0IDogamYgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvbW0vZmF1bHQuYyBiL2FyY2gvc2NvcmUvbW0vZmF1bHQuYwppbmRleCA1MjIzODk4My4uNjg2MGJlYiAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc2NvcmUvbW0vZmF1bHQuYwpAQCAtMTE0LDYgKzExNCw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2ZhdWx0LmMgYi9hcmNoL3NoL21tL2ZhdWx0LmMKaW5kZXggNTQxZGM2MS4uYTU4ZmVjOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc2gvbW0vZmF1bHQuYwpAQCAtMzUzLDYgKzM1Myw4IEBACiAJfSBlbHNlIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZG9fc2lnYnVzKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQliYWRfYXJlYShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKIAkJZWxzZQogCQkJQlVHKCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwppbmRleCBiMzYzNjVmNC4uOWNlNWFmZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKQEAgLTYzOSw3ICs2MzksMTAgQEAKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5lbmQsCiAJCQkJICAgICAgICh1bnNpZ25lZCBpbnQpci0+ZmxhZ3MpOwogCi0JCQlwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKTsKKwkJCWlmIChwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQlwY2lfY2xhaW1fYnJpZGdlX3Jlc291cmNlKGRldiwgaSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwppbmRleCA5MDhlOGMxLi43MGQ4MTcxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCkBAIC0yNDksNiArMjQ5LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYwppbmRleCAxOGZjZDcxLi40Nzk4MjMyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jCkBAIC00NDYsNiArNDQ2LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggZjMzZTdjNy4uNzkzMWVlZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wLmMKKysrIGIvYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTc3Niw3ICs3NzYsNyBAQAogCQkJCWlmICh1bmxpa2VseShwcm9nbGVuICsgaWxlbiA+IG9sZHByb2dsZW4pKSB7CiAJCQkJCXByX2VycigiYnBiX2ppdF9jb21waWxlIGZhdGFsIGVycm9yXG4iKTsKIAkJCQkJa2ZyZWUoYWRkcnMpOwotCQkJCQltb2R1bGVfZnJlZShOVUxMLCBpbWFnZSk7CisJCQkJCW1vZHVsZV9tZW1mcmVlKGltYWdlKTsKIAkJCQkJcmV0dXJuOwogCQkJCX0KIAkJCQltZW1jcHkoaW1hZ2UgKyBwcm9nbGVuLCB0ZW1wLCBpbGVuKTsKQEAgLTgyMiw3ICs4MjIsNyBAQAogdm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpmcCkKIHsKIAlpZiAoZnAtPmppdGVkKQotCQltb2R1bGVfZnJlZShOVUxMLCBmcC0+YnBmX2Z1bmMpOworCQltb2R1bGVfbWVtZnJlZShmcC0+YnBmX2Z1bmMpOwogCiAJYnBmX3Byb2dfdW5sb2NrX2ZyZWUoZnApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvdGlsZS9rZXJuZWwvbW9kdWxlLmMKaW5kZXggOTY0NDdjOS4uMjMwNTA4NCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3RpbGUva2VybmVsL21vZHVsZS5jCkBAIC03NCw3ICs3NCw3IEBACiAKIAogLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfYWxsb2MgKi8KLXZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKQordm9pZCBtb2R1bGVfbWVtZnJlZSh2b2lkICptb2R1bGVfcmVnaW9uKQogewogCXZmcmVlKG1vZHVsZV9yZWdpb24pOwogCkBAIC04Myw3ICs4Myw3IEBACiAJCSAgICAgMCwgMCwgMCwgTlVMTCwgTlVMTCwgMCk7CiAKIAkvKgotCSAqIEZJWE1FOiBJZiBtb2R1bGVfcmVnaW9uID09IG1vZC0+bW9kdWxlX2luaXQsIHRyaW0gZXhjZXB0aW9uCisJICogRklYTUU6IEFkZCBtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQgdG8gdHJpbSBleGNlcHRpb24KIAkgKiB0YWJsZSBlbnRyaWVzLgogCSAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL2ZhdWx0LmMgYi9hcmNoL3RpbGUvbW0vZmF1bHQuYwppbmRleCA1NjVlMjVhLi4wZjYxYTczIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbW0vZmF1bHQuYworKysgYi9hcmNoL3RpbGUvbW0vZmF1bHQuYwpAQCAtNDQyLDYgKzQ0Miw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcuY29tbW9uIGIvYXJjaC91bS9LY29uZmlnLmNvbW1vbgppbmRleCA4N2JjODY4Li5kMTk1YTg3IDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcuY29tbW9uCisrKyBiL2FyY2gvdW0vS2NvbmZpZy5jb21tb24KQEAgLTMsNiArMyw3IEBACiAJZGVmYXVsdCB5CiAJc2VsZWN0IEhBVkVfQVJDSF9BVURJVFNZU0NBTEwKIAlzZWxlY3QgSEFWRV9VSUQxNgorCXNlbGVjdCBIQVZFX0ZVVEVYX0NNUFhDSEcgaWYgRlVURVgKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVwogCXNlbGVjdCBHRU5FUklDX0NQVV9ERVZJQ0VTCiAJc2VsZWN0IEdFTkVSSUNfSU8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RyYXAuYyBiL2FyY2gvdW0va2VybmVsL3RyYXAuYwppbmRleCA1Njc4YzM1Li4yMDk2MTczIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90cmFwLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdHJhcC5jCkBAIC04MCw2ICs4MCw4IEBACiAJCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7CiAJCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQkJfSBlbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpIHsKKwkJCQlnb3RvIG91dDsKIAkJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJCQllcnIgPSAtRUFDQ0VTOwogCQkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggYmEzOTdiZC4uMGRjOWQwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC04NTcsNyArODU3LDcgQEAKIAogY29uZmlnIFg4Nl9VUF9BUElDCiAJYm9vbCAiTG9jYWwgQVBJQyBzdXBwb3J0IG9uIHVuaXByb2Nlc3NvcnMiCi0JZGVwZW5kcyBvbiBYODZfMzIgJiYgIVNNUCAmJiAhWDg2XzMyX05PTl9TVEFOREFSRCAmJiAhUENJX01TSQorCWRlcGVuZHMgb24gWDg2XzMyICYmICFTTVAgJiYgIVg4Nl8zMl9OT05fU1RBTkRBUkQKIAktLS1oZWxwLS0tCiAJICBBIGxvY2FsIEFQSUMgKEFkdmFuY2VkIFByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcikgaXMgYW4KIAkgIGludGVncmF0ZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW4gdGhlIENQVS4gSWYgeW91IGhhdmUgYSBzaW5nbGUtQ1BVCkBAIC04NjgsNiArODY4LDEwIEBACiAJICBwZXJmb3JtYW5jZSBjb3VudGVycyksIGFuZCB0aGUgTk1JIHdhdGNoZG9nIHdoaWNoIGRldGVjdHMgaGFyZAogCSAgbG9ja3Vwcy4KIAorY29uZmlnIFg4Nl9VUF9BUElDX01TSQorCWRlZl9ib29sIHkKKwlzZWxlY3QgWDg2X1VQX0FQSUMgaWYgWDg2XzMyICYmICFTTVAgJiYgIVg4Nl8zMl9OT05fU1RBTkRBUkQgJiYgUENJX01TSQorCiBjb25maWcgWDg2X1VQX0lPQVBJQwogCWJvb2wgIklPLUFQSUMgc3VwcG9ydCBvbiB1bmlwcm9jZXNzb3JzIgogCWRlcGVuZHMgb24gWDg2X1VQX0FQSUMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCmluZGV4IDViMDE2ZTIuLjNkYjA3ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQpAQCAtNTEsNiArNTEsNyBAQAogJChvYmopL2NwdXN0ci5oOiAkKG9iaikvbWtjcHVzdHIgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxjcHVzdHIpCiBlbmRpZgorY2xlYW4tZmlsZXMgKz0gY3B1c3RyLmgKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGQ5OTkzOTguLmFkNzU0YjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTkwLDcgKzkwLDcgQEAKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFo0KSAJOj0gbHo0CiAKIFJVTl9TSVpFID0gJChzaGVsbCAkKE9CSkRVTVApIC1oIHZtbGludXggfCBcCi0JICAgICBwZXJsICQoc3JjdHJlZSkvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5wbCkKKwkgICAgICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUuc2gpCiBxdWlldF9jbWRfbWtwaWdneSA9IE1LUElHR1kgJEAKICAgICAgIGNtZF9ta3BpZ2d5ID0gJChvYmopL21rcGlnZ3kgJDwgJChSVU5fU0laRSkgPiAkQCB8fCAoIHJtIC1mICRAIDsgZmFsc2UgKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCBkY2MxYzUzLi5hOTUwODY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTM3Myw2ICszNzMsOCBAQAogCQkJCSAgdW5zaWduZWQgbG9uZyBvdXRwdXRfbGVuLAogCQkJCSAgdW5zaWduZWQgbG9uZyBydW5fc2l6ZSkKIHsKKwl1bnNpZ25lZCBjaGFyICpvdXRwdXRfb3JpZyA9IG91dHB1dDsKKwogCXJlYWxfbW9kZSA9IHJtb2RlOwogCiAJc2FuaXRpemVfYm9vdF9wYXJhbXMocmVhbF9tb2RlKTsKQEAgLTQyMSw3ICs0MjMsMTIgQEAKIAlkZWJ1Z19wdXRzdHIoIlxuRGVjb21wcmVzc2luZyBMaW51eC4uLiAiKTsKIAlkZWNvbXByZXNzKGlucHV0X2RhdGEsIGlucHV0X2xlbiwgTlVMTCwgTlVMTCwgb3V0cHV0LCBOVUxMLCBlcnJvcik7CiAJcGFyc2VfZWxmKG91dHB1dCk7Ci0JaGFuZGxlX3JlbG9jYXRpb25zKG91dHB1dCwgb3V0cHV0X2xlbik7CisJLyoKKwkgKiAzMi1iaXQgYWx3YXlzIHBlcmZvcm1zIHJlbG9jYXRpb25zLiA2NC1iaXQgcmVsb2NhdGlvbnMgYXJlIG9ubHkKKwkgKiBuZWVkZWQgaWYga0FTTFIgaGFzIGNob3NlbiBhIGRpZmZlcmVudCBsb2FkIGFkZHJlc3MuCisJICovCisJaWYgKCFJU19FTkFCTEVEKENPTkZJR19YODZfNjQpIHx8IG91dHB1dCAhPSBvdXRwdXRfb3JpZykKKwkJaGFuZGxlX3JlbG9jYXRpb25zKG91dHB1dCwgb3V0cHV0X2xlbik7CiAJZGVidWdfcHV0c3RyKCJkb25lLlxuQm9vdGluZyB0aGUga2VybmVsLlxuIik7CiAJcmV0dXJuIG91dHB1dDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZSBiL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQppbmRleCBmZDBmODQ4Li41YTRhMDg5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCkBAIC0yNiw3ICsyNiw2IEBACiAKIG9iai0kKENPTkZJR19DUllQVE9fQ1JDMzJDX0lOVEVMKSArPSBjcmMzMmMtaW50ZWwubwogb2JqLSQoQ09ORklHX0NSWVBUT19TSEExX1NTU0UzKSArPSBzaGExLXNzc2UzLm8KLW9iai0kKENPTkZJR19DUllQVE9fU0hBMV9NQikgKz0gc2hhLW1iLwogb2JqLSQoQ09ORklHX0NSWVBUT19DUkMzMl9QQ0xNVUwpICs9IGNyYzMyLXBjbG11bC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NIQTI1Nl9TU1NFMykgKz0gc2hhMjU2LXNzc2UzLm8KIG9iai0kKENPTkZJR19DUllQVE9fU0hBNTEyX1NTU0UzKSArPSBzaGE1MTItc3NzZTMubwpAQCAtNDYsNiArNDUsNyBAQAogaWZlcSAoJChhdngyX3N1cHBvcnRlZCkseWVzKQogCW9iai0kKENPTkZJR19DUllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYMl9YODZfNjQpICs9IGNhbWVsbGlhLWFlc25pLWF2eDIubwogCW9iai0kKENPTkZJR19DUllQVE9fU0VSUEVOVF9BVlgyX1g4Nl82NCkgKz0gc2VycGVudC1hdngyLm8KKwlvYmotJChDT05GSUdfQ1JZUFRPX1NIQTFfTUIpICs9IHNoYS1tYi8KIGVuZGlmCiAKIGFlcy1pNTg2LXkgOj0gYWVzLWk1ODYtYXNtXzMyLm8gYWVzX2dsdWUubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc19jdHJieThfYXZ4LXg4Nl82NC5TIGIvYXJjaC94ODYvY3J5cHRvL2Flc19jdHJieThfYXZ4LXg4Nl82NC5TCmluZGV4IDJkZjJhMDIuLmE5MTZjNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXNfY3RyYnk4X2F2eC14ODZfNjQuUworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzX2N0cmJ5OF9hdngteDg2XzY0LlMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCiAJLmlmIChrbGVuID09IEtFWV8xMjgpCiAJCS5pZiAobG9hZF9rZXlzKQotCQkJdm1vdmRxYQkzKjE2KHBfa2V5cyksIHhrZXlBCisJCQl2bW92ZHFhCTMqMTYocF9rZXlzKSwgeGtleTQKIAkJLmVuZGlmCiAJLmVsc2UKIAkJdm1vdmRxYQkzKjE2KHBfa2V5cyksIHhrZXlBCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlhZGQJJCgxNipieSksIHBfaW4KIAogCS5pZiAoa2xlbiA9PSBLRVlfMTI4KQotCQl2bW92ZHFhCTQqMTYocF9rZXlzKSwgeGtleTQKKwkJdm1vdmRxYQk0KjE2KHBfa2V5cyksIHhrZXlCCiAJLmVsc2UKIAkJLmlmIChsb2FkX2tleXMpCiAJCQl2bW92ZHFhCTQqMTYocF9rZXlzKSwgeGtleTQKQEAgLTIzNCw3ICsyMzQsMTIgQEAKIAkuc2V0IGksIDAKIAkucmVwdCBieQogCQljbHViIFhEQVRBLCBpCi0JCXZhZXNlbmMJeGtleUEsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCQkvKiBrZXkgMyAqLworCQkvKiBrZXkgMyAqLworCQkuaWYgKGtsZW4gPT0gS0VZXzEyOCkKKwkJCXZhZXNlbmMJeGtleTQsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCisJCS5lbHNlCisJCQl2YWVzZW5jCXhrZXlBLCB2YXJfeGRhdGEsIHZhcl94ZGF0YQorCQkuZW5kaWYKIAkJLnNldCBpLCAoaSArMSkKIAkuZW5kcgogCkBAIC0yNDMsMTMgKzI0OCwxOCBAQAogCS5zZXQgaSwgMAogCS5yZXB0IGJ5CiAJCWNsdWIgWERBVEEsIGkKLQkJdmFlc2VuYwl4a2V5NCwgdmFyX3hkYXRhLCB2YXJfeGRhdGEJCS8qIGtleSA0ICovCisJCS8qIGtleSA0ICovCisJCS5pZiAoa2xlbiA9PSBLRVlfMTI4KQorCQkJdmFlc2VuYwl4a2V5QiwgdmFyX3hkYXRhLCB2YXJfeGRhdGEKKwkJLmVsc2UKKwkJCXZhZXNlbmMJeGtleTQsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCisJCS5lbmRpZgogCQkuc2V0IGksIChpICsxKQogCS5lbmRyCiAKIAkuaWYgKGtsZW4gPT0gS0VZXzEyOCkKIAkJLmlmIChsb2FkX2tleXMpCi0JCQl2bW92ZHFhCTYqMTYocF9rZXlzKSwgeGtleUIKKwkJCXZtb3ZkcWEJNioxNihwX2tleXMpLCB4a2V5OAogCQkuZW5kaWYKIAkuZWxzZQogCQl2bW92ZHFhCTYqMTYocF9rZXlzKSwgeGtleUIKQEAgLTI2NywxMiArMjc3LDE3IEBACiAJLnNldCBpLCAwCiAJLnJlcHQgYnkKIAkJY2x1YiBYREFUQSwgaQotCQl2YWVzZW5jCXhrZXlCLCB2YXJfeGRhdGEsIHZhcl94ZGF0YQkJLyoga2V5IDYgKi8KKwkJLyoga2V5IDYgKi8KKwkJLmlmIChrbGVuID09IEtFWV8xMjgpCisJCQl2YWVzZW5jCXhrZXk4LCB2YXJfeGRhdGEsIHZhcl94ZGF0YQorCQkuZWxzZQorCQkJdmFlc2VuYwl4a2V5QiwgdmFyX3hkYXRhLCB2YXJfeGRhdGEKKwkJLmVuZGlmCiAJCS5zZXQgaSwgKGkgKzEpCiAJLmVuZHIKIAogCS5pZiAoa2xlbiA9PSBLRVlfMTI4KQotCQl2bW92ZHFhCTgqMTYocF9rZXlzKSwgeGtleTgKKwkJdm1vdmRxYQk4KjE2KHBfa2V5cyksIHhrZXlCCiAJLmVsc2UKIAkJLmlmIChsb2FkX2tleXMpCiAJCQl2bW92ZHFhCTgqMTYocF9rZXlzKSwgeGtleTgKQEAgLTI4OCw3ICszMDMsNyBAQAogCiAJLmlmIChrbGVuID09IEtFWV8xMjgpCiAJCS5pZiAobG9hZF9rZXlzKQotCQkJdm1vdmRxYQk5KjE2KHBfa2V5cyksIHhrZXlBCisJCQl2bW92ZHFhCTkqMTYocF9rZXlzKSwgeGtleTEyCiAJCS5lbmRpZgogCS5lbHNlCiAJCXZtb3ZkcWEJOSoxNihwX2tleXMpLCB4a2V5QQpAQCAtMjk3LDcgKzMxMiwxMiBAQAogCS5zZXQgaSwgMAogCS5yZXB0IGJ5CiAJCWNsdWIgWERBVEEsIGkKLQkJdmFlc2VuYwl4a2V5OCwgdmFyX3hkYXRhLCB2YXJfeGRhdGEJCS8qIGtleSA4ICovCisJCS8qIGtleSA4ICovCisJCS5pZiAoa2xlbiA9PSBLRVlfMTI4KQorCQkJdmFlc2VuYwl4a2V5QiwgdmFyX3hkYXRhLCB2YXJfeGRhdGEKKwkJLmVsc2UKKwkJCXZhZXNlbmMJeGtleTgsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCisJCS5lbmRpZgogCQkuc2V0IGksIChpICsxKQogCS5lbmRyCiAKQEAgLTMwNiw3ICszMjYsMTIgQEAKIAkuc2V0IGksIDAKIAkucmVwdCBieQogCQljbHViIFhEQVRBLCBpCi0JCXZhZXNlbmMJeGtleUEsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCQkvKiBrZXkgOSAqLworCQkvKiBrZXkgOSAqLworCQkuaWYgKGtsZW4gPT0gS0VZXzEyOCkKKwkJCXZhZXNlbmMJeGtleTEyLCB2YXJfeGRhdGEsIHZhcl94ZGF0YQorCQkuZWxzZQorCQkJdmFlc2VuYwl4a2V5QSwgdmFyX3hkYXRhLCB2YXJfeGRhdGEKKwkJLmVuZGlmCiAJCS5zZXQgaSwgKGkgKzEpCiAJLmVuZHIKIApAQCAtNDEyLDcgKzQzNyw2IEBACiAvKiBtYWluIGJvZHkgb2YgYWVzIGN0ciBsb2FkICovCiAKIC5tYWNybyBkb19hZXNfY3RybWFpbiBrZXlfbGVuCi0KIAljbXAJJDE2LCBudW1fYnl0ZXMKIAlqYgkuTGRvX3JldHVybjJca2V5X2xlbgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vc2hhLW1iL3NoYTFfbWIuYyBiL2FyY2gveDg2L2NyeXB0by9zaGEtbWIvc2hhMV9tYi5jCmluZGV4IGEyMjVhNWNhLi5mZDlmNmIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vc2hhLW1iL3NoYTFfbWIuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vc2hhLW1iL3NoYTFfbWIuYwpAQCAtOTMxLDQgKzkzMSw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNIQTEgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBtdWx0aSBidWZmZXIgYWNjZWxlcmF0ZWQiKTsKIAotTU9EVUxFX0FMSUFTKCJzaGExIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzaGExIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKaW5kZXggMGFiNGY5Zi4uM2E0NTY2OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtNTAsNiArNTAsNyBAQAogCiBleHRlcm4gaW50ICgqX19hY3BpX3JlZ2lzdGVyX2dzaSkoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgZ3NpLAogCQkJCSAgaW50IHRyaWdnZXIsIGludCBwb2xhcml0eSk7CitleHRlcm4gdm9pZCAoKl9fYWNwaV91bnJlZ2lzdGVyX2dzaSkodTMyIGdzaSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2FjcGkodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAppbmRleCA1MGQwMzNhLi5hOTRiODJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCkBAIC0yNTEsNyArMjUxLDggQEAKIAkJZ2R0W0dEVF9FTlRSWV9UTFNfTUlOICsgaV0gPSB0LT50bHNfYXJyYXlbaV07CiB9CiAKLSNkZWZpbmUgX0xEVF9lbXB0eShpbmZvKQkJCQlcCisvKiBUaGlzIGludGVudGlvbmFsbHkgaWdub3JlcyBsbSwgc2luY2UgMzItYml0IGFwcHMgZG9uJ3QgaGF2ZSB0aGF0IGZpZWxkLiAqLworI2RlZmluZSBMRFRfZW1wdHkoaW5mbykJCQkJCVwKIAkoKGluZm8pLT5iYXNlX2FkZHIJCT09IDAJJiYJXAogCSAoaW5mbyktPmxpbWl0CQkJPT0gMAkmJglcCiAJIChpbmZvKS0+Y29udGVudHMJCT09IDAJJiYJXApAQCAtMjYxLDExICsyNjIsMTggQEAKIAkgKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJglcCiAJIChpbmZvKS0+dXNlYWJsZQkJPT0gMCkKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgTERUX2VtcHR5KGluZm8pIChfTERUX2VtcHR5KGluZm8pICYmICgoaW5mbyktPmxtID09IDApKQotI2Vsc2UKLSNkZWZpbmUgTERUX2VtcHR5KGluZm8pIChfTERUX2VtcHR5KGluZm8pKQotI2VuZGlmCisvKiBMb3RzIG9mIHByb2dyYW1zIGV4cGVjdCBhbiBhbGwtemVybyB1c2VyX2Rlc2MgdG8gbWVhbiAibm8gc2VnbWVudCBhdCBhbGwiLiAqLworc3RhdGljIGlubGluZSBib29sIExEVF96ZXJvKGNvbnN0IHN0cnVjdCB1c2VyX2Rlc2MgKmluZm8pCit7CisJcmV0dXJuIChpbmZvLT5iYXNlX2FkZHIJCT09IDAgJiYKKwkJaW5mby0+bGltaXQJCT09IDAgJiYKKwkJaW5mby0+Y29udGVudHMJCT09IDAgJiYKKwkJaW5mby0+cmVhZF9leGVjX29ubHkJPT0gMCAmJgorCQlpbmZvLT5zZWdfMzJiaXQJCT09IDAgJiYKKwkJaW5mby0+bGltaXRfaW5fcGFnZXMJPT0gMCAmJgorCQlpbmZvLT5zZWdfbm90X3ByZXNlbnQJPT0gMCAmJgorCQlpbmZvLT51c2VhYmxlCQk9PSAwKTsKK30KIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX0xEVCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggNDAyNjlhMi4uNGI3NWQ1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xMzAsNyArMTMwLDI1IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQltcHhfbm90aWZ5X3VubWFwKG1tLCB2bWEsIHN0YXJ0LCBlbmQpOworCS8qCisJICogbXB4X25vdGlmeV91bm1hcCgpIGdvZXMgYW5kIHJlYWRzIGEgcmFyZWx5LWhvdAorCSAqIGNhY2hlbGluZSBpbiB0aGUgbW1fc3RydWN0LiAgVGhhdCBjYW4gYmUgZXhwZW5zaXZlCisJICogZW5vdWdoIHRvIGJlIHNlZW4gaW4gcHJvZmlsZXMuCisJICoKKwkgKiBUaGUgbXB4X25vdGlmeV91bm1hcCgpIGNhbGwgYW5kIGl0cyBjb250ZW50cyBoYXZlIGJlZW4KKwkgKiBvYnNlcnZlZCB0byBhZmZlY3QgbXVubWFwKCkgcGVyZm9ybWFuY2Ugb24gaGFyZHdhcmUKKwkgKiB3aGVyZSBNUFggaXMgbm90IHByZXNlbnQuCisJICoKKwkgKiBUaGUgdW5saWtlbHkoKSBvcHRpbWl6ZXMgZm9yIHRoZSBmYXN0IGNhc2U6IG5vIE1QWAorCSAqIGluIHRoZSBDUFUsIG9yIG5vIE1QWCB1c2UgaW4gdGhlIHByb2Nlc3MuICBFdmVuIGlmCisJICogd2UgZ2V0IHRoaXMgd3JvbmcgKGluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IE1QWAorCSAqIGlzIHdpZGVseSBlbmFibGVkIG9uIHNvbWUgc3lzdGVtKSB0aGUgb3ZlcmhlYWQgb2YKKwkgKiBNUFggaXRzZWxmIChyZWFkaW5nIGJvdW5kcyB0YWJsZXMpIGlzIGV4cGVjdGVkIHRvCisJICogb3ZlcndoZWxtIHRoZSBvdmVyaGVhZCBvZiBnZXR0aW5nIHRoaXMgdW5saWtlbHkoKQorCSAqIGNvbnNpc3RlbnRseSB3cm9uZy4KKwkgKi8KKwlpZiAodW5saWtlbHkoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9NUFgpKSkKKwkJbXB4X25vdGlmeV91bm1hcChtbSwgdm1hLCBzdGFydCwgZW5kKTsKIH0KIAogI2VuZGlmIC8qIF9BU01fWDg2X01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZndG9kLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z3RvZC5oCmluZGV4IGU3ZTk2ODIuLmY1NTZjNDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZndG9kLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmd0b2QuaApAQCAtODAsOSArODAsMTEgQEAKIAogCS8qCiAJICogTG9hZCBwZXIgQ1BVIGRhdGEgZnJvbSBHRFQuICBMU0wgaXMgZmFzdGVyIHRoYW4gUkRUU0NQIGFuZAotCSAqIHdvcmtzIG9uIGFsbCBDUFVzLgorCSAqIHdvcmtzIG9uIGFsbCBDUFVzLiAgVGhpcyBpcyB2b2xhdGlsZSBzbyB0aGF0IGl0IG9yZGVycworCSAqIGNvcnJlY3RseSB3cnQgYmFycmllcigpIGFuZCB0byBrZWVwIGdjYyBmcm9tIGNsZXZlcmx5CisJICogaG9pc3RpbmcgaXQgb3V0IG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLgogCSAqLwotCWFzbSgibHNsICUxLCUwIiA6ICI9ciIgKHApIDogInIiIChfX1BFUl9DUFVfU0VHKSk7CisJYXNtIHZvbGF0aWxlICgibHNsICUxLCUwIiA6ICI9ciIgKHApIDogInIiIChfX1BFUl9DUFVfU0VHKSk7CiAKIAlyZXR1cm4gcDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCA0NDMzYTRiLi5iOWUzMGRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC02MTEsMjAgKzYxMSwyMCBAQAogCiBpbnQgYWNwaV9nc2lfdG9faXJxKHUzMiBnc2ksIHVuc2lnbmVkIGludCAqaXJxcCkKIHsKLQlpbnQgaXJxOworCWludCByYywgaXJxLCB0cmlnZ2VyLCBwb2xhcml0eTsKIAotCWlmIChhY3BpX2lycV9tb2RlbCA9PSBBQ1BJX0lSUV9NT0RFTF9QSUMpIHsKLQkJKmlycXAgPSBnc2k7Ci0JfSBlbHNlIHsKLQkJbXV0ZXhfbG9jaygmYWNwaV9pb2FwaWNfbG9jayk7Ci0JCWlycSA9IG1wX21hcF9nc2lfdG9faXJxKGdzaSwKLQkJCQkJSU9BUElDX01BUF9BTExPQyB8IElPQVBJQ19NQVBfQ0hFQ0spOwotCQltdXRleF91bmxvY2soJmFjcGlfaW9hcGljX2xvY2spOwotCQlpZiAoaXJxIDwgMCkKLQkJCXJldHVybiAtMTsKLQkJKmlycXAgPSBpcnE7CisJcmMgPSBhY3BpX2dldF9vdmVycmlkZV9pcnEoZ3NpLCAmdHJpZ2dlciwgJnBvbGFyaXR5KTsKKwlpZiAocmMgPT0gMCkgeworCQl0cmlnZ2VyID0gdHJpZ2dlciA/IEFDUElfTEVWRUxfU0VOU0lUSVZFIDogQUNQSV9FREdFX1NFTlNJVElWRTsKKwkJcG9sYXJpdHkgPSBwb2xhcml0eSA/IEFDUElfQUNUSVZFX0xPVyA6IEFDUElfQUNUSVZFX0hJR0g7CisJCWlycSA9IGFjcGlfcmVnaXN0ZXJfZ3NpKE5VTEwsIGdzaSwgdHJpZ2dlciwgcG9sYXJpdHkpOworCQlpZiAoaXJxID49IDApIHsKKwkJCSppcnFwID0gaXJxOworCQkJcmV0dXJuIDA7CisJCX0KIAl9Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX2dzaV90b19pcnEpOwogCkBAIC03NTAsMTMgKzc1MCwxMyBAQAogfQogCiAvKiB3cmFwcGVyIHRvIHNpbGVuY2Ugc2VjdGlvbiBtaXNtYXRjaCB3YXJuaW5nICovCi1pbnQgX19yZWYgYWNwaV9tYXBfbHNhcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHBoeXNpZCwgaW50ICpwY3B1KQoraW50IF9fcmVmIGFjcGlfbWFwX2NwdShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBwaHlzaWQsIGludCAqcGNwdSkKIHsKIAlyZXR1cm4gX2FjcGlfbWFwX2xzYXBpYyhoYW5kbGUsIHBoeXNpZCwgcGNwdSk7CiB9Ci1FWFBPUlRfU1lNQk9MKGFjcGlfbWFwX2xzYXBpYyk7CitFWFBPUlRfU1lNQk9MKGFjcGlfbWFwX2NwdSk7CiAKLWludCBhY3BpX3VubWFwX2xzYXBpYyhpbnQgY3B1KQoraW50IGFjcGlfdW5tYXBfY3B1KGludCBjcHUpCiB7CiAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQogCXNldF9hcGljaWRfdG9fbm9kZShwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpLCBOVU1BX05PX05PREUpOwpAQCAtNzY4LDggKzc2OCw3IEBACiAKIAlyZXR1cm4gKDApOwogfQotCi1FWFBPUlRfU1lNQk9MKGFjcGlfdW5tYXBfbHNhcGljKTsKK0VYUE9SVF9TWU1CT0woYWNwaV91bm1hcF9jcHUpOwogI2VuZGlmCQkJCS8qIENPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVICovCiAKIGludCBhY3BpX3JlZ2lzdGVyX2lvYXBpYyhhY3BpX2hhbmRsZSBoYW5kbGUsIHU2NCBwaHlzX2FkZHIsIHUzMiBnc2lfYmFzZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IGUyN2I0OWQuLjgwMDkxYWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtNjYsMyArNjYsNCBAQAogJChvYmopL2NhcGZsYWdzLmM6ICQoY3B1ZmVhdHVyZSkgJChzcmMpL21rY2FwZmxhZ3Muc2ggRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxta2NhcGZsYWdzKQogZW5kaWYKK2NsZWFuLWZpbGVzICs9IGNhcGZsYWdzLmMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWtjYXBmbGFncy5zaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWtjYXBmbGFncy5zaAppbmRleCBlMmIyMmRmLi4zNmQ5OWEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21rY2FwZmxhZ3Muc2gKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9ta2NhcGZsYWdzLnNoCkBAIC0yOCw3ICsyOCw3IEBACiAJCSMgSWYgdGhlIC8qIGNvbW1lbnQgKi8gc3RhcnRzIHdpdGggYSBxdW90ZSBzdHJpbmcsIGdyYWIgdGhhdC4KIAkJVkFMVUU9IiQoZWNobyAiJGkiIHwgc2VkIC1uICdzQC4qL1wqICpcKCJbXiJdKiJcKS4qXCovQFwxQHAnKSIKIAkJWyAteiAiJFZBTFVFIiBdICYmIFZBTFVFPSJcIiROQU1FXCIiCi0JCVsgIiRWQUxVRSIgPT0gJyIiJyBdICYmIGNvbnRpbnVlCisJCVsgIiRWQUxVRSIgPSAnIiInIF0gJiYgY29udGludWUKIAogCQkjIE5hbWUgaXMgdXBwZXJjYXNlLCBWQUxVRSBpcyBhbGwgbG93ZXJjYXNlCiAJCVZBTFVFPSIkKGVjaG8gIiRWQUxVRSIgfCB0ciBBLVogYS16KSIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYwppbmRleCBhNDUwMzczLi45MzkxNTVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jCkBAIC0xMDcsNiArMTA3LDcgQEAKIAkucmF0aW5nCQk9IDQwMCwgLyogdXNlIHRoaXMgd2hlbiBydW5uaW5nIG9uIEh5cGVydiovCiAJLnJlYWQJCT0gcmVhZF9odl9jbG9jaywKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXNfaHlwZXJ2X2luaXRfcGxhdGZvcm0odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKaW5kZXggOTQ0YmYwMS4uNDk4YjZkOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKQEAgLTI0MzEsNiArMjQzMSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSA1NTogLyogMjJubSBBdG9tICJTaWx2ZXJtb250IiAgICAgICAgICAgICAgICAqLworCWNhc2UgNzY6IC8qIDE0bm0gQXRvbSAiQWlybW9udCIgICAgICAgICAgICAgICAgICAgKi8KIAljYXNlIDc3OiAvKiAyMm5tIEF0b20gIlNpbHZlcm1vbnQgQXZvdG9uL1JhbmdlbHkiICovCiAJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIHNsbV9od19jYWNoZV9ldmVudF9pZHMsCiAJCQlzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfZHMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9kcy5jCmluZGV4IDNjODk1ZDQuLjA3Mzk4MzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9kcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9kcy5jCkBAIC01NjgsOCArNTY4LDggQEAKIH07CiAKIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3NsbV9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7Ci0JLyogVU9QU19SRVRJUkVELkFMTCwgaW52PTEsIGNtYXNrPTE2IChjeWNsZXM6cCkuICovCi0JSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweDEwODAwMWMyLCAweGYpLAorCS8qIElOU1RfUkVUSVJFRC5BTllfUCwgaW52PTEsIGNtYXNrPTE2IChjeWNsZXM6cCkuICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweDEwODAwMGMwLCAweDEpLAogCS8qIEFsbG93IGFsbCBldmVudHMgYXMgUEVCUyB3aXRoIG5vIGZsYWdzICovCiAJSU5URUxfQUxMX0VWRU5UX0NPTlNUUkFJTlQoMCwgMHgxKSwKIAlFVkVOVF9DT05TVFJBSU5UX0VORApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3JhcGwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9yYXBsLmMKaW5kZXggNjczZjkzMC4uYzRiYjhiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3JhcGwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfcmFwbC5jCkBAIC0xMDMsNiArMTAzLDEzIEBACiAKICNkZWZpbmUgUkFQTF9DTlRSX1dJRFRIIDMyIC8qIDMyLWJpdCByYXBsIGNvdW50ZXJzICovCiAKKyNkZWZpbmUgUkFQTF9FVkVOVF9BVFRSX1NUUihfbmFtZSwgdiwgc3RyKQkJCQlcCitzdGF0aWMgc3RydWN0IHBlcmZfcG11X2V2ZW50c19hdHRyIGV2ZW50X2F0dHJfIyN2ID0gewkJCVwKKwkuYXR0cgkJPSBfX0FUVFIoX25hbWUsIDA0NDQsIHJhcGxfc3lzZnNfc2hvdywgTlVMTCksCVwKKwkuaWQJCT0gMCwJCQkJCQlcCisJLmV2ZW50X3N0cgk9IHN0ciwJCQkJCQlcCit9OworCiBzdHJ1Y3QgcmFwbF9wbXUgewogCXNwaW5sb2NrX3QJIGxvY2s7CiAJaW50CQkgaHdfdW5pdDsgIC8qIDEvMl5od191bml0IEpvdWxlICovCkBAIC0xMzUsNyArMTQyLDcgQEAKIAkgKiBvciB1c2UgbGRleHAoY291bnQsIC0zMikuCiAJICogV2F0dHMgPSBKb3VsZXMvVGltZSBkZWx0YQogCSAqLwotCXJldHVybiB2IDw8ICgzMiAtIF9fdGhpc19jcHVfcmVhZChyYXBsX3BtdS0+aHdfdW5pdCkpOworCXJldHVybiB2IDw8ICgzMiAtIF9fdGhpc19jcHVfcmVhZChyYXBsX3BtdSktPmh3X3VuaXQpOwogfQogCiBzdGF0aWMgdTY0IHJhcGxfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKQEAgLTM3OSwyMyArMzg2LDM2IEBACiAJLmF0dHJzID0gcmFwbF9wbXVfYXR0cnMsCiB9OwogCi1FVkVOVF9BVFRSX1NUUihlbmVyZ3ktY29yZXMsIHJhcGxfY29yZXMsICJldmVudD0weDAxIik7Ci1FVkVOVF9BVFRSX1NUUihlbmVyZ3ktcGtnICAsICAgcmFwbF9wa2csICJldmVudD0weDAyIik7Ci1FVkVOVF9BVFRSX1NUUihlbmVyZ3ktcmFtICAsICAgcmFwbF9yYW0sICJldmVudD0weDAzIik7Ci1FVkVOVF9BVFRSX1NUUihlbmVyZ3ktZ3B1ICAsICAgcmFwbF9ncHUsICJldmVudD0weDA0Iik7CitzdGF0aWMgc3NpemVfdCByYXBsX3N5c2ZzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IHBlcmZfcG11X2V2ZW50c19hdHRyICpwbXVfYXR0ciA9IFwKKwkJY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwZXJmX3BtdV9ldmVudHNfYXR0ciwgYXR0cik7CiAKLUVWRU5UX0FUVFJfU1RSKGVuZXJneS1jb3Jlcy51bml0LCByYXBsX2NvcmVzX3VuaXQsICJKb3VsZXMiKTsKLUVWRU5UX0FUVFJfU1RSKGVuZXJneS1wa2cudW5pdCAgLCAgIHJhcGxfcGtnX3VuaXQsICJKb3VsZXMiKTsKLUVWRU5UX0FUVFJfU1RSKGVuZXJneS1yYW0udW5pdCAgLCAgIHJhcGxfcmFtX3VuaXQsICJKb3VsZXMiKTsKLUVWRU5UX0FUVFJfU1RSKGVuZXJneS1ncHUudW5pdCAgLCAgIHJhcGxfZ3B1X3VuaXQsICJKb3VsZXMiKTsKKwlpZiAocG11X2F0dHItPmV2ZW50X3N0cikKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzIiwgcG11X2F0dHItPmV2ZW50X3N0cik7CisKKwlyZXR1cm4gMDsKK30KKworUkFQTF9FVkVOVF9BVFRSX1NUUihlbmVyZ3ktY29yZXMsIHJhcGxfY29yZXMsICJldmVudD0weDAxIik7CitSQVBMX0VWRU5UX0FUVFJfU1RSKGVuZXJneS1wa2cgICwgICByYXBsX3BrZywgImV2ZW50PTB4MDIiKTsKK1JBUExfRVZFTlRfQVRUUl9TVFIoZW5lcmd5LXJhbSAgLCAgIHJhcGxfcmFtLCAiZXZlbnQ9MHgwMyIpOworUkFQTF9FVkVOVF9BVFRSX1NUUihlbmVyZ3ktZ3B1ICAsICAgcmFwbF9ncHUsICJldmVudD0weDA0Iik7CisKK1JBUExfRVZFTlRfQVRUUl9TVFIoZW5lcmd5LWNvcmVzLnVuaXQsIHJhcGxfY29yZXNfdW5pdCwgIkpvdWxlcyIpOworUkFQTF9FVkVOVF9BVFRSX1NUUihlbmVyZ3ktcGtnLnVuaXQgICwgICByYXBsX3BrZ191bml0LCAiSm91bGVzIik7CitSQVBMX0VWRU5UX0FUVFJfU1RSKGVuZXJneS1yYW0udW5pdCAgLCAgIHJhcGxfcmFtX3VuaXQsICJKb3VsZXMiKTsKK1JBUExfRVZFTlRfQVRUUl9TVFIoZW5lcmd5LWdwdS51bml0ICAsICAgcmFwbF9ncHVfdW5pdCwgIkpvdWxlcyIpOwogCiAvKgogICogd2UgY29tcHV0ZSBpbiAwLjIzIG5KIGluY3JlbWVudHMgcmVnYXJkbGVzcyBvZiBNU1IKICAqLwotRVZFTlRfQVRUUl9TVFIoZW5lcmd5LWNvcmVzLnNjYWxlLCByYXBsX2NvcmVzX3NjYWxlLCAiMi4zMjgzMDY0MzY1Mzg2OTYyODkwNjI1ZS0xMCIpOwotRVZFTlRfQVRUUl9TVFIoZW5lcmd5LXBrZy5zY2FsZSwgICAgIHJhcGxfcGtnX3NjYWxlLCAiMi4zMjgzMDY0MzY1Mzg2OTYyODkwNjI1ZS0xMCIpOwotRVZFTlRfQVRUUl9TVFIoZW5lcmd5LXJhbS5zY2FsZSwgICAgIHJhcGxfcmFtX3NjYWxlLCAiMi4zMjgzMDY0MzY1Mzg2OTYyODkwNjI1ZS0xMCIpOwotRVZFTlRfQVRUUl9TVFIoZW5lcmd5LWdwdS5zY2FsZSwgICAgIHJhcGxfZ3B1X3NjYWxlLCAiMi4zMjgzMDY0MzY1Mzg2OTYyODkwNjI1ZS0xMCIpOworUkFQTF9FVkVOVF9BVFRSX1NUUihlbmVyZ3ktY29yZXMuc2NhbGUsIHJhcGxfY29yZXNfc2NhbGUsICIyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwIik7CitSQVBMX0VWRU5UX0FUVFJfU1RSKGVuZXJneS1wa2cuc2NhbGUsICAgICByYXBsX3BrZ19zY2FsZSwgIjIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAiKTsKK1JBUExfRVZFTlRfQVRUUl9TVFIoZW5lcmd5LXJhbS5zY2FsZSwgICAgIHJhcGxfcmFtX3NjYWxlLCAiMi4zMjgzMDY0MzY1Mzg2OTYyODkwNjI1ZS0xMCIpOworUkFQTF9FVkVOVF9BVFRSX1NUUihlbmVyZ3ktZ3B1LnNjYWxlLCAgICAgcmFwbF9ncHVfc2NhbGUsICIyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwIik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyYXBsX2V2ZW50c19zcnZfYXR0cltdID0gewogCUVWRU5UX1BUUihyYXBsX2NvcmVzKSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmUuYwppbmRleCAxMGI4ZDNlLi5jNjM1YjhiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5jCkBAIC04NDAsNyArODQwLDYgQEAKIAlib3gtPnBoeXNfaWQgPSBwaHlzX2lkOwogCWJveC0+cGNpX2RldiA9IHBkZXY7CiAJYm94LT5wbXUgPSBwbXU7Ci0JdW5jb3JlX2JveF9pbml0KGJveCk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGJveCk7CiAKIAlyYXdfc3Bpbl9sb2NrKCZ1bmNvcmVfYm94X2xvY2spOwpAQCAtMTAwNCwxMCArMTAwMyw4IEBACiAJCQlwbXUgPSAmdHlwZS0+cG11c1tqXTsKIAkJCWJveCA9ICpwZXJfY3B1X3B0cihwbXUtPmJveCwgY3B1KTsKIAkJCS8qIGNhbGxlZCBieSB1bmNvcmVfY3B1X2luaXQ/ICovCi0JCQlpZiAoYm94ICYmIGJveC0+cGh5c19pZCA+PSAwKSB7Ci0JCQkJdW5jb3JlX2JveF9pbml0KGJveCk7CisJCQlpZiAoYm94ICYmIGJveC0+cGh5c19pZCA+PSAwKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCiAJCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGspIHsKIAkJCQlleGlzdCA9ICpwZXJfY3B1X3B0cihwbXUtPmJveCwgayk7CkBAIC0xMDIzLDEwICsxMDIwLDggQEAKIAkJCQl9CiAJCQl9CiAKLQkJCWlmIChib3gpIHsKKwkJCWlmIChib3gpCiAJCQkJYm94LT5waHlzX2lkID0gcGh5c19pZDsKLQkJCQl1bmNvcmVfYm94X2luaXQoYm94KTsKLQkJCX0KIAkJfQogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmUuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmUuaAppbmRleCAxOGViNzhiLi42YzhjMWU3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5oCkBAIC0xNyw3ICsxNyw3IEBACiAjZGVmaW5lIFVOQ09SRV9QQ0lfREVWX1RZUEUoZGF0YSkJKChkYXRhID4+IDgpICYgMHhmZikKICNkZWZpbmUgVU5DT1JFX1BDSV9ERVZfSURYKGRhdGEpCShkYXRhICYgMHhmZikKICNkZWZpbmUgVU5DT1JFX0VYVFJBX1BDSV9ERVYJCTB4ZmYKLSNkZWZpbmUgVU5DT1JFX0VYVFJBX1BDSV9ERVZfTUFYCTIKKyNkZWZpbmUgVU5DT1JFX0VYVFJBX1BDSV9ERVZfTUFYCTMKIAogLyogc3VwcG9ydCB1cCB0byA4IHNvY2tldHMgKi8KICNkZWZpbmUgVU5DT1JFX1NPQ0tFVF9NQVgJCTgKQEAgLTI1Nyw2ICsyNTcsMTQgQEAKIAlyZXR1cm4gYm94LT5wbXUtPnR5cGUtPm51bV9jb3VudGVyczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVuY29yZV9ib3hfaW5pdChzdHJ1Y3QgaW50ZWxfdW5jb3JlX2JveCAqYm94KQoreworCWlmICghdGVzdF9hbmRfc2V0X2JpdChVTkNPUkVfQk9YX0ZMQUdfSU5JVElBVEVELCAmYm94LT5mbGFncykpIHsKKwkJaWYgKGJveC0+cG11LT50eXBlLT5vcHMtPmluaXRfYm94KQorCQkJYm94LT5wbXUtPnR5cGUtPm9wcy0+aW5pdF9ib3goYm94KTsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmNvcmVfZGlzYWJsZV9ib3goc3RydWN0IGludGVsX3VuY29yZV9ib3ggKmJveCkKIHsKIAlpZiAoYm94LT5wbXUtPnR5cGUtPm9wcy0+ZGlzYWJsZV9ib3gpCkBAIC0yNjUsNiArMjczLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHVuY29yZV9lbmFibGVfYm94KHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gpCiB7CisJdW5jb3JlX2JveF9pbml0KGJveCk7CisKIAlpZiAoYm94LT5wbXUtPnR5cGUtPm9wcy0+ZW5hYmxlX2JveCkKIAkJYm94LT5wbXUtPnR5cGUtPm9wcy0+ZW5hYmxlX2JveChib3gpOwogfQpAQCAtMjg3LDE0ICsyOTcsNiBAQAogCXJldHVybiBib3gtPnBtdS0+dHlwZS0+b3BzLT5yZWFkX2NvdW50ZXIoYm94LCBldmVudCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmNvcmVfYm94X2luaXQoc3RydWN0IGludGVsX3VuY29yZV9ib3ggKmJveCkKLXsKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVU5DT1JFX0JPWF9GTEFHX0lOSVRJQVRFRCwgJmJveC0+ZmxhZ3MpKSB7Ci0JCWlmIChib3gtPnBtdS0+dHlwZS0+b3BzLT5pbml0X2JveCkKLQkJCWJveC0+cG11LT50eXBlLT5vcHMtPmluaXRfYm94KGJveCk7Ci0JfQotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgdW5jb3JlX2JveF9pc19mYWtlKHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gpCiB7CiAJcmV0dXJuIChib3gtPnBoeXNfaWQgPCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYwppbmRleCA3NDViMTU4Li4yMWFmNjE0OWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlX3NuYmVwLmMKQEAgLTg5MSw2ICs4OTEsNyBAQAogZW51bSB7CiAJU05CRVBfUENJX1FQSV9QT1JUMF9GSUxURVIsCiAJU05CRVBfUENJX1FQSV9QT1JUMV9GSUxURVIsCisJSFNXRVBfUENJX1BDVV8zLAogfTsKIAogc3RhdGljIGludCBzbmJlcF9xcGlfaHdfY29uZmlnKHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKQEAgLTIwMjYsNiArMjAyNywxNyBAQAogewogCWlmIChoc3dlcF91bmNvcmVfY2JveC5udW1fYm94ZXMgPiBib290X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMpCiAJCWhzd2VwX3VuY29yZV9jYm94Lm51bV9ib3hlcyA9IGJvb3RfY3B1X2RhdGEueDg2X21heF9jb3JlczsKKworCS8qIERldGVjdCA2LTggY29yZSBzeXN0ZW1zIHdpdGggb25seSB0d28gU0JPWGVzICovCisJaWYgKHVuY29yZV9leHRyYV9wY2lfZGV2WzBdW0hTV0VQX1BDSV9QQ1VfM10pIHsKKwkJdTMyIGNhcGlkNDsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodW5jb3JlX2V4dHJhX3BjaV9kZXZbMF1bSFNXRVBfUENJX1BDVV8zXSwKKwkJCQkgICAgICAweDk0LCAmY2FwaWQ0KTsKKwkJaWYgKCgoY2FwaWQ0ID4+IDYpICYgMHgzKSA9PSAwKQorCQkJaHN3ZXBfdW5jb3JlX3Nib3gubnVtX2JveGVzID0gMjsKKwl9CisKIAl1bmNvcmVfbXNyX3VuY29yZXMgPSBoc3dlcF9tc3JfdW5jb3JlczsKIH0KIApAQCAtMjI4Nyw2ICsyMjk5LDExIEBACiAJCS5kcml2ZXJfZGF0YSA9IFVOQ09SRV9QQ0lfREVWX0RBVEEoVU5DT1JFX0VYVFJBX1BDSV9ERVYsCiAJCQkJCQkgICBTTkJFUF9QQ0lfUVBJX1BPUlQxX0ZJTFRFUiksCiAJfSwKKwl7IC8qIFBDVS4zIChmb3IgQ2FwYWJpbGl0eSByZWdpc3RlcnMpICovCisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyZmMwKSwKKwkJLmRyaXZlcl9kYXRhID0gVU5DT1JFX1BDSV9ERVZfREFUQShVTkNPUkVfRVhUUkFfUENJX0RFViwKKwkJCQkJCSAgIEhTV0VQX1BDSV9QQ1VfMyksCisJfSwKIAl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggMjE0MjM3Ni4uOGI3YjBhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtNjc0LDcgKzY3NCw3IEBACiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdHJhbXBfZnJlZSh2b2lkICp0cmFtcCkKIHsKLQltb2R1bGVfZnJlZShOVUxMLCB0cmFtcCk7CisJbW9kdWxlX21lbWZyZWUodHJhbXApOwogfQogI2Vsc2UKIC8qIFRyYW1wb2xpbmVzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaWYgbW9kdWxlcyBhcmUgc3VwcG9ydGVkICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKaW5kZXggNjMwN2EwZi4uNzA1ZWY4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJc2VxX3B1dHMocCwgIiAgTWFjaGluZSBjaGVjayBwb2xsc1xuIik7CiAjZW5kaWYKICNpZiBJU19FTkFCTEVEKENPTkZJR19IWVBFUlYpIHx8IGRlZmluZWQoQ09ORklHX1hFTikKLQlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUSFIiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJIWVAiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfaHZfY2FsbGJhY2tfY291bnQpOwogCXNlcV9wdXRzKHAsICIgIEh5cGVydmlzb3IgY2FsbGJhY2sgaW50ZXJydXB0c1xuIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmMKaW5kZXggZjdlM2NkNS4uOThmNjU0ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMvY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2NvcmUuYwpAQCAtMTAyMCw2ICsxMDIwLDE1IEBACiAJcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfSUY7CiAJdHJhY2VfaGFyZGlycXNfb2ZmKCk7CiAJcmVncy0+aXAgPSAodW5zaWduZWQgbG9uZykoanAtPmVudHJ5KTsKKworCS8qCisJICoganByb2JlcyB1c2UganByb2JlX3JldHVybigpIHdoaWNoIHNraXBzIHRoZSBub3JtYWwgcmV0dXJuCisJICogcGF0aCBvZiB0aGUgZnVuY3Rpb24sIGFuZCB0aGlzIG1lc3NlcyB1cCB0aGUgYWNjb3VudGluZyBvZiB0aGUKKwkgKiBmdW5jdGlvbiBncmFwaCB0cmFjZXIgdG8gZ2V0IG1lc3NlZCB1cC4KKwkgKgorCSAqIFBhdXNlIGZ1bmN0aW9uIGdyYXBoIHRyYWNpbmcgd2hpbGUgcGVyZm9ybWluZyB0aGUganByb2JlIGZ1bmN0aW9uLgorCSAqLworCXBhdXNlX2dyYXBoX3RyYWNpbmcoKTsKIAlyZXR1cm4gMTsKIH0KIE5PS1BST0JFX1NZTUJPTChzZXRqbXBfcHJlX2hhbmRsZXIpOwpAQCAtMTA0OCwyNCArMTA1NywyNSBAQAogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOwogCXU4ICphZGRyID0gKHU4ICopIChyZWdzLT5pcCAtIDEpOwogCXN0cnVjdCBqcHJvYmUgKmpwID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBqcHJvYmUsIGtwKTsKKwl2b2lkICpzYXZlZF9zcCA9IGtjYi0+anByb2JlX3NhdmVkX3NwOwogCiAJaWYgKChhZGRyID4gKHU4ICopIGpwcm9iZV9yZXR1cm4pICYmCiAJICAgIChhZGRyIDwgKHU4ICopIGpwcm9iZV9yZXR1cm5fZW5kKSkgewotCQlpZiAoc3RhY2tfYWRkcihyZWdzKSAhPSBrY2ItPmpwcm9iZV9zYXZlZF9zcCkgeworCQlpZiAoc3RhY2tfYWRkcihyZWdzKSAhPSBzYXZlZF9zcCkgewogCQkJc3RydWN0IHB0X3JlZ3MgKnNhdmVkX3JlZ3MgPSAma2NiLT5qcHJvYmVfc2F2ZWRfcmVnczsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICJjdXJyZW50IHNwICVwIGRvZXMgbm90IG1hdGNoIHNhdmVkIHNwICVwXG4iLAotCQkJICAgICAgIHN0YWNrX2FkZHIocmVncyksIGtjYi0+anByb2JlX3NhdmVkX3NwKTsKKwkJCSAgICAgICBzdGFja19hZGRyKHJlZ3MpLCBzYXZlZF9zcCk7CiAJCQlwcmludGsoS0VSTl9FUlIgIlNhdmVkIHJlZ2lzdGVycyBmb3IganByb2JlICVwXG4iLCBqcCk7CiAJCQlzaG93X3JlZ3Moc2F2ZWRfcmVncyk7CiAJCQlwcmludGsoS0VSTl9FUlIgIkN1cnJlbnQgcmVnaXN0ZXJzXG4iKTsKIAkJCXNob3dfcmVncyhyZWdzKTsKIAkJCUJVRygpOwogCQl9CisJCS8qIEl0J3MgT0sgdG8gc3RhcnQgZnVuY3Rpb24gZ3JhcGggdHJhY2luZyBhZ2FpbiAqLworCQl1bnBhdXNlX2dyYXBoX3RyYWNpbmcoKTsKIAkJKnJlZ3MgPSBrY2ItPmpwcm9iZV9zYXZlZF9yZWdzOwotCQltZW1jcHkoKGtwcm9iZV9vcGNvZGVfdCAqKShrY2ItPmpwcm9iZV9zYXZlZF9zcCksCi0JCSAgICAgICBrY2ItPmpwcm9iZXNfc3RhY2ssCi0JCSAgICAgICBNSU5fU1RBQ0tfU0laRShrY2ItPmpwcm9iZV9zYXZlZF9zcCkpOworCQltZW1jcHkoc2F2ZWRfc3AsIGtjYi0+anByb2Jlc19zdGFjaywgTUlOX1NUQUNLX1NJWkUoc2F2ZWRfc3ApKTsKIAkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGVyZl9yZWdzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGVyZl9yZWdzLmMKaW5kZXggZTMwOWNjNS4uNzgxODYxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BlcmZfcmVncy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wZXJmX3JlZ3MuYwpAQCAtNzgsNiArNzgsMTQgQEAKIHsKIAlyZXR1cm4gUEVSRl9TQU1QTEVfUkVHU19BQklfMzI7CiB9CisKK3ZvaWQgcGVyZl9nZXRfcmVnc191c2VyKHN0cnVjdCBwZXJmX3JlZ3MgKnJlZ3NfdXNlciwKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3NfdXNlcl9jb3B5KQoreworCXJlZ3NfdXNlci0+cmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKKwlyZWdzX3VzZXItPmFiaSA9IHBlcmZfcmVnX2FiaShjdXJyZW50KTsKK30KICNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KICNkZWZpbmUgUkVHX05PU1VQUE9SVCAoKDFVTEwgPDwgUEVSRl9SRUdfWDg2X0RTKSB8IFwKIAkJICAgICAgICgxVUxMIDw8IFBFUkZfUkVHX1g4Nl9FUykgfCBcCkBAIC0xMDIsNCArMTEwLDg2IEBACiAJZWxzZQogCQlyZXR1cm4gUEVSRl9TQU1QTEVfUkVHU19BQklfNjQ7CiB9CisKK3ZvaWQgcGVyZl9nZXRfcmVnc191c2VyKHN0cnVjdCBwZXJmX3JlZ3MgKnJlZ3NfdXNlciwKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3NfdXNlcl9jb3B5KQoreworCXN0cnVjdCBwdF9yZWdzICp1c2VyX3JlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIGluIGFuIE5NSSB0aGF0IGludGVycnVwdGVkIHRhc2tfcHRfcmVncyBzZXR1cCwgdGhlbgorCSAqIHdlIGNhbid0IHNhbXBsZSB1c2VyIHJlZ3MgYXQgYWxsLiAgVGhpcyBjaGVjayBpc24ndCByZWFsbHkKKwkgKiBzdWZmaWNpZW50LCB0aG91Z2gsIGFzIHdlIGNvdWxkIGJlIGluIGFuIE5NSSBpbnNpZGUgYW4gaW50ZXJydXB0CisJICogdGhhdCBoYXBwZW5lZCBkdXJpbmcgdGFza19wdF9yZWdzIHNldHVwLgorCSAqLworCWlmIChyZWdzLT5zcCA+ICh1bnNpZ25lZCBsb25nKSZ1c2VyX3JlZ3MtPnIxMSAmJgorCSAgICByZWdzLT5zcCA8PSAodW5zaWduZWQgbG9uZykodXNlcl9yZWdzICsgMSkpIHsKKwkJcmVnc191c2VyLT5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FOworCQlyZWdzX3VzZXItPnJlZ3MgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBSSVAsIGZsYWdzLCBhbmQgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcmUgdXN1YWxseSBzYXZlZC4KKwkgKiBvcmlnX2F4IGlzIHByb2JhYmx5IG9rYXksIHRvby4KKwkgKi8KKwlyZWdzX3VzZXJfY29weS0+aXAgPSB1c2VyX3JlZ3MtPmlwOworCXJlZ3NfdXNlcl9jb3B5LT5jeCA9IHVzZXJfcmVncy0+Y3g7CisJcmVnc191c2VyX2NvcHktPmR4ID0gdXNlcl9yZWdzLT5keDsKKwlyZWdzX3VzZXJfY29weS0+c2kgPSB1c2VyX3JlZ3MtPnNpOworCXJlZ3NfdXNlcl9jb3B5LT5kaSA9IHVzZXJfcmVncy0+ZGk7CisJcmVnc191c2VyX2NvcHktPnI4ID0gdXNlcl9yZWdzLT5yODsKKwlyZWdzX3VzZXJfY29weS0+cjkgPSB1c2VyX3JlZ3MtPnI5OworCXJlZ3NfdXNlcl9jb3B5LT5yMTAgPSB1c2VyX3JlZ3MtPnIxMDsKKwlyZWdzX3VzZXJfY29weS0+cjExID0gdXNlcl9yZWdzLT5yMTE7CisJcmVnc191c2VyX2NvcHktPm9yaWdfYXggPSB1c2VyX3JlZ3MtPm9yaWdfYXg7CisJcmVnc191c2VyX2NvcHktPmZsYWdzID0gdXNlcl9yZWdzLT5mbGFnczsKKworCS8qCisJICogRG9uJ3QgZXZlbiB0cnkgdG8gcmVwb3J0IHRoZSAicmVzdCIgcmVncy4KKwkgKi8KKwlyZWdzX3VzZXJfY29weS0+YnggPSAtMTsKKwlyZWdzX3VzZXJfY29weS0+YnAgPSAtMTsKKwlyZWdzX3VzZXJfY29weS0+cjEyID0gLTE7CisJcmVnc191c2VyX2NvcHktPnIxMyA9IC0xOworCXJlZ3NfdXNlcl9jb3B5LT5yMTQgPSAtMTsKKwlyZWdzX3VzZXJfY29weS0+cjE1ID0gLTE7CisKKwkvKgorCSAqIEZvciB0aGlzIHRvIGJlIGF0IGFsbCB1c2VmdWwsIHdlIG5lZWQgYSByZWFzb25hYmxlIGd1ZXNzIGZvcgorCSAqIHNwIGFuZCB0aGUgQUJJLiAgQmUgY2FyZWZ1bDogd2UncmUgaW4gTk1JIGNvbnRleHQsIGFuZCB3ZSdyZQorCSAqIGNvbnNpZGVyaW5nIGN1cnJlbnQgdG8gYmUgdGhlIGN1cnJlbnQgdGFzaywgc28gd2Ugc2hvdWxkCisJICogYmUgY2FyZWZ1bCBub3QgdG8gbG9vayBhdCBhbnkgb3RoZXIgcGVyY3B1IHZhcmlhYmxlcyB0aGF0IG1pZ2h0CisJICogY2hhbmdlIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLgorCSAqLworCWlmIChJU19FTkFCTEVEKENPTkZJR19JQTMyX0VNVUxBVElPTikgJiYKKwkgICAgdGFza190aHJlYWRfaW5mbyhjdXJyZW50KS0+c3RhdHVzICYgVFNfQ09NUEFUKSB7CisJCS8qIEVhc3kgY2FzZTogd2UncmUgaW4gYSBjb21wYXQgc3lzY2FsbC4gKi8KKwkJcmVnc191c2VyLT5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV8zMjsKKwkJcmVnc191c2VyX2NvcHktPnNwID0gdXNlcl9yZWdzLT5zcDsKKwkJcmVnc191c2VyX2NvcHktPmNzID0gdXNlcl9yZWdzLT5jczsKKwkJcmVnc191c2VyX2NvcHktPnNzID0gdXNlcl9yZWdzLT5zczsKKwl9IGVsc2UgaWYgKHVzZXJfcmVncy0+b3JpZ19heCAhPSAtMSkgeworCQkvKgorCQkgKiBXZSdyZSBwcm9iYWJseSBpbiBhIDY0LWJpdCBzeXNjYWxsLgorCQkgKiBXYXJuaW5nOiB0aGlzIGNvZGUgaXMgc2V2ZXJlbHkgcmFjeS4gIEF0IGxlYXN0IGl0J3MgYmV0dGVyCisJCSAqIHRoYW4ganVzdCBibGluZGx5IGNvcHlpbmcgdXNlcl9yZWdzLgorCQkgKi8KKwkJcmVnc191c2VyLT5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV82NDsKKwkJcmVnc191c2VyX2NvcHktPnNwID0gdGhpc19jcHVfcmVhZChvbGRfcnNwKTsKKwkJcmVnc191c2VyX2NvcHktPmNzID0gX19VU0VSX0NTOworCQlyZWdzX3VzZXJfY29weS0+c3MgPSBfX1VTRVJfRFM7CisJCXJlZ3NfdXNlcl9jb3B5LT5jeCA9IC0xOyAgLyogdXN1YWxseSBjb250YWlucyBnYXJiYWdlICovCisJfSBlbHNlIHsKKwkJLyogV2UncmUgcHJvYmFibHkgaW4gYW4gaW50ZXJydXB0IG9yIGV4Y2VwdGlvbi4gKi8KKwkJcmVnc191c2VyLT5hYmkgPSB1c2VyXzY0Yml0X21vZGUodXNlcl9yZWdzKSA/CisJCQlQRVJGX1NBTVBMRV9SRUdTX0FCSV82NCA6IFBFUkZfU0FNUExFX1JFR1NfQUJJXzMyOworCQlyZWdzX3VzZXJfY29weS0+c3AgPSB1c2VyX3JlZ3MtPnNwOworCQlyZWdzX3VzZXJfY29weS0+Y3MgPSB1c2VyX3JlZ3MtPmNzOworCQlyZWdzX3VzZXJfY29weS0+c3MgPSB1c2VyX3JlZ3MtPnNzOworCX0KKworCXJlZ3NfdXNlci0+cmVncyA9IHJlZ3NfdXNlcl9jb3B5OworfQogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90bHMuYyBiL2FyY2gveDg2L2tlcm5lbC90bHMuYwppbmRleCA0ZTk0MmYzLi43ZmM1ZTg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGxzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Rscy5jCkBAIC0yOSw3ICsyOSwyOCBAQAogCiBzdGF0aWMgYm9vbCB0bHNfZGVzY19va2F5KGNvbnN0IHN0cnVjdCB1c2VyX2Rlc2MgKmluZm8pCiB7Ci0JaWYgKExEVF9lbXB0eShpbmZvKSkKKwkvKgorCSAqIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMgKGkuZS4gbm8gb25lIGV2ZXIgZG9jdW1lbnRlZCBob3cgYW55CisJICogb2YgdGhlIHNlZ21lbnRhdGlvbiBBUElzIHdvcmspLCB1c2VyIHByb2dyYW1zIGNhbiBhbmQgZG8KKwkgKiBhc3N1bWUgdGhhdCBhIHN0cnVjdCB1c2VyX2Rlc2MgdGhhdCdzIGFsbCB6ZXJvcyBleGNlcHQgZm9yCisJICogZW50cnlfbnVtYmVyIG1lYW5zICJubyBzZWdtZW50IGF0IGFsbCIuICBUaGlzIG5ldmVyIGFjdHVhbGx5CisJICogd29ya2VkLiAgSW4gZmFjdCwgdXAgdG8gTGludXggMy4xOSwgYSBzdHJ1Y3QgdXNlcl9kZXNjIGxpa2UKKwkgKiB0aGlzIHdvdWxkIGNyZWF0ZSBhIDE2LWJpdCByZWFkLXdyaXRlIHNlZ21lbnQgd2l0aCBiYXNlIGFuZAorCSAqIGxpbWl0IGJvdGggZXF1YWwgdG8gemVyby4KKwkgKgorCSAqIFRoYXQgd2FzIGNsb3NlIGVub3VnaCB0byAibm8gc2VnbWVudCBhdCBhbGwiIHVudGlsIHdlCisJICogaGFyZGVuZWQgdGhpcyBmdW5jdGlvbiB0byBkaXNhbGxvdyAxNi1iaXQgVExTIHNlZ21lbnRzLiAgRml4CisJICogaXQgdXAgYnkgaW50ZXJwcmV0aW5nIHRoZXNlIHplcm9lZCBzZWdtZW50cyB0aGUgd2F5IHRoYXQgdGhleQorCSAqIHdlcmUgYWxtb3N0IGNlcnRhaW5seSBpbnRlbmRlZCB0byBiZSBpbnRlcnByZXRlZC4KKwkgKgorCSAqIFRoZSBjb3JyZWN0IHdheSB0byBhc2sgZm9yICJubyBzZWdtZW50IGF0IGFsbCIgaXMgdG8gc3BlY2lmeQorCSAqIGEgdXNlcl9kZXNjIHRoYXQgc2F0aXNmaWVzIExEVF9lbXB0eS4gIFRvIGtlZXAgZXZlcnl0aGluZworCSAqIHdvcmtpbmcsIHdlIGFjY2VwdCBib3RoLgorCSAqCisJICogTm90ZSB0aGF0IHRoZXJlJ3MgYSBzaW1pbGFyIGtsdWRnZSBpbiBtb2RpZnlfbGR0IC0tIGxvb2sgYXQKKwkgKiB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBtb2RlcyAxIGFuZCAweDExLgorCSAqLworCWlmIChMRFRfZW1wdHkoaW5mbykgfHwgTERUX3plcm8oaW5mbykpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTcxLDcgKzkyLDcgQEAKIAljcHUgPSBnZXRfY3B1KCk7CiAKIAl3aGlsZSAobi0tID4gMCkgewotCQlpZiAoTERUX2VtcHR5KGluZm8pKQorCQlpZiAoTERUX2VtcHR5KGluZm8pIHx8IExEVF96ZXJvKGluZm8pKQogCQkJZGVzYy0+YSA9IGRlc2MtPmIgPSAwOwogCQllbHNlCiAJCQlmaWxsX2xkdChkZXNjLCBpbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2MuYyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwppbmRleCBiN2U1MGJiLi41MDU0NDk3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCkBAIC02MTcsNyArNjE3LDcgQEAKIAkJCWdvdG8gc3VjY2VzczsKIAkJfQogCX0KLQlwcl9lcnIoIkZhc3QgVFNDIGNhbGlicmF0aW9uIGZhaWxlZFxuIik7CisJcHJfaW5mbygiRmFzdCBUU0MgY2FsaWJyYXRpb24gZmFpbGVkXG4iKTsKIAlyZXR1cm4gMDsKIAogc3VjY2VzczoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCmluZGV4IDE2OWIwOWQuLmRlMTJjMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKKysrIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwpAQCAtMjM0OCw3ICsyMzQ4LDcgQEAKIAkgKiBOb3QgcmVjb2duaXplZCBvbiBBTUQgaW4gY29tcGF0IG1vZGUgKGJ1dCBpcyByZWNvZ25pemVkIGluIGxlZ2FjeQogCSAqIG1vZGUpLgogCSAqLwotCWlmICgoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDMyKSAmJiAoZWZlciAmIEVGRVJfTE1BKQorCWlmICgoY3R4dC0+bW9kZSAhPSBYODZFTVVMX01PREVfUFJPVDY0KSAmJiAoZWZlciAmIEVGRVJfTE1BKQogCSAgICAmJiAhdmVuZG9yX2ludGVsKGN0eHQpKQogCQlyZXR1cm4gZW11bGF0ZV91ZChjdHh0KTsKIApAQCAtMjM1OSwyNSArMjM1OSwxMyBAQAogCXNldHVwX3N5c2NhbGxzX3NlZ21lbnRzKGN0eHQsICZjcywgJnNzKTsKIAogCW9wcy0+Z2V0X21zcihjdHh0LCBNU1JfSUEzMl9TWVNFTlRFUl9DUywgJm1zcl9kYXRhKTsKLQlzd2l0Y2ggKGN0eHQtPm1vZGUpIHsKLQljYXNlIFg4NkVNVUxfTU9ERV9QUk9UMzI6Ci0JCWlmICgobXNyX2RhdGEgJiAweGZmZmMpID09IDB4MCkKLQkJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOwotCQlicmVhazsKLQljYXNlIFg4NkVNVUxfTU9ERV9QUk9UNjQ6Ci0JCWlmIChtc3JfZGF0YSA9PSAweDApCi0JCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCWlmICgobXNyX2RhdGEgJiAweGZmZmMpID09IDB4MCkKKwkJcmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAKIAljdHh0LT5lZmxhZ3MgJj0gfihFRkxHX1ZNIHwgRUZMR19JRik7Ci0JY3Nfc2VsID0gKHUxNiltc3JfZGF0YTsKLQljc19zZWwgJj0gflNFTEVDVE9SX1JQTF9NQVNLOworCWNzX3NlbCA9ICh1MTYpbXNyX2RhdGEgJiB+U0VMRUNUT1JfUlBMX01BU0s7CiAJc3Nfc2VsID0gY3Nfc2VsICsgODsKLQlzc19zZWwgJj0gflNFTEVDVE9SX1JQTF9NQVNLOwotCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQgfHwgKGVmZXIgJiBFRkVSX0xNQSkpIHsKKwlpZiAoZWZlciAmIEVGRVJfTE1BKSB7CiAJCWNzLmQgPSAwOwogCQljcy5sID0gMTsKIAl9CkBAIC0yMzg2LDEwICsyMzc0LDExIEBACiAJb3BzLT5zZXRfc2VnbWVudChjdHh0LCBzc19zZWwsICZzcywgMCwgVkNQVV9TUkVHX1NTKTsKIAogCW9wcy0+Z2V0X21zcihjdHh0LCBNU1JfSUEzMl9TWVNFTlRFUl9FSVAsICZtc3JfZGF0YSk7Ci0JY3R4dC0+X2VpcCA9IG1zcl9kYXRhOworCWN0eHQtPl9laXAgPSAoZWZlciAmIEVGRVJfTE1BKSA/IG1zcl9kYXRhIDogKHUzMiltc3JfZGF0YTsKIAogCW9wcy0+Z2V0X21zcihjdHh0LCBNU1JfSUEzMl9TWVNFTlRFUl9FU1AsICZtc3JfZGF0YSk7Ci0JKnJlZ193cml0ZShjdHh0LCBWQ1BVX1JFR1NfUlNQKSA9IG1zcl9kYXRhOworCSpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JTUCkgPSAoZWZlciAmIEVGRVJfTE1BKSA/IG1zcl9kYXRhIDoKKwkJCQkJCQkgICAgICAodTMyKW1zcl9kYXRhOwogCiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiB9CkBAIC0zNzkxLDggKzM3ODAsOCBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGUgZ3JvdXA2W10gPSB7Ci0JREkoUHJvdCwJc2xkdCksCi0JREkoUHJvdCwJc3RyKSwKKwlESShQcm90IHwgRHN0TWVtLAlzbGR0KSwKKwlESShQcm90IHwgRHN0TWVtLAlzdHIpLAogCUlJKFByb3QgfCBQcml2IHwgU3JjTWVtMTYsIGVtX2xsZHQsIGxsZHQpLAogCUlJKFByb3QgfCBQcml2IHwgU3JjTWVtMTYsIGVtX2x0ciwgbHRyKSwKIAlOLCBOLCBOLCBOLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2xhcGljLmMgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuYwppbmRleCA0ZjBjMGI5Li5kNTJkY2YwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYworKysgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuYwpAQCAtMTkyLDYgKzE5Miw5IEBACiAJCXUxNiBjaWQsIGxpZDsKIAkJdTMyIGxkciwgYWlkOwogCisJCWlmICgha3ZtX2FwaWNfcHJlc2VudCh2Y3B1KSkKKwkJCWNvbnRpbnVlOworCiAJCWFpZCA9IGt2bV9hcGljX2lkKGFwaWMpOwogCQlsZHIgPSBrdm1fYXBpY19nZXRfcmVnKGFwaWMsIEFQSUNfTERSKTsKIAkJY2lkID0gYXBpY19jbHVzdGVyX2lkKG5ldywgbGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCAxMGZiZWQxLi5mODNmYzZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC00NDQ4LDcgKzQ0NDgsNyBAQAogCSAqIHphcCBhbGwgc2hhZG93IHBhZ2VzLgogCSAqLwogCWlmICh1bmxpa2VseShrdm1fY3VycmVudF9tbWlvX2dlbmVyYXRpb24oa3ZtKSA9PSAwKSkgewotCQlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9JTkZPICJrdm06IHphcHBpbmcgc2hhZG93IHBhZ2VzIGZvciBtbWlvIGdlbmVyYXRpb24gd3JhcGFyb3VuZFxuIik7CisJCXByaW50a19yYXRlbGltaXRlZChLRVJOX0RFQlVHICJrdm06IHphcHBpbmcgc2hhZG93IHBhZ2VzIGZvciBtbWlvIGdlbmVyYXRpb24gd3JhcGFyb3VuZFxuIik7CiAJCWt2bV9tbXVfaW52YWxpZGF0ZV96YXBfYWxsX3BhZ2VzKGt2bSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IGZlYjg1MmIuLmQ0YzU4ZDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTU4NDAsNTMgKzU4NDAsMTAgQEAKIAltZW1zZXQodm14X21zcl9iaXRtYXBfbGVnYWN5LCAweGZmLCBQQUdFX1NJWkUpOwogCW1lbXNldCh2bXhfbXNyX2JpdG1hcF9sb25nbW9kZSwgMHhmZiwgUEFHRV9TSVpFKTsKIAotCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9GU19CQVNFLCBmYWxzZSk7Ci0Jdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0dTX0JBU0UsIGZhbHNlKTsKLQl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihNU1JfS0VSTkVMX0dTX0JBU0UsIHRydWUpOwotCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9JQTMyX1NZU0VOVEVSX0NTLCBmYWxzZSk7Ci0Jdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0lBMzJfU1lTRU5URVJfRVNQLCBmYWxzZSk7Ci0Jdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0lBMzJfU1lTRU5URVJfRUlQLCBmYWxzZSk7Ci0Jdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0lBMzJfQk5EQ0ZHUywgdHJ1ZSk7Ci0KLQltZW1jcHkodm14X21zcl9iaXRtYXBfbGVnYWN5X3gyYXBpYywKLQkJCXZteF9tc3JfYml0bWFwX2xlZ2FjeSwgUEFHRV9TSVpFKTsKLQltZW1jcHkodm14X21zcl9iaXRtYXBfbG9uZ21vZGVfeDJhcGljLAotCQkJdm14X21zcl9iaXRtYXBfbG9uZ21vZGUsIFBBR0VfU0laRSk7Ci0KLQlpZiAoZW5hYmxlX2FwaWN2KSB7Ci0JCWZvciAobXNyID0gMHg4MDA7IG1zciA8PSAweDhmZjsgbXNyKyspCi0JCQl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfbXNyX3JlYWRfeDJhcGljKG1zcik7Ci0KLQkJLyogQWNjb3JkaW5nIFNETSwgaW4geDJhcGljIG1vZGUsIHRoZSB3aG9sZSBpZCByZWcgaXMgdXNlZC4KLQkJICogQnV0IGluIEtWTSwgaXQgb25seSB1c2UgdGhlIGhpZ2hlc3QgZWlnaHQgYml0cy4gTmVlZCB0bwotCQkgKiBpbnRlcmNlcHQgaXQgKi8KLQkJdm14X2VuYWJsZV9pbnRlcmNlcHRfbXNyX3JlYWRfeDJhcGljKDB4ODAyKTsKLQkJLyogVE1DQ1QgKi8KLQkJdm14X2VuYWJsZV9pbnRlcmNlcHRfbXNyX3JlYWRfeDJhcGljKDB4ODM5KTsKLQkJLyogVFBSICovCi0JCXZteF9kaXNhYmxlX2ludGVyY2VwdF9tc3Jfd3JpdGVfeDJhcGljKDB4ODA4KTsKLQkJLyogRU9JICovCi0JCXZteF9kaXNhYmxlX2ludGVyY2VwdF9tc3Jfd3JpdGVfeDJhcGljKDB4ODBiKTsKLQkJLyogU0VMRi1JUEkgKi8KLQkJdm14X2Rpc2FibGVfaW50ZXJjZXB0X21zcl93cml0ZV94MmFwaWMoMHg4M2YpOwotCX0KLQotCWlmIChlbmFibGVfZXB0KSB7Ci0JCWt2bV9tbXVfc2V0X21hc2tfcHRlcygwdWxsLAotCQkJKGVuYWJsZV9lcHRfYWRfYml0cykgPyBWTVhfRVBUX0FDQ0VTU19CSVQgOiAwdWxsLAotCQkJKGVuYWJsZV9lcHRfYWRfYml0cykgPyBWTVhfRVBUX0RJUlRZX0JJVCA6IDB1bGwsCi0JCQkwdWxsLCBWTVhfRVBUX0VYRUNVVEFCTEVfTUFTSyk7Ci0JCWVwdF9zZXRfbW1pb19zcHRlX21hc2soKTsKLQkJa3ZtX2VuYWJsZV90ZHAoKTsKLQl9IGVsc2UKLQkJa3ZtX2Rpc2FibGVfdGRwKCk7Ci0KLQl1cGRhdGVfcGxlX3dpbmRvd19hY3R1YWxfbWF4KCk7Ci0KIAlpZiAoc2V0dXBfdm1jc19jb25maWcoJnZtY3NfY29uZmlnKSA8IDApIHsKIAkJciA9IC1FSU87CiAJCWdvdG8gb3V0NzsKLSAgICB9CisJfQogCiAJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OWCkpCiAJCWt2bV9lbmFibGVfZWZlcl9iaXRzKEVGRVJfTlgpOwpAQCAtNTk0NSw2ICs1OTAyLDQ5IEBACiAJaWYgKG5lc3RlZCkKIAkJbmVzdGVkX3ZteF9zZXR1cF9jdGxzX21zcnMoKTsKIAorCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9GU19CQVNFLCBmYWxzZSk7CisJdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0dTX0JBU0UsIGZhbHNlKTsKKwl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihNU1JfS0VSTkVMX0dTX0JBU0UsIHRydWUpOworCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9JQTMyX1NZU0VOVEVSX0NTLCBmYWxzZSk7CisJdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0lBMzJfU1lTRU5URVJfRVNQLCBmYWxzZSk7CisJdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0lBMzJfU1lTRU5URVJfRUlQLCBmYWxzZSk7CisJdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0lBMzJfQk5EQ0ZHUywgdHJ1ZSk7CisKKwltZW1jcHkodm14X21zcl9iaXRtYXBfbGVnYWN5X3gyYXBpYywKKwkJCXZteF9tc3JfYml0bWFwX2xlZ2FjeSwgUEFHRV9TSVpFKTsKKwltZW1jcHkodm14X21zcl9iaXRtYXBfbG9uZ21vZGVfeDJhcGljLAorCQkJdm14X21zcl9iaXRtYXBfbG9uZ21vZGUsIFBBR0VfU0laRSk7CisKKwlpZiAoZW5hYmxlX2FwaWN2KSB7CisJCWZvciAobXNyID0gMHg4MDA7IG1zciA8PSAweDhmZjsgbXNyKyspCisJCQl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfbXNyX3JlYWRfeDJhcGljKG1zcik7CisKKwkJLyogQWNjb3JkaW5nIFNETSwgaW4geDJhcGljIG1vZGUsIHRoZSB3aG9sZSBpZCByZWcgaXMgdXNlZC4KKwkJICogQnV0IGluIEtWTSwgaXQgb25seSB1c2UgdGhlIGhpZ2hlc3QgZWlnaHQgYml0cy4gTmVlZCB0bworCQkgKiBpbnRlcmNlcHQgaXQgKi8KKwkJdm14X2VuYWJsZV9pbnRlcmNlcHRfbXNyX3JlYWRfeDJhcGljKDB4ODAyKTsKKwkJLyogVE1DQ1QgKi8KKwkJdm14X2VuYWJsZV9pbnRlcmNlcHRfbXNyX3JlYWRfeDJhcGljKDB4ODM5KTsKKwkJLyogVFBSICovCisJCXZteF9kaXNhYmxlX2ludGVyY2VwdF9tc3Jfd3JpdGVfeDJhcGljKDB4ODA4KTsKKwkJLyogRU9JICovCisJCXZteF9kaXNhYmxlX2ludGVyY2VwdF9tc3Jfd3JpdGVfeDJhcGljKDB4ODBiKTsKKwkJLyogU0VMRi1JUEkgKi8KKwkJdm14X2Rpc2FibGVfaW50ZXJjZXB0X21zcl93cml0ZV94MmFwaWMoMHg4M2YpOworCX0KKworCWlmIChlbmFibGVfZXB0KSB7CisJCWt2bV9tbXVfc2V0X21hc2tfcHRlcygwdWxsLAorCQkJKGVuYWJsZV9lcHRfYWRfYml0cykgPyBWTVhfRVBUX0FDQ0VTU19CSVQgOiAwdWxsLAorCQkJKGVuYWJsZV9lcHRfYWRfYml0cykgPyBWTVhfRVBUX0RJUlRZX0JJVCA6IDB1bGwsCisJCQkwdWxsLCBWTVhfRVBUX0VYRUNVVEFCTEVfTUFTSyk7CisJCWVwdF9zZXRfbW1pb19zcHRlX21hc2soKTsKKwkJa3ZtX2VuYWJsZV90ZHAoKTsKKwl9IGVsc2UKKwkJa3ZtX2Rpc2FibGVfdGRwKCk7CisKKwl1cGRhdGVfcGxlX3dpbmRvd19hY3R1YWxfbWF4KCk7CisKIAlyZXR1cm4gYWxsb2Nfa3ZtX2FyZWEoKTsKIAogb3V0NzoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9pbnNuLmMgYi9hcmNoL3g4Ni9saWIvaW5zbi5jCmluZGV4IDI0ODA5NzhiLi4xMzEzYWU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvaW5zbi5jCisrKyBiL2FyY2gveDg2L2xpYi9pbnNuLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyogVmVyaWZ5IG5leHQgc2l6ZW9mKHQpIGJ5dGVzIGNhbiBiZSBvbiB0aGUgc2FtZSBpbnN0cnVjdGlvbiAqLwogI2RlZmluZSB2YWxpZGF0ZV9uZXh0KHQsIGluc24sIG4pCVwKLQkoKGluc24pLT5uZXh0X2J5dGUgKyBzaXplb2YodCkgKyBuIDwgKGluc24pLT5lbmRfa2FkZHIpCisJKChpbnNuKS0+bmV4dF9ieXRlICsgc2l6ZW9mKHQpICsgbiA8PSAoaW5zbiktPmVuZF9rYWRkcikKIAogI2RlZmluZSBfX2dldF9uZXh0KHQsIGluc24pCVwKIAkoeyB0IHIgPSAqKHQqKWluc24tPm5leHRfYnl0ZTsgaW5zbi0+bmV4dF9ieXRlICs9IHNpemVvZih0KTsgcjsgfSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IDM4ZGNlYzQuLmUzZmYyN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtODk4LDYgKzg5OCw4IEBACiAJCWlmIChmYXVsdCAmIChWTV9GQVVMVF9TSUdCVVN8Vk1fRkFVTFRfSFdQT0lTT058CiAJCQkgICAgIFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFKSkKIAkJCWRvX3NpZ2J1cyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzLCBmYXVsdCk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWJhZF9hcmVhX25vc2VtYXBob3JlKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOwogCQllbHNlCiAJCQlCVUcoKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggYTk3ZWUwOC4uMDc5YzNiNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2L21tL2luaXQuYwpAQCAtNDMsNyArNDMsNyBAQAogCVtfUEFHRV9DQUNIRV9NT0RFX1dUXQkJPSBfUEFHRV9QQ0QsCiAJW19QQUdFX0NBQ0hFX01PREVfV1BdCQk9IF9QQUdFX1BDRCwKIH07Ci1FWFBPUlRfU1lNQk9MX0dQTChfX2NhY2hlbW9kZTJwdGVfdGJsKTsKK0VYUE9SVF9TWU1CT0woX19jYWNoZW1vZGUycHRlX3RibCk7CiB1aW50OF90IF9fcHRlMmNhY2hlbW9kZV90YmxbOF0gPSB7CiAJW19fcHRlMmNtX2lkeCgwKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dCLAogCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dDLApAQCAtNTQsNyArNTQsNyBAQAogCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUENEIHwgX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTLAogCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUIHwgX1BBR0VfUENEIHwgX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDLAogfTsKLUVYUE9SVF9TWU1CT0xfR1BMKF9fcHRlMmNhY2hlbW9kZV90YmwpOworRVhQT1JUX1NZTUJPTChfX3B0ZTJjYWNoZW1vZGVfdGJsKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBwZ3RfYnVmX3N0YXJ0Owogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBwZ3RfYnVmX2VuZDsKQEAgLTQzOCwyMCArNDM4LDIwIEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgZ2V0X25ld19zdGVwX3NpemUodW5zaWduZWQgbG9uZyBzdGVwX3NpemUpCiB7CiAJLyoKLQkgKiBFeHBsYWluIHdoeSB3ZSBzaGlmdCBieSA1IGFuZCB3aHkgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dAotCSAqICdzdGVwX3NpemUgPDwgNScgb3ZlcmZsb3dpbmc6Ci0JICoKLQkgKiBpbml0aWFsIG1hcHBlZCBzaXplIGlzIFBNRF9TSVpFICgyTSkuCisJICogSW5pdGlhbCBtYXBwZWQgc2l6ZSBpcyBQTURfU0laRSAoMk0pLgogCSAqIFdlIGNhbiBub3Qgc2V0IHN0ZXBfc2l6ZSB0byBiZSBQVURfU0laRSAoMUcpIHlldC4KIAkgKiBJbiB3b3JzZSBjYXNlLCB3aGVuIHdlIGNyb3NzIHRoZSAxRyBib3VuZGFyeSwgYW5kCiAJICogUEdfTEVWRUxfMk0gaXMgbm90IHNldCwgd2Ugd2lsbCBuZWVkIDErMSs1MTIgcGFnZXMgKDJNICsgOGspCi0JICogdG8gbWFwIDFHIHJhbmdlIHdpdGggUFRFLiBVc2UgNSBhcyBzaGlmdCBmb3Igbm93LgorCSAqIHRvIG1hcCAxRyByYW5nZSB3aXRoIFBURS4gSGVuY2Ugd2UgdXNlIG9uZSBsZXNzIHRoYW4gdGhlCisJICogZGlmZmVyZW5jZSBvZiBwYWdlIHRhYmxlIGxldmVsIHNoaWZ0cy4KIAkgKgotCSAqIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgb3ZlcmZsb3csIG9uIDMyYml0LCB3aGVuIHN0ZXBfc2l6ZQotCSAqIGlzIDAsIHJvdW5kX2Rvd24oKSByZXR1cm5zIDAgZm9yIHN0YXJ0LCBhbmQgdGhhdCB0dXJucyBpdAotCSAqIGludG8gMHgxMDAwMDAwMDBVTEwuCisJICogRG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBvdmVyZmxvdyBpbiB0aGUgdG9wLWRvd24gY2FzZSwgb24gMzJiaXQsCisJICogd2hlbiBzdGVwX3NpemUgaXMgMCwgcm91bmRfZG93bigpIHJldHVybnMgMCBmb3Igc3RhcnQsIGFuZCB0aGF0CisJICogdHVybnMgaXQgaW50byAweDEwMDAwMDAwMFVMTC4KKwkgKiBJbiB0aGUgYm90dG9tLXVwIGNhc2UsIHJvdW5kX3VwKHgsIDApIHJldHVybnMgMCB0aG91Z2ggdG9vLCB3aGljaAorCSAqIG5lZWRzIHRvIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBieSB0aGUgY29kZSBiZWxvdy4KIAkgKi8KLQlyZXR1cm4gc3RlcF9zaXplIDw8IDU7CisJcmV0dXJuIHN0ZXBfc2l6ZSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCAtIDEpOwogfQogCiAvKioKQEAgLTQ3MSw3ICs0NzEsNiBAQAogCXVuc2lnbmVkIGxvbmcgc3RlcF9zaXplOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1bnNpZ25lZCBsb25nIG1hcHBlZF9yYW1fc2l6ZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBuZXdfbWFwcGVkX3JhbV9zaXplOwogCiAJLyogeGVuIGhhcyBiaWcgcmFuZ2UgaW4gcmVzZXJ2ZWQgbmVhciBlbmQgb2YgcmFtLCBza2lwIGl0IGF0IGZpcnN0LiovCiAJYWRkciA9IG1lbWJsb2NrX2ZpbmRfaW5fcmFuZ2UobWFwX3N0YXJ0LCBtYXBfZW5kLCBQTURfU0laRSwgUE1EX1NJWkUpOwpAQCAtNDk2LDE0ICs0OTUsMTIgQEAKIAkJCQlzdGFydCA9IG1hcF9zdGFydDsKIAkJfSBlbHNlCiAJCQlzdGFydCA9IG1hcF9zdGFydDsKLQkJbmV3X21hcHBlZF9yYW1fc2l6ZSA9IGluaXRfcmFuZ2VfbWVtb3J5X21hcHBpbmcoc3RhcnQsCisJCW1hcHBlZF9yYW1fc2l6ZSArPSBpbml0X3JhbmdlX21lbW9yeV9tYXBwaW5nKHN0YXJ0LAogCQkJCQkJCWxhc3Rfc3RhcnQpOwogCQlsYXN0X3N0YXJ0ID0gc3RhcnQ7CiAJCW1pbl9wZm5fbWFwcGVkID0gbGFzdF9zdGFydCA+PiBQQUdFX1NISUZUOwotCQkvKiBvbmx5IGluY3JlYXNlIHN0ZXBfc2l6ZSBhZnRlciBiaWcgcmFuZ2UgZ2V0IG1hcHBlZCAqLwotCQlpZiAobmV3X21hcHBlZF9yYW1fc2l6ZSA+IG1hcHBlZF9yYW1fc2l6ZSkKKwkJaWYgKG1hcHBlZF9yYW1fc2l6ZSA+PSBzdGVwX3NpemUpCiAJCQlzdGVwX3NpemUgPSBnZXRfbmV3X3N0ZXBfc2l6ZShzdGVwX3NpemUpOwotCQltYXBwZWRfcmFtX3NpemUgKz0gbmV3X21hcHBlZF9yYW1fc2l6ZTsKIAl9CiAKIAlpZiAocmVhbF9lbmQgPCBtYXBfZW5kKQpAQCAtNTI0LDcgKzUyMSw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbWVtb3J5X21hcF9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBtYXBfc3RhcnQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgbWFwX2VuZCkKIHsKLQl1bnNpZ25lZCBsb25nIG5leHQsIG5ld19tYXBwZWRfcmFtX3NpemUsIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgbmV4dCwgc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBtYXBwZWRfcmFtX3NpemUgPSAwOwogCS8qIHN0ZXBfc2l6ZSBuZWVkIHRvIGJlIHNtYWxsIHNvIHBndF9idWYgZnJvbSBCUksgY291bGQgY292ZXIgaXQgKi8KIAl1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZSA9IFBNRF9TSVpFOwpAQCAtNTM5LDE5ICs1MzYsMTkgQEAKIAkgKiBmb3IgcGFnZSB0YWJsZS4KIAkgKi8KIAl3aGlsZSAoc3RhcnQgPCBtYXBfZW5kKSB7Ci0JCWlmIChtYXBfZW5kIC0gc3RhcnQgPiBzdGVwX3NpemUpIHsKKwkJaWYgKHN0ZXBfc2l6ZSAmJiBtYXBfZW5kIC0gc3RhcnQgPiBzdGVwX3NpemUpIHsKIAkJCW5leHQgPSByb3VuZF91cChzdGFydCArIDEsIHN0ZXBfc2l6ZSk7CiAJCQlpZiAobmV4dCA+IG1hcF9lbmQpCiAJCQkJbmV4dCA9IG1hcF9lbmQ7Ci0JCX0gZWxzZQorCQl9IGVsc2UgewogCQkJbmV4dCA9IG1hcF9lbmQ7CisJCX0KIAotCQluZXdfbWFwcGVkX3JhbV9zaXplID0gaW5pdF9yYW5nZV9tZW1vcnlfbWFwcGluZyhzdGFydCwgbmV4dCk7CisJCW1hcHBlZF9yYW1fc2l6ZSArPSBpbml0X3JhbmdlX21lbW9yeV9tYXBwaW5nKHN0YXJ0LCBuZXh0KTsKIAkJc3RhcnQgPSBuZXh0OwogCi0JCWlmIChuZXdfbWFwcGVkX3JhbV9zaXplID4gbWFwcGVkX3JhbV9zaXplKQorCQlpZiAobWFwcGVkX3JhbV9zaXplID49IHN0ZXBfc2l6ZSkKIAkJCXN0ZXBfc2l6ZSA9IGdldF9uZXdfc3RlcF9zaXplKHN0ZXBfc2l6ZSk7Ci0JCW1hcHBlZF9yYW1fc2l6ZSArPSBuZXdfbWFwcGVkX3JhbV9zaXplOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbXB4LmMgYi9hcmNoL3g4Ni9tbS9tcHguYwppbmRleCA2N2ViZjU3Li5jNDM5ZWM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tcHguYworKysgYi9hcmNoL3g4Ni9tbS9tcHguYwpAQCAtMzQ5LDYgKzM0OSwxMiBAQAogCQlyZXR1cm4gTVBYX0lOVkFMSURfQk9VTkRTX0RJUjsKIAogCS8qCisJICogMzItYml0IGJpbmFyaWVzIG9uIDY0LWJpdCBrZXJuZWxzIGFyZSBjdXJyZW50bHkKKwkgKiB1bnN1cHBvcnRlZC4KKwkgKi8KKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSAmJiB0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSkKKwkJcmV0dXJuIE1QWF9JTlZBTElEX0JPVU5EU19ESVI7CisJLyoKIAkgKiBUaGUgYm91bmRzIGRpcmVjdG9yeSBwb2ludGVyIGlzIHN0b3JlZCBpbiBhIHJlZ2lzdGVyCiAJICogb25seSBhY2Nlc3NpYmxlIGlmIHdlIGZpcnN0IGRvIGFuIHhzYXZlLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCBlZGYyOTljLi43YWM2ODY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtMjM0LDggKzIzNCwxMyBAQAogCSAgICAgIFBBVCg0LCBXQikgfCBQQVQoNSwgV0MpIHwgUEFUKDYsIFVDX01JTlVTKSB8IFBBVCg3LCBVQyk7CiAKIAkvKiBCb290IENQVSBjaGVjayAqLwotCWlmICghYm9vdF9wYXRfc3RhdGUpCisJaWYgKCFib290X3BhdF9zdGF0ZSkgewogCQlyZG1zcmwoTVNSX0lBMzJfQ1JfUEFULCBib290X3BhdF9zdGF0ZSk7CisJCWlmICghYm9vdF9wYXRfc3RhdGUpIHsKKwkJCXBhdF9kaXNhYmxlKCJQQVQgcmVhZCByZXR1cm5zIGFsd2F5cyB6ZXJvLCBkaXNhYmxlZC4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KIAogCXdybXNybChNU1JfSUEzMl9DUl9QQVQsIHBhdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDliMThlZjMuLjM0OWMwZDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKHItPnBhcmVudCkJLyogQWxyZWFkeSBhbGxvY2F0ZWQgKi8KIAkJCWNvbnRpbnVlOwotCQlpZiAoIXItPnN0YXJ0IHx8IHBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGlkeCkgPCAwKSB7CisJCWlmICghci0+c3RhcnQgfHwgcGNpX2NsYWltX2JyaWRnZV9yZXNvdXJjZShkZXYsIGlkeCkgPCAwKSB7CiAJCQkvKgogCQkJICogU29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIHJlZ2lvbi4KIAkJCSAqIEludmFsaWRhdGUgdGhlIHJlc291cmNlIHRvIHByZXZlbnQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pbnRlbF9taWRfcGNpLmMgYi9hcmNoL3g4Ni9wY2kvaW50ZWxfbWlkX3BjaS5jCmluZGV4IDQ0YjkyNzEuLjg1MmFhNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pbnRlbF9taWRfcGNpLmMKKysrIGIvYXJjaC94ODYvcGNpL2ludGVsX21pZF9wY2kuYwpAQCAtMjkzLDcgKzI5Myw2IEBACiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MDEsIG1yc3RfcG93ZXJfb2ZmX3VudXNlZF9kZXYpOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODA5LCBtcnN0X3Bvd2VyX29mZl91bnVzZWRfZGV2KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDgwQywgbXJzdF9wb3dlcl9vZmZfdW51c2VkX2Rldik7Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MTIsIG1yc3RfcG93ZXJfb2ZmX3VudXNlZF9kZXYpOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODE1LCBtcnN0X3Bvd2VyX29mZl91bnVzZWRfZGV2KTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS94ZW4uYyBiL2FyY2gveDg2L3BjaS94ZW4uYwppbmRleCBjNDg5ZWYyLi45MDk4ZDg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kveGVuLmMKKysrIGIvYXJjaC94ODYvcGNpL3hlbi5jCkBAIC00NTgsNiArNDU4LDcgQEAKIAkgKiBqdXN0IGhvdyBHU0lzIGdldCByZWdpc3RlcmVkLgogCSAqLwogCV9fYWNwaV9yZWdpc3Rlcl9nc2kgPSBhY3BpX3JlZ2lzdGVyX2dzaV94ZW5faHZtOworCV9fYWNwaV91bnJlZ2lzdGVyX2dzaSA9IE5VTEw7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCkBAIC00NzEsNTIgKzQ3Miw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfWEVOX0RPTTAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fc2V0dXBfYWNwaV9zY2kodm9pZCkKLXsKLQlpbnQgcmM7Ci0JaW50IHRyaWdnZXIsIHBvbGFyaXR5OwotCWludCBnc2kgPSBhY3BpX3NjaV9vdmVycmlkZV9nc2k7Ci0JaW50IGlycSA9IC0xOwotCWludCBnc2lfb3ZlcnJpZGUgPSAtMTsKLQotCWlmICghZ3NpKQotCQlyZXR1cm47Ci0KLQlyYyA9IGFjcGlfZ2V0X292ZXJyaWRlX2lycShnc2ksICZ0cmlnZ2VyLCAmcG9sYXJpdHkpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ4ZW46IGFjcGlfZ2V0X292ZXJyaWRlX2lycSBmYWlsZWQgZm9yIGFjcGkiCi0JCQkJIiBzY2ksIHJjPSVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0JdHJpZ2dlciA9IHRyaWdnZXIgPyBBQ1BJX0xFVkVMX1NFTlNJVElWRSA6IEFDUElfRURHRV9TRU5TSVRJVkU7Ci0JcG9sYXJpdHkgPSBwb2xhcml0eSA/IEFDUElfQUNUSVZFX0xPVyA6IEFDUElfQUNUSVZFX0hJR0g7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJ4ZW46IHNjaSBvdmVycmlkZTogZ2xvYmFsX2lycT0lZCB0cmlnZ2VyPSVkICIKLQkJCSJwb2xhcml0eT0lZFxuIiwgZ3NpLCB0cmlnZ2VyLCBwb2xhcml0eSk7Ci0KLQkvKiBCZWZvcmUgd2UgYmluZCB0aGUgR1NJIHRvIGEgTGludXggSVJRLCBjaGVjayB3aGV0aGVyCi0JICogd2UgbmVlZCB0byBvdmVycmlkZSBpdCB3aXRoIGJ1c19pcnEgKElSUSkgdmFsdWUuIFVzdWFsbHkgZm9yCi0JICogSVJRcyBiZWxvdyBJUlFfTEVHQUNZX0lSUSB0aGlzIGhvbGRzIElSUSA9PSBHU0ksIGFzIHNvOgotCSAqICBBQ1BJOiBJTlRfU1JDX09WUiAoYnVzIDAgYnVzX2lycSA5IGdsb2JhbF9pcnEgOSBsb3cgbGV2ZWwpCi0JICogYnV0IHRoZXJlIGFyZSBvZGRiYWxscyB3aGVyZSB0aGUgSVJRICE9IEdTSToKLQkgKiAgQUNQSTogSU5UX1NSQ19PVlIgKGJ1cyAwIGJ1c19pcnEgOSBnbG9iYWxfaXJxIDIwIGxvdyBsZXZlbCkKLQkgKiB3aGljaCBlbmRzIHVwIGJlaW5nOiBnc2lfdG9faXJxWzldID09IDIwCi0JICogKHdoaWNoIGlzIHdoYXQgYWNwaV9nc2lfdG9faXJxIGVuZHMgdXAgY2FsbGluZyB3aGVuIHN0YXJ0aW5nIHRoZQotCSAqIHRoZSBBQ1BJIGludGVycHJldGVyIGFuZCBrZWVscyBvdmVyIHNpbmNlIElSUSA5IGhhcyBub3QgYmVlbgotCSAqIHNldHVwIGFzIHdlIGhhZCBzZXR1cCBJUlEgMjAgZm9yIGl0KS4KLQkgKi8KLQlpZiAoYWNwaV9nc2lfdG9faXJxKGdzaSwgJmlycSkgPT0gMCkgewotCQkvKiBVc2UgdGhlIHByb3ZpZGVkIHZhbHVlIGlmIGl0J3MgdmFsaWQuICovCi0JCWlmIChpcnEgPj0gMCkKLQkJCWdzaV9vdmVycmlkZSA9IGlycTsKLQl9Ci0KLQlnc2kgPSB4ZW5fcmVnaXN0ZXJfZ3NpKGdzaSwgZ3NpX292ZXJyaWRlLCB0cmlnZ2VyLCBwb2xhcml0eSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAieGVuOiBhY3BpIHNjaSAlZFxuIiwgZ3NpKTsKLQotCXJldHVybjsKLX0KLQogaW50IF9faW5pdCBwY2lfeGVuX2luaXRpYWxfZG9tYWluKHZvaWQpCiB7CiAJaW50IGlycTsKQEAgLTUyNyw4ICs0ODIsOCBAQAogCXg4Nl9tc2kucmVzdG9yZV9tc2lfaXJxcyA9IHhlbl9pbml0ZG9tX3Jlc3RvcmVfbXNpX2lycXM7CiAJcGNpX21zaV9pZ25vcmVfbWFzayA9IDE7CiAjZW5kaWYKLQl4ZW5fc2V0dXBfYWNwaV9zY2koKTsKIAlfX2FjcGlfcmVnaXN0ZXJfZ3NpID0gYWNwaV9yZWdpc3Rlcl9nc2lfeGVuOworCV9fYWNwaV91bnJlZ2lzdGVyX2dzaSA9IE5VTEw7CiAJLyogUHJlLWFsbG9jYXRlIGxlZ2FjeSBpcnFzICovCiAJZm9yIChpcnEgPSAwOyBpcnEgPCBucl9sZWdhY3lfaXJxcygpOyBpcnErKykgewogCQlpbnQgdHJpZ2dlciwgcG9sYXJpdHk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy9jYWxjX3J1bl9zaXplLnBsIGIvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyMTBiYS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni90b29scy9jYWxjX3J1bl9zaXplLnBsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0jCi0jIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCB0byBydW4gdGhlIGtlcm5lbCwgaW5jbHVkaW5nIHJvb20gZm9yCi0jIHRoZSAuYnNzIGFuZCAuYnJrIHNlY3Rpb25zLgotIwotIyBVc2FnZToKLSMgb2JqZHVtcCAtaCBhLm91dCB8IHBlcmwgY2FsY19ydW5fc2l6ZS5wbAotdXNlIHN0cmljdDsKLQotbXkgJG1lbV9zaXplID0gMDsKLW15ICRmaWxlX29mZnNldCA9IDA7Ci0KLW15ICRzZWN0aW9ucz0iICpbMC05XSsgXC4oPzpic3N8YnJrKSArIjsKLXdoaWxlICg8PikgewotCWlmICgvXiRzZWN0aW9ucyhbMC05YS1mXSspICsoPzpbMC05YS1mXSsgKyl7Mn0oWzAtOWEtZl0rKS8pIHsKLQkJbXkgJHNpemUgPSBoZXgoJDEpOwotCQlteSAkb2Zmc2V0ID0gaGV4KCQyKTsKLQkJJG1lbV9zaXplICs9ICRzaXplOwotCQlpZiAoJGZpbGVfb2Zmc2V0ID09IDApIHsKLQkJCSRmaWxlX29mZnNldCA9ICRvZmZzZXQ7Ci0JCX0gZWxzaWYgKCRmaWxlX29mZnNldCAhPSAkb2Zmc2V0KSB7Ci0JCQkjIEJGRCBsaW5rZXIgc2hvd3MgdGhlIHNhbWUgZmlsZSBvZmZzZXQgaW4gRUxGLgotCQkJIyBHb2xkIGxpbmtlciBzaG93cyB0aGVtIGFzIGNvbnNlY3V0aXZlLgotCQkJbmV4dCBpZiAoJGZpbGVfb2Zmc2V0ICsgJG1lbV9zaXplID09ICRvZmZzZXQgKyAkc2l6ZSk7Ci0KLQkJCXByaW50ZiBTVERFUlIgImZpbGVfb2Zmc2V0OiAweCVseFxuIiwgJGZpbGVfb2Zmc2V0OwotCQkJcHJpbnRmIFNUREVSUiAibWVtX3NpemU6IDB4JWx4XG4iLCAkbWVtX3NpemU7Ci0JCQlwcmludGYgU1RERVJSICJvZmZzZXQ6IDB4JWx4XG4iLCAkb2Zmc2V0OwotCQkJcHJpbnRmIFNUREVSUiAic2l6ZTogMHglbHhcbiIsICRzaXplOwotCi0JCQlkaWUgIi5ic3MgYW5kIC5icmsgYXJlIG5vbi1jb250aWd1b3VzXG4iOwotCQl9Ci0JfQotfQotCi1pZiAoJGZpbGVfb2Zmc2V0ID09IDApIHsKLQlkaWUgIk5ldmVyIGZvdW5kIC5ic3Mgb3IgLmJyayBmaWxlIG9mZnNldFxuIjsKLX0KLXByaW50ZigiJWRcbiIsICRtZW1fc2l6ZSArICRmaWxlX29mZnNldCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy9jYWxjX3J1bl9zaXplLnNoIGIvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTRjMTdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5zaApAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKyMKKyMgQ2FsY3VsYXRlIHRoZSBhbW91bnQgb2Ygc3BhY2UgbmVlZGVkIHRvIHJ1biB0aGUga2VybmVsLCBpbmNsdWRpbmcgcm9vbSBmb3IKKyMgdGhlIC5ic3MgYW5kIC5icmsgc2VjdGlvbnMuCisjCisjIFVzYWdlOgorIyBvYmpkdW1wIC1oIGEub3V0IHwgc2ggY2FsY19ydW5fc2l6ZS5zaAorCitOVU09J1woWzAtOWEtZkEtRl0qWyBcdF0qXCknCitPVVQ9JChzZWQgLW4gJ3MvXlsgXHQwLTldKi5iW3NyXVtza11bIFx0XSonIiROVU0kTlVNJE5VTSROVU0iJy4qL1wxXDQvcCcpCitpZiBbIC16ICIkT1VUIiBdIDsgdGhlbgorCWVjaG8gIk5ldmVyIGZvdW5kIC5ic3Mgb3IgLmJyayBmaWxlIG9mZnNldCIgPiYyCisJZXhpdCAxCitmaQorCitPVVQ9JChlY2hvICR7T1VUIyB9KQorc2l6ZUE9JChwcmludGYgIiVkIiAweCR7T1VUJSUgKn0pCitPVVQ9JHtPVVQjKiB9CitvZmZzZXRBPSQocHJpbnRmICIlZCIgMHgke09VVCUlICp9KQorT1VUPSR7T1VUIyogfQorc2l6ZUI9JChwcmludGYgIiVkIiAweCR7T1VUJSUgKn0pCitPVVQ9JHtPVVQjKiB9CitvZmZzZXRCPSQocHJpbnRmICIlZCIgMHgke09VVCUlICp9KQorCitydW5fc2l6ZT0kKCggJG9mZnNldEEgKyAkc2l6ZUEgKyAkc2l6ZUIgKSkKKworIyBCRkQgbGlua2VyIHNob3dzIHRoZSBzYW1lIGZpbGUgb2Zmc2V0IGluIEVMRi4KK2lmIFsgIiRvZmZzZXRBIiAtbmUgIiRvZmZzZXRCIiBdIDsgdGhlbgorCSMgR29sZCBsaW5rZXIgc2hvd3MgdGhlbSBhcyBjb25zZWN1dGl2ZS4KKwllbmRCPSQoKCAkb2Zmc2V0QiArICRzaXplQiApKQorCWlmIFsgIiRlbmRCIiAhPSAiJHJ1bl9zaXplIiBdIDsgdGhlbgorCQlwcmludGYgInNpemVBOiAweCV4XG4iICRzaXplQSA+JjIKKwkJcHJpbnRmICJvZmZzZXRBOiAweCV4XG4iICRvZmZzZXRBID4mMgorCQlwcmludGYgInNpemVCOiAweCV4XG4iICRzaXplQiA+JjIKKwkJcHJpbnRmICJvZmZzZXRCOiAweCV4XG4iICRvZmZzZXRCID4mMgorCQllY2hvICIuYnNzIGFuZCAuYnJrIGFyZSBub24tY29udGlndW91cyIgPiYyCisJCWV4aXQgMQorCWZpCitmaQorCitwcmludGYgIiVkXG4iICRydW5fc2l6ZQorZXhpdCAwCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni91bS9zeXNfY2FsbF90YWJsZV8zMi5jIGIvYXJjaC94ODYvdW0vc3lzX2NhbGxfdGFibGVfMzIuYwppbmRleCA1MzFkNDI2Li5iZDE2ZDZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni91bS9zeXNfY2FsbF90YWJsZV8zMi5jCisrKyBiL2FyY2gveDg2L3VtL3N5c19jYWxsX3RhYmxlXzMyLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzeXNfbmlfc3lzY2FsbCh2b2lkKTsKIAotY29uc3Qgc3lzX2NhbGxfcHRyX3Qgc3lzX2NhbGxfdGFibGVbXSBfX2NhY2hlbGluZV9hbGlnbmVkID0geworY29uc3Qgc3lzX2NhbGxfcHRyX3Qgc3lzX2NhbGxfdGFibGVbXSBfX19fY2FjaGVsaW5lX2FsaWduZWQgPSB7CiAJLyoKIAkgKiBTbWVsbHMgbGlrZSBhIGNvbXBpbGVyIGJ1ZyAtLSBpdCBkb2Vzbid0IHdvcmsKIAkgKiB3aGVuIHRoZSAmIGJlbG93IGlzIHJlbW92ZWQuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni91bS9zeXNfY2FsbF90YWJsZV82NC5jIGIvYXJjaC94ODYvdW0vc3lzX2NhbGxfdGFibGVfNjQuYwppbmRleCAyMGMzNjQ5Li41Y2RmYTlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni91bS9zeXNfY2FsbF90YWJsZV82NC5jCisrKyBiL2FyY2gveDg2L3VtL3N5c19jYWxsX3RhYmxlXzY0LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogZXh0ZXJuIHZvaWQgc3lzX25pX3N5c2NhbGwodm9pZCk7CiAKLWNvbnN0IHN5c19jYWxsX3B0cl90IHN5c19jYWxsX3RhYmxlW10gX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKK2NvbnN0IHN5c19jYWxsX3B0cl90IHN5c19jYWxsX3RhYmxlW10gX19fX2NhY2hlbGluZV9hbGlnbmVkID0gewogCS8qCiAJICogU21lbGxzIGxpa2UgYSBjb21waWxlciBidWcgLS0gaXQgZG9lc24ndCB3b3JrCiAJICogd2hlbiB0aGUgJiBiZWxvdyBpcyByZW1vdmVkLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby92bWEuYyBiL2FyY2gveDg2L3Zkc28vdm1hLmMKaW5kZXggMDA5NDk1Yi4uMWM5Zjc1MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby92bWEuYworKysgYi9hcmNoL3g4Ni92ZHNvL3ZtYS5jCkBAIC00MSwxMiArNDEsMTcgQEAKIAogc3RydWN0IGxpbnV4X2JpbnBybTsKIAotLyogUHV0IHRoZSB2ZHNvIGFib3ZlIHRoZSAocmFuZG9taXplZCkgc3RhY2sgd2l0aCBhbm90aGVyIHJhbmRvbWl6ZWQgb2Zmc2V0LgotICAgVGhpcyB3YXkgdGhlcmUgaXMgbm8gaG9sZSBpbiB0aGUgbWlkZGxlIG9mIGFkZHJlc3Mgc3BhY2UuCi0gICBUbyBzYXZlIG1lbW9yeSBtYWtlIHN1cmUgaXQgaXMgc3RpbGwgaW4gdGhlIHNhbWUgUFRFIGFzIHRoZSBzdGFjayB0b3AuCi0gICBUaGlzIGRvZXNuJ3QgZ2l2ZSB0aGF0IG1hbnkgcmFuZG9tIGJpdHMuCi0KLSAgIE9ubHkgdXNlZCBmb3IgdGhlIDY0LWJpdCBhbmQgeDMyIHZkc29zLiAqLworLyoKKyAqIFB1dCB0aGUgdmRzbyBhYm92ZSB0aGUgKHJhbmRvbWl6ZWQpIHN0YWNrIHdpdGggYW5vdGhlciByYW5kb21pemVkCisgKiBvZmZzZXQuICBUaGlzIHdheSB0aGVyZSBpcyBubyBob2xlIGluIHRoZSBtaWRkbGUgb2YgYWRkcmVzcyBzcGFjZS4KKyAqIFRvIHNhdmUgbWVtb3J5IG1ha2Ugc3VyZSBpdCBpcyBzdGlsbCBpbiB0aGUgc2FtZSBQVEUgYXMgdGhlIHN0YWNrCisgKiB0b3AuICBUaGlzIGRvZXNuJ3QgZ2l2ZSB0aGF0IG1hbnkgcmFuZG9tIGJpdHMuCisgKgorICogTm90ZSB0aGF0IHRoaXMgYWxnb3JpdGhtIGlzIGltcGVyZmVjdDogdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgdmRzbworICogc3RhcnQgYWRkcmVzcyB3aXRoaW4gYSBQTUQgaXMgYmlhc2VkIHRvd2FyZCB0aGUgZW5kLgorICoKKyAqIE9ubHkgdXNlZCBmb3IgdGhlIDY0LWJpdCBhbmQgeDMyIHZkc29zLgorICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB2ZHNvX2FkZHIodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbGVuKQogewogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTU0LDIyICs1OSwzMCBAQAogI2Vsc2UKIAl1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDsKIAl1bnNpZ25lZCBvZmZzZXQ7Ci0JZW5kID0gKHN0YXJ0ICsgUE1EX1NJWkUgLSAxKSAmIFBNRF9NQVNLOworCisJLyoKKwkgKiBSb3VuZCB1cCB0aGUgc3RhcnQgYWRkcmVzcy4gIEl0IGNhbiBzdGFydCBvdXQgdW5hbGlnbmVkIGFzIGEgcmVzdWx0CisJICogb2Ygc3RhY2sgc3RhcnQgcmFuZG9taXphdGlvbi4KKwkgKi8KKwlzdGFydCA9IFBBR0VfQUxJR04oc3RhcnQpOworCisJLyogUm91bmQgdGhlIGxvd2VzdCBwb3NzaWJsZSBlbmQgYWRkcmVzcyB1cCB0byBhIFBNRCBib3VuZGFyeS4gKi8KKwllbmQgPSAoc3RhcnQgKyBsZW4gKyBQTURfU0laRSAtIDEpICYgUE1EX01BU0s7CiAJaWYgKGVuZCA+PSBUQVNLX1NJWkVfTUFYKQogCQllbmQgPSBUQVNLX1NJWkVfTUFYOwogCWVuZCAtPSBsZW47Ci0JLyogVGhpcyBsb3NlcyBzb21lIG1vcmUgYml0cyB0aGFuIGEgbW9kdWxvLCBidXQgaXMgY2hlYXBlciAqLwotCW9mZnNldCA9IGdldF9yYW5kb21faW50KCkgJiAoUFRSU19QRVJfUFRFIC0gMSk7Ci0JYWRkciA9IHN0YXJ0ICsgKG9mZnNldCA8PCBQQUdFX1NISUZUKTsKLQlpZiAoYWRkciA+PSBlbmQpCi0JCWFkZHIgPSBlbmQ7CisKKwlpZiAoZW5kID4gc3RhcnQpIHsKKwkJb2Zmc2V0ID0gZ2V0X3JhbmRvbV9pbnQoKSAlICgoKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKSArIDEpOworCQlhZGRyID0gc3RhcnQgKyAob2Zmc2V0IDw8IFBBR0VfU0hJRlQpOworCX0gZWxzZSB7CisJCWFkZHIgPSBzdGFydDsKKwl9CiAKIAkvKgotCSAqIHBhZ2UtYWxpZ24gaXQgaGVyZSBzbyB0aGF0IGdldF91bm1hcHBlZF9hcmVhIGRvZXNuJ3QKLQkgKiBhbGlnbiBpdCB3cm9uZ2Z1bGx5IGFnYWluIHRvIHRoZSBuZXh0IHBhZ2UuIGFkZHIgY2FuIGNvbWUgaW4gNEsKLQkgKiB1bmFsaWduZWQgaGVyZSBhcyBhIHJlc3VsdCBvZiBzdGFjayBzdGFydCByYW5kb21pemF0aW9uLgorCSAqIEZvcmNpYmx5IGFsaWduIHRoZSBmaW5hbCBhZGRyZXNzIGluIGNhc2Ugd2UgaGF2ZSBhIGhhcmR3YXJlCisJICogaXNzdWUgdGhhdCByZXF1aXJlcyBhbGlnbm1lbnQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCiAJICovCi0JYWRkciA9IFBBR0VfQUxJR04oYWRkcik7CiAJYWRkciA9IGFsaWduX3Zkc29fYWRkcihhZGRyKTsKIAogCXJldHVybiBhZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IDZiZjNhMTMuLjc4YTg4MWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3BoeXNkZXYuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3ZjcHUuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL21lbW9yeS5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uvbm1pLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4tbWNhLmg+CiAjaW5jbHVkZSA8eGVuL2ZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8eGVuL3BhZ2UuaD4KQEAgLTY2LDYgKzY3LDcgQEAKICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrcHJvdGVjdG9yLmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vbWFjaF90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9td2FpdC5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CiAjaW5jbHVkZSA8YXNtL3BhdC5oPgpAQCAtMTM1MSw2ICsxMzUzLDIxIEBACiAJLmVtZXJnZW5jeV9yZXN0YXJ0ID0geGVuX2VtZXJnZW5jeV9yZXN0YXJ0LAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgeGVuX2dldF9ubWlfcmVhc29uKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciByZWFzb24gPSAwOworCisJLyogQ29uc3RydWN0IGEgdmFsdWUgd2hpY2ggbG9va3MgbGlrZSBpdCBjYW1lIGZyb20gcG9ydCAweDYxLiAqLworCWlmICh0ZXN0X2JpdChfWEVOX05NSVJFQVNPTl9pb19lcnJvciwKKwkJICAgICAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+YXJjaC5ubWlfcmVhc29uKSkKKwkJcmVhc29uIHw9IE5NSV9SRUFTT05fSU9DSEs7CisJaWYgKHRlc3RfYml0KF9YRU5fTk1JUkVBU09OX3BjaV9zZXJyLAorCQkgICAgICZIWVBFUlZJU09SX3NoYXJlZF9pbmZvLT5hcmNoLm5taV9yZWFzb24pKQorCQlyZWFzb24gfD0gTk1JX1JFQVNPTl9TRVJSOworCisJcmV0dXJuIHJlYXNvbjsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHhlbl9ib290X3BhcmFtc19pbml0X2VkZCh2b2lkKQogewogI2lmIElTX0VOQUJMRUQoQ09ORklHX0VERCkKQEAgLTE1MzUsOSArMTU1MiwxMiBAQAogCXB2X2luZm8gPSB4ZW5faW5mbzsKIAlwdl9pbml0X29wcyA9IHhlbl9pbml0X29wczsKIAlwdl9hcGljX29wcyA9IHhlbl9hcGljX29wczsKLQlpZiAoIXhlbl9wdmhfZG9tYWluKCkpCisJaWYgKCF4ZW5fcHZoX2RvbWFpbigpKSB7CiAJCXB2X2NwdV9vcHMgPSB4ZW5fY3B1X29wczsKIAorCQl4ODZfcGxhdGZvcm0uZ2V0X25taV9yZWFzb24gPSB4ZW5fZ2V0X25taV9yZWFzb247CisJfQorCiAJaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKQogCQl4ODZfaW5pdC5yZXNvdXJjZXMubWVtb3J5X3NldHVwID0geGVuX2F1dG9feGxhdGVkX21lbW9yeV9zZXR1cDsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vcDJtLmMgYi9hcmNoL3g4Ni94ZW4vcDJtLmMKaW5kZXggZWRiYzdhNi4uNzBmYjUwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3AybS5jCisrKyBiL2FyY2gveDg2L3hlbi9wMm0uYwpAQCAtMTY3LDEwICsxNjcsMTMgQEAKIAlyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCk7CiB9CiAKLS8qIE9ubHkgdG8gYmUgY2FsbGVkIGluIGNhc2Ugb2YgYSByYWNlIGZvciBhIHBhZ2UganVzdCBhbGxvY2F0ZWQhICovCi1zdGF0aWMgdm9pZCBmcmVlX3AybV9wYWdlKHZvaWQgKnApCitzdGF0aWMgdm9pZCBfX3JlZiBmcmVlX3AybV9wYWdlKHZvaWQgKnApCiB7Ci0JQlVHX09OKCFzbGFiX2lzX2F2YWlsYWJsZSgpKTsKKwlpZiAodW5saWtlbHkoIXNsYWJfaXNfYXZhaWxhYmxlKCkpKSB7CisJCWZyZWVfYm9vdG1lbSgodW5zaWduZWQgbG9uZylwLCBQQUdFX1NJWkUpOworCQlyZXR1cm47CisJfQorCiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXApOwogfQogCkBAIC0zNzUsNyArMzc4LDcgQEAKIAkJCXAybV9taXNzaW5nX3B0ZSA6IHAybV9pZGVudGl0eV9wdGU7CiAJCWZvciAoaSA9IDA7IGkgPCBQTURTX1BFUl9NSURfUEFHRTsgaSsrKSB7CiAJCQlwbWRwID0gcG9wdWxhdGVfZXh0cmFfcG1kKAotCQkJCSh1bnNpZ25lZCBsb25nKShwMm0gKyBwZm4gKyBpICogUFRSU19QRVJfUFRFKSk7CisJCQkJKHVuc2lnbmVkIGxvbmcpKHAybSArIHBmbikgKyBpICogUE1EX1NJWkUpOwogCQkJc2V0X3BtZChwbWRwLCBfX3BtZChfX3BhKHB0ZXApIHwgX0tFUk5QR19UQUJMRSkpOwogCQl9CiAJfQpAQCAtNDM2LDEwICs0MzksOSBAQAogICogYSBuZXcgcG1kIGlzIHRvIHJlcGxhY2UgcDJtX21pc3NpbmdfcHRlIG9yIHAybV9pZGVudGl0eV9wdGUgYnkgYSBpbmRpdmlkdWFsCiAgKiBwbWQuIEluIGNhc2Ugb2YgUEFFL3g4Ni0zMiB0aGVyZSBhcmUgbXVsdGlwbGUgcG1kcyB0byBhbGxvY2F0ZSEKICAqLwotc3RhdGljIHB0ZV90ICphbGxvY19wMm1fcG1kKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpwdGVfcGcpCitzdGF0aWMgcHRlX3QgKmFsbG9jX3AybV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlX3BnKQogewogCXB0ZV90ICpwdGVjaGs7Ci0JcHRlX3QgKnB0ZXJldCA9IHB0ZXA7CiAJcHRlX3QgKnB0ZV9uZXdwZ1tQTURTX1BFUl9NSURfUEFHRV07CiAJcG1kX3QgKnBtZHA7CiAJdW5zaWduZWQgaW50IGxldmVsOwpAQCAtNDczLDggKzQ3NSw2IEBACiAJCWlmIChwdGVjaGsgPT0gcHRlX3BnKSB7CiAJCQlzZXRfcG1kKHBtZHAsCiAJCQkJX19wbWQoX19wYShwdGVfbmV3cGdbaV0pIHwgX0tFUk5QR19UQUJMRSkpOwotCQkJaWYgKHZhZGRyID09IChhZGRyICYgfihQTURfU0laRSAtIDEpKSkKLQkJCQlwdGVyZXQgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKIAkJCXB0ZV9uZXdwZ1tpXSA9IE5VTEw7CiAJCX0KIApAQCAtNDg4LDcgKzQ4OCw3IEBACiAJCXZhZGRyICs9IFBNRF9TSVpFOwogCX0KIAotCXJldHVybiBwdGVyZXQ7CisJcmV0dXJuIGxvb2t1cF9hZGRyZXNzKGFkZHIsICZsZXZlbCk7CiB9CiAKIC8qCkBAIC01MTcsNyArNTE3LDcgQEAKIAogCWlmIChwdGVfcGcgPT0gcDJtX21pc3NpbmdfcHRlIHx8IHB0ZV9wZyA9PSBwMm1faWRlbnRpdHlfcHRlKSB7CiAJCS8qIFBNRCBsZXZlbCBpcyBtaXNzaW5nLCBhbGxvY2F0ZSBhIG5ldyBvbmUgKi8KLQkJcHRlcCA9IGFsbG9jX3AybV9wbWQoYWRkciwgcHRlcCwgcHRlX3BnKTsKKwkJcHRlcCA9IGFsbG9jX3AybV9wbWQoYWRkciwgcHRlX3BnKTsKIAkJaWYgKCFwdGVwKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zZXR1cC5jIGIvYXJjaC94ODYveGVuL3NldHVwLmMKaW5kZXggZGZkNzdkZS4uODY1ZTU2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NldHVwLmMKKysrIGIvYXJjaC94ODYveGVuL3NldHVwLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogdW5zaWduZWQgbG9uZyBfX3JlZiB4ZW5fY2hrX2V4dHJhX21lbSh1bnNpZ25lZCBsb25nIHBmbikKIHsKIAlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBQRk5fUEhZUyhwZm4pOworCXBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pOwogCiAJZm9yIChpID0gMDsgaSA8IFhFTl9FWFRSQV9NRU1fTUFYX1JFR0lPTlM7IGkrKykgewogCQlpZiAoYWRkciA+PSB4ZW5fZXh0cmFfbWVtW2ldLnN0YXJ0ICYmCkBAIC0xNjAsNiArMTYwLDggQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBYRU5fRVhUUkFfTUVNX01BWF9SRUdJT05TOyBpKyspIHsKKwkJaWYgKCF4ZW5fZXh0cmFfbWVtW2ldLnNpemUpCisJCQljb250aW51ZTsKIAkJcGZuX3MgPSBQRk5fRE9XTih4ZW5fZXh0cmFfbWVtW2ldLnN0YXJ0KTsKIAkJcGZuX2UgPSBQRk5fVVAoeGVuX2V4dHJhX21lbVtpXS5zdGFydCArIHhlbl9leHRyYV9tZW1baV0uc2l6ZSk7CiAJCWZvciAocGZuID0gcGZuX3M7IHBmbiA8IHBmbl9lOyBwZm4rKykKQEAgLTIyOSwxNSArMjMxLDE0IEBACiAgKiBhcyBhIGZhbGxiYWNrIGlmIHRoZSByZW1hcHBpbmcgZmFpbHMuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fc2V0X2lkZW50aXR5X2FuZF9yZWxlYXNlX2NodW5rKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgbG9uZyAqaWRlbnRpdHksCi0JdW5zaWduZWQgbG9uZyAqcmVsZWFzZWQpCisJdW5zaWduZWQgbG9uZyBlbmRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCB1bnNpZ25lZCBsb25nICpyZWxlYXNlZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxlbiA9IDA7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGVuZDsKIAlpbnQgcmV0OwogCiAJV0FSTl9PTihzdGFydF9wZm4gPiBlbmRfcGZuKTsKIAorCS8qIFJlbGVhc2UgcGFnZXMgZmlyc3QuICovCiAJZW5kID0gbWluKGVuZF9wZm4sIG5yX3BhZ2VzKTsKIAlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIDwgZW5kOyBwZm4rKykgewogCQl1bnNpZ25lZCBsb25nIG1mbiA9IHBmbl90b19tZm4ocGZuKTsKQEAgLTI1MCwxNiArMjUxLDE0IEBACiAJCVdBUk4ocmV0ICE9IDEsICJGYWlsZWQgdG8gcmVsZWFzZSBwZm4gJWx4IGVycj0lZFxuIiwgcGZuLCByZXQpOwogCiAJCWlmIChyZXQgPT0gMSkgeworCQkJKCpyZWxlYXNlZCkrKzsKIAkJCWlmICghX19zZXRfcGh5c190b19tYWNoaW5lKHBmbiwgSU5WQUxJRF9QMk1fRU5UUlkpKQogCQkJCWJyZWFrOwotCQkJbGVuKys7CiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJfQogCi0JLyogTmVlZCB0byByZWxlYXNlIHBhZ2VzIGZpcnN0ICovCi0JKnJlbGVhc2VkICs9IGxlbjsKLQkqaWRlbnRpdHkgKz0gc2V0X3BoeXNfcmFuZ2VfaWRlbnRpdHkoc3RhcnRfcGZuLCBlbmRfcGZuKTsKKwlzZXRfcGh5c19yYW5nZV9pZGVudGl0eShzdGFydF9wZm4sIGVuZF9wZm4pOwogfQogCiAvKgpAQCAtMjg3LDcgKzI4Niw3IEBACiAJfQogCiAJLyogVXBkYXRlIGtlcm5lbCBtYXBwaW5nLCBidXQgbm90IGZvciBoaWdobWVtLiAqLwotCWlmICgocGZuIDw8IFBBR0VfU0hJRlQpID49IF9fcGEoaGlnaF9tZW1vcnkpKQorCWlmIChwZm4gPj0gUEZOX1VQKF9fcGEoaGlnaF9tZW1vcnkgLSAxKSkpCiAJCXJldHVybjsKIAogCWlmIChIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKCh1bnNpZ25lZCBsb25nKV9fdmEocGZuIDw8IFBBR0VfU0hJRlQpLApAQCAtMzE4LDcgKzMxNyw2IEBACiAJdW5zaWduZWQgbG9uZyBpZGVudF9wZm5faXRlciwgcmVtYXBfcGZuX2l0ZXI7CiAJdW5zaWduZWQgbG9uZyBpZGVudF9lbmRfcGZuID0gc3RhcnRfcGZuICsgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGxlZnQgPSBzaXplOwotCXVuc2lnbmVkIGxvbmcgaWRlbnRfY250ID0gMDsKIAl1bnNpZ25lZCBpbnQgaSwgY2h1bms7CiAKIAlXQVJOX09OKHNpemUgPT0gMCk7CkBAIC0zNDcsOCArMzQ1LDcgQEAKIAkJeGVuX3JlbWFwX21mbiA9IG1mbjsKIAogCQkvKiBTZXQgaWRlbnRpdHkgbWFwICovCi0JCWlkZW50X2NudCArPSBzZXRfcGh5c19yYW5nZV9pZGVudGl0eShpZGVudF9wZm5faXRlciwKLQkJCWlkZW50X3Bmbl9pdGVyICsgY2h1bmspOworCQlzZXRfcGh5c19yYW5nZV9pZGVudGl0eShpZGVudF9wZm5faXRlciwgaWRlbnRfcGZuX2l0ZXIgKyBjaHVuayk7CiAKIAkJbGVmdCAtPSBjaHVuazsKIAl9CkBAIC0zNzEsNyArMzY4LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB4ZW5fc2V0X2lkZW50aXR5X2FuZF9yZW1hcF9jaHVuaygKICAgICAgICAgY29uc3Qgc3RydWN0IGU4MjBlbnRyeSAqbGlzdCwgc2l6ZV90IG1hcF9zaXplLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHVuc2lnbmVkIGxvbmcgcmVtYXBfcGZuLAotCXVuc2lnbmVkIGxvbmcgKmlkZW50aXR5LCB1bnNpZ25lZCBsb25nICpyZWxlYXNlZCkKKwl1bnNpZ25lZCBsb25nICpyZWxlYXNlZCwgdW5zaWduZWQgbG9uZyAqcmVtYXBwZWQpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47CiAJdW5zaWduZWQgbG9uZyBpID0gMDsKQEAgLTM4Niw4ICszODMsNyBAQAogCQkvKiBEbyBub3QgcmVtYXAgcGFnZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24gKi8KIAkJaWYgKGN1cl9wZm4gPj0gbnJfcGFnZXMpIHsKIAkJCS8qIElkZW50aXR5IG1hcCByZW1haW5pbmcgcGFnZXMgKi8KLQkJCSppZGVudGl0eSArPSBzZXRfcGh5c19yYW5nZV9pZGVudGl0eShjdXJfcGZuLAotCQkJCWN1cl9wZm4gKyBzaXplKTsKKwkJCXNldF9waHlzX3JhbmdlX2lkZW50aXR5KGN1cl9wZm4sIGN1cl9wZm4gKyBzaXplKTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChjdXJfcGZuICsgc2l6ZSA+IG5yX3BhZ2VzKQpAQCAtMzk4LDcgKzM5NCw3IEBACiAJCWlmICghcmVtYXBfcmFuZ2Vfc2l6ZSkgewogCQkJcHJfd2FybmluZygiVW5hYmxlIHRvIGZpbmQgYXZhaWxhYmxlIHBmbiByYW5nZSwgbm90IHJlbWFwcGluZyBpZGVudGl0eSBwYWdlc1xuIik7CiAJCQl4ZW5fc2V0X2lkZW50aXR5X2FuZF9yZWxlYXNlX2NodW5rKGN1cl9wZm4sCi0JCQkJY3VyX3BmbiArIGxlZnQsIG5yX3BhZ2VzLCBpZGVudGl0eSwgcmVsZWFzZWQpOworCQkJCWN1cl9wZm4gKyBsZWZ0LCBucl9wYWdlcywgcmVsZWFzZWQpOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogQWRqdXN0IHNpemUgdG8gZml0IGluIGN1cnJlbnQgZTgyMCBSQU0gcmVnaW9uICovCkBAIC00MTAsNyArNDA2LDcgQEAKIAkJLyogVXBkYXRlIHZhcmlhYmxlcyB0byByZWZsZWN0IG5ldyBtYXBwaW5ncy4gKi8KIAkJaSArPSBzaXplOwogCQlyZW1hcF9wZm4gKz0gc2l6ZTsKLQkJKmlkZW50aXR5ICs9IHNpemU7CisJCSpyZW1hcHBlZCArPSBzaXplOwogCX0KIAogCS8qCkBAIC00MjcsMTMgKzQyMywxMyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3NldF9pZGVudGl0eV9hbmRfcmVtYXAoCiAJY29uc3Qgc3RydWN0IGU4MjBlbnRyeSAqbGlzdCwgc2l6ZV90IG1hcF9zaXplLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAotCXVuc2lnbmVkIGxvbmcgKnJlbGVhc2VkKQorCXVuc2lnbmVkIGxvbmcgKnJlbGVhc2VkLCB1bnNpZ25lZCBsb25nICpyZW1hcHBlZCkKIHsKIAlwaHlzX2FkZHJfdCBzdGFydCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBpZGVudGl0eSA9IDA7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3BmbiA9IG5yX3BhZ2VzOwogCWNvbnN0IHN0cnVjdCBlODIwZW50cnkgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgbnVtX3JlbGVhc2VkID0gMDsKKwl1bnNpZ25lZCBsb25nIG51bV9yZW1hcHBlZCA9IDA7CiAJaW50IGk7CiAKIAkvKgpAQCAtNDYwLDE0ICs0NTYsMTQgQEAKIAkJCQlsYXN0X3BmbiA9IHhlbl9zZXRfaWRlbnRpdHlfYW5kX3JlbWFwX2NodW5rKAogCQkJCQkJbGlzdCwgbWFwX3NpemUsIHN0YXJ0X3BmbiwKIAkJCQkJCWVuZF9wZm4sIG5yX3BhZ2VzLCBsYXN0X3BmbiwKLQkJCQkJCSZpZGVudGl0eSwgJm51bV9yZWxlYXNlZCk7CisJCQkJCQkmbnVtX3JlbGVhc2VkLCAmbnVtX3JlbWFwcGVkKTsKIAkJCXN0YXJ0ID0gZW5kOwogCQl9CiAJfQogCiAJKnJlbGVhc2VkID0gbnVtX3JlbGVhc2VkOworCSpyZW1hcHBlZCA9IG51bV9yZW1hcHBlZDsKIAotCXByX2luZm8oIlNldCAlbGQgcGFnZShzKSB0byAxLTEgbWFwcGluZ1xuIiwgaWRlbnRpdHkpOwogCXByX2luZm8oIlJlbGVhc2VkICVsZCBwYWdlKHMpXG4iLCBudW1fcmVsZWFzZWQpOwogfQogCkBAIC01ODYsNiArNTgyLDcgQEAKIAlzdHJ1Y3QgeGVuX21lbW9yeV9tYXAgbWVtbWFwOwogCXVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzOwogCXVuc2lnbmVkIGxvbmcgZXh0cmFfcGFnZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgcmVtYXBwZWRfcGFnZXM7CiAJaW50IGk7CiAJaW50IG9wOwogCkBAIC02MzUsOSArNjMyLDEwIEBACiAJICogdW5kZXJseWluZyBSQU0uCiAJICovCiAJeGVuX3NldF9pZGVudGl0eV9hbmRfcmVtYXAobWFwLCBtZW1tYXAubnJfZW50cmllcywgbWF4X3BmbiwKLQkJCQkgICAmeGVuX3JlbGVhc2VkX3BhZ2VzKTsKKwkJCQkgICAmeGVuX3JlbGVhc2VkX3BhZ2VzLCAmcmVtYXBwZWRfcGFnZXMpOwogCiAJZXh0cmFfcGFnZXMgKz0geGVuX3JlbGVhc2VkX3BhZ2VzOworCWV4dHJhX3BhZ2VzICs9IHJlbWFwcGVkX3BhZ2VzOwogCiAJLyoKIAkgKiBDbGFtcCB0aGUgYW1vdW50IG9mIGV4dHJhIG1lbW9yeSB0byBhIEVYVFJBX01FTV9SQVRJTwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3RpbWUuYyBiL2FyY2gveDg2L3hlbi90aW1lLmMKaW5kZXggZjQ3M2QyNi4uNjkwODczNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3RpbWUuYworKysgYi9hcmNoL3g4Ni94ZW4vdGltZS5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAogc3RydWN0IHhlbl9jbG9ja19ldmVudF9kZXZpY2UgewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgZXZ0OwotCWNoYXIgKm5hbWU7CisJY2hhciBuYW1lWzE2XTsKIH07CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHhlbl9jbG9ja19ldmVudF9kZXZpY2UsIHhlbl9jbG9ja19ldmVudHMpID0geyAuZXZ0LmlycSA9IC0xIH07CiAKQEAgLTQyMCw0NiArNDIwLDM4IEBACiAJaWYgKGV2dC0+aXJxID49IDApIHsKIAkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihldnQtPmlycSwgTlVMTCk7CiAJCWV2dC0+aXJxID0gLTE7Ci0JCWtmcmVlKHBlcl9jcHUoeGVuX2Nsb2NrX2V2ZW50cywgY3B1KS5uYW1lKTsKLQkJcGVyX2NwdSh4ZW5fY2xvY2tfZXZlbnRzLCBjcHUpLm5hbWUgPSBOVUxMOwogCX0KIH0KIAogdm9pZCB4ZW5fc2V0dXBfdGltZXIoaW50IGNwdSkKIHsKLQljaGFyICpuYW1lOwotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dDsKKwlzdHJ1Y3QgeGVuX2Nsb2NrX2V2ZW50X2RldmljZSAqeGV2dCA9ICZwZXJfY3B1KHhlbl9jbG9ja19ldmVudHMsIGNwdSk7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJnhldnQtPmV2dDsKIAlpbnQgaXJxOwogCi0JZXZ0ID0gJnBlcl9jcHUoeGVuX2Nsb2NrX2V2ZW50cywgY3B1KS5ldnQ7CiAJV0FSTihldnQtPmlycSA+PSAwLCAiSVJRJWQgZm9yIENQVSVkIGlzIGFscmVhZHkgYWxsb2NhdGVkXG4iLCBldnQtPmlycSwgY3B1KTsKIAlpZiAoZXZ0LT5pcnEgPj0gMCkKIAkJeGVuX3RlYXJkb3duX3RpbWVyKGNwdSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJpbnN0YWxsaW5nIFhlbiB0aW1lciBmb3IgQ1BVICVkXG4iLCBjcHUpOwogCi0JbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAidGltZXIlZCIsIGNwdSk7Ci0JaWYgKCFuYW1lKQotCQluYW1lID0gIjx0aW1lciBrYXNwcmludGYgZmFpbGVkPiI7CisJc25wcmludGYoeGV2dC0+bmFtZSwgc2l6ZW9mKHhldnQtPm5hbWUpLCAidGltZXIlZCIsIGNwdSk7CiAKIAlpcnEgPSBiaW5kX3ZpcnFfdG9faXJxaGFuZGxlcihWSVJRX1RJTUVSLCBjcHUsIHhlbl90aW1lcl9pbnRlcnJ1cHQsCiAJCQkJICAgICAgSVJRRl9QRVJDUFV8SVJRRl9OT0JBTEFOQ0lOR3xJUlFGX1RJTUVSfAogCQkJCSAgICAgIElSUUZfRk9SQ0VfUkVTVU1FfElSUUZfRUFSTFlfUkVTVU1FLAotCQkJCSAgICAgIG5hbWUsIE5VTEwpOworCQkJCSAgICAgIHhldnQtPm5hbWUsIE5VTEwpOwogCSh2b2lkKXhlbl9zZXRfaXJxX3ByaW9yaXR5KGlycSwgWEVOX0lSUV9QUklPUklUWV9NQVgpOwogCiAJbWVtY3B5KGV2dCwgeGVuX2Nsb2NrZXZlbnQsIHNpemVvZigqZXZ0KSk7CiAKIAlldnQtPmNwdW1hc2sgPSBjcHVtYXNrX29mKGNwdSk7CiAJZXZ0LT5pcnEgPSBpcnE7Ci0JcGVyX2NwdSh4ZW5fY2xvY2tfZXZlbnRzLCBjcHUpLm5hbWUgPSBuYW1lOwogfQogCiAKIHZvaWQgeGVuX3NldHVwX2NwdV9jbG9ja2V2ZW50cyh2b2lkKQogewotCUJVR19PTihwcmVlbXB0aWJsZSgpKTsKLQogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSh0aGlzX2NwdV9wdHIoJnhlbl9jbG9ja19ldmVudHMuZXZ0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL2ZhdWx0LmMgYi9hcmNoL3h0ZW5zYS9tbS9mYXVsdC5jCmluZGV4IGI1N2M0ZjkuLjllMzU3MWEgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL21tL2ZhdWx0LmMKKysrIGIvYXJjaC94dGVuc2EvbW0vZmF1bHQuYwpAQCAtMTE3LDYgKzExNyw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCAzMGY2MTUzLi4zYWQ0MDU1IDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTQ3Myw2ICs0NzMsMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJsa19xdWV1ZV9ieXBhc3NfZW5kKTsKIAordm9pZCBibGtfc2V0X3F1ZXVlX2R5aW5nKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfRFlJTkcsIHEpOworCisJaWYgKHEtPm1xX29wcykKKwkJYmxrX21xX3dha2Vfd2FpdGVycyhxKTsKKwllbHNlIHsKKwkJc3RydWN0IHJlcXVlc3RfbGlzdCAqcmw7CisKKwkJYmxrX3F1ZXVlX2Zvcl9lYWNoX3JsKHJsLCBxKSB7CisJCQlpZiAocmwtPnJxX3Bvb2wpIHsKKwkJCQl3YWtlX3VwKCZybC0+d2FpdFtCTEtfUldfU1lOQ10pOworCQkJCXdha2VfdXAoJnJsLT53YWl0W0JMS19SV19BU1lOQ10pOworCQkJfQorCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3NldF9xdWV1ZV9keWluZyk7CisKIC8qKgogICogYmxrX2NsZWFudXBfcXVldWUgLSBzaHV0ZG93biBhIHJlcXVlc3QgcXVldWUKICAqIEBxOiByZXF1ZXN0IHF1ZXVlIHRvIHNodXRkb3duCkBAIC00ODYsNyArNTA1LDcgQEAKIAogCS8qIG1hcmsgQHEgRFlJTkcsIG5vIG5ldyByZXF1ZXN0IG9yIG1lcmdlcyB3aWxsIGJlIGFsbG93ZWQgYWZ0ZXJ3YXJkcyAqLwogCW11dGV4X2xvY2soJnEtPnN5c2ZzX2xvY2spOwotCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfRFlJTkcsIHEpOworCWJsa19zZXRfcXVldWVfZHlpbmcocSk7CiAJc3Bpbl9sb2NrX2lycShsb2NrKTsKIAogCS8qCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtc3lzZnMuYyBiL2Jsb2NrL2Jsay1tcS1zeXNmcy5jCmluZGV4IDE2MzBhMjAuLjY3NzRhMGUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS1zeXNmcy5jCisrKyBiL2Jsb2NrL2Jsay1tcS1zeXNmcy5jCkBAIC0xNSw2ICsxNSwyNiBAQAogCiBzdGF0aWMgdm9pZCBibGtfbXFfc3lzZnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKKworCXEgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHJlcXVlc3RfcXVldWUsIG1xX2tvYmopOworCWZyZWVfcGVyY3B1KHEtPnF1ZXVlX2N0eCk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19tcV9jdHhfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKK3sKKwlzdHJ1Y3QgYmxrX21xX2N0eCAqY3R4OworCisJY3R4ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBibGtfbXFfY3R4LCBrb2JqKTsKKwlrb2JqZWN0X3B1dCgmY3R4LT5xdWV1ZS0+bXFfa29iaik7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19tcV9oY3R4X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CisKKwloY3R4ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBibGtfbXFfaHdfY3R4LCBrb2JqKTsKKwlrZnJlZShoY3R4KTsKIH0KIAogc3RydWN0IGJsa19tcV9jdHhfc3lzZnNfZW50cnkgewpAQCAtMzE4LDEzICszMzgsMTMgQEAKIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGJsa19tcV9jdHhfa3R5cGUgPSB7CiAJLnN5c2ZzX29wcwk9ICZibGtfbXFfc3lzZnNfb3BzLAogCS5kZWZhdWx0X2F0dHJzCT0gZGVmYXVsdF9jdHhfYXR0cnMsCi0JLnJlbGVhc2UJPSBibGtfbXFfc3lzZnNfcmVsZWFzZSwKKwkucmVsZWFzZQk9IGJsa19tcV9jdHhfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGJsa19tcV9od19rdHlwZSA9IHsKIAkuc3lzZnNfb3BzCT0gJmJsa19tcV9od19zeXNmc19vcHMsCiAJLmRlZmF1bHRfYXR0cnMJPSBkZWZhdWx0X2h3X2N0eF9hdHRycywKLQkucmVsZWFzZQk9IGJsa19tcV9zeXNmc19yZWxlYXNlLAorCS5yZWxlYXNlCT0gYmxrX21xX2hjdHhfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyB2b2lkIGJsa19tcV91bnJlZ2lzdGVyX2hjdHgoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpCkBAIC0zNTUsNiArMzc1LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCWhjdHhfZm9yX2VhY2hfY3R4KGhjdHgsIGN0eCwgaSkgeworCQlrb2JqZWN0X2dldCgmcS0+bXFfa29iaik7CiAJCXJldCA9IGtvYmplY3RfYWRkKCZjdHgtPmtvYmosICZoY3R4LT5rb2JqLCAiY3B1JXUiLCBjdHgtPmNwdSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS10YWcuYyBiL2Jsb2NrL2Jsay1tcS10YWcuYwppbmRleCAzMmU4ZGJiLi42MGM5ZDRhIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEtdGFnLmMKKysrIGIvYmxvY2svYmxrLW1xLXRhZy5jCkBAIC02OCw5ICs2OCw5IEBACiB9CiAKIC8qCi0gKiBXYWtldXAgYWxsIHBvdGVudGlhbGx5IHNsZWVwaW5nIG9uIG5vcm1hbCAobm9uLXJlc2VydmVkKSB0YWdzCisgKiBXYWtldXAgYWxsIHBvdGVudGlhbGx5IHNsZWVwaW5nIG9uIHRhZ3MKICAqLwotc3RhdGljIHZvaWQgYmxrX21xX3RhZ193YWtldXBfYWxsKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncykKK3ZvaWQgYmxrX21xX3RhZ193YWtldXBfYWxsKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywgYm9vbCBpbmNsdWRlX3Jlc2VydmUpCiB7CiAJc3RydWN0IGJsa19tcV9iaXRtYXBfdGFncyAqYnQ7CiAJaW50IGksIHdha2VfaW5kZXg7CkBAIC04NSw2ICs4NSwxMiBAQAogCiAJCXdha2VfaW5kZXggPSBidF9pbmRleF9pbmMod2FrZV9pbmRleCk7CiAJfQorCisJaWYgKGluY2x1ZGVfcmVzZXJ2ZSkgeworCQlidCA9ICZ0YWdzLT5icmVzZXJ2ZWRfdGFnczsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmJ0LT5ic1swXS53YWl0KSkKKwkJCXdha2VfdXAoJmJ0LT5ic1swXS53YWl0KTsKKwl9CiB9CiAKIC8qCkBAIC0xMDAsNyArMTA2LDcgQEAKIAogCWF0b21pY19kZWMoJnRhZ3MtPmFjdGl2ZV9xdWV1ZXMpOwogCi0JYmxrX21xX3RhZ193YWtldXBfYWxsKHRhZ3MpOworCWJsa19tcV90YWdfd2FrZXVwX2FsbCh0YWdzLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC01ODQsNyArNTkwLDcgQEAKIAkgKiBzdGF0aWMgYW5kIHNob3VsZCBuZXZlciBuZWVkIHJlc2l6aW5nLgogCSAqLwogCWJ0X3VwZGF0ZV9jb3VudCgmdGFncy0+Yml0bWFwX3RhZ3MsIHRkZXB0aCk7Ci0JYmxrX21xX3RhZ193YWtldXBfYWxsKHRhZ3MpOworCWJsa19tcV90YWdfd2FrZXVwX2FsbCh0YWdzLCBmYWxzZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS10YWcuaCBiL2Jsb2NrL2Jsay1tcS10YWcuaAppbmRleCA2MjA2ZWQxLi5hNmZhMGZjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEtdGFnLmgKKysrIGIvYmxvY2svYmxrLW1xLXRhZy5oCkBAIC01NCw2ICs1NCw3IEBACiBleHRlcm4gc3NpemVfdCBibGtfbXFfdGFnX3N5c2ZzX3Nob3coc3RydWN0IGJsa19tcV90YWdzICp0YWdzLCBjaGFyICpwYWdlKTsKIGV4dGVybiB2b2lkIGJsa19tcV90YWdfaW5pdF9sYXN0X3RhZyhzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIHVuc2lnbmVkIGludCAqbGFzdF90YWcpOwogZXh0ZXJuIGludCBibGtfbXFfdGFnX3VwZGF0ZV9kZXB0aChzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIHVuc2lnbmVkIGludCBkZXB0aCk7CitleHRlcm4gdm9pZCBibGtfbXFfdGFnX3dha2V1cF9hbGwoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLCBib29sKTsKIAogZW51bSB7CiAJQkxLX01RX1RBR19DQUNIRV9NSU4JPSAxLApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuYwppbmRleCBkYTFhYjU2Li45ZWUzYjg3IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuYworKysgYi9ibG9jay9ibGstbXEuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJd2FrZV91cF9hbGwoJnEtPm1xX2ZyZWV6ZV93cSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJsa19tcV9mcmVlemVfcXVldWVfc3RhcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit2b2lkIGJsa19tcV9mcmVlemVfcXVldWVfc3RhcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJYm9vbCBmcmVlemU7CiAKQEAgLTEyMCw2ICsxMjAsNyBAQAogCQlibGtfbXFfcnVuX3F1ZXVlcyhxLCBmYWxzZSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX2ZyZWV6ZV9xdWV1ZV9zdGFydCk7CiAKIHN0YXRpYyB2b2lkIGJsa19tcV9mcmVlemVfcXVldWVfd2FpdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKQEAgLTEzNiw3ICsxMzcsNyBAQAogCWJsa19tcV9mcmVlemVfcXVldWVfd2FpdChxKTsKIH0KIAotc3RhdGljIHZvaWQgYmxrX21xX3VuZnJlZXplX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQordm9pZCBibGtfbXFfdW5mcmVlemVfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJYm9vbCB3YWtlOwogCkBAIC0xNDksNiArMTUwLDI0IEBACiAJCXdha2VfdXBfYWxsKCZxLT5tcV9mcmVlemVfd3EpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV91bmZyZWV6ZV9xdWV1ZSk7CisKK3ZvaWQgYmxrX21xX3dha2Vfd2FpdGVycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKQorCQlpZiAoYmxrX21xX2h3X3F1ZXVlX21hcHBlZChoY3R4KSkKKwkJCWJsa19tcV90YWdfd2FrZXVwX2FsbChoY3R4LT50YWdzLCB0cnVlKTsKKworCS8qCisJICogSWYgd2UgYXJlIGNhbGxlZCBiZWNhdXNlIHRoZSBxdWV1ZSBoYXMgbm93IGJlZW4gbWFya2VkIGFzCisJICogZHlpbmcsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgcHJvY2Vzc2VzIGN1cnJlbnRseSB3YWl0aW5nIG9uCisJICogdGhlIHF1ZXVlIGFyZSBub3RpZmllZCBhcyB3ZWxsLgorCSAqLworCXdha2VfdXBfYWxsKCZxLT5tcV9mcmVlemVfd3EpOworfQogCiBib29sIGJsa19tcV9jYW5fcXVldWUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpCiB7CkBAIC0yNTgsOCArMjc3LDEwIEBACiAJCWN0eCA9IGFsbG9jX2RhdGEuY3R4OwogCX0KIAlibGtfbXFfcHV0X2N0eChjdHgpOwotCWlmICghcnEpCisJaWYgKCFycSkgeworCQlibGtfbXFfcXVldWVfZXhpdChxKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVXT1VMREJMT0NLKTsKKwl9CiAJcmV0dXJuIHJxOwogfQogRVhQT1JUX1NZTUJPTChibGtfbXFfYWxsb2NfcmVxdWVzdCk7CkBAIC0zODMsNiArNDA0LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KTsKIAoraW50IGJsa19tcV9yZXF1ZXN0X3N0YXJ0ZWQoc3RydWN0IHJlcXVlc3QgKnJxKQoreworCXJldHVybiB0ZXN0X2JpdChSRVFfQVRPTV9TVEFSVEVELCAmcnEtPmF0b21pY19mbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfcmVxdWVzdF9zdGFydGVkKTsKKwogdm9pZCBibGtfbXFfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBycS0+cTsKQEAgLTUwMCwxMiArNTI3LDM4IEBACiB9CiBFWFBPUlRfU1lNQk9MKGJsa19tcV9hZGRfdG9fcmVxdWV1ZV9saXN0KTsKIAordm9pZCBibGtfbXFfY2FuY2VsX3JlcXVldWVfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwljYW5jZWxfd29ya19zeW5jKCZxLT5yZXF1ZXVlX3dvcmspOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX2NhbmNlbF9yZXF1ZXVlX3dvcmspOworCiB2b2lkIGJsa19tcV9raWNrX3JlcXVldWVfbGlzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlrYmxvY2tkX3NjaGVkdWxlX3dvcmsoJnEtPnJlcXVldWVfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19tcV9raWNrX3JlcXVldWVfbGlzdCk7CiAKK3ZvaWQgYmxrX21xX2Fib3J0X3JlcXVldWVfbGlzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChycV9saXN0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5yZXF1ZXVlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV9pbml0KCZxLT5yZXF1ZXVlX2xpc3QsICZycV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5yZXF1ZXVlX2xvY2ssIGZsYWdzKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmcnFfbGlzdCkpIHsKKwkJc3RydWN0IHJlcXVlc3QgKnJxOworCisJCXJxID0gbGlzdF9maXJzdF9lbnRyeSgmcnFfbGlzdCwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJnJxLT5xdWV1ZWxpc3QpOworCQlycS0+ZXJyb3JzID0gLUVJTzsKKwkJYmxrX21xX2VuZF9yZXF1ZXN0KHJxLCBycS0+ZXJyb3JzKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGJsa19tcV9hYm9ydF9yZXF1ZXVlX2xpc3QpOworCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZmx1c2hfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCXN0cnVjdCBibGtfZmx1c2hfcXVldWUgKmZxLCB1bnNpZ25lZCBpbnQgdGFnKQogewpAQCAtNTY2LDEzICs2MTksMjQgQEAKIAkJYnJlYWs7CiAJfQogfQotCQkKKwogc3RhdGljIHZvaWQgYmxrX21xX2NoZWNrX2V4cGlyZWQoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCiAJCXN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqcHJpdiwgYm9vbCByZXNlcnZlZCkKIHsKIAlzdHJ1Y3QgYmxrX21xX3RpbWVvdXRfZGF0YSAqZGF0YSA9IHByaXY7CiAKLQlpZiAoIXRlc3RfYml0KFJFUV9BVE9NX1NUQVJURUQsICZycS0+YXRvbWljX2ZsYWdzKSkKKwlpZiAoIXRlc3RfYml0KFJFUV9BVE9NX1NUQVJURUQsICZycS0+YXRvbWljX2ZsYWdzKSkgeworCQkvKgorCQkgKiBJZiBhIHJlcXVlc3Qgd2Fzbid0IHN0YXJ0ZWQgYmVmb3JlIHRoZSBxdWV1ZSB3YXMKKwkJICogbWFya2VkIGR5aW5nLCBraWxsIGl0IGhlcmUgb3IgaXQnbGwgZ28gdW5ub3RpY2VkLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KGJsa19xdWV1ZV9keWluZyhycS0+cSkpKSB7CisJCQlycS0+ZXJyb3JzID0gLUVJTzsKKwkJCWJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHJxKTsKKwkJfQorCQlyZXR1cm47CisJfQorCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX05PX1RJTUVPVVQpCiAJCXJldHVybjsKIAogCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5kZWFkbGluZSkpIHsKQEAgLTE1NzcsMTAgKzE2NDEsOCBAQAogCXN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4OwogCXVuc2lnbmVkIGludCBpOwogCi0JcXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpIHsKKwlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkKIAkJZnJlZV9jcHVtYXNrX3ZhcihoY3R4LT5jcHVtYXNrKTsKLQkJa2ZyZWUoaGN0eCk7Ci0JfQogfQogCiBzdGF0aWMgaW50IGJsa19tcV9pbml0X2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCkBAIC0xNjAxLDcgKzE2NjMsNiBAQAogCWhjdHgtPnF1ZXVlID0gcTsKIAloY3R4LT5xdWV1ZV9udW0gPSBoY3R4X2lkeDsKIAloY3R4LT5mbGFncyA9IHNldC0+ZmxhZ3M7Ci0JaGN0eC0+Y21kX3NpemUgPSBzZXQtPmNtZF9zaXplOwogCiAJYmxrX21xX2luaXRfY3B1X25vdGlmaWVyKCZoY3R4LT5jcHVfbm90aWZpZXIsCiAJCQkJCWJsa19tcV9oY3R4X25vdGlmeSwgaGN0eCk7CkBAIC0xOTM5LDExICsyMDAwLDkgQEAKIAogCXBlcmNwdV9yZWZfZXhpdCgmcS0+bXFfdXNhZ2VfY291bnRlcik7CiAKLQlmcmVlX3BlcmNwdShxLT5xdWV1ZV9jdHgpOwogCWtmcmVlKHEtPnF1ZXVlX2h3X2N0eCk7CiAJa2ZyZWUocS0+bXFfbWFwKTsKIAotCXEtPnF1ZXVlX2N0eCA9IE5VTEw7CiAJcS0+cXVldWVfaHdfY3R4ID0gTlVMTDsKIAlxLT5tcV9tYXAgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEuaCBiL2Jsb2NrL2Jsay1tcS5oCmluZGV4IDIwNjIzMGUuLjRmNGY5NDMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS5oCisrKyBiL2Jsb2NrL2Jsay1tcS5oCkBAIC0zMiw2ICszMiw3IEBACiB2b2lkIGJsa19tcV9jbG9uZV9mbHVzaF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpmbHVzaF9ycSwKIAkJc3RydWN0IHJlcXVlc3QgKm9yaWdfcnEpOwogaW50IGJsa19tcV91cGRhdGVfbnJfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBucik7Cit2b2lkIGJsa19tcV93YWtlX3dhaXRlcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogCiAvKgogICogQ1BVIGhvdHBsdWcgaGVscGVycwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRpbWVvdXQuYyBiL2Jsb2NrL2Jsay10aW1lb3V0LmMKaW5kZXggNTZjMDI1OC4uMjQ2ZGZiMSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRpbWVvdXQuYworKysgYi9ibG9jay9ibGstdGltZW91dC5jCkBAIC0xOTAsNiArMTkwLDkgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHJlcS0+cTsKIAl1bnNpZ25lZCBsb25nIGV4cGlyeTsKIAorCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9OT19USU1FT1VUKQorCQlyZXR1cm47CisKIAkvKiBibGstbXEgaGFzIGl0cyBvd24gaGFuZGxlciwgc28gd2UgZG9uJ3QgbmVlZCAtPnJxX3RpbWVkX291dF9mbiAqLwogCWlmICghcS0+bXFfb3BzICYmICFxLT5ycV90aW1lZF9vdXRfZm4pCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2NyeXB0by9hZXNfZ2VuZXJpYy5jIGIvY3J5cHRvL2Flc19nZW5lcmljLmMKaW5kZXggOWIzYzU0Yy4uM2RkMTAxMSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Flc19nZW5lcmljLmMKKysrIGIvY3J5cHRvL2Flc19nZW5lcmljLmMKQEAgLTE0NzUsMyArMTQ3NSw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlJpam5kYWVsIChBRVMpIENpcGhlciBBbGdvcml0aG0iKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oImFlcyIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiYWVzLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hZl9hbGcuYyBiL2NyeXB0by9hZl9hbGcuYwppbmRleCAxZmE3YmMzLi40NjY1Yjc5IDEwMDY0NAotLS0gYS9jcnlwdG8vYWZfYWxnLmMKKysrIGIvY3J5cHRvL2FmX2FsZy5jCkBAIC00NTUsNiArNDU1LDkgQEAKIHsKIAlzdHJ1Y3QgYWZfYWxnX2NvbXBsZXRpb24gKmNvbXBsZXRpb24gPSByZXEtPmRhdGE7CiAKKwlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuOworCiAJY29tcGxldGlvbi0+ZXJyID0gZXJyOwogCWNvbXBsZXRlKCZjb21wbGV0aW9uLT5jb21wbGV0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9hbnNpX2Nwcm5nLmMgYi9jcnlwdG8vYW5zaV9jcHJuZy5jCmluZGV4IGI0NDg1YTEuLjZmNWJlYmMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnNpX2Nwcm5nLmMKKysrIGIvY3J5cHRvL2Fuc2lfY3BybmcuYwpAQCAtNDc3LDMgKzQ3Nyw0IEBACiBtb2R1bGVfaW5pdChwcm5nX21vZF9pbml0KTsKIG1vZHVsZV9leGl0KHBybmdfbW9kX2ZpbmkpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygic3Rkcm5nIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJhbnNpX2Nwcm5nIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vYmxvd2Zpc2hfZ2VuZXJpYy5jIGIvY3J5cHRvL2Jsb3dmaXNoX2dlbmVyaWMuYwppbmRleCA3YmQ3MWYwLi44N2IzOTJhIDEwMDY0NAotLS0gYS9jcnlwdG8vYmxvd2Zpc2hfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9ibG93ZmlzaF9nZW5lcmljLmMKQEAgLTEzOSwzICsxMzksNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJCbG93ZmlzaCBDaXBoZXIgQWxnb3JpdGhtIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJibG93ZmlzaCIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiYmxvd2Zpc2gtZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYyBiL2NyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMKaW5kZXggMWI3NGM1YS4uYTAyMjg2YiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYworKysgYi9jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jCkBAIC0xMDk5LDMgKzEwOTksNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDYW1lbGxpYSBDaXBoZXIgQWxnb3JpdGhtIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjYW1lbGxpYSIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiY2FtZWxsaWEtZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q1X2dlbmVyaWMuYyBiL2NyeXB0by9jYXN0NV9nZW5lcmljLmMKaW5kZXggODRjODZkYi4uZGY1YzcyNiAxMDA2NDQKLS0tIGEvY3J5cHRvL2Nhc3Q1X2dlbmVyaWMuYworKysgYi9jcnlwdG8vY2FzdDVfZ2VuZXJpYy5jCkBAIC01NTAsMyArNTUwLDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ2FzdDUgQ2lwaGVyIEFsZ29yaXRobSIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygiY2FzdDUiKTsKK01PRFVMRV9BTElBU19DUllQVE8oImNhc3Q1LWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9jYXN0Nl9nZW5lcmljLmMgYi9jcnlwdG8vY2FzdDZfZ2VuZXJpYy5jCmluZGV4IGY0MDhmMGIuLjA1OGM4ZDcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jYXN0Nl9nZW5lcmljLmMKKysrIGIvY3J5cHRvL2Nhc3Q2X2dlbmVyaWMuYwpAQCAtMjkyLDMgKzI5Miw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNhc3Q2IENpcGhlciBBbGdvcml0aG0iKTsKIE1PRFVMRV9BTElBU19DUllQVE8oImNhc3Q2Iik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjYXN0Ni1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vY3JjMzJjX2dlbmVyaWMuYyBiL2NyeXB0by9jcmMzMmNfZ2VuZXJpYy5jCmluZGV4IDJhMDYyMDIuLjA2ZjFiNjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcmMzMmNfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9jcmMzMmNfZ2VuZXJpYy5jCkBAIC0xNzEsNCArMTcxLDUgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ1JDMzJjIChDYXN0YWdub2xpKSBjYWxjdWxhdGlvbnMgd3JhcHBlciBmb3IgbGliL2NyYzMyYyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygiY3JjMzJjIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjcmMzMmMtZ2VuZXJpYyIpOwogTU9EVUxFX1NPRlRERVAoInByZTogY3JjMzJjIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vY3JjdDEwZGlmX2dlbmVyaWMuYyBiL2NyeXB0by9jcmN0MTBkaWZfZ2VuZXJpYy5jCmluZGV4IDA4YmI0ZjUuLmMxMjI5NjE0IDEwMDY0NAotLS0gYS9jcnlwdG8vY3JjdDEwZGlmX2dlbmVyaWMuYworKysgYi9jcnlwdG8vY3JjdDEwZGlmX2dlbmVyaWMuYwpAQCAtMTI1LDMgKzEyNSw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlQxMCBESUYgQ1JDIGNhbGN1bGF0aW9uLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygiY3JjdDEwZGlmIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjcmN0MTBkaWYtZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rlc19nZW5lcmljLmMgYi9jcnlwdG8vZGVzX2dlbmVyaWMuYwppbmRleCA0MjkxMjk0Li5hNzE3MjA1IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzX2dlbmVyaWMuYworKysgYi9jcnlwdG8vZGVzX2dlbmVyaWMuYwpAQCAtOTgzLDggKzk4Myw2IEBACiAJLmNpYV9kZWNyeXB0CQk9CWRlczNfZWRlX2RlY3J5cHQgfSB9CiB9IH07CiAKLU1PRFVMRV9BTElBU19DUllQVE8oImRlczNfZWRlIik7Ci0KIHN0YXRpYyBpbnQgX19pbml0IGRlc19nZW5lcmljX21vZF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGdzKGRlc19hbGdzLCBBUlJBWV9TSVpFKGRlc19hbGdzKSk7CkBAIC0xMDAxLDQgKzk5OSw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRFUyAmIFRyaXBsZSBERVMgRURFIENpcGhlciBBbGdvcml0aG1zIik7CiBNT0RVTEVfQVVUSE9SKCJEYWcgQXJuZSBPc3ZpayA8ZGFAb3N2aWsubm8+Iik7Ci1NT0RVTEVfQUxJQVMoImRlcyIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiZGVzIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJkZXMtZ2VuZXJpYyIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiZGVzM19lZGUiKTsKK01PRFVMRV9BTElBU19DUllQVE8oImRlczNfZWRlLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9naGFzaC1nZW5lcmljLmMgYi9jcnlwdG8vZ2hhc2gtZ2VuZXJpYy5jCmluZGV4IDRlOTdmYWUuLmJhYzcwOTkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9naGFzaC1nZW5lcmljLmMKKysrIGIvY3J5cHRvL2doYXNoLWdlbmVyaWMuYwpAQCAtMTczLDMgKzE3Myw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdIQVNIIE1lc3NhZ2UgRGlnZXN0IEFsZ29yaXRobSIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygiZ2hhc2giKTsKK01PRFVMRV9BTElBU19DUllQVE8oImdoYXNoLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9rcm5nLmMgYi9jcnlwdG8va3JuZy5jCmluZGV4IDY3Yzg4YjMuLjAyMjQ4NDEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9rcm5nLmMKKysrIGIvY3J5cHRvL2tybmcuYwpAQCAtNjMsMyArNjMsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJLZXJuZWwgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oInN0ZHJuZyIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygia3JuZyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NhbHNhMjBfZ2VuZXJpYy5jIGIvY3J5cHRvL3NhbHNhMjBfZ2VuZXJpYy5jCmluZGV4IDNkMGY5ZGYuLmY1NTBiNWQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zYWxzYTIwX2dlbmVyaWMuYworKysgYi9jcnlwdG8vc2Fsc2EyMF9nZW5lcmljLmMKQEAgLTI0OSwzICsyNDksNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OICgiU2Fsc2EyMCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobSIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygic2Fsc2EyMCIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygic2Fsc2EyMC1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2VycGVudF9nZW5lcmljLmMgYi9jcnlwdG8vc2VycGVudF9nZW5lcmljLmMKaW5kZXggYTUzYjVlMi4uOTQ5NzBhNyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NlcnBlbnRfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9zZXJwZW50X2dlbmVyaWMuYwpAQCAtNjY3LDMgKzY2Nyw0IEBACiBNT0RVTEVfQVVUSE9SKCJEYWcgQXJuZSBPc3ZpayA8b3N2aWtAaWkudWliLm5vPiIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygidG5lcHJlcyIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygic2VycGVudCIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygic2VycGVudC1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhMV9nZW5lcmljLmMgYi9jcnlwdG8vc2hhMV9nZW5lcmljLmMKaW5kZXggMDM5ZTU4Yy4uYTNlNTBjMyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYTFfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9zaGExX2dlbmVyaWMuYwpAQCAtMTU0LDMgKzE1NCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNIQTEgU2VjdXJlIEhhc2ggQWxnb3JpdGhtIik7CiAKIE1PRFVMRV9BTElBU19DUllQVE8oInNoYTEiKTsKK01PRFVMRV9BTElBU19DUllQVE8oInNoYTEtZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMgYi9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYwppbmRleCA1ZWIyMWIxLi5iMDAxZmY1IDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYworKysgYi9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYwpAQCAtMzg1LDQgKzM4NSw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNIQS0yMjQgYW5kIFNIQS0yNTYgU2VjdXJlIEhhc2ggQWxnb3JpdGhtIik7CiAKIE1PRFVMRV9BTElBU19DUllQVE8oInNoYTIyNCIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygic2hhMjI0LWdlbmVyaWMiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oInNoYTI1NiIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygic2hhMjU2LWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGE1MTJfZ2VuZXJpYy5jIGIvY3J5cHRvL3NoYTUxMl9nZW5lcmljLmMKaW5kZXggOGQwYjE5ZS4uMWMzYzM3NiAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYTUxMl9nZW5lcmljLmMKKysrIGIvY3J5cHRvL3NoYTUxMl9nZW5lcmljLmMKQEAgLTI4OSw0ICsyODksNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEEtNTEyIGFuZCBTSEEtMzg0IFNlY3VyZSBIYXNoIEFsZ29yaXRobXMiKTsKIAogTU9EVUxFX0FMSUFTX0NSWVBUTygic2hhMzg0Iik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzaGEzODQtZ2VuZXJpYyIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygic2hhNTEyIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzaGE1MTItZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3RlYS5jIGIvY3J5cHRvL3RlYS5jCmluZGV4IDQ5NWJlMmQuLmI3MGI0NDEgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZWEuYworKysgYi9jcnlwdG8vdGVhLmMKQEAgLTI3MCw2ICsyNzAsNyBAQAogCWNyeXB0b191bnJlZ2lzdGVyX2FsZ3ModGVhX2FsZ3MsIEFSUkFZX1NJWkUodGVhX2FsZ3MpKTsKIH0KIAorTU9EVUxFX0FMSUFTX0NSWVBUTygidGVhIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ4dGVhIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ4ZXRhIik7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by90Z3IxOTIuYyBiL2NyeXB0by90Z3IxOTIuYwppbmRleCA2ZTU2NTFjLi4zMjFiYzZmIDEwMDY0NAotLS0gYS9jcnlwdG8vdGdyMTkyLmMKKysrIGIvY3J5cHRvL3RncjE5Mi5jCkBAIC02NzYsNiArNjc2LDcgQEAKIAljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaGVzKHRncl9hbGdzLCBBUlJBWV9TSVpFKHRncl9hbGdzKSk7CiB9CiAKK01PRFVMRV9BTElBU19DUllQVE8oInRncjE5MiIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygidGdyMTYwIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ0Z3IxMjgiKTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jIGIvY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jCmluZGV4IDUyM2FkOGMuLmViZjdhM2UgMTAwNjQ0Ci0tLSBhL2NyeXB0by90d29maXNoX2dlbmVyaWMuYworKysgYi9jcnlwdG8vdHdvZmlzaF9nZW5lcmljLmMKQEAgLTIxMiwzICsyMTIsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OICgiVHdvZmlzaCBDaXBoZXIgQWxnb3JpdGhtIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ0d29maXNoIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ0d29maXNoLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by93cDUxMi5jIGIvY3J5cHRvL3dwNTEyLmMKaW5kZXggMGRlNDJlYi4uN2VlNWEwNCAxMDA2NDQKLS0tIGEvY3J5cHRvL3dwNTEyLmMKKysrIGIvY3J5cHRvL3dwNTEyLmMKQEAgLTExNjcsNiArMTE2Nyw3IEBACiAJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2hlcyh3cF9hbGdzLCBBUlJBWV9TSVpFKHdwX2FsZ3MpKTsKIH0KIAorTU9EVUxFX0FMSUFTX0NSWVBUTygid3A1MTIiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oIndwMzg0Iik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ3cDI1NiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggNjk0ZDVhNy4uYzcwZDZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtMTM0LDggKzEzNCw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9wbGF0Zm9ybS9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc29jL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9jbGsvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2h3c3BpbmxvY2svS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDY3ZDIzMzQuLjUyN2E2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtNTAsNyArNTAsMTAgQEAKIG9iai15CQkJCSs9IHR0eS8KIG9iai15CQkJCSs9IGNoYXIvCiAKLSMgZ3B1LyBjb21lcyBhZnRlciBjaGFyIGZvciBBR1AgdnMgRFJNIHN0YXJ0dXAKKyMgaW9tbXUvIGNvbWVzIGJlZm9yZSBncHUgYXMgZ3B1IGFyZSB1c2luZyBpb21tdSBjb250cm9sbGVycworb2JqLSQoQ09ORklHX0lPTU1VX1NVUFBPUlQpCSs9IGlvbW11LworCisjIGdwdS8gY29tZXMgYWZ0ZXIgY2hhciBmb3IgQUdQIHZzIERSTSBzdGFydHVwIGFuZCBhZnRlciBpb21tdQogb2JqLXkJCQkJKz0gZ3B1LwogCiBvYmotJChDT05GSUdfQ09OTkVDVE9SKQkJKz0gY29ubmVjdG9yLwpAQCAtMTQxLDcgKzE0NCw2IEBACiAKIG9iai0kKENPTkZJR19NQUlMQk9YKQkJKz0gbWFpbGJveC8KIG9iai0kKENPTkZJR19IV1NQSU5MT0NLKQkrPSBod3NwaW5sb2NrLwotb2JqLSQoQ09ORklHX0lPTU1VX1NVUFBPUlQpCSs9IGlvbW11Lwogb2JqLSQoQ09ORklHX1JFTU9URVBST0MpCSs9IHJlbW90ZXByb2MvCiBvYmotJChDT05GSUdfUlBNU0cpCQkrPSBycG1zZy8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9wcm9jZXNzb3IuYwppbmRleCAxZmRmNWUwLi4xMDIwYjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9wcm9jZXNzb3IuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9wcm9jZXNzb3IuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWludCByZXQ7CiAKLQlpZiAocHItPmFwaWNfaWQgPT0gLTEpCisJaWYgKHByLT5waHlzX2lkID09IC0xKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihwci0+aGFuZGxlLCAiX1NUQSIsIE5VTEwsICZzdGEpOwpAQCAtMTgwLDEzICsxODAsMTMgQEAKIAljcHVfbWFwc191cGRhdGVfYmVnaW4oKTsKIAljcHVfaG90cGx1Z19iZWdpbigpOwogCi0JcmV0ID0gYWNwaV9tYXBfbHNhcGljKHByLT5oYW5kbGUsIHByLT5hcGljX2lkLCAmcHItPmlkKTsKKwlyZXQgPSBhY3BpX21hcF9jcHUocHItPmhhbmRsZSwgcHItPnBoeXNfaWQsICZwci0+aWQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gYXJjaF9yZWdpc3Rlcl9jcHUocHItPmlkKTsKIAlpZiAocmV0KSB7Ci0JCWFjcGlfdW5tYXBfbHNhcGljKHByLT5pZCk7CisJCWFjcGlfdW5tYXBfY3B1KHByLT5pZCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjE1LDcgKzIxNSw3IEBACiAJdW5pb24gYWNwaV9vYmplY3Qgb2JqZWN0ID0geyAwIH07CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KSwgJm9iamVjdCB9OwogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JaW50IGFwaWNfaWQsIGNwdV9pbmRleCwgZGV2aWNlX2RlY2xhcmF0aW9uID0gMDsKKwlpbnQgcGh5c19pZCwgY3B1X2luZGV4LCBkZXZpY2VfZGVjbGFyYXRpb24gPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0YXRpYyBpbnQgY3B1MF9pbml0aWFsaXplZDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CkBAIC0yNjIsMTUgKzI2MiwxOCBAQAogCQlwci0+YWNwaV9pZCA9IHZhbHVlOwogCX0KIAotCWFwaWNfaWQgPSBhY3BpX2dldF9hcGljaWQocHItPmhhbmRsZSwgZGV2aWNlX2RlY2xhcmF0aW9uLCBwci0+YWNwaV9pZCk7Ci0JaWYgKGFwaWNfaWQgPCAwKQotCQlhY3BpX2hhbmRsZV9kZWJ1Zyhwci0+aGFuZGxlLCAiZmFpbGVkIHRvIGdldCBDUFUgQVBJQyBJRC5cbiIpOwotCXByLT5hcGljX2lkID0gYXBpY19pZDsKKwlwaHlzX2lkID0gYWNwaV9nZXRfcGh5c19pZChwci0+aGFuZGxlLCBkZXZpY2VfZGVjbGFyYXRpb24sIHByLT5hY3BpX2lkKTsKKwlpZiAocGh5c19pZCA8IDApCisJCWFjcGlfaGFuZGxlX2RlYnVnKHByLT5oYW5kbGUsICJmYWlsZWQgdG8gZ2V0IENQVSBwaHlzaWNhbCBJRC5cbiIpOworCXByLT5waHlzX2lkID0gcGh5c19pZDsKIAotCWNwdV9pbmRleCA9IGFjcGlfbWFwX2NwdWlkKHByLT5hcGljX2lkLCBwci0+YWNwaV9pZCk7CisJY3B1X2luZGV4ID0gYWNwaV9tYXBfY3B1aWQocHItPnBoeXNfaWQsIHByLT5hY3BpX2lkKTsKIAlpZiAoIWNwdTBfaW5pdGlhbGl6ZWQgJiYgIWFjcGlfaGFzX2NwdV9pbl9tYWR0KCkpIHsKIAkJY3B1MF9pbml0aWFsaXplZCA9IDE7Ci0JCS8qIEhhbmRsZSBVUCBzeXN0ZW0gcnVubmluZyBTTVAga2VybmVsLCB3aXRoIG5vIExBUElDIGluIE1BRFQgKi8KKwkJLyoKKwkJICogSGFuZGxlIFVQIHN5c3RlbSBydW5uaW5nIFNNUCBrZXJuZWwsIHdpdGggbm8gQ1BVCisJCSAqIGVudHJ5IGluIE1BRFQKKwkJICovCiAJCWlmICgoY3B1X2luZGV4ID09IC0xKSAmJiAobnVtX29ubGluZV9jcHVzKCkgPT0gMSkpCiAJCQljcHVfaW5kZXggPSAwOwogCX0KQEAgLTQ1OCw3ICs0NjEsNyBAQAogCiAJLyogUmVtb3ZlIHRoZSBDUFUuICovCiAJYXJjaF91bnJlZ2lzdGVyX2NwdShwci0+aWQpOwotCWFjcGlfdW5tYXBfbHNhcGljKHByLT5pZCk7CisJYWNwaV91bm1hcF9jcHUocHItPmlkKTsKIAogCWNwdV9ob3RwbHVnX2RvbmUoKTsKIAljcHVfbWFwc191cGRhdGVfZG9uZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RldmljZV9wbS5jIGIvZHJpdmVycy9hY3BpL2RldmljZV9wbS5jCmluZGV4IGMyZGFhODUuLmMwZDQ0ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kZXZpY2VfcG0uYworKysgYi9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCiAJZGV2aWNlLT5wb3dlci5zdGF0ZSA9IEFDUElfU1RBVEVfVU5LTk9XTjsKIAlpZiAoIWFjcGlfZGV2aWNlX2lzX3ByZXNlbnQoZGV2aWNlKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5YSU87CiAKIAlyZXN1bHQgPSBhY3BpX2RldmljZV9nZXRfcG93ZXIoZGV2aWNlLCAmc3RhdGUpOwogCWlmIChyZXN1bHQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaW50MzQweF90aGVybWFsLmMgYi9kcml2ZXJzL2FjcGkvaW50MzQweF90aGVybWFsLmMKaW5kZXggYTI3ZDMxZC4uOWRjZjgzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2ludDM0MHhfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9pbnQzNDB4X3RoZXJtYWwuYwpAQCAtMTQsMTAgKzE0LDEwIEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi0jZGVmaW5lIERPX0VOVU1FUkFUSU9OIDB4MDEKKyNkZWZpbmUgSU5UMzQwMV9ERVZJQ0UgMFgwMQogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBpbnQzNDB4X3RoZXJtYWxfZGV2aWNlX2lkc1tdID0gewotCXsiSU5UMzQwMCIsIERPX0VOVU1FUkFUSU9OIH0sCi0JeyJJTlQzNDAxIn0sCisJeyJJTlQzNDAwIn0sCisJeyJJTlQzNDAxIiwgSU5UMzQwMV9ERVZJQ0V9LAogCXsiSU5UMzQwMiJ9LAogCXsiSU5UMzQwMyJ9LAogCXsiSU5UMzQwNCJ9LApAQCAtMzQsNyArMzQsMTAgQEAKIAkJCQkJY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19JTlQzNDBYX1RIRVJNQUwpIHx8IGRlZmluZWQoQ09ORklHX0lOVDM0MFhfVEhFUk1BTF9NT0RVTEUpCi0JaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSBET19FTlVNRVJBVElPTikKKwlhY3BpX2NyZWF0ZV9wbGF0Zm9ybV9kZXZpY2UoYWRldik7CisjZWxpZiBkZWZpbmVkKElOVEVMX1NPQ19EVFNfVEhFUk1BTCkgfHwgZGVmaW5lZChJTlRFTF9TT0NfRFRTX1RIRVJNQUxfTU9EVUxFKQorCS8qIEludGVsIFNvQyBEVFMgdGhlcm1hbCBkcml2ZXIgbmVlZHMgSU5UMzQwMSB0byBzZXQgSVJRIGRlc2NyaXB0b3IgKi8KKwlpZiAoaWQtPmRyaXZlcl9kYXRhID09IElOVDM0MDFfREVWSUNFKQogCQlhY3BpX2NyZWF0ZV9wbGF0Zm9ybV9kZXZpY2UoYWRldik7CiAjZW5kaWYKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMgYi9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCmluZGV4IDUyNzdhMGUuLmIxZGVmNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9pcnEuYwpAQCAtNTEyLDcgKzUxMiw2IEBACiAJZGV2X2RiZygmZGV2LT5kZXYsICJQQ0kgSU5UICVjIGRpc2FibGVkXG4iLCBwaW5fbmFtZShwaW4pKTsKIAlpZiAoZ3NpID49IDApIHsKIAkJYWNwaV91bnJlZ2lzdGVyX2dzaShnc2kpOwotCQlkZXYtPmlycSA9IDA7CiAJCWRldi0+aXJxX21hbmFnZWQgPSAwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggMzQyOTQyZi4uMDJlNDgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1hZHRfZW5kLCBlbnRyeTsKIAlzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqbWFkdDsKIAlzdGF0aWMgaW50IHJlYWRfbWFkdDsKLQlpbnQgYXBpY19pZCA9IC0xOworCWludCBwaHlzX2lkID0gLTE7CS8qIENQVSBoYXJkd2FyZSBJRCAqLwogCiAJaWYgKCFyZWFkX21hZHQpIHsKIAkJaWYgKEFDUElfRkFJTFVSRShhY3BpX2dldF90YWJsZShBQ1BJX1NJR19NQURULCAwLApAQCAtNzksNyArNzksNyBAQAogCX0KIAogCWlmICghbWFkdCkKLQkJcmV0dXJuIGFwaWNfaWQ7CisJCXJldHVybiBwaHlzX2lkOwogCiAJZW50cnkgPSAodW5zaWduZWQgbG9uZyltYWR0OwogCW1hZHRfZW5kID0gZW50cnkgKyBtYWR0LT5oZWFkZXIubGVuZ3RoOwpAQCAtOTEsMTggKzkxLDE4IEBACiAJCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyID0KIAkJCShzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKillbnRyeTsKIAkJaWYgKGhlYWRlci0+dHlwZSA9PSBBQ1BJX01BRFRfVFlQRV9MT0NBTF9BUElDKSB7Ci0JCQlpZiAoIW1hcF9sYXBpY19pZChoZWFkZXIsIGFjcGlfaWQsICZhcGljX2lkKSkKKwkJCWlmICghbWFwX2xhcGljX2lkKGhlYWRlciwgYWNwaV9pZCwgJnBoeXNfaWQpKQogCQkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKGhlYWRlci0+dHlwZSA9PSBBQ1BJX01BRFRfVFlQRV9MT0NBTF9YMkFQSUMpIHsKLQkJCWlmICghbWFwX3gyYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZhcGljX2lkKSkKKwkJCWlmICghbWFwX3gyYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZwaHlzX2lkKSkKIAkJCQlicmVhazsKIAkJfSBlbHNlIGlmIChoZWFkZXItPnR5cGUgPT0gQUNQSV9NQURUX1RZUEVfTE9DQUxfU0FQSUMpIHsKLQkJCWlmICghbWFwX2xzYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZhcGljX2lkKSkKKwkJCWlmICghbWFwX2xzYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZwaHlzX2lkKSkKIAkJCQlicmVhazsKIAkJfQogCQllbnRyeSArPSBoZWFkZXItPmxlbmd0aDsKIAl9Ci0JcmV0dXJuIGFwaWNfaWQ7CisJcmV0dXJuIHBoeXNfaWQ7CiB9CiAKIHN0YXRpYyBpbnQgbWFwX21hdF9lbnRyeShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlLCB1MzIgYWNwaV9pZCkKQEAgLTExMCw3ICsxMTAsNyBAQAogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlcjsKLQlpbnQgYXBpY19pZCA9IC0xOworCWludCBwaHlzX2lkID0gLTE7CiAKIAlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9NQVQiLCBOVUxMLCAmYnVmZmVyKSkpCiAJCWdvdG8gZXhpdDsKQEAgLTEyNiwzOCArMTI2LDM4IEBACiAKIAloZWFkZXIgPSAoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKIAlpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0xPQ0FMX0FQSUMpCi0JCW1hcF9sYXBpY19pZChoZWFkZXIsIGFjcGlfaWQsICZhcGljX2lkKTsKKwkJbWFwX2xhcGljX2lkKGhlYWRlciwgYWNwaV9pZCwgJnBoeXNfaWQpOwogCWVsc2UgaWYgKGhlYWRlci0+dHlwZSA9PSBBQ1BJX01BRFRfVFlQRV9MT0NBTF9TQVBJQykKLQkJbWFwX2xzYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZhcGljX2lkKTsKKwkJbWFwX2xzYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZwaHlzX2lkKTsKIAllbHNlIGlmIChoZWFkZXItPnR5cGUgPT0gQUNQSV9NQURUX1RZUEVfTE9DQUxfWDJBUElDKQotCQltYXBfeDJhcGljX2lkKGhlYWRlciwgdHlwZSwgYWNwaV9pZCwgJmFwaWNfaWQpOworCQltYXBfeDJhcGljX2lkKGhlYWRlciwgdHlwZSwgYWNwaV9pZCwgJnBoeXNfaWQpOwogCiBleGl0OgogCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKLQlyZXR1cm4gYXBpY19pZDsKKwlyZXR1cm4gcGh5c19pZDsKIH0KIAotaW50IGFjcGlfZ2V0X2FwaWNpZChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlLCB1MzIgYWNwaV9pZCkKK2ludCBhY3BpX2dldF9waHlzX2lkKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHR5cGUsIHUzMiBhY3BpX2lkKQogewotCWludCBhcGljX2lkOworCWludCBwaHlzX2lkOwogCi0JYXBpY19pZCA9IG1hcF9tYXRfZW50cnkoaGFuZGxlLCB0eXBlLCBhY3BpX2lkKTsKLQlpZiAoYXBpY19pZCA9PSAtMSkKLQkJYXBpY19pZCA9IG1hcF9tYWR0X2VudHJ5KHR5cGUsIGFjcGlfaWQpOworCXBoeXNfaWQgPSBtYXBfbWF0X2VudHJ5KGhhbmRsZSwgdHlwZSwgYWNwaV9pZCk7CisJaWYgKHBoeXNfaWQgPT0gLTEpCisJCXBoeXNfaWQgPSBtYXBfbWFkdF9lbnRyeSh0eXBlLCBhY3BpX2lkKTsKIAotCXJldHVybiBhcGljX2lkOworCXJldHVybiBwaHlzX2lkOwogfQogCi1pbnQgYWNwaV9tYXBfY3B1aWQoaW50IGFwaWNfaWQsIHUzMiBhY3BpX2lkKQoraW50IGFjcGlfbWFwX2NwdWlkKGludCBwaHlzX2lkLCB1MzIgYWNwaV9pZCkKIHsKICNpZmRlZiBDT05GSUdfU01QCiAJaW50IGk7CiAjZW5kaWYKIAotCWlmIChhcGljX2lkID09IC0xKSB7CisJaWYgKHBoeXNfaWQgPT0gLTEpIHsKIAkJLyoKIAkJICogT24gVVAgcHJvY2Vzc29yLCB0aGVyZSBpcyBubyBfTUFUIG9yIE1BRFQgdGFibGUuCi0JCSAqIFNvIGFib3ZlIGFwaWNfaWQgaXMgYWx3YXlzIHNldCB0byAtMS4KKwkJICogU28gYWJvdmUgcGh5c19pZCBpcyBhbHdheXMgc2V0IHRvIC0xLgogCQkgKgogCQkgKiBCSU9TIG1heSBkZWZpbmUgbXVsdGlwbGUgQ1BVIGhhbmRsZXMgZXZlbiBmb3IgVVAgcHJvY2Vzc29yLgogCQkgKiBGb3IgZXhhbXBsZSwKQEAgLTE3MCw3ICsxNzAsNyBAQAogCQkgKiAgICAgUHJvY2Vzc29yIChDUFUzLCAweDAzLCAweDAwMDAwNDEwLCAweDA2KSB7fQogCQkgKiB9CiAJCSAqCi0JCSAqIElnbm9yZXMgYXBpY19pZCBhbmQgYWx3YXlzIHJldHVybnMgMCBmb3IgdGhlIHByb2Nlc3NvcgorCQkgKiBJZ25vcmVzIHBoeXNfaWQgYW5kIGFsd2F5cyByZXR1cm5zIDAgZm9yIHRoZSBwcm9jZXNzb3IKIAkJICogaGFuZGxlIHdpdGggYWNwaSBpZCAwIGlmIG5yX2NwdV9pZHMgaXMgMS4KIAkJICogVGhpcyBzaG91bGQgYmUgdGhlIGNhc2UgaWYgU01QIHRhYmxlcyBhcmUgbm90IGZvdW5kLgogCQkgKiBSZXR1cm4gLTEgZm9yIG90aGVyIENQVSdzIGhhbmRsZS4KQEAgLTE3OCwyOCArMTc4LDI4IEBACiAJCWlmIChucl9jcHVfaWRzIDw9IDEgJiYgYWNwaV9pZCA9PSAwKQogCQkJcmV0dXJuIGFjcGlfaWQ7CiAJCWVsc2UKLQkJCXJldHVybiBhcGljX2lkOworCQkJcmV0dXJuIHBoeXNfaWQ7CiAJfQogCiAjaWZkZWYgQ09ORklHX1NNUAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWlmIChjcHVfcGh5c2ljYWxfaWQoaSkgPT0gYXBpY19pZCkKKwkJaWYgKGNwdV9waHlzaWNhbF9pZChpKSA9PSBwaHlzX2lkKQogCQkJcmV0dXJuIGk7CiAJfQogI2Vsc2UKIAkvKiBJbiBVUCBrZXJuZWwsIG9ubHkgcHJvY2Vzc29yIDAgaXMgdmFsaWQgKi8KLQlpZiAoYXBpY19pZCA9PSAwKQotCQlyZXR1cm4gYXBpY19pZDsKKwlpZiAocGh5c19pZCA9PSAwKQorCQlyZXR1cm4gcGh5c19pZDsKICNlbmRpZgogCXJldHVybiAtMTsKIH0KIAogaW50IGFjcGlfZ2V0X2NwdWlkKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHR5cGUsIHUzMiBhY3BpX2lkKQogewotCWludCBhcGljX2lkOworCWludCBwaHlzX2lkOwogCi0JYXBpY19pZCA9IGFjcGlfZ2V0X2FwaWNpZChoYW5kbGUsIHR5cGUsIGFjcGlfaWQpOworCXBoeXNfaWQgPSBhY3BpX2dldF9waHlzX2lkKGhhbmRsZSwgdHlwZSwgYWNwaV9pZCk7CiAKLQlyZXR1cm4gYWNwaV9tYXBfY3B1aWQoYXBpY19pZCwgYWNwaV9pZCk7CisJcmV0dXJuIGFjcGlfbWFwX2NwdWlkKHBoeXNfaWQsIGFjcGlfaWQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9nZXRfY3B1aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCA0OTk1MzY1Li44N2I3MDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtOTg1LDggKzk4NSw2IEBACiAJCXN0YXRlLT5mbGFncyA9IDA7CiAJCXN3aXRjaCAoY3gtPnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9TVEFURV9DMToKLQkJCWlmIChjeC0+ZW50cnlfbWV0aG9kICE9IEFDUElfQ1NUQVRFX0ZGSCkKLQkJCQlzdGF0ZS0+ZmxhZ3MgfD0gQ1BVSURMRV9GTEFHX1RJTUVfSU5WQUxJRDsKIAogCQkJc3RhdGUtPmVudGVyID0gYWNwaV9pZGxlX2VudGVyX2MxOwogCQkJc3RhdGUtPmVudGVyX2RlYWQgPSBhY3BpX2lkbGVfcGxheV9kZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggMTY5MTRjYy4uZGM0ZDg5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC0xMDAxLDcgKzEwMDEsNyBAQAogCWlmIChkZXZpY2UtPndha2V1cC5mbGFncy52YWxpZCkKIAkJYWNwaV9wb3dlcl9yZXNvdXJjZXNfbGlzdF9mcmVlKCZkZXZpY2UtPndha2V1cC5yZXNvdXJjZXMpOwogCi0JaWYgKCFkZXZpY2UtPmZsYWdzLnBvd2VyX21hbmFnZWFibGUpCisJaWYgKCFkZXZpY2UtPnBvd2VyLmZsYWdzLnBvd2VyX3Jlc291cmNlcykKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gQUNQSV9TVEFURV9EMDsgaSA8PSBBQ1BJX1NUQVRFX0QzX0hPVDsgaSsrKSB7CkBAIC0xNzQ0LDEwICsxNzQ0LDggQEAKIAkJCWRldmljZS0+cG93ZXIuZmxhZ3MucG93ZXJfcmVzb3VyY2VzKQogCQlkZXZpY2UtPnBvd2VyLnN0YXRlc1tBQ1BJX1NUQVRFX0QzX0NPTERdLmZsYWdzLm9zX2FjY2Vzc2libGUgPSAxOwogCi0JaWYgKGFjcGlfYnVzX2luaXRfcG93ZXIoZGV2aWNlKSkgewotCQlhY3BpX2ZyZWVfcG93ZXJfcmVzb3VyY2VzX2xpc3RzKGRldmljZSk7CisJaWYgKGFjcGlfYnVzX2luaXRfcG93ZXIoZGV2aWNlKSkKIAkJZGV2aWNlLT5mbGFncy5wb3dlcl9tYW5hZ2VhYmxlID0gMDsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGFjcGlfYnVzX2dldF9mbGFncyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKQEAgLTIzNzEsMTMgKzIzNjksMTggQEAKIAkvKiBTa2lwIGRldmljZXMgdGhhdCBhcmUgbm90IHByZXNlbnQuICovCiAJaWYgKCFhY3BpX2RldmljZV9pc19wcmVzZW50KGRldmljZSkpIHsKIAkJZGV2aWNlLT5mbGFncy52aXNpdGVkID0gZmFsc2U7CisJCWRldmljZS0+ZmxhZ3MucG93ZXJfbWFuYWdlYWJsZSA9IDA7CiAJCXJldHVybjsKIAl9CiAJaWYgKGRldmljZS0+aGFuZGxlcikKIAkJZ290byBvazsKIAogCWlmICghZGV2aWNlLT5mbGFncy5pbml0aWFsaXplZCkgewotCQlhY3BpX2J1c191cGRhdGVfcG93ZXIoZGV2aWNlLCBOVUxMKTsKKwkJZGV2aWNlLT5mbGFncy5wb3dlcl9tYW5hZ2VhYmxlID0KKwkJCWRldmljZS0+cG93ZXIuc3RhdGVzW0FDUElfU1RBVEVfRDBdLmZsYWdzLnZhbGlkOworCQlpZiAoYWNwaV9idXNfaW5pdF9wb3dlcihkZXZpY2UpKQorCQkJZGV2aWNlLT5mbGFncy5wb3dlcl9tYW5hZ2VhYmxlID0gMDsKKwogCQlkZXZpY2UtPmZsYWdzLmluaXRpYWxpemVkID0gdHJ1ZTsKIAl9CiAJZGV2aWNlLT5mbGFncy52aXNpdGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW8uYyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCmluZGV4IDFlYWFkZmYuLjAzMmRiNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlby5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCkBAIC01MDUsNiArNTA1LDMzIEBACiAJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgRU5WWSAxNSBOb3RlYm9vayBQQyIpLAogCQl9LAogCX0sCisKKwl7CisJIC5jYWxsYmFjayA9IHZpZGVvX2Rpc2FibGVfbmF0aXZlX2JhY2tsaWdodCwKKwkgLmlkZW50ID0gIlNBTVNVTkcgODcwWjVFLzg4MFo1RS82ODBaNUUiLAorCSAubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICI4NzBaNUUvODgwWjVFLzY4MFo1RSIpLAorCQl9LAorCX0sCisJeworCSAuY2FsbGJhY2sgPSB2aWRlb19kaXNhYmxlX25hdGl2ZV9iYWNrbGlnaHQsCisJIC5pZGVudCA9ICJTQU1TVU5HIDM3MFI0RS8zNzBSNFYvMzcwUjVFLzM1NzBSRS8zNzBSNVYiLAorCSAubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICIzNzBSNEUvMzcwUjRWLzM3MFI1RS8zNTcwUkUvMzcwUjVWIiksCisJCX0sCisJfSwKKworCXsKKwkgLyogaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMTYzNTc0ICovCisJIC5jYWxsYmFjayA9IHZpZGVvX2Rpc2FibGVfbmF0aXZlX2JhY2tsaWdodCwKKwkgLmlkZW50ID0gIkRlbGwgWFBTMTUgTDUyMVgiLAorCSAubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiWFBTIEw1MjFYIiksCisJCX0sCisJfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvS2NvbmZpZyBiL2RyaXZlcnMvYXRhL0tjb25maWcKaW5kZXggYTNhMTM2MC4uNWY2MDE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC04MzUsNiArODM1LDcgQEAKIGNvbmZpZyBQQVRBX0FUOTEKIAl0cmlzdGF0ZSAiUEFUQSBzdXBwb3J0IGZvciBBVDkxU0FNOTI2MCIKIAlkZXBlbmRzIG9uIEFSTSAmJiBTT0NfQVQ5MVNBTTkKKwlkZXBlbmRzIG9uICFBUkNIX01VTFRJUExBVEZPUk0KIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIElERSBkZXZpY2VzIG9uIHRoZSBBdG1lbCBBVDkxU0FNOTI2MCBTb0MuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCA0OWYxZTY4Li4zM2JiMDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0zMjUsNyArMzI1LDYgQEAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDlkMDUpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtTFAgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4OWQwNyksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1MUCBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTAzKSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUggQUhDSSAqLwotCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4YTEwMyksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1IIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExMDUpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtSCBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTA3KSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUggUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4YTEwZiksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1IIFJBSUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2lfeGdlbmUuYyBiL2RyaXZlcnMvYXRhL2FoY2lfeGdlbmUuYwppbmRleCBmZWViOGYxLi5jYmNkMjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpX3hnZW5lLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaV94Z2VuZS5jCkBAIC0xMjUsMTAgKzEyNSwxMSBAQAogICogeGdlbmVfYWhjaV9xY19pc3N1ZSAtIElzc3VlIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UKICAqIEBxYzogQ29tbWFuZCB0byBpc3N1ZQogICoKLSAqIER1ZSB0byBIYXJkd2FyZSBlcnJhdGEgZm9yIElERU5USUZZIERFVklDRSBjb21tYW5kLCB0aGUgY29udHJvbGxlciBjYW5ub3QKLSAqIGNsZWFyIHRoZSBCU1kgYml0IGFmdGVyIHJlY2VpdmluZyB0aGUgUElPIHNldHVwIEZJUy4gVGhpcyByZXN1bHRzIGluIHRoZSBkbWEKLSAqIHN0YXRlIG1hY2hpbmUgZ29lcyBpbnRvIHRoZSBDTUZhdGFsRXJyb3JVcGRhdGUgc3RhdGUgYW5kIGxvY2tzIHVwLiBCeQotICogcmVzdGFydGluZyB0aGUgZG1hIGVuZ2luZSwgaXQgcmVtb3ZlcyB0aGUgY29udHJvbGxlciBvdXQgb2YgbG9jayB1cCBzdGF0ZS4KKyAqIER1ZSB0byBIYXJkd2FyZSBlcnJhdGEgZm9yIElERU5USUZZIERFVklDRSBjb21tYW5kIGFuZCBQQUNLRVQKKyAqIGNvbW1hbmQgb2YgQVRBUEkgcHJvdG9jb2wgc2V0LCB0aGUgY29udHJvbGxlciBjYW5ub3QgY2xlYXIgdGhlIEJTWSBiaXQKKyAqIGFmdGVyIHJlY2VpdmluZyB0aGUgUElPIHNldHVwIEZJUy4gVGhpcyByZXN1bHRzIGluIHRoZSBETUEgc3RhdGUgbWFjaGluZQorICogZ29pbmcgaW50byB0aGUgQ01GYXRhbEVycm9yVXBkYXRlIHN0YXRlIGFuZCBsb2NrcyB1cC4gQnkgcmVzdGFydGluZyB0aGUKKyAqIERNQSBlbmdpbmUsIGl0IHJlbW92ZXMgdGhlIGNvbnRyb2xsZXIgb3V0IG9mIGxvY2sgdXAgc3RhdGUuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgeGdlbmVfYWhjaV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewpAQCAtMTM3LDcgKzEzOCw4IEBACiAJc3RydWN0IHhnZW5lX2FoY2lfY29udGV4dCAqY3R4ID0gaHByaXYtPnBsYXRfZGF0YTsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKHVubGlrZWx5KGN0eC0+bGFzdF9jbWRbYXAtPnBvcnRfbm9dID09IEFUQV9DTURfSURfQVRBKSkKKwlpZiAodW5saWtlbHkoKGN0eC0+bGFzdF9jbWRbYXAtPnBvcnRfbm9dID09IEFUQV9DTURfSURfQVRBKSB8fAorCSAgICAoY3R4LT5sYXN0X2NtZFthcC0+cG9ydF9ub10gPT0gQVRBX0NNRF9QQUNLRVQpKSkKIAkJeGdlbmVfYWhjaV9yZXN0YXJ0X2VuZ2luZShhcCk7CiAKIAlyYyA9IGFoY2lfcWNfaXNzdWUocWMpOwpAQCAtMTg4LDcgKzE5MCw3IEBACiAJICoKIAkgKiBDbGVhciByZXNlcnZlZCBiaXQgOCAoREVWU0xQIGJpdCkgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBERVZTTFAKIAkgKi8KLQlpZFtBVEFfSURfRkVBVFVSRV9TVVBQXSAmPSB+KDEgPDwgOCk7CisJaWRbQVRBX0lEX0ZFQVRVUkVfU1VQUF0gJj0gY3B1X3RvX2xlMTYofigxIDw8IDgpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYWhjaS5jIGIvZHJpdmVycy9hdGEvbGliYWhjaS5jCmluZGV4IDk3NjgzZTQuLjYxYTljMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmFoY2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhaGNpLmMKQEAgLTIwMDMsNyArMjAwMyw3IEBACiAKIAlkZXZzbHAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0RFVlNMUCk7CiAJaWYgKCEoZGV2c2xwICYgUE9SVF9ERVZTTFBfRFNQKSkgewotCQlkZXZfZXJyKGFwLT5ob3N0LT5kZXYsICJwb3J0IGRvZXMgbm90IHN1cHBvcnQgZGV2aWNlIHNsZWVwXG4iKTsKKwkJZGV2X2luZm8oYXAtPmhvc3QtPmRldiwgInBvcnQgZG9lcyBub3Qgc3VwcG9ydCBkZXZpY2Ugc2xlZXBcbiIpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCA1Yzg0ZmI1Li5kMWEwNWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTQyMzMsMTAgKzQyMzMsMzMgQEAKIAl7ICJQSU9ORUVSIERWRC1SVyAgRFZSLTIxNkQiLAlOVUxMLAlBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKIAogCS8qIGRldmljZXMgdGhhdCBkb24ndCBwcm9wZXJseSBoYW5kbGUgcXVldWVkIFRSSU0gY29tbWFuZHMgKi8KLQl7ICJNaWNyb25fTTUwMCoiLAkJTlVMTCwJQVRBX0hPUktBR0VfTk9fTkNRX1RSSU0sIH0sCi0JeyAiQ3J1Y2lhbF9DVD8/P001MDBTU0QqIiwJTlVMTCwJQVRBX0hPUktBR0VfTk9fTkNRX1RSSU0sIH0sCi0JeyAiTWljcm9uX001NTAqIiwJCU5VTEwsCUFUQV9IT1JLQUdFX05PX05DUV9UUklNLCB9LAotCXsgIkNydWNpYWxfQ1QqTTU1MFNTRCoiLAlOVUxMLAlBVEFfSE9SS0FHRV9OT19OQ1FfVFJJTSwgfSwKKwl7ICJNaWNyb25fTVs1Nl0qIiwJCU5VTEwsCUFUQV9IT1JLQUdFX05PX05DUV9UUklNIHwKKwkJCQkJCUFUQV9IT1JLQUdFX1pFUk9fQUZURVJfVFJJTSwgfSwKKwl7ICJDcnVjaWFsX0NUKlNTRCoiLAkJTlVMTCwJQVRBX0hPUktBR0VfTk9fTkNRX1RSSU0sIH0sCisKKwkvKgorCSAqIEFzIGRlZmluZWQsIHRoZSBEUkFUIChEZXRlcm1pbmlzdGljIFJlYWQgQWZ0ZXIgVHJpbSkgYW5kIFJaQVQKKwkgKiAoUmV0dXJuIFplcm8gQWZ0ZXIgVHJpbSkgZmxhZ3MgaW4gdGhlIEFUQSBDb21tYW5kIFNldCBhcmUKKwkgKiB1bnJlbGlhYmxlIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgb25seSBkZWZpbmUgd2hhdCBoYXBwZW5zIGlmCisJICogdGhlIGRldmljZSBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQgdGhlIERTTSBUUklNIGNvbW1hbmQuIFRSSU0KKwkgKiBpcyBvbmx5IGFkdmlzb3J5LCBob3dldmVyLCBhbmQgdGhlIGRldmljZSBpcyBmcmVlIHRvIHNpbGVudGx5CisJICogaWdub3JlIGFsbCBvciBwYXJ0cyBvZiB0aGUgcmVxdWVzdC4KKwkgKgorCSAqIFdoaXRlbGlzdCBkcml2ZXMgdGhhdCBhcmUga25vd24gdG8gcmVsaWFibHkgcmV0dXJuIHplcm9lcworCSAqIGFmdGVyIFRSSU0uCisJICovCisKKwkvKgorCSAqIFRoZSBpbnRlbCA1MTAgZHJpdmUgaGFzIGJ1Z2d5IERSQVQvUlpBVC4gRXhwbGljaXRseSBleGNsdWRlCisJICogdGhhdCBtb2RlbCBiZWZvcmUgd2hpdGVsaXN0aW5nIGFsbCBvdGhlciBpbnRlbCBTU0RzLgorCSAqLworCXsgIklOVEVMKlNTRFNDMk1IKiIsCQlOVUxMLAkwLCB9LAorCisJeyAiSU5URUwqU1NEKiIsIAkJTlVMTCwJQVRBX0hPUktBR0VfWkVST19BRlRFUl9UUklNLCB9LAorCXsgIlNTRCpJTlRFTCoiLAkJCU5VTEwsCUFUQV9IT1JLQUdFX1pFUk9fQUZURVJfVFJJTSwgfSwKKwl7ICJTYW1zdW5nKlNTRCoiLAkJTlVMTCwJQVRBX0hPUktBR0VfWkVST19BRlRFUl9UUklNLCB9LAorCXsgIlNBTVNVTkcqU1NEKiIsCQlOVUxMLAlBVEFfSE9SS0FHRV9aRVJPX0FGVEVSX1RSSU0sIH0sCisJeyAiU1RbMTI0OF1bMDI0OF0wW0ZIXSoiLAlOVUxMLAlBVEFfSE9SS0FHRV9aRVJPX0FGVEVSX1RSSU0sIH0sCiAKIAkvKgogCSAqIFNvbWUgV0QgU0FUQS1JIGRyaXZlcyBzcGluIHVwIGFuZCBkb3duIGVycmF0aWNhbGx5IHdoZW4gdGhlIGxpbmsKQEAgLTQ3NDgsNyArNDc3MSwxMCBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWZvciAoaSA9IDAsIHRhZyA9IGFwLT5sYXN0X3RhZyArIDE7IGkgPCBtYXhfcXVldWU7IGkrKywgdGFnKyspIHsKLQkJdGFnID0gdGFnIDwgbWF4X3F1ZXVlID8gdGFnIDogMDsKKwkJaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX0xPV1RBRykKKwkJCXRhZyA9IGk7CisJCWVsc2UKKwkJCXRhZyA9IHRhZyA8IG1heF9xdWV1ZSA/IHRhZyA6IDA7CiAKIAkJLyogdGhlIGxhc3QgdGFnIGlzIHJlc2VydmVkIGZvciBpbnRlcm5hbCBjb21tYW5kLiAqLwogCQlpZiAodGFnID09IEFUQV9UQUdfSU5URVJOQUwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IDNkYmVjODkuLjhkMDBjMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0yMzg5LDYgKzIzODksNyBAQAogCiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfZ2V0X2NtZF9kZXNjcmlwdCk7CiAKIC8qKgogICoJYXRhX2VoX2xpbmtfcmVwb3J0IC0gcmVwb3J0IGVycm9yIGhhbmRsaW5nIHRvIHVzZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IGUzNjRlODYuLjZhYmQxN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMjUzMiwxMyArMjUzMiwxNSBAQAogCQlyYnVmWzE1XSA9IGxvd2VzdF9hbGlnbmVkOwogCiAJCWlmIChhdGFfaWRfaGFzX3RyaW0oYXJncy0+aWQpKSB7Ci0JCQlyYnVmWzE0XSB8PSAweDgwOyAvKiBUUEUgKi8KKwkJCXJidWZbMTRdIHw9IDB4ODA7IC8qIExCUE1FICovCiAKLQkJCWlmIChhdGFfaWRfaGFzX3plcm9fYWZ0ZXJfdHJpbShhcmdzLT5pZCkpCi0JCQkJcmJ1ZlsxNF0gfD0gMHg0MDsgLyogVFBSWiAqLworCQkJaWYgKGF0YV9pZF9oYXNfemVyb19hZnRlcl90cmltKGFyZ3MtPmlkKSAmJgorCQkJICAgIGRldi0+aG9ya2FnZSAmIEFUQV9IT1JLQUdFX1pFUk9fQUZURVJfVFJJTSkgeworCQkJCWF0YV9kZXZfaW5mbyhkZXYsICJFbmFibGluZyBkaXNjYXJkX3plcm9lc19kYXRhXG4iKTsKKwkJCQlyYnVmWzE0XSB8PSAweDQwOyAvKiBMQlBSWiAqLworCQkJfQogCQl9CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwppbmRleCBkYjkwYWEzLi4yZTg2ZTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCkBAIC0xMzMzLDcgKzEzMzMsMTkgQEAKIAlEUFJJTlRLKCJFTlRFUlxuIik7CiAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFwLT5zZmZfcGlvX3Rhc2spOworCisJLyoKKwkgKiBXZSB3YW5uYSByZXNldCB0aGUgSFNNIHN0YXRlIHRvIElETEUuICBJZiB3ZSBkbyBzbyB3aXRob3V0CisJICogZ3JhYmJpbmcgdGhlIHBvcnQgbG9jaywgY3JpdGljYWwgc2VjdGlvbnMgcHJvdGVjdGVkIGJ5IGl0IHdoaWNoCisJICogZXhwZWN0IHRoZSBIU00gc3RhdGUgdG8gc3RheSBzdGFibGUgbWF5IGdldCBzdXJwcmlzZWQuICBGb3IKKwkgKiBleGFtcGxlLCB3ZSBtYXkgc2V0IElETEUgaW4gYmV0d2VlbiB0aGUgdGltZQorCSAqIF9fYXRhX3NmZl9wb3J0X2ludHIoKSBjaGVja3MgZm9yIEhTTV9TVF9JRExFIGFuZCBiZWZvcmUgaXQgY2FsbHMKKwkgKiBhdGFfc2ZmX2hzbV9tb3ZlKCkgY2F1c2luZyBhdGFfc2ZmX2hzbV9tb3ZlKCkgdG8gQlVHKCkuCisJICovCisJc3Bpbl9sb2NrX2lycShhcC0+bG9jayk7CiAJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0lETEU7CisJc3Bpbl91bmxvY2tfaXJxKGFwLT5sb2NrKTsKKwogCWFwLT5zZmZfcGlvX3Rhc2tfbGluayA9IE5VTEw7CiAKIAlpZiAoYXRhX21zZ19jdGwoYXApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9kd2NfNDYwZXguYyBiL2RyaXZlcnMvYXRhL3NhdGFfZHdjXzQ2MGV4LmMKaW5kZXggYzdkZGVmOC4uOGU4MjQ4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfZHdjXzQ2MGV4LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9kd2NfNDYwZXguYwpAQCAtNzk3LDcgKzc5Nyw3IEBACiAJaWYgKGVycikgewogCQlkZXZfZXJyKGhvc3RfcHZ0LmR3Y19kZXYsICIlczogZG1hX3JlcXVlc3RfaW50ZXJydXB0cyByZXR1cm5zIgogCQkJIiAlZFxuIiwgX19mdW5jX18sIGVycik7Ci0JCWdvdG8gZXJyb3Jfb3V0OworCQlyZXR1cm4gZXJyOwogCX0KIAogCS8qIEVuYWJlIERNQSAqLwpAQCAtODA4LDExICs4MDgsNiBAQAogCQlzYXRhX2RtYV9yZWdzKTsKIAogCXJldHVybiAwOwotCi1lcnJvcl9vdXQ6Ci0JZG1hX2R3Y19leGl0KGhzZGV2KTsKLQotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2F0YV9kd2Nfc2NyX3JlYWQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgc2NyLCB1MzIgKnZhbCkKQEAgLTE2NjIsNyArMTY1Nyw3IEBACiAJY2hhciAqdmVyID0gKGNoYXIgKikmdmVyc2lvbnI7CiAJdTggKmJhc2UgPSBOVUxMOwogCWludCBlcnIgPSAwOwotCWludCBpcnEsIHJjOworCWludCBpcnE7CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCXN0cnVjdCBhdGFfcG9ydF9pbmZvIHBpID0gc2F0YV9kd2NfcG9ydF9pbmZvWzBdOwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJnBpLCBOVUxMIH07CkBAIC0xNzI1LDcgKzE3MjAsNyBAQAogCWlmIChpcnEgPT0gTk9fSVJRKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJubyBTQVRBIERNQSBpcnFcbiIpOwogCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yX291dDsKKwkJZ290byBlcnJvcl9pb21hcDsKIAl9CiAKIAkvKiBHZXQgcGh5c2ljYWwgU0FUQSBETUEgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCkBAIC0xNzM0LDE0ICsxNzI5LDE2IEBACiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZCBmb3IgQUhCRE1BIHJlZ2lzdGVyIgogCQkJIiBhZGRyZXNzXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvcl9vdXQ7CisJCWdvdG8gZXJyb3JfaW9tYXA7CiAJfQogCiAJLyogU2F2ZSBkZXYgZm9yIGxhdGVyIHVzZSBpbiBkZXZfeHh4KCkgcm91dGluZXMgKi8KIAlob3N0X3B2dC5kd2NfZGV2ID0gJm9mZGV2LT5kZXY7CiAKIAkvKiBJbml0aWFsaXplIEFIQiBETUFDICovCi0JZG1hX2R3Y19pbml0KGhzZGV2LCBpcnEpOworCWVyciA9IGRtYV9kd2NfaW5pdChoc2RldiwgaXJxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX2RtYV9pb21hcDsKIAogCS8qIEVuYWJsZSBTQVRBIEludGVycnVwdHMgKi8KIAlzYXRhX2R3Y19lbmFibGVfaW50ZXJydXB0cyhoc2Rldik7CkBAIC0xNzU5LDkgKzE3NTYsOCBAQAogCSAqIGRldmljZSBkaXNjb3ZlcnkgcHJvY2VzcywgaW52b2tpbmcgb3VyIHBvcnRfc3RhcnQoKSBoYW5kbGVyICYKIAkgKiBlcnJvcl9oYW5kbGVyKCkgdG8gZXhlY3V0ZSBhIGR1bW15IFNvZnRyZXNldCBFSCBzZXNzaW9uCiAJICovCi0JcmMgPSBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBpcnEsIHNhdGFfZHdjX2lzciwgMCwgJnNhdGFfZHdjX3NodCk7Ci0KLQlpZiAocmMgIT0gMCkKKwllcnIgPSBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBpcnEsIHNhdGFfZHdjX2lzciwgMCwgJnNhdGFfZHdjX3NodCk7CisJaWYgKGVycikKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImZhaWxlZCB0byBhY3RpdmF0ZSBob3N0Iik7CiAKIAlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIGhvc3QpOwpAQCAtMTc3MCw3ICsxNzY2LDggQEAKIGVycm9yX291dDoKIAkvKiBGcmVlIFNBVEEgRE1BIHJlc291cmNlcyAqLwogCWRtYV9kd2NfZXhpdChoc2Rldik7Ci0KK2Vycm9yX2RtYV9pb21hcDoKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilob3N0X3B2dC5zYXRhX2RtYV9yZWdzKTsKIGVycm9yX2lvbWFwOgogCWlvdW5tYXAoYmFzZSk7CiBlcnJvcl9rbWFsbG9jOgpAQCAtMTc5MSw2ICsxNzg4LDcgQEAKIAkvKiBGcmVlIFNBVEEgRE1BIHJlc291cmNlcyAqLwogCWRtYV9kd2NfZXhpdChoc2Rldik7CiAKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilob3N0X3B2dC5zYXRhX2RtYV9yZWdzKTsKIAlpb3VubWFwKGhzZGV2LT5yZWdfYmFzZSk7CiAJa2ZyZWUoaHNkZXYpOwogCWtmcmVlKGhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCmluZGV4IGQ4MWIyMGQuLmVhNjU1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCS8qIGhvc3QgZmxhZ3MgKi8KIAlTSUwyNF9DT01NT05fRkxBR1MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfUElPX0RNQSB8CiAJCQkJICBBVEFfRkxBR19OQ1EgfCBBVEFfRkxBR19BQ1BJX1NBVEEgfAotCQkJCSAgQVRBX0ZMQUdfQU4gfCBBVEFfRkxBR19QTVAsCisJCQkJICBBVEFfRkxBR19BTiB8IEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0xPV1RBRywKIAlTSUwyNF9GTEFHX1BDSVhfSVJRX1dPQwk9ICgxIDw8IDI0KSwgLyogSVJRIGxvc3MgZXJyYXRhIG9uIFBDSS1YICovCiAKIAlJUlFfU1RBVF80UE9SVFMJCT0gMHhmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCmluZGV4IDZhMTAzYTMuLjBkODc4MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMKQEAgLTIwODgsNyArMjA4OCw3IEBACiAgKiBSZXR1cm5zIGEgdmFsaWQgcG9pbnRlciB0byBzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gb24gc3VjY2VzcyBvciBFUlJfUFRSKCkKICAqIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKm9mX2dlbnBkX2dldF9mcm9tX3Byb3ZpZGVyKAorc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpvZl9nZW5wZF9nZXRfZnJvbV9wcm92aWRlcigKIAkJCQkJc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqZ2VucGRzcGVjKQogewogCXN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQgPSBFUlJfUFRSKC1FTk9FTlQpOwpAQCAtMjEwOCw2ICsyMTA4LDcgQEAKIAogCXJldHVybiBnZW5wZDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9mX2dlbnBkX2dldF9mcm9tX3Byb3ZpZGVyKTsKIAogLyoqCiAgKiBnZW5wZF9kZXZfcG1fZGV0YWNoIC0gRGV0YWNoIGEgZGV2aWNlIGZyb20gaXRzIFBNIGRvbWFpbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9vcHAuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9vcHAuYwppbmRleCBkMjRkZDYxNGEuLjEwNmM2OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9vcHAuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvb3BwLmMKQEAgLTEwOCw2ICsxMDgsMTQgQEAKIC8qIExvY2sgdG8gYWxsb3cgZXhjbHVzaXZlIG1vZGlmaWNhdGlvbiB0byB0aGUgZGV2aWNlIGFuZCBvcHAgbGlzdHMgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoZGV2X29wcF9saXN0X2xvY2spOwogCisjZGVmaW5lIG9wcF9yY3VfbG9ja2RlcF9hc3NlcnQoKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlyY3VfbG9ja2RlcF9hc3NlcnQocmN1X3JlYWRfbG9ja19oZWxkKCkgfHwJCQlcCisJCQkJbG9ja2RlcF9pc19oZWxkKCZkZXZfb3BwX2xpc3RfbG9jayksCVwKKwkJCSAgICJNaXNzaW5nIHJjdV9yZWFkX2xvY2soKSBvciAiCQlcCisJCQkgICAiZGV2X29wcF9saXN0X2xvY2sgcHJvdGVjdGlvbiIpOwkJXAorfSB3aGlsZSAoMCkKKwogLyoqCiAgKiBmaW5kX2RldmljZV9vcHAoKSAtIGZpbmQgZGV2aWNlX29wcCBzdHJ1Y3QgdXNpbmcgZGV2aWNlIHBvaW50ZXIKICAqIEBkZXY6CWRldmljZSBwb2ludGVyIHVzZWQgdG8gbG9va3VwIGRldmljZSBPUFBzCkBAIC0yMDgsOSArMjE2LDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBvcHBzIGlmIHRoZXJlIGFyZSBhbnksCiAgKiBlbHNlIHJldHVybnMgMCBpZiBub25lIG9yIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIHZhbHVlLgogICoKLSAqIExvY2tpbmc6IFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLiBUaGlzIGZ1bmN0aW9uCi0gKiBpbnRlcm5hbGx5IHJlZmVyZW5jZXMgdHdvIFJDVSBwcm90ZWN0ZWQgc3RydWN0dXJlczogZGV2aWNlX29wcCBhbmQgb3BwIHdoaWNoCi0gKiBhcmUgc2FmZSBhcyBsb25nIGFzIHdlIGFyZSB1bmRlciBhIGNvbW1vbiBSQ1UgbG9ja2VkIHNlY3Rpb24uCisgKiBMb2NraW5nOiBUaGlzIGZ1bmN0aW9uIHRha2VzIHJjdV9yZWFkX2xvY2soKS4KICAqLwogaW50IGRldl9wbV9vcHBfZ2V0X29wcF9jb3VudChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0yMTgsMTEgKzIyNCwxNCBAQAogCXN0cnVjdCBkZXZfcG1fb3BwICp0ZW1wX29wcDsKIAlpbnQgY291bnQgPSAwOwogCisJcmN1X3JlYWRfbG9jaygpOworCiAJZGV2X29wcCA9IGZpbmRfZGV2aWNlX29wcChkZXYpOwogCWlmIChJU19FUlIoZGV2X29wcCkpIHsKLQkJaW50IHIgPSBQVFJfRVJSKGRldl9vcHApOwotCQlkZXZfZXJyKGRldiwgIiVzOiBkZXZpY2UgT1BQIG5vdCBmb3VuZCAoJWQpXG4iLCBfX2Z1bmNfXywgcik7Ci0JCXJldHVybiByOworCQljb3VudCA9IFBUUl9FUlIoZGV2X29wcCk7CisJCWRldl9lcnIoZGV2LCAiJXM6IGRldmljZSBPUFAgbm90IGZvdW5kICglZClcbiIsCisJCQlfX2Z1bmNfXywgY291bnQpOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGVtcF9vcHAsICZkZXZfb3BwLT5vcHBfbGlzdCwgbm9kZSkgewpAQCAtMjMwLDYgKzIzOSw4IEBACiAJCQljb3VudCsrOwogCX0KIAorb3V0X3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfcG1fb3BwX2dldF9vcHBfY291bnQpOwpAQCAtMjY3LDYgKzI3OCw4IEBACiAJc3RydWN0IGRldmljZV9vcHAgKmRldl9vcHA7CiAJc3RydWN0IGRldl9wbV9vcHAgKnRlbXBfb3BwLCAqb3BwID0gRVJSX1BUUigtRVJBTkdFKTsKIAorCW9wcF9yY3VfbG9ja2RlcF9hc3NlcnQoKTsKKwogCWRldl9vcHAgPSBmaW5kX2RldmljZV9vcHAoZGV2KTsKIAlpZiAoSVNfRVJSKGRldl9vcHApKSB7CiAJCWludCByID0gUFRSX0VSUihkZXZfb3BwKTsKQEAgLTMxMyw2ICszMjYsOCBAQAogCXN0cnVjdCBkZXZpY2Vfb3BwICpkZXZfb3BwOwogCXN0cnVjdCBkZXZfcG1fb3BwICp0ZW1wX29wcCwgKm9wcCA9IEVSUl9QVFIoLUVSQU5HRSk7CiAKKwlvcHBfcmN1X2xvY2tkZXBfYXNzZXJ0KCk7CisKIAlpZiAoIWRldiB8fCAhZnJlcSkgewogCQlkZXZfZXJyKGRldiwgIiVzOiBJbnZhbGlkIGFyZ3VtZW50IGZyZXE9JXBcbiIsIF9fZnVuY19fLCBmcmVxKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC0zNjEsNiArMzc2LDggQEAKIAlzdHJ1Y3QgZGV2aWNlX29wcCAqZGV2X29wcDsKIAlzdHJ1Y3QgZGV2X3BtX29wcCAqdGVtcF9vcHAsICpvcHAgPSBFUlJfUFRSKC1FUkFOR0UpOwogCisJb3BwX3JjdV9sb2NrZGVwX2Fzc2VydCgpOworCiAJaWYgKCFkZXYgfHwgIWZyZXEpIHsKIAkJZGV2X2VycihkZXYsICIlczogSW52YWxpZCBhcmd1bWVudCBmcmVxPSVwXG4iLCBfX2Z1bmNfXywgZnJlcSk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwpAQCAtNzgzLDkgKzgwMCwxNSBAQAogCiAJLyogQ2hlY2sgZm9yIGV4aXN0aW5nIGxpc3QgZm9yICdkZXYnICovCiAJZGV2X29wcCA9IGZpbmRfZGV2aWNlX29wcChkZXYpOwotCWlmIChXQVJOKElTX0VSUihkZXZfb3BwKSwgIiVzOiBkZXZfb3BwOiAlbGRcbiIsIGRldl9uYW1lKGRldiksCi0JCSBQVFJfRVJSKGRldl9vcHApKSkKKwlpZiAoSVNfRVJSKGRldl9vcHApKSB7CisJCWludCBlcnJvciA9IFBUUl9FUlIoZGV2X29wcCk7CisJCWlmIChlcnJvciAhPSAtRU5PREVWKQorCQkJV0FSTigxLCAiJXM6IGRldl9vcHA6ICVkXG4iLAorCQkJICAgICBJU19FUlJfT1JfTlVMTChkZXYpID8KKwkJCQkJIkludmFsaWQgZGV2aWNlIiA6IGRldl9uYW1lKGRldiksCisJCQkgICAgIGVycm9yKTsKIAkJcmV0dXJuOworCX0KIAogCS8qIEhvbGQgb3VyIGxpc3QgbW9kaWZpY2F0aW9uIGxvY2sgaGVyZSAqLwogCW11dGV4X2xvY2soJmRldl9vcHBfbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsuYyBiL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsuYwppbmRleCBhZTlmNjE1Li5hYTIyMjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL251bGxfYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay9udWxsX2Jsay5jCkBAIC01MzAsNyArNTMwLDcgQEAKIAkJCWdvdG8gb3V0X2NsZWFudXBfcXVldWVzOwogCiAJCW51bGxiLT5xID0gYmxrX21xX2luaXRfcXVldWUoJm51bGxiLT50YWdfc2V0KTsKLQkJaWYgKCFudWxsYi0+cSkgeworCQlpZiAoSVNfRVJSKG51bGxiLT5xKSkgewogCQkJcnYgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfY2xlYW51cF90YWdzOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL252bWUtY29yZS5jIGIvZHJpdmVycy9ibG9jay9udm1lLWNvcmUuYwppbmRleCBiMWQ1ZDg3Li5kODI2YmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL252bWUtY29yZS5jCisrKyBiL2RyaXZlcnMvYmxvY2svbnZtZS1jb3JlLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCWRtYV9hZGRyX3QgY3FfZG1hX2FkZHI7CiAJdTMyIF9faW9tZW0gKnFfZGI7CiAJdTE2IHFfZGVwdGg7Ci0JdTE2IGNxX3ZlY3RvcjsKKwlzMTYgY3FfdmVjdG9yOwogCXUxNiBzcV9oZWFkOwogCXUxNiBzcV90YWlsOwogCXUxNiBjcV9oZWFkOwpAQCAtMjE1LDYgKzIxNSw3IEBACiAJY21kLT5mbiA9IGhhbmRsZXI7CiAJY21kLT5jdHggPSBjdHg7CiAJY21kLT5hYm9ydGVkID0gMDsKKwlibGtfbXFfc3RhcnRfcmVxdWVzdChibGtfbXFfcnFfZnJvbV9wZHUoY21kKSk7CiB9CiAKIC8qIFNwZWNpYWwgdmFsdWVzIG11c3QgYmUgbGVzcyB0aGFuIDB4MTAwMCAqLwpAQCAtNDMxLDggKzQzMiwxMyBAQAogCWlmICh1bmxpa2VseShzdGF0dXMpKSB7CiAJCWlmICghKHN0YXR1cyAmIE5WTUVfU0NfRE5SIHx8IGJsa19ub3JldHJ5X3JlcXVlc3QocmVxKSkKIAkJICAgICYmIChqaWZmaWVzIC0gcmVxLT5zdGFydF90aW1lKSA8IHJlcS0+dGltZW91dCkgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCQkJYmxrX21xX3JlcXVldWVfcmVxdWVzdChyZXEpOwotCQkJYmxrX21xX2tpY2tfcmVxdWV1ZV9saXN0KHJlcS0+cSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZShyZXEtPnEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwkJCWlmICghYmxrX3F1ZXVlX3N0b3BwZWQocmVxLT5xKSkKKwkJCQlibGtfbXFfa2lja19yZXF1ZXVlX2xpc3QocmVxLT5xKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocmVxLT5xLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJcmVxLT5lcnJvcnMgPSBudm1lX2Vycm9yX3N0YXR1cyhzdGF0dXMpOwpAQCAtNjY0LDggKzY3MCw2IEBACiAJCX0KIAl9CiAKLQlibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpOwotCiAJbnZtZV9zZXRfaW5mbyhjbWQsIGlvZCwgcmVxX2NvbXBsZXRpb24pOwogCXNwaW5fbG9ja19pcnEoJm52bWVxLT5xX2xvY2spOwogCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKQpAQCAtODM1LDYgKzgzOSw3IEBACiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCisJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX05PX1RJTUVPVVQ7CiAJY21kX2luZm8gPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7CiAJbnZtZV9zZXRfaW5mbyhjbWRfaW5mbywgcmVxLCBhc3luY19yZXFfY29tcGxldGlvbik7CiAKQEAgLTEwMTYsMTQgKzEwMjEsMTkgQEAKIAlzdHJ1Y3QgbnZtZV9jb21tYW5kIGNtZDsKIAogCWlmICghbnZtZXEtPnFpZCB8fCBjbWRfcnEtPmFib3J0ZWQpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCQlpZiAod29ya19idXN5KCZkZXYtPnJlc2V0X3dvcmspKQotCQkJcmV0dXJuOworCQkJZ290byBvdXQ7CiAJCWxpc3RfZGVsX2luaXQoJmRldi0+bm9kZSk7CiAJCWRldl93YXJuKCZkZXYtPnBjaV9kZXYtPmRldiwKIAkJCSJJL08gJWQgUUlEICVkIHRpbWVvdXQsIHJlc2V0IGNvbnRyb2xsZXJcbiIsCiAJCQkJCQkJcmVxLT50YWcsIG52bWVxLT5xaWQpOwogCQlkZXYtPnJlc2V0X3dvcmtmbiA9IG52bWVfcmVzZXRfZmFpbGVkX2RldjsKIAkJcXVldWVfd29yayhudm1lX3dvcmtxLCAmZGV2LT5yZXNldF93b3JrKTsKKyBvdXQ6CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9saXN0X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTA2NCwxNSArMTA3NCwyMiBAQAogCXZvaWQgKmN0eDsKIAludm1lX2NvbXBsZXRpb25fZm4gZm47CiAJc3RydWN0IG52bWVfY21kX2luZm8gKmNtZDsKLQlzdGF0aWMgc3RydWN0IG52bWVfY29tcGxldGlvbiBjcWUgPSB7Ci0JCS5zdGF0dXMgPSBjcHVfdG9fbGUxNihOVk1FX1NDX0FCT1JUX1JFUSA8PCAxKSwKLQl9OworCXN0cnVjdCBudm1lX2NvbXBsZXRpb24gY3FlOworCisJaWYgKCFibGtfbXFfcmVxdWVzdF9zdGFydGVkKHJlcSkpCisJCXJldHVybjsKIAogCWNtZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTsKIAogCWlmIChjbWQtPmN0eCA9PSBDTURfQ1RYX0NBTkNFTExFRCkKIAkJcmV0dXJuOwogCisJaWYgKGJsa19xdWV1ZV9keWluZyhyZXEtPnEpKQorCQljcWUuc3RhdHVzID0gY3B1X3RvX2xlMTYoKE5WTUVfU0NfQUJPUlRfUkVRIHwgTlZNRV9TQ19ETlIpIDw8IDEpOworCWVsc2UKKwkJY3FlLnN0YXR1cyA9IGNwdV90b19sZTE2KE5WTUVfU0NfQUJPUlRfUkVRIDw8IDEpOworCisKIAlkZXZfd2Fybihudm1lcS0+cV9kbWFkZXYsICJDYW5jZWxsaW5nIEkvTyAlZCBRSUQgJWRcbiIsCiAJCQkJCQlyZXEtPnRhZywgbnZtZXEtPnFpZCk7CiAJY3R4ID0gY2FuY2VsX2NtZF9pbmZvKGNtZCwgJmZuKTsKQEAgLTEwODQsMTcgKzExMDEsMjkgQEAKIAlzdHJ1Y3QgbnZtZV9jbWRfaW5mbyAqY21kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpOwogCXN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSA9IGNtZC0+bnZtZXE7CiAKLQlkZXZfd2Fybihudm1lcS0+cV9kbWFkZXYsICJUaW1lb3V0IEkvTyAlZCBRSUQgJWRcbiIsIHJlcS0+dGFnLAotCQkJCQkJCW52bWVxLT5xaWQpOwotCWlmIChudm1lcS0+ZGV2LT5pbml0aWFsaXplZCkKLQkJbnZtZV9hYm9ydF9yZXEocmVxKTsKLQogCS8qCiAJICogVGhlIGFib3J0ZWQgcmVxIHdpbGwgYmUgY29tcGxldGVkIG9uIHJlY2VpdmluZyB0aGUgYWJvcnQgcmVxLgogCSAqIFdlIGVuYWJsZSB0aGUgdGltZXIgYWdhaW4uIElmIGhpdCB0d2ljZSwgaXQnbGwgY2F1c2UgYSBkZXZpY2UgcmVzZXQsCiAJICogYXMgdGhlIGRldmljZSB0aGVuIGlzIGluIGEgZmF1bHR5IHN0YXRlLgogCSAqLwotCXJldHVybiBCTEtfRUhfUkVTRVRfVElNRVI7CisJaW50IHJldCA9IEJMS19FSF9SRVNFVF9USU1FUjsKKworCWRldl93YXJuKG52bWVxLT5xX2RtYWRldiwgIlRpbWVvdXQgSS9PICVkIFFJRCAlZFxuIiwgcmVxLT50YWcsCisJCQkJCQkJbnZtZXEtPnFpZCk7CisKKwlzcGluX2xvY2tfaXJxKCZudm1lcS0+cV9sb2NrKTsKKwlpZiAoIW52bWVxLT5kZXYtPmluaXRpYWxpemVkKSB7CisJCS8qCisJCSAqIEZvcmNlIGNhbmNlbGxlZCBjb21tYW5kIGZyZWVzIHRoZSByZXF1ZXN0LCB3aGljaCByZXF1aXJlcyB3ZQorCQkgKiByZXR1cm4gQkxLX0VIX05PVF9IQU5ETEVELgorCQkgKi8KKwkJbnZtZV9jYW5jZWxfcXVldWVfaW9zKG52bWVxLT5oY3R4LCByZXEsIG52bWVxLCByZXNlcnZlZCk7CisJCXJldCA9IEJMS19FSF9OT1RfSEFORExFRDsKKwl9IGVsc2UKKwkJbnZtZV9hYm9ydF9yZXEocmVxKTsKKwlzcGluX3VubG9ja19pcnEoJm52bWVxLT5xX2xvY2spOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgbnZtZV9mcmVlX3F1ZXVlKHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSkKQEAgLTExMzEsMTAgKzExNjAsMTYgQEAKICAqLwogc3RhdGljIGludCBudm1lX3N1c3BlbmRfcXVldWUoc3RydWN0IG52bWVfcXVldWUgKm52bWVxKQogewotCWludCB2ZWN0b3IgPSBudm1lcS0+ZGV2LT5lbnRyeVtudm1lcS0+Y3FfdmVjdG9yXS52ZWN0b3I7CisJaW50IHZlY3RvcjsKIAogCXNwaW5fbG9ja19pcnEoJm52bWVxLT5xX2xvY2spOworCWlmIChudm1lcS0+Y3FfdmVjdG9yID09IC0xKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmbnZtZXEtPnFfbG9jayk7CisJCXJldHVybiAxOworCX0KKwl2ZWN0b3IgPSBudm1lcS0+ZGV2LT5lbnRyeVtudm1lcS0+Y3FfdmVjdG9yXS52ZWN0b3I7CiAJbnZtZXEtPmRldi0+b25saW5lX3F1ZXVlcy0tOworCW52bWVxLT5jcV92ZWN0b3IgPSAtMTsKIAlzcGluX3VubG9ja19pcnEoJm52bWVxLT5xX2xvY2spOwogCiAJaXJxX3NldF9hZmZpbml0eV9oaW50KHZlY3RvciwgTlVMTCk7CkBAIC0xMTY5LDExICsxMjA0LDEzIEBACiAJCWFkYXB0ZXJfZGVsZXRlX3NxKGRldiwgcWlkKTsKIAkJYWRhcHRlcl9kZWxldGVfY3EoZGV2LCBxaWQpOwogCX0KKwlpZiAoIXFpZCAmJiBkZXYtPmFkbWluX3EpCisJCWJsa19tcV9mcmVlemVfcXVldWVfc3RhcnQoZGV2LT5hZG1pbl9xKTsKIAludm1lX2NsZWFyX3F1ZXVlKG52bWVxKTsKIH0KIAogc3RhdGljIHN0cnVjdCBudm1lX3F1ZXVlICpudm1lX2FsbG9jX3F1ZXVlKHN0cnVjdCBudm1lX2RldiAqZGV2LCBpbnQgcWlkLAotCQkJCQkJCWludCBkZXB0aCwgaW50IHZlY3RvcikKKwkJCQkJCQlpbnQgZGVwdGgpCiB7CiAJc3RydWN0IGRldmljZSAqZG1hZGV2ID0gJmRldi0+cGNpX2Rldi0+ZGV2OwogCXN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSA9IGt6YWxsb2Moc2l6ZW9mKCpudm1lcSksIEdGUF9LRVJORUwpOwpAQCAtMTE5OSw3ICsxMjM2LDYgQEAKIAludm1lcS0+Y3FfcGhhc2UgPSAxOwogCW52bWVxLT5xX2RiID0gJmRldi0+ZGJzW3FpZCAqIDIgKiBkZXYtPmRiX3N0cmlkZV07CiAJbnZtZXEtPnFfZGVwdGggPSBkZXB0aDsKLQludm1lcS0+Y3FfdmVjdG9yID0gdmVjdG9yOwogCW52bWVxLT5xaWQgPSBxaWQ7CiAJZGV2LT5xdWV1ZV9jb3VudCsrOwogCWRldi0+cXVldWVzW3FpZF0gPSBudm1lcTsKQEAgLTEyNDQsNiArMTI4MCw3IEBACiAJc3RydWN0IG52bWVfZGV2ICpkZXYgPSBudm1lcS0+ZGV2OwogCWludCByZXN1bHQ7CiAKKwludm1lcS0+Y3FfdmVjdG9yID0gcWlkIC0gMTsKIAlyZXN1bHQgPSBhZGFwdGVyX2FsbG9jX2NxKGRldiwgcWlkLCBudm1lcSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCXJldHVybiByZXN1bHQ7CkBAIC0xMzU1LDYgKzEzOTIsMTQgQEAKIAkudGltZW91dAk9IG52bWVfdGltZW91dCwKIH07CiAKK3N0YXRpYyB2b2lkIG52bWVfZGV2X3JlbW92ZV9hZG1pbihzdHJ1Y3QgbnZtZV9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5hZG1pbl9xICYmICFibGtfcXVldWVfZHlpbmcoZGV2LT5hZG1pbl9xKSkgeworCQlibGtfY2xlYW51cF9xdWV1ZShkZXYtPmFkbWluX3EpOworCQlibGtfbXFfZnJlZV90YWdfc2V0KCZkZXYtPmFkbWluX3RhZ3NldCk7CisJfQorfQorCiBzdGF0aWMgaW50IG52bWVfYWxsb2NfYWRtaW5fdGFncyhzdHJ1Y3QgbnZtZV9kZXYgKmRldikKIHsKIAlpZiAoIWRldi0+YWRtaW5fcSkgewpAQCAtMTM3MCwyMSArMTQxNSwyMCBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAKIAkJZGV2LT5hZG1pbl9xID0gYmxrX21xX2luaXRfcXVldWUoJmRldi0+YWRtaW5fdGFnc2V0KTsKLQkJaWYgKCFkZXYtPmFkbWluX3EpIHsKKwkJaWYgKElTX0VSUihkZXYtPmFkbWluX3EpKSB7CiAJCQlibGtfbXFfZnJlZV90YWdfc2V0KCZkZXYtPmFkbWluX3RhZ3NldCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCX0KKwkJaWYgKCFibGtfZ2V0X3F1ZXVlKGRldi0+YWRtaW5fcSkpIHsKKwkJCW52bWVfZGV2X3JlbW92ZV9hZG1pbihkZXYpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9IGVsc2UKKwkJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGRldi0+YWRtaW5fcSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbnZtZV9mcmVlX2FkbWluX3RhZ3Moc3RydWN0IG52bWVfZGV2ICpkZXYpCi17Ci0JaWYgKGRldi0+YWRtaW5fcSkKLQkJYmxrX21xX2ZyZWVfdGFnX3NldCgmZGV2LT5hZG1pbl90YWdzZXQpOwotfQotCiBzdGF0aWMgaW50IG52bWVfY29uZmlndXJlX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2RldiAqZGV2KQogewogCWludCByZXN1bHQ7CkBAIC0xNDE2LDcgKzE0NjAsNyBAQAogCiAJbnZtZXEgPSBkZXYtPnF1ZXVlc1swXTsKIAlpZiAoIW52bWVxKSB7Ci0JCW52bWVxID0gbnZtZV9hbGxvY19xdWV1ZShkZXYsIDAsIE5WTUVfQVFfREVQVEgsIDApOworCQludm1lcSA9IG52bWVfYWxsb2NfcXVldWUoZGV2LCAwLCBOVk1FX0FRX0RFUFRIKTsKIAkJaWYgKCFudm1lcSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTE0MzksMTggKzE0ODMsMTMgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZyZWVfbnZtZXE7CiAKLQlyZXN1bHQgPSBudm1lX2FsbG9jX2FkbWluX3RhZ3MoZGV2KTsKKwludm1lcS0+Y3FfdmVjdG9yID0gMDsKKwlyZXN1bHQgPSBxdWV1ZV9yZXF1ZXN0X2lycShkZXYsIG52bWVxLCBudm1lcS0+aXJxbmFtZSk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBmcmVlX252bWVxOwogCi0JcmVzdWx0ID0gcXVldWVfcmVxdWVzdF9pcnEoZGV2LCBudm1lcSwgbnZtZXEtPmlycW5hbWUpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZnJlZV90YWdzOwotCiAJcmV0dXJuIHJlc3VsdDsKIAotIGZyZWVfdGFnczoKLQludm1lX2ZyZWVfYWRtaW5fdGFncyhkZXYpOwogIGZyZWVfbnZtZXE6CiAJbnZtZV9mcmVlX3F1ZXVlcyhkZXYsIDApOwogCXJldHVybiByZXN1bHQ7CkBAIC0xOTQ0LDcgKzE5ODMsNyBAQAogCXVuc2lnbmVkIGk7CiAKIAlmb3IgKGkgPSBkZXYtPnF1ZXVlX2NvdW50OyBpIDw9IGRldi0+bWF4X3FpZDsgaSsrKQotCQlpZiAoIW52bWVfYWxsb2NfcXVldWUoZGV2LCBpLCBkZXYtPnFfZGVwdGgsIGkgLSAxKSkKKwkJaWYgKCFudm1lX2FsbG9jX3F1ZXVlKGRldiwgaSwgZGV2LT5xX2RlcHRoKSkKIAkJCWJyZWFrOwogCiAJZm9yIChpID0gZGV2LT5vbmxpbmVfcXVldWVzOyBpIDw9IGRldi0+cXVldWVfY291bnQgLSAxOyBpKyspCkBAIC0yMjM1LDEzICsyMjc0LDE4IEBACiAJCQlicmVhazsKIAkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KEFETUlOX1RJTUVPVVQpIHx8CiAJCQkJCWZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkvKgorCQkJICogRGlzYWJsZSB0aGUgY29udHJvbGxlciBmaXJzdCBzaW5jZSB3ZSBjYW4ndCB0cnVzdCBpdAorCQkJICogYXQgdGhpcyBwb2ludCwgYnV0IGxlYXZlIHRoZSBhZG1pbiBxdWV1ZSBlbmFibGVkCisJCQkgKiB1bnRpbCBhbGwgcXVldWUgZGVsZXRpb24gcmVxdWVzdHMgYXJlIGZsdXNoZWQuCisJCQkgKiBGSVhNRTogVGhpcyBtYXkgdGFrZSBhIHdoaWxlIGlmIHRoZXJlIGFyZSBtb3JlIGgvdworCQkJICogcXVldWVzIHRoYW4gYWRtaW4gdGFncy4KKwkJCSAqLwogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQogCQkJbnZtZV9kaXNhYmxlX2N0cmwoZGV2LCByZWFkcSgmZGV2LT5iYXItPmNhcCkpOwotCQkJbnZtZV9kaXNhYmxlX3F1ZXVlKGRldiwgMCk7Ci0KLQkJCXNlbmRfc2lnKFNJR0tJTEwsIGRxLT53b3JrZXItPnRhc2ssIDEpOworCQkJbnZtZV9jbGVhcl9xdWV1ZShkZXYtPnF1ZXVlc1swXSk7CiAJCQlmbHVzaF9rdGhyZWFkX3dvcmtlcihkcS0+d29ya2VyKTsKKwkJCW52bWVfZGlzYWJsZV9xdWV1ZShkZXYsIDApOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMjMxOCw3ICsyMzYyLDYgQEAKIHsKIAlzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG52bWVfcXVldWUsCiAJCQkJCQkJY21kaW5mby53b3JrKTsKLQlhbGxvd19zaWduYWwoU0lHS0lMTCk7CiAJaWYgKG52bWVfZGVsZXRlX3NxKG52bWVxKSkKIAkJbnZtZV9kZWxfcXVldWVfZW5kKG52bWVxKTsKIH0KQEAgLTIzNzYsNiArMjQxOSwzNCBAQAogCQlrdGhyZWFkX3N0b3AodG1wKTsKIH0KIAorc3RhdGljIHZvaWQgbnZtZV9mcmVlemVfcXVldWVzKHN0cnVjdCBudm1lX2RldiAqZGV2KQoreworCXN0cnVjdCBudm1lX25zICpuczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobnMsICZkZXYtPm5hbWVzcGFjZXMsIGxpc3QpIHsKKwkJYmxrX21xX2ZyZWV6ZV9xdWV1ZV9zdGFydChucy0+cXVldWUpOworCisJCXNwaW5fbG9jayhucy0+cXVldWUtPnF1ZXVlX2xvY2spOworCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX1NUT1BQRUQsIG5zLT5xdWV1ZSk7CisJCXNwaW5fdW5sb2NrKG5zLT5xdWV1ZS0+cXVldWVfbG9jayk7CisKKwkJYmxrX21xX2NhbmNlbF9yZXF1ZXVlX3dvcmsobnMtPnF1ZXVlKTsKKwkJYmxrX21xX3N0b3BfaHdfcXVldWVzKG5zLT5xdWV1ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBudm1lX3VuZnJlZXplX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbnZtZV9ucyAqbnM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5zLCAmZGV2LT5uYW1lc3BhY2VzLCBsaXN0KSB7CisJCXF1ZXVlX2ZsYWdfY2xlYXJfdW5sb2NrZWQoUVVFVUVfRkxBR19TVE9QUEVELCBucy0+cXVldWUpOworCQlibGtfbXFfdW5mcmVlemVfcXVldWUobnMtPnF1ZXVlKTsKKwkJYmxrX21xX3N0YXJ0X3N0b3BwZWRfaHdfcXVldWVzKG5zLT5xdWV1ZSwgdHJ1ZSk7CisJCWJsa19tcV9raWNrX3JlcXVldWVfbGlzdChucy0+cXVldWUpOworCX0KK30KKwogc3RhdGljIHZvaWQgbnZtZV9kZXZfc2h1dGRvd24oc3RydWN0IG52bWVfZGV2ICpkZXYpCiB7CiAJaW50IGk7CkBAIC0yMzg0LDggKzI0NTUsMTAgQEAKIAlkZXYtPmluaXRpYWxpemVkID0gMDsKIAludm1lX2Rldl9saXN0X3JlbW92ZShkZXYpOwogCi0JaWYgKGRldi0+YmFyKQorCWlmIChkZXYtPmJhcikgeworCQludm1lX2ZyZWV6ZV9xdWV1ZXMoZGV2KTsKIAkJY3N0cyA9IHJlYWRsKCZkZXYtPmJhci0+Y3N0cyk7CisJfQogCWlmIChjc3RzICYgTlZNRV9DU1RTX0NGUyB8fCAhKGNzdHMgJiBOVk1FX0NTVFNfUkRZKSkgewogCQlmb3IgKGkgPSBkZXYtPnF1ZXVlX2NvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKIAkJCXN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSA9IGRldi0+cXVldWVzW2ldOwpAQCAtMjQwMCwxMiArMjQ3Myw2IEBACiAJbnZtZV9kZXZfdW5tYXAoZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgbnZtZV9kZXZfcmVtb3ZlX2FkbWluKHN0cnVjdCBudm1lX2RldiAqZGV2KQotewotCWlmIChkZXYtPmFkbWluX3EgJiYgIWJsa19xdWV1ZV9keWluZyhkZXYtPmFkbWluX3EpKQotCQlibGtfY2xlYW51cF9xdWV1ZShkZXYtPmFkbWluX3EpOwotfQotCiBzdGF0aWMgdm9pZCBudm1lX2Rldl9yZW1vdmUoc3RydWN0IG52bWVfZGV2ICpkZXYpCiB7CiAJc3RydWN0IG52bWVfbnMgKm5zOwpAQCAtMjQxMyw4ICsyNDgwLDEwIEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShucywgJmRldi0+bmFtZXNwYWNlcywgbGlzdCkgewogCQlpZiAobnMtPmRpc2stPmZsYWdzICYgR0VOSERfRkxfVVApCiAJCQlkZWxfZ2VuZGlzayhucy0+ZGlzayk7Ci0JCWlmICghYmxrX3F1ZXVlX2R5aW5nKG5zLT5xdWV1ZSkpCisJCWlmICghYmxrX3F1ZXVlX2R5aW5nKG5zLT5xdWV1ZSkpIHsKKwkJCWJsa19tcV9hYm9ydF9yZXF1ZXVlX2xpc3QobnMtPnF1ZXVlKTsKIAkJCWJsa19jbGVhbnVwX3F1ZXVlKG5zLT5xdWV1ZSk7CisJCX0KIAl9CiB9CiAKQEAgLTI0OTUsNiArMjU2NCw3IEBACiAJbnZtZV9mcmVlX25hbWVzcGFjZXMoZGV2KTsKIAludm1lX3JlbGVhc2VfaW5zdGFuY2UoZGV2KTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZkZXYtPnRhZ3NldCk7CisJYmxrX3B1dF9xdWV1ZShkZXYtPmFkbWluX3EpOwogCWtmcmVlKGRldi0+cXVldWVzKTsKIAlrZnJlZShkZXYtPmVudHJ5KTsKIAlrZnJlZShkZXYpOwpAQCAtMjU5MSwxNSArMjY2MSwyMCBAQAogCX0KIAogCW52bWVfaW5pdF9xdWV1ZShkZXYtPnF1ZXVlc1swXSwgMCk7CisJcmVzdWx0ID0gbnZtZV9hbGxvY19hZG1pbl90YWdzKGRldik7CisJaWYgKHJlc3VsdCkKKwkJZ290byBkaXNhYmxlOwogCiAJcmVzdWx0ID0gbnZtZV9zZXR1cF9pb19xdWV1ZXMoZGV2KTsKIAlpZiAocmVzdWx0KQotCQlnb3RvIGRpc2FibGU7CisJCWdvdG8gZnJlZV90YWdzOwogCiAJbnZtZV9zZXRfaXJxX2hpbnRzKGRldik7CiAKIAlyZXR1cm4gcmVzdWx0OwogCisgZnJlZV90YWdzOgorCW52bWVfZGV2X3JlbW92ZV9hZG1pbihkZXYpOwogIGRpc2FibGU6CiAJbnZtZV9kaXNhYmxlX3F1ZXVlKGRldiwgMCk7CiAJbnZtZV9kZXZfbGlzdF9yZW1vdmUoZGV2KTsKQEAgLTI2MzksNiArMjcxNCw5IEBACiAJCWRldi0+cmVzZXRfd29ya2ZuID0gbnZtZV9yZW1vdmVfZGlza3M7CiAJCXF1ZXVlX3dvcmsobnZtZV93b3JrcSwgJmRldi0+cmVzZXRfd29yayk7CiAJCXNwaW5fdW5sb2NrKCZkZXZfbGlzdF9sb2NrKTsKKwl9IGVsc2UgeworCQludm1lX3VuZnJlZXplX3F1ZXVlcyhkZXYpOworCQludm1lX3NldF9pcnFfaGludHMoZGV2KTsKIAl9CiAJZGV2LT5pbml0aWFsaXplZCA9IDE7CiAJcmV0dXJuIDA7CkBAIC0yNzc2LDExICsyODU0LDEwIEBACiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZsdXNoX3dvcmsoJmRldi0+cmVzZXRfd29yayk7CiAJbWlzY19kZXJlZ2lzdGVyKCZkZXYtPm1pc2NkZXYpOwotCW52bWVfZGV2X3JlbW92ZShkZXYpOwogCW52bWVfZGV2X3NodXRkb3duKGRldik7CisJbnZtZV9kZXZfcmVtb3ZlKGRldik7CiAJbnZtZV9kZXZfcmVtb3ZlX2FkbWluKGRldik7CiAJbnZtZV9mcmVlX3F1ZXVlcyhkZXYsIDApOwotCW52bWVfZnJlZV9hZG1pbl90YWdzKGRldik7CiAJbnZtZV9yZWxlYXNlX3BycF9wb29scyhkZXYpOwogCWtyZWZfcHV0KCZkZXYtPmtyZWYsIG52bWVfZnJlZV9kZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9yYmQuYyBiL2RyaXZlcnMvYmxvY2svcmJkLmMKaW5kZXggM2VjODVkZi4uOGE4NmI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9yYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3JiZC5jCkBAIC0yMDk4LDMyICsyMDk4LDI2IEBACiAgKiBJZiBhbiBpbWFnZSBoYXMgYSBub24temVybyBwYXJlbnQgb3ZlcmxhcCwgZ2V0IGEgcmVmZXJlbmNlIHRvIGl0cwogICogcGFyZW50LgogICoKLSAqIFdlIG11c3QgZ2V0IHRoZSByZWZlcmVuY2UgYmVmb3JlIGNoZWNraW5nIGZvciB0aGUgb3ZlcmxhcCB0bwotICogY29vcmRpbmF0ZSBwcm9wZXJseSB3aXRoIHplcm9pbmcgdGhlIHBhcmVudCBvdmVybGFwIGluCi0gKiByYmRfZGV2X3YyX3BhcmVudF9pbmZvKCkgd2hlbiBhbiBpbWFnZSBnZXRzIGZsYXR0ZW5lZC4gIFdlCi0gKiBkcm9wIGl0IGFnYWluIGlmIHRoZXJlIGlzIG5vIG92ZXJsYXAuCi0gKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSByYmQgZGV2aWNlIGhhcyBhIHBhcmVudCB3aXRoIGEgbm9uLXplcm8KICAqIG92ZXJsYXAgYW5kIGEgcmVmZXJlbmNlIGZvciBpdCB3YXMgc3VjY2Vzc2Z1bGx5IHRha2VuLCBvcgogICogZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgYm9vbCByYmRfZGV2X3BhcmVudF9nZXQoc3RydWN0IHJiZF9kZXZpY2UgKnJiZF9kZXYpCiB7Ci0JaW50IGNvdW50ZXI7CisJaW50IGNvdW50ZXIgPSAwOwogCiAJaWYgKCFyYmRfZGV2LT5wYXJlbnRfc3BlYykKIAkJcmV0dXJuIGZhbHNlOwogCi0JY291bnRlciA9IGF0b21pY19pbmNfcmV0dXJuX3NhZmUoJnJiZF9kZXYtPnBhcmVudF9yZWYpOwotCWlmIChjb3VudGVyID4gMCAmJiByYmRfZGV2LT5wYXJlbnRfb3ZlcmxhcCkKLQkJcmV0dXJuIHRydWU7Ci0KLQkvKiBJbWFnZSB3YXMgZmxhdHRlbmVkLCBidXQgcGFyZW50IGlzIG5vdCB5ZXQgdG9ybiBkb3duICovCisJZG93bl9yZWFkKCZyYmRfZGV2LT5oZWFkZXJfcndzZW0pOworCWlmIChyYmRfZGV2LT5wYXJlbnRfb3ZlcmxhcCkKKwkJY291bnRlciA9IGF0b21pY19pbmNfcmV0dXJuX3NhZmUoJnJiZF9kZXYtPnBhcmVudF9yZWYpOworCXVwX3JlYWQoJnJiZF9kZXYtPmhlYWRlcl9yd3NlbSk7CiAKIAlpZiAoY291bnRlciA8IDApCiAJCXJiZF93YXJuKHJiZF9kZXYsICJwYXJlbnQgcmVmZXJlbmNlIG92ZXJmbG93Iik7CiAKLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIGNvdW50ZXIgPiAwOwogfQogCiAvKgpAQCAtNDIzOSw3ICs0MjMzLDYgQEAKIAkJICovCiAJCWlmIChyYmRfZGV2LT5wYXJlbnRfb3ZlcmxhcCkgewogCQkJcmJkX2Rldi0+cGFyZW50X292ZXJsYXAgPSAwOwotCQkJc21wX21iKCk7CiAJCQlyYmRfZGV2X3BhcmVudF9wdXQocmJkX2Rldik7CiAJCQlwcl9pbmZvKCIlczogY2xvbmUgaW1hZ2UgaGFzIGJlZW4gZmxhdHRlbmVkXG4iLAogCQkJCXJiZF9kZXYtPmRpc2stPmRpc2tfbmFtZSk7CkBAIC00Mjg1LDcgKzQyNzgsNiBAQAogCSAqIHRyZWF0IGl0IHNwZWNpYWxseS4KIAkgKi8KIAlyYmRfZGV2LT5wYXJlbnRfb3ZlcmxhcCA9IG92ZXJsYXA7Ci0Jc21wX21iKCk7CiAJaWYgKCFvdmVybGFwKSB7CiAKIAkJLyogQSBudWxsIHBhcmVudF9zcGVjIGluZGljYXRlcyBpdCdzIHRoZSBpbml0aWFsIHByb2JlICovCkBAIC01MTE0LDEwICs1MTA2LDcgQEAKIHsKIAlzdHJ1Y3QgcmJkX2ltYWdlX2hlYWRlcgkqaGVhZGVyOwogCi0JLyogRHJvcCBwYXJlbnQgcmVmZXJlbmNlIHVubGVzcyBpdCdzIGFscmVhZHkgYmVlbiBkb25lIChvciBub25lKSAqLwotCi0JaWYgKHJiZF9kZXYtPnBhcmVudF9vdmVybGFwKQotCQlyYmRfZGV2X3BhcmVudF9wdXQocmJkX2Rldik7CisJcmJkX2Rldl9wYXJlbnRfcHV0KHJiZF9kZXYpOwogCiAJLyogRnJlZSBkeW5hbWljIGZpZWxkcyBmcm9tIHRoZSBoZWFkZXIsIHRoZW4gemVybyBpdCBvdXQgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwppbmRleCA3ZWY3YzA5Li5jZGZiZDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwpAQCAtNjM4LDcgKzYzOCw3IEBACiAJCWdvdG8gb3V0X3B1dF9kaXNrOwogCiAJcSA9IHZibGstPmRpc2stPnF1ZXVlID0gYmxrX21xX2luaXRfcXVldWUoJnZibGstPnRhZ19zZXQpOwotCWlmICghcSkgeworCWlmIChJU19FUlIocSkpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfZnJlZV90YWdzOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL2FybS1jY2kuYyBiL2RyaXZlcnMvYnVzL2FybS1jY2kuYwppbmRleCA4NjBkYTQwLi4wY2U1ZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9hcm0tY2NpLmMKKysrIGIvZHJpdmVycy9idXMvYXJtLWNjaS5jCkBAIC0xMzEyLDYgKzEzMTIsOSBAQAogCWlmICghbnApCiAJCXJldHVybiAtRU5PREVWOwogCisJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAljY2lfY29uZmlnID0gb2ZfbWF0Y2hfbm9kZShhcm1fY2NpX21hdGNoZXMsIG5wKS0+ZGF0YTsKIAlpZiAoIWNjaV9jb25maWcpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jIGIvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jCmluZGV4IGViNzY4MmQuLjgxYmYyOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL212ZWJ1LW1idXMuYworKysgYi9kcml2ZXJzL2J1cy9tdmVidS1tYnVzLmMKQEAgLTIxMCwxMiArMjEwLDI1IEBACiB9CiAKIC8qIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB3aW5kb3cgbnVtYmVyIGlzIGF2YWlsYWJsZSAqLworCisvKiBPbiBBcm1hZGEgWFAsIDM3NSBhbmQgMzh4IHRoZSBNQnVzIHdpbmRvdyAxMyBoYXMgdGhlIHJlbWFwCisgKiBjYXBhYmlsaXR5LCBsaWtlIHdpbmRvd3MgMCB0byA3LiBIb3dldmVyLCB0aGUgbXZlYnUtbWJ1cyBkcml2ZXIKKyAqIGlzbid0IGN1cnJlbnRseSB0YWtpbmcgaW50byBhY2NvdW50IHRoaXMgc3BlY2lhbCBjYXNlLCB3aGljaCBtZWFucworICogdGhhdCB3aGVuIHdpbmRvdyAxMyBpcyBhY3R1YWxseSB1c2VkLCB0aGUgcmVtYXAgcmVnaXN0ZXJzIGFyZSBsZWZ0CisgKiB0byAwLCBtYWtpbmcgdGhlIGRldmljZSB1c2luZyB0aGlzIE1CdXMgd2luZG93IHVuYXZhaWxhYmxlLiBUaGUKKyAqIHF1aWNrIGZpeCBmb3Igc3RhYmxlIGlzIHRvIG5vdCB1c2Ugd2luZG93IDEzLiBBIGZvbGxvdyB1cCBwYXRjaAorICogd2lsbCBjb3JyZWN0bHkgaGFuZGxlIHRoaXMgd2luZG93LgorKi8KIHN0YXRpYyBpbnQgbXZlYnVfbWJ1c193aW5kb3dfaXNfZnJlZShzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqbWJ1cywKIAkJCQkgICAgIGNvbnN0IGludCB3aW4pCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyID0gbWJ1cy0+bWJ1c3dpbnNfYmFzZSArCiAJCW1idXMtPnNvYy0+d2luX2NmZ19vZmZzZXQod2luKTsKIAl1MzIgY3RybCA9IHJlYWRsKGFkZHIgKyBXSU5fQ1RSTF9PRkYpOworCisJaWYgKHdpbiA9PSAxMykKKwkJcmV0dXJuIGZhbHNlOworCiAJcmV0dXJuICEoY3RybCAmIFdJTl9DVFJMX0VOQUJMRSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKaW5kZXggMTlkYjAzNi4uZGNiYmI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKQEAgLTQxNyw2ICs0MTcsNiBAQAogbW9kdWxlX2luaXQoYWdwX2FsaV9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hbGlfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCAzYjQ3ZWQwLi4wZWYzNTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTgxMyw2ICs4MTMsNiBAQAogbW9kdWxlX2luaXQoYWdwX2FtZDY0X21vZF9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hbWQ2NF9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIEFuZGkgS2xlZW4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMsIEFuZGkgS2xlZW4iKTsKIG1vZHVsZV9wYXJhbShhZ3BfdHJ5X3Vuc3VwcG9ydGVkLCBib29sLCAwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKaW5kZXggMThhN2E2Yi4uNzVhOTc4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKQEAgLTU3OSw2ICs1NzksNiBAQAogbW9kdWxlX2luaXQoYWdwX2F0aV9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hdGlfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jCmluZGV4IDMxN2MyOGMuLjM4ZmZiMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIF9fc2V0dXAoImFncD0iLCBhZ3Bfc2V0dXApOwogI2VuZGlmCiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzLCBKZWZmIEhhcnRtYW5uIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFHUCBHQVJUIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKEFHUEdBUlRfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKaW5kZXggZjliOWNhNS4uMGEyMWRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCkBAIC05MjAsNSArOTIwLDUgQEAKIG1vZHVsZV9pbml0KGFncF9pbnRlbF9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9pbnRlbF9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMsIFZhcmlvdXMgQEludGVsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKaW5kZXggZjMzMzQ4Mi4uOTJhYTQzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCkBAIC0xNDM4LDUgKzE0MzgsNSBAQAogfQogRVhQT1JUX1NZTUJPTChpbnRlbF9nbWNoX3JlbW92ZSk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzLCBWYXJpb3VzIEBJbnRlbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKaW5kZXggYTE4NjFiNy4uNmM4ZDM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTnZpZGlhIEFHUEdBUlQgcm91dGluZXMuCiAgKiBCYXNlZCB1cG9uIGEgMi40IGFncGdhcnQgZGlmZiBieSB0aGUgZm9sa3MgZnJvbSBOVklESUEsIGFuZCBoYWNrZWQgdXAKLSAqIHRvIHdvcmsgaW4gMi41IGJ5IERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+CisgKiB0byB3b3JrIGluIDIuNSBieSBEYXZlIEpvbmVzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggMjI4ZjIwYy4uYTQ5NjFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKQEAgLTU5NSw0ICs1OTUsNCBAQAogbW9kdWxlX2V4aXQoYWdwX3ZpYV9jbGVhbnVwKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggNWZhODNmNy4uNmI2NWZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTE5OSwxOCArMTk5LDYgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgIGd1aWRfc2V0OwogCWNoYXIgICAgICAgICAgICAgICAgICAgbmFtZVsxNl07CiAJc3RydWN0IGtyZWYJICAgICAgIHVzZWNvdW50OwotCi0JLyogYm1jIGRldmljZSBhdHRyaWJ1dGVzICovCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2aWNlX2lkX2F0dHI7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcHJvdmlkZXNfZGV2X3NkcnNfYXR0cjsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSByZXZpc2lvbl9hdHRyOwotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGZpcm13YXJlX3Jldl9hdHRyOwotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHZlcnNpb25fYXR0cjsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhZGRfZGV2X3N1cHBvcnRfYXR0cjsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBtYW51ZmFjdHVyZXJfaWRfYXR0cjsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwcm9kdWN0X2lkX2F0dHI7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZ3VpZF9hdHRyOwotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF1eF9maXJtd2FyZV9yZXZfYXR0cjsKIH07CiAjZGVmaW5lIHRvX2JtY19kZXZpY2UoeCkgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IGJtY19kZXZpY2UsIHBkZXYuZGV2KQogCkBAIC0yMjUyLDcgKzIyNDAsNyBAQAogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTAsICIldVxuIiwgYm1jLT5pZC5kZXZpY2VfaWQpOwogfQotREVWSUNFX0FUVFIoZGV2aWNlX2lkLCBTX0lSVUdPLCBkZXZpY2VfaWRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGV2aWNlX2lkLCBTX0lSVUdPLCBkZXZpY2VfaWRfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHByb3ZpZGVzX2RldmljZV9zZHJzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yMjYzLDcgKzIyNTEsOCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIDEwLCAiJXVcbiIsCiAJCQkoYm1jLT5pZC5kZXZpY2VfcmV2aXNpb24gJiAweDgwKSA+PiA3KTsKIH0KLURFVklDRV9BVFRSKHByb3ZpZGVzX2RldmljZV9zZHJzLCBTX0lSVUdPLCBwcm92aWRlc19kZXZpY2Vfc2Ryc19zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwcm92aWRlc19kZXZpY2Vfc2RycywgU19JUlVHTywgcHJvdmlkZXNfZGV2aWNlX3NkcnNfc2hvdywKKwkJICAgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHJldmlzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY2hhciAqYnVmKQpAQCAtMjI3Myw3ICsyMjYyLDcgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiV1XG4iLAogCQkJYm1jLT5pZC5kZXZpY2VfcmV2aXNpb24gJiAweDBGKTsKIH0KLURFVklDRV9BVFRSKHJldmlzaW9uLCBTX0lSVUdPLCByZXZpc2lvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXZpc2lvbiwgU19JUlVHTywgcmV2aXNpb25fc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IGZpcm13YXJlX3JldmlzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjI4NCw3ICsyMjczLDcgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiV1LiV4XG4iLCBibWMtPmlkLmZpcm13YXJlX3JldmlzaW9uXzEsCiAJCQlibWMtPmlkLmZpcm13YXJlX3JldmlzaW9uXzIpOwogfQotREVWSUNFX0FUVFIoZmlybXdhcmVfcmV2aXNpb24sIFNfSVJVR08sIGZpcm13YXJlX3JldmlzaW9uX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGZpcm13YXJlX3JldmlzaW9uLCBTX0lSVUdPLCBmaXJtd2FyZV9yZXZpc2lvbl9zaG93LCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgaXBtaV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTIyOTYsNyArMjI4NSw3IEBACiAJCQlpcG1pX3ZlcnNpb25fbWFqb3IoJmJtYy0+aWQpLAogCQkJaXBtaV92ZXJzaW9uX21pbm9yKCZibWMtPmlkKSk7CiB9Ci1ERVZJQ0VfQVRUUihpcG1pX3ZlcnNpb24sIFNfSVJVR08sIGlwbWlfdmVyc2lvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpcG1pX3ZlcnNpb24sIFNfSVJVR08sIGlwbWlfdmVyc2lvbl9zaG93LCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgYWRkX2Rldl9zdXBwb3J0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTIzMDcsNyArMjI5Niw4IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTAsICIweCUwMnhcbiIsCiAJCQlibWMtPmlkLmFkZGl0aW9uYWxfZGV2aWNlX3N1cHBvcnQpOwogfQotREVWSUNFX0FUVFIoYWRkaXRpb25hbF9kZXZpY2Vfc3VwcG9ydCwgU19JUlVHTywgYWRkX2Rldl9zdXBwb3J0X3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGFkZGl0aW9uYWxfZGV2aWNlX3N1cHBvcnQsIFNfSVJVR08sIGFkZF9kZXZfc3VwcG9ydF9zaG93LAorCQkgICBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgbWFudWZhY3R1cmVyX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTIzMTcsNyArMjMwNyw3IEBACiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIjB4JTYuNnhcbiIsIGJtYy0+aWQubWFudWZhY3R1cmVyX2lkKTsKIH0KLURFVklDRV9BVFRSKG1hbnVmYWN0dXJlcl9pZCwgU19JUlVHTywgbWFudWZhY3R1cmVyX2lkX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG1hbnVmYWN0dXJlcl9pZCwgU19JUlVHTywgbWFudWZhY3R1cmVyX2lkX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBwcm9kdWN0X2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjMyNyw3ICsyMzE3LDcgQEAKIAogCXJldHVybiBzbnByaW50ZihidWYsIDEwLCAiMHglNC40eFxuIiwgYm1jLT5pZC5wcm9kdWN0X2lkKTsKIH0KLURFVklDRV9BVFRSKHByb2R1Y3RfaWQsIFNfSVJVR08sIHByb2R1Y3RfaWRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIocHJvZHVjdF9pZCwgU19JUlVHTywgcHJvZHVjdF9pZF9zaG93LCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgYXV4X2Zpcm13YXJlX3Jldl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjM0MSw3ICsyMzMxLDcgQEAKIAkJCWJtYy0+aWQuYXV4X2Zpcm13YXJlX3JldmlzaW9uWzFdLAogCQkJYm1jLT5pZC5hdXhfZmlybXdhcmVfcmV2aXNpb25bMF0pOwogfQotREVWSUNFX0FUVFIoYXV4X2Zpcm13YXJlX3JldmlzaW9uLCBTX0lSVUdPLCBhdXhfZmlybXdhcmVfcmV2X3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGF1eF9maXJtd2FyZV9yZXZpc2lvbiwgU19JUlVHTywgYXV4X2Zpcm13YXJlX3Jldl9zaG93LCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgZ3VpZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgY2hhciAqYnVmKQpAQCAtMjM1Miw3ICsyMzQyLDcgQEAKIAkJCShsb25nIGxvbmcpIGJtYy0+Z3VpZFswXSwKIAkJCShsb25nIGxvbmcpIGJtYy0+Z3VpZFs4XSk7CiB9Ci1ERVZJQ0VfQVRUUihndWlkLCBTX0lSVUdPLCBndWlkX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGd1aWQsIFNfSVJVR08sIGd1aWRfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpibWNfZGV2X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2RldmljZV9pZC5hdHRyLApAQCAtMjM5MiwxMCArMjM4MiwxMCBAQAogCiAJaWYgKGJtYy0+aWQuYXV4X2Zpcm13YXJlX3JldmlzaW9uX3NldCkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZibWMtPnBkZXYuZGV2LAotCQkJCSAgICZibWMtPmF1eF9maXJtd2FyZV9yZXZfYXR0cik7CisJCQkJICAgJmRldl9hdHRyX2F1eF9maXJtd2FyZV9yZXZpc2lvbik7CiAJaWYgKGJtYy0+Z3VpZF9zZXQpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmYm1jLT5wZGV2LmRldiwKLQkJCQkgICAmYm1jLT5ndWlkX2F0dHIpOworCQkJCSAgICZkZXZfYXR0cl9ndWlkKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZibWMtPnBkZXYpOwogfQpAQCAtMjQyMiwxNiArMjQxMiwxNCBAQAogCWludCBlcnI7CiAKIAlpZiAoYm1jLT5pZC5hdXhfZmlybXdhcmVfcmV2aXNpb25fc2V0KSB7Ci0JCWJtYy0+YXV4X2Zpcm13YXJlX3Jldl9hdHRyLmF0dHIubmFtZSA9ICJhdXhfZmlybXdhcmVfcmV2aXNpb24iOwogCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmJtYy0+cGRldi5kZXYsCi0JCQkJICAgJmJtYy0+YXV4X2Zpcm13YXJlX3Jldl9hdHRyKTsKKwkJCQkJICZkZXZfYXR0cl9hdXhfZmlybXdhcmVfcmV2aXNpb24pOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJfQogCWlmIChibWMtPmd1aWRfc2V0KSB7Ci0JCWJtYy0+Z3VpZF9hdHRyLmF0dHIubmFtZSA9ICJndWlkIjsKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZibWMtPnBkZXYuZGV2LAotCQkJCSAgICZibWMtPmd1aWRfYXR0cik7CisJCQkJCSAmZGV2X2F0dHJfZ3VpZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9hdXhfZmlybTsKIAl9CkBAIC0yNDQxLDcgKzI0MjksNyBAQAogb3V0X2F1eF9maXJtOgogCWlmIChibWMtPmlkLmF1eF9maXJtd2FyZV9yZXZpc2lvbl9zZXQpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmYm1jLT5wZGV2LmRldiwKLQkJCQkgICAmYm1jLT5hdXhfZmlybXdhcmVfcmV2X2F0dHIpOworCQkJCSAgICZkZXZfYXR0cl9hdXhfZmlybXdhcmVfcmV2aXNpb24pOwogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NzaWYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc3NpZi5jCmluZGV4IGUxNzhhYzIuLjk4MmI5NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc3NpZi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc3NpZi5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjZGVmaW5lIFBGWCAiaXBtaV9zc2lmOiAiCiAjZGVmaW5lIERFVklDRV9OQU1FICJpcG1pX3NzaWYiCkBAIC05NjgsNyArOTY5LDggQEAKIAogCQlkb19nZXR0aW1lb2ZkYXkoJnQpOwogCQlwcl9pbmZvKCIqKkVucXVldWUgJTAyeCAlMDJ4OiAlbGQuJTYuNmxkXG4iLAotCQkgICAgICAgbXNnLT5kYXRhWzBdLCBtc2ctPmRhdGFbMV0sIHQudHZfc2VjLCB0LnR2X3VzZWMpOworCQkgICAgICAgbXNnLT5kYXRhWzBdLCBtc2ctPmRhdGFbMV0sCisJCSAgICAgICAobG9uZykgdC50dl9zZWMsIChsb25nKSB0LnR2X3VzZWMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvYXQ5MS9jbGstc2xvdy5jIGIvZHJpdmVycy9jbGsvYXQ5MS9jbGstc2xvdy5jCmluZGV4IDMyZjdjMWIuLjJmMTNiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXNsb3cuYworKysgYi9kcml2ZXJzL2Nsay9hdDkxL2Nsay1zbG93LmMKQEAgLTcwLDYgKzcwLDcgQEAKIAogI2RlZmluZSB0b19jbGtfc2FtOXg1X3Nsb3coaHcpIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGNsa19zYW05eDVfc2xvdywgaHcpCiAKK3N0YXRpYyBzdHJ1Y3QgY2xrICpzbG93X2NsazsKIAogc3RhdGljIGludCBjbGtfc2xvd19vc2NfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKIHsKQEAgLTM1Nyw2ICszNTgsOCBAQAogCWNsayA9IGNsa19yZWdpc3RlcihOVUxMLCAmc2xvd2NrLT5odyk7CiAJaWYgKElTX0VSUihjbGspKQogCQlrZnJlZShzbG93Y2spOworCWVsc2UKKwkJc2xvd19jbGsgPSBjbGs7CiAKIAlyZXR1cm4gY2xrOwogfQpAQCAtNDMzLDYgKzQzNiw4IEBACiAJY2xrID0gY2xrX3JlZ2lzdGVyKE5VTEwsICZzbG93Y2stPmh3KTsKIAlpZiAoSVNfRVJSKGNsaykpCiAJCWtmcmVlKHNsb3djayk7CisJZWxzZQorCQlzbG93X2NsayA9IGNsazsKIAogCXJldHVybiBjbGs7CiB9CkBAIC00NjUsMyArNDcwLDI1IEBACiAKIAlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7CiB9CisKKy8qCisgKiBGSVhNRTogQWxsIHNsb3cgY2xrIHVzZXJzIGFyZSBub3QgcHJvcGVybHkgY2xhaW1pbmcgaXQgKGdldCArIHByZXBhcmUgKworICogZW5hYmxlKSBiZWZvcmUgdXNpbmcgaXQuCisgKiBJZiBhbGwgdXNlcnMgcHJvcGVybHkgY2xhaW1pbmcgdGhpcyBjbG9jayBkZWNpZGUgdGhhdCB0aGV5IGRvbid0IG5lZWQgaXQKKyAqIGFueW1vcmUgKG9yIGFyZSByZW1vdmVkKSwgaXQgaXMgZGlzYWJsZWQgd2hpbGUgZmF1bHR5IHVzZXJzIGFyZSBzdGlsbAorICogcmVxdWlyaW5nIGl0LCBhbmQgdGhlIHN5c3RlbSBoYW5ncy4KKyAqIFByZXZlbnQgdGhpcyBjbG9jayBmcm9tIGJlaW5nIGRpc2FibGVkIHVudGlsIGFsbCB1c2VycyBhcmUgcHJvcGVybHkKKyAqIHJlcXVlc3RpbmcgaXQuCisgKiBPbmNlIHRoaXMgaXMgZG9uZSB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBzbG93X2NsayB2YXJpYWJsZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgb2ZfYXQ5MV9jbGtfc2xvd19yZXRhaW4odm9pZCkKK3sKKwlpZiAoIXNsb3dfY2xrKQorCQlyZXR1cm4gMDsKKworCV9fY2xrX2dldChzbG93X2Nsayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHNsb3dfY2xrKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChvZl9hdDkxX2Nsa19zbG93X3JldGFpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9iZXJsaW4vYmcycS5jIGIvZHJpdmVycy9jbGsvYmVybGluL2JnMnEuYwppbmRleCAyMTc4NGU0Li40NDBlZjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9iZXJsaW4vYmcycS5jCisrKyBiL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZzJxLmMKQEAgLTI4NSw3ICsyODUsNiBAQAogCXsgInBicmlkZ2UiLAkicGVyaWYiLAkxNSwgQ0xLX0lHTk9SRV9VTlVTRUQgfSwKIAl7ICJzZGlvIiwJInBlcmlmIiwJMTYsIENMS19JR05PUkVfVU5VU0VEIH0sCiAJeyAibmZjIiwJInBlcmlmIiwJMTggfSwKLQl7ICJzbWVtYyIsCSJwZXJpZiIsCTE5IH0sCiAJeyAicGNpZSIsCSJwZXJpZiIsCTIyIH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGstcHBjLWNvcmVuZXQuYyBiL2RyaXZlcnMvY2xrL2Nsay1wcGMtY29yZW5ldC5jCmluZGV4IGI2ZTZjODUuLjBhNDdkNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay1wcGMtY29yZW5ldC5jCisrKyBiL2RyaXZlcnMvY2xrL2Nsay1wcGMtY29yZW5ldC5jCkBAIC0yOTEsNyArMjkxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHBjX2NvcmVuZXRfY2xrX2RyaXZlciBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHBjX2NvcmVuZXRfY2xrX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJwcGNfY29yZW5ldF9jbG9jayIsCiAJCS5vZl9tYXRjaF90YWJsZSA9IHBwY19jbGtfaWRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLmMgYi9kcml2ZXJzL2Nsay9jbGsuYwppbmRleCBmNDk2M2I3Li5kNDhhYzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGsuYworKysgYi9kcml2ZXJzL2Nsay9jbGsuYwpAQCAtMTM2Niw3ICsxMzY2LDcgQEAKIAkJbmV3X3JhdGUgPSBjbGstPm9wcy0+ZGV0ZXJtaW5lX3JhdGUoY2xrLT5odywgcmF0ZSwKIAkJCQkJCSAgICAmYmVzdF9wYXJlbnRfcmF0ZSwKIAkJCQkJCSAgICAmcGFyZW50X2h3KTsKLQkJcGFyZW50ID0gcGFyZW50X2h3LT5jbGs7CisJCXBhcmVudCA9IHBhcmVudF9odyA/IHBhcmVudF9ody0+Y2xrIDogTlVMTDsKIAl9IGVsc2UgaWYgKGNsay0+b3BzLT5yb3VuZF9yYXRlKSB7CiAJCW5ld19yYXRlID0gY2xrLT5vcHMtPnJvdW5kX3JhdGUoY2xrLT5odywgcmF0ZSwKIAkJCQkJCSZiZXN0X3BhcmVudF9yYXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1jcHUuYyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1jcHUuYwppbmRleCA3NWM4YzQ1Li44NTM5YzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstY3B1LmMKKysrIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLWNwdS5jCkBAIC0xMjQsMTAgKzEyNCwxMSBAQAogewogCWNvbnN0IHN0cnVjdCByb2NrY2hpcF9jcHVjbGtfcmVnX2RhdGEgKnJlZ19kYXRhID0gY3B1Y2xrLT5yZWdfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGFsdF9wcmF0ZSwgYWx0X2RpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYWx0X3ByYXRlID0gY2xrX2dldF9yYXRlKGNwdWNsay0+YWx0X3BhcmVudCk7CiAKLQlzcGluX2xvY2soY3B1Y2xrLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShjcHVjbGstPmxvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogSWYgdGhlIG9sZCBwYXJlbnQgY2xvY2sgc3BlZWQgaXMgbGVzcyB0aGFuIHRoZSBjbG9jayBzcGVlZApAQCAtMTY0LDcgKzE2NSw3IEBACiAJCQljcHVjbGstPnJlZ19iYXNlICsgcmVnX2RhdGEtPmNvcmVfcmVnKTsKIAl9CiAKLQlzcGluX3VubG9jayhjcHVjbGstPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY3B1Y2xrLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3Myw2ICsxNzQsNyBAQAogewogCWNvbnN0IHN0cnVjdCByb2NrY2hpcF9jcHVjbGtfcmVnX2RhdGEgKnJlZ19kYXRhID0gY3B1Y2xrLT5yZWdfZGF0YTsKIAljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfY3B1Y2xrX3JhdGVfdGFibGUgKnJhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJhdGUgPSByb2NrY2hpcF9nZXRfY3B1Y2xrX3NldHRpbmdzKGNwdWNsaywgbmRhdGEtPm5ld19yYXRlKTsKIAlpZiAoIXJhdGUpIHsKQEAgLTE4MSw3ICsxODMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcGluX2xvY2soY3B1Y2xrLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShjcHVjbGstPmxvY2ssIGZsYWdzKTsKIAogCWlmIChuZGF0YS0+b2xkX3JhdGUgPCBuZGF0YS0+bmV3X3JhdGUpCiAJCXJvY2tjaGlwX2NwdWNsa19zZXRfZGl2aWRlcnMoY3B1Y2xrLCByYXRlKTsKQEAgLTIwMSw3ICsyMDMsNyBAQAogCWlmIChuZGF0YS0+b2xkX3JhdGUgPiBuZGF0YS0+bmV3X3JhdGUpCiAJCXJvY2tjaGlwX2NwdWNsa19zZXRfZGl2aWRlcnMoY3B1Y2xrLCByYXRlKTsKIAotCXNwaW5fdW5sb2NrKGNwdWNsay0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjcHVjbGstPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzE4OC5jIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzE4OC5jCmluZGV4IGM1NDA3ODkuLjdlYjY4NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMxODguYworKysgYi9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszMTg4LmMKQEAgLTIxMCw2ICsyMTAsMTcgQEAKIFBOQU1FKG11eF9tYWNfcCkJCT0geyAiZ3BsbCIsICJkcGxsIiB9OwogUE5BTUUobXV4X3NjbGtfbWFjcmVmX3ApCT0geyAibWFjX3NyYyIsICJleHRfcm1paSIgfTsKIAorc3RhdGljIHN0cnVjdCByb2NrY2hpcF9wbGxfY2xvY2sgcmszMDY2X3BsbF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwlbYXBsbF0gPSBQTEwocGxsX3JrMzA2NiwgUExMX0FQTEwsICJhcGxsIiwgbXV4X3BsbF9wLCAwLCBSSzI5MjhfUExMX0NPTigwKSwKKwkJICAgICBSSzI5MjhfTU9ERV9DT04sIDAsIDUsIDAsIHJrMzE4OF9wbGxfcmF0ZXMpLAorCVtkcGxsXSA9IFBMTChwbGxfcmszMDY2LCBQTExfRFBMTCwgImRwbGwiLCBtdXhfcGxsX3AsIDAsIFJLMjkyOF9QTExfQ09OKDQpLAorCQkgICAgIFJLMjkyOF9NT0RFX0NPTiwgNCwgNCwgMCwgTlVMTCksCisJW2NwbGxdID0gUExMKHBsbF9yazMwNjYsIFBMTF9DUExMLCAiY3BsbCIsIG11eF9wbGxfcCwgMCwgUksyOTI4X1BMTF9DT04oOCksCisJCSAgICAgUksyOTI4X01PREVfQ09OLCA4LCA2LCBST0NLQ0hJUF9QTExfU1lOQ19SQVRFLCByazMxODhfcGxsX3JhdGVzKSwKKwlbZ3BsbF0gPSBQTEwocGxsX3JrMzA2NiwgUExMX0dQTEwsICJncGxsIiwgbXV4X3BsbF9wLCAwLCBSSzI5MjhfUExMX0NPTigxMiksCisJCSAgICAgUksyOTI4X01PREVfQ09OLCAxMiwgNywgUk9DS0NISVBfUExMX1NZTkNfUkFURSwgcmszMTg4X3BsbF9yYXRlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHJvY2tjaGlwX3BsbF9jbG9jayByazMxODhfcGxsX2Nsa3NbXSBfX2luaXRkYXRhID0gewogCVthcGxsXSA9IFBMTChwbGxfcmszMDY2LCBQTExfQVBMTCwgImFwbGwiLCBtdXhfcGxsX3AsIDAsIFJLMjkyOF9QTExfQ09OKDApLAogCQkgICAgIFJLMjkyOF9NT0RFX0NPTiwgMCwgNiwgMCwgcmszMTg4X3BsbF9yYXRlcyksCkBAIC00MjcsMTEgKzQzOCwxMSBAQAogCS8qIGhjbGtfcGVyaSBnYXRlcyAqLwogCUdBVEUoMCwgImhjbGtfcGVyaV9heGlfbWF0cml4IiwgImhjbGtfcGVyaSIsIENMS19JR05PUkVfVU5VU0VELCBSSzI5MjhfQ0xLR0FURV9DT04oNCksIDAsIEdGTEFHUyksCiAJR0FURSgwLCAiaGNsa19wZXJpX2FoYl9hcmJpIiwgImhjbGtfcGVyaSIsIENMS19JR05PUkVfVU5VU0VELCBSSzI5MjhfQ0xLR0FURV9DT04oNCksIDYsIEdGTEFHUyksCi0JR0FURSgwLCAiaGNsa19lbWVtX3BlcmkiLCAiaGNsa19wZXJpIiwgMCwgUksyOTI4X0NMS0dBVEVfQ09OKDQpLCA3LCBHRkxBR1MpLAorCUdBVEUoMCwgImhjbGtfZW1lbV9wZXJpIiwgImhjbGtfcGVyaSIsIENMS19JR05PUkVfVU5VU0VELCBSSzI5MjhfQ0xLR0FURV9DT04oNCksIDcsIEdGTEFHUyksCiAJR0FURShIQ0xLX0VNQUMsICJoY2xrX2VtYWMiLCAiaGNsa19wZXJpIiwgMCwgUksyOTI4X0NMS0dBVEVfQ09OKDcpLCAwLCBHRkxBR1MpLAogCUdBVEUoSENMS19OQU5EQzAsICJoY2xrX25hbmRjMCIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNSksIDksIEdGTEFHUyksCi0JR0FURSgwLCAiaGNsa191c2JfcGVyaSIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNCksIDUsIEdGTEFHUyksCi0JR0FURShIQ0xLX09URzAsICJoY2xrX3VzYm90ZzAiLCAiaGNsa19wZXJpIiwgMCwgUksyOTI4X0NMS0dBVEVfQ09OKDUpLCAxMywgR0ZMQUdTKSwKKwlHQVRFKDAsICJoY2xrX3VzYl9wZXJpIiwgImhjbGtfcGVyaSIsIENMS19JR05PUkVfVU5VU0VELCBSSzI5MjhfQ0xLR0FURV9DT04oNCksIDUsIEdGTEFHUyksCisJR0FURShIQ0xLX09URzAsICJoY2xrX3VzYm90ZzAiLCAiaGNsa19wZXJpIiwgQ0xLX0lHTk9SRV9VTlVTRUQsIFJLMjkyOF9DTEtHQVRFX0NPTig1KSwgMTMsIEdGTEFHUyksCiAJR0FURShIQ0xLX0hTQURDLCAiaGNsa19oc2FkYyIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNyksIDUsIEdGTEFHUyksCiAJR0FURShIQ0xLX1BJREYsICJoY2xrX3BpZGZpbHRlciIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNyksIDYsIEdGTEFHUyksCiAJR0FURShIQ0xLX1NETU1DLCAiaGNsa19zZG1tYyIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNSksIDEwLCBHRkxBR1MpLApAQCAtNTkyLDcgKzYwMyw4IEBACiAJR0FURSgwLCAiaGNsa19jaWYxIiwgImhjbGtfY3B1IiwgMCwgUksyOTI4X0NMS0dBVEVfQ09OKDYpLCA2LCBHRkxBR1MpLAogCUdBVEUoMCwgImhjbGtfaGRtaSIsICJoY2xrX2NwdSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig0KSwgMTQsIEdGTEFHUyksCiAKLQlHQVRFKEhDTEtfT1RHMSwgImhjbGtfdXNib3RnMSIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNSksIDE0LCBHRkxBR1MpLAorCUdBVEUoSENMS19PVEcxLCAiaGNsa191c2JvdGcxIiwgImhjbGtfcGVyaSIsIENMS19JR05PUkVfVU5VU0VELAorCQkJUksyOTI4X0NMS0dBVEVfQ09OKDUpLCAxNCwgR0ZMQUdTKSwKIAogCUdBVEUoMCwgImFjbGtfY2lmMSIsICJhY2xrX3ZpbzEiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNiksIDcsIEdGTEFHUyksCiAKQEAgLTY4MCw3ICs2OTIsOCBAQAogCUdBVEUoMCwgImhjbGtfaW1lbTAiLCAiaGNsa19jcHUiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNCksIDE0LCBHRkxBR1MpLAogCUdBVEUoMCwgImhjbGtfaW1lbTEiLCAiaGNsa19jcHUiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNCksIDE1LCBHRkxBR1MpLAogCi0JR0FURShIQ0xLX09URzEsICJoY2xrX3VzYm90ZzEiLCAiaGNsa19wZXJpIiwgMCwgUksyOTI4X0NMS0dBVEVfQ09OKDcpLCAzLCBHRkxBR1MpLAorCUdBVEUoSENMS19PVEcxLCAiaGNsa191c2JvdGcxIiwgImhjbGtfcGVyaSIsIENMS19JR05PUkVfVU5VU0VELAorCQkJUksyOTI4X0NMS0dBVEVfQ09OKDcpLCAzLCBHRkxBR1MpLAogCUdBVEUoSENMS19IU0lDLCAiaGNsa19oc2ljIiwgImhjbGtfcGVyaSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig3KSwgNCwgR0ZMQUdTKSwKIAogCUdBVEUoUENMS19USU1FUjMsICJwY2xrX3RpbWVyMyIsICJwY2xrX2NwdSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig3KSwgOSwgR0ZMQUdTKSwKQEAgLTczNSw4ICs3NDgsOCBAQAogc3RhdGljIHZvaWQgX19pbml0IHJrMzA2NmFfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAlyazMxODhfY29tbW9uX2Nsa19pbml0KG5wKTsKLQlyb2NrY2hpcF9jbGtfcmVnaXN0ZXJfcGxscyhyazMxODhfcGxsX2Nsa3MsCi0JCQkJICAgQVJSQVlfU0laRShyazMxODhfcGxsX2Nsa3MpLAorCXJvY2tjaGlwX2Nsa19yZWdpc3Rlcl9wbGxzKHJrMzA2Nl9wbGxfY2xrcywKKwkJCQkgICBBUlJBWV9TSVpFKHJrMzA2Nl9wbGxfY2xrcyksCiAJCQkJICAgUkszMDY2X0dSRl9TT0NfU1RBVFVTKTsKIAlyb2NrY2hpcF9jbGtfcmVnaXN0ZXJfYnJhbmNoZXMocmszMDY2YV9jbGtfYnJhbmNoZXMsCiAJCQkJICBBUlJBWV9TSVpFKHJrMzA2NmFfY2xrX2JyYW5jaGVzKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszMjg4LmMgYi9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszMjg4LmMKaW5kZXggYWM2YmU3Yy4uMTExOTRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jCisrKyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODguYwpAQCAtMTQ1LDIwICsxNDUsMjAgQEAKIAl9CiAKIHN0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfY3B1Y2xrX3JhdGVfdGFibGUgcmszMjg4X2NwdWNsa19yYXRlc1tdIF9faW5pdGRhdGEgPSB7Ci0JUkszMjg4X0NQVUNMS19SQVRFKDE4MDAwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAotCVJLMzI4OF9DUFVDTEtfUkFURSgxNzA0MDAwMDAwLCAyLCA0LCAyLCA0LCA0KSwKLQlSSzMyODhfQ1BVQ0xLX1JBVEUoMTYwODAwMDAwMCwgMiwgNCwgMiwgNCwgNCksCi0JUkszMjg4X0NQVUNMS19SQVRFKDE1MTIwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAotCVJLMzI4OF9DUFVDTEtfUkFURSgxNDE2MDAwMDAwLCAyLCA0LCAyLCA0LCA0KSwKLQlSSzMyODhfQ1BVQ0xLX1JBVEUoMTIwMDAwMDAwMCwgMiwgNCwgMiwgNCwgNCksCi0JUkszMjg4X0NQVUNMS19SQVRFKDEwMDgwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAotCVJLMzI4OF9DUFVDTEtfUkFURSggODE2MDAwMDAwLCAyLCA0LCAyLCA0LCA0KSwKLQlSSzMyODhfQ1BVQ0xLX1JBVEUoIDY5NjAwMDAwMCwgMiwgNCwgMiwgNCwgNCksCi0JUkszMjg4X0NQVUNMS19SQVRFKCA2MDAwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAotCVJLMzI4OF9DUFVDTEtfUkFURSggNDA4MDAwMDAwLCAyLCA0LCAyLCA0LCA0KSwKLQlSSzMyODhfQ1BVQ0xLX1JBVEUoIDMxMjAwMDAwMCwgMiwgNCwgMiwgNCwgNCksCi0JUkszMjg4X0NQVUNMS19SQVRFKCAyMTYwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAotCVJLMzI4OF9DUFVDTEtfUkFURSggMTI2MDAwMDAwLCAyLCA0LCAyLCA0LCA0KSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoMTgwMDAwMDAwMCwgMSwgMywgMSwgMywgMyksCisJUkszMjg4X0NQVUNMS19SQVRFKDE3MDQwMDAwMDAsIDEsIDMsIDEsIDMsIDMpLAorCVJLMzI4OF9DUFVDTEtfUkFURSgxNjA4MDAwMDAwLCAxLCAzLCAxLCAzLCAzKSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoMTUxMjAwMDAwMCwgMSwgMywgMSwgMywgMyksCisJUkszMjg4X0NQVUNMS19SQVRFKDE0MTYwMDAwMDAsIDEsIDMsIDEsIDMsIDMpLAorCVJLMzI4OF9DUFVDTEtfUkFURSgxMjAwMDAwMDAwLCAxLCAzLCAxLCAzLCAzKSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoMTAwODAwMDAwMCwgMSwgMywgMSwgMywgMyksCisJUkszMjg4X0NQVUNMS19SQVRFKCA4MTYwMDAwMDAsIDEsIDMsIDEsIDMsIDMpLAorCVJLMzI4OF9DUFVDTEtfUkFURSggNjk2MDAwMDAwLCAxLCAzLCAxLCAzLCAzKSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoIDYwMDAwMDAwMCwgMSwgMywgMSwgMywgMyksCisJUkszMjg4X0NQVUNMS19SQVRFKCA0MDgwMDAwMDAsIDEsIDMsIDEsIDMsIDMpLAorCVJLMzI4OF9DUFVDTEtfUkFURSggMzEyMDAwMDAwLCAxLCAzLCAxLCAzLCAzKSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoIDIxNjAwMDAwMCwgMSwgMywgMSwgMywgMyksCisJUkszMjg4X0NQVUNMS19SQVRFKCAxMjYwMDAwMDAsIDEsIDMsIDEsIDMsIDMpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByb2NrY2hpcF9jcHVjbGtfcmVnX2RhdGEgcmszMjg4X2NwdWNsa19kYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5jCmluZGV4IDZhNzlmYzQuLjA5NWMxNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYXJtX2FyY2hfdGltZXIuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FybV9hcmNoX3RpbWVyLmMKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCiAJLyogUmVnaXN0ZXIgdGhlIENQMTUgYmFzZWQgY291bnRlciBpZiB3ZSBoYXZlIG9uZSAqLwogCWlmICh0eXBlICYgQVJDSF9DUDE1X1RJTUVSKSB7Ci0JCWlmIChhcmNoX3RpbWVyX3VzZV92aXJ0dWFsKQorCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJNNjQpIHx8IGFyY2hfdGltZXJfdXNlX3ZpcnR1YWwpCiAJCQlhcmNoX3RpbWVyX3JlYWRfY291bnRlciA9IGFyY2hfY291bnRlcl9nZXRfY250dmN0OwogCQllbHNlCiAJCQlhcmNoX3RpbWVyX3JlYWRfY291bnRlciA9IGFyY2hfY291bnRlcl9nZXRfY250cGN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9iY21fa29uYV90aW1lci5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9iY21fa29uYV90aW1lci5jCmluZGV4IDA1OTVkYzYuLmYxZTMzZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYmNtX2tvbmFfdGltZXIuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2JjbV9rb25hX3RpbWVyLmMKQEAgLTY4LDkgKzY4LDggQEAKIH0KIAogc3RhdGljIHZvaWQKLWtvbmFfdGltZXJfZ2V0X2NvdW50ZXIodm9pZCAqdGltZXJfYmFzZSwgdWludDMyX3QgKm1zdywgdWludDMyX3QgKmxzdykKK2tvbmFfdGltZXJfZ2V0X2NvdW50ZXIodm9pZCBfX2lvbWVtICp0aW1lcl9iYXNlLCB1aW50MzJfdCAqbXN3LCB1aW50MzJfdCAqbHN3KQogewotCXZvaWQgX19pb21lbSAqYmFzZSA9IElPTUVNKHRpbWVyX2Jhc2UpOwogCWludCBsb29wX2xpbWl0ID0gNDsKIAogCS8qCkBAIC04Niw5ICs4NSw5IEBACiAJICovCiAKIAl3aGlsZSAoLS1sb29wX2xpbWl0KSB7Ci0JCSptc3cgPSByZWFkbChiYXNlICsgS09OQV9HUFRJTUVSX1NUQ0hJX09GRlNFVCk7Ci0JCSpsc3cgPSByZWFkbChiYXNlICsgS09OQV9HUFRJTUVSX1NUQ0xPX09GRlNFVCk7Ci0JCWlmICgqbXN3ID09IHJlYWRsKGJhc2UgKyBLT05BX0dQVElNRVJfU1RDSElfT0ZGU0VUKSkKKwkJKm1zdyA9IHJlYWRsKHRpbWVyX2Jhc2UgKyBLT05BX0dQVElNRVJfU1RDSElfT0ZGU0VUKTsKKwkJKmxzdyA9IHJlYWRsKHRpbWVyX2Jhc2UgKyBLT05BX0dQVElNRVJfU1RDTE9fT0ZGU0VUKTsKKwkJaWYgKCptc3cgPT0gcmVhZGwodGltZXJfYmFzZSArIEtPTkFfR1BUSU1FUl9TVENISV9PRkZTRVQpKQogCQkJYnJlYWs7CiAJfQogCWlmICghbG9vcF9saW1pdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9leHlub3NfbWN0LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2V4eW5vc19tY3QuYwppbmRleCA5NDAzMDYxLi44MzU2NGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2V4eW5vc19tY3QuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2V4eW5vc19tY3QuYwpAQCAtOTcsOCArOTcsOCBAQAogCXdyaXRlbF9yZWxheGVkKHZhbHVlLCByZWdfYmFzZSArIG9mZnNldCk7CiAKIAlpZiAobGlrZWx5KG9mZnNldCA+PSBFWFlOT1M0X01DVF9MX0JBU0UoMCkpKSB7Ci0JCXN0YXRfYWRkciA9IChvZmZzZXQgJiB+RVhZTk9TNF9NQ1RfTF9NQVNLKSArIE1DVF9MX1dTVEFUX09GRlNFVDsKLQkJc3dpdGNoIChvZmZzZXQgJiBFWFlOT1M0X01DVF9MX01BU0spIHsKKwkJc3RhdF9hZGRyID0gKG9mZnNldCAmIEVYWU5PUzRfTUNUX0xfTUFTSykgKyBNQ1RfTF9XU1RBVF9PRkZTRVQ7CisJCXN3aXRjaCAob2Zmc2V0ICYgfkVYWU5PUzRfTUNUX0xfTUFTSykgewogCQljYXNlIE1DVF9MX1RDT05fT0ZGU0VUOgogCQkJbWFzayA9IDEgPDwgMzsJCS8qIExfVENPTiB3cml0ZSBzdGF0dXMgKi8KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKaW5kZXggMGY2NjViOC4uZjE1MGNhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJY2VkLT5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDOwogCWNlZC0+ZmVhdHVyZXMgfD0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVDsKIAljZWQtPnJhdGluZyA9IDIwMDsKLQljZWQtPmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWNlZC0+Y3B1bWFzayA9IGNwdV9wb3NzaWJsZV9tYXNrOwogCWNlZC0+c2V0X25leHRfZXZlbnQgPSBzaF90bXVfY2xvY2tfZXZlbnRfbmV4dDsKIAljZWQtPnNldF9tb2RlID0gc2hfdG11X2Nsb2NrX2V2ZW50X21vZGU7CiAJY2VkLT5zdXNwZW5kID0gc2hfdG11X2Nsb2NrX2V2ZW50X3N1c3BlbmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS1kdC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEtZHQuYwppbmRleCBmNTYxNDdhLi5mZGU5N2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS1kdC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLWR0LmMKQEAgLTIxMSw2ICsyMTEsMTcgQEAKIAkvKiBPUFBzIG1pZ2h0IGJlIHBvcHVsYXRlZCBhdCBydW50aW1lLCBkb24ndCBjaGVjayBmb3IgZXJyb3IgaGVyZSAqLwogCW9mX2luaXRfb3BwX3RhYmxlKGNwdV9kZXYpOwogCisJLyoKKwkgKiBCdXQgd2UgbmVlZCBPUFAgdGFibGUgdG8gZnVuY3Rpb24gc28gaWYgaXQgaXMgbm90IHRoZXJlIGxldCdzCisJICogZ2l2ZSBwbGF0Zm9ybSBjb2RlIGNoYW5jZSB0byBwcm92aWRlIGl0IGZvciB1cy4KKwkgKi8KKwlyZXQgPSBkZXZfcG1fb3BwX2dldF9vcHBfY291bnQoY3B1X2Rldik7CisJaWYgKHJldCA8PSAwKSB7CisJCXByX2RlYnVnKCJPUFAgdGFibGUgaXMgbm90IHJlYWR5LCBkZWZlcnJpbmcgcHJvYmVcbiIpOworCQlyZXQgPSAtRVBST0JFX0RFRkVSOworCQlnb3RvIG91dF9mcmVlX29wcDsKKwl9CisKIAlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpIHsKIAkJcmV0ID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IGEwOWEyOWMuLjQ2YmVkNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMjAyOCw2ICsyMDI4LDEyIEBACiAJLyogRG9uJ3Qgc3RhcnQgYW55IGdvdmVybm9yIG9wZXJhdGlvbnMgaWYgd2UgYXJlIGVudGVyaW5nIHN1c3BlbmQgKi8KIAlpZiAoY3B1ZnJlcV9zdXNwZW5kZWQpCiAJCXJldHVybiAwOworCS8qCisJICogR292ZXJub3IgbWlnaHQgbm90IGJlIGluaXRpYXRlZCBoZXJlIGlmIEFDUEkgX1BQQyBjaGFuZ2VkCisJICogbm90aWZpY2F0aW9uIGhhcHBlbmVkLCBzbyBjaGVjayBpdC4KKwkgKi8KKwlpZiAoIXBvbGljeS0+Z292ZXJub3IpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHBvbGljeS0+Z292ZXJub3ItPm1heF90cmFuc2l0aW9uX2xhdGVuY3kgJiYKIAkgICAgcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL2xhZGRlci5jIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9sYWRkZXIuYwppbmRleCAzNzI2M2Q5Li40MDFjMDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL2xhZGRlci5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbGFkZGVyLmMKQEAgLTc5LDEyICs3OSw3IEBACiAKIAlsYXN0X3N0YXRlID0gJmxkZXYtPnN0YXRlc1tsYXN0X2lkeF07CiAKLQlpZiAoIShkcnYtPnN0YXRlc1tsYXN0X2lkeF0uZmxhZ3MgJiBDUFVJRExFX0ZMQUdfVElNRV9JTlZBTElEKSkgewotCQlsYXN0X3Jlc2lkZW5jeSA9IGNwdWlkbGVfZ2V0X2xhc3RfcmVzaWRlbmN5KGRldikgLSBcCi0JCQkJCSBkcnYtPnN0YXRlc1tsYXN0X2lkeF0uZXhpdF9sYXRlbmN5OwotCX0KLQllbHNlCi0JCWxhc3RfcmVzaWRlbmN5ID0gbGFzdF9zdGF0ZS0+dGhyZXNob2xkLnByb21vdGlvbl90aW1lICsgMTsKKwlsYXN0X3Jlc2lkZW5jeSA9IGNwdWlkbGVfZ2V0X2xhc3RfcmVzaWRlbmN5KGRldikgLSBkcnYtPnN0YXRlc1tsYXN0X2lkeF0uZXhpdF9sYXRlbmN5OwogCiAJLyogY29uc2lkZXIgcHJvbW90aW9uICovCiAJaWYgKGxhc3RfaWR4IDwgZHJ2LT5zdGF0ZV9jb3VudCAtIDEgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbWVudS5jIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKaW5kZXggNjU5ZDdiMC4uNDA1ODA3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKQEAgLTM5Niw4ICszOTYsOCBAQAogCSAqIHBvd2VyIHN0YXRlIGFuZCBvY2N1cnJlbmNlIG9mIHRoZSB3YWtldXAgZXZlbnQuCiAJICoKIAkgKiBJZiB0aGUgZW50ZXJlZCBpZGxlIHN0YXRlIGRpZG4ndCBzdXBwb3J0IHJlc2lkZW5jeSBtZWFzdXJlbWVudHMsCi0JICogd2UgYXJlIGJhc2ljYWxseSBsb3N0IGluIHRoZSBkYXJrIGhvdyBtdWNoIHRpbWUgcGFzc2VkLgotCSAqIEFzIGEgY29tcHJvbWlzZSwgYXNzdW1lIHdlIHNsZXB0IGZvciB0aGUgd2hvbGUgZXhwZWN0ZWQgdGltZS4KKwkgKiB3ZSB1c2UgdGhlbSBhbnl3YXkgaWYgdGhleSBhcmUgc2hvcnQsIGFuZCBpZiBsb25nLAorCSAqIHRydW5jYXRlIHRvIHRoZSB3aG9sZSBleHBlY3RlZCB0aW1lLgogCSAqCiAJICogQW55IG1lYXN1cmVkIGFtb3VudCBvZiB0aW1lIHdpbGwgaW5jbHVkZSB0aGUgZXhpdCBsYXRlbmN5LgogCSAqIFNpbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluIHdoZW4gdGhlIHdha2V1cCBiZWd1biwgbm90IHdoZW4gaXQKQEAgLTQwNSwyMyArNDA1LDE4IEBACiAJICogdGhlIG1lYXN1cmVkIGFtb3VudCBvZiB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgZXhpdCBsYXRlbmN5LAogCSAqIGFzc3VtZSB0aGUgc3RhdGUgd2FzIG5ldmVyIHJlYWNoZWQgYW5kIHRoZSBleGl0IGxhdGVuY3kgaXMgMC4KIAkgKi8KLQlpZiAodW5saWtlbHkodGFyZ2V0LT5mbGFncyAmIENQVUlETEVfRkxBR19USU1FX0lOVkFMSUQpKSB7Ci0JCS8qIFVzZSB0aW1lciB2YWx1ZSBhcyBpcyAqLworCisJLyogbWVhc3VyZWQgdmFsdWUgKi8KKwltZWFzdXJlZF91cyA9IGNwdWlkbGVfZ2V0X2xhc3RfcmVzaWRlbmN5KGRldik7CisKKwkvKiBEZWR1Y3QgZXhpdCBsYXRlbmN5ICovCisJaWYgKG1lYXN1cmVkX3VzID4gdGFyZ2V0LT5leGl0X2xhdGVuY3kpCisJCW1lYXN1cmVkX3VzIC09IHRhcmdldC0+ZXhpdF9sYXRlbmN5OworCisJLyogTWFrZSBzdXJlIG91ciBjb2VmZmljaWVudHMgZG8gbm90IGV4Y2VlZCB1bml0eSAqLworCWlmIChtZWFzdXJlZF91cyA+IGRhdGEtPm5leHRfdGltZXJfdXMpCiAJCW1lYXN1cmVkX3VzID0gZGF0YS0+bmV4dF90aW1lcl91czsKIAotCX0gZWxzZSB7Ci0JCS8qIFVzZSBtZWFzdXJlZCB2YWx1ZSAqLwotCQltZWFzdXJlZF91cyA9IGNwdWlkbGVfZ2V0X2xhc3RfcmVzaWRlbmN5KGRldik7Ci0KLQkJLyogRGVkdWN0IGV4aXQgbGF0ZW5jeSAqLwotCQlpZiAobWVhc3VyZWRfdXMgPiB0YXJnZXQtPmV4aXRfbGF0ZW5jeSkKLQkJCW1lYXN1cmVkX3VzIC09IHRhcmdldC0+ZXhpdF9sYXRlbmN5OwotCi0JCS8qIE1ha2Ugc3VyZSBvdXIgY29lZmZpY2llbnRzIGRvIG5vdCBleGNlZWQgdW5pdHkgKi8KLQkJaWYgKG1lYXN1cmVkX3VzID4gZGF0YS0+bmV4dF90aW1lcl91cykKLQkJCW1lYXN1cmVkX3VzID0gZGF0YS0+bmV4dF90aW1lcl91czsKLQl9Ci0KIAkvKiBVcGRhdGUgb3VyIGNvcnJlY3Rpb24gcmF0aW8gKi8KIAluZXdfZmFjdG9yID0gZGF0YS0+Y29ycmVjdGlvbl9mYWN0b3JbZGF0YS0+YnVja2V0XTsKIAluZXdfZmFjdG9yIC09IG5ld19mYWN0b3IgLyBERUNBWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3L2NvcmUuYyBiL2RyaXZlcnMvZG1hL2R3L2NvcmUuYwppbmRleCAzODA0Nzg1Li41YzA2MjU0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZHcvY29yZS5jCisrKyBiL2RyaXZlcnMvZG1hL2R3L2NvcmUuYwpAQCAtMTUwNSw3ICsxNTA1LDYgQEAKIAlkdy0+cmVncyA9IGNoaXAtPnJlZ3M7CiAJY2hpcC0+ZHcgPSBkdzsKIAotCXBtX3J1bnRpbWVfZW5hYmxlKGNoaXAtPmRldik7CiAJcG1fcnVudGltZV9nZXRfc3luYyhjaGlwLT5kZXYpOwogCiAJZHdfcGFyYW1zID0gZG1hX3JlYWRfYnlhZGRyKGNoaXAtPnJlZ3MsIERXX1BBUkFNUyk7CkBAIC0xNzAzLDcgKzE3MDIsNiBAQAogCX0KIAogCXBtX3J1bnRpbWVfcHV0X3N5bmNfc3VzcGVuZChjaGlwLT5kZXYpOwotCXBtX3J1bnRpbWVfZGlzYWJsZShjaGlwLT5kZXYpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHdfZG1hX3JlbW92ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kdy9wbGF0Zm9ybS5jIGIvZHJpdmVycy9kbWEvZHcvcGxhdGZvcm0uYwppbmRleCBhNjMwMTYxLi4zMmVhMWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kdy9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvZG1hL2R3L3BsYXRmb3JtLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KQEAgLTE4NSw2ICsxODYsOCBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKwogCWVyciA9IGR3X2RtYV9wcm9iZShjaGlwLCBwZGF0YSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZHdfZG1hX3Byb2JlOwpAQCAtMjA1LDYgKzIwOCw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl9kd19kbWFfcHJvYmU6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCWNsa19kaXNhYmxlX3VucHJlcGFyZShjaGlwLT5jbGspOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMTcsNiArMjIxLDcgQEAKIAkJb2ZfZG1hX2NvbnRyb2xsZXJfZnJlZShwZGV2LT5kZXYub2Zfbm9kZSk7CiAKIAlkd19kbWFfcmVtb3ZlKGNoaXApOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoY2hpcC0+Y2xrKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tY3J5c3RhbGNvdmUuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWNyeXN0YWxjb3ZlLmMKaW5kZXggNTVkNDgwMy4uM2Q5ZTA4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tY3J5c3RhbGNvdmUuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1jcnlzdGFsY292ZS5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAlmb3IgKGdwaW8gPSAwOyBncGlvIDwgQ1JZU1RBTENPVkVfR1BJT19OVU07IGdwaW8rKykgewogCQlpZiAocGVuZGluZyAmIEJJVChncGlvKSkgewogCQkJdmlycSA9IGlycV9maW5kX21hcHBpbmcoY2ctPmNoaXAuaXJxZG9tYWluLCBncGlvKTsKLQkJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsKKwkJCWhhbmRsZV9uZXN0ZWRfaXJxKHZpcnEpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1kbG4yLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1kbG4yLmMKaW5kZXggOTc4YjUxZS4uY2UzYzE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZGxuMi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWRsbjIuYwpAQCAtNDcsMTMgKzQ3LDYgQEAKIAogI2RlZmluZSBETE4yX0dQSU9fTUFYX1BJTlMgMzIKIAotc3RydWN0IGRsbjJfaXJxX3dvcmsgewotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjI7Ci0JaW50IHBpbjsKLQlpbnQgdHlwZTsKLX07Ci0KIHN0cnVjdCBkbG4yX2dwaW8gewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IGdwaW9fY2hpcCBncGlvOwpAQCAtNjQsMTAgKzU3LDEyIEBACiAJICovCiAJREVDTEFSRV9CSVRNQVAob3V0cHV0X2VuYWJsZWQsIERMTjJfR1BJT19NQVhfUElOUyk7CiAKLQlERUNMQVJFX0JJVE1BUChpcnFzX21hc2tlZCwgRExOMl9HUElPX01BWF9QSU5TKTsKLQlERUNMQVJFX0JJVE1BUChpcnFzX2VuYWJsZWQsIERMTjJfR1BJT19NQVhfUElOUyk7Ci0JREVDTEFSRV9CSVRNQVAoaXJxc19wZW5kaW5nLCBETE4yX0dQSU9fTUFYX1BJTlMpOwotCXN0cnVjdCBkbG4yX2lycV93b3JrICppcnFfd29yazsKKwkvKiBhY3RpdmUgSVJRcyAtIG5vdCBzeW5jZWQgdG8gaGFyZHdhcmUgKi8KKwlERUNMQVJFX0JJVE1BUCh1bm1hc2tlZF9pcnFzLCBETE4yX0dQSU9fTUFYX1BJTlMpOworCS8qIGFjdGl2ZSBJUlFTIC0gc3luY2VkIHRvIGhhcmR3YXJlICovCisJREVDTEFSRV9CSVRNQVAoZW5hYmxlZF9pcnFzLCBETE4yX0dQSU9fTUFYX1BJTlMpOworCWludCBpcnFfdHlwZVtETE4yX0dQSU9fTUFYX1BJTlNdOworCXN0cnVjdCBtdXRleCBpcnFfbG9jazsKIH07CiAKIHN0cnVjdCBkbG4yX2dwaW9fcGluIHsKQEAgLTE0MSwxNiArMTM2LDE2IEBACiAJcmV0dXJuICEhcmV0OwogfQogCi1zdGF0aWMgdm9pZCBkbG4yX2dwaW9fcGluX3NldF9vdXRfdmFsKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IHBpbiwgaW50IHZhbHVlKQorc3RhdGljIGludCBkbG4yX2dwaW9fcGluX3NldF9vdXRfdmFsKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcGluLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IGRsbjJfZ3Bpb19waW5fdmFsIHJlcSA9IHsKIAkJLnBpbiA9IGNwdV90b19sZTE2KHBpbiksCiAJCS52YWx1ZSA9IHZhbHVlLAogCX07CiAKLQlkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfR1BJT19QSU5fU0VUX09VVF9WQUwsICZyZXEsCi0JCQkgc2l6ZW9mKHJlcSkpOworCXJldHVybiBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfR1BJT19QSU5fU0VUX09VVF9WQUwsICZyZXEsCisJCQkJc2l6ZW9mKHJlcSkpOwogfQogCiAjZGVmaW5lIERMTjJfR1BJT19ESVJFQ1RJT05fSU4JCTAKQEAgLTI2Nyw2ICsyNjIsMTMgQEAKIHN0YXRpYyBpbnQgZGxuMl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAogCQkJCSAgICAgIGludCB2YWx1ZSkKIHsKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCByZXQ7CisKKwlyZXQgPSBkbG4yX2dwaW9fcGluX3NldF9vdXRfdmFsKGRsbjIsIG9mZnNldCwgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCiAJcmV0dXJuIGRsbjJfZ3Bpb19zZXRfZGlyZWN0aW9uKGNoaXAsIG9mZnNldCwgRExOMl9HUElPX0RJUkVDVElPTl9PVVQpOwogfQogCkBAIC0yOTcsMzYgKzI5OSwxMyBAQAogCQkJCSZyZXEsIHNpemVvZihyZXEpKTsKIH0KIAotc3RhdGljIHZvaWQgZGxuMl9pcnFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCi17Ci0Jc3RydWN0IGRsbjJfaXJxX3dvcmsgKml3ID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBkbG4yX2lycV93b3JrLCB3b3JrKTsKLQlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gaXctPmRsbjI7Ci0JdTggdHlwZSA9IGl3LT50eXBlICYgRExOMl9HUElPX0VWRU5UX01BU0s7Ci0KLQlpZiAodGVzdF9iaXQoaXctPnBpbiwgZGxuMi0+aXJxc19lbmFibGVkKSkKLQkJZGxuMl9ncGlvX3NldF9ldmVudF9jZmcoZGxuMiwgaXctPnBpbiwgdHlwZSwgMCk7Ci0JZWxzZQotCQlkbG4yX2dwaW9fc2V0X2V2ZW50X2NmZyhkbG4yLCBpdy0+cGluLCBETE4yX0dQSU9fRVZFTlRfTk9ORSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRsbjJfaXJxX2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCitzdGF0aWMgdm9pZCBkbG4yX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICppcnFkKQogewogCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaXJxZCk7CiAJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CiAJaW50IHBpbiA9IGlycWRfdG9faHdpcnEoaXJxZCk7CiAKLQlzZXRfYml0KHBpbiwgZGxuMi0+aXJxc19lbmFibGVkKTsKLQlzY2hlZHVsZV93b3JrKCZkbG4yLT5pcnFfd29ya1twaW5dLndvcmspOwotfQotCi1zdGF0aWMgdm9pZCBkbG4yX2lycV9kaXNhYmxlKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKLXsKLQlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOwotCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOwotCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOwotCi0JY2xlYXJfYml0KHBpbiwgZGxuMi0+aXJxc19lbmFibGVkKTsKLQlzY2hlZHVsZV93b3JrKCZkbG4yLT5pcnFfd29ya1twaW5dLndvcmspOworCXNldF9iaXQocGluLCBkbG4yLT51bm1hc2tlZF9pcnFzKTsKIH0KIAogc3RhdGljIHZvaWQgZGxuMl9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCkBAIC0zMzUsMjcgKzMxNCw3IEBACiAJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CiAJaW50IHBpbiA9IGlycWRfdG9faHdpcnEoaXJxZCk7CiAKLQlzZXRfYml0KHBpbiwgZGxuMi0+aXJxc19tYXNrZWQpOwotfQotCi1zdGF0aWMgdm9pZCBkbG4yX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICppcnFkKQotewotCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaXJxZCk7Ci0Jc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gZGxuMi0+Z3Bpby5kZXY7Ci0JaW50IHBpbiA9IGlycWRfdG9faHdpcnEoaXJxZCk7Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KHBpbiwgZGxuMi0+aXJxc19wZW5kaW5nKSkgewotCQlpbnQgaXJxOwotCi0JCWlycSA9IGlycV9maW5kX21hcHBpbmcoZGxuMi0+Z3Bpby5pcnFkb21haW4sIHBpbik7Ci0JCWlmICghaXJxKSB7Ci0JCQlkZXZfZXJyKGRldiwgInBpbiAlZCBub3QgbWFwcGVkIHRvIElSUVxuIiwgcGluKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwotCX0KKwljbGVhcl9iaXQocGluLCBkbG4yLT51bm1hc2tlZF9pcnFzKTsKIH0KIAogc3RhdGljIGludCBkbG4yX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmlycWQsIHVuc2lnbmVkIHR5cGUpCkBAIC0zNjYsMTkgKzMyNSwxOSBAQAogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgotCQlkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUgPSBETE4yX0dQSU9fRVZFTlRfTFZMX0hJR0g7CisJCWRsbjItPmlycV90eXBlW3Bpbl0gPSBETE4yX0dQSU9fRVZFTlRfTFZMX0hJR0g7CiAJCWJyZWFrOwogCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgotCQlkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUgPSBETE4yX0dQSU9fRVZFTlRfTFZMX0xPVzsKKwkJZGxuMi0+aXJxX3R5cGVbcGluXSA9IERMTjJfR1BJT19FVkVOVF9MVkxfTE9XOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKLQkJZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlID0gRExOMl9HUElPX0VWRU5UX0NIQU5HRTsKKwkJZGxuMi0+aXJxX3R5cGVbcGluXSA9IERMTjJfR1BJT19FVkVOVF9DSEFOR0U7CiAJCWJyZWFrOwogCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6Ci0JCWRsbjItPmlycV93b3JrW3Bpbl0udHlwZSA9IERMTjJfR1BJT19FVkVOVF9DSEFOR0VfUklTSU5HOworCQlkbG4yLT5pcnFfdHlwZVtwaW5dID0gRExOMl9HUElPX0VWRU5UX0NIQU5HRV9SSVNJTkc7CiAJCWJyZWFrOwogCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgotCQlkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUgPSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFX0ZBTExJTkc7CisJCWRsbjItPmlycV90eXBlW3Bpbl0gPSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFX0ZBTExJTkc7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzg3LDEzICszNDYsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZGxuMl9pcnFfYnVzX2xvY2soc3RydWN0IGlycV9kYXRhICppcnFkKQoreworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaXJxZCk7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CisKKwltdXRleF9sb2NrKCZkbG4yLT5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbjJfaXJxX2J1c191bmxvY2soc3RydWN0IGlycV9kYXRhICppcnFkKQoreworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaXJxZCk7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IGRsbjJfZ3BpbywgZ3Bpbyk7CisJaW50IHBpbiA9IGlycWRfdG9faHdpcnEoaXJxZCk7CisJaW50IGVuYWJsZWQsIHVubWFza2VkOworCXVuc2lnbmVkIHR5cGU7CisJaW50IHJldDsKKworCWVuYWJsZWQgPSB0ZXN0X2JpdChwaW4sIGRsbjItPmVuYWJsZWRfaXJxcyk7CisJdW5tYXNrZWQgPSB0ZXN0X2JpdChwaW4sIGRsbjItPnVubWFza2VkX2lycXMpOworCisJaWYgKGVuYWJsZWQgIT0gdW5tYXNrZWQpIHsKKwkJaWYgKHVubWFza2VkKSB7CisJCQl0eXBlID0gZGxuMi0+aXJxX3R5cGVbcGluXSAmIERMTjJfR1BJT19FVkVOVF9NQVNLOworCQkJc2V0X2JpdChwaW4sIGRsbjItPmVuYWJsZWRfaXJxcyk7CisJCX0gZWxzZSB7CisJCQl0eXBlID0gRExOMl9HUElPX0VWRU5UX05PTkU7CisJCQljbGVhcl9iaXQocGluLCBkbG4yLT5lbmFibGVkX2lycXMpOworCQl9CisKKwkJcmV0ID0gZGxuMl9ncGlvX3NldF9ldmVudF9jZmcoZGxuMiwgcGluLCB0eXBlLCAwKTsKKwkJaWYgKHJldCkKKwkJCWRldl9lcnIoZGxuMi0+Z3Bpby5kZXYsICJmYWlsZWQgdG8gc2V0IGV2ZW50XG4iKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRsbjItPmlycV9sb2NrKTsKK30KKwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBkbG4yX2dwaW9faXJxY2hpcCA9IHsKIAkubmFtZSA9ICJkbG4yLWlycSIsCi0JLmlycV9lbmFibGUgPSBkbG4yX2lycV9lbmFibGUsCi0JLmlycV9kaXNhYmxlID0gZGxuMl9pcnFfZGlzYWJsZSwKIAkuaXJxX21hc2sgPSBkbG4yX2lycV9tYXNrLAogCS5pcnFfdW5tYXNrID0gZGxuMl9pcnFfdW5tYXNrLAogCS5pcnFfc2V0X3R5cGUgPSBkbG4yX2lycV9zZXRfdHlwZSwKKwkuaXJxX2J1c19sb2NrID0gZGxuMl9pcnFfYnVzX2xvY2ssCisJLmlycV9idXNfc3luY191bmxvY2sgPSBkbG4yX2lycV9idXNfdW5sb2NrLAogfTsKIAogc3RhdGljIHZvaWQgZGxuMl9ncGlvX2V2ZW50KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBlY2hvLApAQCAtNDI1LDE0ICs0MjEsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKCF0ZXN0X2JpdChwaW4sIGRsbjItPmlycXNfZW5hYmxlZCkpCi0JCXJldHVybjsKLQlpZiAodGVzdF9iaXQocGluLCBkbG4yLT5pcnFzX21hc2tlZCkpIHsKLQkJc2V0X2JpdChwaW4sIGRsbjItPmlycXNfcGVuZGluZyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGRsbjItPmlycV93b3JrW3Bpbl0udHlwZSkgeworCXN3aXRjaCAoZGxuMi0+aXJxX3R5cGVbcGluXSkgewogCWNhc2UgRExOMl9HUElPX0VWRU5UX0NIQU5HRV9SSVNJTkc6CiAJCWlmIChldmVudC0+dmFsdWUpCiAJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKQEAgLTQ1MSw3ICs0NDAsNyBAQAogCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjI7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlpbnQgcGluczsKLQlpbnQgaSwgcmV0OworCWludCByZXQ7CiAKIAlwaW5zID0gZGxuMl9ncGlvX2dldF9waW5fY291bnQocGRldik7CiAJaWYgKHBpbnMgPCAwKSB7CkBAIC00NjcsMTUgKzQ1Niw3IEBACiAJaWYgKCFkbG4yKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRsbjItPmlycV93b3JrID0gZGV2bV9rY2FsbG9jKCZwZGV2LT5kZXYsIHBpbnMsCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBkbG4yX2lycV93b3JrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkbG4yLT5pcnFfd29yaykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZm9yIChpID0gMDsgaSA8IHBpbnM7IGkrKykgewotCQlJTklUX1dPUksoJmRsbjItPmlycV93b3JrW2ldLndvcmssIGRsbjJfaXJxX3dvcmspOwotCQlkbG4yLT5pcnFfd29ya1tpXS5waW4gPSBpOwotCQlkbG4yLT5pcnFfd29ya1tpXS5kbG4yID0gZGxuMjsKLQl9CisJbXV0ZXhfaW5pdCgmZGxuMi0+aXJxX2xvY2spOwogCiAJZGxuMi0+cGRldiA9IHBkZXY7CiAKQEAgLTUyOSwxMSArNTEwLDggQEAKIHN0YXRpYyBpbnQgZGxuMl9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgaTsKIAogCWRsbjJfdW5yZWdpc3Rlcl9ldmVudF9jYihwZGV2LCBETE4yX0dQSU9fQ09ORElUSU9OX01FVF9FVik7Ci0JZm9yIChpID0gMDsgaSA8IGRsbjItPmdwaW8ubmdwaW87IGkrKykKLQkJZmx1c2hfd29yaygmZGxuMi0+aXJxX3dvcmtbaV0ud29yayk7CiAJZ3Bpb2NoaXBfcmVtb3ZlKCZkbG4yLT5ncGlvKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1ncmdwaW8uYwppbmRleCAwOWRhYWYyLi4zYTVhNzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1ncmdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1ncmdwaW8uYwpAQCAtNDQxLDcgKzQ0MSw4IEBACiAJZXJyID0gZ3Bpb2NoaXBfYWRkKGdjKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJDb3VsZCBub3QgYWRkIGdwaW9jaGlwXG4iKTsKLQkJaXJxX2RvbWFpbl9yZW1vdmUocHJpdi0+ZG9tYWluKTsKKwkJaWYgKHByaXYtPmRvbWFpbikKKwkJCWlycV9kb21haW5fcmVtb3ZlKHByaXYtPmRvbWFpbik7CiAJCXJldHVybiBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYwppbmRleCA2MDRkYmU2Li4wODI2MWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmMKQEAgLTQ1LDggKzQ1LDE0IEBACiAJCXJldHVybiBmYWxzZTsKIAogCXJldCA9IGdjLT5vZl94bGF0ZShnYywgJmdnX2RhdGEtPmdwaW9zcGVjLCBnZ19kYXRhLT5mbGFncyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiBmYWxzZTsKKwlpZiAocmV0IDwgMCkgeworCQkvKiBXZSd2ZSBmb3VuZCB0aGUgZ3BpbyBjaGlwLCBidXQgdGhlIHRyYW5zbGF0aW9uIGZhaWxlZC4KKwkJICogUmV0dXJuIHRydWUgdG8gc3RvcCBsb29raW5nIGFuZCByZXR1cm4gdGhlIHRyYW5zbGF0aW9uCisJCSAqIGVycm9yIHZpYSBvdXRfZ3BpbworCQkgKi8KKwkJZ2dfZGF0YS0+b3V0X2dwaW8gPSBFUlJfUFRSKHJldCk7CisJCXJldHVybiB0cnVlOworCSB9CiAKIAlnZ19kYXRhLT5vdXRfZ3BpbyA9IGdwaW9jaGlwX2dldF9kZXNjKGdjLCByZXQpOwogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWItc3lzZnMuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLXN5c2ZzLmMKaW5kZXggMmFjMTgwMC4uZjYyYWExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWItc3lzZnMuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1zeXNmcy5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgY29uc3QgREVWSUNFX0FUVFIodmFsdWUsIDA2NDQsCitzdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIDA2NDQsCiAJCWdwaW9fdmFsdWVfc2hvdywgZ3Bpb192YWx1ZV9zdG9yZSk7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBncGlvX3N5c2ZzX2lycShpbnQgaXJxLCB2b2lkICpwcml2KQpAQCAtMzUzLDE3ICszNTMsNDYgQEAKIAlyZXR1cm4gc3RhdHVzID8gOiBzaXplOwogfQogCi1zdGF0aWMgY29uc3QgREVWSUNFX0FUVFIoYWN0aXZlX2xvdywgMDY0NCwKK3N0YXRpYyBERVZJQ0VfQVRUUihhY3RpdmVfbG93LCAwNjQ0LAogCQlncGlvX2FjdGl2ZV9sb3dfc2hvdywgZ3Bpb19hY3RpdmVfbG93X3N0b3JlKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmdwaW9fYXR0cnNbXSA9IHsKK3N0YXRpYyB1bW9kZV90IGdwaW9faXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBpbnQgbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IGdwaW9fZGVzYyAqZGVzYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVtb2RlX3QgbW9kZSA9IGF0dHItPm1vZGU7CisJYm9vbCBzaG93X2RpcmVjdGlvbiA9IHRlc3RfYml0KEZMQUdfU1lTRlNfRElSLCAmZGVzYy0+ZmxhZ3MpOworCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2RpcmVjdGlvbi5hdHRyKSB7CisJCWlmICghc2hvd19kaXJlY3Rpb24pCisJCQltb2RlID0gMDsKKwl9IGVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2VkZ2UuYXR0cikgeworCQlpZiAoZ3Bpb2RfdG9faXJxKGRlc2MpIDwgMCkKKwkJCW1vZGUgPSAwOworCQlpZiAoIXNob3dfZGlyZWN0aW9uICYmIHRlc3RfYml0KEZMQUdfSVNfT1VULCAmZGVzYy0+ZmxhZ3MpKQorCQkJbW9kZSA9IDA7CisJfQorCisJcmV0dXJuIG1vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpncGlvX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2RpcmVjdGlvbi5hdHRyLAorCSZkZXZfYXR0cl9lZGdlLmF0dHIsCiAJJmRldl9hdHRyX3ZhbHVlLmF0dHIsCiAJJmRldl9hdHRyX2FjdGl2ZV9sb3cuYXR0ciwKIAlOVUxMLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ3Bpb19hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IChzdHJ1Y3QgYXR0cmlidXRlICoqKSBncGlvX2F0dHJzLAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ3Bpb19ncm91cCA9IHsKKwkuYXR0cnMgPSBncGlvX2F0dHJzLAorCS5pc192aXNpYmxlID0gZ3Bpb19pc192aXNpYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdwaW9fZ3JvdXBzW10gPSB7CisJJmdwaW9fZ3JvdXAsCisJTlVMTAogfTsKIAogLyoKQEAgLTQwMCwxNiArNDI5LDEzIEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIobmdwaW8sIDA0NDQsIGNoaXBfbmdwaW9fc2hvdywgTlVMTCk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpncGlvY2hpcF9hdHRyc1tdID0geworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmdwaW9jaGlwX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2Jhc2UuYXR0ciwKIAkmZGV2X2F0dHJfbGFiZWwuYXR0ciwKIAkmZGV2X2F0dHJfbmdwaW8uYXR0ciwKIAlOVUxMLAogfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ3Bpb2NoaXBfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSAoc3RydWN0IGF0dHJpYnV0ZSAqKikgZ3Bpb2NoaXBfYXR0cnMsCi19OworQVRUUklCVVRFX0dST1VQUyhncGlvY2hpcCk7CiAKIC8qCiAgKiAvc3lzL2NsYXNzL2dwaW8vZXhwb3J0IC4uLiB3cml0ZS1vbmx5CkBAIC01NTYsNDUgKzU4MiwzMCBAQAogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIAotCWlmICghZGVzYy0+Y2hpcC0+ZGlyZWN0aW9uX2lucHV0IHx8ICFkZXNjLT5jaGlwLT5kaXJlY3Rpb25fb3V0cHV0KQotCQlkaXJlY3Rpb25fbWF5X2NoYW5nZSA9IGZhbHNlOworCWlmIChkZXNjLT5jaGlwLT5kaXJlY3Rpb25faW5wdXQgJiYgZGVzYy0+Y2hpcC0+ZGlyZWN0aW9uX291dHB1dCAmJgorCQkJZGlyZWN0aW9uX21heV9jaGFuZ2UpIHsKKwkJc2V0X2JpdChGTEFHX1NZU0ZTX0RJUiwgJmRlc2MtPmZsYWdzKTsKKwl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAogCW9mZnNldCA9IGdwaW9fY2hpcF9od2dwaW8oZGVzYyk7CiAJaWYgKGRlc2MtPmNoaXAtPm5hbWVzICYmIGRlc2MtPmNoaXAtPm5hbWVzW29mZnNldF0pCiAJCWlvbmFtZSA9IGRlc2MtPmNoaXAtPm5hbWVzW29mZnNldF07CiAKLQlkZXYgPSBkZXZpY2VfY3JlYXRlKCZncGlvX2NsYXNzLCBkZXNjLT5jaGlwLT5kZXYsIE1LREVWKDAsIDApLAotCQkJICAgIGRlc2MsIGlvbmFtZSA/IGlvbmFtZSA6ICJncGlvJXUiLAotCQkJICAgIGRlc2NfdG9fZ3BpbyhkZXNjKSk7CisJZGV2ID0gZGV2aWNlX2NyZWF0ZV93aXRoX2dyb3VwcygmZ3Bpb19jbGFzcywgZGVzYy0+Y2hpcC0+ZGV2LAorCQkJCQlNS0RFVigwLCAwKSwgZGVzYywgZ3Bpb19ncm91cHMsCisJCQkJCWlvbmFtZSA/IGlvbmFtZSA6ICJncGlvJXUiLAorCQkJCQlkZXNjX3RvX2dwaW8oZGVzYykpOwogCWlmIChJU19FUlIoZGV2KSkgewogCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCi0Jc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZncGlvX2F0dHJfZ3JvdXApOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZmFpbF91bnJlZ2lzdGVyX2RldmljZTsKLQotCWlmIChkaXJlY3Rpb25fbWF5X2NoYW5nZSkgewotCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGlyZWN0aW9uKTsKLQkJaWYgKHN0YXR1cykKLQkJCWdvdG8gZmFpbF91bnJlZ2lzdGVyX2RldmljZTsKLQl9Ci0KLQlpZiAoZ3Bpb2RfdG9faXJxKGRlc2MpID49IDAgJiYgKGRpcmVjdGlvbl9tYXlfY2hhbmdlIHx8Ci0JCQkJICAgICAgICF0ZXN0X2JpdChGTEFHX0lTX09VVCwgJmRlc2MtPmZsYWdzKSkpIHsKLQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2VkZ2UpOwotCQlpZiAoc3RhdHVzKQotCQkJZ290byBmYWlsX3VucmVnaXN0ZXJfZGV2aWNlOwotCX0KLQogCXNldF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncyk7CiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKIAlyZXR1cm4gMDsKIAotZmFpbF91bnJlZ2lzdGVyX2RldmljZToKLQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwogZmFpbF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKIAlncGlvZF9kYmcoZGVzYywgIiVzOiBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwpAQCAtNzE4LDYgKzcyOSw3IEBACiAJCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZncGlvX2NsYXNzLCBOVUxMLCBkZXNjLCBtYXRjaF9leHBvcnQpOwogCQlpZiAoZGV2KSB7CiAJCQlncGlvX3NldHVwX2lycShkZXNjLCBkZXYsIDApOworCQkJY2xlYXJfYml0KEZMQUdfU1lTRlNfRElSLCAmZGVzYy0+ZmxhZ3MpOwogCQkJY2xlYXJfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpOwogCQl9IGVsc2UKIAkJCXN0YXR1cyA9IC1FTk9ERVY7CkBAIC03NTAsMTMgKzc2MiwxMyBAQAogCiAJLyogdXNlIGNoaXAtPmJhc2UgZm9yIHRoZSBJRDsgaXQncyBhbHJlYWR5IGtub3duIHRvIGJlIHVuaXF1ZSAqLwogCW11dGV4X2xvY2soJnN5c2ZzX2xvY2spOwotCWRldiA9IGRldmljZV9jcmVhdGUoJmdwaW9fY2xhc3MsIGNoaXAtPmRldiwgTUtERVYoMCwgMCksIGNoaXAsCi0JCQkJImdwaW9jaGlwJWQiLCBjaGlwLT5iYXNlKTsKLQlpZiAoIUlTX0VSUihkZXYpKSB7Ci0JCXN0YXR1cyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAotCQkJCSZncGlvY2hpcF9hdHRyX2dyb3VwKTsKLQl9IGVsc2UKKwlkZXYgPSBkZXZpY2VfY3JlYXRlX3dpdGhfZ3JvdXBzKCZncGlvX2NsYXNzLCBjaGlwLT5kZXYsIE1LREVWKDAsIDApLAorCQkJCQljaGlwLCBncGlvY2hpcF9ncm91cHMsCisJCQkJCSJncGlvY2hpcCVkIiwgY2hpcC0+YmFzZSk7CisJaWYgKElTX0VSUihkZXYpKQogCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CisJZWxzZQorCQlzdGF0dXMgPSAwOwogCWNoaXAtPmV4cG9ydGVkID0gKHN0YXR1cyA9PSAwKTsKIAltdXRleF91bmxvY2soJnN5c2ZzX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwppbmRleCA0ODdhZmU2Li41NjhhYTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKQEAgLTI0OCwyOSArMjQ4LDMwIEBACiAJCWJhc2UgPSBncGlvY2hpcF9maW5kX2Jhc2UoY2hpcC0+bmdwaW8pOwogCQlpZiAoYmFzZSA8IDApIHsKIAkJCXN0YXR1cyA9IGJhc2U7Ci0JCQlnb3RvIHVubG9jazsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQkJZ290byBlcnJfZnJlZV9kZXNjczsKIAkJfQogCQljaGlwLT5iYXNlID0gYmFzZTsKIAl9CiAKIAlzdGF0dXMgPSBncGlvY2hpcF9hZGRfdG9fbGlzdChjaGlwKTsKKwlpZiAoc3RhdHVzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQlnb3RvIGVycl9mcmVlX2Rlc2NzOworCX0KIAotCWlmIChzdGF0dXMgPT0gMCkgewotCQlmb3IgKGlkID0gMDsgaWQgPCBjaGlwLT5uZ3BpbzsgaWQrKykgewotCQkJc3RydWN0IGdwaW9fZGVzYyAqZGVzYyA9ICZkZXNjc1tpZF07Ci0JCQlkZXNjLT5jaGlwID0gY2hpcDsKKwlmb3IgKGlkID0gMDsgaWQgPCBjaGlwLT5uZ3BpbzsgaWQrKykgeworCQlzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjID0gJmRlc2NzW2lkXTsKIAotCQkJLyogUkVWSVNJVDogIG1vc3QgaGFyZHdhcmUgaW5pdGlhbGl6ZXMgR1BJT3MgYXMKLQkJCSAqIGlucHV0cyAob2Z0ZW4gd2l0aCBwdWxsdXBzIGVuYWJsZWQpIHNvIHBvd2VyCi0JCQkgKiB1c2FnZSBpcyBtaW5pbWl6ZWQuICBMaW51eCBjb2RlIHNob3VsZCBzZXQgdGhlCi0JCQkgKiBncGlvIGRpcmVjdGlvbiBmaXJzdCB0aGluZzsgYnV0IHVudGlsIGl0IGRvZXMsCi0JCQkgKiBhbmQgaW4gY2FzZSBjaGlwLT5nZXRfZGlyZWN0aW9uIGlzIG5vdCBzZXQsCi0JCQkgKiB3ZSBtYXkgZXhwb3NlIHRoZSB3cm9uZyBkaXJlY3Rpb24gaW4gc3lzZnMuCi0JCQkgKi8KLQkJCWRlc2MtPmZsYWdzID0gIWNoaXAtPmRpcmVjdGlvbl9pbnB1dAotCQkJCT8gKDEgPDwgRkxBR19JU19PVVQpCi0JCQkJOiAwOwotCQl9CisJCWRlc2MtPmNoaXAgPSBjaGlwOworCisJCS8qIFJFVklTSVQ6IG1vc3QgaGFyZHdhcmUgaW5pdGlhbGl6ZXMgR1BJT3MgYXMgaW5wdXRzIChvZnRlbgorCQkgKiB3aXRoIHB1bGx1cHMgZW5hYmxlZCkgc28gcG93ZXIgdXNhZ2UgaXMgbWluaW1pemVkLiBMaW51eAorCQkgKiBjb2RlIHNob3VsZCBzZXQgdGhlIGdwaW8gZGlyZWN0aW9uIGZpcnN0IHRoaW5nOyBidXQgdW50aWwKKwkJICogaXQgZG9lcywgYW5kIGluIGNhc2UgY2hpcC0+Z2V0X2RpcmVjdGlvbiBpcyBub3Qgc2V0LCB3ZSBtYXkKKwkJICogZXhwb3NlIHRoZSB3cm9uZyBkaXJlY3Rpb24gaW4gc3lzZnMuCisJCSAqLworCQlkZXNjLT5mbGFncyA9ICFjaGlwLT5kaXJlY3Rpb25faW5wdXQgPyAoMSA8PCBGTEFHX0lTX09VVCkgOiAwOwogCX0KIAogCWNoaXAtPmRlc2MgPSBkZXNjczsKQEAgLTI4NCwxMiArMjg1LDkgQEAKIAlvZl9ncGlvY2hpcF9hZGQoY2hpcCk7CiAJYWNwaV9ncGlvY2hpcF9hZGQoY2hpcCk7CiAKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZhaWw7Ci0KIAlzdGF0dXMgPSBncGlvY2hpcF9leHBvcnQoY2hpcCk7CiAJaWYgKHN0YXR1cykKLQkJZ290byBmYWlsOworCQlnb3RvIGVycl9yZW1vdmVfY2hpcDsKIAogCXByX2RlYnVnKCIlczogcmVnaXN0ZXJlZCBHUElPcyAlZCB0byAlZCBvbiBkZXZpY2U6ICVzXG4iLCBfX2Z1bmNfXywKIAkJY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIGNoaXAtPm5ncGlvIC0gMSwKQEAgLTI5NywxMSArMjk1LDE1IEBACiAKIAlyZXR1cm4gMDsKIAotdW5sb2NrOgorZXJyX3JlbW92ZV9jaGlwOgorCWFjcGlfZ3Bpb2NoaXBfcmVtb3ZlKGNoaXApOworCW9mX2dwaW9jaGlwX3JlbW92ZShjaGlwKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNoaXAtPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotZmFpbDoKLQlrZnJlZShkZXNjcyk7CiAJY2hpcC0+ZGVzYyA9IE5VTEw7CitlcnJfZnJlZV9kZXNjczoKKwlrZnJlZShkZXNjcyk7CiAKIAkvKiBmYWlsdXJlcyBoZXJlIGNhbiBtZWFuIHN5c3RlbXMgd29uJ3QgYm9vdC4uLiAqLwogCXByX2VycigiJXM6IEdQSU9zICVkLi4lZCAoJXMpIGZhaWxlZCB0byByZWdpc3RlclxuIiwgX19mdW5jX18sCkBAIC0zMjUsMTQgKzMyNywxNSBAQAogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdW5zaWduZWQJaWQ7CiAKLQlhY3BpX2dwaW9jaGlwX3JlbW92ZShjaGlwKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlncGlvY2hpcF91bmV4cG9ydChjaGlwKTsKIAogCWdwaW9jaGlwX2lycWNoaXBfcmVtb3ZlKGNoaXApOworCisJYWNwaV9ncGlvY2hpcF9yZW1vdmUoY2hpcCk7CiAJZ3Bpb2NoaXBfcmVtb3ZlX3Bpbl9yYW5nZXMoY2hpcCk7CiAJb2ZfZ3Bpb2NoaXBfcmVtb3ZlKGNoaXApOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCWZvciAoaWQgPSAwOyBpZCA8IGNoaXAtPm5ncGlvOyBpZCsrKSB7CiAJCWlmICh0ZXN0X2JpdChGTEFHX1JFUVVFU1RFRCwgJmNoaXAtPmRlc2NbaWRdLmZsYWdzKSkKIAkJCWRldl9jcml0KGNoaXAtPmRldiwgIlJFTU9WSU5HIEdQSU9DSElQIFdJVEggR1BJT1MgU1RJTEwgUkVRVUVTVEVEXG4iKTsKQEAgLTM0Miw3ICszNDUsNiBAQAogCiAJbGlzdF9kZWwoJmNoaXAtPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCWdwaW9jaGlwX3VuZXhwb3J0KGNoaXApOwogCiAJa2ZyZWUoY2hpcC0+ZGVzYyk7CiAJY2hpcC0+ZGVzYyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5oIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuaAppbmRleCBlM2E1MjExLi41NTBhNWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5oCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmgKQEAgLTc3LDYgKzc3LDcgQEAKICNkZWZpbmUgRkxBR19PUEVOX0RSQUlOCTcJLyogR3BpbyBpcyBvcGVuIGRyYWluIHR5cGUgKi8KICNkZWZpbmUgRkxBR19PUEVOX1NPVVJDRSA4CS8qIEdwaW8gaXMgb3BlbiBzb3VyY2UgdHlwZSAqLwogI2RlZmluZSBGTEFHX1VTRURfQVNfSVJRIDkJLyogR1BJTyBpcyBjb25uZWN0ZWQgdG8gYW4gSVJRICovCisjZGVmaW5lIEZMQUdfU1lTRlNfRElSCTEwCS8qIHNob3cgc3lzZnMgZGlyZWN0aW9uIGF0dHJpYnV0ZSAqLwogCiAjZGVmaW5lIElEX1NISUZUCTE2CS8qIGFkZCBuZXcgZmxhZ3MgYmVmb3JlIHRoaXMgb25lICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA2NmU0MDM5Li5lNjIwODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC0zNyw2ICszNyw3IEBACiBvYmotJChDT05GSUdfRFJNX1RUTSkJKz0gdHRtLwogb2JqLSQoQ09ORklHX0RSTV9UREZYKQkrPSB0ZGZ4Lwogb2JqLSQoQ09ORklHX0RSTV9SMTI4KQkrPSByMTI4Lworb2JqLSQoQ09ORklHX0hTQV9BTUQpICs9IGFtZC9hbWRrZmQvCiBvYmotJChDT05GSUdfRFJNX1JBREVPTikrPSByYWRlb24vCiBvYmotJChDT05GSUdfRFJNX01HQSkJKz0gbWdhLwogb2JqLSQoQ09ORklHX0RSTV9JODEwKQkrPSBpODEwLwpAQCAtNjcsNCArNjgsMyBAQAogb2JqLXkJCQkrPSBpMmMvCiBvYmoteQkJCSs9IHBhbmVsLwogb2JqLXkJCQkrPSBicmlkZ2UvCi1vYmotJChDT05GSUdfSFNBX0FNRCkgKz0gYW1kL2FtZGtmZC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUKaW5kZXggYmU2MjQ2ZC4uMzA3YTMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUKQEAgLTgsNyArOCw2IEBACiAJCWtmZF9wYXNpZC5vIGtmZF9kb29yYmVsbC5vIGtmZF9mbGF0X21lbW9yeS5vIFwKIAkJa2ZkX3Byb2Nlc3MubyBrZmRfcXVldWUubyBrZmRfbXFkX21hbmFnZXIubyBcCiAJCWtmZF9rZXJuZWxfcXVldWUubyBrZmRfcGFja2V0X21hbmFnZXIubyBcCi0JCWtmZF9wcm9jZXNzX3F1ZXVlX21hbmFnZXIubyBrZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIubyBcCi0JCWtmZF9pbnRlcnJ1cHQubworCQlrZmRfcHJvY2Vzc19xdWV1ZV9tYW5hZ2VyLm8ga2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLm8KIAogb2JqLSQoQ09ORklHX0hTQV9BTUQpCSs9IGFtZGtmZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYwppbmRleCA0ZjdiMjc1Li5mY2ZkZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDx1YXBpL2xpbnV4L2tmZF9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDx1YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgImtmZF9wcml2LmgiCkBAIC0xMjEsMjcgKzEyMCwyMCBAQAogCWlmIChJU19FUlIocHJvY2VzcykpCiAJCXJldHVybiBQVFJfRVJSKHByb2Nlc3MpOwogCi0JcHJvY2Vzcy0+aXNfMzJiaXRfdXNlcl9tb2RlID0gaXNfMzJiaXRfdXNlcl9tb2RlOwotCiAJZGV2X2RiZyhrZmRfZGV2aWNlLCAicHJvY2VzcyAlZCBvcGVuZWQsIGNvbXBhdCBtb2RlICgzMiBiaXQpIC0gJWRcbiIsCiAJCXByb2Nlc3MtPnBhc2lkLCBwcm9jZXNzLT5pc18zMmJpdF91c2VyX21vZGUpOwogCi0Ja2ZkX2luaXRfYXBlcnR1cmVzKHByb2Nlc3MpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIGtmZF9pb2N0bF9nZXRfdmVyc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZXAsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKLQkJCQkJdm9pZCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQga2ZkX2lvY3RsX2dldF92ZXJzaW9uKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IGtmZF9wcm9jZXNzICpwLAorCQkJCQl2b2lkICpkYXRhKQogewotCXN0cnVjdCBrZmRfaW9jdGxfZ2V0X3ZlcnNpb25fYXJncyBhcmdzOworCXN0cnVjdCBrZmRfaW9jdGxfZ2V0X3ZlcnNpb25fYXJncyAqYXJncyA9IGRhdGE7CiAJaW50IGVyciA9IDA7CiAKLQlhcmdzLm1ham9yX3ZlcnNpb24gPSBLRkRfSU9DVExfTUFKT1JfVkVSU0lPTjsKLQlhcmdzLm1pbm9yX3ZlcnNpb24gPSBLRkRfSU9DVExfTUlOT1JfVkVSU0lPTjsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYXJncywgc2l6ZW9mKGFyZ3MpKSkKLQkJZXJyID0gLUVGQVVMVDsKKwlhcmdzLT5tYWpvcl92ZXJzaW9uID0gS0ZEX0lPQ1RMX01BSk9SX1ZFUlNJT047CisJYXJncy0+bWlub3JfdmVyc2lvbiA9IEtGRF9JT0NUTF9NSU5PUl9WRVJTSU9OOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTIyNSwxMCArMjE3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIGtmZF9pb2N0bF9jcmVhdGVfcXVldWUoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCi0JCQkJCXZvaWQgX191c2VyICphcmcpCitzdGF0aWMgaW50IGtmZF9pb2N0bF9jcmVhdGVfcXVldWUoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCisJCQkJCXZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGtmZF9pb2N0bF9jcmVhdGVfcXVldWVfYXJncyBhcmdzOworCXN0cnVjdCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlX2FyZ3MgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBrZmRfZGV2ICpkZXY7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgaW50IHF1ZXVlX2lkOwpAQCAtMjM3LDE2ICsyMjksMTMgQEAKIAogCW1lbXNldCgmcV9wcm9wZXJ0aWVzLCAwLCBzaXplb2Yoc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMpKTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgYXJnLCBzaXplb2YoYXJncykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQogCXByX2RlYnVnKCJrZmQ6IGNyZWF0aW5nIHF1ZXVlIGlvY3RsXG4iKTsKIAotCWVyciA9IHNldF9xdWV1ZV9wcm9wZXJ0aWVzX2Zyb21fdXNlcigmcV9wcm9wZXJ0aWVzLCAmYXJncyk7CisJZXJyID0gc2V0X3F1ZXVlX3Byb3BlcnRpZXNfZnJvbV91c2VyKCZxX3Byb3BlcnRpZXMsIGFyZ3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlkZXYgPSBrZmRfZGV2aWNlX2J5X2lkKGFyZ3MuZ3B1X2lkKTsKKwlkZXYgPSBrZmRfZGV2aWNlX2J5X2lkKGFyZ3MtPmdwdV9pZCk7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjU0LDcgKzI0Myw3IEBACiAKIAlwZGQgPSBrZmRfYmluZF9wcm9jZXNzX3RvX2RldmljZShkZXYsIHApOwogCWlmIChJU19FUlIocGRkKSkgewotCQllcnIgPSBQVFJfRVJSKHBkZCk7CisJCWVyciA9IC1FU1JDSDsKIAkJZ290byBlcnJfYmluZF9wcm9jZXNzOwogCX0KIApAQCAtMjY3LDMzICsyNTYsMjYgQEAKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gZXJyX2NyZWF0ZV9xdWV1ZTsKIAotCWFyZ3MucXVldWVfaWQgPSBxdWV1ZV9pZDsKKwlhcmdzLT5xdWV1ZV9pZCA9IHF1ZXVlX2lkOwogCiAJLyogUmV0dXJuIGdwdV9pZCBhcyBkb29yYmVsbCBvZmZzZXQgZm9yIG1tYXAgdXNhZ2UgKi8KLQlhcmdzLmRvb3JiZWxsX29mZnNldCA9IGFyZ3MuZ3B1X2lkIDw8IFBBR0VfU0hJRlQ7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJmFyZ3MsIHNpemVvZihhcmdzKSkpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBlcnJfY29weV9hcmdzX291dDsKLQl9CisJYXJncy0+ZG9vcmJlbGxfb2Zmc2V0ID0gYXJncy0+Z3B1X2lkIDw8IFBBR0VfU0hJRlQ7CiAKIAltdXRleF91bmxvY2soJnAtPm11dGV4KTsKIAotCXByX2RlYnVnKCJrZmQ6IHF1ZXVlIGlkICVkIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseVxuIiwgYXJncy5xdWV1ZV9pZCk7CisJcHJfZGVidWcoImtmZDogcXVldWUgaWQgJWQgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XG4iLCBhcmdzLT5xdWV1ZV9pZCk7CiAKIAlwcl9kZWJ1ZygicmluZyBidWZmZXIgYWRkcmVzcyA9PSAweCUwMTZsbFhcbiIsCi0JCQlhcmdzLnJpbmdfYmFzZV9hZGRyZXNzKTsKKwkJCWFyZ3MtPnJpbmdfYmFzZV9hZGRyZXNzKTsKIAogCXByX2RlYnVnKCJyZWFkIHB0ciBhZGRyZXNzICAgID09IDB4JTAxNmxsWFxuIiwKLQkJCWFyZ3MucmVhZF9wb2ludGVyX2FkZHJlc3MpOworCQkJYXJncy0+cmVhZF9wb2ludGVyX2FkZHJlc3MpOwogCiAJcHJfZGVidWcoIndyaXRlIHB0ciBhZGRyZXNzICAgPT0gMHglMDE2bGxYXG4iLAotCQkJYXJncy53cml0ZV9wb2ludGVyX2FkZHJlc3MpOworCQkJYXJncy0+d3JpdGVfcG9pbnRlcl9hZGRyZXNzKTsKIAogCXJldHVybiAwOwogCi1lcnJfY29weV9hcmdzX291dDoKLQlwcW1fZGVzdHJveV9xdWV1ZSgmcC0+cHFtLCBxdWV1ZV9pZCk7CiBlcnJfY3JlYXRlX3F1ZXVlOgogZXJyX2JpbmRfcHJvY2VzczoKIAltdXRleF91bmxvY2soJnAtPm11dGV4KTsKQEAgLTMwMSw5OSArMjgzLDkwIEBACiB9CiAKIHN0YXRpYyBpbnQga2ZkX2lvY3RsX2Rlc3Ryb3lfcXVldWUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKLQkJCQkJdm9pZCBfX3VzZXIgKmFyZykKKwkJCQkJdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmV0dmFsOwotCXN0cnVjdCBrZmRfaW9jdGxfZGVzdHJveV9xdWV1ZV9hcmdzIGFyZ3M7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJc3RydWN0IGtmZF9pb2N0bF9kZXN0cm95X3F1ZXVlX2FyZ3MgKmFyZ3MgPSBkYXRhOwogCiAJcHJfZGVidWcoImtmZDogZGVzdHJveWluZyBxdWV1ZSBpZCAlZCBmb3IgUEFTSUQgJWRcbiIsCi0JCQkJYXJncy5xdWV1ZV9pZCwKKwkJCQlhcmdzLT5xdWV1ZV9pZCwKIAkJCQlwLT5wYXNpZCk7CiAKIAltdXRleF9sb2NrKCZwLT5tdXRleCk7CiAKLQlyZXR2YWwgPSBwcW1fZGVzdHJveV9xdWV1ZSgmcC0+cHFtLCBhcmdzLnF1ZXVlX2lkKTsKKwlyZXR2YWwgPSBwcW1fZGVzdHJveV9xdWV1ZSgmcC0+cHFtLCBhcmdzLT5xdWV1ZV9pZCk7CiAKIAltdXRleF91bmxvY2soJnAtPm11dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IGtmZF9pb2N0bF91cGRhdGVfcXVldWUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKLQkJCQkJdm9pZCBfX3VzZXIgKmFyZykKKwkJCQkJdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmV0dmFsOwotCXN0cnVjdCBrZmRfaW9jdGxfdXBkYXRlX3F1ZXVlX2FyZ3MgYXJnczsKKwlzdHJ1Y3Qga2ZkX2lvY3RsX3VwZGF0ZV9xdWV1ZV9hcmdzICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyBwcm9wZXJ0aWVzOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGFyZ3MucXVldWVfcGVyY2VudGFnZSA+IEtGRF9NQVhfUVVFVUVfUEVSQ0VOVEFHRSkgeworCWlmIChhcmdzLT5xdWV1ZV9wZXJjZW50YWdlID4gS0ZEX01BWF9RVUVVRV9QRVJDRU5UQUdFKSB7CiAJCXByX2Vycigia2ZkOiBxdWV1ZSBwZXJjZW50YWdlIG11c3QgYmUgYmV0d2VlbiAwIHRvIEtGRF9NQVhfUVVFVUVfUEVSQ0VOVEFHRVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChhcmdzLnF1ZXVlX3ByaW9yaXR5ID4gS0ZEX01BWF9RVUVVRV9QUklPUklUWSkgeworCWlmIChhcmdzLT5xdWV1ZV9wcmlvcml0eSA+IEtGRF9NQVhfUVVFVUVfUFJJT1JJVFkpIHsKIAkJcHJfZXJyKCJrZmQ6IHF1ZXVlIHByaW9yaXR5IG11c3QgYmUgYmV0d2VlbiAwIHRvIEtGRF9NQVhfUVVFVUVfUFJJT1JJVFlcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoKGFyZ3MucmluZ19iYXNlX2FkZHJlc3MpICYmCisJaWYgKChhcmdzLT5yaW5nX2Jhc2VfYWRkcmVzcykgJiYKIAkJKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLAotCQkJKGNvbnN0IHZvaWQgX191c2VyICopIGFyZ3MucmluZ19iYXNlX2FkZHJlc3MsCisJCQkoY29uc3Qgdm9pZCBfX3VzZXIgKikgYXJncy0+cmluZ19iYXNlX2FkZHJlc3MsCiAJCQlzaXplb2YodWludDY0X3QpKSkpIHsKIAkJcHJfZXJyKCJrZmQ6IGNhbid0IGFjY2VzcyByaW5nIGJhc2UgYWRkcmVzc1xuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWlmICghaXNfcG93ZXJfb2ZfMihhcmdzLnJpbmdfc2l6ZSkgJiYgKGFyZ3MucmluZ19zaXplICE9IDApKSB7CisJaWYgKCFpc19wb3dlcl9vZl8yKGFyZ3MtPnJpbmdfc2l6ZSkgJiYgKGFyZ3MtPnJpbmdfc2l6ZSAhPSAwKSkgewogCQlwcl9lcnIoImtmZDogcmluZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIG9yIDBcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcm9wZXJ0aWVzLnF1ZXVlX2FkZHJlc3MgPSBhcmdzLnJpbmdfYmFzZV9hZGRyZXNzOwotCXByb3BlcnRpZXMucXVldWVfc2l6ZSA9IGFyZ3MucmluZ19zaXplOwotCXByb3BlcnRpZXMucXVldWVfcGVyY2VudCA9IGFyZ3MucXVldWVfcGVyY2VudGFnZTsKLQlwcm9wZXJ0aWVzLnByaW9yaXR5ID0gYXJncy5xdWV1ZV9wcmlvcml0eTsKKwlwcm9wZXJ0aWVzLnF1ZXVlX2FkZHJlc3MgPSBhcmdzLT5yaW5nX2Jhc2VfYWRkcmVzczsKKwlwcm9wZXJ0aWVzLnF1ZXVlX3NpemUgPSBhcmdzLT5yaW5nX3NpemU7CisJcHJvcGVydGllcy5xdWV1ZV9wZXJjZW50ID0gYXJncy0+cXVldWVfcGVyY2VudGFnZTsKKwlwcm9wZXJ0aWVzLnByaW9yaXR5ID0gYXJncy0+cXVldWVfcHJpb3JpdHk7CiAKIAlwcl9kZWJ1Zygia2ZkOiB1cGRhdGluZyBxdWV1ZSBpZCAlZCBmb3IgUEFTSUQgJWRcbiIsCi0JCQlhcmdzLnF1ZXVlX2lkLCBwLT5wYXNpZCk7CisJCQlhcmdzLT5xdWV1ZV9pZCwgcC0+cGFzaWQpOwogCiAJbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOwogCi0JcmV0dmFsID0gcHFtX3VwZGF0ZV9xdWV1ZSgmcC0+cHFtLCBhcmdzLnF1ZXVlX2lkLCAmcHJvcGVydGllcyk7CisJcmV0dmFsID0gcHFtX3VwZGF0ZV9xdWV1ZSgmcC0+cHFtLCBhcmdzLT5xdWV1ZV9pZCwgJnByb3BlcnRpZXMpOwogCiAJbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgbG9uZyBrZmRfaW9jdGxfc2V0X21lbW9yeV9wb2xpY3koc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5KHN0cnVjdCBmaWxlICpmaWxlcCwKKwkJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBrZmRfaW9jdGxfc2V0X21lbW9yeV9wb2xpY3lfYXJncyBhcmdzOworCXN0cnVjdCBrZmRfaW9jdGxfc2V0X21lbW9yeV9wb2xpY3lfYXJncyAqYXJncyA9IGRhdGE7CiAJc3RydWN0IGtmZF9kZXYgKmRldjsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpwZGQ7CiAJZW51bSBjYWNoZV9wb2xpY3kgZGVmYXVsdF9wb2xpY3ksIGFsdGVybmF0ZV9wb2xpY3k7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoYXJncy5kZWZhdWx0X3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVAotCSAgICAmJiBhcmdzLmRlZmF1bHRfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX05PTkNPSEVSRU5UKSB7CisJaWYgKGFyZ3MtPmRlZmF1bHRfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UCisJICAgICYmIGFyZ3MtPmRlZmF1bHRfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX05PTkNPSEVSRU5UKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChhcmdzLmFsdGVybmF0ZV9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQKLQkgICAgJiYgYXJncy5hbHRlcm5hdGVfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX05PTkNPSEVSRU5UKSB7CisJaWYgKGFyZ3MtPmFsdGVybmF0ZV9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQKKwkgICAgJiYgYXJncy0+YWx0ZXJuYXRlX3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9OT05DT0hFUkVOVCkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkZXYgPSBrZmRfZGV2aWNlX2J5X2lkKGFyZ3MuZ3B1X2lkKTsKKwlkZXYgPSBrZmRfZGV2aWNlX2J5X2lkKGFyZ3MtPmdwdV9pZCk7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNDAxLDIzICszNzQsMjMgQEAKIAogCXBkZCA9IGtmZF9iaW5kX3Byb2Nlc3NfdG9fZGV2aWNlKGRldiwgcCk7CiAJaWYgKElTX0VSUihwZGQpKSB7Ci0JCWVyciA9IFBUUl9FUlIocGRkKTsKKwkJZXJyID0gLUVTUkNIOwogCQlnb3RvIG91dDsKIAl9CiAKLQlkZWZhdWx0X3BvbGljeSA9IChhcmdzLmRlZmF1bHRfcG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQorCWRlZmF1bHRfcG9saWN5ID0gKGFyZ3MtPmRlZmF1bHRfcG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQogCQkJID8gY2FjaGVfcG9saWN5X2NvaGVyZW50IDogY2FjaGVfcG9saWN5X25vbmNvaGVyZW50OwogCiAJYWx0ZXJuYXRlX3BvbGljeSA9Ci0JCShhcmdzLmFsdGVybmF0ZV9wb2xpY3kgPT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQpCisJCShhcmdzLT5hbHRlcm5hdGVfcG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQogCQkgICA/IGNhY2hlX3BvbGljeV9jb2hlcmVudCA6IGNhY2hlX3BvbGljeV9ub25jb2hlcmVudDsKIAogCWlmICghZGV2LT5kcW0tPnNldF9jYWNoZV9tZW1vcnlfcG9saWN5KGRldi0+ZHFtLAogCQkJCSZwZGQtPnFwZCwKIAkJCQlkZWZhdWx0X3BvbGljeSwKIAkJCQlhbHRlcm5hdGVfcG9saWN5LAotCQkJCSh2b2lkIF9fdXNlciAqKWFyZ3MuYWx0ZXJuYXRlX2FwZXJ0dXJlX2Jhc2UsCi0JCQkJYXJncy5hbHRlcm5hdGVfYXBlcnR1cmVfc2l6ZSkpCisJCQkJKHZvaWQgX191c2VyICopYXJncy0+YWx0ZXJuYXRlX2FwZXJ0dXJlX2Jhc2UsCisJCQkJYXJncy0+YWx0ZXJuYXRlX2FwZXJ0dXJlX3NpemUpKQogCQllcnIgPSAtRUlOVkFMOwogCiBvdXQ6CkBAIC00MjYsNTMgKzM5OSw0NCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBsb25nIGtmZF9pb2N0bF9nZXRfY2xvY2tfY291bnRlcnMoc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVycyhzdHJ1Y3QgZmlsZSAqZmlsZXAsCisJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzX2FyZ3MgYXJnczsKKwlzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVyc19hcmdzICphcmdzID0gZGF0YTsKIAlzdHJ1Y3Qga2ZkX2RldiAqZGV2OwogCXN0cnVjdCB0aW1lc3BlYyB0aW1lOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLmdwdV9pZCk7CisJZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLT5ncHVfaWQpOwogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBSZWFkaW5nIEdQVSBjbG9jayBjb3VudGVyIGZyb20gS0dEICovCi0JYXJncy5ncHVfY2xvY2tfY291bnRlciA9IGtmZDJrZ2QtPmdldF9ncHVfY2xvY2tfY291bnRlcihkZXYtPmtnZCk7CisJYXJncy0+Z3B1X2Nsb2NrX2NvdW50ZXIgPSBrZmQya2dkLT5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIoZGV2LT5rZ2QpOwogCiAJLyogTm8gYWNjZXNzIHRvIHJkdHNjLiBVc2luZyByYXcgbW9ub3RvbmljIHRpbWUgKi8KIAlnZXRyYXdtb25vdG9uaWMoJnRpbWUpOwotCWFyZ3MuY3B1X2Nsb2NrX2NvdW50ZXIgPSAodWludDY0X3QpdGltZXNwZWNfdG9fbnMoJnRpbWUpOworCWFyZ3MtPmNwdV9jbG9ja19jb3VudGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKIAogCWdldF9tb25vdG9uaWNfYm9vdHRpbWUoJnRpbWUpOwotCWFyZ3Muc3lzdGVtX2Nsb2NrX2NvdW50ZXIgPSAodWludDY0X3QpdGltZXNwZWNfdG9fbnMoJnRpbWUpOworCWFyZ3MtPnN5c3RlbV9jbG9ja19jb3VudGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKIAogCS8qIFNpbmNlIHRoZSBjb3VudGVyIGlzIGluIG5hbm8tc2Vjb25kcyB3ZSB1c2UgMUdIeiBmcmVxdWVuY3kgKi8KLQlhcmdzLnN5c3RlbV9jbG9ja19mcmVxID0gMTAwMDAwMDAwMDsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYXJncywgc2l6ZW9mKGFyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJYXJncy0+c3lzdGVtX2Nsb2NrX2ZyZXEgPSAxMDAwMDAwMDAwOwogCiAJcmV0dXJuIDA7CiB9CiAKIAogc3RhdGljIGludCBrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVzKHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCBfX3VzZXIgKmFyZykKKwkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVydHVyZXNfYXJncyBhcmdzOworCXN0cnVjdCBrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVzX2FyZ3MgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2VfYXBlcnR1cmVzICpwQXBlcnR1cmU7CiAJc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqcGRkOwogCiAJZGV2X2RiZyhrZmRfZGV2aWNlLCAiZ2V0IGFwZXJ0dXJlcyBmb3IgUEFTSUQgJWQiLCBwLT5wYXNpZCk7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlhcmdzLm51bV9vZl9ub2RlcyA9IDA7CisJYXJncy0+bnVtX29mX25vZGVzID0gMDsKIAogCW11dGV4X2xvY2soJnAtPm11dGV4KTsKIApAQCAtNDgxLDcgKzQ0NSw4IEBACiAJCS8qIFJ1biBvdmVyIGFsbCBwZGQgb2YgdGhlIHByb2Nlc3MgKi8KIAkJcGRkID0ga2ZkX2dldF9maXJzdF9wcm9jZXNzX2RldmljZV9kYXRhKHApOwogCQlkbyB7Ci0JCQlwQXBlcnR1cmUgPSAmYXJncy5wcm9jZXNzX2FwZXJ0dXJlc1thcmdzLm51bV9vZl9ub2Rlc107CisJCQlwQXBlcnR1cmUgPQorCQkJCSZhcmdzLT5wcm9jZXNzX2FwZXJ0dXJlc1thcmdzLT5udW1fb2Zfbm9kZXNdOwogCQkJcEFwZXJ0dXJlLT5ncHVfaWQgPSBwZGQtPmRldi0+aWQ7CiAJCQlwQXBlcnR1cmUtPmxkc19iYXNlID0gcGRkLT5sZHNfYmFzZTsKIAkJCXBBcGVydHVyZS0+bGRzX2xpbWl0ID0gcGRkLT5sZHNfbGltaXQ7CkBAIC00OTEsNyArNDU2LDcgQEAKIAkJCXBBcGVydHVyZS0+c2NyYXRjaF9saW1pdCA9IHBkZC0+c2NyYXRjaF9saW1pdDsKIAogCQkJZGV2X2RiZyhrZmRfZGV2aWNlLAotCQkJCSJub2RlIGlkICV1XG4iLCBhcmdzLm51bV9vZl9ub2Rlcyk7CisJCQkJIm5vZGUgaWQgJXVcbiIsIGFyZ3MtPm51bV9vZl9ub2Rlcyk7CiAJCQlkZXZfZGJnKGtmZF9kZXZpY2UsCiAJCQkJImdwdSBpZCAldVxuIiwgcGRkLT5kZXYtPmlkKTsKIAkJCWRldl9kYmcoa2ZkX2RldmljZSwKQEAgLTUwNyw4MCArNDcyLDEzMSBAQAogCQkJZGV2X2RiZyhrZmRfZGV2aWNlLAogCQkJCSJzY3JhdGNoX2xpbWl0ICVsbFhcbiIsIHBkZC0+c2NyYXRjaF9saW1pdCk7CiAKLQkJCWFyZ3MubnVtX29mX25vZGVzKys7CisJCQlhcmdzLT5udW1fb2Zfbm9kZXMrKzsKIAkJfSB3aGlsZSAoKHBkZCA9IGtmZF9nZXRfbmV4dF9wcm9jZXNzX2RldmljZV9kYXRhKHAsIHBkZCkpICE9IE5VTEwgJiYKLQkJCQkoYXJncy5udW1fb2Zfbm9kZXMgPCBOVU1fT0ZfU1VQUE9SVEVEX0dQVVMpKTsKKwkJCQkoYXJncy0+bnVtX29mX25vZGVzIDwgTlVNX09GX1NVUFBPUlRFRF9HUFVTKSk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7CiAKLQlpZiAoY29weV90b191c2VyKGFyZywgJmFyZ3MsIHNpemVvZihhcmdzKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgQU1ES0ZEX0lPQ1RMX0RFRihpb2N0bCwgX2Z1bmMsIF9mbGFncykgXAorCVtfSU9DX05SKGlvY3RsKV0gPSB7LmNtZCA9IGlvY3RsLCAuZnVuYyA9IF9mdW5jLCAuZmxhZ3MgPSBfZmxhZ3MsIC5jbWRfZHJ2ID0gMCwgLm5hbWUgPSAjaW9jdGx9CisKKy8qKiBJb2N0bCB0YWJsZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRrZmRfaW9jdGxfZGVzYyBhbWRrZmRfaW9jdGxzW10gPSB7CisJQU1ES0ZEX0lPQ1RMX0RFRihBTURLRkRfSU9DX0dFVF9WRVJTSU9OLAorCQkJa2ZkX2lvY3RsX2dldF92ZXJzaW9uLCAwKSwKKworCUFNREtGRF9JT0NUTF9ERUYoQU1ES0ZEX0lPQ19DUkVBVEVfUVVFVUUsCisJCQlrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlLCAwKSwKKworCUFNREtGRF9JT0NUTF9ERUYoQU1ES0ZEX0lPQ19ERVNUUk9ZX1FVRVVFLAorCQkJa2ZkX2lvY3RsX2Rlc3Ryb3lfcXVldWUsIDApLAorCisJQU1ES0ZEX0lPQ1RMX0RFRihBTURLRkRfSU9DX1NFVF9NRU1PUllfUE9MSUNZLAorCQkJa2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5LCAwKSwKKworCUFNREtGRF9JT0NUTF9ERUYoQU1ES0ZEX0lPQ19HRVRfQ0xPQ0tfQ09VTlRFUlMsCisJCQlrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzLCAwKSwKKworCUFNREtGRF9JT0NUTF9ERUYoQU1ES0ZEX0lPQ19HRVRfUFJPQ0VTU19BUEVSVFVSRVMsCisJCQlrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVzLCAwKSwKKworCUFNREtGRF9JT0NUTF9ERUYoQU1ES0ZEX0lPQ19VUERBVEVfUVVFVUUsCisJCQlrZmRfaW9jdGxfdXBkYXRlX3F1ZXVlLCAwKSwKK307CisKKyNkZWZpbmUgQU1ES0ZEX0NPUkVfSU9DVExfQ09VTlQJQVJSQVlfU0laRShhbWRrZmRfaW9jdGxzKQorCiBzdGF0aWMgbG9uZyBrZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3M7Ci0JbG9uZyBlcnIgPSAtRUlOVkFMOworCWFtZGtmZF9pb2N0bF90ICpmdW5jOworCWNvbnN0IHN0cnVjdCBhbWRrZmRfaW9jdGxfZGVzYyAqaW9jdGwgPSBOVUxMOworCXVuc2lnbmVkIGludCBuciA9IF9JT0NfTlIoY21kKTsKKwljaGFyIHN0YWNrX2tkYXRhWzEyOF07CisJY2hhciAqa2RhdGEgPSBOVUxMOworCXVuc2lnbmVkIGludCB1c2l6ZSwgYXNpemU7CisJaW50IHJldGNvZGUgPSAtRUlOVkFMOwogCi0JZGV2X2RiZyhrZmRfZGV2aWNlLAotCQkiaW9jdGwgY21kIDB4JXggKCMlZCksIGFyZyAweCVseFxuIiwKLQkJY21kLCBfSU9DX05SKGNtZCksIGFyZyk7CisJaWYgKG5yID49IEFNREtGRF9DT1JFX0lPQ1RMX0NPVU5UKQorCQlnb3RvIGVycl9pMTsKKworCWlmICgobnIgPj0gQU1ES0ZEX0NPTU1BTkRfU1RBUlQpICYmIChuciA8IEFNREtGRF9DT01NQU5EX0VORCkpIHsKKwkJdTMyIGFtZGtmZF9zaXplOworCisJCWlvY3RsID0gJmFtZGtmZF9pb2N0bHNbbnJdOworCisJCWFtZGtmZF9zaXplID0gX0lPQ19TSVpFKGlvY3RsLT5jbWQpOworCQl1c2l6ZSA9IGFzaXplID0gX0lPQ19TSVpFKGNtZCk7CisJCWlmIChhbWRrZmRfc2l6ZSA+IGFzaXplKQorCQkJYXNpemUgPSBhbWRrZmRfc2l6ZTsKKworCQljbWQgPSBpb2N0bC0+Y21kOworCX0gZWxzZQorCQlnb3RvIGVycl9pMTsKKworCWRldl9kYmcoa2ZkX2RldmljZSwgImlvY3RsIGNtZCAweCV4ICgjJWQpLCBhcmcgMHglbHhcbiIsIGNtZCwgbnIsIGFyZyk7CiAKIAlwcm9jZXNzID0ga2ZkX2dldF9wcm9jZXNzKGN1cnJlbnQpOwotCWlmIChJU19FUlIocHJvY2VzcykpCi0JCXJldHVybiBQVFJfRVJSKHByb2Nlc3MpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEtGRF9JT0NfR0VUX1ZFUlNJT046Ci0JCWVyciA9IGtmZF9pb2N0bF9nZXRfdmVyc2lvbihmaWxlcCwgcHJvY2VzcywgKHZvaWQgX191c2VyICopYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBLRkRfSU9DX0NSRUFURV9RVUVVRToKLQkJZXJyID0ga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKLQkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBLRkRfSU9DX0RFU1RST1lfUVVFVUU6Ci0JCWVyciA9IGtmZF9pb2N0bF9kZXN0cm95X3F1ZXVlKGZpbGVwLCBwcm9jZXNzLAotCQkJCQkJKHZvaWQgX191c2VyICopYXJnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEtGRF9JT0NfU0VUX01FTU9SWV9QT0xJQ1k6Ci0JCWVyciA9IGtmZF9pb2N0bF9zZXRfbWVtb3J5X3BvbGljeShmaWxlcCwgcHJvY2VzcywKLQkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBLRkRfSU9DX0dFVF9DTE9DS19DT1VOVEVSUzoKLQkJZXJyID0ga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVycyhmaWxlcCwgcHJvY2VzcywKLQkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBLRkRfSU9DX0dFVF9QUk9DRVNTX0FQRVJUVVJFUzoKLQkJZXJyID0ga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlcyhmaWxlcCwgcHJvY2VzcywKLQkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBLRkRfSU9DX1VQREFURV9RVUVVRToKLQkJZXJyID0ga2ZkX2lvY3RsX3VwZGF0ZV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKLQkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZGV2X2VycihrZmRfZGV2aWNlLAotCQkJInVua25vd24gaW9jdGwgY21kIDB4JXgsIGFyZyAweCVseClcbiIsCi0JCQljbWQsIGFyZyk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWJyZWFrOworCWlmIChJU19FUlIocHJvY2VzcykpIHsKKwkJZGV2X2RiZyhrZmRfZGV2aWNlLCAibm8gcHJvY2Vzc1xuIik7CisJCWdvdG8gZXJyX2kxOwogCX0KIAotCWlmIChlcnIgPCAwKQotCQlkZXZfZXJyKGtmZF9kZXZpY2UsCi0JCQkiaW9jdGwgZXJyb3IgJWxkIGZvciBpb2N0bCBjbWQgMHgleCAoIyVkKVxuIiwKLQkJCWVyciwgY21kLCBfSU9DX05SKGNtZCkpOworCS8qIERvIG5vdCB0cnVzdCB1c2Vyc3BhY2UsIHVzZSBvdXIgb3duIGRlZmluaXRpb24gKi8KKwlmdW5jID0gaW9jdGwtPmZ1bmM7CiAKLQlyZXR1cm4gZXJyOworCWlmICh1bmxpa2VseSghZnVuYykpIHsKKwkJZGV2X2RiZyhrZmRfZGV2aWNlLCAibm8gZnVuY3Rpb25cbiIpOworCQlyZXRjb2RlID0gLUVJTlZBTDsKKwkJZ290byBlcnJfaTE7CisJfQorCisJaWYgKGNtZCAmIChJT0NfSU4gfCBJT0NfT1VUKSkgeworCQlpZiAoYXNpemUgPD0gc2l6ZW9mKHN0YWNrX2tkYXRhKSkgeworCQkJa2RhdGEgPSBzdGFja19rZGF0YTsKKwkJfSBlbHNlIHsKKwkJCWtkYXRhID0ga21hbGxvYyhhc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWtkYXRhKSB7CisJCQkJcmV0Y29kZSA9IC1FTk9NRU07CisJCQkJZ290byBlcnJfaTE7CisJCQl9CisJCX0KKwkJaWYgKGFzaXplID4gdXNpemUpCisJCQltZW1zZXQoa2RhdGEgKyB1c2l6ZSwgMCwgYXNpemUgLSB1c2l6ZSk7CisJfQorCisJaWYgKGNtZCAmIElPQ19JTikgeworCQlpZiAoY29weV9mcm9tX3VzZXIoa2RhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgdXNpemUpICE9IDApIHsKKwkJCXJldGNvZGUgPSAtRUZBVUxUOworCQkJZ290byBlcnJfaTE7CisJCX0KKwl9IGVsc2UgaWYgKGNtZCAmIElPQ19PVVQpIHsKKwkJbWVtc2V0KGtkYXRhLCAwLCB1c2l6ZSk7CisJfQorCisJcmV0Y29kZSA9IGZ1bmMoZmlsZXAsIHByb2Nlc3MsIGtkYXRhKTsKKworCWlmIChjbWQgJiBJT0NfT1VUKQorCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywga2RhdGEsIHVzaXplKSAhPSAwKQorCQkJcmV0Y29kZSA9IC1FRkFVTFQ7CisKK2Vycl9pMToKKwlpZiAoIWlvY3RsKQorCQlkZXZfZGJnKGtmZF9kZXZpY2UsICJpbnZhbGlkIGlvY3RsOiBwaWQ9JWQsIGNtZD0weCUwMngsIG5yPTB4JTAyeFxuIiwKKwkJCSAgdGFza19waWRfbnIoY3VycmVudCksIGNtZCwgbnIpOworCisJaWYgKGtkYXRhICE9IHN0YWNrX2tkYXRhKQorCQlrZnJlZShrZGF0YSk7CisKKwlpZiAocmV0Y29kZSkKKwkJZGV2X2RiZyhrZmRfZGV2aWNlLCAicmV0ID0gJWRcbiIsIHJldGNvZGUpOworCisJcmV0dXJuIHJldGNvZGU7CiB9CiAKIHN0YXRpYyBpbnQga2ZkX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZS5jCmluZGV4IDQzODg0ZWIuLjI1YmM0N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAia2ZkX3ByaXYuaCIKICNpbmNsdWRlICJrZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIuaCIKKyNpbmNsdWRlICJrZmRfcG00X2hlYWRlcnMuaCIKIAogI2RlZmluZSBNUURfU0laRV9BTElHTkVEIDc2OAogCkBAIC0xNjksOSArMTcwLDggQEAKIAlrZmQtPnNoYXJlZF9yZXNvdXJjZXMgPSAqZ3B1X3Jlc291cmNlczsKIAogCS8qIGNhbGN1bGF0ZSBtYXggc2l6ZSBvZiBtcWRzIG5lZWRlZCBmb3IgcXVldWVzICovCi0Jc2l6ZSA9IG1heF9udW1fb2ZfcHJvY2Vzc2VzICoKLQkJbWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MgKgotCQlrZmQtPmRldmljZV9pbmZvLT5tcWRfc2l6ZV9hbGlnbmVkOworCXNpemUgPSBtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlICoKKwkJCWtmZC0+ZGV2aWNlX2luZm8tPm1xZF9zaXplX2FsaWduZWQ7CiAKIAkvKiBhZGQgYW5vdGhlciA1MTJLQiBmb3IgYWxsIG90aGVyIGFsbG9jYXRpb25zIG9uIGdhcnQgKi8KIAlzaXplICs9IDUxMiAqIDEwMjQ7CkBAIC0xOTIsMTMgKzE5Miw2IEBACiAJCWdvdG8ga2ZkX3RvcG9sb2d5X2FkZF9kZXZpY2VfZXJyb3I7CiAJfQogCi0JaWYgKGtmZF9pbnRlcnJ1cHRfaW5pdChrZmQpKSB7Ci0JCWRldl9lcnIoa2ZkX2RldmljZSwKLQkJCSJFcnJvciBpbml0aWFsaXppbmcgaW50ZXJydXB0cyBmb3IgZGV2aWNlICgleDoleClcbiIsCi0JCQlrZmQtPnBkZXYtPnZlbmRvciwga2ZkLT5wZGV2LT5kZXZpY2UpOwotCQlnb3RvIGtmZF9pbnRlcnJ1cHRfZXJyb3I7Ci0JfQotCiAJaWYgKCFkZXZpY2VfaW9tbXVfcGFzaWRfaW5pdChrZmQpKSB7CiAJCWRldl9lcnIoa2ZkX2RldmljZSwKIAkJCSJFcnJvciBpbml0aWFsaXppbmcgaW9tbXV2MiBmb3IgZGV2aWNlICgleDoleClcbiIsCkBAIC0yMzcsOCArMjMwLDYgQEAKIGRldmljZV9xdWV1ZV9tYW5hZ2VyX2Vycm9yOgogCWFtZF9pb21tdV9mcmVlX2RldmljZShrZmQtPnBkZXYpOwogZGV2aWNlX2lvbW11X3Bhc2lkX2Vycm9yOgotCWtmZF9pbnRlcnJ1cHRfZXhpdChrZmQpOwota2ZkX2ludGVycnVwdF9lcnJvcjoKIAlrZmRfdG9wb2xvZ3lfcmVtb3ZlX2RldmljZShrZmQpOwoga2ZkX3RvcG9sb2d5X2FkZF9kZXZpY2VfZXJyb3I6CiAJa2ZkMmtnZC0+ZmluaV9zYV9tYW5hZ2VyKGtmZC0+a2dkKTsKQEAgLTI1NCw3ICsyNDUsNiBAQAogCWlmIChrZmQtPmluaXRfY29tcGxldGUpIHsKIAkJZGV2aWNlX3F1ZXVlX21hbmFnZXJfdW5pbml0KGtmZC0+ZHFtKTsKIAkJYW1kX2lvbW11X2ZyZWVfZGV2aWNlKGtmZC0+cGRldik7Ci0JCWtmZF9pbnRlcnJ1cHRfZXhpdChrZmQpOwogCQlrZmRfdG9wb2xvZ3lfcmVtb3ZlX2RldmljZShrZmQpOwogCX0KIApAQCAtMjk2LDEzICsyODYsNSBAQAogLyogVGhpcyBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBLR0QgYXQgSVNSLiAqLwogdm9pZCBrZ2Qya2ZkX2ludGVycnVwdChzdHJ1Y3Qga2ZkX2RldiAqa2ZkLCBjb25zdCB2b2lkICppaF9yaW5nX2VudHJ5KQogewotCWlmIChrZmQtPmluaXRfY29tcGxldGUpIHsKLQkJc3Bpbl9sb2NrKCZrZmQtPmludGVycnVwdF9sb2NrKTsKLQotCQlpZiAoa2ZkLT5pbnRlcnJ1cHRzX2FjdGl2ZQotCQkgICAgJiYgZW5xdWV1ZV9paF9yaW5nX2VudHJ5KGtmZCwgaWhfcmluZ19lbnRyeSkpCi0JCQlzY2hlZHVsZV93b3JrKCZrZmQtPmludGVycnVwdF93b3JrKTsKLQotCQlzcGluX3VubG9jaygma2ZkLT5pbnRlcnJ1cHRfbG9jayk7Ci0JfQorCS8qIFByb2Nlc3MgaW50ZXJydXB0cyAvIHNjaGVkdWxlIHdvcmsgYXMgbmVjZXNzYXJ5ICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5jCmluZGV4IDkyNGU5MGMuLjBkODY5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5jCkBAIC0xNjEsNiArMTYxLDkgQEAKIHsKIAlpbnQgYml0ID0gcXBkLT52bWlkIC0gS0ZEX1ZNSURfU1RBUlRfT0ZGU0VUOwogCisJLyogUmVsZWFzZSB0aGUgdm1pZCBtYXBwaW5nICovCisJc2V0X3Bhc2lkX3ZtaWRfbWFwcGluZyhkcW0sIDAsIHFwZC0+dm1pZCk7CisKIAlzZXRfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikmZHFtLT52bWlkX2JpdG1hcCk7CiAJcXBkLT52bWlkID0gMDsKIAlxLT5wcm9wZXJ0aWVzLnZtaWQgPSAwOwpAQCAtMTgwLDYgKzE4MywxMyBAQAogCiAJbXV0ZXhfbG9jaygmZHFtLT5sb2NrKTsKIAorCWlmIChkcW0tPnRvdGFsX3F1ZXVlX2NvdW50ID49IG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UpIHsKKwkJcHJfd2FybigiYW1ka2ZkOiBDYW4ndCBjcmVhdGUgbmV3IHVzZXJtb2RlIHF1ZXVlIGJlY2F1c2UgJWQgcXVldWVzIHdlcmUgYWxyZWFkeSBjcmVhdGVkXG4iLAorCQkJCWRxbS0+dG90YWxfcXVldWVfY291bnQpOworCQltdXRleF91bmxvY2soJmRxbS0+bG9jayk7CisJCXJldHVybiAtRVBFUk07CisJfQorCiAJaWYgKGxpc3RfZW1wdHkoJnFwZC0+cXVldWVzX2xpc3QpKSB7CiAJCXJldHZhbCA9IGFsbG9jYXRlX3ZtaWQoZHFtLCBxcGQsIHEpOwogCQlpZiAocmV0dmFsICE9IDApIHsKQEAgLTIwNCw2ICsyMTQsMTQgQEAKIAlsaXN0X2FkZCgmcS0+bGlzdCwgJnFwZC0+cXVldWVzX2xpc3QpOwogCWRxbS0+cXVldWVfY291bnQrKzsKIAorCS8qCisJICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCB0aGlzIGNvdW50ZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHF1ZXVlJ3MKKwkgKiB0eXBlIG9yIHdoZXRoZXIgdGhlIHF1ZXVlIGlzIGFjdGl2ZS4KKwkgKi8KKwlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50Kys7CisJcHJfZGVidWcoIlRvdGFsIG9mICVkIHF1ZXVlcyBhcmUgYWNjb3VudGFibGUgc28gZmFyXG4iLAorCQkJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCk7CisKIAltdXRleF91bmxvY2soJmRxbS0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzIsNiArMjkwLDE4IEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCisJcHJfZGVidWcoImtmZDogbG9hZGluZyBtcWQgdG8gaHFkIG9uIHBpcGUgKCVkKSBxdWV1ZSAoJWQpXG4iLAorCQkJcS0+cGlwZSwKKwkJCXEtPnF1ZXVlKTsKKworCXJldHZhbCA9IG1xZC0+bG9hZF9tcWQobXFkLCBxLT5tcWQsIHEtPnBpcGUsCisJCQlxLT5xdWV1ZSwgKHVpbnQzMl90IF9fdXNlciAqKSBxLT5wcm9wZXJ0aWVzLndyaXRlX3B0cik7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCWRlYWxsb2NhdGVfaHFkKGRxbSwgcSk7CisJCW1xZC0+dW5pbml0X21xZChtcWQsIHEtPm1xZCwgcS0+bXFkX21lbV9vYmopOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zMTEsNiArMzQxLDE1IEBACiAJaWYgKGxpc3RfZW1wdHkoJnFwZC0+cXVldWVzX2xpc3QpKQogCQlkZWFsbG9jYXRlX3ZtaWQoZHFtLCBxcGQsIHEpOwogCWRxbS0+cXVldWVfY291bnQtLTsKKworCS8qCisJICogVW5jb25kaXRpb25hbGx5IGRlY3JlbWVudCB0aGlzIGNvdW50ZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHF1ZXVlJ3MKKwkgKiB0eXBlCisJICovCisJZHFtLT50b3RhbF9xdWV1ZV9jb3VudC0tOworCXByX2RlYnVnKCJUb3RhbCBvZiAlZCBxdWV1ZXMgYXJlIGFjY291bnRhYmxlIHNvIGZhclxuIiwKKwkJCWRxbS0+dG90YWxfcXVldWVfY291bnQpOworCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZkcW0tPmxvY2spOwogCXJldHVybiByZXR2YWw7CkBAIC0zMjAsNiArMzU5LDcgQEAKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBtcWRfbWFuYWdlciAqbXFkOworCWJvb2wgcHJldl9hY3RpdmUgPSBmYWxzZTsKIAogCUJVR19PTighZHFtIHx8ICFxIHx8ICFxLT5tcWQpOwogCkBAIC0zMzAsMTAgKzM3MCwxOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyZXR2YWwgPSBtcWQtPnVwZGF0ZV9tcWQobXFkLCBxLT5tcWQsICZxLT5wcm9wZXJ0aWVzKTsKIAlpZiAocS0+cHJvcGVydGllcy5pc19hY3RpdmUgPT0gdHJ1ZSkKKwkJcHJldl9hY3RpdmUgPSB0cnVlOworCisJLyoKKwkgKgorCSAqIGNoZWNrIGFjdGl2ZSBzdGF0ZSB2cy4gdGhlIHByZXZpb3VzIHN0YXRlCisJICogYW5kIG1vZGlmeSBjb3VudGVyIGFjY29yZGluZ2x5CisJICovCisJcmV0dmFsID0gbXFkLT51cGRhdGVfbXFkKG1xZCwgcS0+bXFkLCAmcS0+cHJvcGVydGllcyk7CisJaWYgKChxLT5wcm9wZXJ0aWVzLmlzX2FjdGl2ZSA9PSB0cnVlKSAmJiAocHJldl9hY3RpdmUgPT0gZmFsc2UpKQogCQlkcW0tPnF1ZXVlX2NvdW50Kys7Ci0JZWxzZQorCWVsc2UgaWYgKChxLT5wcm9wZXJ0aWVzLmlzX2FjdGl2ZSA9PSBmYWxzZSkgJiYgKHByZXZfYWN0aXZlID09IHRydWUpKQogCQlkcW0tPnF1ZXVlX2NvdW50LS07CiAKIAlpZiAoc2NoZWRfcG9saWN5ICE9IEtGRF9TQ0hFRF9QT0xJQ1lfTk9fSFdTKQpAQCAtNTE3LDEwICs1NjUsMTQgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBwaXBlc19udW07IGkrKykgewogCQlpbnggPSBpICsgZmlyc3RfcGlwZTsKKwkJLyoKKwkJICogSFBEIGJ1ZmZlciBvbiBHVFQgaXMgYWxsb2NhdGVkIGJ5IGFtZGtmZCwgbm8gbmVlZCB0byB3YXN0ZQorCQkgKiBzcGFjZSBpbiBHVFQgZm9yIHBpcGVsaW5lcyB3ZSBkb24ndCBpbml0aWFsaXplCisJCSAqLwogCQlwaXBlX2hwZF9hZGRyID0gZHFtLT5waXBlbGluZXNfYWRkciArIGkgKiBDSUtfSFBEX0VPUF9CWVRFUzsKIAkJcHJfZGVidWcoImtmZDogcGlwZWxpbmUgYWRkcmVzcyAlbGxYXG4iLCBwaXBlX2hwZF9hZGRyKTsKIAkJLyogPSBsb2cyKGJ5dGVzLzQpLTEgKi8KLQkJa2ZkMmtnZC0+aW5pdF9waXBlbGluZShkcW0tPmRldi0+a2dkLCBpLAorCQlrZmQya2dkLT5pbml0X3BpcGVsaW5lKGRxbS0+ZGV2LT5rZ2QsIGlueCwKIAkJCQlDSUtfSFBEX0VPUF9CWVRFU19MT0cyIC0gMywgcGlwZV9ocGRfYWRkcik7CiAJfQogCkBAIC01MzYsNyArNTg4LDcgQEAKIAogCXByX2RlYnVnKCJrZmQ6IEluICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlyZXR2YWwgPSBpbml0X3BpcGVsaW5lcyhkcW0sIGdldF9waXBlc19udW0oZHFtKSwgS0ZEX0RRTV9GSVJTVF9QSVBFKTsKKwlyZXR2YWwgPSBpbml0X3BpcGVsaW5lcyhkcW0sIGdldF9waXBlc19udW0oZHFtKSwgZ2V0X2ZpcnN0X3BpcGUoZHFtKSk7CiAJaWYgKHJldHZhbCAhPSAwKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC03MjgsNiArNzgwLDIxIEBACiAJcHJfZGVidWcoImtmZDogSW4gZnVuYyAlc1xuIiwgX19mdW5jX18pOwogCiAJbXV0ZXhfbG9jaygmZHFtLT5sb2NrKTsKKwlpZiAoZHFtLT50b3RhbF9xdWV1ZV9jb3VudCA+PSBtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlKSB7CisJCXByX3dhcm4oImFtZGtmZDogQ2FuJ3QgY3JlYXRlIG5ldyBrZXJuZWwgcXVldWUgYmVjYXVzZSAlZCBxdWV1ZXMgd2VyZSBhbHJlYWR5IGNyZWF0ZWRcbiIsCisJCQkJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCk7CisJCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZSBvciB3aGV0aGVyIHRoZSBxdWV1ZSBpcyBhY3RpdmUuCisJICovCisJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCsrOworCXByX2RlYnVnKCJUb3RhbCBvZiAlZCBxdWV1ZXMgYXJlIGFjY291bnRhYmxlIHNvIGZhclxuIiwKKwkJCWRxbS0+dG90YWxfcXVldWVfY291bnQpOworCiAJbGlzdF9hZGQoJmtxLT5saXN0LCAmcXBkLT5wcml2X3F1ZXVlX2xpc3QpOwogCWRxbS0+cXVldWVfY291bnQrKzsKIAlxcGQtPmlzX2RlYnVnID0gdHJ1ZTsKQEAgLTc1MSw2ICs4MTgsMTMgQEAKIAlkcW0tPnF1ZXVlX2NvdW50LS07CiAJcXBkLT5pc19kZWJ1ZyA9IGZhbHNlOwogCWV4ZWN1dGVfcXVldWVzX2Nwc2NoKGRxbSwgZmFsc2UpOworCS8qCisJICogVW5jb25kaXRpb25hbGx5IGRlY3JlbWVudCB0aGlzIGNvdW50ZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHF1ZXVlJ3MKKwkgKiB0eXBlLgorCSAqLworCWRxbS0+dG90YWxfcXVldWVfY291bnQrKzsKKwlwcl9kZWJ1ZygiVG90YWwgb2YgJWQgcXVldWVzIGFyZSBhY2NvdW50YWJsZSBzbyBmYXJcbiIsCisJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKIAltdXRleF91bmxvY2soJmRxbS0+bG9jayk7CiB9CiAKQEAgLTc2OSw2ICs4NDMsMTMgQEAKIAogCW11dGV4X2xvY2soJmRxbS0+bG9jayk7CiAKKwlpZiAoZHFtLT50b3RhbF9xdWV1ZV9jb3VudCA+PSBtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlKSB7CisJCXByX3dhcm4oImFtZGtmZDogQ2FuJ3QgY3JlYXRlIG5ldyB1c2VybW9kZSBxdWV1ZSBiZWNhdXNlICVkIHF1ZXVlcyB3ZXJlIGFscmVhZHkgY3JlYXRlZFxuIiwKKwkJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwkJcmV0dmFsID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CisKIAltcWQgPSBkcW0tPmdldF9tcWRfbWFuYWdlcihkcW0sIEtGRF9NUURfVFlQRV9DSUtfQ1ApOwogCWlmIChtcWQgPT0gTlVMTCkgewogCQltdXRleF91bmxvY2soJmRxbS0+bG9jayk7CkBAIC03ODYsNiArODY3LDE1IEBACiAJCXJldHZhbCA9IGV4ZWN1dGVfcXVldWVzX2Nwc2NoKGRxbSwgZmFsc2UpOwogCX0KIAorCS8qCisJICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCB0aGlzIGNvdW50ZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHF1ZXVlJ3MKKwkgKiB0eXBlIG9yIHdoZXRoZXIgdGhlIHF1ZXVlIGlzIGFjdGl2ZS4KKwkgKi8KKwlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50Kys7CisKKwlwcl9kZWJ1ZygiVG90YWwgb2YgJWQgcXVldWVzIGFyZSBhY2NvdW50YWJsZSBzbyBmYXJcbiIsCisJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwogb3V0OgogCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtOTA2LDYgKzk5NiwxNCBAQAogCiAJbXFkLT51bmluaXRfbXFkKG1xZCwgcS0+bXFkLCBxLT5tcWRfbWVtX29iaik7CiAKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBkZWNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZQorCSAqLworCWRxbS0+dG90YWxfcXVldWVfY291bnQtLTsKKwlwcl9kZWJ1ZygiVG90YWwgb2YgJWQgcXVldWVzIGFyZSBhY2NvdW50YWJsZSBzbyBmYXJcbiIsCisJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwogCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIuaAppbmRleCBjM2YxODllOC4uNTIwMzViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmgKQEAgLTEzMCw2ICsxMzAsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJcXVldWVzOwogCXVuc2lnbmVkIGludAkJcHJvY2Vzc2VzX2NvdW50OwogCXVuc2lnbmVkIGludAkJcXVldWVfY291bnQ7CisJdW5zaWduZWQgaW50CQl0b3RhbF9xdWV1ZV9jb3VudDsKIAl1bnNpZ25lZCBpbnQJCW5leHRfcGlwZV90b19hbGxvY2F0ZTsKIAl1bnNpZ25lZCBpbnQJCSphbGxvY2F0ZWRfcXVldWVzOwogCXVuc2lnbmVkIGludAkJdm1pZF9iaXRtYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZmxhdF9tZW1vcnkuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9mbGF0X21lbW9yeS5jCmluZGV4IDY2ZGY0ZGEuLmU2NGFhOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9mbGF0X21lbW9yeS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9mbGF0X21lbW9yeS5jCkBAIC0yOTksMTMgKzI5OSwxMyBAQAogCXN0cnVjdCBrZmRfZGV2ICpkZXY7CiAJc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqcGRkOwogCi0JbXV0ZXhfbG9jaygmcHJvY2Vzcy0+bXV0ZXgpOwotCiAJLypJdGVyYXRpbmcgb3ZlciBhbGwgZGV2aWNlcyovCiAJd2hpbGUgKChkZXYgPSBrZmRfdG9wb2xvZ3lfZW51bV9rZmRfZGV2aWNlcyhpZCkpICE9IE5VTEwgJiYKIAkJaWQgPCBOVU1fT0ZfU1VQUE9SVEVEX0dQVVMpIHsKIAogCQlwZGQgPSBrZmRfZ2V0X3Byb2Nlc3NfZGV2aWNlX2RhdGEoZGV2LCBwcm9jZXNzLCAxKTsKKwkJaWYgKCFwZGQpCisJCQlyZXR1cm4gLTE7CiAKIAkJLyoKIAkJICogRm9yIDY0IGJpdCBwcm9jZXNzIGFwZXJ0dXJlIHdpbGwgYmUgc3RhdGljYWxseSByZXNlcnZlZCBpbgpAQCAtMzQ4LDggKzM0OCw2IEBACiAJCWlkKys7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZwcm9jZXNzLT5tdXRleCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2ludGVycnVwdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2ludGVycnVwdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yjk5OTA5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9pbnRlcnJ1cHQuYworKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBLRkQgSW50ZXJydXB0cy4KLSAqCi0gKiBBTUQgR1BVcyBkZWxpdmVyIGludGVycnVwdHMgYnkgcHVzaGluZyBhbiBpbnRlcnJ1cHQgZGVzY3JpcHRpb24gb250byB0aGUKLSAqIGludGVycnVwdCByaW5nIGFuZCB0aGVuIHNlbmRpbmcgYW4gaW50ZXJydXB0LiBLR0QgcmVjZWl2ZXMgdGhlIGludGVycnVwdAotICogaW4gSVNSIGFuZCBzZW5kcyB1cyBhIHBvaW50ZXIgdG8gZWFjaCBuZXcgZW50cnkgb24gdGhlIGludGVycnVwdCByaW5nLgotICoKLSAqIFdlIGdlbmVyYWxseSBjYW4ndCBwcm9jZXNzIGludGVycnVwdC1zaWduYWxlZCBldmVudHMgZnJvbSBJU1IsIHNvIHdlIGNhbGwKLSAqIG91dCB0byBlYWNoIGludGVycnVwdCBjbGllbnQgbW9kdWxlIChjdXJyZW50bHkgb25seSB0aGUgc2NoZWR1bGVyKSB0byBhc2sgaWYKLSAqIGVhY2ggaW50ZXJydXB0IGlzIGludGVyZXN0aW5nLiBJZiB0aGV5IHJldHVybiB0cnVlLCB0aGVuIGl0IHJlcXVpcmVzIGZ1cnRoZXIKLSAqIHByb2Nlc3Npbmcgc28gd2UgY29weSBpdCB0byBhbiBpbnRlcm5hbCBpbnRlcnJ1cHQgcmluZyBhbmQgY2FsbCBlYWNoCi0gKiBpbnRlcnJ1cHQgY2xpZW50IGFnYWluIGZyb20gYSB3b3JrLXF1ZXVlLgotICoKLSAqIFRoZXJlJ3Mgbm8gYWNrbm93bGVkZ21lbnQgZm9yIHRoZSBpbnRlcnJ1cHRzIHdlIHVzZS4gVGhlIGhhcmR3YXJlIHNpbXBseQotICogcXVldWVzIGEgbmV3IGludGVycnVwdCBlYWNoIHRpbWUgd2l0aG91dCB3YWl0aW5nLgotICoKLSAqIFRoZSBmaXhlZC1zaXplIGludGVybmFsIHF1ZXVlIG1lYW5zIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdXMgdG8gbG9zZQotICogaW50ZXJydXB0cyBiZWNhdXNlIHdlIGhhdmUgbm8gYmFjay1wcmVzc3VyZSB0byB0aGUgaGFyZHdhcmUuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJrZmRfcHJpdi5oIgotCi0jZGVmaW5lIEtGRF9JTlRFUlJVUFRfUklOR19TSVpFIDI1NgotCi1zdGF0aWMgdm9pZCBpbnRlcnJ1cHRfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICopOwotCi1pbnQga2ZkX2ludGVycnVwdF9pbml0KHN0cnVjdCBrZmRfZGV2ICprZmQpCi17Ci0Jdm9pZCAqaW50ZXJydXB0X3JpbmcgPSBrbWFsbG9jX2FycmF5KEtGRF9JTlRFUlJVUFRfUklOR19TSVpFLAotCQkJCQlrZmQtPmRldmljZV9pbmZvLT5paF9yaW5nX2VudHJ5X3NpemUsCi0JCQkJCUdGUF9LRVJORUwpOwotCWlmICghaW50ZXJydXB0X3JpbmcpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Ja2ZkLT5pbnRlcnJ1cHRfcmluZyA9IGludGVycnVwdF9yaW5nOwotCWtmZC0+aW50ZXJydXB0X3Jpbmdfc2l6ZSA9Ci0JCUtGRF9JTlRFUlJVUFRfUklOR19TSVpFICoga2ZkLT5kZXZpY2VfaW5mby0+aWhfcmluZ19lbnRyeV9zaXplOwotCWF0b21pY19zZXQoJmtmZC0+aW50ZXJydXB0X3Jpbmdfd3B0ciwgMCk7Ci0JYXRvbWljX3NldCgma2ZkLT5pbnRlcnJ1cHRfcmluZ19ycHRyLCAwKTsKLQotCXNwaW5fbG9ja19pbml0KCZrZmQtPmludGVycnVwdF9sb2NrKTsKLQotCUlOSVRfV09SSygma2ZkLT5pbnRlcnJ1cHRfd29yaywgaW50ZXJydXB0X3dxKTsKLQotCWtmZC0+aW50ZXJydXB0c19hY3RpdmUgPSB0cnVlOwotCi0JLyoKLQkgKiBBZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHRoZSBpbnRlcnJ1cHQgd2lsbCBiZSBlbmFibGVkLiBUaGlzCi0JICogYmFycmllciBlbnN1cmVzIHRoYXQgdGhlIGludGVycnVwdCBydW5uaW5nIG9uIGEgZGlmZmVyZW50IHByb2Nlc3NvcgotCSAqIHNlZXMgYWxsIHRoZSBhYm92ZSB3cml0ZXMuCi0JICovCi0Jc21wX3dtYigpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQga2ZkX2ludGVycnVwdF9leGl0KHN0cnVjdCBrZmRfZGV2ICprZmQpCi17Ci0JLyoKLQkgKiBTdG9wIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmcm9tIHdyaXRpbmcgdG8gdGhlIHJpbmcgYW5kIHNjaGVkdWxpbmcKLQkgKiB3b3JrcXVldWUgaXRlbXMuIFRoZSBzcGlubG9jayBlbnN1cmVzIHRoYXQgYW55IGludGVycnVwdCBydW5uaW5nCi0JICogYWZ0ZXIgd2UgaGF2ZSB1bmxvY2tlZCBzZWVzIGludGVycnVwdHNfYWN0aXZlID0gZmFsc2UuCi0JICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZrZmQtPmludGVycnVwdF9sb2NrLCBmbGFncyk7Ci0Ja2ZkLT5pbnRlcnJ1cHRzX2FjdGl2ZSA9IGZhbHNlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtmZC0+aW50ZXJydXB0X2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogRmx1c2hfc2NoZWR1bGVkX3dvcmsgZW5zdXJlcyB0aGF0IHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZwotCSAqIHdvcmstcXVldWUgaXRlbXMgdGhhdCB3aWxsIGFjY2VzcyBpbnRlcnJ1cHRfcmluZy4gTmV3IHdvcmsgaXRlbXMKLQkgKiBjYW4ndCBiZSBjcmVhdGVkIGJlY2F1c2Ugd2Ugc3RvcHBlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgYWJvdmUuCi0JICovCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQotCWtmcmVlKGtmZC0+aW50ZXJydXB0X3JpbmcpOwotfQotCi0vKgotICogVGhpcyBhc3N1bWVzIHRoYXQgaXQgY2FuJ3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseSB3aXRoIGl0c2VsZgotICogYnV0IG9ubHkgd2l0aCBkZXF1ZXVlX2loX3JpbmdfZW50cnkuCi0gKi8KLWJvb2wgZW5xdWV1ZV9paF9yaW5nX2VudHJ5KHN0cnVjdCBrZmRfZGV2ICprZmQsCWNvbnN0IHZvaWQgKmloX3JpbmdfZW50cnkpCi17Ci0JdW5zaWduZWQgaW50IHJwdHIgPSBhdG9taWNfcmVhZCgma2ZkLT5pbnRlcnJ1cHRfcmluZ19ycHRyKTsKLQl1bnNpZ25lZCBpbnQgd3B0ciA9IGF0b21pY19yZWFkKCZrZmQtPmludGVycnVwdF9yaW5nX3dwdHIpOwotCi0JaWYgKChycHRyIC0gd3B0cikgJSBrZmQtPmludGVycnVwdF9yaW5nX3NpemUgPT0KLQkJCQkJa2ZkLT5kZXZpY2VfaW5mby0+aWhfcmluZ19lbnRyeV9zaXplKSB7Ci0JCS8qIFRoaXMgaXMgdmVyeSBiYWQsIHRoZSBzeXN0ZW0gaXMgbGlrZWx5IHRvIGhhbmcuICovCi0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQoa2ZkX2NoYXJkZXYoKSwKLQkJCSJJbnRlcnJ1cHQgcmluZyBvdmVyZmxvdywgZHJvcHBpbmcgaW50ZXJydXB0LlxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQltZW1jcHkoa2ZkLT5pbnRlcnJ1cHRfcmluZyArIHdwdHIsIGloX3JpbmdfZW50cnksCi0JCQlrZmQtPmRldmljZV9pbmZvLT5paF9yaW5nX2VudHJ5X3NpemUpOwotCi0Jd3B0ciA9ICh3cHRyICsga2ZkLT5kZXZpY2VfaW5mby0+aWhfcmluZ19lbnRyeV9zaXplKSAlCi0JCQlrZmQtPmludGVycnVwdF9yaW5nX3NpemU7Ci0Jc21wX3dtYigpOyAvKiBFbnN1cmUgbWVtY3B5J2QgZGF0YSBpcyB2aXNpYmxlIGJlZm9yZSB3cHRyIHVwZGF0ZS4gKi8KLQlhdG9taWNfc2V0KCZrZmQtPmludGVycnVwdF9yaW5nX3dwdHIsIHdwdHIpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBUaGlzIGFzc3VtZXMgdGhhdCBpdCBjYW4ndCBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggaXRzZWxmCi0gKiBidXQgb25seSB3aXRoIGVucXVldWVfaWhfcmluZ19lbnRyeS4KLSAqLwotc3RhdGljIGJvb2wgZGVxdWV1ZV9paF9yaW5nX2VudHJ5KHN0cnVjdCBrZmRfZGV2ICprZmQsIHZvaWQgKmloX3JpbmdfZW50cnkpCi17Ci0JLyoKLQkgKiBBc3N1bWUgdGhhdCB3YWl0IHF1ZXVlcyBoYXZlIGFuIGltcGxpY2l0IGJhcnJpZXIsIGkuZS4gYW55dGhpbmcgdGhhdAotCSAqIGhhcHBlbmVkIGluIHRoZSBJU1IgYmVmb3JlIGl0IHF1ZXVlZCB3b3JrIGlzIHZpc2libGUuCi0JICovCi0KLQl1bnNpZ25lZCBpbnQgd3B0ciA9IGF0b21pY19yZWFkKCZrZmQtPmludGVycnVwdF9yaW5nX3dwdHIpOwotCXVuc2lnbmVkIGludCBycHRyID0gYXRvbWljX3JlYWQoJmtmZC0+aW50ZXJydXB0X3JpbmdfcnB0cik7Ci0KLQlpZiAocnB0ciA9PSB3cHRyKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQltZW1jcHkoaWhfcmluZ19lbnRyeSwga2ZkLT5pbnRlcnJ1cHRfcmluZyArIHJwdHIsCi0JCQlrZmQtPmRldmljZV9pbmZvLT5paF9yaW5nX2VudHJ5X3NpemUpOwotCi0JcnB0ciA9IChycHRyICsga2ZkLT5kZXZpY2VfaW5mby0+aWhfcmluZ19lbnRyeV9zaXplKSAlCi0JCQlrZmQtPmludGVycnVwdF9yaW5nX3NpemU7Ci0KLQkvKgotCSAqIEVuc3VyZSB0aGUgcnB0ciB3cml0ZSB1cGRhdGUgaXMgbm90IHZpc2libGUgdW50aWwKLQkgKiBtZW1jcHkgaGFzIGZpbmlzaGVkIHJlYWRpbmcuCi0JICovCi0Jc21wX21iKCk7Ci0JYXRvbWljX3NldCgma2ZkLT5pbnRlcnJ1cHRfcmluZ19ycHRyLCBycHRyKTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlcnJ1cHRfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBrZmRfZGV2ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGtmZF9kZXYsCi0JCQkJCQlpbnRlcnJ1cHRfd29yayk7Ci0KLQl1aW50MzJfdCBpaF9yaW5nX2VudHJ5W0RJVl9ST1VORF9VUCgKLQkJCQlkZXYtPmRldmljZV9pbmZvLT5paF9yaW5nX2VudHJ5X3NpemUsCi0JCQkJc2l6ZW9mKHVpbnQzMl90KSldOwotCi0Jd2hpbGUgKGRlcXVldWVfaWhfcmluZ19lbnRyeShkZXYsIGloX3JpbmdfZW50cnkpKQotCQk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbW9kdWxlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbW9kdWxlLmMKaW5kZXggOTVkNWFmMS4uYThiZTZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tb2R1bGUuYwpAQCAtNTAsMTUgKzUwLDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKHNjaGVkX3BvbGljeSwKIAkiS2VybmVsIGNtZGxpbmUgcGFyYW1ldGVyIHRoYXQgZGVmaW5lcyB0aGUgYW1ka2ZkIHNjaGVkdWxpbmcgcG9saWN5Iik7CiAKLWludCBtYXhfbnVtX29mX3Byb2Nlc3NlcyA9IEtGRF9NQVhfTlVNX09GX1BST0NFU1NFU19ERUZBVUxUOwotbW9kdWxlX3BhcmFtKG1heF9udW1fb2ZfcHJvY2Vzc2VzLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhtYXhfbnVtX29mX3Byb2Nlc3NlcywKLQkiS2VybmVsIGNtZGxpbmUgcGFyYW1ldGVyIHRoYXQgZGVmaW5lcyB0aGUgYW1ka2ZkIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBwcm9jZXNzZXMiKTsKLQotaW50IG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzID0gS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTX0RFRkFVTFQ7Ci1tb2R1bGVfcGFyYW0obWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzLAotCSJLZXJuZWwgY21kbGluZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVzIHRoZSBhbWRrZmQgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcyBwZXIgcHJvY2VzcyIpOworaW50IG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UgPSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX0RFVklDRV9ERUZBVUxUOworbW9kdWxlX3BhcmFtKG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UsCisJIk1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgcGVyIGRldmljZSAoMSA9IE1pbmltdW0sIDQwOTYgPSBkZWZhdWx0KSIpOwogCiBib29sIGtnZDJrZmRfaW5pdCh1bnNpZ25lZCBpbnRlcmZhY2VfdmVyc2lvbiwKIAkJICBjb25zdCBzdHJ1Y3Qga2ZkMmtnZF9jYWxscyAqZjJnLApAQCAtMTAwLDE2ICs5NSwxMCBAQAogCX0KIAogCS8qIFZlcmlmeSBtb2R1bGUgcGFyYW1ldGVycyAqLwotCWlmICgobWF4X251bV9vZl9wcm9jZXNzZXMgPCAwKSB8fAotCQkobWF4X251bV9vZl9wcm9jZXNzZXMgPiBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVMpKSB7Ci0JCXByX2Vycigia2ZkOiBtYXhfbnVtX29mX3Byb2Nlc3NlcyBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVNcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKChtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcyA8IDApIHx8Ci0JCShtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcyA+Ci0JCQlLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MpKSB7Ci0JCXByX2Vycigia2ZkOiBtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcyBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1NcbiIpOworCWlmICgobWF4X251bV9vZl9xdWV1ZXNfcGVyX2RldmljZSA8IDApIHx8CisJCShtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlID4KKwkJCUtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfREVWSUNFKSkgeworCQlwcl9lcnIoImtmZDogbWF4X251bV9vZl9xdWV1ZXNfcGVyX2RldmljZSBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX0RFVklDRVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21xZF9tYW5hZ2VyLmMKaW5kZXggYWRjMzE0Ny4uNGMzODI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21xZF9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21xZF9tYW5hZ2VyLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogCQkJdWludDMyX3QgcXVldWVfaWQpCiB7CiAKLQlyZXR1cm4ga2ZkMmtnZC0+aHFkX2lzX29jY3VwaWVzKG1tLT5kZXYtPmtnZCwgcXVldWVfYWRkcmVzcywKKwlyZXR1cm4ga2ZkMmtnZC0+aHFkX2lzX29jY3VwaWVkKG1tLT5kZXYtPmtnZCwgcXVldWVfYWRkcmVzcywKIAkJCQkJcGlwZV9pZCwgcXVldWVfaWQpOwogCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcGFzaWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wYXNpZC5jCmluZGV4IDcxNjk5YWQuLjZjZmU3ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wYXNpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wYXNpZC5jCkBAIC0zMCw5ICszMCw5IEBACiAKIGludCBrZmRfcGFzaWRfaW5pdCh2b2lkKQogewotCXBhc2lkX2xpbWl0ID0gbWF4X251bV9vZl9wcm9jZXNzZXM7CisJcGFzaWRfbGltaXQgPSBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVM7CiAKLQlwYXNpZF9iaXRtYXAgPSBremFsbG9jKEJJVFNfVE9fTE9OR1MocGFzaWRfbGltaXQpLCBHRlBfS0VSTkVMKTsKKwlwYXNpZF9iaXRtYXAgPSBrY2FsbG9jKEJJVFNfVE9fTE9OR1MocGFzaWRfbGltaXQpLCBzaXplb2YobG9uZyksIEdGUF9LRVJORUwpOwogCWlmICghcGFzaWRfYml0bWFwKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcml2LmgKaW5kZXggZjlmYjgxZTMuLjk2ZGMxMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcml2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaApAQCAtNTIsMjAgKzUyLDE5IEBACiAjZGVmaW5lIGtmZF9hbGxvY19zdHJ1Y3QocHRyX3RvX3N0cnVjdCkJXAogCSgodHlwZW9mKHB0cl90b19zdHJ1Y3QpKSBremFsbG9jKHNpemVvZigqcHRyX3RvX3N0cnVjdCksIEdGUF9LRVJORUwpKQogCi0vKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlciB0byBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBwcm9jZXNzZXMgKi8KLWV4dGVybiBpbnQgbWF4X251bV9vZl9wcm9jZXNzZXM7Ci0KLSNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUFJPQ0VTU0VTX0RFRkFVTFQgMzIKICNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUFJPQ0VTU0VTIDUxMgorI2RlZmluZSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MgMTAyNAogCiAvKgotICogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzCi0gKiBwZXIgcHJvY2VzcworICogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzIHBlcgorICogZGV2aWNlCiAgKi8KLWV4dGVybiBpbnQgbWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3M7CitleHRlcm4gaW50IG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2U7CiAKLSNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTX0RFRkFVTFQgMTI4Ci0jZGVmaW5lIEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTUyAxMDI0CisjZGVmaW5lIEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfREVWSUNFX0RFRkFVTFQgNDA5NgorI2RlZmluZSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX0RFVklDRQkJXAorCShLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVMgKgkJCVwKKwkJCUtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTUykKIAogI2RlZmluZSBLRkRfS0VSTkVMX1FVRVVFX1NJWkUgMjA0OAogCkBAIC0xMzUsMjIgKzEzNCwxMCBAQAogCiAJc3RydWN0IGtnZDJrZmRfc2hhcmVkX3Jlc291cmNlcyBzaGFyZWRfcmVzb3VyY2VzOwogCi0Jdm9pZCAqaW50ZXJydXB0X3Jpbmc7Ci0Jc2l6ZV90IGludGVycnVwdF9yaW5nX3NpemU7Ci0JYXRvbWljX3QgaW50ZXJydXB0X3JpbmdfcnB0cjsKLQlhdG9taWNfdCBpbnRlcnJ1cHRfcmluZ193cHRyOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBpbnRlcnJ1cHRfd29yazsKLQlzcGlubG9ja190IGludGVycnVwdF9sb2NrOwotCiAJLyogUUNNIERldmljZSBpbnN0YW5jZSAqLwogCXN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtOwogCiAJYm9vbCBpbml0X2NvbXBsZXRlOwotCS8qCi0JICogSW50ZXJydXB0cyBvZiBpbnRlcmVzdCB0byBLRkQgYXJlIGNvcGllZAotCSAqIGZyb20gdGhlIEhXIHJpbmcgaW50byBhIFNXIHJpbmcuCi0JICovCi0JYm9vbCBpbnRlcnJ1cHRzX2FjdGl2ZTsKIH07CiAKIC8qIEtHRDJLRkQgY2FsbGJhY2tzICovCkBAIC00NjMsNiArNDUwLDI0IEBACiAJYm9vbCBpc18zMmJpdF91c2VyX21vZGU7CiB9OwogCisvKioKKyAqIElvY3RsIGZ1bmN0aW9uIHR5cGUuCisgKgorICogXHBhcmFtIGZpbGVwIHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUuCisgKiBccGFyYW0gcCBhbWRrZmQgcHJvY2VzcyBwb2ludGVyLgorICogXHBhcmFtIGRhdGEgcG9pbnRlciB0byBhcmcgdGhhdCB3YXMgY29waWVkIGZyb20gdXNlci4KKyAqLwordHlwZWRlZiBpbnQgYW1ka2ZkX2lvY3RsX3Qoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCisJCQkJdm9pZCAqZGF0YSk7CisKK3N0cnVjdCBhbWRrZmRfaW9jdGxfZGVzYyB7CisJdW5zaWduZWQgaW50IGNtZDsKKwlpbnQgZmxhZ3M7CisJYW1ka2ZkX2lvY3RsX3QgKmZ1bmM7CisJdW5zaWduZWQgaW50IGNtZF9kcnY7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKIHZvaWQga2ZkX3Byb2Nlc3NfY3JlYXRlX3dxKHZvaWQpOwogdm9pZCBrZmRfcHJvY2Vzc19kZXN0cm95X3dxKHZvaWQpOwogc3RydWN0IGtmZF9wcm9jZXNzICprZmRfY3JlYXRlX3Byb2Nlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICopOwpAQCAtNTEzLDEwICs1MTgsNyBAQAogc3RydWN0IGtmZF9kZXYgKmtmZF90b3BvbG9neV9lbnVtX2tmZF9kZXZpY2VzKHVpbnQ4X3QgaWR4KTsKIAogLyogSW50ZXJydXB0cyAqLwotaW50IGtmZF9pbnRlcnJ1cHRfaW5pdChzdHJ1Y3Qga2ZkX2RldiAqZGV2KTsKLXZvaWQga2ZkX2ludGVycnVwdF9leGl0KHN0cnVjdCBrZmRfZGV2ICpkZXYpOwogdm9pZCBrZ2Qya2ZkX2ludGVycnVwdChzdHJ1Y3Qga2ZkX2RldiAqa2ZkLCBjb25zdCB2b2lkICppaF9yaW5nX2VudHJ5KTsKLWJvb2wgZW5xdWV1ZV9paF9yaW5nX2VudHJ5KHN0cnVjdCBrZmRfZGV2ICprZmQsCWNvbnN0IHZvaWQgKmloX3JpbmdfZW50cnkpOwogCiAvKiBQb3dlciBNYW5hZ2VtZW50ICovCiB2b2lkIGtnZDJrZmRfc3VzcGVuZChzdHJ1Y3Qga2ZkX2RldiAqa2ZkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJvY2Vzcy5jCmluZGV4IGI4NWViMGIuLjNjNzZlZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3MuYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9hbWQtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorCiBzdHJ1Y3QgbW1fc3RydWN0OwogCiAjaW5jbHVkZSAia2ZkX3ByaXYuaCIKQEAgLTI4NSw4ICsyODcsMTUgQEAKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gZXJyX3Byb2Nlc3NfcHFtX2luaXQ7CiAKKwkvKiBpbml0IHByb2Nlc3MgYXBlcnR1cmVzKi8KKwlwcm9jZXNzLT5pc18zMmJpdF91c2VyX21vZGUgPSBpc19jb21wYXRfdGFzaygpOworCWlmIChrZmRfaW5pdF9hcGVydHVyZXMocHJvY2VzcykgIT0gMCkKKwkJZ290byBlcnJfaW5pdF9hcHJldHVyZXM7CisKIAlyZXR1cm4gcHJvY2VzczsKIAorZXJyX2luaXRfYXByZXR1cmVzOgorCXBxbV91bmluaXQoJnByb2Nlc3MtPnBxbSk7CiBlcnJfcHJvY2Vzc19wcW1faW5pdDoKIAloYXNoX2RlbF9yY3UoJnByb2Nlc3MtPmtmZF9wcm9jZXNzZXMpOwogCXN5bmNocm9uaXplX3JjdSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3NfcXVldWVfbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3NfcXVldWVfbWFuYWdlci5jCmluZGV4IDQ3NTI2NzguLmYzN2NmNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzX3F1ZXVlX21hbmFnZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJvY2Vzc19xdWV1ZV9tYW5hZ2VyLmMKQEAgLTU0LDExICs1NCwxMSBAQAogCXByX2RlYnVnKCJrZmQ6IGluICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlmb3VuZCA9IGZpbmRfZmlyc3RfemVyb19iaXQocHFtLT5xdWV1ZV9zbG90X2JpdG1hcCwKLQkJCW1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzKTsKKwkJCUtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTUyk7CiAKIAlwcl9kZWJ1Zygia2ZkOiB0aGUgbmV3IHNsb3QgaWQgJWx1XG4iLCBmb3VuZCk7CiAKLQlpZiAoZm91bmQgPj0gbWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MpIHsKKwlpZiAoZm91bmQgPj0gS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTKSB7CiAJCXByX2luZm8oImFtZGtmZDogQ2FuIG5vdCBvcGVuIG1vcmUgcXVldWVzIGZvciBwcm9jZXNzIHdpdGggcGFzaWQgJWRcbiIsCiAJCQkJcHFtLT5wcm9jZXNzLT5wYXNpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzYsNyArNzYsNyBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnBxbS0+cXVldWVzKTsKIAlwcW0tPnF1ZXVlX3Nsb3RfYml0bWFwID0KLQkJCWt6YWxsb2MoRElWX1JPVU5EX1VQKG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzLAorCQkJa3phbGxvYyhESVZfUk9VTkRfVVAoS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTLAogCQkJCQlCSVRTX1BFUl9CWVRFKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBxbS0+cXVldWVfc2xvdF9iaXRtYXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMDMsNiArMjAzLDcgQEAKIAkJcHFuLT5rcSA9IE5VTEw7CiAJCXJldHZhbCA9IGRldi0+ZHFtLT5jcmVhdGVfcXVldWUoZGV2LT5kcW0sIHEsICZwZGQtPnFwZCwKIAkJCQkJCSZxLT5wcm9wZXJ0aWVzLnZtaWQpOworCQlwcl9kZWJ1ZygiRFFNIHJldHVybmVkICVkIGZvciBjcmVhdGVfcXVldWVcbiIsIHJldHZhbCk7CiAJCXByaW50X3F1ZXVlKHEpOwogCQlicmVhazsKIAljYXNlIEtGRF9RVUVVRV9UWVBFX0RJUToKQEAgLTIyMiw3ICsyMjMsNyBAQAogCX0KIAogCWlmIChyZXR2YWwgIT0gMCkgewotCQlwcl9lcnIoImtmZDogZXJyb3IgZHFtIGNyZWF0ZSBxdWV1ZVxuIik7CisJCXByX2RlYnVnKCJFcnJvciBkcW0gY3JlYXRlIHF1ZXVlXG4iKTsKIAkJZ290byBlcnJfY3JlYXRlX3F1ZXVlOwogCX0KIApAQCAtMjQxLDcgKzI0MiwxMCBAQAogZXJyX2NyZWF0ZV9xdWV1ZToKIAlrZnJlZShwcW4pOwogZXJyX2FsbG9jYXRlX3BxbjoKKwkvKiBjaGVjayBpZiBxdWV1ZXMgbGlzdCBpcyBlbXB0eSB1bnJlZ2lzdGVyIHByb2Nlc3MgZnJvbSBkZXZpY2UgKi8KIAljbGVhcl9iaXQoKnFpZCwgcHFtLT5xdWV1ZV9zbG90X2JpdG1hcCk7CisJaWYgKGxpc3RfZW1wdHkoJnBxbS0+cXVldWVzKSkKKwkJZGV2LT5kcW0tPnVucmVnaXN0ZXJfcHJvY2VzcyhkZXYtPmRxbSwgJnBkZC0+cXBkKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfdG9wb2xvZ3kuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF90b3BvbG9neS5jCmluZGV4IDU3MzNlMjguLmNjYTE3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF90b3BvbG9neS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF90b3BvbG9neS5jCkBAIC03MDAsOCArNzAwLDYgQEAKIAkJCQlkZXYtPm5vZGVfcHJvcHMuc2ltZF9wZXJfY3UpOwogCQlzeXNmc19zaG93XzMyYml0X3Byb3AoYnVmZmVyLCAibWF4X3Nsb3RzX3NjcmF0Y2hfY3UiLAogCQkJCWRldi0+bm9kZV9wcm9wcy5tYXhfc2xvdHNfc2NyYXRjaF9jdSk7Ci0JCXN5c2ZzX3Nob3dfMzJiaXRfcHJvcChidWZmZXIsICJlbmdpbmVfaWQiLAotCQkJCWRldi0+bm9kZV9wcm9wcy5lbmdpbmVfaWQpOwogCQlzeXNmc19zaG93XzMyYml0X3Byb3AoYnVmZmVyLCAidmVuZG9yX2lkIiwKIAkJCQlkZXYtPm5vZGVfcHJvcHMudmVuZG9yX2lkKTsKIAkJc3lzZnNfc2hvd18zMmJpdF9wcm9wKGJ1ZmZlciwgImRldmljZV9pZCIsCkBAIC03MTUsNiArNzEzLDEyIEBACiAJCQkJCQlkZXYtPmdwdS0+a2dkKSk7CiAJCQlzeXNmc19zaG93XzY0Yml0X3Byb3AoYnVmZmVyLCAibG9jYWxfbWVtX3NpemUiLAogCQkJCQlrZmQya2dkLT5nZXRfdm1lbV9zaXplKGRldi0+Z3B1LT5rZ2QpKTsKKworCQkJc3lzZnNfc2hvd18zMmJpdF9wcm9wKGJ1ZmZlciwgImZ3X3ZlcnNpb24iLAorCQkJCQlrZmQya2dkLT5nZXRfZndfdmVyc2lvbigKKwkJCQkJCQlkZXYtPmdwdS0+a2dkLAorCQkJCQkJCUtHRF9FTkdJTkVfTUVDMSkpOworCiAJCX0KIAogCQlyZXQgPSBzeXNmc19zaG93XzMyYml0X3Byb3AoYnVmZmVyLCAibWF4X2VuZ2luZV9jbGtfY2NvbXB1dGUiLApAQCAtOTE3LDcgKzkyMSw3IEBACiAJdWludDMyX3QgaSA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnRvcG9sb2d5X2RldmljZV9saXN0LCBsaXN0KSB7Ci0JCXJldCA9IGtmZF9idWlsZF9zeXNmc19ub2RlX2VudHJ5KGRldiwgMCk7CisJCXJldCA9IGtmZF9idWlsZF9zeXNmc19ub2RlX2VudHJ5KGRldiwgaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAkJaSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9rZmRfaW50ZXJmYWNlLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUva2dkX2tmZF9pbnRlcmZhY2UuaAppbmRleCA5YzcyOWRkLi45NmE1MTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUva2dkX2tmZF9pbnRlcmZhY2UuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUva2dkX2tmZF9pbnRlcmZhY2UuaApAQCAtNDUsNiArNDUsMTcgQEAKIAlLR0RfUE9PTF9GUkFNRUJVRkZFUiA9IDMsCiB9OwogCitlbnVtIGtnZF9lbmdpbmVfdHlwZSB7CisJS0dEX0VOR0lORV9QRlAgPSAxLAorCUtHRF9FTkdJTkVfTUUsCisJS0dEX0VOR0lORV9DRSwKKwlLR0RfRU5HSU5FX01FQzEsCisJS0dEX0VOR0lORV9NRUMyLAorCUtHRF9FTkdJTkVfUkxDLAorCUtHRF9FTkdJTkVfU0RNQSwKKwlLR0RfRU5HSU5FX01BWAorfTsKKwogc3RydWN0IGtnZDJrZmRfc2hhcmVkX3Jlc291cmNlcyB7CiAJLyogQml0IG4gPT0gMSBtZWFucyBWTUlEIG4gaXMgYXZhaWxhYmxlIGZvciBLRkQuICovCiAJdW5zaWduZWQgaW50IGNvbXB1dGVfdm1pZF9iaXRtYXA7CkBAIC0xMzcsNiArMTQ4LDggQEAKICAqCiAgKiBAaHFkX2Rlc3Ryb3k6IERlc3RydWN0cyBhbmQgcHJlZW1wdHMgdGhlIHF1ZXVlIGFzc2lnbmVkIHRvIHRoYXQgaHFkIHNsb3QuCiAgKgorICogQGdldF9md192ZXJzaW9uOiBSZXR1cm5zIEZXIHZlcnNpb25zIGZyb20gdGhlIGhlYWRlcgorICoKICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHNlcnZpY2VzIHRoYXQgdGhlIGtnZCBkcml2ZXIKICAqIHByb3ZpZGVzIHRvIGFtZGtmZCBkcml2ZXIuCiAgKgpAQCAtMTcwLDEyICsxODMsMTQgQEAKIAlpbnQgKCpocWRfbG9hZCkoc3RydWN0IGtnZF9kZXYgKmtnZCwgdm9pZCAqbXFkLCB1aW50MzJfdCBwaXBlX2lkLAogCQkJdWludDMyX3QgcXVldWVfaWQsIHVpbnQzMl90IF9fdXNlciAqd3B0cik7CiAKLQlib29sICgqaHFkX2lzX29jY3VwaWVzKShzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50NjRfdCBxdWV1ZV9hZGRyZXNzLAorCWJvb2wgKCpocWRfaXNfb2NjdXBpZWQpKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVpbnQ2NF90IHF1ZXVlX2FkZHJlc3MsCiAJCQkJdWludDMyX3QgcGlwZV9pZCwgdWludDMyX3QgcXVldWVfaWQpOwogCiAJaW50ICgqaHFkX2Rlc3Ryb3kpKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVpbnQzMl90IHJlc2V0X3R5cGUsCiAJCQkJdW5zaWduZWQgaW50IHRpbWVvdXQsIHVpbnQzMl90IHBpcGVfaWQsCiAJCQkJdWludDMyX3QgcXVldWVfaWQpOworCXVpbnQxNl90ICgqZ2V0X2Z3X3ZlcnNpb24pKHN0cnVjdCBrZ2RfZGV2ICprZ2QsCisJCQkJZW51bSBrZ2RfZW5naW5lX3R5cGUgdHlwZSk7CiB9OwogCiBib29sIGtnZDJrZmRfaW5pdCh1bnNpZ25lZCBpbnRlcmZhY2VfdmVyc2lvbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKaW5kZXggNGE3OGE3Ny4uYmJkYmU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CiAKIAlpZiAocGxhbmUtPnN0YXRlLT5jcnRjKSB7Ci0JCWNydGNfc3RhdGUgPSBzdGF0ZS0+Y3J0Y19zdGF0ZXNbZHJtX2NydGNfaW5kZXgocGxhbmUtPmNydGMpXTsKKwkJY3J0Y19zdGF0ZSA9IHN0YXRlLT5jcnRjX3N0YXRlc1tkcm1fY3J0Y19pbmRleChwbGFuZS0+c3RhdGUtPmNydGMpXTsKIAogCQlpZiAoV0FSTl9PTighY3J0Y19zdGF0ZSkpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCA1MmNlMjZkLi5kYzM4NmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTE0NSw2ICsxNDUsMzEgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9hZGRfb25lX2Nvbm5lY3Rvcik7CiAKK3N0YXRpYyB2b2lkIHJlbW92ZV9mcm9tX21vZGVzZXQoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0LAorCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IHNldC0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgeworCQlpZiAoc2V0LT5jb25uZWN0b3JzW2ldID09IGNvbm5lY3RvcikKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IHNldC0+bnVtX2Nvbm5lY3RvcnMpCisJCXJldHVybjsKKworCWZvciAoaiA9IGkgKyAxOyBqIDwgc2V0LT5udW1fY29ubmVjdG9yczsgaisrKSB7CisJCXNldC0+Y29ubmVjdG9yc1tqIC0gMV0gPSBzZXQtPmNvbm5lY3RvcnNbal07CisJfQorCXNldC0+bnVtX2Nvbm5lY3RvcnMtLTsKKworCS8qIGJlY2F1c2UgaTkxNSBpcyBwaXNzeSBhYm91dCB0aGlzLi4KKwkgKiBUT0RPIG1heWJlIG5lZWQgdG8gbWFrZXMgc3VyZSB3ZSBzZXQgaXQgYmFjayB0byAhPU5VTEwgc29tZXdoZXJlPworCSAqLworCWlmIChzZXQtPm51bV9jb25uZWN0b3JzID09IDApCisJCXNldC0+ZmIgPSBOVUxMOworfQorCiBpbnQgZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewpAQCAtMTY3LDYgKzE5MiwxMSBAQAogCX0KIAlmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudC0tOwogCWtmcmVlKGZiX2hlbHBlcl9jb25uZWN0b3IpOworCisJLyogYWxzbyBjbGVhbnVwIGRhbmdsaW5nIHJlZmVyZW5jZXMgdG8gdGhlIGNvbm5lY3RvcjogKi8KKwlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspCisJCXJlbW92ZV9mcm9tX21vZGVzZXQoJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0LCBjb25uZWN0b3IpOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcmVtb3ZlX29uZV9jb25uZWN0b3IpOwpAQCAtNzQxLDcgKzc3MSw5IEBACiAJaW50IGksIGosIHJjID0gMDsKIAlpbnQgc3RhcnQ7CiAKLQlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYpOworCWlmIChfX2RybV9tb2Rlc2V0X2xvY2tfYWxsKGRldiwgISFvb3BzX2luX3Byb2dyZXNzKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KIAlpZiAoIWRybV9mYl9oZWxwZXJfaXNfYm91bmQoZmJfaGVscGVyKSkgewogCQlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRldik7CiAJCXJldHVybiAtRUJVU1k7CkBAIC05MTUsNyArOTQ3LDkgQEAKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKIAotCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7CisJaWYgKF9fZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2LCAhIW9vcHNfaW5fcHJvZ3Jlc3MpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQogCWlmICghZHJtX2ZiX2hlbHBlcl9pc19ib3VuZChmYl9oZWxwZXIpKSB7CiAJCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2KTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCmluZGV4IGY1YTVmMTguLjRkNzlkYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwpAQCAtODMwLDYgKzgzMCw4IEBACiAgKiB2YmxhbmsgZXZlbnRzIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgaW5jbHVkaW5nIGxvc3QgZXZlbnRzIGR1ZSB0bwogICogbW9kZXNldHRpbmcgYWN0aXZpdHkuCiAgKgorICogVGhpcyBpcyB0aGUgbGVnYWN5IHZlcnNpb24gb2YgZHJtX2NydGNfdmJsYW5rX2NvdW50KCkuCisgKgogICogUmV0dXJuczoKICAqIFRoZSBzb2Z0d2FyZSB2YmxhbmsgY291bnRlci4KICAqLwpAQCAtODQ0LDYgKzg0NiwyNSBAQAogRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX2NvdW50KTsKIAogLyoqCisgKiBkcm1fY3J0Y192YmxhbmtfY291bnQgLSByZXRyaWV2ZSAiY29va2VkIiB2YmxhbmsgY291bnRlciB2YWx1ZQorICogQGNydGM6IHdoaWNoIGNvdW50ZXIgdG8gcmV0cmlldmUKKyAqCisgKiBGZXRjaGVzIHRoZSAiY29va2VkIiB2YmxhbmsgY291bnQgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YKKyAqIHZibGFuayBldmVudHMgc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCBpbmNsdWRpbmcgbG9zdCBldmVudHMgZHVlIHRvCisgKiBtb2Rlc2V0dGluZyBhY3Rpdml0eS4KKyAqCisgKiBUaGlzIGlzIHRoZSBuYXRpdmUgS01TIHZlcnNpb24gb2YgZHJtX3ZibGFua19jb3VudCgpLgorICoKKyAqIFJldHVybnM6CisgKiBUaGUgc29mdHdhcmUgdmJsYW5rIGNvdW50ZXIuCisgKi8KK3UzMiBkcm1fY3J0Y192YmxhbmtfY291bnQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXJldHVybiBkcm1fdmJsYW5rX2NvdW50KGNydGMtPmRldiwgZHJtX2NydGNfaW5kZXgoY3J0YykpOworfQorRVhQT1JUX1NZTUJPTChkcm1fY3J0Y192YmxhbmtfY291bnQpOworCisvKioKICAqIGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUgLSByZXRyaWV2ZSAiY29va2VkIiB2YmxhbmsgY291bnRlciB2YWx1ZQogICogYW5kIHRoZSBzeXN0ZW0gdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCB2YmxhbmsgY291bnRlciB2YWx1ZS4KICAqCkBAIC05MDQsNiArOTI1LDggQEAKICAqCiAgKiBVcGRhdGVzIHNlcXVlbmNlICMgYW5kIHRpbWVzdGFtcCBvbiBldmVudCwgYW5kIHNlbmRzIGl0IHRvIHVzZXJzcGFjZS4KICAqIENhbGxlciBtdXN0IGhvbGQgZXZlbnQgbG9jay4KKyAqCisgKiBUaGlzIGlzIHRoZSBsZWdhY3kgdmVyc2lvbiBvZiBkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudCgpLgogICovCiB2b2lkIGRybV9zZW5kX3ZibGFua19ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKIAkJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSkKQEAgLTkyMyw2ICs5NDYsMjMgQEAKIEVYUE9SVF9TWU1CT0woZHJtX3NlbmRfdmJsYW5rX2V2ZW50KTsKIAogLyoqCisgKiBkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudCAtIGhlbHBlciB0byBzZW5kIHZibGFuayBldmVudCBhZnRlciBwYWdlZmxpcAorICogQGNydGM6IHRoZSBzb3VyY2UgQ1JUQyBvZiB0aGUgdmJsYW5rIGV2ZW50CisgKiBAZTogdGhlIGV2ZW50IHRvIHNlbmQKKyAqCisgKiBVcGRhdGVzIHNlcXVlbmNlICMgYW5kIHRpbWVzdGFtcCBvbiBldmVudCwgYW5kIHNlbmRzIGl0IHRvIHVzZXJzcGFjZS4KKyAqIENhbGxlciBtdXN0IGhvbGQgZXZlbnQgbG9jay4KKyAqCisgKiBUaGlzIGlzIHRoZSBuYXRpdmUgS01TIHZlcnNpb24gb2YgZHJtX3NlbmRfdmJsYW5rX2V2ZW50KCkuCisgKi8KK3ZvaWQgZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUpCit7CisJZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMtPmRldiwgZHJtX2NydGNfaW5kZXgoY3J0YyksIGUpOworfQorRVhQT1JUX1NZTUJPTChkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudCk7CisKKy8qKgogICogZHJtX3ZibGFua19lbmFibGUgLSBlbmFibGUgdGhlIHZibGFuayBpbnRlcnJ1cHQgb24gYSBDUlRDCiAgKiBAZGV2OiBEUk0gZGV2aWNlCiAgKiBAY3J0YzogQ1JUQyBpbiBxdWVzdGlvbgpAQCAtMTU5NCw2ICsxNjM0LDggQEAKICAqCiAgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHRoaXMgcm91dGluZSBpbiB0aGVpciB2YmxhbmsgaW50ZXJydXB0IGhhbmRsZXJzIHRvCiAgKiB1cGRhdGUgdGhlIHZibGFuayBjb3VudGVyIGFuZCBzZW5kIGFueSBzaWduYWxzIHRoYXQgbWF5IGJlIHBlbmRpbmcuCisgKgorICogVGhpcyBpcyB0aGUgbGVnYWN5IHZlcnNpb24gb2YgZHJtX2NydGNfaGFuZGxlX3ZibGFuaygpLgogICovCiBib29sIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewpAQCAtMTY3MCwzICsxNzEyLDIxIEBACiAJcmV0dXJuIHRydWU7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9oYW5kbGVfdmJsYW5rKTsKKworLyoqCisgKiBkcm1fY3J0Y19oYW5kbGVfdmJsYW5rIC0gaGFuZGxlIGEgdmJsYW5rIGV2ZW50CisgKiBAY3J0Yzogd2hlcmUgdGhpcyBldmVudCBvY2N1cnJlZAorICoKKyAqIERyaXZlcnMgc2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIGluIHRoZWlyIHZibGFuayBpbnRlcnJ1cHQgaGFuZGxlcnMgdG8KKyAqIHVwZGF0ZSB0aGUgdmJsYW5rIGNvdW50ZXIgYW5kIHNlbmQgYW55IHNpZ25hbHMgdGhhdCBtYXkgYmUgcGVuZGluZy4KKyAqCisgKiBUaGlzIGlzIHRoZSBuYXRpdmUgS01TIHZlcnNpb24gb2YgZHJtX2hhbmRsZV92YmxhbmsoKS4KKyAqCisgKiBSZXR1cm5zOgorICogVHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIHN1Y2Nlc3NmdWxseSBoYW5kbGVkLCBmYWxzZSBvbiBmYWlsdXJlLgorICovCitib29sIGRybV9jcnRjX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXJldHVybiBkcm1faGFuZGxlX3ZibGFuayhjcnRjLT5kZXYsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2NydGNfaGFuZGxlX3ZibGFuayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKaW5kZXggMTIxNDcwYS4uMWJjYmUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuYwpAQCAtNjQ1LDE4ICs2NDUsNiBAQAogCWlmICghaXNfZXh5bm9zKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qCi0JICogUmVnaXN0ZXIgZGV2aWNlIG9iamVjdCBvbmx5IGluIGNhc2Ugb2YgRXh5bm9zIFNvQy4KLQkgKgotCSAqIEJlbG93IGNvZGVzIHJlc29sdmVzIHRlbXBvcmFyaWx5IGluZmluaXRlIGxvb3AgaXNzdWUgaW5jdXJyZWQKLQkgKiBieSBFeHlub3MgZHJtIGRyaXZlciB3aGVuIHVzaW5nIG11bHRpLXBsYXRmb3JtIGtlcm5lbC4KLQkgKiBTbyB0aGVzZSBjb2RlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbW9yZSBnZW5lcmljIHdheSBsYXRlci4KLQkgKi8KLQlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3MzIikgJiYKLQkJCSFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInNhbXN1bmcsZXh5bm9zNCIpICYmCi0JCQkhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczUiKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlleHlub3NfZHJtX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJleHlub3MtZHJtIiwgLTEsCiAJCQkJCQkJCU5VTEwsIDApOwogCWlmIChJU19FUlIoZXh5bm9zX2RybV9wZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2hkbWkuYwppbmRleCA1NzY1YTE2Li45ODA1MWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfaGRtaS5jCkBAIC0xNjY5LDcgKzE2NjksNiBAQAogCiBzdGF0aWMgdm9pZCBoZG1pcGh5X2NvbmZfcmVzZXQoc3RydWN0IGhkbWlfY29udGV4dCAqaGRhdGEpCiB7Ci0JdTggYnVmZmVyWzJdOwogCXUzMiByZWc7CiAKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRhdGEtPnJlcy5zY2xrX2hkbWkpOwpAQCAtMTY3NywxMSArMTY3Niw4IEBACiAJY2xrX3ByZXBhcmVfZW5hYmxlKGhkYXRhLT5yZXMuc2Nsa19oZG1pKTsKIAogCS8qIG9wZXJhdGlvbiBtb2RlICovCi0JYnVmZmVyWzBdID0gMHgxZjsKLQlidWZmZXJbMV0gPSAweDAwOwotCi0JaWYgKGhkYXRhLT5oZG1pcGh5X3BvcnQpCi0JCWkyY19tYXN0ZXJfc2VuZChoZGF0YS0+aGRtaXBoeV9wb3J0LCBidWZmZXIsIDIpOworCWhkbWlwaHlfcmVnX3dyaXRlYihoZGF0YSwgSERNSVBIWV9NT0RFX1NFVF9ET05FLAorCQkJCUhETUlfUEhZX0VOQUJMRV9NT0RFX1NFVCk7CiAKIAlpZiAoaGRhdGEtPnR5cGUgPT0gSERNSV9UWVBFMTMpCiAJCXJlZyA9IEhETUlfVjEzX1BIWV9SU1RPVVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19taXhlci5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfbWl4ZXIuYwppbmRleCA4MjBiNzYyLi4wNjRlZDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19taXhlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX21peGVyLmMKQEAgLTEwMjYsNiArMTAyNiw3IEBACiBzdGF0aWMgdm9pZCBtaXhlcl93YWl0X2Zvcl92Ymxhbmsoc3RydWN0IGV4eW5vc19kcm1fbWFuYWdlciAqbWdyKQogewogCXN0cnVjdCBtaXhlcl9jb250ZXh0ICptaXhlcl9jdHggPSBtZ3JfdG9fbWl4ZXIobWdyKTsKKwlpbnQgZXJyOwogCiAJbXV0ZXhfbG9jaygmbWl4ZXJfY3R4LT5taXhlcl9tdXRleCk7CiAJaWYgKCFtaXhlcl9jdHgtPnBvd2VyZWQpIHsKQEAgLTEwMzQsNyArMTAzNSwxMSBAQAogCX0KIAltdXRleF91bmxvY2soJm1peGVyX2N0eC0+bWl4ZXJfbXV0ZXgpOwogCi0JZHJtX3ZibGFua19nZXQobWdyLT5jcnRjLT5kZXYsIG1peGVyX2N0eC0+cGlwZSk7CisJZXJyID0gZHJtX3ZibGFua19nZXQobWdyLT5jcnRjLT5kZXYsIG1peGVyX2N0eC0+cGlwZSk7CisJaWYgKGVyciA8IDApIHsKKwkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIGFjcXVpcmUgdmJsYW5rIGNvdW50ZXJcbiIpOworCQlyZXR1cm47CisJfQogCiAJYXRvbWljX3NldCgmbWl4ZXJfY3R4LT53YWl0X3ZzeW5jX2V2ZW50LCAxKTsKIApAQCAtMTI2Miw4ICsxMjY3LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNzIsOCArMTI3NSw2IEBACiAJc3RydWN0IG1peGVyX2NvbnRleHQgKmN0eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJbWl4ZXJfbWdyX3JlbW92ZSgmY3R4LT5tYW5hZ2VyKTsKLQotCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbWl4ZXJfY29tcG9uZW50X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvdGRhOTk4eF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvdGRhOTk4eF9kcnYuYwppbmRleCBkNDc2Mjc5Li5hOTA0MWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTJjL3RkYTk5OHhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2kyYy90ZGE5OTh4X2Rydi5jCkBAIC0zMiw2ICszMiw4IEBACiBzdHJ1Y3QgdGRhOTk4eF9wcml2IHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2VjOwogCXN0cnVjdCBpMmNfY2xpZW50ICpoZG1pOworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrOwogCXVpbnQxNl90IHJldjsKIAl1aW50OF90IGN1cnJlbnRfcGFnZTsKIAlpbnQgZHBtczsKQEAgLTQwMiw5ICs0MDQsMTAgQEAKIAl1aW50OF90IGFkZHIgPSBSRUcyQUREUihyZWcpOwogCWludCByZXQ7CiAKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0ID0gc2V0X3BhZ2UocHJpdiwgcmVnKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAlpZiAocmV0IDwgMCkKQEAgLTQxNCwxMCArNDE3LDEyIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZmFpbDsKIAotCXJldHVybiByZXQ7CisJZ290byBvdXQ7CiAKIGZhaWw6CiAJZGV2X2VycigmY2xpZW50LT5kZXYsICJFcnJvciAlZCByZWFkaW5nIGZyb20gMHgleFxuIiwgcmV0LCByZWcpOworb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQzMSwxMyArNDM2LDE2IEBACiAJYnVmWzBdID0gUkVHMkFERFIocmVnKTsKIAltZW1jcHkoJmJ1ZlsxXSwgcCwgY250KTsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlyZXQgPSBzZXRfcGFnZShwcml2LCByZWcpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBjbnQgKyAxKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJFcnJvciAlZCB3cml0aW5nIHRvIDB4JXhcbiIsIHJldCwgcmVnKTsKK291dDoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIGludApAQCAtNDU5LDEzICs0NjcsMTYgQEAKIAl1aW50OF90IGJ1ZltdID0ge1JFRzJBRERSKHJlZyksIHZhbH07CiAJaW50IHJldDsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlyZXQgPSBzZXRfcGFnZShwcml2LCByZWcpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBzaXplb2YoYnVmKSk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRXJyb3IgJWQgd3JpdGluZyB0byAweCV4XG4iLCByZXQsIHJlZyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00NzUsMTMgKzQ4NiwxNiBAQAogCXVpbnQ4X3QgYnVmW10gPSB7UkVHMkFERFIocmVnKSwgdmFsID4+IDgsIHZhbH07CiAJaW50IHJldDsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlyZXQgPSBzZXRfcGFnZShwcml2LCByZWcpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBzaXplb2YoYnVmKSk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRXJyb3IgJWQgd3JpdGluZyB0byAweCV4XG4iLCByZXQsIHJlZyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01MzYsNiArNTUwLDE3IEBACiAJcmVnX3dyaXRlKHByaXYsIFJFR19NVVhfVlBfVklQX09VVCwgMHgyNCk7CiB9CiAKKy8qIGhhbmRsZSBIRE1JIGNvbm5lY3QvZGlzY29ubmVjdCAqLworc3RhdGljIHZvaWQgdGRhOTk4eF9ocGQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOworCXN0cnVjdCB0ZGE5OTh4X3ByaXYgKnByaXYgPQorCQkJY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3QgdGRhOTk4eF9wcml2LCBkd29yayk7CisKKwlpZiAocHJpdi0+ZW5jb2RlciAmJiBwcml2LT5lbmNvZGVyLT5kZXYpCisJCWRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQocHJpdi0+ZW5jb2Rlci0+ZGV2KTsKK30KKwogLyoKICAqIG9ubHkgMiBpbnRlcnJ1cHRzIG1heSBvY2N1cjogc2NyZWVuIHBsdWcvdW5wbHVnIGFuZCBFRElEIHJlYWQKICAqLwpAQCAtNTU5LDggKzU4NCw3IEBACiAJCXByaXYtPndxX2VkaWRfd2FpdCA9IDA7CiAJCXdha2VfdXAoJnByaXYtPndxX2VkaWQpOwogCX0gZWxzZSBpZiAoY2VjICE9IDApIHsJCQkvKiBIUEQgY2hhbmdlICovCi0JCWlmIChwcml2LT5lbmNvZGVyICYmIHByaXYtPmVuY29kZXItPmRldikKLQkJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChwcml2LT5lbmNvZGVyLT5kZXYpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrLCBIWi8xMCk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTExNzAsOCArMTE5NCwxMCBAQAogCS8qIGRpc2FibGUgYWxsIElSUXMgYW5kIGZyZWUgdGhlIElSUSBoYW5kbGVyICovCiAJY2VjX3dyaXRlKHByaXYsIFJFR19DRUNfUlhTSFBESU5URU5BLCAwKTsKIAlyZWdfY2xlYXIocHJpdiwgUkVHX0lOVF9GTEFHU18yLCBJTlRfRkxBR1NfMl9FRElEX0JMS19SRCk7Ci0JaWYgKHByaXYtPmhkbWktPmlycSkKKwlpZiAocHJpdi0+aGRtaS0+aXJxKSB7CiAJCWZyZWVfaXJxKHByaXYtPmhkbWktPmlycSwgcHJpdik7CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+ZHdvcmspOworCX0KIAogCWkyY191bnJlZ2lzdGVyX2RldmljZShwcml2LT5jZWMpOwogfQpAQCAtMTI1NSw2ICsxMjgxLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKIAl1MzIgdmlkZW87CiAJaW50IHJldl9sbywgcmV2X2hpLCByZXQ7CisJdW5zaWduZWQgc2hvcnQgY2VjX2FkZHI7CiAKIAlwcml2LT52aXBfY250cmxfMCA9IFZJUF9DTlRSTF8wX1NXQVBfQSgyKSB8IFZJUF9DTlRSTF8wX1NXQVBfQigzKTsKIAlwcml2LT52aXBfY250cmxfMSA9IFZJUF9DTlRSTF8xX1NXQVBfQygwKSB8IFZJUF9DTlRSTF8xX1NXQVBfRCgxKTsKQEAgLTEyNjIsMTIgKzEyODksMTYgQEAKIAogCXByaXYtPmN1cnJlbnRfcGFnZSA9IDB4ZmY7CiAJcHJpdi0+aGRtaSA9IGNsaWVudDsKLQlwcml2LT5jZWMgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwgMHgzNCk7CisJLyogQ0VDIEkyQyBhZGRyZXNzIGJvdW5kIHRvIFREQTk5OHggSTJDIGFkZHIgYnkgY29uZmlndXJhdGlvbiBwaW5zICovCisJY2VjX2FkZHIgPSAweDM0ICsgKGNsaWVudC0+YWRkciAmIDB4MDMpOworCXByaXYtPmNlYyA9IGkyY19uZXdfZHVtbXkoY2xpZW50LT5hZGFwdGVyLCBjZWNfYWRkcik7CiAJaWYgKCFwcml2LT5jZWMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcHJpdi0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT0ZGOwogCisJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOwkvKiBwcm90ZWN0IHRoZSBwYWdlIGFjY2VzcyAqLworCiAJLyogd2FrZSB1cCB0aGUgZGV2aWNlOiAqLwogCWNlY193cml0ZShwcml2LCBSRUdfQ0VDX0VOQU1PRFMsCiAJCQlDRUNfRU5BTU9EU19FTl9SWFNFTlMgfCBDRUNfRU5BTU9EU19FTl9IRE1JKTsKQEAgLTEzMjMsOCArMTM1NCw5IEBACiAJaWYgKGNsaWVudC0+aXJxKSB7CiAJCWludCBpcnFmX3RyaWdnZXI7CiAKLQkJLyogaW5pdCByZWFkIEVESUQgd2FpdHF1ZXVlICovCisJCS8qIGluaXQgcmVhZCBFRElEIHdhaXRxdWV1ZSBhbmQgSERQIHdvcmsgKi8KIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d3FfZWRpZCk7CisJCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kd29yaywgdGRhOTk4eF9ocGQpOwogCiAJCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLwogCQlyZWdfcmVhZChwcml2LCBSRUdfSU5UX0ZMQUdTXzApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggZjk5MGFiNGMuLjc2NDMzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtNDYyLDE5ICs0NjIsMTMgQEAKIAkJCX0gZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX0xQVF9ERVZJQ0VfSURfVFlQRSkgewogCQkJCWRldl9wcml2LT5wY2hfdHlwZSA9IFBDSF9MUFQ7CiAJCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgTHlueFBvaW50IFBDSFxuIik7Ci0JCQkJV0FSTl9PTighSVNfSEFTV0VMTChkZXYpKTsKLQkJCQlXQVJOX09OKElTX0hTV19VTFQoZGV2KSk7Ci0JCQl9IGVsc2UgaWYgKElTX0JST0FEV0VMTChkZXYpKSB7Ci0JCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX0xQVDsKLQkJCQlkZXZfcHJpdi0+cGNoX2lkID0KLQkJCQkJSU5URUxfUENIX0xQVF9MUF9ERVZJQ0VfSURfVFlQRTsKLQkJCQlEUk1fREVCVUdfS01TKCJUaGlzIGlzIEJyb2Fkd2VsbCwgYXNzdW1pbmcgIgotCQkJCQkgICAgICAiTHlueFBvaW50IExQIFBDSFxuIik7CisJCQkJV0FSTl9PTighSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSk7CisJCQkJV0FSTl9PTihJU19IU1dfVUxUKGRldikgfHwgSVNfQkRXX1VMVChkZXYpKTsKIAkJCX0gZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX0xQVF9MUF9ERVZJQ0VfSURfVFlQRSkgewogCQkJCWRldl9wcml2LT5wY2hfdHlwZSA9IFBDSF9MUFQ7CiAJCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgTHlueFBvaW50IExQIFBDSFxuIik7Ci0JCQkJV0FSTl9PTighSVNfSEFTV0VMTChkZXYpKTsKLQkJCQlXQVJOX09OKCFJU19IU1dfVUxUKGRldikpOworCQkJCVdBUk5fT04oIUlTX0hBU1dFTEwoZGV2KSAmJiAhSVNfQlJPQURXRUxMKGRldikpOworCQkJCVdBUk5fT04oIUlTX0hTV19VTFQoZGV2KSAmJiAhSVNfQkRXX1VMVChkZXYpKTsKIAkJCX0gZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX1NQVF9ERVZJQ0VfSURfVFlQRSkgewogCQkJCWRldl9wcml2LT5wY2hfdHlwZSA9IFBDSF9TUFQ7CiAJCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgU3VucmlzZVBvaW50IFBDSFxuIik7CkBAIC04MTEsNiArODA1LDggQEAKIAlpZiAoIWk5MTUucmVzZXQpCiAJCXJldHVybiAwOwogCisJaW50ZWxfcmVzZXRfZ3RfcG93ZXJzYXZlKGRldik7CisKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpOTE1X2dlbV9yZXNldChkZXYpOwpAQCAtODgwLDcgKzg3Niw3IEBACiAJCSAqIG9mIHJlLWluaXQgYWZ0ZXIgcmVzZXQuCiAJCSAqLwogCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPiA1KQotCQkJaW50ZWxfcmVzZXRfZ3RfcG93ZXJzYXZlKGRldik7CisJCQlpbnRlbF9lbmFibGVfZ3RfcG93ZXJzYXZlKGRldik7CiAJfSBlbHNlIHsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJfQpAQCAtMTU4NCw3ICsxNTgwLDcgQEAKIAkuZ2VtX3ByaW1lX2ltcG9ydCA9IGk5MTVfZ2VtX3ByaW1lX2ltcG9ydCwKIAogCS5kdW1iX2NyZWF0ZSA9IGk5MTVfZ2VtX2R1bWJfY3JlYXRlLAotCS5kdW1iX21hcF9vZmZzZXQgPSBpOTE1X2dlbV9kdW1iX21hcF9vZmZzZXQsCisJLmR1bWJfbWFwX29mZnNldCA9IGk5MTVfZ2VtX21tYXBfZ3R0LAogCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKIAkuaW9jdGxzID0gaTkxNV9pb2N0bHMsCiAJLmZvcHMgPSAmaTkxNV9kcml2ZXJfZm9wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDYzYmNkYTUuLjlkN2E3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTc1Niw4ICsxNzU2LDYgQEAKIAkgKi8KIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHBfd3E7CiAKLQl1aW50MzJfdCBiaW9zX3ZnYWNudHI7Ci0KIAkvKiBBYnN0cmFjdCB0aGUgc3VibWlzc2lvbiBtZWNoYW5pc20gKGxlZ2FjeSByaW5nYnVmZmVyIG9yIGV4ZWNsaXN0cykgYXdheSAqLwogCXN0cnVjdCB7CiAJCWludCAoKmRvX2V4ZWNidWYpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKQEAgLTIxNjEsOCArMjE1OSw3IEBACiAjZGVmaW5lIElTX0hTV19FQVJMWV9TRFYoZGV2KQkoSVNfSEFTV0VMTChkZXYpICYmIFwKIAkJCQkgKElOVEVMX0RFVklEKGRldikgJiAweEZGMDApID09IDB4MEMwMCkKICNkZWZpbmUgSVNfQkRXX1VMVChkZXYpCQkoSVNfQlJPQURXRUxMKGRldikgJiYgXAotCQkJCSAoKElOVEVMX0RFVklEKGRldikgJiAweGYpID09IDB4MiAgfHwgXAotCQkJCSAoSU5URUxfREVWSUQoZGV2KSAmIDB4ZikgPT0gMHg2IHx8IFwKKwkJCQkgKChJTlRFTF9ERVZJRChkZXYpICYgMHhmKSA9PSAweDYgfHwJXAogCQkJCSAoSU5URUxfREVWSUQoZGV2KSAmIDB4ZikgPT0gMHhlKSkKICNkZWZpbmUgSVNfQkRXX0dUMyhkZXYpCQkoSVNfQlJPQURXRUxMKGRldikgJiYgXAogCQkJCSAoSU5URUxfREVWSUQoZGV2KSAmIDB4MDBGMCkgPT0gMHgwMDIwKQpAQCAtMjUwMSw5ICsyNDk4LDggQEAKIGludCBpOTE1X2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCSBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7Ci1pbnQgaTkxNV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUsCi0JCQkgICAgIHVpbnQ2NF90ICpvZmZzZXQpOworaW50IGk5MTVfZ2VtX21tYXBfZ3R0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZzZXQpOwogLyoqCiAgKiBSZXR1cm5zIHRydWUgaWYgc2VxMSBpcyBsYXRlciB0aGFuIHNlcTIuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDRhOWZhZWE2Li41ZjYxNDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTQwMSw3ICs0MDEsNiBAQAogaTkxNV9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKIAkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJdWludDY0X3Qgc2l6ZSwKLQkJYm9vbCBkdW1iLAogCQl1aW50MzJfdCAqaGFuZGxlX3ApCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKQEAgLTQxNyw3ICs0MTYsNiBAQAogCWlmIChvYmogPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvYmotPmJhc2UuZHVtYiA9IGR1bWI7CiAJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGUsICZvYmotPmJhc2UsICZoYW5kbGUpOwogCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93ICovCiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm9iai0+YmFzZSk7CkBAIC00MzcsNyArNDM1LDcgQEAKIAlhcmdzLT5waXRjaCA9IEFMSUdOKGFyZ3MtPndpZHRoICogRElWX1JPVU5EX1VQKGFyZ3MtPmJwcCwgOCksIDY0KTsKIAlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CiAJcmV0dXJuIGk5MTVfZ2VtX2NyZWF0ZShmaWxlLCBkZXYsCi0JCQkgICAgICAgYXJncy0+c2l6ZSwgdHJ1ZSwgJmFyZ3MtPmhhbmRsZSk7CisJCQkgICAgICAgYXJncy0+c2l6ZSwgJmFyZ3MtPmhhbmRsZSk7CiB9CiAKIC8qKgpAQCAtNDUwLDcgKzQ0OCw3IEBACiAJc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgKmFyZ3MgPSBkYXRhOwogCiAJcmV0dXJuIGk5MTVfZ2VtX2NyZWF0ZShmaWxlLCBkZXYsCi0JCQkgICAgICAgYXJncy0+c2l6ZSwgZmFsc2UsICZhcmdzLT5oYW5kbGUpOworCQkJICAgICAgIGFyZ3MtPnNpemUsICZhcmdzLT5oYW5kbGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTA1MCw2ICsxMDQ4LDcgQEAKIGk5MTVfZ2VtX3B3cml0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncyA9IGRhdGE7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlpbnQgcmV0OwpAQCAtMTA2OSw5ICsxMDY4LDExIEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKKwlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7CisKIAlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gcHV0X3JwbTsKIAogCW9iaiA9IHRvX2ludGVsX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGFyZ3MtPmhhbmRsZSkpOwogCWlmICgmb2JqLT5iYXNlID09IE5VTEwpIHsKQEAgLTExMjMsNiArMTEyNCw5IEBACiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CitwdXRfcnBtOgorCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE4NDAsMTAgKzE4NDQsMTAgQEAKIAlkcm1fZ2VtX2ZyZWVfbW1hcF9vZmZzZXQoJm9iai0+YmFzZSk7CiB9CiAKLXN0YXRpYyBpbnQKK2ludAogaTkxNV9nZW1fbW1hcF9ndHQoc3RydWN0IGRybV9maWxlICpmaWxlLAogCQkgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgdWludDMyX3QgaGFuZGxlLCBib29sIGR1bWIsCisJCSAgdWludDMyX3QgaGFuZGxlLAogCQkgIHVpbnQ2NF90ICpvZmZzZXQpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTE4NjAsMTMgKzE4NjQsNiBAQAogCQlnb3RvIHVubG9jazsKIAl9CiAKLQkvKgotCSAqIFdlIGRvbid0IGFsbG93IGR1bWIgbW1hcHMgb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGFub3RoZXIKLQkgKiBpbnRlcmZhY2UuCi0JICovCi0JV0FSTl9PTkNFKGR1bWIgJiYgIShvYmotPmJhc2UuZHVtYiB8fCBvYmotPmJhc2UuaW1wb3J0X2F0dGFjaCksCi0JCSAgIklsbGVnYWwgZHVtYiBtYXAgb2YgYWNjZWxlcmF0ZWQgYnVmZmVyLlxuIik7Ci0KIAlpZiAob2JqLT5iYXNlLnNpemUgPiBkZXZfcHJpdi0+Z3R0Lm1hcHBhYmxlX2VuZCkgewogCQlyZXQgPSAtRTJCSUc7CiAJCWdvdG8gb3V0OwpAQCAtMTg5MSwxNSArMTg4OCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50Ci1pOTE1X2dlbV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlLAotCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgdWludDMyX3QgaGFuZGxlLAotCQkJIHVpbnQ2NF90ICpvZmZzZXQpCi17Ci0JcmV0dXJuIGk5MTVfZ2VtX21tYXBfZ3R0KGZpbGUsIGRldiwgaGFuZGxlLCB0cnVlLCBvZmZzZXQpOwotfQotCiAvKioKICAqIGk5MTVfZ2VtX21tYXBfZ3R0X2lvY3RsIC0gcHJlcGFyZSBhbiBvYmplY3QgZm9yIEdUVCBtbWFwJ2luZwogICogQGRldjogRFJNIGRldmljZQpAQCAtMTkyMSw3ICsxOTA5LDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXBfZ3R0ICphcmdzID0gZGF0YTsKIAotCXJldHVybiBpOTE1X2dlbV9tbWFwX2d0dChmaWxlLCBkZXYsIGFyZ3MtPmhhbmRsZSwgZmFsc2UsICZhcmdzLT5vZmZzZXQpOworCXJldHVybiBpOTE1X2dlbV9tbWFwX2d0dChmaWxlLCBkZXYsIGFyZ3MtPmhhbmRsZSwgJmFyZ3MtPm9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0zMTYwLDYgKzMxNDgsMTMgQEAKIAkJdTMyIHNpemUgPSBpOTE1X2dlbV9vYmpfZ2d0dF9zaXplKG9iaik7CiAJCXVpbnQ2NF90IHZhbDsKIAorCQkvKiBBZGp1c3QgZmVuY2Ugc2l6ZSB0byBtYXRjaCB0aWxlZCBhcmVhICovCisJCWlmIChvYmotPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKKwkJCXVpbnQzMl90IHJvd19zaXplID0gb2JqLT5zdHJpZGUgKgorCQkJCShvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kgPyAzMiA6IDgpOworCQkJc2l6ZSA9IChzaXplIC8gcm93X3NpemUpICogcm93X3NpemU7CisJCX0KKwogCQl2YWwgPSAodWludDY0X3QpKChpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArIHNpemUgLSA0MDk2KSAmCiAJCQkJIDB4ZmZmZmYwMDApIDw8IDMyOwogCQl2YWwgfD0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgJiAweGZmZmZmMDAwOwpAQCAtNDg5NiwxMyArNDg5MSwxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBOVU1fTDNfU0xJQ0VTKGRldik7IGkrKykKIAkJaTkxNV9nZW1fbDNfcmVtYXAoJmRldl9wcml2LT5yaW5nW1JDU10sIGkpOwogCi0JLyoKLQkgKiBYWFg6IENvbnRleHRzIHNob3VsZCBvbmx5IGJlIGluaXRpYWxpemVkIG9uY2UuIERvaW5nIGEgc3dpdGNoIHRvIHRoZQotCSAqIGRlZmF1bHQgY29udGV4dCBzd2l0Y2ggaG93ZXZlciBpcyBzb21ldGhpbmcgd2UnZCBsaWtlIHRvIGRvIGFmdGVyCi0JICogcmVzZXQgb3IgdGhhdyAodGhlIGxhdHRlciBtYXkgbm90IGFjdHVhbGx5IGJlIG5lY2Vzc2FyeSBmb3IgSFcsIGJ1dAotCSAqIGdvZXMgd2l0aCBvdXIgY29kZSBiZXR0ZXIpLiBDb250ZXh0IHN3aXRjaGluZyByZXF1aXJlcyByaW5ncyAoZm9yCi0JICogdGhlIGRvX3N3aXRjaCksIGJ1dCBiZWZvcmUgZW5hYmxpbmcgUFBHVFQuIFNvIGRvbid0IG1vdmUgdGhpcy4KLQkgKi8KKwlyZXQgPSBpOTE1X3BwZ3R0X2luaXRfaHcoZGV2KTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRUlPKSB7CisJCURSTV9FUlJPUigiUFBHVFQgZW5hYmxlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7CisJfQorCiAJcmV0ID0gaTkxNV9nZW1fY29udGV4dF9lbmFibGUoZGV2X3ByaXYpOwogCWlmIChyZXQgJiYgcmV0ICE9IC1FSU8pIHsKIAkJRFJNX0VSUk9SKCJDb250ZXh0IGVuYWJsZSBmYWlsZWQgJWRcbiIsIHJldCk7CkBAIC00OTExLDEyICs0OTA1LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBpOTE1X3BwZ3R0X2luaXRfaHcoZGV2KTsKLQlpZiAocmV0ICYmIHJldCAhPSAtRUlPKSB7Ci0JCURSTV9FUlJPUigiUFBHVFQgZW5hYmxlIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTE2Nyw3ICs1MTU1LDcgQEAKIAlpZiAoIW11dGV4X2lzX2xvY2tlZChtdXRleCkpCiAJCXJldHVybiBmYWxzZTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfTVVURVhFUykKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19ERUJVR19NVVRFWEVTKQogCXJldHVybiBtdXRleC0+b3duZXIgPT0gdGFzazsKICNlbHNlCiAJLyogU2luY2UgVVAgbWF5IGJlIHByZS1lbXB0ZWQsIHdlIGNhbm5vdCBhc3N1bWUgdGhhdCB3ZSBvd24gdGhlIGxvY2sgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwppbmRleCBkMTdmZjQzLi5kMDExZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCkBAIC00NzMsNyArNDczLDEyIEBACiAJICAgICAgIHUzMiBod19mbGFncykKIHsKIAl1MzIgZmxhZ3MgPSBod19mbGFncyB8IE1JX01NX1NQQUNFX0dUVDsKLQlpbnQgcmV0OworCWNvbnN0IGludCBudW1fcmluZ3MgPQorCQkvKiBVc2UgYW4gZXh0ZW5kZWQgdy9hIG9uIGl2YisgaWYgc2lnbmFsbGluZyBmcm9tIG90aGVyIHJpbmdzICovCisJCWk5MTVfc2VtYXBob3JlX2lzX2VuYWJsZWQocmluZy0+ZGV2KSA/CisJCWh3ZWlnaHQzMihJTlRFTF9JTkZPKHJpbmctPmRldiktPnJpbmdfbWFzaykgLSAxIDoKKwkJMDsKKwlpbnQgbGVuLCBpLCByZXQ7CiAKIAkvKiB3L2E6IElmIEZsdXNoIFRMQiBJbnZhbGlkYXRpb24gTW9kZSBpcyBlbmFibGVkLCBkcml2ZXIgbXVzdCBkbyBhIFRMQgogCSAqIGludmFsaWRhdGlvbiBwcmlvciB0byBNSV9TRVRfQ09OVEVYVC4gT24gR0VONiB3ZSBkb24ndCBzZXQgdGhlIHZhbHVlCkBAIC00OTAsMTUgKzQ5NSwzMSBAQAogCWlmICghSVNfSEFTV0VMTChyaW5nLT5kZXYpICYmIElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuIDwgOCkKIAkJZmxhZ3MgfD0gKE1JX1NBVkVfRVhUX1NUQVRFX0VOIHwgTUlfUkVTVE9SRV9FWFRfU1RBVEVfRU4pOwogCi0JcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA2KTsKKworCWxlbiA9IDQ7CisJaWYgKElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuID49IDcpCisJCWxlbiArPSAyICsgKG51bV9yaW5ncyA/IDQqbnVtX3JpbmdzICsgMiA6IDApOworCisJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCBsZW4pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBXYVByb2dyYW1NaUFyYk9uT2ZmQXJvdW5kTWlTZXRDb250ZXh0Oml2Yix2bHYsaHN3LGJkdyxjaHYgKi8KLQlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gNykKKwlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gNykgewogCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNBQkxFKTsKLQllbHNlCi0JCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKKwkJaWYgKG51bV9yaW5ncykgeworCQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2lnbmFsbGVyOworCisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTE9BRF9SRUdJU1RFUl9JTU0obnVtX3JpbmdzKSk7CisJCQlmb3JfZWFjaF9yaW5nKHNpZ25hbGxlciwgdG9faTkxNShyaW5nLT5kZXYpLCBpKSB7CisJCQkJaWYgKHNpZ25hbGxlciA9PSByaW5nKQorCQkJCQljb250aW51ZTsKKworCQkJCWludGVsX3JpbmdfZW1pdChyaW5nLCBSSU5HX1BTTUlfQ1RMKHNpZ25hbGxlci0+bW1pb19iYXNlKSk7CisJCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIF9NQVNLRURfQklUX0VOQUJMRShHRU42X1BTTUlfU0xFRVBfTVNHX0RJU0FCTEUpKTsKKwkJCX0KKwkJfQorCX0KIAogCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKIAlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfU0VUX0NPTlRFWFQpOwpAQCAtNTEwLDEwICs1MzEsMjEgQEAKIAkgKi8KIAlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CiAKLQlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gNykKKwlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gNykgeworCQlpZiAobnVtX3JpbmdzKSB7CisJCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWduYWxsZXI7CisKKwkJCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9MT0FEX1JFR0lTVEVSX0lNTShudW1fcmluZ3MpKTsKKwkJCWZvcl9lYWNoX3Jpbmcoc2lnbmFsbGVyLCB0b19pOTE1KHJpbmctPmRldiksIGkpIHsKKwkJCQlpZiAoc2lnbmFsbGVyID09IHJpbmcpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIFJJTkdfUFNNSV9DVEwoc2lnbmFsbGVyLT5tbWlvX2Jhc2UpKTsKKwkJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgX01BU0tFRF9CSVRfRElTQUJMRShHRU42X1BTTUlfU0xFRVBfTVNHX0RJU0FCTEUpKTsKKwkJCX0KKwkJfQogCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfQVJCX09OX09GRiB8IE1JX0FSQl9FTkFCTEUpOwotCWVsc2UKLQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOworCX0KIAogCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCmluZGV4IGYwNjAyN2IuLjExNzM4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKQEAgLTEyMSw5ICsxMjEsNiBAQAogCQkJZ290byBlcnI7CiAJCX0KIAotCQlXQVJOX09OQ0Uob2JqLT5iYXNlLmR1bWIsCi0JCQkgICJHUFUgdXNlIG9mIGR1bWIgYnVmZmVyIGlzIGlsbGVnYWwuXG4iKTsKLQogCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiAJCWxpc3RfYWRkX3RhaWwoJm9iai0+b2JqX2V4ZWNfbGluaywgJm9iamVjdHMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IDk4MTgzNGIuLmIwNTFhMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMjgxLDEzICsyODEsMzQgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPmlycV9sb2NrKTsKKwogCVdBUk5fT04oZGV2X3ByaXYtPnJwcy5wbV9paXIpOwogCVdBUk5fT04oSTkxNV9SRUFEKGdlbjZfcG1faWlyKGRldl9wcml2KSkgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyk7CiAJZGV2X3ByaXYtPnJwcy5pbnRlcnJ1cHRzX2VuYWJsZWQgPSB0cnVlOworCUk5MTVfV1JJVEUoZ2VuNl9wbV9pZXIoZGV2X3ByaXYpLCBJOTE1X1JFQUQoZ2VuNl9wbV9pZXIoZGV2X3ByaXYpKSB8CisJCQkJZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpOwogCWdlbjZfZW5hYmxlX3BtX2lycShkZXZfcHJpdiwgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpOworCiAJc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwogfQogCit1MzIgZ2VuNl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBtYXNrKQoreworCS8qCisJICogU05CLElWQiBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFyZCBoYW5nIG9uIGxvb3BpbmcgYmF0Y2hidWZmZXIKKwkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElSRUQgaXMgbWFza2VkLgorCSAqCisJICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJvZHVjZWQgb24gVkxWLENIVi4KKwkgKi8KKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA8PSA3ICYmICFJU19IQVNXRUxMKGRldl9wcml2KSkKKwkJbWFzayAmPSB+R0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEOworCisJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gOCkKKwkJbWFzayAmPSB+R0VOOF9QTUlOVFJfUkVESVJFQ1RfVE9fTk9OX0RJU1A7CisKKwlyZXR1cm4gbWFzazsKK30KKwogdm9pZCBnZW42X2Rpc2FibGVfcnBzX2ludGVycnVwdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzAwLDggKzMyMSw3IEBACiAKIAlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwogCi0JSTkxNV9XUklURShHRU42X1BNSU5UUk1TSywgSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA4ID8KLQkJICAgfkdFTjhfUE1JTlRSX1JFRElSRUNUX1RPX05PTl9ESVNQIDogfjApOworCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soZGV2X3ByaXYsIH4wKSk7CiAKIAlfX2dlbjZfZGlzYWJsZV9wbV9pcnEoZGV2X3ByaXYsIGRldl9wcml2LT5wbV9ycHNfZXZlbnRzKTsKIAlJOTE1X1dSSVRFKGdlbjZfcG1faWVyKGRldl9wcml2KSwgSTkxNV9SRUFEKGdlbjZfcG1faWVyKGRldl9wcml2KSkgJgpAQCAtMzMwNyw4ICszMzI3LDEwIEBACiAJR0VONV9JUlFfSU5JVChHVCwgZGV2X3ByaXYtPmd0X2lycV9tYXNrLCBndF9pcnFzKTsKIAogCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7Ci0JCXBtX2lycXMgfD0gZGV2X3ByaXYtPnBtX3Jwc19ldmVudHM7Ci0KKwkJLyoKKwkJICogUlBTIGludGVycnVwdHMgd2lsbCBnZXQgZW5hYmxlZC9kaXNhYmxlZCBvbiBkZW1hbmQgd2hlbiBSUFMKKwkJICogaXRzZWxmIGlzIGVuYWJsZWQvZGlzYWJsZWQuCisJCSAqLwogCQlpZiAoSEFTX1ZFQk9YKGRldikpCiAJCQlwbV9pcnFzIHw9IFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUOwogCkBAIC0zNTIwLDcgKzM1NDIsMTEgQEAKIAlkZXZfcHJpdi0+cG1faXJxX21hc2sgPSAweGZmZmZmZmZmOwogCUdFTjhfSVJRX0lOSVRfTkRYKEdULCAwLCB+Z3RfaW50ZXJydXB0c1swXSwgZ3RfaW50ZXJydXB0c1swXSk7CiAJR0VOOF9JUlFfSU5JVF9ORFgoR1QsIDEsIH5ndF9pbnRlcnJ1cHRzWzFdLCBndF9pbnRlcnJ1cHRzWzFdKTsKLQlHRU44X0lSUV9JTklUX05EWChHVCwgMiwgZGV2X3ByaXYtPnBtX2lycV9tYXNrLCBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyk7CisJLyoKKwkgKiBSUFMgaW50ZXJydXB0cyB3aWxsIGdldCBlbmFibGVkL2Rpc2FibGVkIG9uIGRlbWFuZCB3aGVuIFJQUyBpdHNlbGYKKwkgKiBpcyBlbmFibGVkL2Rpc2FibGVkLgorCSAqLworCUdFTjhfSVJRX0lOSVRfTkRYKEdULCAyLCBkZXZfcHJpdi0+cG1faXJxX21hc2ssIDApOwogCUdFTjhfSVJRX0lOSVRfTkRYKEdULCAzLCB+Z3RfaW50ZXJydXB0c1szXSwgZ3RfaW50ZXJydXB0c1szXSk7CiB9CiAKQEAgLTM2MDksNyArMzYzNSw3IEBACiAKIAl2bHZfZGlzcGxheV9pcnFfcmVzZXQoZGV2X3ByaXYpOwogCi0JZGV2X3ByaXYtPmlycV9tYXNrID0gMDsKKwlkZXZfcHJpdi0+aXJxX21hc2sgPSB+MDsKIH0KIAogc3RhdGljIHZvaWQgdmFsbGV5dmlld19pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC0zNzE1LDggKzM3NDEsNiBAQAogCWlmICgoaWlyICYgZmxpcF9wZW5kaW5nKSA9PSAwKQogCQlnb3RvIGNoZWNrX3BhZ2VfZmxpcDsKIAotCWludGVsX3ByZXBhcmVfcGFnZV9mbGlwKGRldiwgcGxhbmUpOwotCiAJLyogV2UgZGV0ZWN0IEZsaXBEb25lIGJ5IGxvb2tpbmcgZm9yIHRoZSBjaGFuZ2UgaW4gUGVuZGluZ0ZsaXAgZnJvbSAnMScKIAkgKiB0byAnMCcgb24gdGhlIGZvbGxvd2luZyB2YmxhbmssIGkuZS4gSUlSIGhhcyB0aGUgUGVuZGluZ2ZsaXAKIAkgKiBhc3NlcnRlZCBmb2xsb3dpbmcgdGhlIE1JX0RJU1BMQVlfRkxJUCwgYnV0IElTUiBpcyBkZWFzc2VydGVkLCBoZW5jZQpAQCAtMzcyNiw2ICszNzUwLDcgQEAKIAlpZiAoSTkxNV9SRUFEMTYoSVNSKSAmIGZsaXBfcGVuZGluZykKIAkJZ290byBjaGVja19wYWdlX2ZsaXA7CiAKKwlpbnRlbF9wcmVwYXJlX3BhZ2VfZmxpcChkZXYsIHBsYW5lKTsKIAlpbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgcGlwZSk7CiAJcmV0dXJuIHRydWU7CiAKQEAgLTM4OTcsOCArMzkyMiw2IEBACiAJaWYgKChpaXIgJiBmbGlwX3BlbmRpbmcpID09IDApCiAJCWdvdG8gY2hlY2tfcGFnZV9mbGlwOwogCi0JaW50ZWxfcHJlcGFyZV9wYWdlX2ZsaXAoZGV2LCBwbGFuZSk7Ci0KIAkvKiBXZSBkZXRlY3QgRmxpcERvbmUgYnkgbG9va2luZyBmb3IgdGhlIGNoYW5nZSBpbiBQZW5kaW5nRmxpcCBmcm9tICcxJwogCSAqIHRvICcwJyBvbiB0aGUgZm9sbG93aW5nIHZibGFuaywgaS5lLiBJSVIgaGFzIHRoZSBQZW5kaW5nZmxpcAogCSAqIGFzc2VydGVkIGZvbGxvd2luZyB0aGUgTUlfRElTUExBWV9GTElQLCBidXQgSVNSIGlzIGRlYXNzZXJ0ZWQsIGhlbmNlCkBAIC0zOTA4LDYgKzM5MzEsNyBAQAogCWlmIChJOTE1X1JFQUQoSVNSKSAmIGZsaXBfcGVuZGluZykKIAkJZ290byBjaGVja19wYWdlX2ZsaXA7CiAKKwlpbnRlbF9wcmVwYXJlX3BhZ2VfZmxpcChkZXYsIHBsYW5lKTsKIAlpbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgcGlwZSk7CiAJcmV0dXJuIHRydWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IGVlZmRjMjMuLjE3MmRlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMzk1LDYgKzM5NSw3IEBACiAjZGVmaW5lICAgUElQRV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVgJCQkoMTw8MjEpCiAjZGVmaW5lICAgUElQRV9DT05UUk9MX0NTX1NUQUxMCQkJCSgxPDwyMCkKICNkZWZpbmUgICBQSVBFX0NPTlRST0xfVExCX0lOVkFMSURBVEUJCQkoMTw8MTgpCisjZGVmaW5lICAgUElQRV9DT05UUk9MX01FRElBX1NUQVRFX0NMRUFSCQkoMTw8MTYpCiAjZGVmaW5lICAgUElQRV9DT05UUk9MX1FXX1dSSVRFCQkJCSgxPDwxNCkKICNkZWZpbmUgICBQSVBFX0NPTlRST0xfUE9TVF9TWU5DX09QX01BU0sgICAgICAgICAgICAgICAgKDM8PDE0KQogI2RlZmluZSAgIFBJUEVfQ09OVFJPTF9ERVBUSF9TVEFMTAkJCSgxPDwxMykKQEAgLTExMjgsNiArMTEyOSw3IEBACiAjZGVmaW5lIEdFTjZfVkVSU1lOQwkoUklOR19TWU5DXzEoVkVCT1hfUklOR19CQVNFKSkKICNkZWZpbmUgR0VONl9WRVZTWU5DCShSSU5HX1NZTkNfMihWRUJPWF9SSU5HX0JBU0UpKQogI2RlZmluZSBHRU42X05PU1lOQyAwCisjZGVmaW5lIFJJTkdfUFNNSV9DVEwoYmFzZSkJKChiYXNlKSsweDUwKQogI2RlZmluZSBSSU5HX01BWF9JRExFKGJhc2UpCSgoYmFzZSkrMHg1NCkKICNkZWZpbmUgUklOR19IV1NfUEdBKGJhc2UpCSgoYmFzZSkrMHg4MCkKICNkZWZpbmUgUklOR19IV1NfUEdBX0dFTjYoYmFzZSkJKChiYXNlKSsweDIwODApCkBAIC0xNDU4LDYgKzE0NjAsNyBAQAogI2RlZmluZSAgIEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZCQkJKDE8PDMpCiAKICNkZWZpbmUgR0VONl9SQ19TTEVFUF9QU01JX0NPTlRST0wJMHgyMDUwCisjZGVmaW5lICAgR0VONl9QU01JX1NMRUVQX01TR19ESVNBQkxFCSgxIDw8IDApCiAjZGVmaW5lICAgR0VOOF9SQ19TRU1BX0lETEVfTVNHX0RJU0FCTEUJKDEgPDwgMTIpCiAjZGVmaW5lICAgR0VOOF9GRl9ET1BfQ0xPQ0tfR0FURV9ESVNBQkxFCSgxPDwxMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IGZiM2UzZDQuLmU3YTE2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTk4MTUsNyArOTgxNSw3IEBACiAJCWlmIChvYmotPnRpbGluZ19tb2RlICE9IHdvcmstPm9sZF9mYl9vYmotPnRpbGluZ19tb2RlKQogCQkJLyogdmx2OiBESVNQTEFZX0ZMSVAgZmFpbHMgdG8gY2hhbmdlIHRpbGluZyAqLwogCQkJcmluZyA9IE5VTEw7Ci0JfSBlbHNlIGlmIChJU19JVllCUklER0UoZGV2KSkgeworCX0gZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRldikgfHwgSVNfSEFTV0VMTChkZXYpKSB7CiAJCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbQkNTXTsKIAl9IGVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDcpIHsKIAkJcmluZyA9IG9iai0+cmluZzsKQEAgLTEzMDU3LDExICsxMzA1Nyw3IEBACiAJdmdhX3B1dChkZXYtPnBkZXYsIFZHQV9SU1JDX0xFR0FDWV9JTyk7CiAJdWRlbGF5KDMwMCk7CiAKLQkvKgotCSAqIEZ1aml0c3UtU2llbWVucyBMaWZlYm9vayBTNjAxMCAoODMwKSBoYXMgcHJvYmxlbXMgcmVzdW1pbmcKLQkgKiBmcm9tIFMzIHdpdGhvdXQgcHJlc2VydmluZyAoc29tZSBvZj8pIHRoZSBvdGhlciBiaXRzLgotCSAqLwotCUk5MTVfV1JJVEUodmdhX3JlZywgZGV2X3ByaXYtPmJpb3NfdmdhY250ciB8IFZHQV9ESVNQX0RJU0FCTEUpOworCUk5MTVfV1JJVEUodmdhX3JlZywgVkdBX0RJU1BfRElTQUJMRSk7CiAJUE9TVElOR19SRUFEKHZnYV9yZWcpOwogfQogCkBAIC0xMzE0Niw4ICsxMzE0Miw2IEBACiAKIAlpbnRlbF9zaGFyZWRfZHBsbF9pbml0KGRldik7CiAKLQkvKiBzYXZlIHRoZSBCSU9TIHZhbHVlIGJlZm9yZSBjbG9iYmVyaW5nIGl0ICovCi0JZGV2X3ByaXYtPmJpb3NfdmdhY250ciA9IEk5MTVfUkVBRChpOTE1X3ZnYWNudHJsX3JlZyhkZXYpKTsKIAkvKiBKdXN0IGRpc2FibGUgaXQgb25jZSBhdCBzdGFydHVwICovCiAJaTkxNV9kaXNhYmxlX3ZnYShkZXYpOwogCWludGVsX3NldHVwX291dHB1dHMoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggMjVmZGJiMS4uM2I0MGExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTc5NCw2ICs3OTQsNyBAQAogdm9pZCBnZW42X3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBnZW42X2VuYWJsZV9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1cHRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordTMyIGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgbWFzayk7CiB2b2lkIGludGVsX3J1bnRpbWVfcG1fZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX3J1bnRpbWVfcG1fZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9pcnFzX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKaW5kZXggNGQ2MzgzOS4uZGZiNzgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCkBAIC05NjIsNyArOTYyLDcgQEAKIAogCVdBUk5fT04ocGFuZWwtPmJhY2tsaWdodC5tYXggPT0gMCk7CiAKLQlpZiAocGFuZWwtPmJhY2tsaWdodC5sZXZlbCA9PSAwKSB7CisJaWYgKHBhbmVsLT5iYWNrbGlnaHQubGV2ZWwgPD0gcGFuZWwtPmJhY2tsaWdodC5taW4pIHsKIAkJcGFuZWwtPmJhY2tsaWdodC5sZXZlbCA9IHBhbmVsLT5iYWNrbGlnaHQubWF4OwogCQlpZiAocGFuZWwtPmJhY2tsaWdodC5kZXZpY2UpCiAJCQlwYW5lbC0+YmFja2xpZ2h0LmRldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwppbmRleCAxZjRiNTZlLi5iZjgxNGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKQEAgLTQzNjMsMTYgKzQzNjMsNyBAQAogCW1hc2sgfD0gZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMgJiAoR0VONl9QTV9SUF9ET1dOX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQpOwogCW1hc2sgJj0gZGV2X3ByaXYtPnBtX3Jwc19ldmVudHM7CiAKLQkvKiBJVkIgYW5kIFNOQiBoYXJkIGhhbmdzIG9uIGxvb3BpbmcgYmF0Y2hidWZmZXIKLQkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElSRUQgaXMgbWFza2VkLgotCSAqLwotCWlmIChJTlRFTF9JTkZPKGRldl9wcml2LT5kZXYpLT5nZW4gPD0gNyAmJiAhSVNfSEFTV0VMTChkZXZfcHJpdi0+ZGV2KSkKLQkJbWFzayB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQ7Ci0KLQlpZiAoSVNfR0VOOChkZXZfcHJpdi0+ZGV2KSkKLQkJbWFzayB8PSBHRU44X1BNSU5UUl9SRURJUkVDVF9UT19OT05fRElTUDsKLQotCXJldHVybiB+bWFzazsKKwlyZXR1cm4gZ2VuNl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhkZXZfcHJpdiwgfm1hc2spOwogfQogCiAvKiBnZW42X3NldF9ycHMgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgZnJlcXVlbmN5IHJlcXVlc3QsIGJ1dCBzaG91bGQgYWxzbyBiZQpAQCAtNDQ0MSw3ICs0NDMyLDggQEAKIAkJcmV0dXJuOwogCiAJLyogTWFzayB0dXJibyBpbnRlcnJ1cHQgc28gdGhhdCB0aGV5IHdpbGwgbm90IGNvbWUgaW4gYmV0d2VlbiAqLwotCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIDB4ZmZmZmZmZmYpOworCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssCisJCSAgIGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soZGV2X3ByaXYsIH4wKSk7CiAKIAl2bHZfZm9yY2VfZ2Z4X2Nsb2NrKGRldl9wcml2LCB0cnVlKTsKIApAQCAtNjE5MSw2ICs2MTgzLDIwIEBACiAJCXZhbGxleXZpZXdfY2xlYW51cF9ndF9wb3dlcnNhdmUoZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuNl9zdXNwZW5kX3JwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlmbHVzaF9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5ycHMuZGVsYXllZF9yZXN1bWVfd29yayk7CisKKwkvKgorCSAqIFRPRE86IGRpc2FibGUgUlBTIGludGVycnVwdHMgb24gR0VOOSsgdG9vIG9uY2UgUlBTIHN1cHBvcnQKKwkgKiBpcyBhZGRlZCBmb3IgaXQuCisJICovCisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgOSkKKwkJZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1cHRzKGRldik7Cit9CisKIC8qKgogICogaW50ZWxfc3VzcGVuZF9ndF9wb3dlcnNhdmUgLSBzdXNwZW5kIFBNIHdvcmsgYW5kIGhlbHBlciB0aHJlYWRzCiAgKiBAZGV2OiBkcm0gZGV2aWNlCkBAIC02MjA2LDE0ICs2MjEyLDcgQEAKIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA2KQogCQlyZXR1cm47CiAKLQlmbHVzaF9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5ycHMuZGVsYXllZF9yZXN1bWVfd29yayk7Ci0KLQkvKgotCSAqIFRPRE86IGRpc2FibGUgUlBTIGludGVycnVwdHMgb24gR0VOOSsgdG9vIG9uY2UgUlBTIHN1cHBvcnQKLQkgKiBpcyBhZGRlZCBmb3IgaXQuCi0JICovCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgOSkKLQkJZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1cHRzKGRldik7CisJZ2VuNl9zdXNwZW5kX3JwcyhkZXYpOwogCiAJLyogRm9yY2UgR1BVIHRvIG1pbiBmcmVxIGR1cmluZyBzdXNwZW5kICovCiAJZ2VuNl9ycHNfaWRsZShkZXZfcHJpdik7CkBAIC02MzE2LDggKzYzMTUsMTEgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNikKKwkJcmV0dXJuOworCisJZ2VuNl9zdXNwZW5kX3JwcyhkZXYpOwogCWRldl9wcml2LT5ycHMuZW5hYmxlZCA9IGZhbHNlOwotCWludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaWJ4X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggOWY0NDVlOS4uYzdiYzkzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtMzYyLDEyICszNjIsMTUgQEAKIAkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1ZGX0NBQ0hFX0lOVkFMSURBVEU7CiAJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOwogCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfU1RBVEVfQ0FDSEVfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX01FRElBX1NUQVRFX0NMRUFSOwogCQkvKgogCQkgKiBUTEIgaW52YWxpZGF0ZSByZXF1aXJlcyBhIHBvc3Qtc3luYyB3cml0ZS4KIAkJICovCiAJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKIAkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCOwogCisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFMTF9BVF9TQ09SRUJPQVJEOworCiAJCS8qIFdvcmthcm91bmQ6IHdlIG11c3QgaXNzdWUgYSBwaXBlX2NvbnRyb2wgd2l0aCBDUy1zdGFsbCBiaXQKIAkJICogc2V0IGJlZm9yZSBhIHBpcGVfY29udHJvbCBjb21tYW5kIHRoYXQgaGFzIHRoZSBzdGF0ZSBjYWNoZQogCQkgKiBpbnZhbGlkYXRlIGJpdCBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMKaW5kZXggZjVhNzhkNS4uYWM2ZGE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYwpAQCAtNjE1LDI5ICs2MTUsNiBAQAogCQl2bHZfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KGRldl9wcml2KTsKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tfcG93ZXJfd2VsbF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKLXsKLQlib29sIGVuYWJsZWQgPSBwb3dlcl93ZWxsLT5vcHMtPmlzX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwotCi0JaWYgKHBvd2VyX3dlbGwtPmFsd2F5c19vbiB8fCAhaTkxNS5kaXNhYmxlX3Bvd2VyX3dlbGwpIHsKLQkJaWYgKCFlbmFibGVkKQotCQkJZ290byBtaXNtYXRjaDsKLQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGVuYWJsZWQgIT0gKHBvd2VyX3dlbGwtPmNvdW50ID4gMCkpCi0JCWdvdG8gbWlzbWF0Y2g7Ci0KLQlyZXR1cm47Ci0KLW1pc21hdGNoOgotCVdBUk4oMSwgInN0YXRlIG1pc21hdGNoIGZvciAnJXMnIChhbHdheXNfb24gJWQgaHcgc3RhdGUgJWQgdXNlLWNvdW50ICVkIGRpc2FibGVfcG93ZXJfd2VsbCAlZFxuIiwKLQkJICBwb3dlcl93ZWxsLT5uYW1lLCBwb3dlcl93ZWxsLT5hbHdheXNfb24sIGVuYWJsZWQsCi0JCSAgcG93ZXJfd2VsbC0+Y291bnQsIGk5MTUuZGlzYWJsZV9wb3dlcl93ZWxsKTsKLX0KLQogLyoqCiAgKiBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldCAtIGdyYWIgYSBwb3dlciBkb21haW4gcmVmZXJlbmNlCiAgKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGluc3RhbmNlCkBAIC02NjksOCArNjQ2LDYgQEAKIAkJCXBvd2VyX3dlbGwtPm9wcy0+ZW5hYmxlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKIAkJCXBvd2VyX3dlbGwtPmh3X2VuYWJsZWQgPSB0cnVlOwogCQl9Ci0KLQkJY2hlY2tfcG93ZXJfd2VsbF9zdGF0ZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7CiAJfQogCiAJcG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3VudFtkb21haW5dKys7CkBAIC03MDksOCArNjg0LDYgQEAKIAkJCXBvd2VyX3dlbGwtPmh3X2VuYWJsZWQgPSBmYWxzZTsKIAkJCXBvd2VyX3dlbGwtPm9wcy0+ZGlzYWJsZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7CiAJCX0KLQotCQljaGVja19wb3dlcl93ZWxsX3N0YXRlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKIAl9CiAKIAltdXRleF91bmxvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jCmluZGV4IGFhODczMDQuLjk0YTViZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMKQEAgLTM4Niw5ICszODYsNyBAQAogCQkJbXNtX2dlbV9wdXRfaW92YShncHUtPm1lbXB0cnNfYm8sIGdwdS0+YmFzZS5pZCk7CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdwdS0+bWVtcHRyc19ibyk7CiAJfQotCWlmIChncHUtPnBtNCkKLQkJcmVsZWFzZV9maXJtd2FyZShncHUtPnBtNCk7Ci0JaWYgKGdwdS0+cGZwKQotCQlyZWxlYXNlX2Zpcm13YXJlKGdwdS0+cGZwKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGdwdS0+cG00KTsKKwlyZWxlYXNlX2Zpcm13YXJlKGdwdS0+cGZwKTsKIAltc21fZ3B1X2NsZWFudXAoJmdwdS0+YmFzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX2Nvbm5lY3Rvci5jCmluZGV4IGZiZWJiMDQuLmI0ZTcwZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX2Nvbm5lY3Rvci5jCkBAIC0xNDEsNiArMTQxLDE1IEBACiAJdWludDMyX3QgaHBkX2N0cmw7CiAJaW50IGksIHJldDsKIAorCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhwZF9yZWdfY250OyBpKyspIHsKKwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShoZG1pLT5ocGRfcmVnc1tpXSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGhwZCByZWd1bGF0b3I6ICVzICglZClcbiIsCisJCQkJCWNvbmZpZy0+aHBkX3JlZ19uYW1lc1tpXSwgcmV0KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwogCXJldCA9IGdwaW9fY29uZmlnKGhkbWksIHRydWUpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBjb25maWd1cmUgR1BJT3M6ICVkXG4iLCByZXQpOwpAQCAtMTY0LDE1ICsxNzMsNiBAQAogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aHBkX3JlZ19jbnQ7IGkrKykgewotCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGhkbWktPmhwZF9yZWdzW2ldKTsKLQkJaWYgKHJldCkgewotCQkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgaHBkIHJlZ3VsYXRvcjogJXMgKCVkKVxuIiwKLQkJCQkJY29uZmlnLT5ocGRfcmVnX25hbWVzW2ldLCByZXQpOwotCQkJZ290byBmYWlsOwotCQl9Ci0JfQotCiAJaGRtaV9zZXRfbW9kZShoZG1pLCBmYWxzZSk7CiAJcGh5LT5mdW5jcy0+cmVzZXQocGh5KTsKIAloZG1pX3NldF9tb2RlKGhkbWksIHRydWUpOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBoZHBfZGlzYWJsZShzdHJ1Y3QgaGRtaV9jb25uZWN0b3IgKmhkbWlfY29ubmVjdG9yKQorc3RhdGljIHZvaWQgaGRwX2Rpc2FibGUoc3RydWN0IGhkbWlfY29ubmVjdG9yICpoZG1pX2Nvbm5lY3RvcikKIHsKIAlzdHJ1Y3QgaGRtaSAqaGRtaSA9IGhkbWlfY29ubmVjdG9yLT5oZG1pOwogCWNvbnN0IHN0cnVjdCBoZG1pX3BsYXRmb3JtX2NvbmZpZyAqY29uZmlnID0gaGRtaS0+Y29uZmlnOwpAQCAtMjEyLDI4ICsyMTIsMTkgQEAKIAogCWhkbWlfc2V0X21vZGUoaGRtaSwgZmFsc2UpOwogCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aHBkX3JlZ19jbnQ7IGkrKykgewotCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShoZG1pLT5ocGRfcmVnc1tpXSk7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gZGlzYWJsZSBocGQgcmVndWxhdG9yOiAlcyAoJWQpXG4iLAotCQkJCQljb25maWctPmhwZF9yZWdfbmFtZXNbaV0sIHJldCk7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ocGRfY2xrX2NudDsgaSsrKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+aHBkX2Nsa3NbaV0pOwogCiAJcmV0ID0gZ3Bpb19jb25maWcoaGRtaSwgZmFsc2UpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byB1bmNvbmZpZ3VyZSBHUElPczogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZmFpbDsKKwlpZiAocmV0KQorCQlkZXZfd2FybihkZXYtPmRldiwgImZhaWxlZCB0byB1bmNvbmZpZ3VyZSBHUElPczogJWRcbiIsIHJldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ocGRfcmVnX2NudDsgaSsrKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKGhkbWktPmhwZF9yZWdzW2ldKTsKKwkJaWYgKHJldCkKKwkJCWRldl93YXJuKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGRpc2FibGUgaHBkIHJlZ3VsYXRvcjogJXMgKCVkKVxuIiwKKwkJCQkJY29uZmlnLT5ocGRfcmVnX25hbWVzW2ldLCByZXQpOwogCX0KLQotCXJldHVybiAwOwotCi1mYWlsOgotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNjAsMTEgKzI1MSwxMSBAQAogCQkJKGhwZF9pbnRfc3RhdHVzICYgSERNSV9IUERfSU5UX1NUQVRVU19JTlQpKSB7CiAJCWJvb2wgZGV0ZWN0ZWQgPSAhIShocGRfaW50X3N0YXR1cyAmIEhETUlfSFBEX0lOVF9TVEFUVVNfQ0FCTEVfREVURUNURUQpOwogCi0JCURCRygic3RhdHVzPSUwNHgsIGN0cmw9JTA0eCIsIGhwZF9pbnRfc3RhdHVzLCBocGRfaW50X2N0cmwpOwotCi0JCS8qIGFjayB0aGUgaXJxOiAqLworCQkvKiBhY2sgJiBkaXNhYmxlICh0ZW1wb3JhcmlseSkgSFBEIGV2ZW50czogKi8KIAkJaGRtaV93cml0ZShoZG1pLCBSRUdfSERNSV9IUERfSU5UX0NUUkwsCi0JCQkJaHBkX2ludF9jdHJsIHwgSERNSV9IUERfSU5UX0NUUkxfSU5UX0FDSyk7CisJCQlIRE1JX0hQRF9JTlRfQ1RSTF9JTlRfQUNLKTsKKworCQlEQkcoInN0YXR1cz0lMDR4LCBjdHJsPSUwNHgiLCBocGRfaW50X3N0YXR1cywgaHBkX2ludF9jdHJsKTsKIAogCQkvKiBkZXRlY3QgZGlzY29ubmVjdCBpZiB3ZSBhcmUgY29ubmVjdGVkIG9yIHZpc2EgdmVyc2E6ICovCiAJCWhwZF9pbnRfY3RybCA9IEhETUlfSFBEX0lOVF9DVFJMX0lOVF9FTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDQvbWRwNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA0L21kcDRfY3J0Yy5jCmluZGV4IGE3NjcyZTEuLjM0NDkyMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDQvbWRwNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNC9tZHA0X2NydGMuYwpAQCAtMzMxLDE3ICszMzEsOCBAQAogCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBtZHA0X2NydGMgKm1kcDRfY3J0YyA9IHRvX21kcDRfY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCiAJREJHKCIlczogY2hlY2siLCBtZHA0X2NydGMtPm5hbWUpOwotCi0JaWYgKG1kcDRfY3J0Yy0+ZXZlbnQpIHsKLQkJZGV2X2VycihkZXYtPmRldiwgImFscmVhZHkgcGVuZGluZyBmbGlwIVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCiAJLy8gVE9ETyBhbnl0aGluZyBlbHNlIHRvIGNoZWNrPwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1Nyw3ICszNDgsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURCRygiJXM6IGZsdXNoIiwgbWRwNF9jcnRjLT5uYW1lKTsKKwlEQkcoIiVzOiBldmVudDogJXAiLCBtZHA0X2NydGMtPm5hbWUsIGNydGMtPnN0YXRlLT5ldmVudCk7CiAKIAlXQVJOX09OKG1kcDRfY3J0Yy0+ZXZlbnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2NydGMuYwppbmRleCAwZTlhMmUzLi5mMDIxZjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jcnRjLmMKQEAgLTMwMywxMSArMzAzLDYgQEAKIAogCURCRygiJXM6IGNoZWNrIiwgbWRwNV9jcnRjLT5uYW1lKTsKIAotCWlmIChtZHA1X2NydGMtPmV2ZW50KSB7Ci0JCWRldl9lcnIoZGV2LT5kZXYsICJhbHJlYWR5IHBlbmRpbmcgZmxpcCFcbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQogCS8qIHJlcXVlc3QgYSBmcmVlIENUTCwgaWYgbm9uZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCBmb3IgdGhpcyBDUlRDICovCiAJaWYgKHN0YXRlLT5lbmFibGUgJiYgIW1kcDVfY3J0Yy0+Y3RsKSB7CiAJCW1kcDVfY3J0Yy0+Y3RsID0gbWRwNV9jdGxtX3JlcXVlc3QobWRwNV9rbXMtPmN0bG0sIGNydGMpOwpAQCAtMzY0LDcgKzM1OSw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JREJHKCIlczogZmx1c2giLCBtZHA1X2NydGMtPm5hbWUpOworCURCRygiJXM6IGV2ZW50OiAlcCIsIG1kcDVfY3J0Yy0+bmFtZSwgY3J0Yy0+c3RhdGUtPmV2ZW50KTsKIAogCVdBUk5fT04obWRwNV9jcnRjLT5ldmVudCk7CiAKQEAgLTQ2MCwxMCArNDU1LDcgQEAKIAkvKiBub3cgdGhhdCB3ZSBrbm93IHdoYXQgaXJxJ3Mgd2Ugd2FudDogKi8KIAltZHA1X2NydGMtPmVyci5pcnFtYXNrID0gaW50ZjJlcnIoaW50Zik7CiAJbWRwNV9jcnRjLT52YmxhbmsuaXJxbWFzayA9IGludGYydmJsYW5rKGludGYpOwotCi0JLyogd2hlbiBjYWxsZWQgZnJvbSBtb2Rlc2V0X2luaXQoKSwgc2tpcCB0aGUgcmVzdCB1bnRpbCBsYXRlcjogKi8KLQlpZiAoIW1kcDVfa21zKQotCQlyZXR1cm47CisJbWRwX2lycV91cGRhdGUoJm1kcDVfa21zLT5iYXNlKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtZHA1X2ttcy0+cmVzb3VyY2VfbG9jaywgZmxhZ3MpOwogCWludGZfc2VsID0gbWRwNV9yZWFkKG1kcDVfa21zLCBSRUdfTURQNV9ESVNQX0lOVEZfU0VMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYwppbmRleCBhMTFmMWI4Li45ZjAxYTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5jCkBAIC0yMTYsMTcgKzIxNiw3IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQkvKiBOT1RFOiB0aGUgdnN5bmMgYW5kIGVycm9yIGlycSdzIGFyZSBhY3R1YWxseSBhc3NvY2lhdGVkIHdpdGgKLQkgKiB0aGUgSU5URi9lbmNvZGVyLi4gdGhlIGVhc2llc3Qgd2F5IHRvIGRlYWwgd2l0aCB0aGlzIChpZS4gd2hhdAotCSAqIHdlIGRvIG5vdykgaXMgYXNzdW1lIGEgZml4ZWQgcmVsYXRpb25zaGlwIGJldHdlZW4gY3J0YydzIGFuZAotCSAqIGVuY29kZXJzLiAgSSdtIG5vdCBzdXJlIGlmIHRoZXJlIGlzIGV2ZXIgYSBuZWVkIHRvIG1vcmUgZnJlZWx5Ci0JICogYXNzaWduIGNydGNzIHRvIGVuY29kZXJzLCBidXQgaWYgdGhlcmUgaXMgdGhlbiB3ZSBuZWVkIHRvIHRha2UKLQkgKiBjYXJlIG9mIGVycm9yIGFuZCB2YmxhbmsgaXJxJ3MgdGhhdCB0aGUgY3J0YyBoYXMgcmVnaXN0ZXJlZCwKLQkgKiBhbmQgYWxzbyB1cGRhdGUgdXNlci1yZXF1ZXN0ZWQgdmJsYW5rX21hc2suCi0JICovCi0JZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBCSVQoMCk7Ci0JbWRwNV9jcnRjX3NldF9pbnRmKHByaXYtPmNydGNzWzBdLCAzLCBJTlRGX0hETUkpOwotCisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAoMSA8PCBwcml2LT5udW1fY3J0Y3MpIC0gMTs7CiAJcHJpdi0+ZW5jb2RlcnNbcHJpdi0+bnVtX2VuY29kZXJzKytdID0gZW5jb2RlcjsKIAogCS8qIENvbnN0cnVjdCBicmlkZ2UvY29ubmVjdG9yIGZvciBIRE1JOiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwX2ttcy5jCmluZGV4IDAzNDU1YjYuLjJhNzMxNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHBfa21zLmMKQEAgLTQyLDcgKzQyLDEwIEBACiAJbWRwX2ttcy0+ZnVuY3MtPnNldF9pcnFtYXNrKG1kcF9rbXMsIGlycW1hc2spOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfaXJxX3VubG9ja2VkKHN0cnVjdCBtZHBfa21zICptZHBfa21zKQorLyogaWYgYW4gbWRwX2lycSdzIGlycW1hc2sgaGFzIGNoYW5nZWQsIHN1Y2ggYXMgd2hlbiBtZHA1IGNydGM8LT5lbmNvZGVyCisgKiBsaW5rIGNoYW5nZXMsIHRoaXMgbXVzdCBiZSBjYWxsZWQgdG8gZmlndXJlIG91dCB0aGUgbmV3IGdsb2JhbCBpcnFtYXNrCisgKi8KK3ZvaWQgbWRwX2lycV91cGRhdGUoc3RydWN0IG1kcF9rbXMgKm1kcF9rbXMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBmbGFncyk7CkBAIC0xMjIsNyArMTI1LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0X2xvY2ssIGZsYWdzKTsKIAogCWlmIChuZWVkc191cGRhdGUpCi0JCXVwZGF0ZV9pcnFfdW5sb2NrZWQobWRwX2ttcyk7CisJCW1kcF9pcnFfdXBkYXRlKG1kcF9rbXMpOwogfQogCiB2b2lkIG1kcF9pcnFfdW5yZWdpc3RlcihzdHJ1Y3QgbWRwX2ttcyAqbWRwX2ttcywgc3RydWN0IG1kcF9pcnEgKmlycSkKQEAgLTE0MSw1ICsxNDQsNSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgZmxhZ3MpOwogCiAJaWYgKG5lZWRzX3VwZGF0ZSkKLQkJdXBkYXRlX2lycV91bmxvY2tlZChtZHBfa21zKTsKKwkJbWRwX2lycV91cGRhdGUobWRwX2ttcyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHBfa21zLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHBfa21zLmgKaW5kZXggOTk1NTdiNS4uYjI2OGNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwX2ttcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcF9rbXMuaApAQCAtNzUsNyArNzUsNyBAQAogdm9pZCBtZHBfaXJxX3dhaXQoc3RydWN0IG1kcF9rbXMgKm1kcF9rbXMsIHVpbnQzMl90IGlycW1hc2spOwogdm9pZCBtZHBfaXJxX3JlZ2lzdGVyKHN0cnVjdCBtZHBfa21zICptZHBfa21zLCBzdHJ1Y3QgbWRwX2lycSAqaXJxKTsKIHZvaWQgbWRwX2lycV91bnJlZ2lzdGVyKHN0cnVjdCBtZHBfa21zICptZHBfa21zLCBzdHJ1Y3QgbWRwX2lycSAqaXJxKTsKLQordm9pZCBtZHBfaXJxX3VwZGF0ZShzdHJ1Y3QgbWRwX2ttcyAqbWRwX2ttcyk7CiAKIC8qCiAgKiBwaXhlbCBmb3JtYXQgaGVscGVyczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMKaW5kZXggZjBkZTQxMi4uMTkxOTY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMKQEAgLTIzLDEwICsyMyw0MSBAQAogCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKIAl1aW50MzJfdCBmZW5jZTsKIAlzdHJ1Y3QgbXNtX2ZlbmNlX2NiIGZlbmNlX2NiOworCXVpbnQzMl90IGNydGNfbWFzazsKIH07CiAKIHN0YXRpYyB2b2lkIGZlbmNlX2NiKHN0cnVjdCBtc21fZmVuY2VfY2IgKmNiKTsKIAorLyogYmxvY2sgdW50aWwgc3BlY2lmaWVkIGNydGNzIGFyZSBubyBsb25nZXIgcGVuZGluZyB1cGRhdGUsIGFuZAorICogYXRvbWljYWxseSBtYXJrIHRoZW0gYXMgcGVuZGluZyB1cGRhdGUKKyAqLworc3RhdGljIGludCBzdGFydF9hdG9taWMoc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiwgdWludDMyX3QgY3J0Y19tYXNrKQoreworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnByaXYtPnBlbmRpbmdfY3J0Y3NfZXZlbnQubG9jayk7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tlZChwcml2LT5wZW5kaW5nX2NydGNzX2V2ZW50LAorCQkJIShwcml2LT5wZW5kaW5nX2NydGNzICYgY3J0Y19tYXNrKSk7CisJaWYgKHJldCA9PSAwKSB7CisJCURCRygic3RhcnQ6ICUwOHgiLCBjcnRjX21hc2spOworCQlwcml2LT5wZW5kaW5nX2NydGNzIHw9IGNydGNfbWFzazsKKwl9CisJc3Bpbl91bmxvY2soJnByaXYtPnBlbmRpbmdfY3J0Y3NfZXZlbnQubG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBjbGVhciBzcGVjaWZpZWQgY3J0Y3MgKG5vIGxvbmdlciBwZW5kaW5nIHVwZGF0ZSkKKyAqLworc3RhdGljIHZvaWQgZW5kX2F0b21pYyhzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2LCB1aW50MzJfdCBjcnRjX21hc2spCit7CisJc3Bpbl9sb2NrKCZwcml2LT5wZW5kaW5nX2NydGNzX2V2ZW50LmxvY2spOworCURCRygiZW5kOiAlMDh4IiwgY3J0Y19tYXNrKTsKKwlwcml2LT5wZW5kaW5nX2NydGNzICY9IH5jcnRjX21hc2s7CisJd2FrZV91cF9hbGxfbG9ja2VkKCZwcml2LT5wZW5kaW5nX2NydGNzX2V2ZW50KTsKKwlzcGluX3VubG9jaygmcHJpdi0+cGVuZGluZ19jcnRjc19ldmVudC5sb2NrKTsKK30KKwogc3RhdGljIHN0cnVjdCBtc21fY29tbWl0ICpuZXdfY29tbWl0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgbXNtX2NvbW1pdCAqYyA9IGt6YWxsb2Moc2l6ZW9mKCpjKSwgR0ZQX0tFUk5FTCk7CkBAIC01OCwxMiArODksMjcgQEAKIAogCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wb3N0X3BsYW5lcyhkZXYsIHN0YXRlKTsKIAorCS8qIE5PVEU6IF93YWl0X2Zvcl92YmxhbmtzKCkgb25seSB3YWl0cyBmb3IgdmJsYW5rIG9uCisJICogZW5hYmxlZCBDUlRDcy4gIFNvIHdlIGVuZCB1cCBmYXVsdGluZyB3aGVuIGRpc2FibGluZworCSAqIGR1ZSB0byAocG90ZW50aWFsbHkpIHVucmVmJ2luZyB0aGUgb3V0Z29pbmcgZmIncworCSAqIGJlZm9yZSB0aGUgdmJsYW5rIHdoZW4gdGhlIGRpc2FibGUgaGFzIGxhdGNoZWQuCisJICoKKwkgKiBCdXQgaWYgaXQgZGlkIHdhaXQgb24gZGlzYWJsZWQgKG9yIG5ld2x5IGRpc2FibGVkKQorCSAqIENSVENzLCB0aGF0IHdvdWxkIGJlIHJhY3kgKGllLiB3ZSBjb3VsZCBoYXZlIG1pc3NlZAorCSAqIHRoZSBpcnEuICBXZSBuZWVkIHNvbWUgd2F5IHRvIHBvbGwgZm9yIHBpcGUgc2h1dAorCSAqIGRvd24uICBPciBqdXN0IGxpdmUgd2l0aCBvY2Nhc2lvbmFsbHkgaGl0dGluZyB0aGUKKwkgKiB0aW1lb3V0IGluIHRoZSBDUlRDIGRpc2FibGUgcGF0aCAod2hpY2ggcmVhbGx5IHNob3VsZAorCSAqIG5vdCBiZSBjcml0aWNhbCBwYXRoKQorCSAqLworCiAJZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcyhkZXYsIHN0YXRlKTsKIAogCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOwogCiAJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRlKTsKIAorCWVuZF9hdG9taWMoZGV2LT5kZXZfcHJpdmF0ZSwgYy0+Y3J0Y19tYXNrKTsKKwogCWtmcmVlKGMpOwogfQogCkBAIC05Nyw4ICsxNDMsOSBAQAogaW50IG1zbV9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwgYm9vbCBhc3luYykKIHsKLQlzdHJ1Y3QgbXNtX2NvbW1pdCAqYzsKIAlpbnQgbnBsYW5lcyA9IGRldi0+bW9kZV9jb25maWcubnVtX3RvdGFsX3BsYW5lOworCWludCBuY3J0Y3MgPSBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjOworCXN0cnVjdCBtc21fY29tbWl0ICpjOwogCWludCBpLCByZXQ7CiAKIAlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wcmVwYXJlX3BsYW5lcyhkZXYsIHN0YXRlKTsKQEAgLTEwNiw2ICsxNTMsMTggQEAKIAkJcmV0dXJuIHJldDsKIAogCWMgPSBuZXdfY29tbWl0KHN0YXRlKTsKKwlpZiAoIWMpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBGaWd1cmUgb3V0IHdoYXQgY3J0Y3Mgd2UgaGF2ZToKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKyspIHsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUtPmNydGNzW2ldOworCQlpZiAoIWNydGMpCisJCQljb250aW51ZTsKKwkJYy0+Y3J0Y19tYXNrIHw9ICgxIDw8IGRybV9jcnRjX2luZGV4KGNydGMpKTsKKwl9CiAKIAkvKgogCSAqIEZpZ3VyZSBvdXQgd2hhdCBmZW5jZSB0byB3YWl0IGZvcjoKQEAgLTEyMiw2ICsxODEsMTQgQEAKIAl9CiAKIAkvKgorCSAqIFdhaXQgZm9yIHBlbmRpbmcgdXBkYXRlcyBvbiBhbnkgb2YgdGhlIHNhbWUgY3J0YydzIGFuZCB0aGVuCisJICogbWFyayBvdXIgc2V0IG9mIGNydGMncyBhcyBidXN5OgorCSAqLworCXJldCA9IHN0YXJ0X2F0b21pYyhkZXYtPmRldl9wcml2YXRlLCBjLT5jcnRjX21hc2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgogCSAqIFRoaXMgaXMgdGhlIHBvaW50IG9mIG5vIHJldHVybiAtIGV2ZXJ5dGhpbmcgYmVsb3cgbmV2ZXIgZmFpbHMgZXhjZXB0CiAJICogd2hlbiB0aGUgaHcgZ29lcyBib25naGl0cy4gV2hpY2ggbWVhbnMgd2UgY2FuIGNvbW1pdCB0aGUgbmV3IHN0YXRlIG9uCiAJICogdGhlIHNvZnR3YXJlIHNpZGUgbm93LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwppbmRleCBjNzk1MjE3Li45YTYxNTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwpAQCAtMTkzLDYgKzE5Myw3IEBACiAKIAlwcml2LT53cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCJtc20iLCAwKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5mZW5jZV9ldmVudCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+cGVuZGluZ19jcnRjc19ldmVudCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+aW5hY3RpdmVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZlbmNlX2Nicyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCmluZGV4IDEzNjMwMzguLmI2OWVmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCkBAIC05Niw2ICs5NiwxMCBAQAogCS8qIGNhbGxiYWNrcyBkZWZlcnJlZCB1bnRpbCBibyBpcyBpbmFjdGl2ZTogKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZlbmNlX2NiczsKIAorCS8qIGNydGNzIHBlbmRpbmcgYXN5bmMgYXRvbWljIHVwZGF0ZXM6ICovCisJdWludDMyX3QgcGVuZGluZ19jcnRjczsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBwZW5kaW5nX2NydGNzX2V2ZW50OworCiAJLyogcmVnaXN0ZXJlZCBNTVVzOiAqLwogCXVuc2lnbmVkIGludCBudW1fbW11czsKIAlzdHJ1Y3QgbXNtX21tdSAqbW11c1tOVU1fRE9NQUlOU107CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmJkZXYuYwppbmRleCA5NGQ1NWU1Li4xZjNhZjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9mYmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiZGV2LmMKQEAgLTE5MCw4ICsxOTAsNyBAQAogZmFpbDoKIAogCWlmIChyZXQpIHsKLQkJaWYgKGZiaSkKLQkJCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKKwkJZnJhbWVidWZmZXJfcmVsZWFzZShmYmkpOwogCQlpZiAoZmIpIHsKIAkJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZ2lzdGVyX3ByaXZhdGUoZmIpOwogCQkJZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZShmYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCmluZGV4IDRhNmYwZTQuLjQ5ZGVhNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCkBAIC01MzUsOCArNTM1LDcgQEAKIAkJCWRybV9mcmVlX2xhcmdlKG1zbV9vYmotPnBhZ2VzKTsKIAogCX0gZWxzZSB7Ci0JCWlmIChtc21fb2JqLT52YWRkcikKLQkJCXZ1bm1hcChtc21fb2JqLT52YWRkcik7CisJCXZ1bm1hcChtc21fb2JqLT52YWRkcik7CiAJCXB1dF9wYWdlcyhvYmopOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9jb3JlL2V2ZW50LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2NvcmUvZXZlbnQuYwppbmRleCBmZjJiNDM0Li43NjA5NDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2NvcmUvZXZlbnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2NvcmUvZXZlbnQuYwpAQCAtMjYsNyArMjYsNyBAQAogdm9pZAogbnZrbV9ldmVudF9wdXQoc3RydWN0IG52a21fZXZlbnQgKmV2ZW50LCB1MzIgdHlwZXMsIGludCBpbmRleCkKIHsKLQlCVUdfT04oIXNwaW5faXNfbG9ja2VkKCZldmVudC0+cmVmc19sb2NrKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZldmVudC0+cmVmc19sb2NrKTsKIAl3aGlsZSAodHlwZXMpIHsKIAkJaW50IHR5cGUgPSBfX2Zmcyh0eXBlcyk7IHR5cGVzICY9IH4oMSA8PCB0eXBlKTsKIAkJaWYgKC0tZXZlbnQtPnJlZnNbaW5kZXggKiBldmVudC0+dHlwZXNfbnIgKyB0eXBlXSA9PSAwKSB7CkBAIC0zOSw3ICszOSw3IEBACiB2b2lkCiBudmttX2V2ZW50X2dldChzdHJ1Y3QgbnZrbV9ldmVudCAqZXZlbnQsIHUzMiB0eXBlcywgaW50IGluZGV4KQogewotCUJVR19PTighc3Bpbl9pc19sb2NrZWQoJmV2ZW50LT5yZWZzX2xvY2spKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmV2ZW50LT5yZWZzX2xvY2spOwogCXdoaWxlICh0eXBlcykgewogCQlpbnQgdHlwZSA9IF9fZmZzKHR5cGVzKTsgdHlwZXMgJj0gfigxIDw8IHR5cGUpOwogCQlpZiAoKytldmVudC0+cmVmc1tpbmRleCAqIGV2ZW50LT50eXBlc19uciArIHR5cGVdID09IDEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvY29yZS9ub3RpZnkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvY29yZS9ub3RpZnkuYwppbmRleCBkMWJjZGU1Li44MzlhMzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2NvcmUvbm90aWZ5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9jb3JlL25vdGlmeS5jCkBAIC05OCw3ICs5OCw3IEBACiAJc3RydWN0IG52a21fZXZlbnQgKmV2ZW50ID0gbm90aWZ5LT5ldmVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JQlVHX09OKCFzcGluX2lzX2xvY2tlZCgmZXZlbnQtPmxpc3RfbG9jaykpOworCWFzc2VydF9zcGluX2xvY2tlZCgmZXZlbnQtPmxpc3RfbG9jayk7CiAJQlVHX09OKHNpemUgIT0gbm90aWZ5LT5zaXplKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZldmVudC0+cmVmc19sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9kZXZpY2UvbnZlMC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZGV2aWNlL252ZTAuYwppbmRleCA2NzRkYTFmLi43MzI5MjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9kZXZpY2UvbnZlMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2RldmljZS9udmUwLmMKQEAgLTI0OSw2ICsyNDksMzkgQEAKIAkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX1BQUCAgICBdID0gJm52YzBfcHBwX29jbGFzczsKIAkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX1BFUkZNT05dID0gJm52ZjBfcGVyZm1vbl9vY2xhc3M7CiAJCWJyZWFrOworCWNhc2UgMHgxMDY6CisJCWRldmljZS0+Y25hbWUgPSAiR0syMDhCIjsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX1ZCSU9TICBdID0gJm5vdXZlYXVfYmlvc19vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9HUElPICAgXSA9ICBudmUwX2dwaW9fb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfSTJDICAgIF0gPSAgbnZlMF9pMmNfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfRlVTRSAgIF0gPSAmZ2YxMDBfZnVzZV9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9DTE9DSyAgXSA9ICZudmUwX2Nsb2NrX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX1RIRVJNICBdID0gJm52ZDBfdGhlcm1fb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfTVhNICAgIF0gPSAmbnY1MF9teG1fb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfREVWSU5JVF0gPSAgbnZjMF9kZXZpbml0X29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX01DICAgICBdID0gIGdrMjBhX21jX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX0JVUyAgICBdID0gIG52YzBfYnVzX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX1RJTUVSICBdID0gJm52MDRfdGltZXJfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfRkIgICAgIF0gPSAgbnZlMF9mYl9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9MVEMgICAgXSA9ICBnazEwNF9sdGNfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfSUJVUyAgIF0gPSAmbnZlMF9pYnVzX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX0lOU1RNRU1dID0gIG52NTBfaW5zdG1lbV9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9WTSAgICAgXSA9ICZudmMwX3ZtbWdyX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX0JBUiAgICBdID0gJm52YzBfYmFyX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX1BXUiAgICBdID0gIG52MTA4X3B3cl9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9WT0xUICAgXSA9ICZudjQwX3ZvbHRfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfRE1BT0JKIF0gPSAgbnZkMF9kbWFlbmdfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfRklGTyAgIF0gPSAgbnYxMDhfZmlmb19vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9TVyAgICAgXSA9ICBudmMwX3NvZnR3YXJlX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX0dSICAgICBdID0gIG52MTA4X2dyYXBoX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX0RJU1AgICBdID0gIG52ZjBfZGlzcF9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9DT1BZMCAgXSA9ICZudmUwX2NvcHkwX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX0NPUFkxICBdID0gJm52ZTBfY29weTFfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfQ09QWTIgIF0gPSAmbnZlMF9jb3B5Ml9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9CU1AgICAgXSA9ICZudmUwX2JzcF9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9WUCAgICAgXSA9ICZudmUwX3ZwX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX1BQUCAgICBdID0gJm52YzBfcHBwX29jbGFzczsKKwkJYnJlYWs7CiAJY2FzZSAweDEwODoKIAkJZGV2aWNlLT5jbmFtZSA9ICJHSzIwOCI7CiAJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9WQklPUyAgXSA9ICZub3V2ZWF1X2Jpb3Nfb2NsYXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvYmlvcy9zaGFkb3dyYW1pbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvYmlvcy9zaGFkb3dyYW1pbi5jCmluZGV4IDVlNThiYmEuLmE3YTg5MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvc3ViZGV2L2Jpb3Mvc2hhZG93cmFtaW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL3N1YmRldi9iaW9zL3NoYWRvd3JhbWluLmMKQEAgLTQ0LDggKzQ0LDEwIEBACiBwcmFtaW5fZmluaSh2b2lkICpkYXRhKQogewogCXN0cnVjdCBwcml2ICpwcml2ID0gZGF0YTsKLQludl93cjMyKHByaXYtPmJpb3MsIDB4MDAxNzAwLCBwcml2LT5iYXIwKTsKLQlrZnJlZShwcml2KTsKKwlpZiAocHJpdikgeworCQludl93cjMyKHByaXYtPmJpb3MsIDB4MDAxNzAwLCBwcml2LT5iYXIwKTsKKwkJa2ZyZWUocHJpdik7CisJfQogfQogCiBzdGF0aWMgdm9pZCAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL3N1YmRldi9mYi9yYW1udmFhLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL3N1YmRldi9mYi9yYW1udmFhLmMKaW5kZXggMDBmMmNhNy4uMDMzYThlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvZmIvcmFtbnZhYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvc3ViZGV2L2ZiL3JhbW52YWEuYwpAQCAtMjQsMzQgKzI0LDcxIEBACiAKICNpbmNsdWRlICJudjUwLmgiCiAKK3N0cnVjdCBudmFhX3JhbV9wcml2IHsKKwlzdHJ1Y3Qgbm91dmVhdV9yYW0gYmFzZTsKKwl1NjQgcG9sbGVyX2Jhc2U7Cit9OworCiBzdGF0aWMgaW50CiBudmFhX3JhbV9jdG9yKHN0cnVjdCBub3V2ZWF1X29iamVjdCAqcGFyZW50LCBzdHJ1Y3Qgbm91dmVhdV9vYmplY3QgKmVuZ2luZSwKIAkgICAgICBzdHJ1Y3Qgbm91dmVhdV9vY2xhc3MgKm9jbGFzcywgdm9pZCAqZGF0YSwgdTMyIGRhdGFzaXplLAogCSAgICAgIHN0cnVjdCBub3V2ZWF1X29iamVjdCAqKnBvYmplY3QpCiB7Ci0JY29uc3QgdTMyIHJzdmRfaGVhZCA9ICggMjU2ICogMTAyNCkgPj4gMTI7IC8qIHZnYSBtZW1vcnkgKi8KLQljb25zdCB1MzIgcnN2ZF90YWlsID0gKDEwMjQgKiAxMDI0KSA+PiAxMjsgLyogdmJpb3MgZXRjICovCisJdTMyIHJzdmRfaGVhZCA9ICggMjU2ICogMTAyNCk7IC8qIHZnYSBtZW1vcnkgKi8KKwl1MzIgcnN2ZF90YWlsID0gKDEwMjQgKiAxMDI0KTsgLyogdmJpb3MgZXRjICovCiAJc3RydWN0IG5vdXZlYXVfZmIgKnBmYiA9IG5vdXZlYXVfZmIocGFyZW50KTsKLQlzdHJ1Y3Qgbm91dmVhdV9yYW0gKnJhbTsKKwlzdHJ1Y3QgbnZhYV9yYW1fcHJpdiAqcHJpdjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gbm91dmVhdV9yYW1fY3JlYXRlKHBhcmVudCwgZW5naW5lLCBvY2xhc3MsICZyYW0pOwotCSpwb2JqZWN0ID0gbnZfb2JqZWN0KHJhbSk7CisJcmV0ID0gbm91dmVhdV9yYW1fY3JlYXRlKHBhcmVudCwgZW5naW5lLCBvY2xhc3MsICZwcml2KTsKKwkqcG9iamVjdCA9IG52X29iamVjdChwcml2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmFtLT5zaXplID0gbnZfcmQzMihwZmIsIDB4MTAwMjBjKTsKLQlyYW0tPnNpemUgPSAocmFtLT5zaXplICYgMHhmZmZmZmYwMCkgfCAoKHJhbS0+c2l6ZSAmIDB4MDAwMDAwZmYpIDw8IDMyKTsKKwlwcml2LT5iYXNlLnR5cGUgICA9IE5WX01FTV9UWVBFX1NUT0xFTjsKKwlwcml2LT5iYXNlLnN0b2xlbiA9ICh1NjQpbnZfcmQzMihwZmIsIDB4MTAwZTEwKSA8PCAxMjsKKwlwcml2LT5iYXNlLnNpemUgICA9ICh1NjQpbnZfcmQzMihwZmIsIDB4MTAwZTE0KSA8PCAxMjsKIAotCXJldCA9IG5vdXZlYXVfbW1faW5pdCgmcGZiLT52cmFtLCByc3ZkX2hlYWQsIChyYW0tPnNpemUgPj4gMTIpIC0KLQkJCSAgICAgIChyc3ZkX2hlYWQgKyByc3ZkX3RhaWwpLCAxKTsKKwlyc3ZkX3RhaWwgKz0gMHgxMDAwOworCXByaXYtPnBvbGxlcl9iYXNlID0gcHJpdi0+YmFzZS5zaXplIC0gcnN2ZF90YWlsOworCisJcmV0ID0gbm91dmVhdV9tbV9pbml0KCZwZmItPnZyYW0sIHJzdmRfaGVhZCA+PiAxMiwKKwkJCSAgICAgIChwcml2LT5iYXNlLnNpemUgIC0gKHJzdmRfaGVhZCArIHJzdmRfdGFpbCkpID4+IDEyLAorCQkJICAgICAgMSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJhbS0+dHlwZSAgID0gTlZfTUVNX1RZUEVfU1RPTEVOOwotCXJhbS0+c3RvbGVuID0gKHU2NCludl9yZDMyKHBmYiwgMHgxMDBlMTApIDw8IDEyOwotCXJhbS0+Z2V0ID0gbnY1MF9yYW1fZ2V0OwotCXJhbS0+cHV0ID0gbnY1MF9yYW1fcHV0OworCXByaXYtPmJhc2UuZ2V0ID0gbnY1MF9yYW1fZ2V0OworCXByaXYtPmJhc2UucHV0ID0gbnY1MF9yYW1fcHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitudmFhX3JhbV9pbml0KHN0cnVjdCBub3V2ZWF1X29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBub3V2ZWF1X2ZiICpwZmIgPSBub3V2ZWF1X2ZiKG9iamVjdCk7CisJc3RydWN0IG52YWFfcmFtX3ByaXYgKnByaXYgPSAodm9pZCAqKW9iamVjdDsKKwlpbnQgcmV0OworCXU2NCBkbmlzbywgaG9zdG5iLCBmbHVzaDsKKworCXJldCA9IG5vdXZlYXVfcmFtX2luaXQoJnByaXYtPmJhc2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkbmlzbyAgPSAoKHByaXYtPmJhc2Uuc2l6ZSAtIChwcml2LT5wb2xsZXJfYmFzZSArIDB4MDApKSA+PiA1KSAtIDE7CisJaG9zdG5iID0gKChwcml2LT5iYXNlLnNpemUgLSAocHJpdi0+cG9sbGVyX2Jhc2UgKyAweDIwKSkgPj4gNSkgLSAxOworCWZsdXNoICA9ICgocHJpdi0+YmFzZS5zaXplIC0gKHByaXYtPnBvbGxlcl9iYXNlICsgMHg0MCkpID4+IDUpIC0gMTsKKworCS8qIEVuYWJsZSBOSVNPIHBvbGxlciBmb3IgdmFyaW91cyBjbGllbnRzIGFuZCBzZXQgdGhlaXIgYXNzb2NpYXRlZAorCSAqIHJlYWQgYWRkcmVzcywgb25seSBmb3IgTUNQNzcvNzggYW5kIE1DUDc5LzdBLiAoZmQjMjU3MDEpCisJICovCisJbnZfd3IzMihwZmIsIDB4MTAwYzE4LCBkbmlzbyk7CisJbnZfbWFzayhwZmIsIDB4MTAwYzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAxKTsKKwludl93cjMyKHBmYiwgMHgxMDBjMWMsIGhvc3RuYik7CisJbnZfbWFzayhwZmIsIDB4MTAwYzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAyKTsKKwludl93cjMyKHBmYiwgMHgxMDBjMjQsIGZsdXNoKTsKKwludl9tYXNrKHBmYiwgMHgxMDBjMTQsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYwLDcgKzk3LDcgQEAKIAkub2Z1bmNzID0gJihzdHJ1Y3Qgbm91dmVhdV9vZnVuY3MpIHsKIAkJLmN0b3IgPSBudmFhX3JhbV9jdG9yLAogCQkuZHRvciA9IF9ub3V2ZWF1X3JhbV9kdG9yLAotCQkuaW5pdCA9IF9ub3V2ZWF1X3JhbV9pbml0LAorCQkuaW5pdCA9IG52YWFfcmFtX2luaXQsCiAJCS5maW5pID0gX25vdXZlYXVfcmFtX2ZpbmksCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL3N1YmRldi9tYy9udjRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL3N1YmRldi9tYy9udjRjLmMKaW5kZXggYTc1YzM1Yy4uMTY1NDAxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvbWMvbnY0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvc3ViZGV2L21jL252NGMuYwpAQCAtMjQsMTMgKzI0LDYgQEAKIAogI2luY2x1ZGUgIm52MDQuaCIKIAotc3RhdGljIHZvaWQKLW52NGNfbWNfbXNpX3JlYXJtKHN0cnVjdCBub3V2ZWF1X21jICpwbWMpCi17Ci0Jc3RydWN0IG52MDRfbWNfcHJpdiAqcHJpdiA9ICh2b2lkICopcG1jOwotCW52X3dyMDgocHJpdiwgMHgwODgwNTAsIDB4ZmYpOwotfQotCiBzdHJ1Y3Qgbm91dmVhdV9vY2xhc3MgKgogbnY0Y19tY19vY2xhc3MgPSAmKHN0cnVjdCBub3V2ZWF1X21jX29jbGFzcykgewogCS5iYXNlLmhhbmRsZSA9IE5WX1NVQkRFVihNQywgMHg0YyksCkBAIC00MSw1ICszNCw0IEBACiAJCS5maW5pID0gX25vdXZlYXVfbWNfZmluaSwKIAl9LAogCS5pbnRyID0gbnYwNF9tY19pbnRyLAotCS5tc2lfcmVhcm0gPSBudjRjX21jX21zaV9yZWFybSwKIH0uYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwppbmRleCAyMWVjNTYxLi5iYmEyOTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCkBAIC0xNTcyLDggKzE1NzIsMTAgQEAKIAkgKiBzbyB1c2UgdGhlIERNQSBBUEkgZm9yIHRoZW0uCiAJICovCiAJaWYgKCFudl9kZXZpY2VfaXNfY3B1X2NvaGVyZW50KGRldmljZSkgJiYKLQkgICAgdHRtLT5jYWNoaW5nX3N0YXRlID09IHR0X3VuY2FjaGVkKQorCSAgICB0dG0tPmNhY2hpbmdfc3RhdGUgPT0gdHRfdW5jYWNoZWQpIHsKIAkJdHRtX2RtYV91bnBvcHVsYXRlKHR0bV9kbWEsIGRldi0+ZGV2KTsKKwkJcmV0dXJuOworCX0KIAogI2lmIF9fT1NfSEFTX0FHUAogCWlmIChkcm0tPmFncC5zdGF0ID09IEVOQUJMRUQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMKaW5kZXggNWQ5MzkwMi4uZjgwNDI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMKQEAgLTg3Niw3ICs4NzYsNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQliby0+Z2VtLmR1bWIgPSB0cnVlOwogCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZiby0+Z2VtLCAmYXJncy0+aGFuZGxlKTsKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmYm8tPmdlbSk7CiAJcmV0dXJuIHJldDsKQEAgLTg5MiwxNCArODkxLDYgQEAKIAlnZW0gPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CiAJaWYgKGdlbSkgewogCQlzdHJ1Y3Qgbm91dmVhdV9ibyAqYm8gPSBub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsKLQotCQkvKgotCQkgKiBXZSBkb24ndCBhbGxvdyBkdW1iIG1tYXBzIG9uIG9iamVjdHMgY3JlYXRlZCB1c2luZyBhbm90aGVyCi0JCSAqIGludGVyZmFjZS4KLQkJICovCi0JCVdBUk5fT05DRSghKGdlbS0+ZHVtYiB8fCBnZW0tPmltcG9ydF9hdHRhY2gpLAotCQkJICAiSWxsZWdhbCBkdW1iIG1hcCBvZiBhY2NlbGVyYXRlZCBidWZmZXIuXG4iKTsKLQogCQkqcG9mZnNldCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmYm8tPmJvLnZtYV9ub2RlKTsKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwppbmRleCAyOGQ1MWEyLi5iZjBmOWUyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwpAQCAtMzYsNyArMzYsMTQgQEAKIG5vdXZlYXVfZ2VtX29iamVjdF9kZWwoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0pCiB7CiAJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsKKwlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfYmRldihudmJvLT5iby5iZGV2KTsKIAlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gJm52Ym8tPmJvOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRybS0+ZGV2LT5kZXY7CisJaW50IHJldDsKKworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKKwlpZiAoV0FSTl9PTihyZXQgPCAwICYmIHJldCAhPSAtRUFDQ0VTKSkKKwkJcmV0dXJuOwogCiAJaWYgKGdlbS0+aW1wb3J0X2F0dGFjaCkKIAkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KGdlbSwgbnZiby0+Ym8uc2cpOwpAQCAtNDYsNiArNTMsOSBAQAogCS8qIHJlc2V0IGZpbHAgc28gbm91dmVhdV9ib19kZWxfdHRtKCkgY2FuIHRlc3QgZm9yIGl0ICovCiAJZ2VtLT5maWxwID0gTlVMTDsKIAl0dG1fYm9fdW5yZWYoJmJvKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChkZXYpOwogfQogCiBpbnQKQEAgLTUzLDcgKzYzLDkgQEAKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9jbGkgKmNsaSA9IG5vdXZlYXVfY2xpKGZpbGVfcHJpdik7CiAJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsKKwlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfYmRldihudmJvLT5iby5iZGV2KTsKIAlzdHJ1Y3Qgbm91dmVhdV92bWEgKnZtYTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm0tPmRldi0+ZGV2OwogCWludCByZXQ7CiAKIAlpZiAoIWNsaS0+dm0pCkBAIC03MSwxMSArODMsMTYgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gbm91dmVhdV9ib192bWFfYWRkKG52Ym8sIGNsaS0+dm0sIHZtYSk7Ci0JCWlmIChyZXQpIHsKLQkJCWtmcmVlKHZtYSk7CisJCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FQUNDRVMpCiAJCQlnb3RvIG91dDsKLQkJfQorCisJCXJldCA9IG5vdXZlYXVfYm9fdm1hX2FkZChudmJvLCBjbGktPnZtLCB2bWEpOworCQlpZiAocmV0KQorCQkJa2ZyZWUodm1hKTsKKworCQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7CisJCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGRldik7CiAJfSBlbHNlIHsKIAkJdm1hLT5yZWZjb3VudCsrOwogCX0KQEAgLTEyOSw2ICsxNDYsOCBAQAogewogCXN0cnVjdCBub3V2ZWF1X2NsaSAqY2xpID0gbm91dmVhdV9jbGkoZmlsZV9wcml2KTsKIAlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibyA9IG5vdXZlYXVfZ2VtX29iamVjdChnZW0pOworCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9iZGV2KG52Ym8tPmJvLmJkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRybS0+ZGV2LT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfdm1hICp2bWE7CiAJaW50IHJldDsKIApAQCAtMTQxLDggKzE2MCwxNCBAQAogCiAJdm1hID0gbm91dmVhdV9ib192bWFfZmluZChudmJvLCBjbGktPnZtKTsKIAlpZiAodm1hKSB7Ci0JCWlmICgtLXZtYS0+cmVmY291bnQgPT0gMCkKLQkJCW5vdXZlYXVfZ2VtX29iamVjdF91bm1hcChudmJvLCB2bWEpOworCQlpZiAoLS12bWEtPnJlZmNvdW50ID09IDApIHsKKwkJCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKKwkJCWlmICghV0FSTl9PTihyZXQgPCAwICYmIHJldCAhPSAtRUFDQ0VTKSkgeworCQkJCW5vdXZlYXVfZ2VtX29iamVjdF91bm1hcChudmJvLCB2bWEpOworCQkJCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koZGV2KTsKKwkJCQlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChkZXYpOworCQkJfQorCQl9CiAJfQogCXR0bV9ib191bnJlc2VydmUoJm52Ym8tPmJvKTsKIH0KQEAgLTQ0NCw5ICs0NjksNiBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkobnZibywgbGlzdCwgZW50cnkpIHsKIAkJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2JvICpiID0gJnBiYm9bbnZiby0+cGJib19pbmRleF07CiAKLQkJV0FSTl9PTkNFKG52Ym8tPmdlbS5kdW1iLAotCQkJICAiR1BVIHVzZSBvZiBkdW1iIGJ1ZmZlciBpcyBpbGxlZ2FsLlxuIik7Ci0KIAkJcmV0ID0gbm91dmVhdV9nZW1fc2V0X2RvbWFpbigmbnZiby0+Z2VtLCBiLT5yZWFkX2RvbWFpbnMsCiAJCQkJCSAgICAgYi0+d3JpdGVfZG9tYWlucywKIAkJCQkJICAgICBiLT52YWxpZF9kb21haW5zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3R0bS5jCmluZGV4IDc1M2E2ZGUuLjNkMWNmY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90dG0uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIm5vdXZlYXVfdHRtLmgiCiAjaW5jbHVkZSAibm91dmVhdV9nZW0uaCIKIAorI2luY2x1ZGUgImRybV9sZWdhY3kuaCIKIHN0YXRpYyBpbnQKIG5vdXZlYXVfdnJhbV9tYW5hZ2VyX2luaXQoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sIHVuc2lnbmVkIGxvbmcgcHNpemUpCiB7CkBAIC0yODEsNyArMjgyLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfZHJtKGZpbGVfcHJpdi0+bWlub3ItPmRldik7CiAKIAlpZiAodW5saWtlbHkodm1hLT52bV9wZ29mZiA8IERSTV9GSUxFX1BBR0VfT0ZGU0VUKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBkcm1fbGVnYWN5X21tYXAoZmlscCwgdm1hKTsKIAogCXJldHVybiB0dG1fYm9fbW1hcChmaWxwLCB2bWEsICZkcm0tPnR0bS5iZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKaW5kZXggZDU5ZWM0OS4uZWQ2NDRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKQEAgLTE4NTEsMTAgKzE4NTEsOSBAQAogCQkJCXJldHVybiBwbGw7CiAJCX0KIAkJLyogb3RoZXJ3aXNlLCBwaWNrIG9uZSBvZiB0aGUgcGxscyAqLwotCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX0tBVkVSSSkgfHwKLQkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9LQUJJTkkpIHx8CisJCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfS0FCSU5JKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX01VTExJTlMpKSB7Ci0JCQkvKiBLQi9LVi9NTCBoYXMgUFBMTDEgYW5kIFBQTEwyICovCisJCQkvKiBLQi9NTCBoYXMgUFBMTDEgYW5kIFBQTEwyICovCiAJCQlwbGxfaW5fdXNlID0gcmFkZW9uX2dldF9wbGxfdXNlX21hc2soY3J0Yyk7CiAJCQlpZiAoIShwbGxfaW5fdXNlICYgKDEgPDwgQVRPTV9QUExMMikpKQogCQkJCXJldHVybiBBVE9NX1BQTEwyOwpAQCAtMTg2Myw3ICsxODYyLDcgQEAKIAkJCURSTV9FUlJPUigidW5hYmxlIHRvIGFsbG9jYXRlIGEgUFBMTFxuIik7CiAJCQlyZXR1cm4gQVRPTV9QUExMX0lOVkFMSUQ7CiAJCX0gZWxzZSB7Ci0JCQkvKiBDSSBoYXMgUFBMTDAsIFBQTEwxLCBhbmQgUFBMTDIgKi8KKwkJCS8qIENJL0tWIGhhcyBQUExMMCwgUFBMTDEsIGFuZCBQUExMMiAqLwogCQkJcGxsX2luX3VzZSA9IHJhZGVvbl9nZXRfcGxsX3VzZV9tYXNrKGNydGMpOwogCQkJaWYgKCEocGxsX2luX3VzZSAmICgxIDw8IEFUT01fUFBMTDIpKSkKIAkJCQlyZXR1cm4gQVRPTV9QUExMMjsKQEAgLTIxNTUsNiArMjE1NCw3IEBACiAJY2FzZSBBVE9NX1BQTEwwOgogCQkvKiBkaXNhYmxlIHRoZSBwcGxsICovCiAJCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfQVJVQkEpIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfS0FWRVJJKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX0JPTkFJUkUpIHx8CiAJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfSEFXQUlJKSkKIAkJCWF0b21iaW9zX2NydGNfcHJvZ3JhbV9wbGwoY3J0YywgcmFkZW9uX2NydGMtPmNydGNfaWQsIHJhZGVvbl9jcnRjLT5wbGxfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKaW5kZXggMTFiYTlkMi4uZGI0MmE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwpAQCAtNDkyLDYgKzQ5MiwxMCBAQAogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpkaWdfY29ubmVjdG9yOwogCWludCBkcF9jbG9jazsKIAorCWlmICgobW9kZS0+Y2xvY2sgPiAzNDAwMDApICYmCisJICAgICghcmFkZW9uX2Nvbm5lY3Rvcl9pc19kcDEyX2NhcGFibGUoY29ubmVjdG9yKSkpCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KQogCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwogCWRpZ19jb25uZWN0b3IgPSByYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npay5jCmluZGV4IDZkY2RlMzcuLjY0ZmRhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYwpAQCAtNjAzMyw2ICs2MDMzLDE3IEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMSA8PCB2bV9pZCk7CiAKKwkvKiB3YWl0IGZvciB0aGUgaW52YWxpZGF0ZSB0byBjb21wbGV0ZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19XQUlUX1JFR19NRU0sIDUpKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAoV0FJVF9SRUdfTUVNX09QRVJBVElPTigwKSB8IC8qIHdhaXQgKi8KKwkJCQkgV0FJVF9SRUdfTUVNX0ZVTkNUSU9OKDApIHwgIC8qIGFsd2F5cyAqLworCQkJCSBXQUlUX1JFR19NRU1fRU5HSU5FKDApKSk7IC8qIG1lICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgVk1fSU5WQUxJREFURV9SRVFVRVNUID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOyAvKiByZWYgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsgLyogbWFzayAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDB4MjApOyAvKiBwb2xsIGludGVydmFsICovCisKIAkvKiBjb21wdXRlIGRvZXNuJ3QgaGF2ZSBQRlAgKi8KIAlpZiAodXNlcGZwKSB7CiAJCS8qIHN5bmMgUEZQIHRvIE1FLCBvdGhlcndpc2Ugd2UgbWlnaHQgZ2V0IGludmFsaWQgUEZQIHJlYWRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npa19zZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npa19zZG1hLmMKaW5kZXggZGRlNWM3ZS4uNDJjZDBjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWtfc2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrX3NkbWEuYwpAQCAtODE2LDcgKzgxNiw2IEBACiAJCWZvciAoOyBuZHcgPiAwOyBuZHcgLT0gMiwgLS1jb3VudCwgcGUgKz0gOCkgewogCQkJaWYgKGZsYWdzICYgUjYwMF9QVEVfU1lTVEVNKSB7CiAJCQkJdmFsdWUgPSByYWRlb25fdm1fbWFwX2dhcnQocmRldiwgYWRkcik7Ci0JCQkJdmFsdWUgJj0gMHhGRkZGRkZGRkZGRkZGMDAwVUxMOwogCQkJfSBlbHNlIGlmIChmbGFncyAmIFI2MDBfUFRFX1ZBTElEKSB7CiAJCQkJdmFsdWUgPSBhZGRyOwogCQkJfSBlbHNlIHsKQEAgLTkwMyw2ICs5MDIsOSBAQAogdm9pZCBjaWtfZG1hX3ZtX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX3JpbmcgKnJpbmcsCiAJCSAgICAgIHVuc2lnbmVkIHZtX2lkLCB1aW50NjRfdCBwZF9hZGRyKQogeworCXUzMiBleHRyYV9iaXRzID0gKFNETUFfUE9MTF9SRUdfTUVNX0VYVFJBX09QKDApIHwKKwkJCSAgU0RNQV9QT0xMX1JFR19NRU1fRVhUUkFfRlVOQygwKSk7IC8qIGFsd2F5cyAqLworCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgU0RNQV9QQUNLRVQoU0RNQV9PUENPREVfU1JCTV9XUklURSwgMCwgMHhmMDAwKSk7CiAJaWYgKHZtX2lkIDwgOCkgewogCQlyYWRlb25fcmluZ193cml0ZShyaW5nLCAoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIgKyAodm1faWQgPDwgMikpID4+IDIpOwpAQCAtOTQzLDUgKzk0NSwxMiBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFNETUFfUEFDS0VUKFNETUFfT1BDT0RFX1NSQk1fV1JJVEUsIDAsIDB4ZjAwMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFZNX0lOVkFMSURBVEVfUkVRVUVTVCA+PiAyKTsKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAxIDw8IHZtX2lkKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFNETUFfUEFDS0VUKFNETUFfT1BDT0RFX1BPTExfUkVHX01FTSwgMCwgZXh0cmFfYml0cykpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFZNX0lOVkFMSURBVEVfUkVRVUVTVCA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsgLyogcmVmZXJlbmNlICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7IC8qIG1hc2sgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAoMHhmZmYgPDwgMTYpIHwgMTApOyAvKiByZXRyeSBjb3VudCwgcG9sbCBpbnRlcnZhbCAqLwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npa2QuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrZC5oCmluZGV4IGJhODU5ODYuLjAzMDAzZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrZC5oCkBAIC0yMTU2LDQgKzIxNTYsNiBAQAogI2RlZmluZSBBVENfVk1fQVBFUlRVUkUxX0hJR0hfQUREUgkJCQkweDMzMEN1CiAjZGVmaW5lIEFUQ19WTV9BUEVSVFVSRTFfTE9XX0FERFIJCQkJMHgzMzA0dQogCisjZGVmaW5lIElIX1ZNSURfMF9MVVQJCQkJCQkweDNENDB1CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9kY2UzXzFfYWZtdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9kY2UzXzFfYWZtdC5jCmluZGV4IDJmZThjZmMuLmJhZmRmOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZGNlM18xX2FmbXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2RjZTNfMV9hZm10LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCX0KIAogCXNhZF9jb3VudCA9IGRybV9lZGlkX3RvX3NhZChyYWRlb25fY29ubmVjdG9yLT5lZGlkLCAmc2Fkcyk7Ci0JaWYgKHNhZF9jb3VudCA8IDApIHsKKwlpZiAoc2FkX2NvdW50IDw9IDApIHsKIAkJRFJNX0VSUk9SKCJDb3VsZG4ndCByZWFkIFNBRHM6ICVkXG4iLCBzYWRfY291bnQpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9rdl9kcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24va3ZfZHBtLmMKaW5kZXggOWI0MjAwMS4uZTNlOWMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9rdl9kcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2t2X2RwbS5jCkBAIC0yNzQ1LDEzICsyNzQ1LDExIEBACiAJcGktPmVuYWJsZV9hdXRvX3RoZXJtYWxfdGhyb3R0bGluZyA9IHRydWU7CiAJcGktPmRpc2FibGVfbmJfcHMzX2luX2JhdHRlcnkgPSBmYWxzZTsKIAlpZiAocmFkZW9uX2JhcG0gPT0gLTEpIHsKLQkJLyogVGhlcmUgYXJlIHN0YWJpbGl0eSBpc3N1ZXMgcmVwb3J0ZWQgb24gd2l0aAotCQkgKiBiYXBtIGVuYWJsZWQgb24gYW4gYXNyb2NrIHN5c3RlbS4KLQkJICovCi0JCWlmIChyZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTg0OSkKLQkJCXBpLT5iYXBtX2VuYWJsZSA9IGZhbHNlOwotCQllbHNlCisJCS8qIG9ubHkgZW5hYmxlIGJhcG0gb24gS0IsIE1MIGJ5IGRlZmF1bHQgKi8KKwkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX0tBQklOSSB8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9NVUxMSU5TKQogCQkJcGktPmJhcG1fZW5hYmxlID0gdHJ1ZTsKKwkJZWxzZQorCQkJcGktPmJhcG1fZW5hYmxlID0gZmFsc2U7CiAJfSBlbHNlIGlmIChyYWRlb25fYmFwbSA9PSAwKSB7CiAJCXBpLT5iYXBtX2VuYWJsZSA9IGZhbHNlOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKaW5kZXggMzYwZGU5Zi4uYWVhNDhjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYwpAQCAtMjUxNiw2ICsyNTE2LDE2IEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMChWTV9JTlZBTElEQVRFX1JFUVVFU1QsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAxIDw8IHZtX2lkKTsKIAorCS8qIHdhaXQgZm9yIHRoZSBpbnZhbGlkYXRlIHRvIGNvbXBsZXRlICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1dBSVRfUkVHX01FTSwgNSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIChXQUlUX1JFR19NRU1fRlVOQ1RJT04oMCkgfCAgLyogYWx3YXlzICovCisJCQkJIFdBSVRfUkVHX01FTV9FTkdJTkUoMCkpKTsgLyogbWUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBWTV9JTlZBTElEQVRFX1JFUVVFU1QgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7IC8qIHJlZiAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOyAvKiBtYXNrICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMHgyMCk7IC8qIHBvbGwgaW50ZXJ2YWwgKi8KKwogCS8qIHN5bmMgUEZQIHRvIE1FLCBvdGhlcndpc2Ugd2UgbWlnaHQgZ2V0IGludmFsaWQgUEZQIHJlYWRzICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1BGUF9TWU5DX01FLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMHgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmlfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pX2RtYS5jCmluZGV4IDUwZjg4NjEuLmNlNzg3YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmlfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaV9kbWEuYwpAQCAtMzcyLDcgKzM3Miw2IEBACiAJCWZvciAoOyBuZHcgPiAwOyBuZHcgLT0gMiwgLS1jb3VudCwgcGUgKz0gOCkgewogCQkJaWYgKGZsYWdzICYgUjYwMF9QVEVfU1lTVEVNKSB7CiAJCQkJdmFsdWUgPSByYWRlb25fdm1fbWFwX2dhcnQocmRldiwgYWRkcik7Ci0JCQkJdmFsdWUgJj0gMHhGRkZGRkZGRkZGRkZGMDAwVUxMOwogCQkJfSBlbHNlIGlmIChmbGFncyAmIFI2MDBfUFRFX1ZBTElEKSB7CiAJCQkJdmFsdWUgPSBhZGRyOwogCQkJfSBlbHNlIHsKQEAgLTQ2Myw1ICs0NjIsMTEgQEAKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCBETUFfUEFDS0VUKERNQV9QQUNLRVRfU1JCTV9XUklURSwgMCwgMCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsICgweGYgPDwgMTYpIHwgKFZNX0lOVkFMSURBVEVfUkVRVUVTVCA+PiAyKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMSA8PCB2bV9pZCk7CisKKwkvKiB3YWl0IGZvciBpbnZhbGlkYXRlIHRvIGNvbXBsZXRlICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgRE1BX1NSQk1fUkVBRF9QQUNLRVQpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsICgweGZmIDw8IDIwKSB8IChWTV9JTlZBTElEQVRFX1JFUVVFU1QgPj4gMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOyAvKiBtYXNrICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7IC8qIHZhbHVlICovCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmlkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pZC5oCmluZGV4IDJlMTJlNGQuLmFkNzEyNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmlkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaWQuaApAQCAtMTEzMyw2ICsxMTMzLDIzIEBACiAjZGVmaW5lCVBBQ0tFVDNfTUVNX1NFTUFQSE9SRQkJCQkweDM5CiAjZGVmaW5lCVBBQ0tFVDNfTVBFR19JTkRFWAkJCQkweDNBCiAjZGVmaW5lCVBBQ0tFVDNfV0FJVF9SRUdfTUVNCQkJCTB4M0MKKyNkZWZpbmUJCVdBSVRfUkVHX01FTV9GVU5DVElPTih4KSAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisgICAgICAgICAgICAgICAgLyogMCAtIGFsd2F5cworCQkgKiAxIC0gPAorCQkgKiAyIC0gPD0KKwkJICogMyAtID09CisJCSAqIDQgLSAhPQorCQkgKiA1IC0gPj0KKwkJICogNiAtID4KKwkJICovCisjZGVmaW5lCQlXQUlUX1JFR19NRU1fTUVNX1NQQUNFKHgpICAgICAgICAgICAgICAgKCh4KSA8PCA0KQorICAgICAgICAgICAgICAgIC8qIDAgLSByZWcKKwkJICogMSAtIG1lbQorCQkgKi8KKyNkZWZpbmUJCVdBSVRfUkVHX01FTV9FTkdJTkUoeCkgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisgICAgICAgICAgICAgICAgLyogMCAtIG1lCisJCSAqIDEgLSBwZnAKKwkJICovCiAjZGVmaW5lCVBBQ0tFVDNfTUVNX1dSSVRFCQkJCTB4M0QKICNkZWZpbmUJUEFDS0VUM19QRlBfU1lOQ19NRQkJCQkweDQyCiAjZGVmaW5lCVBBQ0tFVDNfU1VSRkFDRV9TWU5DCQkJCTB4NDMKQEAgLTEyNzIsNiArMTI4OSwxMyBAQAogCQkJCQkgKDEgPDwgMjEpIHwJCQlcCiAJCQkJCSAoKChuKSAmIDB4RkZGRkYpIDw8IDApKQogCisjZGVmaW5lIERNQV9TUkJNX1BPTExfUEFDS0VUCQkoKDkgPDwgMjgpIHwJCQlcCisJCQkJCSAoMSA8PCAyNykgfAkJCVwKKwkJCQkJICgxIDw8IDI2KSkKKworI2RlZmluZSBETUFfU1JCTV9SRUFEX1BBQ0tFVAkJKCg5IDw8IDI4KSB8CQkJXAorCQkJCQkgKDEgPDwgMjcpKQorCiAvKiBhc3luYyBETUEgUGFja2V0IHR5cGVzICovCiAjZGVmaW5lCURNQV9QQUNLRVRfV1JJVEUJCQkJICAweDIKICNkZWZpbmUJRE1BX1BBQ0tFVF9DT1BZCQkJCQkgIDB4MwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCA3NGYwNmQ1Li4yNzk4MDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwpAQCAtNjQ0LDYgKzY0NCw3IEBACiAJCXJldHVybiByOwogCXJkZXYtPmdhcnQudGFibGVfc2l6ZSA9IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyAqIDQ7CiAJcmRldi0+YXNpYy0+Z2FydC50bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2g7CisJcmRldi0+YXNpYy0+Z2FydC5nZXRfcGFnZV9lbnRyeSA9ICZyMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5OwogCXJkZXYtPmFzaWMtPmdhcnQuc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZTsKIAlyZXR1cm4gcmFkZW9uX2dhcnRfdGFibGVfcmFtX2FsbG9jKHJkZXYpOwogfQpAQCAtNjgxLDExICs2ODIsMTYgQEAKIAlXUkVHMzIoUkFERU9OX0FJQ19ISV9BRERSLCAwKTsKIH0KIAordWludDY0X3QgcjEwMF9wY2lfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKK3sKKwlyZXR1cm4gYWRkcjsKK30KKwogdm9pZCByMTAwX3BjaV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKQorCQkJICAgIHVpbnQ2NF90IGVudHJ5KQogewogCXUzMiAqZ3R0ID0gcmRldi0+Z2FydC5wdHI7Ci0JZ3R0W2ldID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhhZGRyKSk7CisJZ3R0W2ldID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhlbnRyeSkpOwogfQogCiB2b2lkIHIxMDBfcGNpX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKaW5kZXggMDY0YWQ1NS4uMDhkNjhmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKQEAgLTczLDExICs3Myw4IEBACiAjZGVmaW5lIFIzMDBfUFRFX1dSSVRFQUJMRSAoMSA8PCAyKQogI2RlZmluZSBSMzAwX1BURV9SRUFEQUJMRSAgKDEgPDwgMykKIAotdm9pZCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCi0JCQkgICAgICB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKK3VpbnQ2NF90IHJ2MzcwX3BjaWVfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKIHsKLQl2b2lkIF9faW9tZW0gKnB0ciA9IHJkZXYtPmdhcnQucHRyOwotCiAJYWRkciA9IChsb3dlcl8zMl9iaXRzKGFkZHIpID4+IDgpIHwKIAkJKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgMjQpOwogCWlmIChmbGFncyAmIFJBREVPTl9HQVJUX1BBR0VfUkVBRCkKQEAgLTg2LDEwICs4MywxOCBAQAogCQlhZGRyIHw9IFIzMDBfUFRFX1dSSVRFQUJMRTsKIAlpZiAoIShmbGFncyAmIFJBREVPTl9HQVJUX1BBR0VfU05PT1ApKQogCQlhZGRyIHw9IFIzMDBfUFRFX1VOU05PT1BFRDsKKwlyZXR1cm4gYWRkcjsKK30KKwordm9pZCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCisJCQkgICAgICB1aW50NjRfdCBlbnRyeSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0ciA9IHJkZXYtPmdhcnQucHRyOworCiAJLyogb24geDg2IHdlIHdhbnQgdGhpcyB0byBiZSBDUFUgZW5kaWFuLCBvbiBwb3dlcnBjCiAJICogb24gcG93ZXJwYyB3aXRob3V0IEhXIHN3YXBwZXJzLCBpdCdsbCBnZXQgc3dhcHBlZCBvbiB3YXkKIAkgKiBpbnRvIFZSQU0gLSBzbyBubyBuZWVkIGZvciBjcHVfdG9fbGUzMiBvbiBWUkFNIHRhYmxlcyAqLwotCXdyaXRlbChhZGRyLCAoKHZvaWQgX19pb21lbSAqKXB0cikgKyAoaSAqIDQpKTsKKwl3cml0ZWwoZW50cnksICgodm9pZCBfX2lvbWVtICopcHRyKSArIChpICogNCkpOwogfQogCiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC0xMDksNiArMTE0LDcgQEAKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBQQ0lFIGdhcnQgIVxuIik7CiAJcmRldi0+Z2FydC50YWJsZV9zaXplID0gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzICogNDsKIAlyZGV2LT5hc2ljLT5nYXJ0LnRsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOworCXJkZXYtPmFzaWMtPmdhcnQuZ2V0X3BhZ2VfZW50cnkgPSAmcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5OwogCXJkZXYtPmFzaWMtPmdhcnQuc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlOwogCXJldHVybiByYWRlb25fZ2FydF90YWJsZV92cmFtX2FsbG9jKHJkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggNTQ1MjliOC4uM2YyYThkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0yNDIsNiArMjQyLDcgQEAKICAqIER1bW15IHBhZ2UKICAqLwogc3RydWN0IHJhZGVvbl9kdW1teV9wYWdlIHsKKwl1aW50NjRfdAllbnRyeTsKIAlzdHJ1Y3QgcGFnZQkqcGFnZTsKIAlkbWFfYWRkcl90CWFkZHI7CiB9OwpAQCAtNjQ1LDcgKzY0Niw3IEBACiAJdW5zaWduZWQJCQludW1fY3B1X3BhZ2VzOwogCXVuc2lnbmVkCQkJdGFibGVfc2l6ZTsKIAlzdHJ1Y3QgcGFnZQkJCSoqcGFnZXM7Ci0JZG1hX2FkZHJfdAkJCSpwYWdlc19hZGRyOworCXVpbnQ2NF90CQkJKnBhZ2VzX2VudHJ5OwogCWJvb2wJCQkJcmVhZHk7CiB9OwogCkBAIC0xODQ3LDggKzE4NDgsOSBAQAogCS8qIGdhcnQgKi8KIAlzdHJ1Y3QgewogCQl2b2lkICgqdGxiX2ZsdXNoKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisJCXVpbnQ2NF90ICgqZ2V0X3BhZ2VfZW50cnkpKHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKTsKIAkJdm9pZCAoKnNldF9wYWdlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKLQkJCQkgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOworCQkJCSB1aW50NjRfdCBlbnRyeSk7CiAJfSBnYXJ0OwogCXN0cnVjdCB7CiAJCWludCAoKmluaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTI4NTIsNyArMjg1NCw4IEBACiAjZGVmaW5lIHJhZGVvbl92Z2Ffc2V0X3N0YXRlKHJkZXYsIHN0YXRlKSAocmRldiktPmFzaWMtPnZnYV9zZXRfc3RhdGUoKHJkZXYpLCAoc3RhdGUpKQogI2RlZmluZSByYWRlb25fYXNpY19yZXNldChyZGV2KSAocmRldiktPmFzaWMtPmFzaWNfcmVzZXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fZ2FydF90bGJfZmx1c2gocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0LnRsYl9mbHVzaCgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIGksIHAsIGYpIChyZGV2KS0+YXNpYy0+Z2FydC5zZXRfcGFnZSgocmRldiksIChpKSwgKHApLCAoZikpCisjZGVmaW5lIHJhZGVvbl9nYXJ0X2dldF9wYWdlX2VudHJ5KGEsIGYpIChyZGV2KS0+YXNpYy0+Z2FydC5nZXRfcGFnZV9lbnRyeSgoYSksIChmKSkKKyNkZWZpbmUgcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgaSwgZSkgKHJkZXYpLT5hc2ljLT5nYXJ0LnNldF9wYWdlKChyZGV2KSwgKGkpLCAoZSkpCiAjZGVmaW5lIHJhZGVvbl9hc2ljX3ZtX2luaXQocmRldikgKHJkZXYpLT5hc2ljLT52bS5pbml0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2FzaWNfdm1fZmluaShyZGV2KSAocmRldiktPmFzaWMtPnZtLmZpbmkoKHJkZXYpKQogI2RlZmluZSByYWRlb25fYXNpY192bV9jb3B5X3BhZ2VzKHJkZXYsIGliLCBwZSwgc3JjLCBjb3VudCkgKChyZGV2KS0+YXNpYy0+dm0uY29weV9wYWdlcygocmRldiksIChpYiksIChwZSksIChzcmMpLCAoY291bnQpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwppbmRleCA4NTBkZTU3Li5lZDBlMTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCkBAIC0xNTksMTEgKzE1OSwxMyBAQAogCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJRSBtb2RlXG4iKTsKIAkJcmRldi0+ZmxhZ3MgfD0gUkFERU9OX0lTX1BDSUU7CiAJCXJkZXYtPmFzaWMtPmdhcnQudGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7CisJCXJkZXYtPmFzaWMtPmdhcnQuZ2V0X3BhZ2VfZW50cnkgPSAmcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5OwogCQlyZGV2LT5hc2ljLT5nYXJ0LnNldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKIAl9IGVsc2UgewogCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJIG1vZGVcbiIpOwogCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOwogCQlyZGV2LT5hc2ljLT5nYXJ0LnRsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKKwkJcmRldi0+YXNpYy0+Z2FydC5nZXRfcGFnZV9lbnRyeSA9ICZyMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5OwogCQlyZGV2LT5hc2ljLT5nYXJ0LnNldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2U7CiAJfQogCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwpAQCAtMTk5LDYgKzIwMSw3IEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcjEwMF9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcjEwMF9wY2lfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTI2NSw2ICsyNjgsNyBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnIxMDBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnIxMDBfcGNpX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC0zMzMsNiArMzM3LDIwIEBACiAJLnNldF93cHRyID0gJnIxMDBfZ2Z4X3NldF93cHRyLAogfTsKIAorc3RhdGljIHN0cnVjdCByYWRlb25fYXNpY19yaW5nIHJ2NTE1X2dmeF9yaW5nID0geworCS5pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAorCS5lbWl0X2ZlbmNlID0gJnIzMDBfZmVuY2VfcmluZ19lbWl0LAorCS5lbWl0X3NlbWFwaG9yZSA9ICZyMTAwX3NlbWFwaG9yZV9yaW5nX2VtaXQsCisJLmNzX3BhcnNlID0gJnIzMDBfY3NfcGFyc2UsCisJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKKwkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAorCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKKwkuaXNfbG9ja3VwID0gJnIxMDBfZ3B1X2lzX2xvY2t1cCwKKwkuZ2V0X3JwdHIgPSAmcjEwMF9nZnhfZ2V0X3JwdHIsCisJLmdldF93cHRyID0gJnIxMDBfZ2Z4X2dldF93cHRyLAorCS5zZXRfd3B0ciA9ICZyMTAwX2dmeF9zZXRfd3B0ciwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjMwMF9hc2ljID0gewogCS5pbml0ID0gJnIzMDBfaW5pdCwKIAkuZmluaSA9ICZyMzAwX2ZpbmksCkBAIC0zNDUsNiArMzYzLDcgQEAKIAkubWNfd2FpdF9mb3JfaWRsZSA9ICZyMzAwX21jX3dhaXRfZm9yX2lkbGUsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtNDExLDYgKzQzMCw3IEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcjMwMF9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZydjM3MF9wY2llX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTQ3Nyw2ICs0OTcsNyBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnIzMDBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC01NDMsNiArNTY0LDcgQEAKIAkubWNfd2FpdF9mb3JfaWRsZSA9ICZyczQwMF9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnJzNDAwX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM0MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNDAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTYwOSw2ICs2MzEsNyBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnJzNjAwX21jX3dhaXRfZm9yX2lkbGUsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcnM2MDBfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtNjc3LDYgKzcwMCw3IEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcnM2OTBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyczQwMF9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNDAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczQwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC03NDUsMTAgKzc2OSwxMSBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnJ2NTE1X21jX3dhaXRfZm9yX2lkbGUsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJ2MzcwX3BjaWVfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewotCQlbUkFERU9OX1JJTkdfVFlQRV9HRlhfSU5ERVhdID0gJnIzMDBfZ2Z4X3JpbmcKKwkJW1JBREVPTl9SSU5HX1RZUEVfR0ZYX0lOREVYXSA9ICZydjUxNV9nZnhfcmluZwogCX0sCiAJLmlycSA9IHsKIAkJLnNldCA9ICZyczYwMF9pcnFfc2V0LApAQCAtODExLDEwICs4MzYsMTEgQEAKIAkubWNfd2FpdF9mb3JfaWRsZSA9ICZyNTIwX21jX3dhaXRfZm9yX2lkbGUsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJ2MzcwX3BjaWVfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewotCQlbUkFERU9OX1JJTkdfVFlQRV9HRlhfSU5ERVhdID0gJnIzMDBfZ2Z4X3JpbmcKKwkJW1JBREVPTl9SSU5HX1RZUEVfR0ZYX0lOREVYXSA9ICZydjUxNV9nZnhfcmluZwogCX0sCiAJLmlycSA9IHsKIAkJLnNldCA9ICZyczYwMF9pcnFfc2V0LApAQCAtOTA1LDYgKzkzMSw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtOTkwLDYgKzEwMTcsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmcjYwMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTEwODEsNiArMTEwOSw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtMTE4NSw2ICsxMjE0LDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnI2MDBfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC0xMzAzLDYgKzEzMzMsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmcjYwMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmZXZlcmdyZWVuX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtMTM5NSw2ICsxNDI2LDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnI2MDBfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTE0ODYsNiArMTUxOCw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC0xNjIxLDYgKzE2NTQsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmcjYwMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmY2F5bWFuX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS52bSA9IHsKQEAgLTE3MjQsNiArMTc1OCw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZjYXltYW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnZtID0gewpAQCAtMTg1Nyw2ICsxODkyLDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnNpX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZzaV9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkudm0gPSB7CkBAIC0yMDE4LDYgKzIwNTQsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmY2lrX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZjaWtfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnZtID0gewpAQCAtMjEyNSw2ICsyMTYyLDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJmNpa19nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmY2lrX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS52bSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCAyYTQ1ZDU0Li44ZDc4N2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC02Nyw4ICs2Nyw5IEBACiBpbnQgcjEwMF9hc2ljX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHUzMiByMTAwX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwogdm9pZCByMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit1aW50NjRfdCByMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5KHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKTsKIHZvaWQgcjEwMF9wY2lfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKLQkJCSAgICB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncyk7CisJCQkgICAgdWludDY0X3QgZW50cnkpOwogdm9pZCByMTAwX3Jpbmdfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fcmluZyAqcmluZyk7CiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTE3Miw4ICsxNzMsOSBAQAogCQkJCXN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKIGV4dGVybiBpbnQgcjMwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7CiBleHRlcm4gdm9pZCBydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB1aW50NjRfdCBydjM3MF9wY2llX2dhcnRfZ2V0X3BhZ2VfZW50cnkodWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJCSAgICAgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOworCQkJCSAgICAgdWludDY0X3QgZW50cnkpOwogZXh0ZXJuIHZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcyk7CiBleHRlcm4gaW50IHJ2MzcwX2dldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHIzMDBfc2V0X3JlZ19zYWZlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTIwOCw4ICsyMTAsOSBAQAogZXh0ZXJuIGludCByczQwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnM0MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM0MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordWludDY0X3QgcnM0MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncyk7CiB2b2lkIHJzNDAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCi0JCQkgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOworCQkJIHVpbnQ2NF90IGVudHJ5KTsKIHVpbnQzMl90IHJzNDAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJzNDAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CiBpbnQgcnM0MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTIzMiw4ICsyMzUsOSBAQAogdm9pZCByczYwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1MzIgcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CiB2b2lkIHJzNjAwX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3VpbnQ2NF90IHJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnkodWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOwogdm9pZCByczYwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKTsKKwkJCSB1aW50NjRfdCBlbnRyeSk7CiB1aW50MzJfdCByczYwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwogdm9pZCByczYwMF9tY193cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwogdm9pZCByczYwMF9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggMGVjNjUxNi4uYmQ3NTE5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTc3NCw2ICs3NzQsOCBAQAogCQlyZGV2LT5kdW1teV9wYWdlLnBhZ2UgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJcmRldi0+ZHVtbXlfcGFnZS5lbnRyeSA9IHJhZGVvbl9nYXJ0X2dldF9wYWdlX2VudHJ5KHJkZXYtPmR1bW15X3BhZ2UuYWRkciwKKwkJCQkJCQkgICAgUkFERU9OX0dBUlRfUEFHRV9EVU1NWSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwppbmRleCA4NDE0NmQ1Li41NDUwZmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCkBAIC0xNjUsNiArMTY1LDE5IEBACiAJCXJhZGVvbl9ib191bnBpbihyZGV2LT5nYXJ0LnJvYmopOwogCXJhZGVvbl9ib191bnJlc2VydmUocmRldi0+Z2FydC5yb2JqKTsKIAlyZGV2LT5nYXJ0LnRhYmxlX2FkZHIgPSBncHVfYWRkcjsKKworCWlmICghcikgeworCQlpbnQgaTsKKworCQkvKiBXZSBtaWdodCBoYXZlIGRyb3BwZWQgc29tZSBHQVJUIHRhYmxlIHVwZGF0ZXMgd2hpbGUgaXQgd2Fzbid0CisJCSAqIG1hcHBlZCwgcmVzdG9yZSBhbGwgZW50cmllcworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlczsgaSsrKQorCQkJcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgaSwgcmRldi0+Z2FydC5wYWdlc19lbnRyeVtpXSk7CisJCW1iKCk7CisJCXJhZGVvbl9nYXJ0X3RsYl9mbHVzaChyZGV2KTsKKwl9CisKIAlyZXR1cm4gcjsKIH0KIApAQCAtMjI4LDcgKzI0MSw2IEBACiAJdW5zaWduZWQgdDsKIAl1bnNpZ25lZCBwOwogCWludCBpLCBqOwotCXU2NCBwYWdlX2Jhc2U7CiAKIAlpZiAoIXJkZXYtPmdhcnQucmVhZHkpIHsKIAkJV0FSTigxLCAidHJ5aW5nIHRvIHVuYmluZCBtZW1vcnkgZnJvbSB1bmluaXRpYWxpemVkIEdBUlQgIVxuIik7CkBAIC0yMzksMTQgKzI1MSwxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrLCBwKyspIHsKIAkJaWYgKHJkZXYtPmdhcnQucGFnZXNbcF0pIHsKIAkJCXJkZXYtPmdhcnQucGFnZXNbcF0gPSBOVUxMOwotCQkJcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdID0gcmRldi0+ZHVtbXlfcGFnZS5hZGRyOwotCQkJcGFnZV9iYXNlID0gcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdOwogCQkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7IGorKywgdCsrKSB7CisJCQkJcmRldi0+Z2FydC5wYWdlc19lbnRyeVt0XSA9IHJkZXYtPmR1bW15X3BhZ2UuZW50cnk7CiAJCQkJaWYgKHJkZXYtPmdhcnQucHRyKSB7Ci0JCQkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIHBhZ2VfYmFzZSwKLQkJCQkJCQkgICAgIFJBREVPTl9HQVJUX1BBR0VfRFVNTVkpOworCQkJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCB0LAorCQkJCQkJCSAgICAgcmRldi0+ZHVtbXlfcGFnZS5lbnRyeSk7CiAJCQkJfQotCQkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAkJCX0KIAkJfQogCX0KQEAgLTI3NCw3ICsyODQsNyBAQAogewogCXVuc2lnbmVkIHQ7CiAJdW5zaWduZWQgcDsKLQl1aW50NjRfdCBwYWdlX2Jhc2U7CisJdWludDY0X3QgcGFnZV9iYXNlLCBwYWdlX2VudHJ5OwogCWludCBpLCBqOwogCiAJaWYgKCFyZGV2LT5nYXJ0LnJlYWR5KSB7CkBAIC0yODUsMTQgKzI5NSwxNSBAQAogCXAgPSB0IC8gKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrLCBwKyspIHsKLQkJcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdID0gZG1hX2FkZHJbaV07CiAJCXJkZXYtPmdhcnQucGFnZXNbcF0gPSBwYWdlbGlzdFtpXTsKLQkJaWYgKHJkZXYtPmdhcnQucHRyKSB7Ci0JCQlwYWdlX2Jhc2UgPSByZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF07Ci0JCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKLQkJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCB0LCBwYWdlX2Jhc2UsIGZsYWdzKTsKLQkJCQlwYWdlX2Jhc2UgKz0gUkFERU9OX0dQVV9QQUdFX1NJWkU7CisJCXBhZ2VfYmFzZSA9IGRtYV9hZGRyW2ldOworCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKKwkJCXBhZ2VfZW50cnkgPSByYWRlb25fZ2FydF9nZXRfcGFnZV9lbnRyeShwYWdlX2Jhc2UsIGZsYWdzKTsKKwkJCXJkZXYtPmdhcnQucGFnZXNfZW50cnlbdF0gPSBwYWdlX2VudHJ5OworCQkJaWYgKHJkZXYtPmdhcnQucHRyKSB7CisJCQkJcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgdCwgcGFnZV9lbnRyeSk7CiAJCQl9CisJCQlwYWdlX2Jhc2UgKz0gUkFERU9OX0dQVV9QQUdFX1NJWkU7CiAJCX0KIAl9CiAJbWIoKTsKQEAgLTMzNCwxNiArMzQ1LDE1IEBACiAJCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHIgPSB2emFsbG9jKHNpemVvZihkbWFfYWRkcl90KSAqCi0JCQkJCXJkZXYtPmdhcnQubnVtX2NwdV9wYWdlcyk7Ci0JaWYgKHJkZXYtPmdhcnQucGFnZXNfYWRkciA9PSBOVUxMKSB7CisJcmRldi0+Z2FydC5wYWdlc19lbnRyeSA9IHZtYWxsb2Moc2l6ZW9mKHVpbnQ2NF90KSAqCisJCQkJCSByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMpOworCWlmIChyZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5ID09IE5VTEwpIHsKIAkJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCS8qIHNldCBHQVJUIGVudHJ5IHRvIHBvaW50IHRvIHRoZSBkdW1teSBwYWdlIGJ5IGRlZmF1bHQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzOyBpKyspIHsKLQkJcmRldi0+Z2FydC5wYWdlc19hZGRyW2ldID0gcmRldi0+ZHVtbXlfcGFnZS5hZGRyOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzOyBpKyspCisJCXJkZXYtPmdhcnQucGFnZXNfZW50cnlbaV0gPSByZGV2LT5kdW1teV9wYWdlLmVudHJ5OwogCXJldHVybiAwOwogfQogCkBAIC0zNTYsMTUgKzM2NiwxNSBAQAogICovCiB2b2lkIHJhZGVvbl9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JaWYgKHJkZXYtPmdhcnQucGFnZXMgJiYgcmRldi0+Z2FydC5wYWdlc19hZGRyICYmIHJkZXYtPmdhcnQucmVhZHkpIHsKKwlpZiAocmRldi0+Z2FydC5yZWFkeSkgewogCQkvKiB1bmJpbmQgcGFnZXMgKi8KIAkJcmFkZW9uX2dhcnRfdW5iaW5kKHJkZXYsIDAsIHJkZXYtPmdhcnQubnVtX2NwdV9wYWdlcyk7CiAJfQogCXJkZXYtPmdhcnQucmVhZHkgPSBmYWxzZTsKIAl2ZnJlZShyZGV2LT5nYXJ0LnBhZ2VzKTsKLQl2ZnJlZShyZGV2LT5nYXJ0LnBhZ2VzX2FkZHIpOworCXZmcmVlKHJkZXYtPmdhcnQucGFnZXNfZW50cnkpOwogCXJkZXYtPmdhcnQucGFnZXMgPSBOVUxMOwotCXJkZXYtPmdhcnQucGFnZXNfYWRkciA9IE5VTEw7CisJcmRldi0+Z2FydC5wYWdlc19lbnRyeSA9IE5VTEw7CiAKIAlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwppbmRleCBmZTQ4ZjIyLi5kMGI0ZjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwpAQCAtMzk0LDEwICszOTQsOSBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IHJhZGVvbl9tb2RlX21tYXAoc3RydWN0IGRybV9maWxlICpmaWxwLAotCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgdWludDMyX3QgaGFuZGxlLCBib29sIGR1bWIsCi0JCQkgICAgdWludDY0X3QgKm9mZnNldF9wKQoraW50IHJhZGVvbl9tb2RlX2R1bWJfbW1hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCQkgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3QgKm9mZnNldF9wKQogewogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iajsKIAlzdHJ1Y3QgcmFkZW9uX2JvICpyb2JqOwpAQCAtNDA2LDE0ICs0MDUsNiBAQAogCWlmIChnb2JqID09IE5VTEwpIHsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCi0JLyoKLQkgKiBXZSBkb24ndCBhbGxvdyBkdW1iIG1tYXBzIG9uIG9iamVjdHMgY3JlYXRlZCB1c2luZyBhbm90aGVyCi0JICogaW50ZXJmYWNlLgotCSAqLwotCVdBUk5fT05DRShkdW1iICYmICEoZ29iai0+ZHVtYiB8fCBnb2JqLT5pbXBvcnRfYXR0YWNoKSwKLQkJIklsbGVnYWwgZHVtYiBtYXAgb2YgR1BVIGJ1ZmZlci5cbiIpOwotCiAJcm9iaiA9IGdlbV90b19yYWRlb25fYm8oZ29iaik7CiAJaWYgKHJhZGVvbl90dG1fdHRfaGFzX3VzZXJwdHIocm9iai0+dGJvLnR0bSkpIHsKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CkBAIC00MjQsMjAgKzQxNSwxMiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcmFkZW9uX21vZGVfZHVtYl9tbWFwKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwKLQkJCSAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0X3ApCi17Ci0JcmV0dXJuIHJhZGVvbl9tb2RlX21tYXAoZmlscCwgZGV2LCBoYW5kbGUsIHRydWUsIG9mZnNldF9wKTsKLX0KLQogaW50IHJhZGVvbl9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGRybV9yYWRlb25fZ2VtX21tYXAgKmFyZ3MgPSBkYXRhOwogCi0JcmV0dXJuIHJhZGVvbl9tb2RlX21tYXAoZmlscCwgZGV2LCBhcmdzLT5oYW5kbGUsIGZhbHNlLAotCQkJCSZhcmdzLT5hZGRyX3B0cik7CisJcmV0dXJuIHJhZGVvbl9tb2RlX2R1bWJfbW1hcChmaWxwLCBkZXYsIGFyZ3MtPmhhbmRsZSwgJmFyZ3MtPmFkZHJfcHRyKTsKIH0KIAogaW50IHJhZGVvbl9nZW1fYnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNTkzLDcgKzU3Niw3IEBACiBlcnJvcl9mcmVlOgogCWRybV9mcmVlX2xhcmdlKHZtX2Jvcyk7CiAKLQlpZiAocikKKwlpZiAociAmJiByICE9IC1FUkVTVEFSVFNZUykKIAkJRFJNX0VSUk9SKCJDb3VsZG4ndCB1cGRhdGUgQk9fVkEgKCVkKVxuIiwgcik7CiB9CiAKQEAgLTc2Myw3ICs3NDYsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXIgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBnb2JqLCAmaGFuZGxlKTsKLQlnb2JqLT5kdW1iID0gdHJ1ZTsKIAkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5vdyAqLwogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rZmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2tmZC5jCmluZGV4IDA2NWQwMjAuLmJlZjlhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2tmZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2tmZC5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY2lrZC5oIgogI2luY2x1ZGUgImNpa19yZWcuaCIKICNpbmNsdWRlICJyYWRlb25fa2ZkLmgiCisjaW5jbHVkZSAicmFkZW9uX3Vjb2RlLmgiCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2RlZmluZSBDSUtfUElQRV9QRVJfTUVDCSg0KQogCkBAIC00OSw2ICs1MSw3IEBACiBzdGF0aWMgdWludDY0X3QgZ2V0X2dwdV9jbG9ja19jb3VudGVyKHN0cnVjdCBrZ2RfZGV2ICprZ2QpOwogCiBzdGF0aWMgdWludDMyX3QgZ2V0X21heF9lbmdpbmVfY2xvY2tfaW5fbWh6KHN0cnVjdCBrZ2RfZGV2ICprZ2QpOworc3RhdGljIHVpbnQxNl90IGdldF9md192ZXJzaW9uKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIGVudW0ga2dkX2VuZ2luZV90eXBlIHR5cGUpOwogCiAvKgogICogUmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9ucwpAQCAtNjksNyArNzIsNyBAQAogc3RhdGljIGludCBrZ2RfaHFkX2xvYWQoc3RydWN0IGtnZF9kZXYgKmtnZCwgdm9pZCAqbXFkLCB1aW50MzJfdCBwaXBlX2lkLAogCQkJdWludDMyX3QgcXVldWVfaWQsIHVpbnQzMl90IF9fdXNlciAqd3B0cik7CiAKLXN0YXRpYyBib29sIGtnZF9ocWRfaXNfb2NjdXBpZXMoc3RydWN0IGtnZF9kZXYgKmtnZCwgdWludDY0X3QgcXVldWVfYWRkcmVzcywKK3N0YXRpYyBib29sIGtnZF9ocWRfaXNfb2NjdXBpZWQoc3RydWN0IGtnZF9kZXYgKmtnZCwgdWludDY0X3QgcXVldWVfYWRkcmVzcywKIAkJCQl1aW50MzJfdCBwaXBlX2lkLCB1aW50MzJfdCBxdWV1ZV9pZCk7CiAKIHN0YXRpYyBpbnQga2dkX2hxZF9kZXN0cm95KHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVpbnQzMl90IHJlc2V0X3R5cGUsCkBAIC04OSwxNCArOTIsMTYgQEAKIAkuaW5pdF9tZW1vcnkgPSBrZ2RfaW5pdF9tZW1vcnksCiAJLmluaXRfcGlwZWxpbmUgPSBrZ2RfaW5pdF9waXBlbGluZSwKIAkuaHFkX2xvYWQgPSBrZ2RfaHFkX2xvYWQsCi0JLmhxZF9pc19vY2N1cGllcyA9IGtnZF9ocWRfaXNfb2NjdXBpZXMsCisJLmhxZF9pc19vY2N1cGllZCA9IGtnZF9ocWRfaXNfb2NjdXBpZWQsCiAJLmhxZF9kZXN0cm95ID0ga2dkX2hxZF9kZXN0cm95LAorCS5nZXRfZndfdmVyc2lvbiA9IGdldF9md192ZXJzaW9uCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGtnZDJrZmRfY2FsbHMgKmtnZDJrZmQ7CiAKIGJvb2wgcmFkZW9uX2tmZF9pbml0KHZvaWQpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfSFNBX0FNRF9NT0RVTEUpCiAJYm9vbCAoKmtnZDJrZmRfaW5pdF9wKSh1bnNpZ25lZCwgY29uc3Qgc3RydWN0IGtmZDJrZ2RfY2FsbHMqLAogCQkJCWNvbnN0IHN0cnVjdCBrZ2Qya2ZkX2NhbGxzKiopOwogCkBAIC0xMTMsNiArMTE4LDE3IEBACiAJfQogCiAJcmV0dXJuIHRydWU7CisjZWxpZiBkZWZpbmVkKENPTkZJR19IU0FfQU1EKQorCWlmICgha2dkMmtmZF9pbml0KEtGRF9JTlRFUkZBQ0VfVkVSU0lPTiwgJmtmZDJrZ2QsICZrZ2Qya2ZkKSkgeworCQlrZ2Qya2ZkID0gTlVMTDsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIHJhZGVvbl9rZmRfZmluaSh2b2lkKQpAQCAtMzc0LDYgKzM5MCwxMCBAQAogCQljcHVfcmVsYXgoKTsKIAl3cml0ZV9yZWdpc3RlcihrZ2QsIEFUQ19WTUlEX1BBU0lEX01BUFBJTkdfVVBEQVRFX1NUQVRVUywgMVUgPDwgdm1pZCk7CiAKKwkvKiBNYXBwaW5nIHZtaWQgdG8gcGFzaWQgYWxzbyBmb3IgSUggYmxvY2sgKi8KKwl3cml0ZV9yZWdpc3RlcihrZ2QsIElIX1ZNSURfMF9MVVQgKyB2bWlkICogc2l6ZW9mKHVpbnQzMl90KSwKKwkJCXBhc2lkX21hcHBpbmcpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNiw3ICs0MzYsNyBAQAogc3RhdGljIGludCBrZ2RfaW5pdF9waXBlbGluZShzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50MzJfdCBwaXBlX2lkLAogCQkJCXVpbnQzMl90IGhwZF9zaXplLCB1aW50NjRfdCBocGRfZ3B1X2FkZHIpCiB7Ci0JdWludDMyX3QgbWVjID0gKCsrcGlwZV9pZCAvIENJS19QSVBFX1BFUl9NRUMpICsgMTsKKwl1aW50MzJfdCBtZWMgPSAocGlwZV9pZCAvIENJS19QSVBFX1BFUl9NRUMpICsgMTsKIAl1aW50MzJfdCBwaXBlID0gKHBpcGVfaWQgJSBDSUtfUElQRV9QRVJfTUVDKTsKIAogCWxvY2tfc3JibShrZ2QsIG1lYywgcGlwZSwgMCwgMCk7CkBAIC01MTMsNyArNTMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wga2dkX2hxZF9pc19vY2N1cGllcyhzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50NjRfdCBxdWV1ZV9hZGRyZXNzLAorc3RhdGljIGJvb2wga2dkX2hxZF9pc19vY2N1cGllZChzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50NjRfdCBxdWV1ZV9hZGRyZXNzLAogCQkJCXVpbnQzMl90IHBpcGVfaWQsIHVpbnQzMl90IHF1ZXVlX2lkKQogewogCXVpbnQzMl90IGFjdDsKQEAgLTU1Miw2ICs1NzIsNyBAQAogCQlpZiAodGltZW91dCA9PSAwKSB7CiAJCQlwcl9lcnIoImtmZDogY3AgcXVldWUgcHJlZW1wdGlvbiB0aW1lIG91dCAoJWRtcylcbiIsCiAJCQkJdGVtcCk7CisJCQlyZWxlYXNlX3F1ZXVlKGtnZCk7CiAJCQlyZXR1cm4gLUVUSU1FOwogCQl9CiAJCW1zbGVlcCgyMCk7CkBAIC01NjEsMyArNTgyLDUyIEBACiAJcmVsZWFzZV9xdWV1ZShrZ2QpOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgdWludDE2X3QgZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IGtnZF9kZXYgKmtnZCwgZW51bSBrZ2RfZW5naW5lX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqKSBrZ2Q7CisJY29uc3QgdW5pb24gcmFkZW9uX2Zpcm13YXJlX2hlYWRlciAqaGRyOworCisJQlVHX09OKGtnZCA9PSBOVUxMIHx8IHJkZXYtPm1lY19mdyA9PSBOVUxMKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgS0dEX0VOR0lORV9QRlA6CisJCWhkciA9IChjb25zdCB1bmlvbiByYWRlb25fZmlybXdhcmVfaGVhZGVyICopIHJkZXYtPnBmcF9mdy0+ZGF0YTsKKwkJYnJlYWs7CisKKwljYXNlIEtHRF9FTkdJTkVfTUU6CisJCWhkciA9IChjb25zdCB1bmlvbiByYWRlb25fZmlybXdhcmVfaGVhZGVyICopIHJkZXYtPm1lX2Z3LT5kYXRhOworCQlicmVhazsKKworCWNhc2UgS0dEX0VOR0lORV9DRToKKwkJaGRyID0gKGNvbnN0IHVuaW9uIHJhZGVvbl9maXJtd2FyZV9oZWFkZXIgKikgcmRldi0+Y2VfZnctPmRhdGE7CisJCWJyZWFrOworCisJY2FzZSBLR0RfRU5HSU5FX01FQzE6CisJCWhkciA9IChjb25zdCB1bmlvbiByYWRlb25fZmlybXdhcmVfaGVhZGVyICopIHJkZXYtPm1lY19mdy0+ZGF0YTsKKwkJYnJlYWs7CisKKwljYXNlIEtHRF9FTkdJTkVfTUVDMjoKKwkJaGRyID0gKGNvbnN0IHVuaW9uIHJhZGVvbl9maXJtd2FyZV9oZWFkZXIgKikKKwkJCQkJCQlyZGV2LT5tZWMyX2Z3LT5kYXRhOworCQlicmVhazsKKworCWNhc2UgS0dEX0VOR0lORV9STEM6CisJCWhkciA9IChjb25zdCB1bmlvbiByYWRlb25fZmlybXdhcmVfaGVhZGVyICopIHJkZXYtPnJsY19mdy0+ZGF0YTsKKwkJYnJlYWs7CisKKwljYXNlIEtHRF9FTkdJTkVfU0RNQToKKwkJaGRyID0gKGNvbnN0IHVuaW9uIHJhZGVvbl9maXJtd2FyZV9oZWFkZXIgKikKKwkJCQkJCQlyZGV2LT5zZG1hX2Z3LT5kYXRhOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCWlmIChoZHIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBPbmx5IDEyIGJpdCBpbiB1c2UqLworCXJldHVybiBoZHItPmNvbW1vbi51Y29kZV92ZXJzaW9uOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwppbmRleCA3ZDY4MjIzLi44NmZjNTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwpAQCAtNTI5LDkgKzUyOSw2IEBACiAJCQl1MzIgY3VycmVudF9kb21haW4gPQogCQkJCXJhZGVvbl9tZW1fdHlwZV90b19kb21haW4oYm8tPnRiby5tZW0ubWVtX3R5cGUpOwogCi0JCQlXQVJOX09OQ0UoYm8tPmdlbV9iYXNlLmR1bWIsCi0JCQkJICAiR1BVIHVzZSBvZiBkdW1iIGJ1ZmZlciBpcyBpbGxlZ2FsLlxuIik7Ci0KIAkJCS8qIENoZWNrIGlmIHRoaXMgYnVmZmVyIHdpbGwgYmUgbW92ZWQgYW5kIGRvbid0IG1vdmUgaXQKIAkJCSAqIGlmIHdlIGhhdmUgbW92ZWQgdG9vIG1hbnkgYnVmZmVycyBmb3IgdGhpcyBJQiBhbHJlYWR5LgogCQkJICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCmluZGV4IDMyNTIyY2MuLmY3ZGE4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtMTI4Nyw4ICsxMjg3LDM5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IHJhZGVvbl9kcG1fcXVpcmsgeworCXUzMiBjaGlwX3ZlbmRvcjsKKwl1MzIgY2hpcF9kZXZpY2U7CisJdTMyIHN1YnN5c192ZW5kb3I7CisJdTMyIHN1YnN5c19kZXZpY2U7Cit9OworCisvKiBjYXJkcyB3aXRoIGRwbSBzdGFiaWxpdHkgcHJvYmxlbXMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmFkZW9uX2RwbV9xdWlyayByYWRlb25fZHBtX3F1aXJrX2xpc3RbXSA9IHsKKwkvKiBUVVJLUyAtIGh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L3VidW50dS8rc291cmNlL2xpbnV4LytidWcvMTM4NjUzNCAqLworCXsgUENJX1ZFTkRPUl9JRF9BVEksIDB4Njc1OSwgMHgxNjgyLCAweDMxOTUgfSwKKwkvKiBUVVJLUyAtIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM3MzEgKi8KKwl7IFBDSV9WRU5ET1JfSURfQVRJLCAweDY4NDAsIDB4MTE3OSwgMHhmYjgxIH0sCisJeyAwLCAwLCAwLCAwIH0sCit9OworCiBpbnQgcmFkZW9uX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJc3RydWN0IHJhZGVvbl9kcG1fcXVpcmsgKnAgPSByYWRlb25fZHBtX3F1aXJrX2xpc3Q7CisJYm9vbCBkaXNhYmxlX2RwbSA9IGZhbHNlOworCisJLyogQXBwbHkgZHBtIHF1aXJrcyAqLworCXdoaWxlIChwICYmIHAtPmNoaXBfZGV2aWNlICE9IDApIHsKKwkJaWYgKHJkZXYtPnBkZXYtPnZlbmRvciA9PSBwLT5jaGlwX3ZlbmRvciAmJgorCQkgICAgcmRldi0+cGRldi0+ZGV2aWNlID09IHAtPmNoaXBfZGV2aWNlICYmCisJCSAgICByZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IHAtPnN1YnN5c192ZW5kb3IgJiYKKwkJICAgIHJkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gcC0+c3Vic3lzX2RldmljZSkgeworCQkJZGlzYWJsZV9kcG0gPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJKytwOworCX0KKwogCS8qIGVuYWJsZSBkcG0gb24gcnY2eHgrICovCiAJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKIAljYXNlIENISVBfUlY2MTA6CkBAIC0xMzQ0LDYgKzEzNzUsOCBAQAogCQkJICghKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkpICYmCiAJCQkgKCFyZGV2LT5zbWNfZncpKQogCQkJcmRldi0+cG0ucG1fbWV0aG9kID0gUE1fTUVUSE9EX1BST0ZJTEU7CisJCWVsc2UgaWYgKGRpc2FibGVfZHBtICYmIChyYWRlb25fZHBtID09IC0xKSkKKwkJCXJkZXYtPnBtLnBtX21ldGhvZCA9IFBNX01FVEhPRF9QUk9GSUxFOwogCQllbHNlIGlmIChyYWRlb25fZHBtID09IDApCiAJCQlyZGV2LT5wbS5wbV9tZXRob2QgPSBQTV9NRVRIT0RfUFJPRklMRTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKaW5kZXggNTM1NDAzZS4uMTVhZWU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCkBAIC0xNzAzLDcgKzE3MDMsNyBAQAogCXUzMiBmb3JtYXQ7CiAJdTMyICpidWZmZXI7CiAJY29uc3QgdTggX191c2VyICpkYXRhOwotCWludCBzaXplLCBkd29yZHMsIHRleF93aWR0aCwgYmxpdF93aWR0aCwgc3BpdGNoOworCXVuc2lnbmVkIGludCBzaXplLCBkd29yZHMsIHRleF93aWR0aCwgYmxpdF93aWR0aCwgc3BpdGNoOwogCXUzMiBoZWlnaHQ7CiAJaW50IGk7CiAJdTMyIHRleHBpdGNoLCBtaWNyb3RpbGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl92bS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYwppbmRleCBjZGU0OGM0Li4wNmQyMjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ZtLmMKQEAgLTU4NywxMCArNTg3LDggQEAKIAl1aW50NjRfdCByZXN1bHQ7CiAKIAkvKiBwYWdlIHRhYmxlIG9mZnNldCAqLwotCXJlc3VsdCA9IHJkZXYtPmdhcnQucGFnZXNfYWRkclthZGRyID4+IFBBR0VfU0hJRlRdOwotCi0JLyogaW4gY2FzZSBjcHUgcGFnZSBzaXplICE9IGdwdSBwYWdlIHNpemUqLwotCXJlc3VsdCB8PSBhZGRyICYgKH5QQUdFX01BU0spOworCXJlc3VsdCA9IHJkZXYtPmdhcnQucGFnZXNfZW50cnlbYWRkciA+PiBSQURFT05fR1BVX1BBR0VfU0hJRlRdOworCXJlc3VsdCAmPSB+UkFERU9OX0dQVV9QQUdFX01BU0s7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IGM1Nzk5ZjE2Li4zNGUzMjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCkBAIC0yMTIsMTEgKzIxMiw5IEBACiAjZGVmaW5lIFJTNDAwX1BURV9XUklURUFCTEUgKDEgPDwgMikKICNkZWZpbmUgUlM0MDBfUFRFX1JFQURBQkxFICAoMSA8PCAzKQogCi12b2lkIHJzNDAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCi0JCQkgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpCit1aW50NjRfdCByczQwMF9nYXJ0X2dldF9wYWdlX2VudHJ5KHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKQogewogCXVpbnQzMl90IGVudHJ5OwotCXUzMiAqZ3R0ID0gcmRldi0+Z2FydC5wdHI7CiAKIAllbnRyeSA9IChsb3dlcl8zMl9iaXRzKGFkZHIpICYgUEFHRV9NQVNLKSB8CiAJCSgodXBwZXJfMzJfYml0cyhhZGRyKSAmIDB4ZmYpIDw8IDQpOwpAQCAtMjI2LDggKzIyNCwxNCBAQAogCQllbnRyeSB8PSBSUzQwMF9QVEVfV1JJVEVBQkxFOwogCWlmICghKGZsYWdzICYgUkFERU9OX0dBUlRfUEFHRV9TTk9PUCkpCiAJCWVudHJ5IHw9IFJTNDAwX1BURV9VTlNOT09QRUQ7Ci0JZW50cnkgPSBjcHVfdG9fbGUzMihlbnRyeSk7Ci0JZ3R0W2ldID0gZW50cnk7CisJcmV0dXJuIGVudHJ5OworfQorCit2b2lkIHJzNDAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCisJCQkgdWludDY0X3QgZW50cnkpCit7CisJdTMyICpndHQgPSByZGV2LT5nYXJ0LnB0cjsKKwlndHRbaV0gPSBjcHVfdG9fbGUzMihsb3dlcl8zMl9iaXRzKGVudHJ5KSk7CiB9CiAKIGludCByczQwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCmluZGV4IDlhY2IxYzMuLjc0YmNlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKQEAgLTYyNSwxMSArNjI1LDggQEAKIAlyYWRlb25fZ2FydF90YWJsZV92cmFtX2ZyZWUocmRldik7CiB9CiAKLXZvaWQgcnM2MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKLQkJCSB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKK3VpbnQ2NF90IHJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnkodWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpCiB7Ci0Jdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQucHRyOwotCiAJYWRkciA9IGFkZHIgJiAweEZGRkZGRkZGRkZGRkYwMDBVTEw7CiAJYWRkciB8PSBSNjAwX1BURV9TWVNURU07CiAJaWYgKGZsYWdzICYgUkFERU9OX0dBUlRfUEFHRV9WQUxJRCkKQEAgLTY0MCw3ICs2MzcsMTQgQEAKIAkJYWRkciB8PSBSNjAwX1BURV9XUklURUFCTEU7CiAJaWYgKGZsYWdzICYgUkFERU9OX0dBUlRfUEFHRV9TTk9PUCkKIAkJYWRkciB8PSBSNjAwX1BURV9TTk9PUEVEOwotCXdyaXRlcShhZGRyLCBwdHIgKyAoaSAqIDgpKTsKKwlyZXR1cm4gYWRkcjsKK30KKwordm9pZCByczYwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAorCQkJIHVpbnQ2NF90IGVudHJ5KQoreworCXZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKilyZGV2LT5nYXJ0LnB0cjsKKwl3cml0ZXEoZW50cnksIHB0ciArIChpICogOCkpOwogfQogCiBpbnQgcnM2MDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYwppbmRleCA2MGRmNDQ0Li41ZDg5Yjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5jCkBAIC01MDU3LDYgKzUwNTcsMTYgQEAKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAxIDw8IHZtX2lkKTsKIAorCS8qIHdhaXQgZm9yIHRoZSBpbnZhbGlkYXRlIHRvIGNvbXBsZXRlICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1dBSVRfUkVHX01FTSwgNSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIChXQUlUX1JFR19NRU1fRlVOQ1RJT04oMCkgfCAgLyogYWx3YXlzICovCisJCQkJIFdBSVRfUkVHX01FTV9FTkdJTkUoMCkpKTsgLyogbWUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBWTV9JTlZBTElEQVRFX1JFUVVFU1QgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7IC8qIHJlZiAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOyAvKiBtYXNrICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMHgyMCk7IC8qIHBvbGwgaW50ZXJ2YWwgKi8KKwogCS8qIHN5bmMgUEZQIHRvIE1FLCBvdGhlcndpc2Ugd2UgbWlnaHQgZ2V0IGludmFsaWQgUEZQIHJlYWRzICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1BGUF9TWU5DX01FLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMHgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpX2RtYS5jCmluZGV4IGY1Y2M3NzcuLjgzMjA3OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaV9kbWEuYwpAQCAtMTIzLDcgKzEyMyw2IEBACiAJCWZvciAoOyBuZHcgPiAwOyBuZHcgLT0gMiwgLS1jb3VudCwgcGUgKz0gOCkgewogCQkJaWYgKGZsYWdzICYgUjYwMF9QVEVfU1lTVEVNKSB7CiAJCQkJdmFsdWUgPSByYWRlb25fdm1fbWFwX2dhcnQocmRldiwgYWRkcik7Ci0JCQkJdmFsdWUgJj0gMHhGRkZGRkZGRkZGRkZGMDAwVUxMOwogCQkJfSBlbHNlIGlmIChmbGFncyAmIFI2MDBfUFRFX1ZBTElEKSB7CiAJCQkJdmFsdWUgPSBhZGRyOwogCQkJfSBlbHNlIHsKQEAgLTIwNiw2ICsyMDUsMTQgQEAKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCBETUFfUEFDS0VUKERNQV9QQUNLRVRfU1JCTV9XUklURSwgMCwgMCwgMCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsICgweGYgPDwgMTYpIHwgKFZNX0lOVkFMSURBVEVfUkVRVUVTVCA+PiAyKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMSA8PCB2bV9pZCk7CisKKwkvKiB3YWl0IGZvciBpbnZhbGlkYXRlIHRvIGNvbXBsZXRlICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgRE1BX1BBQ0tFVChETUFfUEFDS0VUX1BPTExfUkVHX01FTSwgMCwgMCwgMCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFZNX0lOVkFMSURBVEVfUkVRVUVTVCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMHhmZiA8PCAxNik7IC8qIHJldHJ5ICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMSA8PCB2bV9pZCk7IC8qIG1hc2sgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsgLyogdmFsdWUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAoMCA8PCAyOCkgfCAweDIwKTsgLyogZnVuYyhhbHdheXMpIHwgcG9sbCBpbnRlcnZhbCAqLwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lfZHBtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpX2RwbS5jCmluZGV4IDMyZTM1NGIuLmVmZjhhNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lfZHBtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaV9kcG0uYwpAQCAtMjkwOCw2ICsyOTA4LDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IHNpX2RwbV9xdWlyayB7CisJdTMyIGNoaXBfdmVuZG9yOworCXUzMiBjaGlwX2RldmljZTsKKwl1MzIgc3Vic3lzX3ZlbmRvcjsKKwl1MzIgc3Vic3lzX2RldmljZTsKKwl1MzIgbWF4X3NjbGs7CisJdTMyIG1heF9tY2xrOworfTsKKworLyogY2FyZHMgd2l0aCBkcG0gc3RhYmlsaXR5IHByb2JsZW1zICovCitzdGF0aWMgc3RydWN0IHNpX2RwbV9xdWlyayBzaV9kcG1fcXVpcmtfbGlzdFtdID0geworCS8qIFBJVENBSVJOIC0gaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0OTAgKi8KKwl7IFBDSV9WRU5ET1JfSURfQVRJLCAweDY4MTAsIDB4MTQ2MiwgMHgzMDM2LCAwLCAxMjAwMDAgfSwKKwl7IDAsIDAsIDAsIDAgfSwKK307CisKIHN0YXRpYyB2b2lkIHNpX2FwcGx5X3N0YXRlX2FkanVzdF9ydWxlcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCQkJc3RydWN0IHJhZGVvbl9wcyAqcnBzKQogewpAQCAtMjkxOCw3ICsyOTM0LDIyIEBACiAJdTMyIG1jbGssIHNjbGs7CiAJdTE2IHZkZGMsIHZkZGNpOwogCXUzMiBtYXhfc2Nsa192ZGRjLCBtYXhfbWNsa192ZGRjaSwgbWF4X21jbGtfdmRkYzsKKwl1MzIgbWF4X3NjbGsgPSAwLCBtYXhfbWNsayA9IDA7CiAJaW50IGk7CisJc3RydWN0IHNpX2RwbV9xdWlyayAqcCA9IHNpX2RwbV9xdWlya19saXN0OworCisJLyogQXBwbHkgZHBtIHF1aXJrcyAqLworCXdoaWxlIChwICYmIHAtPmNoaXBfZGV2aWNlICE9IDApIHsKKwkJaWYgKHJkZXYtPnBkZXYtPnZlbmRvciA9PSBwLT5jaGlwX3ZlbmRvciAmJgorCQkgICAgcmRldi0+cGRldi0+ZGV2aWNlID09IHAtPmNoaXBfZGV2aWNlICYmCisJCSAgICByZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IHAtPnN1YnN5c192ZW5kb3IgJiYKKwkJICAgIHJkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gcC0+c3Vic3lzX2RldmljZSkgeworCQkJbWF4X3NjbGsgPSBwLT5tYXhfc2NsazsKKwkJCW1heF9tY2xrID0gcC0+bWF4X21jbGs7CisJCQlicmVhazsKKwkJfQorCQkrK3A7CisJfQogCiAJaWYgKChyZGV2LT5wbS5kcG0ubmV3X2FjdGl2ZV9jcnRjX2NvdW50ID4gMSkgfHwKIAkgICAgbmlfZHBtX3ZibGFua190b29fc2hvcnQocmRldikpCkBAIC0yOTcyLDYgKzMwMDMsMTQgQEAKIAkJCWlmIChwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGsgPiBtYXhfbWNsa192ZGRjKQogCQkJCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0ubWNsayA9IG1heF9tY2xrX3ZkZGM7CiAJCX0KKwkJaWYgKG1heF9tY2xrKSB7CisJCQlpZiAocHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5tY2xrID4gbWF4X21jbGspCisJCQkJcHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5tY2xrID0gbWF4X21jbGs7CisJCX0KKwkJaWYgKG1heF9zY2xrKSB7CisJCQlpZiAocHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5zY2xrID4gbWF4X3NjbGspCisJCQkJcHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5zY2xrID0gbWF4X3NjbGs7CisJCX0KIAl9CiAKIAkvKiBYWFggdmFsaWRhdGUgdGhlIG1pbiBjbG9ja3MgcmVxdWlyZWQgZm9yIGRpc3BsYXkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpZC5oCmluZGV4IDQwNjliZTg5Li44NDk5OTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lkLmgKQEAgLTE2MzIsNiArMTYzMiwyMyBAQAogI2RlZmluZQlQQUNLRVQzX01QRUdfSU5ERVgJCQkJMHgzQQogI2RlZmluZQlQQUNLRVQzX0NPUFlfRFcJCQkJCTB4M0IKICNkZWZpbmUJUEFDS0VUM19XQUlUX1JFR19NRU0JCQkJMHgzQworI2RlZmluZQkJV0FJVF9SRUdfTUVNX0ZVTkNUSU9OKHgpICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyAgICAgICAgICAgICAgICAvKiAwIC0gYWx3YXlzCisJCSAqIDEgLSA8CisJCSAqIDIgLSA8PQorCQkgKiAzIC0gPT0KKwkJICogNCAtICE9CisJCSAqIDUgLSA+PQorCQkgKiA2IC0gPgorCQkgKi8KKyNkZWZpbmUJCVdBSVRfUkVHX01FTV9NRU1fU1BBQ0UoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDQpCisgICAgICAgICAgICAgICAgLyogMCAtIHJlZworCQkgKiAxIC0gbWVtCisJCSAqLworI2RlZmluZQkJV0FJVF9SRUdfTUVNX0VOR0lORSh4KSAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyAgICAgICAgICAgICAgICAvKiAwIC0gbWUKKwkJICogMSAtIHBmcAorCQkgKi8KICNkZWZpbmUJUEFDS0VUM19NRU1fV1JJVEUJCQkJMHgzRAogI2RlZmluZQlQQUNLRVQzX0NPUFlfREFUQQkJCQkweDQwCiAjZGVmaW5lCVBBQ0tFVDNfQ1BfRE1BCQkJCQkweDQxCkBAIC0xODM1LDYgKzE4NTIsNyBAQAogI2RlZmluZQlETUFfUEFDS0VUX1RSQVAJCQkJCSAgMHg3CiAjZGVmaW5lCURNQV9QQUNLRVRfU1JCTV9XUklURQkJCQkgIDB4OQogI2RlZmluZQlETUFfUEFDS0VUX0NPTlNUQU5UX0ZJTEwJCQkgIDB4ZAorI2RlZmluZQlETUFfUEFDS0VUX1BPTExfUkVHX01FTQkJCQkgIDB4ZQogI2RlZmluZQlETUFfUEFDS0VUX05PUAkJCQkJICAweGYKIAogI2RlZmluZSBWQ0VfU1RBVFVTCQkJCQkweDIwMDA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZGMuYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jCmluZGV4IDMzNjc5NjAuLjk3ODk5M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkJCQkgY29uc3Qgc3RydWN0IHRlZ3JhX2RjX3dpbmRvdyAqd2luZG93KQogewogCXVuc2lnbmVkIGhfb2Zmc2V0LCB2X29mZnNldCwgaF9zaXplLCB2X3NpemUsIGhfZGRhLCB2X2RkYSwgYnBwOwotCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSwgZmxhZ3M7CiAJYm9vbCB5dXYsIHBsYW5hcjsKIAogCS8qCkBAIC0xODEsNiArMTgxLDggQEAKIAllbHNlCiAJCWJwcCA9IHBsYW5hciA/IDEgOiAyOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRjLT5sb2NrLCBmbGFncyk7CisKIAl2YWx1ZSA9IFdJTkRPV19BX1NFTEVDVCA8PCBpbmRleDsKIAl0ZWdyYV9kY193cml0ZWwoZGMsIHZhbHVlLCBEQ19DTURfRElTUExBWV9XSU5ET1dfSEVBREVSKTsKIApAQCAtMjczLDYgKzI3NSw3IEBACiAKIAkJY2FzZSBURUdSQV9CT19USUxJTkdfTU9ERV9CTE9DSzoKIAkJCURSTV9FUlJPUigiaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IGJsb2NrIGxpbmVhciBtb2RlXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0zMzEsNiArMzM0LDggQEAKIAogCXRlZ3JhX2RjX3dpbmRvd19jb21taXQoZGMsIGluZGV4KTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjLT5sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzM4LDExICszNDMsMTQgQEAKIHsKIAlzdHJ1Y3QgdGVncmFfZGMgKmRjID0gdG9fdGVncmFfZGMocGxhbmUtPmNydGMpOwogCXN0cnVjdCB0ZWdyYV9wbGFuZSAqcCA9IHRvX3RlZ3JhX3BsYW5lKHBsYW5lKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB2YWx1ZTsKIAogCWlmICghcGxhbmUtPmNydGMpCiAJCXJldHVybiAwOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRjLT5sb2NrLCBmbGFncyk7CisKIAl2YWx1ZSA9IFdJTkRPV19BX1NFTEVDVCA8PCBwLT5pbmRleDsKIAl0ZWdyYV9kY193cml0ZWwoZGMsIHZhbHVlLCBEQ19DTURfRElTUExBWV9XSU5ET1dfSEVBREVSKTsKIApAQCAtMzUyLDYgKzM2MCw4IEBACiAKIAl0ZWdyYV9kY193aW5kb3dfY29tbWl0KGRjLCBwLT5pbmRleCk7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYy0+bG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY5OSwxNCArNzA5LDE2IEBACiAJc3RydWN0IHRlZ3JhX2JvICpibyA9IHRlZ3JhX2ZiX2dldF9wbGFuZShmYiwgMCk7CiAJdW5zaWduZWQgaW50IGhfb2Zmc2V0ID0gMCwgdl9vZmZzZXQgPSAwOwogCXN0cnVjdCB0ZWdyYV9ib190aWxpbmcgdGlsaW5nOworCXVuc2lnbmVkIGxvbmcgdmFsdWUsIGZsYWdzOwogCXVuc2lnbmVkIGludCBmb3JtYXQsIHN3YXA7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlpbnQgZXJyOwogCiAJZXJyID0gdGVncmFfZmJfZ2V0X3RpbGluZyhmYiwgJnRpbGluZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGMtPmxvY2ssIGZsYWdzKTsKKwogCXRlZ3JhX2RjX3dyaXRlbChkYywgV0lORE9XX0FfU0VMRUNULCBEQ19DTURfRElTUExBWV9XSU5ET1dfSEVBREVSKTsKIAogCXZhbHVlID0gZmItPm9mZnNldHNbMF0gKyB5ICogZmItPnBpdGNoZXNbMF0gKwpAQCAtNzUyLDYgKzc2NCw3IEBACiAKIAkJY2FzZSBURUdSQV9CT19USUxJTkdfTU9ERV9CTE9DSzoKIAkJCURSTV9FUlJPUigiaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IGJsb2NrIGxpbmVhciBtb2RlXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC03NzgsNiArNzkxLDggQEAKIAl0ZWdyYV9kY193cml0ZWwoZGMsIHZhbHVlIDw8IDgsIERDX0NNRF9TVEFURV9DT05UUk9MKTsKIAl0ZWdyYV9kY193cml0ZWwoZGMsIHZhbHVlLCBEQ19DTURfU1RBVEVfQ09OVFJPTCk7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYy0+bG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgxNCwyMyArODI5LDMyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgYmFzZTsKIAlzdHJ1Y3QgdGVncmFfYm8gKmJvOwogCi0JaWYgKCFkYy0+ZXZlbnQpCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRybS0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCisJaWYgKCFkYy0+ZXZlbnQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKKwl9CiAKIAlibyA9IHRlZ3JhX2ZiX2dldF9wbGFuZShjcnRjLT5wcmltYXJ5LT5mYiwgMCk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGMtPmxvY2ssIGZsYWdzKTsKKwogCS8qIGNoZWNrIGlmIG5ldyBzdGFydCBhZGRyZXNzIGhhcyBiZWVuIGxhdGNoZWQgKi8KKwl0ZWdyYV9kY193cml0ZWwoZGMsIFdJTkRPV19BX1NFTEVDVCwgRENfQ01EX0RJU1BMQVlfV0lORE9XX0hFQURFUik7CiAJdGVncmFfZGNfd3JpdGVsKGRjLCBSRUFEX01VWCwgRENfQ01EX1NUQVRFX0FDQ0VTUyk7CiAJYmFzZSA9IHRlZ3JhX2RjX3JlYWRsKGRjLCBEQ19XSU5CVUZfU1RBUlRfQUREUik7CiAJdGVncmFfZGNfd3JpdGVsKGRjLCAwLCBEQ19DTURfU1RBVEVfQUNDRVNTKTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjLT5sb2NrLCBmbGFncyk7CisKIAlpZiAoYmFzZSA9PSBiby0+cGFkZHIgKyBjcnRjLT5wcmltYXJ5LT5mYi0+b2Zmc2V0c1swXSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFncyk7Ci0JCWRybV9zZW5kX3ZibGFua19ldmVudChkcm0sIGRjLT5waXBlLCBkYy0+ZXZlbnQpOwotCQlkcm1fdmJsYW5rX3B1dChkcm0sIGRjLT5waXBlKTsKKwkJZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoY3J0YywgZGMtPmV2ZW50KTsKKwkJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKIAkJZGMtPmV2ZW50ID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFncyk7CiAJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgdGVncmFfZGNfY2FuY2VsX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKQEAgLTg0Myw3ICs4NjcsNyBAQAogCiAJaWYgKGRjLT5ldmVudCAmJiBkYy0+ZXZlbnQtPmJhc2UuZmlsZV9wcml2ID09IGZpbGUpIHsKIAkJZGMtPmV2ZW50LT5iYXNlLmRlc3Ryb3koJmRjLT5ldmVudC0+YmFzZSk7Ci0JCWRybV92YmxhbmtfcHV0KGRybSwgZGMtPnBpcGUpOworCQlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOwogCQlkYy0+ZXZlbnQgPSBOVUxMOwogCX0KIApAQCAtODUzLDE2ICs4NzcsMTYgQEAKIHN0YXRpYyBpbnQgdGVncmFfZGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCQkgICAgICBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCwgdWludDMyX3QgcGFnZV9mbGlwX2ZsYWdzKQogeworCXVuc2lnbmVkIGludCBwaXBlID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7CiAJc3RydWN0IHRlZ3JhX2RjICpkYyA9IHRvX3RlZ3JhX2RjKGNydGMpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBjcnRjLT5kZXY7CiAKIAlpZiAoZGMtPmV2ZW50KQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGV2ZW50KSB7Ci0JCWV2ZW50LT5waXBlID0gZGMtPnBpcGU7CisJCWV2ZW50LT5waXBlID0gcGlwZTsKIAkJZGMtPmV2ZW50ID0gZXZlbnQ7Ci0JCWRybV92YmxhbmtfZ2V0KGRybSwgZGMtPnBpcGUpOworCQlkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpOwogCX0KIAogCXRlZ3JhX2RjX3NldF9iYXNlKGRjLCAwLCAwLCBmYik7CkBAIC0xMTI3LDcgKzExNTEsNyBAQAogCQkvKgogCQlkZXZfZGJnKGRjLT5kZXYsICIlcygpOiB2ZXJ0aWNhbCBibGFua1xuIiwgX19mdW5jX18pOwogCQkqLwotCQlkcm1faGFuZGxlX3ZibGFuayhkYy0+YmFzZS5kZXYsIGRjLT5waXBlKTsKKwkJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmZGMtPmJhc2UpOwogCQl0ZWdyYV9kY19maW5pc2hfcGFnZV9mbGlwKGRjKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uYwppbmRleCBlNTQ5YWZlLi5kNGY4Mjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5jCkBAIC02OTQsMjQgKzY5NCwyOCBAQAogCS5sbHNlZWsgPSBub29wX2xsc2VlaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX2NydGMgKnRlZ3JhX2NydGNfZnJvbV9waXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBwaXBlKQorc3RhdGljIHN0cnVjdCBkcm1fY3J0YyAqdGVncmFfY3J0Y19mcm9tX3BpcGUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgcGlwZSkKIHsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkcm0tPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3QgdGVncmFfZGMgKmRjID0gdG9fdGVncmFfZGMoY3J0Yyk7Ci0KLQkJaWYgKGRjLT5waXBlID09IHBpcGUpCisJCWlmIChwaXBlID09IGRybV9jcnRjX2luZGV4KGNydGMpKQogCQkJcmV0dXJuIGNydGM7CiAJfQogCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB1MzIgdGVncmFfZHJtX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3N0YXRpYyB1MzIgdGVncmFfZHJtX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQgcGlwZSkKIHsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSB0ZWdyYV9jcnRjX2Zyb21fcGlwZShkcm0sIHBpcGUpOworCisJaWYgKCFjcnRjKQorCQlyZXR1cm4gMDsKKwogCS8qIFRPRE86IGltcGxlbWVudCByZWFsIGhhcmR3YXJlIGNvdW50ZXIgdXNpbmcgc3luY3BvaW50cyAqLwotCXJldHVybiBkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0Yyk7CisJcmV0dXJuIGRybV9jcnRjX3ZibGFua19jb3VudChjcnRjKTsKIH0KIAogc3RhdGljIGludCB0ZWdyYV9kcm1fZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQgcGlwZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYwppbmRleCBkYTMyMDg2Li44Nzc3YjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jCkBAIC0yMTYsMzIgKzIxNiw1OCBAQAogCX0KIH0KIAotc3RhdGljIGludCB0ZWdyYV9ib19nZXRfcGFnZXMoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHRlZ3JhX2JvICpibywKLQkJCSAgICAgIHNpemVfdCBzaXplKQorc3RhdGljIGludCB0ZWdyYV9ib19nZXRfcGFnZXMoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHRlZ3JhX2JvICpibykKIHsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnM7CisJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CisJdW5zaWduZWQgaW50IGk7CisKIAliby0+cGFnZXMgPSBkcm1fZ2VtX2dldF9wYWdlcygmYm8tPmdlbSk7CiAJaWYgKElTX0VSUihiby0+cGFnZXMpKQogCQlyZXR1cm4gUFRSX0VSUihiby0+cGFnZXMpOwogCi0JYm8tPm51bV9wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKKwliby0+bnVtX3BhZ2VzID0gYm8tPmdlbS5zaXplID4+IFBBR0VfU0hJRlQ7CiAKLQliby0+c2d0ID0gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKGJvLT5wYWdlcywgYm8tPm51bV9wYWdlcyk7Ci0JaWYgKElTX0VSUihiby0+c2d0KSkgewotCQlkcm1fZ2VtX3B1dF9wYWdlcygmYm8tPmdlbSwgYm8tPnBhZ2VzLCBmYWxzZSwgZmFsc2UpOwotCQlyZXR1cm4gUFRSX0VSUihiby0+c2d0KTsKKwlzZ3QgPSBkcm1fcHJpbWVfcGFnZXNfdG9fc2coYm8tPnBhZ2VzLCBiby0+bnVtX3BhZ2VzKTsKKwlpZiAoSVNfRVJSKHNndCkpCisJCWdvdG8gcHV0X3BhZ2VzOworCisJLyoKKwkgKiBGYWtlIHVwIHRoZSBTRyB0YWJsZSBzbyB0aGF0IGRtYV9tYXBfc2coKSBjYW4gYmUgdXNlZCB0byBmbHVzaCB0aGUKKwkgKiBwYWdlcyBhc3NvY2lhdGVkIHdpdGggaXQuIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0CisJICogdGhlIERNQSBBUEkgZG9lc24ndCBob29rIGludG8gSU9NTVUgb24gVGVncmEsIHRoZXJlZm9yZSBtYXBwaW5nIGlzCisJICogb25seSBjYWNoZSBtYWludGVuYW5jZS4KKwkgKgorCSAqIFRPRE86IFJlcGxhY2UgdGhpcyBieSBkcm1fY2xmbGFzaF9zZygpIG9uY2UgaXQgY2FuIGJlIGltcGxlbWVudGVkCisJICogd2l0aG91dCByZWx5aW5nIG9uIHN5bWJvbHMgdGhhdCBhcmUgbm90IGV4cG9ydGVkLgorCSAqLworCWZvcl9lYWNoX3NnKHNndC0+c2dsLCBzLCBzZ3QtPm5lbnRzLCBpKQorCQlzZ19kbWFfYWRkcmVzcyhzKSA9IHNnX3BoeXMocyk7CisKKwlpZiAoZG1hX21hcF9zZyhkcm0tPmRldiwgc2d0LT5zZ2wsIHNndC0+bmVudHMsIERNQV9UT19ERVZJQ0UpID09IDApIHsKKwkJc2d0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byByZWxlYXNlX3NndDsKIAl9CiAKKwliby0+c2d0ID0gc2d0OworCiAJcmV0dXJuIDA7CisKK3JlbGVhc2Vfc2d0OgorCXNnX2ZyZWVfdGFibGUoc2d0KTsKKwlrZnJlZShzZ3QpOworcHV0X3BhZ2VzOgorCWRybV9nZW1fcHV0X3BhZ2VzKCZiby0+Z2VtLCBiby0+cGFnZXMsIGZhbHNlLCBmYWxzZSk7CisJcmV0dXJuIFBUUl9FUlIoc2d0KTsKIH0KIAotc3RhdGljIGludCB0ZWdyYV9ib19hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgdGVncmFfYm8gKmJvLAotCQkJICBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBpbnQgdGVncmFfYm9fYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHRlZ3JhX2JvICpibykKIHsKIAlzdHJ1Y3QgdGVncmFfZHJtICp0ZWdyYSA9IGRybS0+ZGV2X3ByaXZhdGU7CiAJaW50IGVycjsKIAogCWlmICh0ZWdyYS0+ZG9tYWluKSB7Ci0JCWVyciA9IHRlZ3JhX2JvX2dldF9wYWdlcyhkcm0sIGJvLCBzaXplKTsKKwkJZXJyID0gdGVncmFfYm9fZ2V0X3BhZ2VzKGRybSwgYm8pOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAKQEAgLTI1MSw2ICsyNzcsOCBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0gZWxzZSB7CisJCXNpemVfdCBzaXplID0gYm8tPmdlbS5zaXplOworCiAJCWJvLT52YWRkciA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoZHJtLT5kZXYsIHNpemUsICZiby0+cGFkZHIsCiAJCQkJCQkgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKIAkJaWYgKCFiby0+dmFkZHIpIHsKQEAgLTI3NCw3ICszMDIsNyBAQAogCWlmIChJU19FUlIoYm8pKQogCQlyZXR1cm4gYm87CiAKLQllcnIgPSB0ZWdyYV9ib19hbGxvYyhkcm0sIGJvLCBzaXplKTsKKwllcnIgPSB0ZWdyYV9ib19hbGxvYyhkcm0sIGJvKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byByZWxlYXNlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCmluZGV4IDdiNWQyMjEuLjZjNmI2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCkBAIC00MDYsMTEgKzQwNiw5IEBACiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCQktLWRldl9wcml2LT5udW1fM2RfcmVzb3VyY2VzOwogCX0gZWxzZSBpZiAodW5oaWRlX3N2Z2EpIHsKLQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19FTkFCTEUsCiAJCQkgIHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19FTkFCTEUpICYKIAkJCSAgflNWR0FfUkVHX0VOQUJMRV9ISURFKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCX0KIAogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnJlbGVhc2VfbXV0ZXgpOwpAQCAtNDMzLDEzICs0MzEsMTAgQEAKIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+cmVsZWFzZV9tdXRleCk7CiAJaWYgKHVubGlrZWx5KC0tZGV2X3ByaXYtPm51bV8zZF9yZXNvdXJjZXMgPT0gMCkpCiAJCXZtd19yZWxlYXNlX2RldmljZShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoaGlkZV9zdmdhKSB7Ci0JCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJZWxzZSBpZiAoaGlkZV9zdmdhKQogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0VOQUJMRSwKIAkJCSAgdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0VOQUJMRSkgfAogCQkJICBTVkdBX1JFR19FTkFCTEVfSElERSk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKLQl9CiAKIAluM2QgPSAoaW50MzJfdCkgZGV2X3ByaXYtPm51bV8zZF9yZXNvdXJjZXM7CiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cmVsZWFzZV9tdXRleCk7CkBAIC02MDAsMTIgKzU5NSwxNCBAQAogCWRldl9wcml2LT5kZXYgPSBkZXY7CiAJZGV2X3ByaXYtPnZtd19jaGlwc2V0ID0gY2hpcHNldDsKIAlkZXZfcHJpdi0+bGFzdF9yZWFkX3NlcW5vID0gKHVpbnQzMl90KSAtMTAwOwotCW11dGV4X2luaXQoJmRldl9wcml2LT5od19tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnJlbGVhc2VfbXV0ZXgpOwogCW11dGV4X2luaXQoJmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsKIAlyd2xvY2tfaW5pdCgmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOwogCXR0bV9sb2NrX2luaXQoJmRldl9wcml2LT5yZXNlcnZhdGlvbl9zZW0pOworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+aHdfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5jYXBfbG9jayk7CiAKIAlmb3IgKGkgPSB2bXdfcmVzX2NvbnRleHQ7IGkgPCB2bXdfcmVzX21heDsgKytpKSB7CiAJCWlkcl9pbml0KCZkZXZfcHJpdi0+cmVzX2lkcltpXSk7CkBAIC02MjYsMTQgKzYyMywxMSBAQAogCiAJZGV2X3ByaXYtPmVuYWJsZV9mYiA9IGVuYWJsZV9mYmRldjsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7Ci0KIAl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lELCBTVkdBX0lEXzIpOwogCXN2Z2FfaWQgPSB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfSUQpOwogCWlmIChzdmdhX2lkICE9IFNWR0FfSURfMikgewogCQlyZXQgPSAtRU5PU1lTOwogCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIFNWR0EgSUQgMHgleFxuIiwgc3ZnYV9pZCk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAkJZ290byBvdXRfZXJyMDsKIAl9CiAKQEAgLTY4MywxMCArNjc3LDggQEAKIAkJZGV2X3ByaXYtPnByaW1fYmJfbWVtID0gZGV2X3ByaXYtPnZyYW1fc2l6ZTsKIAogCXJldCA9IHZtd19kbWFfbWFza3MoZGV2X3ByaXYpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0X2VycjA7Ci0JfQogCiAJLyoKIAkgKiBMaW1pdCBiYWNrIGJ1ZmZlciBzaXplIHRvIFZSQU0gc2l6ZS4gIFJlbW92ZSB0aGlzIG9uY2UKQEAgLTY5NSw4ICs2ODcsNiBAQAogCWlmIChkZXZfcHJpdi0+cHJpbV9iYl9tZW0gPiBkZXZfcHJpdi0+dnJhbV9zaXplKQogCQlkZXZfcHJpdi0+cHJpbV9iYl9tZW0gPSBkZXZfcHJpdi0+dnJhbV9zaXplOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwotCiAJdm13X3ByaW50X2NhcGFiaWxpdGllcyhkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzKTsKIAogCWlmIChkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfR01SMikgewpAQCAtMTE2MCw5ICsxMTUwLDcgQEAKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJCXJldHVybiByZXQ7CiAJCXZtd19rbXNfc2F2ZV92Z2EoZGV2X3ByaXYpOwotCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX1RSQUNFUywgMCk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAl9CiAKIAlpZiAoYWN0aXZlKSB7CkBAIC0xMTk2LDkgKzExODQsNyBAQAogCWlmICghZGV2X3ByaXYtPmVuYWJsZV9mYikgewogCQl2bXdfa21zX3Jlc3RvcmVfdmdhKGRldl9wcml2KTsKIAkJdm13XzNkX3Jlc291cmNlX2RlYyhkZXZfcHJpdiwgdHJ1ZSk7Ci0JCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfVFJBQ0VTLCAxKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTIzMyw5ICsxMjE5LDcgQEAKIAkJCURSTV9FUlJPUigiVW5hYmxlIHRvIGNsZWFuIFZSQU0gb24gbWFzdGVyIGRyb3AuXG4iKTsKIAkJdm13X2ttc19yZXN0b3JlX3ZnYShkZXZfcHJpdik7CiAJCXZtd18zZF9yZXNvdXJjZV9kZWMoZGV2X3ByaXYsIHRydWUpOwotCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX1RSQUNFUywgMSk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAl9CiAKIAlkZXZfcHJpdi0+YWN0aXZlX21hc3RlciA9ICZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyOwpAQCAtMTM2NywxMCArMTM1MSw4IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JRCwgU1ZHQV9JRF8yKTsKIAkodm9pZCkgdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0lEKTsKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAKIAkvKioKIAkgKiBSZWNsYWltIDNkIHJlZmVyZW5jZSBoZWxkIGJ5IGZiZGV2IGFuZCBwb3RlbnRpYWxseQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAppbmRleCA0ZWU3OTliLi5kMjZhNmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaApAQCAtMzk5LDcgKzM5OSw4IEBACiAJdWludDMyX3QgbWVtb3J5X3NpemU7CiAJYm9vbCBoYXNfZ21yOwogCWJvb2wgaGFzX21vYjsKLQlzdHJ1Y3QgbXV0ZXggaHdfbXV0ZXg7CisJc3BpbmxvY2tfdCBod19sb2NrOworCXNwaW5sb2NrX3QgY2FwX2xvY2s7CiAKIAkvKgogCSAqIFZHQSByZWdpc3RlcnMuCkBAIC00NDksOCArNDUwLDkgQEAKIAlhdG9taWNfdCBtYXJrZXJfc2VxOwogCXdhaXRfcXVldWVfaGVhZF90IGZlbmNlX3F1ZXVlOwogCXdhaXRfcXVldWVfaGVhZF90IGZpZm9fcXVldWU7Ci0JaW50IGZlbmNlX3F1ZXVlX3dhaXRlcnM7IC8qIFByb3RlY3RlZCBieSBod19tdXRleCAqLwotCWludCBnb2FsX3F1ZXVlX3dhaXRlcnM7IC8qIFByb3RlY3RlZCBieSBod19tdXRleCAqLworCXNwaW5sb2NrX3Qgd2FpdGVyX2xvY2s7CisJaW50IGZlbmNlX3F1ZXVlX3dhaXRlcnM7IC8qIFByb3RlY3RlZCBieSB3YWl0ZXJfbG9jayAqLworCWludCBnb2FsX3F1ZXVlX3dhaXRlcnM7IC8qIFByb3RlY3RlZCBieSB3YWl0ZXJfbG9jayAqLwogCWF0b21pY190IGZpZm9fcXVldWVfd2FpdGVyczsKIAl1aW50MzJfdCBsYXN0X3JlYWRfc2Vxbm87CiAJc3BpbmxvY2tfdCBpcnFfbG9jazsKQEAgLTU1MywyMCArNTU1LDM1IEBACiAJcmV0dXJuIChzdHJ1Y3Qgdm13X21hc3RlciAqKSBtYXN0ZXItPmRyaXZlcl9wcml2OwogfQogCisvKgorICogVGhlIGxvY2tpbmcgaGVyZSBpcyBmaW5lLWdyYWluZWQsIHNvIHRoYXQgaXQgaXMgcGVyZm9ybWVkIG9uY2UKKyAqIGZvciBldmVyeSByZWFkLSBhbmQgd3JpdGUgb3BlcmF0aW9uLiBUaGlzIGlzIG9mIGNvdXJzZSBjb3N0bHksIGJ1dCB3ZQorICogZG9uJ3QgcGVyZm9ybSBtdWNoIHJlZ2lzdGVyIGFjY2VzcyBpbiB0aGUgdGltaW5nIGNyaXRpY2FsIHBhdGhzIGFueXdheS4KKyAqIEluc3RlYWQgd2UgaGF2ZSB0aGUgZXh0cmEgYmVuZWZpdCBvZiBiZWluZyBzdXJlIHRoYXQgd2UgZG9uJ3QgZm9yZ2V0CisgKiB0aGUgaHcgbG9jayBhcm91bmQgcmVnaXN0ZXIgYWNjZXNzZXMuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB2bXdfd3JpdGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdWludDMyX3QgdmFsdWUpCiB7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmh3X2xvY2ssIGlycV9mbGFncyk7CiAJb3V0bChvZmZzZXQsIGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9JTkRFWF9QT1JUKTsKIAlvdXRsKHZhbHVlLCBkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfVkFMVUVfUE9SVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmh3X2xvY2ssIGlycV9mbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3Qgdm13X3JlYWQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewotCXVpbnQzMl90IHZhbDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwl1MzIgdmFsOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5od19sb2NrLCBpcnFfZmxhZ3MpOwogCW91dGwob2Zmc2V0LCBkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfSU5ERVhfUE9SVCk7CiAJdmFsID0gaW5sKGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9WQUxVRV9QT1JUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aHdfbG9jaywgaXJxX2ZsYWdzKTsKKwogCXJldHVybiB2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mZW5jZS5jCmluZGV4IGI3NTk0Y2IuLjk0NWYxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZlbmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmVuY2UuYwpAQCAtMzUsNyArMzUsNyBAQAogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXY7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgZmVuY2VfbGlzdDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaywgcGluZ193b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXUzMiB1c2VyX2ZlbmNlX3NpemU7CiAJdTMyIGZlbmNlX3NpemU7CiAJdTMyIGV2ZW50X2ZlbmNlX2FjdGlvbl9zaXplOwpAQCAtMTM0LDE0ICsxMzQsNiBAQAogCXJldHVybiAic3ZnYSI7CiB9CiAKLXN0YXRpYyB2b2lkIHZtd19mZW5jZV9waW5nX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB2bXdfZmVuY2VfbWFuYWdlciAqZm1hbiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdm13X2ZlbmNlX21hbmFnZXIsIHBpbmdfd29yayk7Ci0KLQl2bXdfZmlmb19waW5nX2hvc3QoZm1hbi0+ZGV2X3ByaXYsIFNWR0FfU1lOQ19HRU5FUklDKTsKLX0KLQogc3RhdGljIGJvb2wgdm13X2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGZlbmNlICpmKQogewogCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICpmZW5jZSA9CkBAIC0xNTUsMTEgKzE0Nyw3IEBACiAJaWYgKHNlcW5vIC0gZmVuY2UtPmJhc2Uuc2Vxbm8gPCBWTVdfRkVOQ0VfV1JBUCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKG11dGV4X3RyeWxvY2soJmRldl9wcml2LT5od19tdXRleCkpIHsKLQkJdm13X2ZpZm9fcGluZ19ob3N0X2xvY2tlZChkZXZfcHJpdiwgU1ZHQV9TWU5DX0dFTkVSSUMpOwotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7Ci0JfSBlbHNlCi0JCXNjaGVkdWxlX3dvcmsoJmZtYW4tPnBpbmdfd29yayk7CisJdm13X2ZpZm9fcGluZ19ob3N0KGRldl9wcml2LCBTVkdBX1NZTkNfR0VORVJJQyk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTMwNSw3ICsyOTMsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZmbWFuLT5mZW5jZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZm1hbi0+Y2xlYW51cF9saXN0KTsKIAlJTklUX1dPUksoJmZtYW4tPndvcmssICZ2bXdfZmVuY2Vfd29ya19mdW5jKTsKLQlJTklUX1dPUksoJmZtYW4tPnBpbmdfd29yaywgJnZtd19mZW5jZV9waW5nX2Z1bmMpOwogCWZtYW4tPmZpZm9fZG93biA9IHRydWU7CiAJZm1hbi0+dXNlcl9mZW5jZV9zaXplID0gdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHZtd191c2VyX2ZlbmNlKSk7CiAJZm1hbi0+ZmVuY2Vfc2l6ZSA9IHR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB2bXdfZmVuY2Vfb2JqKSk7CkBAIC0zMjMsNyArMzEwLDYgQEAKIAlib29sIGxpc3RzX2VtcHR5OwogCiAJKHZvaWQpIGNhbmNlbF93b3JrX3N5bmMoJmZtYW4tPndvcmspOwotCSh2b2lkKSBjYW5jZWxfd29ya19zeW5jKCZmbWFuLT5waW5nX3dvcmspOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZtYW4tPmxvY2ssIGlycV9mbGFncyk7CiAJbGlzdHNfZW1wdHkgPSBsaXN0X2VtcHR5KCZmbWFuLT5mZW5jZV9saXN0KSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCmluZGV4IDA5ZTEwYWUuLjM5ZjJiMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKQEAgLTQ0LDEwICs0NCwxMCBAQAogCQlpZiAoIWRldl9wcml2LT5oYXNfbW9iKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJCXNwaW5fbG9jaygmZGV2X3ByaXYtPmNhcF9sb2NrKTsKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ERVZfQ0FQLCBTVkdBM0RfREVWQ0FQXzNEKTsKIAkJcmVzdWx0ID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0RFVl9DQVApOwotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCiAJCXJldHVybiAocmVzdWx0ICE9IDApOwogCX0KQEAgLTEyMCw3ICsxMjAsNiBAQAogCURSTV9JTkZPKCJoZWlnaHQgJWRcbiIsIHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19IRUlHSFQpKTsKIAlEUk1fSU5GTygiYnBwICVkXG4iLCB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfQklUU19QRVJfUElYRUwpKTsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJZGV2X3ByaXYtPmVuYWJsZV9zdGF0ZSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19FTkFCTEUpOwogCWRldl9wcml2LT5jb25maWdfZG9uZV9zdGF0ZSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19DT05GSUdfRE9ORSk7CiAJZGV2X3ByaXYtPnRyYWNlc19zdGF0ZSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19UUkFDRVMpOwpAQCAtMTQzLDcgKzE0Miw2IEBACiAJbWIoKTsKIAogCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfQ09ORklHX0RPTkUsIDEpOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAogCW1heCA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX01BWCk7CiAJbWluID0gaW9yZWFkMzIoZmlmb19tZW0gICsgU1ZHQV9GSUZPX01JTik7CkBAIC0xNjAsMzEgKzE1OCwyOCBAQAogCXJldHVybiB2bXdfZmlmb19zZW5kX2ZlbmNlKGRldl9wcml2LCAmZHVtbXkpOwogfQogCi12b2lkIHZtd19maWZvX3BpbmdfaG9zdF9sb2NrZWQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgcmVhc29uKQordm9pZCB2bXdfZmlmb19waW5nX2hvc3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgcmVhc29uKQogewogCV9fbGUzMiBfX2lvbWVtICpmaWZvX21lbSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7CisJc3RhdGljIERFRklORV9TUElOTE9DSyhwaW5nX2xvY2spOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCisJLyoKKwkgKiBUaGUgcGluZ19sb2NrIGlzIG5lZWRlZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW4gYXRvbWljCisJICogdGVzdC1hbmQtc2V0IG9mIHRoZSBTVkdBX0ZJRk9fQlVTWSByZWdpc3Rlci4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGluZ19sb2NrLCBpcnFfZmxhZ3MpOwogCWlmICh1bmxpa2VseShpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19CVVNZKSA9PSAwKSkgewogCQlpb3dyaXRlMzIoMSwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQlVTWSk7CiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfU1lOQywgcmVhc29uKTsKIAl9Ci19Ci0KLXZvaWQgdm13X2ZpZm9fcGluZ19ob3N0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IHJlYXNvbikKLXsKLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwotCi0Jdm13X2ZpZm9fcGluZ19ob3N0X2xvY2tlZChkZXZfcHJpdiwgcmVhc29uKTsKLQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5nX2xvY2ssIGlycV9mbGFncyk7CiB9CiAKIHZvaWQgdm13X2ZpZm9fcmVsZWFzZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm8pCiB7CiAJX19sZTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7Ci0KIAl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX1NZTkMsIFNWR0FfU1lOQ19HRU5FUklDKTsKIAl3aGlsZSAodm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0JVU1kpICE9IDApCiAJCTsKQEAgLTE5OCw3ICsxOTMsNiBAQAogCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfVFJBQ0VTLAogCQkgIGRldl9wcml2LT50cmFjZXNfc3RhdGUpOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCXZtd19tYXJrZXJfcXVldWVfdGFrZWRvd24oJmZpZm8tPm1hcmtlcl9xdWV1ZSk7CiAKIAlpZiAobGlrZWx5KGZpZm8tPnN0YXRpY19idWZmZXIgIT0gTlVMTCkpIHsKQEAgLTI3MSw3ICsyNjUsNyBAQAogCQlyZXR1cm4gdm13X2ZpZm9fd2FpdF9ub2lycShkZXZfcHJpdiwgYnl0ZXMsCiAJCQkJCSAgIGludGVycnVwdGlibGUsIHRpbWVvdXQpOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX2xvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiAJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZkZXZfcHJpdi0+Zmlmb19xdWV1ZV93YWl0ZXJzKSA+IDApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAkJb3V0bChTVkdBX0lSUUZMQUdfRklGT19QUk9HUkVTUywKQEAgLTI4MCw3ICsyNzQsNyBAQAogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIGRldl9wcml2LT5pcnFfbWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCiAJaWYgKGludGVycnVwdGlibGUpCiAJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0CkBAIC0yOTYsMTQgKzI5MCwxNCBAQAogCWVsc2UgaWYgKGxpa2VseShyZXQgPiAwKSkKIAkJcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXZfcHJpdi0+Zmlmb19xdWV1ZV93YWl0ZXJzKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOwogCQlkZXZfcHJpdi0+aXJxX21hc2sgJj0gflNWR0FfSVJRRkxBR19GSUZPX1BST0dSRVNTOwogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIGRldl9wcml2LT5pcnFfbWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCmluZGV4IDM3ODgxZWMuLjY5YzhjZTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMKQEAgLTEzNSwxMyArMTM1LDEzIEBACiAJCShwYWlyX29mZnNldCArIG1heF9zaXplICogc2l6ZW9mKFNWR0EzZENhcFBhaXIpKSAvIHNpemVvZih1MzIpOwogCWNvbXBhdF9jYXAtPmhlYWRlci50eXBlID0gU1ZHQTNEQ0FQU19SRUNPUkRfREVWQ0FQUzsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBtYXhfc2l6ZTsgKytpKSB7CiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfREVWX0NBUCwgaSk7CiAJCWNvbXBhdF9jYXAtPnBhaXJzW2ldWzBdID0gaTsKIAkJY29tcGF0X2NhcC0+cGFpcnNbaV1bMV0gPSB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfREVWX0NBUCk7CiAJfQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmNhcF9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkxLDEyICsxOTEsMTIgQEAKIAkJaWYgKG51bSA+IFNWR0EzRF9ERVZDQVBfTUFYKQogCQkJbnVtID0gU1ZHQTNEX0RFVkNBUF9NQVg7CiAKLQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKIAkJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfREVWX0NBUCwgaSk7CiAJCQkqYm91bmNlMzIrKyA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19ERVZfQ0FQKTsKIAkJfQotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCX0gZWxzZSBpZiAoZ2Jfb2JqZWN0cykgewogCQlyZXQgPSB2bXdfZmlsbF9jb21wYXRfY2FwKGRldl9wcml2LCBib3VuY2UsIHNpemUpOwogCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYwppbmRleCAwYzQyMzc2Li45ZmU5ODI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYwpAQCAtNjIsMTMgKzYyLDggQEAKIAogc3RhdGljIGJvb2wgdm13X2ZpZm9faWRsZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCBzZXFubykKIHsKLQl1aW50MzJfdCBidXN5OwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKLQlidXN5ID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0JVU1kpOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKLQotCXJldHVybiAoYnVzeSA9PSAwKTsKKwlyZXR1cm4gKHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19CVVNZKSA9PSAwKTsKIH0KIAogdm9pZCB2bXdfdXBkYXRlX3NlcW5vKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0xODQsNyArMTc5LDcgQEAKIAogdm9pZCB2bXdfc2Vxbm9fd2FpdGVyX2FkZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogewotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCWlmIChkZXZfcHJpdi0+ZmVuY2VfcXVldWVfd2FpdGVycysrID09IDApIHsKIAkJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKQEAgLTE5NSwxMiArMTkwLDEyIEBACiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSVJRTUFTSywgZGV2X3ByaXYtPmlycV9tYXNrKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOwogCX0KLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiB9CiAKIHZvaWQgdm13X3NlcW5vX3dhaXRlcl9yZW1vdmUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIHsKLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fbG9jaygmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKIAlpZiAoLS1kZXZfcHJpdi0+ZmVuY2VfcXVldWVfd2FpdGVycyA9PSAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCkBAIC0yMDksMTMgKzIwNCwxMyBAQAogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIGRldl9wcml2LT5pcnFfbWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogfQogCiAKIHZvaWQgdm13X2dvYWxfd2FpdGVyX2FkZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogewotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCWlmIChkZXZfcHJpdi0+Z29hbF9xdWV1ZV93YWl0ZXJzKysgPT0gMCkgewogCQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIApAQCAtMjI2LDEyICsyMjEsMTIgQEAKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLLCBkZXZfcHJpdi0+aXJxX21hc2spOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycV9mbGFncyk7CiAJfQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKIH0KIAogdm9pZCB2bXdfZ29hbF93YWl0ZXJfcmVtb3ZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX2xvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiAJaWYgKC0tZGV2X3ByaXYtPmdvYWxfcXVldWVfd2FpdGVycyA9PSAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCkBAIC0yNDAsNyArMjM1LDcgQEAKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLLCBkZXZfcHJpdi0+aXJxX21hc2spOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycV9mbGFncyk7CiAJfQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKIH0KIAogaW50IHZtd193YWl0X3NlcW5vKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0zMTUsOSArMzEwLDcgQEAKIAlpZiAoIShkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfSVJRTUFTSykpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLLCAwKTsKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAKIAlzdGF0dXMgPSBpbmwoZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX0lSUVNUQVRVU19QT1JUKTsKIAlvdXRsKHN0YXR1cywgZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX0lSUVNUQVRVU19QT1JUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggMzcyNWI1Mi4uODcyNWI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTE4MjgsOSArMTgyOCw3IEBACiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CiAJc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKmR1ID0gdm13X2Nvbm5lY3Rvcl90b19kdShjb25uZWN0b3IpOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAludW1fZGlzcGxheXMgPSB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfTlVNX0RJU1BMQVlTKTsKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAKIAlyZXR1cm4gKCh2bXdfY29ubmVjdG9yX3RvX2R1KGNvbm5lY3RvciktPnVuaXQgPCBudW1fZGlzcGxheXMgJiYKIAkJIGR1LT5wcmVmX2FjdGl2ZSkgPwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL0tjb25maWcKaW5kZXggMjMwYjZmOC4uZGZkYzI2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC0yNyw3ICsyNyw4IEBACiAKIGNvbmZpZyBISURfQkFUVEVSWV9TVFJFTkdUSAogCWJvb2wgIkJhdHRlcnkgbGV2ZWwgcmVwb3J0aW5nIGZvciBISUQgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIEhJRCAmJiBQT1dFUl9TVVBQTFkgJiYgSElEID0gUE9XRVJfU1VQUExZCisJZGVwZW5kcyBvbiBISUQKKwlzZWxlY3QgUE9XRVJfU1VQUExZCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCVRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBvZiByZXBvcnRpbmcgYmF0dGVyeSBzdHJlbmd0aCAoZm9yIEhJRCBkZXZpY2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCBjM2QwYWMxLi44YjYzODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTE4MDUsNiArMTgwNSw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfRVJHT181MjVWKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsIFVTQl9ERVZJQ0VfSURfS1lFX0VBU1lQRU5fSTQwNVgpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfTU9VU0VQRU5fSTYwOFgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfTU9VU0VQRU5fSTYwOFhfMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9FQVNZUEVOX002MTBYKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MQUJURUMsIFVTQl9ERVZJQ0VfSURfTEFCVEVDX1dJUkVMRVNTX0tFWUJPQVJEKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MQ1BPV0VSLCBVU0JfREVWSUNFX0lEX0xDUE9XRVJfTEMxMDAwICkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCA3NDYwZjM0Li45MjQzMzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC01MjYsNiArNTI2LDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9LWUVfR1BFTl81NjAJMHg1MDAzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1lFX0VBU1lQRU5fSTQwNVgJMHg1MDEwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1lFX01PVVNFUEVOX0k2MDhYCTB4NTAxMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9NT1VTRVBFTl9JNjA4WF8yCTB4NTAxYQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9FQVNZUEVOX002MTBYCTB4NTAxMwogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTEFCVEVDCQkweDEwMjAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKaW5kZXggZTBhMGYwNi4uOTUwNTYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKQEAgLTMxMiw2ICszMTIsOSBAQAogCQkJICAgICAgIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTXzIwMTFfQU5TSSksCiAJICBISURfQkFUVEVSWV9RVUlSS19QRVJDRU5UIHwgSElEX0JBVFRFUllfUVVJUktfRkVBVFVSRSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwKKwkJCSAgICAgICBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU18yMDExX0lTTyksCisJICBISURfQkFUVEVSWV9RVUlSS19QRVJDRU5UIHwgSElEX0JBVFRFUllfUVVJUktfRkVBVFVSRSB9LAorCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwKIAkJVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSksCiAJICBISURfQkFUVEVSWV9RVUlSS19QRVJDRU5UIHwgSElEX0JBVFRFUllfUVVJUktfRkVBVFVSRSB9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQta3llLmMgYi9kcml2ZXJzL2hpZC9oaWQta3llLmMKaW5kZXggYjkyYmYwMS4uMTU4ZmNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWt5ZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1reWUuYwpAQCAtMzIzLDYgKzMyMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBVU0JfREVWSUNFX0lEX0tZRV9NT1VTRVBFTl9JNjA4WDoKKwljYXNlIFVTQl9ERVZJQ0VfSURfS1lFX01PVVNFUEVOX0k2MDhYXzI6CiAJCWlmICgqcnNpemUgPT0gTU9VU0VQRU5fSTYwOFhfUkRFU0NfT1JJR19TSVpFKSB7CiAJCQlyZGVzYyA9IG1vdXNlcGVuX2k2MDh4X3JkZXNjX2ZpeGVkOwogCQkJKnJzaXplID0gc2l6ZW9mKG1vdXNlcGVuX2k2MDh4X3JkZXNjX2ZpeGVkKTsKQEAgLTQxNSw2ICs0MTYsNyBAQAogCXN3aXRjaCAoaWQtPnByb2R1Y3QpIHsKIAljYXNlIFVTQl9ERVZJQ0VfSURfS1lFX0VBU1lQRU5fSTQwNVg6CiAJY2FzZSBVU0JfREVWSUNFX0lEX0tZRV9NT1VTRVBFTl9JNjA4WDoKKwljYXNlIFVTQl9ERVZJQ0VfSURfS1lFX01PVVNFUEVOX0k2MDhYXzI6CiAJY2FzZSBVU0JfREVWSUNFX0lEX0tZRV9FQVNZUEVOX002MTBYOgogCQlyZXQgPSBreWVfdGFibGV0X2VuYWJsZShoZGV2KTsKIAkJaWYgKHJldCkgewpAQCAtNDQ2LDYgKzQ0OCw4IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwKIAkJCQlVU0JfREVWSUNFX0lEX0tZRV9NT1VTRVBFTl9JNjA4WCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLAorCQkJCVVTQl9ERVZJQ0VfSURfS1lFX01PVVNFUEVOX0k2MDhYXzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwKIAkJCQlVU0JfREVWSUNFX0lEX0tZRV9FQVNZUEVOX002MTBYKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsCiAJCQkJVVNCX0RFVklDRV9JRF9HRU5JVVNfR0lMQV9HQU1JTkdfTU9VU0UpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbG9naXRlY2gtZGouYyBiL2RyaXZlcnMvaGlkL2hpZC1sb2dpdGVjaC1kai5jCmluZGV4IGM5MTdhYjYuLjViYzZkODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sb2dpdGVjaC1kai5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sb2dpdGVjaC1kai5jCkBAIC05NjIsMTAgKzk2MiwyNCBAQAogCiAJc3dpdGNoIChkYXRhWzBdKSB7CiAJY2FzZSBSRVBPUlRfSURfREpfU0hPUlQ6CisJCWlmIChzaXplICE9IERKUkVQT1JUX1NIT1JUX0xFTkdUSCkgeworCQkJZGV2X2VycigmaGRldi0+ZGV2LCAiREogcmVwb3J0IG9mIGJhZCBzaXplICglZCkiLCBzaXplKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQogCQlyZXR1cm4gbG9naV9kal9kal9ldmVudChoZGV2LCByZXBvcnQsIGRhdGEsIHNpemUpOwogCWNhc2UgUkVQT1JUX0lEX0hJRFBQX1NIT1JUOgotCQkvKiBpbnRlbnRpb25hbCBmYWxsdGhyb3VnaCAqLworCQlpZiAoc2l6ZSAhPSBISURQUF9SRVBPUlRfU0hPUlRfTEVOR1RIKSB7CisJCQlkZXZfZXJyKCZoZGV2LT5kZXYsCisJCQkJIlNob3J0IEhJRCsrIHJlcG9ydCBvZiBiYWQgc2l6ZSAoJWQpIiwgc2l6ZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIGxvZ2lfZGpfaGlkcHBfZXZlbnQoaGRldiwgcmVwb3J0LCBkYXRhLCBzaXplKTsKIAljYXNlIFJFUE9SVF9JRF9ISURQUF9MT05HOgorCQlpZiAoc2l6ZSAhPSBISURQUF9SRVBPUlRfTE9OR19MRU5HVEgpIHsKKwkJCWRldl9lcnIoJmhkZXYtPmRldiwKKwkJCQkiTG9uZyBISUQrKyByZXBvcnQgb2YgYmFkIHNpemUgKCVkKSIsIHNpemUpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CiAJCXJldHVybiBsb2dpX2RqX2hpZHBwX2V2ZW50KGhkZXYsIHJlcG9ydCwgZGF0YSwgc2l6ZSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbG9naXRlY2gtaGlkcHAuYyBiL2RyaXZlcnMvaGlkL2hpZC1sb2dpdGVjaC1oaWRwcC5jCmluZGV4IDJmNDIwYzAuLmE5M2NlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sb2dpdGVjaC1oaWRwcC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sb2dpdGVjaC1oaWRwcC5jCkBAIC0yODIsNiArMjgyLDMzIEBACiAJCShyZXBvcnQtPnJhcC5zdWJfaWQgPT0gMHg0MSk7CiB9CiAKKy8qKgorICogaGlkcHBfcHJlZml4X25hbWUoKSBwcmVmaXhlcyB0aGUgY3VycmVudCBnaXZlbiBuYW1lIHdpdGggIkxvZ2l0ZWNoICIuCisgKi8KK3N0YXRpYyB2b2lkIGhpZHBwX3ByZWZpeF9uYW1lKGNoYXIgKipuYW1lLCBpbnQgbmFtZV9sZW5ndGgpCit7CisjZGVmaW5lIFBSRUZJWF9MRU5HVEggOSAvKiAiTG9naXRlY2ggIiAqLworCisJaW50IG5ld19sZW5ndGg7CisJY2hhciAqbmV3X25hbWU7CisKKwlpZiAobmFtZV9sZW5ndGggPiBQUkVGSVhfTEVOR1RIICYmCisJICAgIHN0cm5jbXAoKm5hbWUsICJMb2dpdGVjaCAiLCBQUkVGSVhfTEVOR1RIKSA9PSAwKQorCQkvKiBUaGUgcHJlZml4IGhhcyBpcyBhbHJlYWR5IGluIHRoZSBuYW1lICovCisJCXJldHVybjsKKworCW5ld19sZW5ndGggPSBQUkVGSVhfTEVOR1RIICsgbmFtZV9sZW5ndGg7CisJbmV3X25hbWUgPSBremFsbG9jKG5ld19sZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghbmV3X25hbWUpCisJCXJldHVybjsKKworCXNucHJpbnRmKG5ld19uYW1lLCBuZXdfbGVuZ3RoLCAiTG9naXRlY2ggJXMiLCAqbmFtZSk7CisKKwlrZnJlZSgqbmFtZSk7CisKKwkqbmFtZSA9IG5ld19uYW1lOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogSElEUCsrIDEuMCBjb21tYW5kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zMjEsNiArMzQ4LDEwIEBACiAJCXJldHVybiBOVUxMOwogCiAJbWVtY3B5KG5hbWUsICZyZXNwb25zZS5yYXAucGFyYW1zWzJdLCBsZW4pOworCisJLyogaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgJ1wwJyAqLworCWhpZHBwX3ByZWZpeF9uYW1lKCZuYW1lLCBsZW4gKyAxKTsKKwogCXJldHVybiBuYW1lOwogfQogCkBAIC00OTgsNiArNTI5LDkgQEAKIAkJaW5kZXggKz0gcmV0OwogCX0KIAorCS8qIGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nICdcMCcgKi8KKwloaWRwcF9wcmVmaXhfbmFtZSgmbmFtZSwgX19uYW1lX2xlbmd0aCArIDEpOworCiAJcmV0dXJuIG5hbWU7CiB9CiAKQEAgLTc5NCwxOCArODI4LDI1IEBACiAKIAlzd2l0Y2ggKGRhdGFbMF0pIHsKIAljYXNlIDB4MDI6CisJCWlmIChzaXplIDwgMikgeworCQkJaGlkX2VycihoZGV2LCAiUmVjZWl2ZWQgSElEIHJlcG9ydCBvZiBiYWQgc2l6ZSAoJWQpIiwKKwkJCQlzaXplKTsKKwkJCXJldHVybiAxOworCQl9CiAJCWlmIChoaWRwcC0+cXVpcmtzICYgSElEUFBfUVVJUktfV1RQX1BIWVNJQ0FMX0JVVFRPTlMpIHsKIAkJCWlucHV0X2V2ZW50KHdkLT5pbnB1dCwgRVZfS0VZLCBCVE5fTEVGVCwKIAkJCQkJISEoZGF0YVsxXSAmIDB4MDEpKTsKIAkJCWlucHV0X2V2ZW50KHdkLT5pbnB1dCwgRVZfS0VZLCBCVE5fUklHSFQsCiAJCQkJCSEhKGRhdGFbMV0gJiAweDAyKSk7CiAJCQlpbnB1dF9zeW5jKHdkLT5pbnB1dCk7CisJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWlmIChzaXplIDwgMjEpCiAJCQkJcmV0dXJuIDE7CiAJCQlyZXR1cm4gd3RwX21vdXNlX3Jhd194eV9ldmVudChoaWRwcCwgJmRhdGFbN10pOwogCQl9CiAJY2FzZSBSRVBPUlRfSURfSElEUFBfTE9ORzoKKwkJLyogc2l6ZSBpcyBhbHJlYWR5IGNoZWNrZWQgaW4gaGlkcHBfcmF3X2V2ZW50LiAqLwogCQlpZiAoKHJlcG9ydC0+ZmFwLmZlYXR1cmVfaW5kZXggIT0gd2QtPm10X2ZlYXR1cmVfaW5kZXgpIHx8CiAJCSAgICAocmVwb3J0LT5mYXAuZnVuY2luZGV4X2NsaWVudGlkICE9IEVWRU5UX1RPVUNIUEFEX1JBV19YWSkpCiAJCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmMKaW5kZXggMWEwN2UwNy4uNDdkN2U3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmMKQEAgLTM1LDYgKzM1LDggQEAKIHN0YXRpYyB2b2lkIHByb2ZpbGVfYWN0aXZhdGVkKHN0cnVjdCBweXJhX2RldmljZSAqcHlyYSwKIAkJdW5zaWduZWQgaW50IG5ld19wcm9maWxlKQogeworCWlmIChuZXdfcHJvZmlsZSA+PSBBUlJBWV9TSVpFKHB5cmEtPnByb2ZpbGVfc2V0dGluZ3MpKQorCQlyZXR1cm47CiAJcHlyYS0+YWN0dWFsX3Byb2ZpbGUgPSBuZXdfcHJvZmlsZTsKIAlweXJhLT5hY3R1YWxfY3BpID0gcHlyYS0+cHJvZmlsZV9zZXR0aW5nc1tweXJhLT5hY3R1YWxfcHJvZmlsZV0ueV9jcGk7CiB9CkBAIC0yNTcsOSArMjU5LDExIEBACiAJaWYgKG9mZiAhPSAwIHx8IGNvdW50ICE9IFBZUkFfU0laRV9TRVRUSU5HUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZweXJhLT5weXJhX2xvY2spOwotCiAJc2V0dGluZ3MgPSAoc3RydWN0IHB5cmFfc2V0dGluZ3MgY29uc3QgKilidWY7CisJaWYgKHNldHRpbmdzLT5zdGFydHVwX3Byb2ZpbGUgPj0gQVJSQVlfU0laRShweXJhLT5wcm9maWxlX3NldHRpbmdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZweXJhLT5weXJhX2xvY2spOwogCiAJcmV0dmFsID0gcHlyYV9zZXRfc2V0dGluZ3ModXNiX2Rldiwgc2V0dGluZ3MpOwogCWlmIChyZXR2YWwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC5jIGIvZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLmMKaW5kZXggZDMyMDM3Yy4uZDQzZTk2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLmMKKysrIGIvZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLmMKQEAgLTcwNiwxMiArNzA2LDcgQEAKIAogc3RhdGljIHZvaWQgaTJjX2hpZF9zdG9wKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGhpZC0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGkyY19oaWQgKmloaWQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQogCWhpZC0+Y2xhaW1lZCA9IDA7Ci0KLQlpMmNfaGlkX2ZyZWVfYnVmZmVycyhpaGlkKTsKIH0KIAogc3RhdGljIGludCBpMmNfaGlkX29wZW4oc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IGRjODliZTkuLmIyN2IzZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAJeyBVU0JfVkVORE9SX0lEX0NISUNPTlksIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9XSVJFTEVTUywgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1NJR01BX01JQ1JPLCBVU0JfREVWSUNFX0lEX1NJR01BX01JQ1JPX0tFWUJPQVJELCBISURfUVVJUktfTk9fSU5JVF9SRVBPUlRTIH0sCiAJeyBVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfTU9VU0VQRU5fSTYwOFgsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9LWUUsIFVTQl9ERVZJQ0VfSURfS1lFX01PVVNFUEVOX0k2MDhYXzIsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9LWUUsIFVTQl9ERVZJQ0VfSURfS1lFX0VBU1lQRU5fTTYxMFgsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19EVU9TRU5TRSwgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUyB9LAogCXsgVVNCX1ZFTkRPUl9JRF9TRU1JQ08sIFVTQl9ERVZJQ0VfSURfU0VNSUNPX1VTQl9LRVlLT0FSRCwgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IDY1MjljMDkuLmE3ZGUyNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTU3NCw2ICs1NzQsMTYgQEAKIAkgIGZvciB0aG9zZSBjaGFubmVscyBzcGVjaWZpZWQgaW4gdGhlIG1hcC4gIFRoaXMgbWFwIGNhbiBiZSBwcm92aWRlZAogCSAgZWl0aGVyIHZpYSBwbGF0Zm9ybSBkYXRhIG9yIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncy4KIAorY29uZmlnIFNFTlNPUlNfSTU1MDAKKwl0cmlzdGF0ZSAiSW50ZWwgNTUwMC81NTIwL1g1OCB0ZW1wZXJhdHVyZSBzZW5zb3IiCisJZGVwZW5kcyBvbiBYODYgJiYgUENJCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSB0ZW1wZXJhdHVyZQorCSAgc2Vuc29yIGluc2lkZSB0aGUgSW50ZWwgNTUwMCwgNTUyMCBhbmQgWDU4IGNoaXBzZXRzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGk1NTAwX3RlbXAuCisKIGNvbmZpZyBTRU5TT1JTX0NPUkVURU1QCiAJdHJpc3RhdGUgIkludGVsIENvcmUvQ29yZTIvQXRvbSB0ZW1wZXJhdHVyZSBzZW5zb3IiCiAJZGVwZW5kcyBvbiBYODYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IDY3MjgwNjQuLjZjOTQxNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtNjgsNiArNjgsNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfSElINjEzMCkJKz0gaGloNjEzMC5vCiBvYmotJChDT05GSUdfU0VOU09SU19IVFUyMSkJKz0gaHR1MjEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVUxUUkE0NSkJKz0gdWx0cmE0NV9lbnYubworb2JqLSQoQ09ORklHX1NFTlNPUlNfSTU1MDApCSs9IGk1NTAwX3RlbXAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfSTVLX0FNQikJKz0gaTVrX2FtYi5vCiBvYmotJChDT05GSUdfU0VOU09SU19JQk1BRU0pCSs9IGlibWFlbS5vCiBvYmotJChDT05GSUdfU0VOU09SU19JQk1QRVgpCSs9IGlibXBleC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2k1NTAwX3RlbXAuYyBiL2RyaXZlcnMvaHdtb24vaTU1MDBfdGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlM2NjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2k1NTAwX3RlbXAuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIGk1NTAwX3RlbXAgLSBEcml2ZXIgZm9yIEludGVsIDU1MDAvNTUyMC9YNTggY2hpcHNldCB0aGVybWFsIHNlbnNvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBKZWFuIERlbHZhcmUgPGpkZWx2YXJlQHN1c2UuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZnJvbSBkYXRhc2hlZXQgKi8KKyNkZWZpbmUgUkVHX1RTVEhSQ0FUQQkweEUyCisjZGVmaW5lIFJFR19UU0NUUkwJMHhFOAorI2RlZmluZSBSRUdfVFNUSFJSUEVYCTB4RUIKKyNkZWZpbmUgUkVHX1RTVEhSTE8JMHhFQworI2RlZmluZSBSRUdfVFNUSFJISQkweEVFCisjZGVmaW5lIFJFR19DVEhJTlQJMHhGMAorI2RlZmluZSBSRUdfVFNGU0MJMHhGMworI2RlZmluZSBSRUdfQ1RTVFMJMHhGNAorI2RlZmluZSBSRUdfVFNUSFJSUVBJCTB4RjUKKyNkZWZpbmUgUkVHX0NUQ1RSTAkweEY3CisjZGVmaW5lIFJFR19UU1RJTUVSCTB4RjgKKworLyoKKyAqIFN5c2ZzIHN0dWZmCisgKi8KKworLyogU2Vuc29yIHJlc29sdXRpb24gOiAwLjUgZGVncmVlIEMgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2LT5wYXJlbnQpOworCWxvbmcgdGVtcDsKKwl1MTYgdHN0aHJoaTsKKwlzOCB0c2ZzYzsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFJFR19UU1RIUkhJLCAmdHN0aHJoaSk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUkVHX1RTRlNDLCAmdHNmc2MpOworCXRlbXAgPSAoKGxvbmcpdHN0aHJoaSAtIHRzZnNjKSAqIDUwMDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgdGVtcCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGhyZXNoKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldi0+cGFyZW50KTsKKwlpbnQgcmVnID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKwlsb25nIHRlbXA7CisJdTE2IHRzdGhyOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcmVnLCAmdHN0aHIpOworCXRlbXAgPSB0c3RociAqIDUwMDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgdGVtcCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYtPnBhcmVudCk7CisJaW50IG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKwl1OCBjdHN0czsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFJFR19DVFNUUywgJmN0c3RzKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgKHVuc2lnbmVkIGludCljdHN0cyAmICgxIDw8IG5yKSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JUlVHTywgc2hvd190aHJlc2gsIE5VTEwsIDB4RTIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTywgc2hvd190aHJlc2gsIE5VTEwsIDB4RUMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVJVR08sIHNob3dfdGhyZXNoLCBOVUxMLCAweEVFKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppNTUwMF90ZW1wX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitBVFRSSUJVVEVfR1JPVVBTKGk1NTAwX3RlbXApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaTU1MDBfdGVtcF9pZHNbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzNDM4KSB9LAorCXsgMCB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGk1NTAwX3RlbXBfaWRzKTsKKworc3RhdGljIGludCBpNTUwMF90ZW1wX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwl1MzIgdHN0aW1lcjsKKwlzOCB0c2ZzYzsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBkZXZpY2VcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFJFR19UU0ZTQywgJnRzZnNjKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUkVHX1RTVElNRVIsICZ0c3RpbWVyKTsKKwlpZiAodHNmc2MgPT0gMHg3RiAmJiB0c3RpbWVyID09IDB4MDdEMzBENDApIHsKKwkJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAiU2Vuc29yIHNlZW1zIHRvIGJlIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaHdtb25fZGV2ID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoJnBkZXYtPmRldiwKKwkJCQkJCQkgICAiaW50ZWw1NTAwIiwgTlVMTCwKKwkJCQkJCQkgICBpNTUwMF90ZW1wX2dyb3Vwcyk7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaTU1MDBfdGVtcF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiaTU1MDBfdGVtcCIsCisJLmlkX3RhYmxlID0gaTU1MDBfdGVtcF9pZHMsCisJLnByb2JlID0gaTU1MDBfdGVtcF9wcm9iZSwKK307CisKK21vZHVsZV9wY2lfZHJpdmVyKGk1NTAwX3RlbXBfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiSmVhbiBEZWx2YXJlIDxqZGVsdmFyZUBzdXNlLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCA1NTAwLzU1MjAvWDU4IGNoaXBzZXQgdGhlcm1hbCBzZW5zb3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDMxZTgzMDguLmFiODM4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC04ODEsNiArODgxLDcgQEAKIGNvbmZpZyBJMkNfUkNBUgogCXRyaXN0YXRlICJSZW5lc2FzIFItQ2FyIEkyQyBDb250cm9sbGVyIgogCWRlcGVuZHMgb24gQVJDSF9TSE1PQklMRSB8fCBDT01QSUxFX1RFU1QKKwlzZWxlY3QgSTJDX1NMQVZFCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlCiAJICBSLUNhciBJMkMgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMKaW5kZXggYmZmMjBhNS4uOTU4YzhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMKQEAgLTc4NSwxNCArNzg1LDE2IEBACiAJaW50IHJldDsKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmFkYXAtPmRldik7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGkyYy0+Y2xrKTsKKwlyZXQgPSBjbGtfZW5hYmxlKGkyYy0+Y2xrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgYWRhcC0+cmV0cmllczsgcmV0cnkrKykgewogCiAJCXJldCA9IHMzYzI0eHhfaTJjX2RveGZlcihpMmMsIG1zZ3MsIG51bSk7CiAKIAkJaWYgKHJldCAhPSAtRUFHQUlOKSB7Ci0JCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOworCQkJY2xrX2Rpc2FibGUoaTJjLT5jbGspOwogCQkJcG1fcnVudGltZV9wdXQoJmFkYXAtPmRldik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC04MDIsNyArODA0LDcgQEAKIAkJdWRlbGF5KDEwMCk7CiAJfQogCi0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkyYy0+Y2xrKTsKKwljbGtfZGlzYWJsZShpMmMtPmNsayk7CiAJcG1fcnVudGltZV9wdXQoJmFkYXAtPmRldik7CiAJcmV0dXJuIC1FUkVNT1RFSU87CiB9CkBAIC0xMTk3LDcgKzExOTksNyBAQAogCiAJY2xrX3ByZXBhcmVfZW5hYmxlKGkyYy0+Y2xrKTsKIAlyZXQgPSBzM2MyNHh4X2kyY19pbml0KGkyYyk7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkyYy0+Y2xrKTsKKwljbGtfZGlzYWJsZShpMmMtPmNsayk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkkyQyBjb250cm9sbGVyIGluaXQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKQEAgLTEyMTAsNiArMTIxMiw3IEBACiAJCWkyYy0+aXJxID0gcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAkJaWYgKHJldCA8PSAwKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBJUlFcbiIpOworCQkJY2xrX3VucHJlcGFyZShpMmMtPmNsayk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKQEAgLTEyMTgsNiArMTIyMSw3IEBACiAKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgY2xhaW0gSVJRICVkXG4iLCBpMmMtPmlycSk7CisJCQljbGtfdW5wcmVwYXJlKGkyYy0+Y2xrKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CkBAIC0xMjI1LDYgKzEyMjksNyBAQAogCXJldCA9IHMzYzI0eHhfaTJjX3JlZ2lzdGVyX2NwdWZyZXEoaTJjKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1ZnJlcSBub3RpZmllclxuIik7CisJCWNsa191bnByZXBhcmUoaTJjLT5jbGspOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTI0MSw2ICsxMjQ2LDcgQEAKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGJ1cyB0byBpMmMgY29yZVxuIik7CiAJCXMzYzI0eHhfaTJjX2RlcmVnaXN0ZXJfY3B1ZnJlcShpMmMpOworCQljbGtfdW5wcmVwYXJlKGkyYy0+Y2xrKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTEyNjIsNiArMTI2OCw4IEBACiB7CiAJc3RydWN0IHMzYzI0eHhfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCWNsa191bnByZXBhcmUoaTJjLT5jbGspOworCiAJcG1fcnVudGltZV9kaXNhYmxlKCZpMmMtPmFkYXAuZGV2KTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAKQEAgLTEyOTMsMTMgKzEzMDEsMTYgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHMzYzI0eHhfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OwogCiAJaWYgKCFJU19FUlIoaTJjLT5zeXNyZWcpKQogCQlyZWdtYXBfd3JpdGUoaTJjLT5zeXNyZWcsIEVYWU5PUzVfU1lTX0kyQ19DRkcsIGkyYy0+c3lzX2kyY19jZmcpOwogCi0JY2xrX3ByZXBhcmVfZW5hYmxlKGkyYy0+Y2xrKTsKKwlyZXQgPSBjbGtfZW5hYmxlKGkyYy0+Y2xrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCXMzYzI0eHhfaTJjX2luaXQoaTJjKTsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOworCWNsa19kaXNhYmxlKGkyYy0+Y2xrKTsKIAlpMmMtPnN1c3BlbmRlZCA9IDA7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2hfbW9iaWxlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNoX21vYmlsZS5jCmluZGV4IDQ0MGQ1ZGIuLjAwNzgxOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2hfbW9iaWxlLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYwpAQCAtMTM5LDYgKzEzOSw3IEBACiAJaW50IHBvczsKIAlpbnQgc3I7CiAJYm9vbCBzZW5kX3N0b3A7CisJYm9vbCBzdG9wX2FmdGVyX2RtYTsKIAogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBkbWFfY2hhbiAqZG1hX3R4OwpAQCAtNDA3LDcgKzQwOCw3IEBACiAKIAlpZiAocGQtPnBvcyA9PSBwZC0+bXNnLT5sZW4pIHsKIAkJLyogU2VuZCBzdG9wIGlmIHdlIGhhdmVuJ3QgeWV0IChETUEgY2FzZSkgKi8KLQkJaWYgKHBkLT5zZW5kX3N0b3AgJiYgKGlpY19yZChwZCwgSUNDUikgJiBJQ0NSX0JCU1kpKQorCQlpZiAocGQtPnNlbmRfc3RvcCAmJiBwZC0+c3RvcF9hZnRlcl9kbWEpCiAJCQlpMmNfb3AocGQsIE9QX1RYX1NUT1AsIDApOwogCQlyZXR1cm4gMTsKIAl9CkBAIC00NDksNiArNDUwLDEzIEBACiAJCXJlYWxfcG9zID0gcGQtPnBvcyAtIDI7CiAKIAkJaWYgKHBkLT5wb3MgPT0gcGQtPm1zZy0+bGVuKSB7CisJCQlpZiAocGQtPnN0b3BfYWZ0ZXJfZG1hKSB7CisJCQkJLyogU2ltdWxhdGUgUElPIGVuZCBjb25kaXRpb24gYWZ0ZXIgRE1BIHRyYW5zZmVyICovCisJCQkJaTJjX29wKHBkLCBPUF9SWF9TVE9QLCAwKTsKKwkJCQlwZC0+cG9zKys7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCWlmIChyZWFsX3BvcyA8IDApIHsKIAkJCQlpMmNfb3AocGQsIE9QX1JYX1NUT1AsIDApOwogCQkJCWJyZWFrOwpAQCAtNTM2LDYgKzU0NCw3IEBACiAKIAlzaF9tb2JpbGVfaTJjX2RtYV91bm1hcChwZCk7CiAJcGQtPnBvcyA9IHBkLT5tc2ctPmxlbjsKKwlwZC0+c3RvcF9hZnRlcl9kbWEgPSB0cnVlOwogCiAJaWljX3NldF9jbHIocGQsIElDSUMsIDAsIElDSUNfVERNQUUgfCBJQ0lDX1JETUFFKTsKIH0KQEAgLTcyNiw2ICs3MzUsNyBAQAogCQlib29sIGRvX3N0YXJ0ID0gcGQtPnNlbmRfc3RvcCB8fCAhaTsKIAkJbXNnID0gJm1zZ3NbaV07CiAJCXBkLT5zZW5kX3N0b3AgPSBpID09IG51bSAtIDEgfHwgbXNnLT5mbGFncyAmIEkyQ19NX1NUT1A7CisJCXBkLT5zdG9wX2FmdGVyX2RtYSA9IGZhbHNlOwogCiAJCWVyciA9IHN0YXJ0X2NoKHBkLCBtc2csIGRvX3N0YXJ0KTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCmluZGV4IDM5ZDI1YTguLmU5ZWFlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwpAQCAtMjk3Miw2ICsyOTcyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaTJjX3NtYnVzX3hmZXIpOwogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSTJDX1NMQVZFKQogaW50IGkyY19zbGF2ZV9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpMmNfc2xhdmVfY2JfdCBzbGF2ZV9jYikKIHsKIAlpbnQgcmV0OwpAQCAtMzAxOSw2ICszMDIwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaTJjX3NsYXZlX3VucmVnaXN0ZXIpOworI2VuZGlmCiAKIE1PRFVMRV9BVVRIT1IoIlNpbW9uIEcuIFZvZ2wgPHNpbW9uQHRrLnVuaS1saW56LmFjLmF0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIG1haW4gbW9kdWxlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtc2xhdmUtZWVwcm9tLmMgYi9kcml2ZXJzL2kyYy9pMmMtc2xhdmUtZWVwcm9tLmMKaW5kZXggNjYzMTQwMC4uY2Y5YjA5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLXNsYXZlLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1zbGF2ZS1lZXByb20uYwpAQCAtNzQsNyArNzQsNyBAQAogCXN0cnVjdCBlZXByb21fZGF0YSAqZWVwcm9tOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAob2ZmICsgY291bnQgPj0gYXR0ci0+c2l6ZSkKKwlpZiAob2ZmICsgY291bnQgPiBhdHRyLT5zaXplKQogCQlyZXR1cm4gLUVGQklHOwogCiAJZWVwcm9tID0gZGV2X2dldF9kcnZkYXRhKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CkBAIC05Miw3ICs5Miw3IEBACiAJc3RydWN0IGVlcHJvbV9kYXRhICplZXByb207CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChvZmYgKyBjb3VudCA+PSBhdHRyLT5zaXplKQorCWlmIChvZmYgKyBjb3VudCA+IGF0dHItPnNpemUpCiAJCXJldHVybiAtRUZCSUc7CiAKIAllZXByb20gPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9hZDc5OXguYyBiL2RyaXZlcnMvaWlvL2FkYy9hZDc5OXguYwppbmRleCBlMzc0MTJkLi5iOTlkZTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9hZGMvYWQ3OTl4LmMKKysrIGIvZHJpdmVycy9paW8vYWRjL2FkNzk5eC5jCkBAIC0xNDMsOSArMTQzLDE1IEBACiAJY2FzZSBhZDc5OTg6CiAJCXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKHN0LT5jbGllbnQsIEFENzk5OF9DT05GX1JFRywKIAkJCXZhbCk7Ci0JZGVmYXVsdDoKKwljYXNlIGFkNzk5MjoKKwljYXNlIGFkNzk5MzoKKwljYXNlIGFkNzk5NDoKIAkJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc3QtPmNsaWVudCwgQUQ3OTk4X0NPTkZfUkVHLAogCQkJdmFsKTsKKwlkZWZhdWx0OgorCQkvKiBXaWxsIGJlIHdyaXR0ZW4gd2hlbiBkb2luZyBhIGNvbnZlcnNpb24gKi8KKwkJc3QtPmNvbmZpZyA9IHZhbDsKKwkJcmV0dXJuIDA7CiAJfQogfQogCkBAIC0xNTUsOCArMTYxLDEzIEBACiAJY2FzZSBhZDc5OTc6CiAJY2FzZSBhZDc5OTg6CiAJCXJldHVybiBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoc3QtPmNsaWVudCwgQUQ3OTk4X0NPTkZfUkVHKTsKLQlkZWZhdWx0OgorCWNhc2UgYWQ3OTkyOgorCWNhc2UgYWQ3OTkzOgorCWNhc2UgYWQ3OTk0OgogCQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0LT5jbGllbnQsIEFENzk5OF9DT05GX1JFRyk7CisJZGVmYXVsdDoKKwkJLyogTm8gcmVhZGJhY2sgc3VwcG9ydCAqLworCQlyZXR1cm4gc3QtPmNvbmZpZzsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2lua2Vybi5jIGIvZHJpdmVycy9paW8vaW5rZXJuLmMKaW5kZXggODY2ZmU5MC4uOTBjOGNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vaW5rZXJuLmMKKysrIGIvZHJpdmVycy9paW8vaW5rZXJuLmMKQEAgLTQ0OSw2ICs0NDksOSBAQAogCWlmICh2YWwyID09IE5VTEwpCiAJCXZhbDIgPSAmdW51c2VkOwogCisJaWYoIWlpb19jaGFubmVsX2hhc19pbmZvKGNoYW4tPmNoYW5uZWwsIGluZm8pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChjaGFuLT5pbmRpb19kZXYtPmluZm8tPnJlYWRfcmF3X211bHRpKSB7CiAJCXJldCA9IGNoYW4tPmluZGlvX2Rldi0+aW5mby0+cmVhZF9yYXdfbXVsdGkoY2hhbi0+aW5kaW9fZGV2LAogCQkJCQljaGFuLT5jaGFubmVsLCBJTkRJT19NQVhfUkFXX0VMRU1FTlRTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCmluZGV4IDU3ZWNjNWIuLjkxMTdiN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKQEAgLTExMTQsNyArMTExNCw4IEBACiAJc3RydWN0IG1seDRfZGV2CSpkZXYgPSB0b19tZGV2KHFwLT5kZXZpY2UpLT5kZXY7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoZGV2LT5jYXBzLnR1bm5lbF9vZmZsb2FkX21vZGUgIT0gTUxYNF9UVU5ORUxfT0ZGTE9BRF9NT0RFX1ZYTEFOKQorCWlmIChkZXYtPmNhcHMudHVubmVsX29mZmxvYWRfbW9kZSAhPSBNTFg0X1RVTk5FTF9PRkZMT0FEX01PREVfVlhMQU4gfHwKKwkgICAgZGV2LT5jYXBzLmRtZnNfaGlnaF9zdGVlcl9tb2RlID09IE1MWDRfU1RFRVJJTkdfRE1GU19BMF9TVEFUSUMpCiAJCXJldHVybiAwOyAvKiBkbyBub3RoaW5nICovCiAKIAlpYl9mbG93ID0gZmxvd19hdHRyICsgMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwppbmRleCA4YWZhMjhlLi4xOGQ0YjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCkBAIC0yOCw2ICsyOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlICJpbnB1dC1jb21wYXQuaCIKIAorZW51bSBldmRldl9jbG9ja190eXBlIHsKKwlFVl9DTEtfUkVBTCA9IDAsCisJRVZfQ0xLX01PTk8sCisJRVZfQ0xLX0JPT1QsCisJRVZfQ0xLX01BWAorfTsKKwogc3RydWN0IGV2ZGV2IHsKIAlpbnQgb3BlbjsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlIGhhbmRsZTsKQEAgLTQ5LDEyICs1NiwzMiBAQAogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CiAJc3RydWN0IGV2ZGV2ICpldmRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JaW50IGNsa2lkOworCWludCBjbGtfdHlwZTsKIAlib29sIHJldm9rZWQ7CiAJdW5zaWduZWQgaW50IGJ1ZnNpemU7CiAJc3RydWN0IGlucHV0X2V2ZW50IGJ1ZmZlcltdOwogfTsKIAorc3RhdGljIGludCBldmRldl9zZXRfY2xrX3R5cGUoc3RydWN0IGV2ZGV2X2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY2xraWQpCit7CisJc3dpdGNoIChjbGtpZCkgeworCisJY2FzZSBDTE9DS19SRUFMVElNRToKKwkJY2xpZW50LT5jbGtfdHlwZSA9IEVWX0NMS19SRUFMOworCQlicmVhazsKKwljYXNlIENMT0NLX01PTk9UT05JQzoKKwkJY2xpZW50LT5jbGtfdHlwZSA9IEVWX0NMS19NT05POworCQlicmVhazsKKwljYXNlIENMT0NLX0JPT1RUSU1FOgorCQljbGllbnQtPmNsa190eXBlID0gRVZfQ0xLX0JPT1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiAvKiBmbHVzaCBxdWV1ZWQgZXZlbnRzIG9mIHR5cGUgQHR5cGUsIGNhbGxlciBtdXN0IGhvbGQgY2xpZW50LT5idWZmZXJfbG9jayAqLwogc3RhdGljIHZvaWQgX19ldmRldl9mbHVzaF9xdWV1ZShzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCB0eXBlKQogewpAQCAtMTA4LDggKzEzNSwxMSBAQAogCXN0cnVjdCBpbnB1dF9ldmVudCBldjsKIAlrdGltZV90IHRpbWU7CiAKLQl0aW1lID0gKGNsaWVudC0+Y2xraWQgPT0gQ0xPQ0tfTU9OT1RPTklDKSA/Ci0JCWt0aW1lX2dldCgpIDoga3RpbWVfZ2V0X3JlYWwoKTsKKwl0aW1lID0gY2xpZW50LT5jbGtfdHlwZSA9PSBFVl9DTEtfUkVBTCA/CisJCQlrdGltZV9nZXRfcmVhbCgpIDoKKwkJCWNsaWVudC0+Y2xrX3R5cGUgPT0gRVZfQ0xLX01PTk8gPworCQkJCWt0aW1lX2dldCgpIDoKKwkJCQlrdGltZV9nZXRfYm9vdHRpbWUoKTsKIAogCWV2LnRpbWUgPSBrdGltZV90b190aW1ldmFsKHRpbWUpOwogCWV2LnR5cGUgPSBFVl9TWU47CkBAIC0xNTksNyArMTg5LDcgQEAKIAogc3RhdGljIHZvaWQgZXZkZXZfcGFzc192YWx1ZXMoc3RydWN0IGV2ZGV2X2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGlucHV0X3ZhbHVlICp2YWxzLCB1bnNpZ25lZCBpbnQgY291bnQsCi0JCQlrdGltZV90IG1vbm8sIGt0aW1lX3QgcmVhbCkKKwkJCWt0aW1lX3QgKmV2X3RpbWUpCiB7CiAJc3RydWN0IGV2ZGV2ICpldmRldiA9IGNsaWVudC0+ZXZkZXY7CiAJY29uc3Qgc3RydWN0IGlucHV0X3ZhbHVlICp2OwpAQCAtMTY5LDggKzE5OSw3IEBACiAJaWYgKGNsaWVudC0+cmV2b2tlZCkKIAkJcmV0dXJuOwogCi0JZXZlbnQudGltZSA9IGt0aW1lX3RvX3RpbWV2YWwoY2xpZW50LT5jbGtpZCA9PSBDTE9DS19NT05PVE9OSUMgPwotCQkJCSAgICAgIG1vbm8gOiByZWFsKTsKKwlldmVudC50aW1lID0ga3RpbWVfdG9fdGltZXZhbChldl90aW1lW2NsaWVudC0+Y2xrX3R5cGVdKTsKIAogCS8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkLCBqdXN0IGFjcXVpcmUgdGhlIGxvY2suICovCiAJc3Bpbl9sb2NrKCZjbGllbnQtPmJ1ZmZlcl9sb2NrKTsKQEAgLTE5OCwyMSArMjI3LDIyIEBACiB7CiAJc3RydWN0IGV2ZGV2ICpldmRldiA9IGhhbmRsZS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQ7Ci0Ja3RpbWVfdCB0aW1lX21vbm8sIHRpbWVfcmVhbDsKKwlrdGltZV90IGV2X3RpbWVbRVZfQ0xLX01BWF07CiAKLQl0aW1lX21vbm8gPSBrdGltZV9nZXQoKTsKLQl0aW1lX3JlYWwgPSBrdGltZV9tb25vX3RvX3JlYWwodGltZV9tb25vKTsKKwlldl90aW1lW0VWX0NMS19NT05PXSA9IGt0aW1lX2dldCgpOworCWV2X3RpbWVbRVZfQ0xLX1JFQUxdID0ga3RpbWVfbW9ub190b19yZWFsKGV2X3RpbWVbRVZfQ0xLX01PTk9dKTsKKwlldl90aW1lW0VWX0NMS19CT09UXSA9IGt0aW1lX21vbm9fdG9fYW55KGV2X3RpbWVbRVZfQ0xLX01PTk9dLAorCQkJCQkJIFRLX09GRlNfQk9PVCk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAljbGllbnQgPSByY3VfZGVyZWZlcmVuY2UoZXZkZXYtPmdyYWIpOwogCiAJaWYgKGNsaWVudCkKLQkJZXZkZXZfcGFzc192YWx1ZXMoY2xpZW50LCB2YWxzLCBjb3VudCwgdGltZV9tb25vLCB0aW1lX3JlYWwpOworCQlldmRldl9wYXNzX3ZhbHVlcyhjbGllbnQsIHZhbHMsIGNvdW50LCBldl90aW1lKTsKIAllbHNlCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNsaWVudCwgJmV2ZGV2LT5jbGllbnRfbGlzdCwgbm9kZSkKLQkJCWV2ZGV2X3Bhc3NfdmFsdWVzKGNsaWVudCwgdmFscywgY291bnQsCi0JCQkJCSAgdGltZV9tb25vLCB0aW1lX3JlYWwpOworCQkJZXZkZXZfcGFzc192YWx1ZXMoY2xpZW50LCB2YWxzLCBjb3VudCwgZXZfdGltZSk7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTg3NywxMCArOTA3LDggQEAKIAljYXNlIEVWSU9DU0NMT0NLSUQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaSwgcCwgc2l6ZW9mKHVuc2lnbmVkIGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChpICE9IENMT0NLX01PTk9UT05JQyAmJiBpICE9IENMT0NLX1JFQUxUSU1FKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWNsaWVudC0+Y2xraWQgPSBpOwotCQlyZXR1cm4gMDsKKworCQlyZXR1cm4gZXZkZXZfc2V0X2Nsa190eXBlKGNsaWVudCwgaSk7CiAKIAljYXNlIEVWSU9DR0tFWUNPREU6CiAJCXJldHVybiBldmRldl9oYW5kbGVfZ2V0X2tleWNvZGUoZGV2LCBwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCAwNDIxN2MyLi4yMTNlM2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xOTc0LDE4ICsxOTc0LDIyIEBACiAKIAlldmVudHMgPSBtdF9zbG90cyArIDE7IC8qIGNvdW50IFNZTl9NVF9SRVBPUlQgYW5kIFNZTl9SRVBPUlQgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBBQlNfQ05UOyBpKyspIHsKLQkJaWYgKHRlc3RfYml0KGksIGRldi0+YWJzYml0KSkgewotCQkJaWYgKGlucHV0X2lzX210X2F4aXMoaSkpCi0JCQkJZXZlbnRzICs9IG10X3Nsb3RzOwotCQkJZWxzZQotCQkJCWV2ZW50cysrOworCWlmICh0ZXN0X2JpdChFVl9BQlMsIGRldi0+ZXZiaXQpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBQlNfQ05UOyBpKyspIHsKKwkJCWlmICh0ZXN0X2JpdChpLCBkZXYtPmFic2JpdCkpIHsKKwkJCQlpZiAoaW5wdXRfaXNfbXRfYXhpcyhpKSkKKwkJCQkJZXZlbnRzICs9IG10X3Nsb3RzOworCQkJCWVsc2UKKwkJCQkJZXZlbnRzKys7CisJCQl9CiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgUkVMX0NOVDsgaSsrKQotCQlpZiAodGVzdF9iaXQoaSwgZGV2LT5yZWxiaXQpKQotCQkJZXZlbnRzKys7CisJaWYgKHRlc3RfYml0KEVWX1JFTCwgZGV2LT5ldmJpdCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IFJFTF9DTlQ7IGkrKykKKwkJCWlmICh0ZXN0X2JpdChpLCBkZXYtPnJlbGJpdCkpCisJCQkJZXZlbnRzKys7CisJfQogCiAJLyogTWFrZSByb29tIGZvciBLRVkgYW5kIE1TQyBldmVudHMgKi8KIAlldmVudHMgKz0gNzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCA5NmVlMjZjLi5hNWQ5YjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC01NTksNiArNTU5LDcgQEAKIGNvbmZpZyBLRVlCT0FSRF9TVE1QRQogCXRyaXN0YXRlICJTVE1QRSBrZXlwYWQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1GRF9TVE1QRQorCWRlcGVuZHMgb24gT0YKIAlzZWxlY3QgSU5QVVRfTUFUUklYS01BUAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBrZXlwYWQgY29udHJvbGxlciBvbiBTVE1QRSBJL08KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCmluZGV4IGQ0ZGQ3OGEuLjg4M2Q2YWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKQEAgLTM1LDkgKzM1LDEzIEBACiBzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSB7CiAJY29uc3Qgc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQl1bnNpZ25lZCBpbnQgdGltZXJfZGVib3VuY2U7CS8qIGluIG1zZWNzICovCisKKwlzdHJ1Y3QgdGltZXJfbGlzdCByZWxlYXNlX3RpbWVyOworCXVuc2lnbmVkIGludCByZWxlYXNlX2RlbGF5OwkvKiBpbiBtc2VjcywgZm9yIElSUS1vbmx5IGJ1dHRvbnMgKi8KKworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwl1bnNpZ25lZCBpbnQgc29mdHdhcmVfZGVib3VuY2U7CS8qIGluIG1zZWNzLCBmb3IgR1BJTy1kcml2ZW4gYnV0dG9ucyAqLworCiAJdW5zaWduZWQgaW50IGlycTsKIAlzcGlubG9ja190IGxvY2s7CiAJYm9vbCBkaXNhYmxlZDsKQEAgLTExNiwxMSArMTIwLDE0IEBACiB7CiAJaWYgKCFiZGF0YS0+ZGlzYWJsZWQpIHsKIAkJLyoKLQkJICogRGlzYWJsZSBJUlEgYW5kIHBvc3NpYmxlIGRlYm91bmNpbmcgdGltZXIuCisJCSAqIERpc2FibGUgSVJRIGFuZCBhc3NvY2lhdGVkIHRpbWVyL3dvcmsgc3RydWN0dXJlLgogCQkgKi8KIAkJZGlzYWJsZV9pcnEoYmRhdGEtPmlycSk7Ci0JCWlmIChiZGF0YS0+dGltZXJfZGVib3VuY2UpCi0JCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnRpbWVyKTsKKworCQlpZiAoZ3Bpb19pc192YWxpZChiZGF0YS0+YnV0dG9uLT5ncGlvKSkKKwkJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYmRhdGEtPndvcmspOworCQllbHNlCisJCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnJlbGVhc2VfdGltZXIpOwogCiAJCWJkYXRhLT5kaXNhYmxlZCA9IHRydWU7CiAJfQpAQCAtMzQzLDcgKzM1MCw3IEBACiBzdGF0aWMgdm9pZCBncGlvX2tleXNfZ3Bpb193b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSwgd29yayk7CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSwgd29yay53b3JrKTsKIAogCWdwaW9fa2V5c19ncGlvX3JlcG9ydF9ldmVudChiZGF0YSk7CiAKQEAgLTM1MSwxMyArMzU4LDYgQEAKIAkJcG1fcmVsYXgoYmRhdGEtPmlucHV0LT5kZXYucGFyZW50KTsKIH0KIAotc3RhdGljIHZvaWQgZ3Bpb19rZXlzX2dwaW9fdGltZXIodW5zaWduZWQgbG9uZyBfZGF0YSkKLXsKLQlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqYmRhdGEgPSAoc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKilfZGF0YTsKLQotCXNjaGVkdWxlX3dvcmsoJmJkYXRhLT53b3JrKTsKLX0KLQogc3RhdGljIGlycXJldHVybl90IGdwaW9fa2V5c19ncGlvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhID0gZGV2X2lkOwpAQCAtMzY2LDExICszNjYsMTAgQEAKIAogCWlmIChiZGF0YS0+YnV0dG9uLT53YWtldXApCiAJCXBtX3N0YXlfYXdha2UoYmRhdGEtPmlucHV0LT5kZXYucGFyZW50KTsKLQlpZiAoYmRhdGEtPnRpbWVyX2RlYm91bmNlKQotCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKLQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJkYXRhLT50aW1lcl9kZWJvdW5jZSkpOwotCWVsc2UKLQkJc2NoZWR1bGVfd29yaygmYmRhdGEtPndvcmspOworCisJbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fd3EsCisJCQkgJmJkYXRhLT53b3JrLAorCQkJIG1zZWNzX3RvX2ppZmZpZXMoYmRhdGEtPnNvZnR3YXJlX2RlYm91bmNlKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00MDgsNyArNDA3LDcgQEAKIAkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgYnV0dG9uLT5jb2RlLCAxKTsKIAkJaW5wdXRfc3luYyhpbnB1dCk7CiAKLQkJaWYgKCFiZGF0YS0+dGltZXJfZGVib3VuY2UpIHsKKwkJaWYgKCFiZGF0YS0+cmVsZWFzZV9kZWxheSkgewogCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgYnV0dG9uLT5jb2RlLCAwKTsKIAkJCWlucHV0X3N5bmMoaW5wdXQpOwogCQkJZ290byBvdXQ7CkBAIC00MTcsOSArNDE2LDkgQEAKIAkJYmRhdGEtPmtleV9wcmVzc2VkID0gdHJ1ZTsKIAl9CiAKLQlpZiAoYmRhdGEtPnRpbWVyX2RlYm91bmNlKQotCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKLQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJkYXRhLT50aW1lcl9kZWJvdW5jZSkpOworCWlmIChiZGF0YS0+cmVsZWFzZV9kZWxheSkKKwkJbW9kX3RpbWVyKCZiZGF0YS0+cmVsZWFzZV90aW1lciwKKwkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJkYXRhLT5yZWxlYXNlX2RlbGF5KSk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmRhdGEtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC00MjksMTAgKzQyOCwxMCBAQAogewogCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9IGRhdGE7CiAKLQlpZiAoYmRhdGEtPnRpbWVyX2RlYm91bmNlKQotCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnRpbWVyKTsKLQotCWNhbmNlbF93b3JrX3N5bmMoJmJkYXRhLT53b3JrKTsKKwlpZiAoZ3Bpb19pc192YWxpZChiZGF0YS0+YnV0dG9uLT5ncGlvKSkKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZiZGF0YS0+d29yayk7CisJZWxzZQorCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnJlbGVhc2VfdGltZXIpOwogfQogCiBzdGF0aWMgaW50IGdwaW9fa2V5c19zZXR1cF9rZXkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKQEAgLTQ2NiwyMyArNDY1LDI1IEBACiAJCQkJCWJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwgKiAxMDAwKTsKIAkJCS8qIHVzZSB0aW1lciBpZiBncGlvbGliIGRvZXNuJ3QgcHJvdmlkZSBkZWJvdW5jZSAqLwogCQkJaWYgKGVycm9yIDwgMCkKLQkJCQliZGF0YS0+dGltZXJfZGVib3VuY2UgPQorCQkJCWJkYXRhLT5zb2Z0d2FyZV9kZWJvdW5jZSA9CiAJCQkJCQlidXR0b24tPmRlYm91bmNlX2ludGVydmFsOwogCQl9CiAKLQkJaXJxID0gZ3Bpb190b19pcnEoYnV0dG9uLT5ncGlvKTsKLQkJaWYgKGlycSA8IDApIHsKLQkJCWVycm9yID0gaXJxOwotCQkJZGV2X2VycihkZXYsCi0JCQkJIlVuYWJsZSB0byBnZXQgaXJxIG51bWJlciBmb3IgR1BJTyAlZCwgZXJyb3IgJWRcbiIsCi0JCQkJYnV0dG9uLT5ncGlvLCBlcnJvcik7Ci0JCQlyZXR1cm4gZXJyb3I7CisJCWlmIChidXR0b24tPmlycSkgeworCQkJYmRhdGEtPmlycSA9IGJ1dHRvbi0+aXJxOworCQl9IGVsc2UgeworCQkJaXJxID0gZ3Bpb190b19pcnEoYnV0dG9uLT5ncGlvKTsKKwkJCWlmIChpcnEgPCAwKSB7CisJCQkJZXJyb3IgPSBpcnE7CisJCQkJZGV2X2VycihkZXYsCisJCQkJCSJVbmFibGUgdG8gZ2V0IGlycSBudW1iZXIgZm9yIEdQSU8gJWQsIGVycm9yICVkXG4iLAorCQkJCQlidXR0b24tPmdwaW8sIGVycm9yKTsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CisJCQliZGF0YS0+aXJxID0gaXJxOwogCQl9Ci0JCWJkYXRhLT5pcnEgPSBpcnE7CiAKLQkJSU5JVF9XT1JLKCZiZGF0YS0+d29yaywgZ3Bpb19rZXlzX2dwaW9fd29ya19mdW5jKTsKLQkJc2V0dXBfdGltZXIoJmJkYXRhLT50aW1lciwKLQkJCSAgICBncGlvX2tleXNfZ3Bpb190aW1lciwgKHVuc2lnbmVkIGxvbmcpYmRhdGEpOworCQlJTklUX0RFTEFZRURfV09SSygmYmRhdGEtPndvcmssIGdwaW9fa2V5c19ncGlvX3dvcmtfZnVuYyk7CiAKIAkJaXNyID0gZ3Bpb19rZXlzX2dwaW9faXNyOwogCQlpcnFmbGFncyA9IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORzsKQEAgLTQ5OSw4ICs1MDAsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQliZGF0YS0+dGltZXJfZGVib3VuY2UgPSBidXR0b24tPmRlYm91bmNlX2ludGVydmFsOwotCQlzZXR1cF90aW1lcigmYmRhdGEtPnRpbWVyLAorCQliZGF0YS0+cmVsZWFzZV9kZWxheSA9IGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWw7CisJCXNldHVwX3RpbWVyKCZiZGF0YS0+cmVsZWFzZV90aW1lciwKIAkJCSAgICBncGlvX2tleXNfaXJxX3RpbWVyLCAodW5zaWduZWQgbG9uZyliZGF0YSk7CiAKIAkJaXNyID0gZ3Bpb19rZXlzX2lycV9pc3I7CkBAIC01MTAsNyArNTExLDcgQEAKIAlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dCwgYnV0dG9uLT50eXBlID86IEVWX0tFWSwgYnV0dG9uLT5jb2RlKTsKIAogCS8qCi0JICogSW5zdGFsbCBjdXN0b20gYWN0aW9uIHRvIGNhbmNlbCBkZWJvdW5jZSB0aW1lciBhbmQKKwkgKiBJbnN0YWxsIGN1c3RvbSBhY3Rpb24gdG8gY2FuY2VsIHJlbGVhc2UgdGltZXIgYW5kCiAJICogd29ya3F1ZXVlIGl0ZW0uCiAJICovCiAJZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb24oJnBkZXYtPmRldiwgZ3Bpb19rZXlzX3F1aWVzY2Vfa2V5LCBiZGF0YSk7CkBAIC02MTgsMzMgKzYxOSwzMCBAQAogCiAJaSA9IDA7CiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShub2RlLCBwcCkgewotCQlpbnQgZ3BpbyA9IC0xOwogCQllbnVtIG9mX2dwaW9fZmxhZ3MgZmxhZ3M7CiAKIAkJYnV0dG9uID0gJnBkYXRhLT5idXR0b25zW2krK107CiAKLQkJaWYgKCFvZl9maW5kX3Byb3BlcnR5KHBwLCAiZ3Bpb3MiLCBOVUxMKSkgewotCQkJYnV0dG9uLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChwcCwgMCk7Ci0JCQlpZiAoYnV0dG9uLT5pcnEgPT0gMCkgewotCQkJCWktLTsKLQkJCQlwZGF0YS0+bmJ1dHRvbnMtLTsKLQkJCQlkZXZfd2FybihkZXYsICJGb3VuZCBidXR0b24gd2l0aG91dCBncGlvcyBvciBpcnFzXG4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWdwaW8gPSBvZl9nZXRfZ3Bpb19mbGFncyhwcCwgMCwgJmZsYWdzKTsKLQkJCWlmIChncGlvIDwgMCkgewotCQkJCWVycm9yID0gZ3BpbzsKKwkJYnV0dG9uLT5ncGlvID0gb2ZfZ2V0X2dwaW9fZmxhZ3MocHAsIDAsICZmbGFncyk7CisJCWlmIChidXR0b24tPmdwaW8gPCAwKSB7CisJCQllcnJvciA9IGJ1dHRvbi0+Z3BpbzsKKwkJCWlmIChlcnJvciAhPSAtRU5PRU5UKSB7CiAJCQkJaWYgKGVycm9yICE9IC1FUFJPQkVfREVGRVIpCiAJCQkJCWRldl9lcnIoZGV2LAogCQkJCQkJIkZhaWxlZCB0byBnZXQgZ3BpbyBmbGFncywgZXJyb3I6ICVkXG4iLAogCQkJCQkJZXJyb3IpOwogCQkJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCWJ1dHRvbi0+YWN0aXZlX2xvdyA9IGZsYWdzICYgT0ZfR1BJT19BQ1RJVkVfTE9XOwogCQl9CiAKLQkJYnV0dG9uLT5ncGlvID0gZ3BpbzsKLQkJYnV0dG9uLT5hY3RpdmVfbG93ID0gZmxhZ3MgJiBPRl9HUElPX0FDVElWRV9MT1c7CisJCWJ1dHRvbi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAocHAsIDApOworCisJCWlmICghZ3Bpb19pc192YWxpZChidXR0b24tPmdwaW8pICYmICFidXR0b24tPmlycSkgeworCQkJZGV2X2VycihkZXYsICJGb3VuZCBidXR0b24gd2l0aG91dCBncGlvcyBvciBpcnFzXG4iKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQl9CiAKIAkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBwLCAibGludXgsY29kZSIsICZidXR0b24tPmNvZGUpKSB7CiAJCQlkZXZfZXJyKGRldiwgIkJ1dHRvbiB3aXRob3V0IGtleWNvZGU6IDB4JXhcbiIsCkBAIC02NTksNiArNjU3LDggQEAKIAogCQlidXR0b24tPndha2V1cCA9ICEhb2ZfZ2V0X3Byb3BlcnR5KHBwLCAiZ3Bpby1rZXksd2FrZXVwIiwgTlVMTCk7CiAKKwkJYnV0dG9uLT5jYW5fZGlzYWJsZSA9ICEhb2ZfZ2V0X3Byb3BlcnR5KHBwLCAibGludXgsY2FuLWRpc2FibGUiLCBOVUxMKTsKKwogCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocHAsICJkZWJvdW5jZS1pbnRlcnZhbCIsCiAJCQkJCSAmYnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCkpCiAJCQlidXR0b24tPmRlYm91bmNlX2ludGVydmFsID0gNTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMKaW5kZXggNjEwYThhZi4uNWIxNTJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBiYWlsMTsKIAotCWluaXRfY29tcGxldGlvbigmZGV2LT5jbWRfZG9uZSk7CisJcmVpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2RvbmUpOwogCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKIAlzZXJpb193cml0ZShzZXJpbywgMCk7CiAJc2VyaW9fd3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGJhaWwxOwogCi0JaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9kb25lKTsKKwlyZWluaXRfY29tcGxldGlvbigmZGV2LT5jbWRfZG9uZSk7CiAJc2VyaW9fd3JpdGUoc2VyaW8sIDApOwogCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKIAlzZXJpb193cml0ZShzZXJpbywgSElMX1BLVF9DTUQgPj4gOCk7CkBAIC00OTEsNyArNDkxLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gYmFpbDE7CiAKLQlpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2RvbmUpOworCXJlaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9kb25lKTsKIAlzZXJpb193cml0ZShzZXJpbywgMCk7CiAJc2VyaW9fd3JpdGUoc2VyaW8sIDApOwogCXNlcmlvX3dyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3RtcGUta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N0bXBlLWtleXBhZC5jCmluZGV4IGVmNWU2N2YuLmZlNmUzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3RtcGUta2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdG1wZS1rZXlwYWQuYwpAQCAtNDUsMTMgKzQ1LDE0IEBACiAjZGVmaW5lIFNUTVBFX0tFWVBBRF9NQVhfUk9XUwkJOAogI2RlZmluZSBTVE1QRV9LRVlQQURfTUFYX0NPTFMJCTgKICNkZWZpbmUgU1RNUEVfS0VZUEFEX1JPV19TSElGVAkJMwotI2RlZmluZSBTVE1QRV9LRVlQQURfS0VZTUFQX1NJWkUJXAorI2RlZmluZSBTVE1QRV9LRVlQQURfS0VZTUFQX01BWF9TSVpFIFwKIAkoU1RNUEVfS0VZUEFEX01BWF9ST1dTICogU1RNUEVfS0VZUEFEX01BWF9DT0xTKQogCiAvKioKICAqIHN0cnVjdCBzdG1wZV9rZXlwYWRfdmFyaWFudCAtIG1vZGVsLXNwZWNpZmljIGF0dHJpYnV0ZXMKICAqIEBhdXRvX2luY3JlbWVudDogd2hldGhlciB0aGUgS1BDX0RBVEFfQllURSByZWdpc3RlciBhZGRyZXNzCiAgKgkJICAgIGF1dG8taW5jcmVtZW50cyBvbiBtdWx0aXBsZSByZWFkCisgKiBAc2V0X3B1bGx1cDogd2hldGhlciB0aGUgcGlucyBuZWVkIHRvIGhhdmUgdGhlaXIgcHVsbC11cHMgc2V0CiAgKiBAbnVtX2RhdGE6IG51bWJlciBvZiBkYXRhIGJ5dGVzCiAgKiBAbnVtX25vcm1hbF9kYXRhOiBudW1iZXIgb2Ygbm9ybWFsIGtleXMnIGRhdGEgYnl0ZXMKICAqIEBtYXhfY29sczogbWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyBzdXBwb3J0ZWQKQEAgLTYxLDYgKzYyLDcgQEAKICAqLwogc3RydWN0IHN0bXBlX2tleXBhZF92YXJpYW50IHsKIAlib29sCQlhdXRvX2luY3JlbWVudDsKKwlib29sCQlzZXRfcHVsbHVwOwogCWludAkJbnVtX2RhdGE7CiAJaW50CQludW1fbm9ybWFsX2RhdGE7CiAJaW50CQltYXhfY29sczsKQEAgLTgxLDYgKzgzLDcgQEAKIAl9LAogCVtTVE1QRTI0MDFdID0gewogCQkuYXV0b19pbmNyZW1lbnQJCT0gZmFsc2UsCisJCS5zZXRfcHVsbHVwCQk9IHRydWUsCiAJCS5udW1fZGF0YQkJPSAzLAogCQkubnVtX25vcm1hbF9kYXRhCT0gMiwKIAkJLm1heF9jb2xzCQk9IDgsCkBAIC05MCw2ICs5Myw3IEBACiAJfSwKIAlbU1RNUEUyNDAzXSA9IHsKIAkJLmF1dG9faW5jcmVtZW50CQk9IHRydWUsCisJCS5zZXRfcHVsbHVwCQk9IHRydWUsCiAJCS5udW1fZGF0YQkJPSA1LAogCQkubnVtX25vcm1hbF9kYXRhCT0gMywKIAkJLm1heF9jb2xzCQk9IDgsCkBAIC05OSwxNiArMTAzLDMwIEBACiAJfSwKIH07CiAKKy8qKgorICogc3RydWN0IHN0bXBlX2tleXBhZCAtIFNUTVBFIGtleXBhZCBzdGF0ZSBjb250YWluZXIKKyAqIEBzdG1wZTogcG9pbnRlciB0byBwYXJlbnQgU1RNUEUgZGV2aWNlCisgKiBAaW5wdXQ6IHNwYXduZWQgaW5wdXQgZGV2aWNlCisgKiBAdmFyaWFudDogU1RNUEUgdmFyaWFudAorICogQGRlYm91bmNlX21zOiBkZWJvdW5jZSBpbnRlcnZhbCwgaW4gbXMuICBNYXhpbXVtIGlzCisgKgkJICVTVE1QRV9LRVlQQURfTUFYX0RFQk9VTkNFLgorICogQHNjYW5fY291bnQ6IG51bWJlciBvZiBrZXkgc2Nhbm5pbmcgY3ljbGVzIHRvIGNvbmZpcm0ga2V5IGRhdGEuCisgKgkJTWF4aW11bSBpcyAlU1RNUEVfS0VZUEFEX01BWF9TQ0FOX0NPVU5ULgorICogQG5vX2F1dG9yZXBlYXQ6IGRpc2FibGUga2V5IGF1dG9yZXBlYXQKKyAqIEByb3dzOiBiaXRtYXNrIGZvciB0aGUgcm93cworICogQGNvbHM6IGJpdG1hc2sgZm9yIHRoZSBjb2x1bW5zCisgKiBAa2V5bWFwOiB0aGUga2V5bWFwCisgKi8KIHN0cnVjdCBzdG1wZV9rZXlwYWQgewogCXN0cnVjdCBzdG1wZSAqc3RtcGU7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJY29uc3Qgc3RydWN0IHN0bXBlX2tleXBhZF92YXJpYW50ICp2YXJpYW50OwotCWNvbnN0IHN0cnVjdCBzdG1wZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGxhdDsKLQorCXVuc2lnbmVkIGludCBkZWJvdW5jZV9tczsKKwl1bnNpZ25lZCBpbnQgc2Nhbl9jb3VudDsKKwlib29sIG5vX2F1dG9yZXBlYXQ7CiAJdW5zaWduZWQgaW50IHJvd3M7CiAJdW5zaWduZWQgaW50IGNvbHM7Ci0KLQl1bnNpZ25lZCBzaG9ydCBrZXltYXBbU1RNUEVfS0VZUEFEX0tFWU1BUF9TSVpFXTsKKwl1bnNpZ25lZCBzaG9ydCBrZXltYXBbU1RNUEVfS0VZUEFEX0tFWU1BUF9NQVhfU0laRV07CiB9OwogCiBzdGF0aWMgaW50IHN0bXBlX2tleXBhZF9yZWFkX2RhdGEoc3RydWN0IHN0bXBlX2tleXBhZCAqa2V5cGFkLCB1OCAqZGF0YSkKQEAgLTE3MSw3ICsxODksMTAgQEAKIAl1bnNpZ25lZCBpbnQgY29sX2dwaW9zID0gdmFyaWFudC0+Y29sX2dwaW9zOwogCXVuc2lnbmVkIGludCByb3dfZ3Bpb3MgPSB2YXJpYW50LT5yb3dfZ3Bpb3M7CiAJc3RydWN0IHN0bXBlICpzdG1wZSA9IGtleXBhZC0+c3RtcGU7CisJdTggcHVyZWcgPSBzdG1wZS0+cmVnc1tTVE1QRV9JRFhfR1BQVVJfTFNCXTsKIAl1bnNpZ25lZCBpbnQgcGlucyA9IDA7CisJdW5zaWduZWQgaW50IHB1X3BpbnMgPSAwOworCWludCByZXQ7CiAJaW50IGk7CiAKIAkvKgpAQCAtMTg4LDggKzIwOSwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCB2YXJpYW50LT5tYXhfY29sczsgaSsrKSB7CiAJCWludCBudW0gPSBfX2Zmcyhjb2xfZ3Bpb3MpOwogCi0JCWlmIChrZXlwYWQtPmNvbHMgJiAoMSA8PCBpKSkKKwkJaWYgKGtleXBhZC0+Y29scyAmICgxIDw8IGkpKSB7CiAJCQlwaW5zIHw9IDEgPDwgbnVtOworCQkJcHVfcGlucyB8PSAxIDw8IG51bTsKKwkJfQogCiAJCWNvbF9ncGlvcyAmPSB+KDEgPDwgbnVtKTsKIAl9CkBAIC0yMDMsMjAgKzIyNiw0MyBAQAogCQlyb3dfZ3Bpb3MgJj0gfigxIDw8IG51bSk7CiAJfQogCi0JcmV0dXJuIHN0bXBlX3NldF9hbHRmdW5jKHN0bXBlLCBwaW5zLCBTVE1QRV9CTE9DS19LRVlQQUQpOworCXJldCA9IHN0bXBlX3NldF9hbHRmdW5jKHN0bXBlLCBwaW5zLCBTVE1QRV9CTE9DS19LRVlQQUQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIE9uIFNUTVBFMjR4eCwgc2V0IHBpbiBiaWFzIHRvIHB1bGwtdXAgb24gYWxsIGtleXBhZCBpbnB1dAorCSAqIHBpbnMgKGNvbHVtbnMpLCB0aGlzIGluY2lkZW50YWxseSBoYXBwZW4gdG8gYmUgbWF4aW11bSA4IHBpbnMKKwkgKiBhbmQgcGxhY2VkIGF0IEdQSU8wLTcgc28gb25seSB0aGUgTFNCIG9mIHRoZSBwdWxsIHVwIHJlZ2lzdGVyCisJICogZXZlciBuZWVkcyB0byBiZSB3cml0dGVuLgorCSAqLworCWlmICh2YXJpYW50LT5zZXRfcHVsbHVwKSB7CisJCXU4IHZhbDsKKworCQlyZXQgPSBzdG1wZV9yZWdfcmVhZChzdG1wZSwgcHVyZWcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBEbyBub3QgdG91Y2ggdW51c2VkIHBpbnMsIG1heSBiZSB1c2VkIGZvciBHUElPICovCisJCXZhbCA9IHJldCAmIH5wdV9waW5zOworCQl2YWwgfD0gcHVfcGluczsKKworCQlyZXQgPSBzdG1wZV9yZWdfd3JpdGUoc3RtcGUsIHB1cmVnLCB2YWwpOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHN0bXBlX2tleXBhZF9jaGlwX2luaXQoc3RydWN0IHN0bXBlX2tleXBhZCAqa2V5cGFkKQogewotCWNvbnN0IHN0cnVjdCBzdG1wZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGtleXBhZC0+cGxhdDsKIAljb25zdCBzdHJ1Y3Qgc3RtcGVfa2V5cGFkX3ZhcmlhbnQgKnZhcmlhbnQgPSBrZXlwYWQtPnZhcmlhbnQ7CiAJc3RydWN0IHN0bXBlICpzdG1wZSA9IGtleXBhZC0+c3RtcGU7CiAJaW50IHJldDsKIAotCWlmIChwbGF0LT5kZWJvdW5jZV9tcyA+IFNUTVBFX0tFWVBBRF9NQVhfREVCT1VOQ0UpCisJaWYgKGtleXBhZC0+ZGVib3VuY2VfbXMgPiBTVE1QRV9LRVlQQURfTUFYX0RFQk9VTkNFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChwbGF0LT5zY2FuX2NvdW50ID4gU1RNUEVfS0VZUEFEX01BWF9TQ0FOX0NPVU5UKQorCWlmIChrZXlwYWQtPnNjYW5fY291bnQgPiBTVE1QRV9LRVlQQURfTUFYX1NDQU5fQ09VTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gc3RtcGVfZW5hYmxlKHN0bXBlLCBTVE1QRV9CTE9DS19LRVlQQUQpOwpAQCAtMjQ1LDcgKzI5MSw3IEBACiAKIAlyZXQgPSBzdG1wZV9zZXRfYml0cyhzdG1wZSwgU1RNUEVfS1BDX0NUUkxfTVNCLAogCQkJICAgICBTVE1QRV9LUENfQ1RSTF9NU0JfU0NBTl9DT1VOVCwKLQkJCSAgICAgcGxhdC0+c2Nhbl9jb3VudCA8PCA0KTsKKwkJCSAgICAga2V5cGFkLT5zY2FuX2NvdW50IDw8IDQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNTMsMTcgKzI5OSwxOCBAQAogCQkJICAgICAgU1RNUEVfS1BDX0NUUkxfTFNCX1NDQU4gfAogCQkJICAgICAgU1RNUEVfS1BDX0NUUkxfTFNCX0RFQk9VTkNFLAogCQkJICAgICAgU1RNUEVfS1BDX0NUUkxfTFNCX1NDQU4gfAotCQkJICAgICAgKHBsYXQtPmRlYm91bmNlX21zIDw8IDEpKTsKKwkJCSAgICAgIChrZXlwYWQtPmRlYm91bmNlX21zIDw8IDEpKTsKIH0KIAotc3RhdGljIHZvaWQgc3RtcGVfa2V5cGFkX2ZpbGxfdXNlZF9waW5zKHN0cnVjdCBzdG1wZV9rZXlwYWQgKmtleXBhZCkKK3N0YXRpYyB2b2lkIHN0bXBlX2tleXBhZF9maWxsX3VzZWRfcGlucyhzdHJ1Y3Qgc3RtcGVfa2V5cGFkICprZXlwYWQsCisJCQkJCXUzMiB1c2VkX3Jvd3MsIHUzMiB1c2VkX2NvbHMpCiB7CiAJaW50IHJvdywgY29sOwogCi0JZm9yIChyb3cgPSAwOyByb3cgPCBTVE1QRV9LRVlQQURfTUFYX1JPV1M7IHJvdysrKSB7Ci0JCWZvciAoY29sID0gMDsgY29sIDwgU1RNUEVfS0VZUEFEX01BWF9DT0xTOyBjb2wrKykgeworCWZvciAocm93ID0gMDsgcm93IDwgdXNlZF9yb3dzOyByb3crKykgeworCQlmb3IgKGNvbCA9IDA7IGNvbCA8IHVzZWRfY29sczsgY29sKyspIHsKIAkJCWludCBjb2RlID0gTUFUUklYX1NDQU5fQ09ERShyb3csIGNvbCwKLQkJCQkJCVNUTVBFX0tFWVBBRF9ST1dfU0hJRlQpOworCQkJCQkJICAgIFNUTVBFX0tFWVBBRF9ST1dfU0hJRlQpOwogCQkJaWYgKGtleXBhZC0+a2V5bWFwW2NvZGVdICE9IEtFWV9SRVNFUlZFRCkgewogCQkJCWtleXBhZC0+cm93cyB8PSAxIDw8IHJvdzsKIAkJCQlrZXlwYWQtPmNvbHMgfD0gMSA8PCBjb2w7CkBAIC0yNzIsNTEgKzMxOSwxNyBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19PRgotc3RhdGljIGNvbnN0IHN0cnVjdCBzdG1wZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqCi1zdG1wZV9rZXlwYWRfb2ZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7Ci0Jc3RydWN0IHN0bXBlX2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwbGF0OwotCi0JaWYgKCFucCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Ci0KLQlwbGF0ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwbGF0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwbGF0KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiZGVib3VuY2UtaW50ZXJ2YWwiLCAmcGxhdC0+ZGVib3VuY2VfbXMpOwotCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAic3Qsc2Nhbi1jb3VudCIsICZwbGF0LT5zY2FuX2NvdW50KTsKLQotCXBsYXQtPm5vX2F1dG9yZXBlYXQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJzdCxuby1hdXRvcmVwZWF0Iik7Ci0KLQlyZXR1cm4gcGxhdDsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBzdG1wZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqCi1zdG1wZV9rZXlwYWRfb2ZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RtcGVfa2V5cGFkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHN0bXBlICpzdG1wZSA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKLQljb25zdCBzdHJ1Y3Qgc3RtcGVfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBzdG1wZV9rZXlwYWQgKmtleXBhZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwl1MzIgcm93czsKKwl1MzIgY29sczsKIAlpbnQgZXJyb3I7CiAJaW50IGlycTsKIAotCXBsYXQgPSBzdG1wZS0+cGRhdGEtPmtleXBhZDsKLQlpZiAoIXBsYXQpIHsKLQkJcGxhdCA9IHN0bXBlX2tleXBhZF9vZl9wcm9iZSgmcGRldi0+ZGV2KTsKLQkJaWYgKElTX0VSUihwbGF0KSkKLQkJCXJldHVybiBQVFJfRVJSKHBsYXQpOwotCX0KLQogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApCiAJCXJldHVybiBpcnE7CkBAIC0zMjYsNiArMzM5LDEzIEBACiAJaWYgKCFrZXlwYWQpCiAJCXJldHVybiAtRU5PTUVNOwogCisJa2V5cGFkLT5zdG1wZSA9IHN0bXBlOworCWtleXBhZC0+dmFyaWFudCA9ICZzdG1wZV9rZXlwYWRfdmFyaWFudHNbc3RtcGUtPnBhcnRudW1dOworCisJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJkZWJvdW5jZS1pbnRlcnZhbCIsICZrZXlwYWQtPmRlYm91bmNlX21zKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInN0LHNjYW4tY291bnQiLCAma2V5cGFkLT5zY2FuX2NvdW50KTsKKwlrZXlwYWQtPm5vX2F1dG9yZXBlYXQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJzdCxuby1hdXRvcmVwZWF0Iik7CisKIAlpbnB1dCA9IGRldm1faW5wdXRfYWxsb2NhdGVfZGV2aWNlKCZwZGV2LT5kZXYpOwogCWlmICghaW5wdXQpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzM0LDIzICszNTQsMjIgQEAKIAlpbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19JMkM7CiAJaW5wdXQtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCi0JZXJyb3IgPSBtYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChwbGF0LT5rZXltYXBfZGF0YSwgTlVMTCwKLQkJCQkJICAgU1RNUEVfS0VZUEFEX01BWF9ST1dTLAotCQkJCQkgICBTVE1QRV9LRVlQQURfTUFYX0NPTFMsCisJZXJyb3IgPSBtYXRyaXhfa2V5cGFkX3BhcnNlX29mX3BhcmFtcygmcGRldi0+ZGV2LCAmcm93cywgJmNvbHMpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBtYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChOVUxMLCBOVUxMLCByb3dzLCBjb2xzLAogCQkJCQkgICBrZXlwYWQtPmtleW1hcCwgaW5wdXQpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCiAJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXQsIEVWX01TQywgTVNDX1NDQU4pOwotCWlmICghcGxhdC0+bm9fYXV0b3JlcGVhdCkKKwlpZiAoIWtleXBhZC0+bm9fYXV0b3JlcGVhdCkKIAkJX19zZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKIAotCXN0bXBlX2tleXBhZF9maWxsX3VzZWRfcGlucyhrZXlwYWQpOworCXN0bXBlX2tleXBhZF9maWxsX3VzZWRfcGlucyhrZXlwYWQsIHJvd3MsIGNvbHMpOwogCi0Ja2V5cGFkLT5zdG1wZSA9IHN0bXBlOwotCWtleXBhZC0+cGxhdCA9IHBsYXQ7CiAJa2V5cGFkLT5pbnB1dCA9IGlucHV0OwotCWtleXBhZC0+dmFyaWFudCA9ICZzdG1wZV9rZXlwYWRfdmFyaWFudHNbc3RtcGUtPnBhcnRudW1dOwogCiAJZXJyb3IgPSBzdG1wZV9rZXlwYWRfY2hpcF9pbml0KGtleXBhZCk7CiAJaWYgKGVycm9yIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKaW5kZXggZDEyNWEwMS4uZDg4ZDczZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKQEAgLTg4MSw2ICs4ODEsMzQgQEAKIAkJCQkJICB1bnNpZ25lZCBjaGFyICpwa3QsCiAJCQkJCSAgdW5zaWduZWQgY2hhciBwa3RfaWQpCiB7CisJLyoKKwkgKiAgICAgICBwYWNrZXQtZm10ICAgIGI3ICAgYjYgICAgYjUgICBiNCAgIGIzICAgYjIgICBiMSAgIGIwCisJICogQnl0ZTAgVFdPICYgTVVMVEkgICAgTCAgICAxICAgICBSICAgIE0gICAgMSBZMC0yIFkwLTEgWTAtMAorCSAqIEJ5dGUwIE5FVyAgICAgICAgICAgIEwgICAgMSAgWDEtNSAgICAxICAgIDEgWTAtMiBZMC0xIFkwLTAKKwkgKiBCeXRlMSAgICAgICAgICAgIFkwLTEwIFkwLTkgIFkwLTggWTAtNyBZMC02IFkwLTUgWTAtNCBZMC0zCisJICogQnl0ZTIgICAgICAgICAgICBYMC0xMSAgICAxIFgwLTEwIFgwLTkgWDAtOCBYMC03IFgwLTYgWDAtNQorCSAqIEJ5dGUzICAgICAgICAgICAgWDEtMTEgICAgMSAgWDAtNCBYMC0zICAgIDEgWDAtMiBYMC0xIFgwLTAKKwkgKiBCeXRlNCBUV08gICAgICAgIFgxLTEwICBUV08gIFgxLTkgWDEtOCBYMS03IFgxLTYgWDEtNSBYMS00CisJICogQnl0ZTQgTVVMVEkgICAgICBYMS0xMCAgVFdPICBYMS05IFgxLTggWDEtNyBYMS02IFkxLTUgICAgMQorCSAqIEJ5dGU0IE5FVyAgICAgICAgWDEtMTAgIFRXTyAgWDEtOSBYMS04IFgxLTcgWDEtNiAgICAwICAgIDAKKwkgKiBCeXRlNSBUV08gJiBORVcgIFkxLTEwICAgIDAgIFkxLTkgWTEtOCBZMS03IFkxLTYgWTEtNSBZMS00CisJICogQnl0ZTUgTVVMVEkgICAgICBZMS0xMCAgICAwICBZMS05IFkxLTggWTEtNyBZMS02ICBGLTEgIEYtMAorCSAqIEw6ICAgICAgICAgTGVmdCBidXR0b24KKwkgKiBSIC8gTTogICAgIE5vbi1jbGlja3BhZHM6IFJpZ2h0IC8gTWlkZGxlIGJ1dHRvbgorCSAqICAgICAgICAgICAgQ2xpY2twYWRzOiBXaGVuID4gMiBmaW5nZXJzIGFyZSBkb3duLCBhbmQgc29tZSBmaW5nZXJzCisJICogICAgICAgICAgICBhcmUgaW4gdGhlIGJ1dHRvbiBhcmVhLCB0aGVuIHRoZSAyIGNvb3JkaW5hdGVzIHJlcG9ydGVkCisJICogICAgICAgICAgICBhcmUgZm9yIGZpbmdlcnMgb3V0c2lkZSB0aGUgYnV0dG9uIGFyZWEgYW5kIHRoZXNlIHJlcG9ydAorCSAqICAgICAgICAgICAgZXh0cmEgZmluZ2VycyBiZWluZyBwcmVzZW50IGluIHRoZSByaWdodCAvIGxlZnQgYnV0dG9uCisJICogICAgICAgICAgICBhcmVhLiBOb3RlIHRoZXNlIGZpbmdlcnMgYXJlIG5vdCBhZGRlZCB0byB0aGUgRiBmaWVsZCEKKwkgKiAgICAgICAgICAgIHNvIGlmIGEgVFdPIHBhY2tldCBpcyByZWNlaXZlZCBhbmQgUiA9IDEgdGhlbiB0aGVyZSBhcmUKKwkgKiAgICAgICAgICAgIDMgZmluZ2VycyBkb3duLCBldGMuCisJICogVFdPOiAgICAgICAxOiBUd28gdG91Y2hlcyBwcmVzZW50LCBieXRlIDAvNC81IGFyZSBpbiBUV08gZm10CisJICogICAgICAgICAgICAwOiBJZiBieXRlIDQgYml0IDAgaXMgMSwgdGhlbiBieXRlIDAvNC81IGFyZSBpbiBNVUxUSSBmbXQKKwkgKiAgICAgICAgICAgICAgIG90aGVyd2lzZSBieXRlIDAgYml0IDQgbXVzdCBiZSBzZXQgYW5kIGJ5dGUgMC80LzUgYXJlCisJICogICAgICAgICAgICAgICBpbiBORVcgZm10CisJICogRjogICAgICAgICBOdW1iZXIgb2YgZmluZ2VycyAtIDMsIDAgbWVhbnMgMyBmaW5nZXJzLCAxIG1lYW5zIDQgLi4uCisJICovCisKIAltdFswXS54ID0gKChwa3RbMl0gJiAweDgwKSA8PCA0KTsKIAltdFswXS54IHw9ICgocGt0WzJdICYgMHgzRikgPDwgNSk7CiAJbXRbMF0ueCB8PSAoKHBrdFszXSAmIDB4MzApID4+IDEpOwpAQCAtOTE5LDE4ICs5NDcsMjEgQEAKIAogc3RhdGljIGludCBhbHBzX2dldF9tdF9jb3VudChzdHJ1Y3QgaW5wdXRfbXRfcG9zICptdCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgZmluZ2VycyA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RPVUNIRVMgJiYgbXRbaV0ueCAhPSAwICYmIG10W2ldLnkgIT0gMDsgaSsrKQotCQkvKiBlbXB0eSAqLzsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RPVUNIRVM7IGkrKykgeworCQlpZiAobXRbaV0ueCAhPSAwIHx8IG10W2ldLnkgIT0gMCkKKwkJCWZpbmdlcnMrKzsKKwl9CiAKLQlyZXR1cm4gaTsKKwlyZXR1cm4gZmluZ2VyczsKIH0KIAogc3RhdGljIGludCBhbHBzX2RlY29kZV9wYWNrZXRfdjcoc3RydWN0IGFscHNfZmllbGRzICpmLAogCQkJCSAgdW5zaWduZWQgY2hhciAqcCwKIAkJCQkgIHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQogeworCXN0cnVjdCBhbHBzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwogCXVuc2lnbmVkIGNoYXIgcGt0X2lkOwogCiAJcGt0X2lkID0gYWxwc19nZXRfcGFja2V0X2lkX3Y3KHApOwpAQCAtOTM4LDE5ICs5NjksNTIgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKHBrdF9pZCA9PSBWN19QQUNLRVRfSURfVU5LTk9XTikKIAkJcmV0dXJuIC0xOworCS8qCisJICogTkVXIHBhY2tldHMgYXJlIHNlbmQgdG8gaW5kaWNhdGUgYSBkaXNjb250aW51aXR5IGluIHRoZSBmaW5nZXIKKwkgKiBjb29yZGluYXRlIHJlcG9ydGluZy4gU3BlY2lmaWNhbGx5IGEgZmluZ2VyIG1heSBoYXZlIG1vdmVkIGZyb20KKwkgKiBzbG90IDAgdG8gMSBvciB2aWNlIHZlcnNhLiBJTlBVVF9NVF9UUkFDSyB0YWtlcyBjYXJlIG9mIHRoaXMgZm9yCisJICogdXMuCisJICoKKwkgKiBORVcgcGFja2V0cyBoYXZlIDMgcHJvYmxlbXM6CisJICogMSkgVGhleSBkbyBub3QgY29udGFpbiBtaWRkbGUgLyByaWdodCBidXR0b24gaW5mbyAob24gbm9uIGNsaWNrcGFkcykKKwkgKiAgICB0aGlzIGNhbiBiZSB3b3JrZWQgYXJvdW5kIGJ5IHByZXNlcnZpbmcgdGhlIG9sZCBidXR0b24gc3RhdGUKKwkgKiAyKSBUaGV5IGRvIG5vdCBjb250YWluIGFuIGFjY3VyYXRlIGZpbmdlcmNvdW50LCBhbmQgdGhleSBhcmUKKwkgKiAgICB0eXBpY2FsbHkgc2VuZCB3aGVuIHRoZSBudW1iZXIgb2YgZmluZ2VycyBjaGFuZ2VzLiBXZSBjYW5ub3QgdXNlCisJICogICAgdGhlIG9sZCBmaW5nZXIgY291bnQgYXMgdGhhdCBtYXkgbWlzbWF0Y2ggd2l0aCB0aGUgYW1vdW50IG9mCisJICogICAgdG91Y2ggY29vcmRpbmF0ZXMgd2UndmUgYXZhaWxhYmxlIGluIHRoZSBORVcgcGFja2V0CisJICogMykgVGhlaXIgeCBkYXRhIGZvciB0aGUgc2Vjb25kIHRvdWNoIGlzIGluYWNjdXJhdGUgbGVhZGluZyB0bworCSAqICAgIGEgcG9zc2libGUganVtcCBvZiB0aGUgeCBjb29yZGluYXRlIGJ5IDE2IHVuaXRzIHdoZW4gdGhlIGZpcnN0CisJICogICAgbm9uIE5FVyBwYWNrZXQgY29tZXMgaW4KKwkgKiBTaW5jZSBwcm9ibGVtcyAyICYgMyBjYW5ub3QgYmUgd29ya2VkIGFyb3VuZCwganVzdCBpZ25vcmUgdGhlbS4KKwkgKi8KKwlpZiAocGt0X2lkID09IFY3X1BBQ0tFVF9JRF9ORVcpCisJCXJldHVybiAxOwogCiAJYWxwc19nZXRfZmluZ2VyX2Nvb3JkaW5hdGVfdjcoZi0+bXQsIHAsIHBrdF9pZCk7CiAKLQlpZiAocGt0X2lkID09IFY3X1BBQ0tFVF9JRF9UV08gfHwgcGt0X2lkID09IFY3X1BBQ0tFVF9JRF9NVUxUSSkgewotCQlmLT5sZWZ0ID0gKHBbMF0gJiAweDgwKSA+PiA3OworCWlmIChwa3RfaWQgPT0gVjdfUEFDS0VUX0lEX1RXTykKKwkJZi0+ZmluZ2VycyA9IGFscHNfZ2V0X210X2NvdW50KGYtPm10KTsKKwllbHNlIC8qIHBrdF9pZCA9PSBWN19QQUNLRVRfSURfTVVMVEkgKi8KKwkJZi0+ZmluZ2VycyA9IDMgKyAocFs1XSAmIDB4MDMpOworCisJZi0+bGVmdCA9IChwWzBdICYgMHg4MCkgPj4gNzsKKwlpZiAocHJpdi0+ZmxhZ3MgJiBBTFBTX0JVVFRPTlBBRCkgeworCQlpZiAocFswXSAmIDB4MjApCisJCQlmLT5maW5nZXJzKys7CisJCWlmIChwWzBdICYgMHgxMCkKKwkJCWYtPmZpbmdlcnMrKzsKKwl9IGVsc2UgewogCQlmLT5yaWdodCA9IChwWzBdICYgMHgyMCkgPj4gNTsKIAkJZi0+bWlkZGxlID0gKHBbMF0gJiAweDEwKSA+PiA0OwogCX0KIAotCWlmIChwa3RfaWQgPT0gVjdfUEFDS0VUX0lEX1RXTykKLQkJZi0+ZmluZ2VycyA9IGFscHNfZ2V0X210X2NvdW50KGYtPm10KTsKLQllbHNlIGlmIChwa3RfaWQgPT0gVjdfUEFDS0VUX0lEX01VTFRJKQotCQlmLT5maW5nZXJzID0gMyArIChwWzVdICYgMHgwMyk7CisJLyogU29tZXRpbWVzIGEgc2luZ2xlIHRvdWNoIGlzIHJlcG9ydGVkIGluIG10WzFdIHJhdGhlciB0aGVuIG10WzBdICovCisJaWYgKGYtPmZpbmdlcnMgPT0gMSAmJiBmLT5tdFswXS54ID09IDAgJiYgZi0+bXRbMF0ueSA9PSAwKSB7CisJCWYtPm10WzBdLnggPSBmLT5tdFsxXS54OworCQlmLT5tdFswXS55ID0gZi0+bXRbMV0ueTsKKwkJZi0+bXRbMV0ueCA9IDA7CisJCWYtPm10WzFdLnkgPSAwOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jCmluZGV4IGYyYjk3ODAuLjZlMjI2ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMKQEAgLTEwOTcsNiArMTA5Nyw4IEBACiAgKiBBc3VzIFVYMzEgICAgICAgICAgICAgICAweDM2MWYwMCAgICAgICAgMjAsIDE1LCAwZSAgICAgIGNsaWNrcGFkCiAgKiBBc3VzIFVYMzJWRCAgICAgICAgICAgICAweDM2MWYwMiAgICAgICAgMDAsIDE1LCAwZSAgICAgIGNsaWNrcGFkCiAgKiBBdmF0YXIgQVZJVS0xNDVBMiAgICAgICAweDM2MWYwMCAgICAgICAgPyAgICAgICAgICAgICAgIGNsaWNrcGFkCisgKiBGdWppdHN1IExJRkVCT09LIEU1NDQgICAweDQ3MGYwMCAgICAgICAgZDAsIDEyLCAwOSAgICAgIDIgaHcgYnV0dG9ucworICogRnVqaXRzdSBMSUZFQk9PSyBFNTU0ICAgMHg1NzBmMDEgICAgICAgIDQwLCAxNCwgMGMgICAgICAyIGh3IGJ1dHRvbnMKICAqIEZ1aml0c3UgSDczMCAgICAgICAgICAgIDB4NTcwZjAwICAgICAgICBjMCwgMTQsIDBjICAgICAgMyBodyBidXR0b25zICgqKikKICAqIEdpZ2FieXRlIFUyNDQyICAgICAgICAgIDB4NDUwZjAxICAgICAgICA1OCwgMTcsIDBjICAgICAgMiBodyBidXR0b25zCiAgKiBMZW5vdm8gTDQzMCAgICAgICAgICAgICAweDM1MGYwMiAgICAgICAgYjksIDE1LCAwYyAgICAgIDIgaHcgYnV0dG9ucyAoKikKQEAgLTE0NzUsNiArMTQ3NywyMCBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDRUxTSVVTIEg3MzAiKSwKIAkJfSwKIAl9LAorCXsKKwkJLyogRnVqaXRzdSBMSUZFQk9PSyBFNTU0ICBkb2VzIG5vdCB3b3JrIHdpdGggY3JjX2VuYWJsZWQgPT0gMCAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTElGRUJPT0sgRTU1NCIpLAorCQl9LAorCX0sCisJeworCQkvKiBGdWppdHN1IExJRkVCT09LIEU1NDQgIGRvZXMgbm90IHdvcmsgd2l0aCBjcmNfZW5hYmxlZCA9PSAwICovCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJMSUZFQk9PSyBFNTQ0IiksCisJCX0sCisJfSwKICNlbmRpZgogCXsgfQogfTsKQEAgLTE1MjAsNiArMTUzNiw4IEBACiAJCWNhc2UgNzoKIAkJY2FzZSA4OgogCQljYXNlIDk6CisJCWNhc2UgMTA6CisJCWNhc2UgMTM6CiAJCQlldGQtPmh3X3ZlcnNpb24gPSA0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBmOTQ3MjkyLi4yM2UyNmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTEzNSw4ICsxMzUsOSBAQAogCQkxMjMyLCA1NzEwLCAxMTU2LCA0Njk2CiAJfSwKIAl7Ci0JCShjb25zdCBjaGFyICogY29uc3QgW10peyJMRU4wMDM0IiwgIkxFTjAwMzYiLCAiTEVOMDAzOSIsCi0JCQkJCSJMRU4yMDAyIiwgIkxFTjIwMDQiLCBOVUxMfSwKKwkJKGNvbnN0IGNoYXIgKiBjb25zdCBbXSl7IkxFTjAwMzQiLCAiTEVOMDAzNiIsICJMRU4wMDM3IiwKKwkJCQkJIkxFTjAwMzkiLCAiTEVOMjAwMiIsICJMRU4yMDA0IiwKKwkJCQkJTlVMTH0sCiAJCTEwMjQsIDUxMTIsIDIwMjQsIDQ4MzIKIAl9LAogCXsKQEAgLTE2NSw3ICsxNjYsNyBAQAogCSJMRU4wMDM0IiwgLyogVDQzMXMsIEw0NDAsIEw1NDAsIFQ1NDAsIFc1NDAsIFgxIENhcmJvbiAybmQgKi8KIAkiTEVOMDAzNSIsIC8qIFgyNDAgKi8KIAkiTEVOMDAzNiIsIC8qIFQ0NDAgKi8KLQkiTEVOMDAzNyIsCisJIkxFTjAwMzciLCAvKiBYMSBDYXJib24gMm5kICovCiAJIkxFTjAwMzgiLAogCSJMRU4wMDM5IiwgLyogVDQ0MHMgKi8KIAkiTEVOMDA0MSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCmluZGV4IDMwYzhiNjkuLjM1NGQ0N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCkBAIC0yMjcsNiArMjI3LDcgQEAKIFRSQUNLUE9JTlRfSU5UX0FUVFIodXB0aHJlc2gsIFRQX1VQX1RIUkVTSCwgVFBfREVGX1VQX1RIUkVTSCk7CiBUUkFDS1BPSU5UX0lOVF9BVFRSKHp0aW1lLCBUUF9aX1RJTUUsIFRQX0RFRl9aX1RJTUUpOwogVFJBQ0tQT0lOVF9JTlRfQVRUUihqZW5rcywgVFBfSkVOS1NfQ1VSViwgVFBfREVGX0pFTktTX0NVUlYpOworVFJBQ0tQT0lOVF9JTlRfQVRUUihkcmlmdF90aW1lLCBUUF9EUklGVF9USU1FLCBUUF9ERUZfRFJJRlRfVElNRSk7CiAKIFRSQUNLUE9JTlRfQklUX0FUVFIocHJlc3NfdG9fc2VsZWN0LCBUUF9UT0dHTEVfUFRTT04sIFRQX01BU0tfUFRTT04sIDAsCiAJCSAgICBUUF9ERUZfUFRTT04pOwpAQCAtMjQ2LDYgKzI0Nyw3IEBACiAJJnBzbW91c2VfYXR0cl91cHRocmVzaC5kYXR0ci5hdHRyLAogCSZwc21vdXNlX2F0dHJfenRpbWUuZGF0dHIuYXR0ciwKIAkmcHNtb3VzZV9hdHRyX2plbmtzLmRhdHRyLmF0dHIsCisJJnBzbW91c2VfYXR0cl9kcmlmdF90aW1lLmRhdHRyLmF0dHIsCiAJJnBzbW91c2VfYXR0cl9wcmVzc190b19zZWxlY3QuZGF0dHIuYXR0ciwKIAkmcHNtb3VzZV9hdHRyX3NraXBiYWNrLmRhdHRyLmF0dHIsCiAJJnBzbW91c2VfYXR0cl9leHRfZGV2LmRhdHRyLmF0dHIsCkBAIC0zMTIsNiArMzE0LDcgQEAKIAlUUkFDS1BPSU5UX1VQREFURShpbl9wb3dlcl9vbl9zdGF0ZSwgcHNtb3VzZSwgdHAsIHVwdGhyZXNoKTsKIAlUUkFDS1BPSU5UX1VQREFURShpbl9wb3dlcl9vbl9zdGF0ZSwgcHNtb3VzZSwgdHAsIHp0aW1lKTsKIAlUUkFDS1BPSU5UX1VQREFURShpbl9wb3dlcl9vbl9zdGF0ZSwgcHNtb3VzZSwgdHAsIGplbmtzKTsKKwlUUkFDS1BPSU5UX1VQREFURShpbl9wb3dlcl9vbl9zdGF0ZSwgcHNtb3VzZSwgdHAsIGRyaWZ0X3RpbWUpOwogCiAJLyogdG9nZ2xlcyAqLwogCVRSQUNLUE9JTlRfVVBEQVRFKGluX3Bvd2VyX29uX3N0YXRlLCBwc21vdXNlLCB0cCwgcHJlc3NfdG9fc2VsZWN0KTsKQEAgLTMzMiw2ICszMzUsNyBAQAogCVRSQUNLUE9JTlRfU0VUX1BPV0VSX09OX0RFRkFVTFQodHAsIHVwdGhyZXNoKTsKIAlUUkFDS1BPSU5UX1NFVF9QT1dFUl9PTl9ERUZBVUxUKHRwLCB6dGltZSk7CiAJVFJBQ0tQT0lOVF9TRVRfUE9XRVJfT05fREVGQVVMVCh0cCwgamVua3MpOworCVRSQUNLUE9JTlRfU0VUX1BPV0VSX09OX0RFRkFVTFQodHAsIGRyaWZ0X3RpbWUpOwogCVRSQUNLUE9JTlRfU0VUX1BPV0VSX09OX0RFRkFVTFQodHAsIGluZXJ0aWEpOwogCiAJLyogdG9nZ2xlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuaAppbmRleCBlY2QwNTQ3Li41NjE3ZWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuaApAQCAtNzAsNiArNzAsOSBAQAogI2RlZmluZSBUUF9VUF9USFJFU0gJCTB4NUEJLyogVXNlZCB0byBnZW5lcmF0ZSBhICdjbGljaycgb24gWi1heGlzICovCiAjZGVmaW5lIFRQX1pfVElNRQkJMHg1RQkvKiBIb3cgc2hhcnAgb2YgYSBwcmVzcyAqLwogI2RlZmluZSBUUF9KRU5LU19DVVJWCQkweDVECS8qIE1pbmltdW0gY3VydmF0dXJlIGZvciBkb3VibGUgY2xpY2sgKi8KKyNkZWZpbmUgVFBfRFJJRlRfVElNRQkJMHg1RgkvKiBIb3cgbG9uZyBhICdoYW5kcyBvZmYnIGNvbmRpdGlvbiAqLworCQkJCQkvKiBtdXN0IGxhc3QgKHgqMTA3bXMpIGZvciBkcmlmdCAqLworCQkJCQkvKiBjb3JyZWN0aW9uIHRvIG9jY3VyICovCiAKIC8qCiAgKiBUb2dnbGluZyBGbGFnIGJpdHMKQEAgLTEyMCw2ICsxMjMsNyBAQAogI2RlZmluZSBUUF9ERUZfVVBfVEhSRVNICTB4RkYKICNkZWZpbmUgVFBfREVGX1pfVElNRQkJMHgyNgogI2RlZmluZSBUUF9ERUZfSkVOS1NfQ1VSVgkweDg3CisjZGVmaW5lIFRQX0RFRl9EUklGVF9USU1FCTB4MDUKIAogLyogVG9nZ2xlcyAqLwogI2RlZmluZSBUUF9ERUZfTUIJCTB4MDAKQEAgLTEzNyw2ICsxNDEsNyBAQAogCXVuc2lnbmVkIGNoYXIgZHJhZ2h5cywgbWluZHJhZzsKIAl1bnNpZ25lZCBjaGFyIHRocmVzaCwgdXB0aHJlc2g7CiAJdW5zaWduZWQgY2hhciB6dGltZSwgamVua3M7CisJdW5zaWduZWQgY2hhciBkcmlmdF90aW1lOwogCiAJLyogdG9nZ2xlcyAqLwogCXVuc2lnbmVkIGNoYXIgcHJlc3NfdG9fc2VsZWN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggYzY2ZDFiNS4uYzExNTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0xNTIsNiArMTUyLDE0IEBACiAJCX0sCiAJfSwKIAl7CisJCS8qIE1lZGlvbiBBa295YSBFNzIyNSAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1lZGlvbiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBa295YSBFNzIyNSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIxLjAiKSwKKwkJfSwKKwl9LAorCXsKIAkJLyogQmx1ZSBGQjU2MDEgKi8KIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJibHVlIiksCkBAIC00MTUsNiArNDIzLDEzIEBACiAJCX0sCiAJfSwKIAl7CisJCS8qIEFjZXIgQXNwaXJlIDc3MzggKi8KKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFzcGlyZSA3NzM4IiksCisJCX0sCisJfSwKKwl7CiAJCS8qIEdlcmljb20gQmVsbGFnaW8gKi8KIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJHZXJpY29tIiksCkBAIC03NDUsNiArNzYwLDM1IEBACiAJeyB9CiB9OwogCisvKgorICogU29tZSBsYXB0b3BzIG5lZWQga2V5Ym9hcmQgcmVzZXQgYmVmb3JlIHByb2JpbmcgZm9yIHRoZSB0cmFja3BhZCB0byBnZXQKKyAqIGl0IGRldGVjdGVkLCBpbml0aWFsaXNlZCAmIGZpbmFsbHkgd29yay4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGNvbnN0IGk4MDQyX2RtaV9rYmRyZXNldF90YWJsZVtdID0geworCXsKKwkJLyogR2lnYWJ5dGUgUDM1IHYyIC0gRWxhbnRlY2ggdG91Y2hwYWQgKi8KKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJHSUdBQllURSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQMzVWMiIpLAorCQl9LAorCX0sCisJCXsKKwkJLyogQW9ydXMgYnJhbmRlZCBHaWdhYnl0ZSBYMyBQbHVzIC0gRWxhbnRlY2ggdG91Y2hwYWQgKi8KKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJHSUdBQllURSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJYMyIpLAorCQl9LAorCX0sCisJeworCQkvKiBHaWdhYnl0ZSBQMzQgLSBFbGFudGVjaCB0b3VjaHBhZCAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkdJR0FCWVRFIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlAzNCIpLAorCQl9LAorCX0sCisJeyB9Cit9OworCiAjZW5kaWYgLyogQ09ORklHX1g4NiAqLwogCiAjaWZkZWYgQ09ORklHX1BOUApAQCAtMTA0MCw2ICsxMDg0LDkgQEAKIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShpODA0Ml9kbWlfZHJpdGVrX3RhYmxlKSkKIAkJaTgwNDJfZHJpdGVrID0gdHJ1ZTsKIAorCWlmIChkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9rYmRyZXNldF90YWJsZSkpCisJCWk4MDQyX2tiZHJlc2V0ID0gdHJ1ZTsKKwogCS8qCiAJICogQTIwIHdhcyBhbHJlYWR5IGVuYWJsZWQgZHVyaW5nIGVhcmx5IGtlcm5lbCBpbml0LiBCdXQgc29tZSBidWdneQogCSAqIEJJT1NlcyAoaW4gTVNJIExhcHRvcHMpIHJlcXVpcmUgQTIwIHRvIGJlIGVuYWJsZWQgdXNpbmcgODA0MiB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IDkyNGU0YmYuLjk4NmE3MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTY3LDYgKzY3LDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQobm90aW1lb3V0LCBpODA0Ml9ub3RpbWVvdXQsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub3RpbWVvdXQsICJJZ25vcmUgdGltZW91dHMgc2lnbmFsbGVkIGJ5IGk4MDQyIik7CiAKK3N0YXRpYyBib29sIGk4MDQyX2tiZHJlc2V0OworbW9kdWxlX3BhcmFtX25hbWVkKGtiZHJlc2V0LCBpODA0Ml9rYmRyZXNldCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGtiZHJlc2V0LCAiUmVzZXQgZGV2aWNlIGNvbm5lY3RlZCB0byBLQkQgcG9ydCIpOworCiAjaWZkZWYgQ09ORklHX1g4Ngogc3RhdGljIGJvb2wgaTgwNDJfZHJpdGVrOwogbW9kdWxlX3BhcmFtX25hbWVkKGRyaXRlaywgaTgwNDJfZHJpdGVrLCBib29sLCAwKTsKQEAgLTc5MCw2ICs3OTQsMTYgQEAKIAkJcmV0dXJuIC0xOwogCiAvKgorICogUmVzZXQga2V5Ym9hcmQgKG5lZWRlZCBvbiBzb21lIGxhcHRvcHMgdG8gc3VjY2Vzc2Z1bGx5IGRldGVjdAorICogdG91Y2hwYWQsIGUuZy4sIHNvbWUgR2lnYWJ5dGUgbGFwdG9wIG1vZGVscyB3aXRoIEVsYW50ZWNoCisgKiB0b3VjaHBhZHMpLgorICovCisJaWYgKGk4MDQyX2tiZHJlc2V0KSB7CisJCXByX3dhcm4oIkF0dGVtcHRpbmcgdG8gcmVzZXQgZGV2aWNlIGNvbm5lY3RlZCB0byBLQkQgcG9ydFxuIik7CisJCWk4MDQyX2tiZF93cml0ZShOVUxMLCAodW5zaWduZWQgY2hhcikgMHhmZik7CisJfQorCisvKgogICogVGVzdCBBVVggSVJRIGRlbGl2ZXJ5IHRvIG1ha2Ugc3VyZSBCSU9TIGRpZCBub3QgZ3JhYiB0aGUgSVJRIGFuZAogICogdXNlZCBpdCBmb3IgYSBQQ0kgY2FyZCBvciBzb21ldGhpZyBlbHNlLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX214dF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF9teHRfdHMuYwppbmRleCBiYjA3MDIwLi45NWVlOTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX214dF90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfbXh0X3RzLmMKQEAgLTk5LDEzICs5OSw5IEBACiAjZGVmaW5lIE1YVF9UNl9TVEFUVVNfQ09NU0VSUgkoMSA8PCAyKQogCiAvKiBNWFRfR0VOX1BPV0VSX1Q3IGZpZWxkICovCi1zdHJ1Y3QgdDdfY29uZmlnIHsKLQl1OCBpZGxlOwotCXU4IGFjdGl2ZTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgTVhUX1BPV0VSX0NGR19SVU4JCTAKLSNkZWZpbmUgTVhUX1BPV0VSX0NGR19ERUVQU0xFRVAJCTEKKyNkZWZpbmUgTVhUX1BPV0VSX0lETEVBQ1FJTlQJMAorI2RlZmluZSBNWFRfUE9XRVJfQUNUVkFDUUlOVAkxCisjZGVmaW5lIE1YVF9QT1dFUl9BQ1RWMklETEVUTwkyCiAKIC8qIE1YVF9HRU5fQUNRVUlSRV9UOCBmaWVsZCAqLwogI2RlZmluZSBNWFRfQUNRVUlSRV9DSFJHVElNRQkwCkBAIC0xMTcsNiArMTEzLDcgQEAKICNkZWZpbmUgTVhUX0FDUVVJUkVfQVRDSENBTFNUSFIJNwogCiAvKiBNWFRfVE9VQ0hfTVVMVElfVDkgZmllbGQgKi8KKyNkZWZpbmUgTVhUX1RPVUNIX0NUUkwJCTAKICNkZWZpbmUgTVhUX1Q5X09SSUVOVAkJOQogI2RlZmluZSBNWFRfVDlfUkFOR0UJCTE4CiAKQEAgLTI1Niw3ICsyNTMsNiBAQAogCWJvb2wgdXBkYXRlX2lucHV0OwogCXU4IGxhc3RfbWVzc2FnZV9jb3VudDsKIAl1OCBudW1fdG91Y2hpZHM7Ci0Jc3RydWN0IHQ3X2NvbmZpZyB0N19jZmc7CiAKIAkvKiBDYWNoZWQgcGFyYW1ldGVycyBmcm9tIG9iamVjdCB0YWJsZSAqLwogCXUxNiBUNV9hZGRyZXNzOwpAQCAtNjcyLDYgKzY2OCwyMCBAQAogCWRhdGEtPnQ2X3N0YXR1cyA9IHN0YXR1czsKIH0KIAorc3RhdGljIGludCBteHRfd3JpdGVfb2JqZWN0KHN0cnVjdCBteHRfZGF0YSAqZGF0YSwKKwkJCQkgdTggdHlwZSwgdTggb2Zmc2V0LCB1OCB2YWwpCit7CisJc3RydWN0IG14dF9vYmplY3QgKm9iamVjdDsKKwl1MTYgcmVnOworCisJb2JqZWN0ID0gbXh0X2dldF9vYmplY3QoZGF0YSwgdHlwZSk7CisJaWYgKCFvYmplY3QgfHwgb2Zmc2V0ID49IG14dF9vYmpfc2l6ZShvYmplY3QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZyA9IG9iamVjdC0+c3RhcnRfYWRkcmVzczsKKwlyZXR1cm4gbXh0X3dyaXRlX3JlZyhkYXRhLT5jbGllbnQsIHJlZyArIG9mZnNldCwgdmFsKTsKK30KKwogc3RhdGljIHZvaWQgbXh0X2lucHV0X2J1dHRvbihzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEsIHU4ICptZXNzYWdlKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZGF0YS0+aW5wdXRfZGV2OwpAQCAtMTc0Miw2MCArMTc1Miw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IG14dF9zZXRfdDdfcG93ZXJfY2ZnKHN0cnVjdCBteHRfZGF0YSAqZGF0YSwgdTggc2xlZXApCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmNsaWVudC0+ZGV2OwotCWludCBlcnJvcjsKLQlzdHJ1Y3QgdDdfY29uZmlnICpuZXdfY29uZmlnOwotCXN0cnVjdCB0N19jb25maWcgZGVlcHNsZWVwID0geyAuYWN0aXZlID0gMCwgLmlkbGUgPSAwIH07Ci0KLQlpZiAoc2xlZXAgPT0gTVhUX1BPV0VSX0NGR19ERUVQU0xFRVApCi0JCW5ld19jb25maWcgPSAmZGVlcHNsZWVwOwotCWVsc2UKLQkJbmV3X2NvbmZpZyA9ICZkYXRhLT50N19jZmc7Ci0KLQllcnJvciA9IF9fbXh0X3dyaXRlX3JlZyhkYXRhLT5jbGllbnQsIGRhdGEtPlQ3X2FkZHJlc3MsCi0JCQkJc2l6ZW9mKGRhdGEtPnQ3X2NmZyksIG5ld19jb25maWcpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZGV2X2RiZyhkZXYsICJTZXQgVDcgQUNUVjolZCBJRExFOiVkXG4iLAotCQluZXdfY29uZmlnLT5hY3RpdmUsIG5ld19jb25maWctPmlkbGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXh0X2luaXRfdDdfcG93ZXJfY2ZnKHN0cnVjdCBteHRfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+Y2xpZW50LT5kZXY7Ci0JaW50IGVycm9yOwotCWJvb2wgcmV0cnkgPSBmYWxzZTsKLQotcmVjaGVjazoKLQllcnJvciA9IF9fbXh0X3JlYWRfcmVnKGRhdGEtPmNsaWVudCwgZGF0YS0+VDdfYWRkcmVzcywKLQkJCQlzaXplb2YoZGF0YS0+dDdfY2ZnKSwgJmRhdGEtPnQ3X2NmZyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAoZGF0YS0+dDdfY2ZnLmFjdGl2ZSA9PSAwIHx8IGRhdGEtPnQ3X2NmZy5pZGxlID09IDApIHsKLQkJaWYgKCFyZXRyeSkgewotCQkJZGV2X2RiZyhkZXYsICJUNyBjZmcgemVybywgcmVzZXR0aW5nXG4iKTsKLQkJCW14dF9zb2Z0X3Jlc2V0KGRhdGEpOwotCQkJcmV0cnkgPSB0cnVlOwotCQkJZ290byByZWNoZWNrOwotCQl9IGVsc2UgewotCQkJZGV2X2RiZyhkZXYsICJUNyBjZmcgemVybyBhZnRlciByZXNldCwgb3ZlcnJpZGluZ1xuIik7Ci0JCQlkYXRhLT50N19jZmcuYWN0aXZlID0gMjA7Ci0JCQlkYXRhLT50N19jZmcuaWRsZSA9IDEwMDsKLQkJCXJldHVybiBteHRfc2V0X3Q3X3Bvd2VyX2NmZyhkYXRhLCBNWFRfUE9XRVJfQ0ZHX1JVTik7Ci0JCX0KLQl9Ci0KLQlkZXZfZGJnKGRldiwgIkluaXRpYWxpemVkIHBvd2VyIGNmZzogQUNUViAlZCwgSURMRSAlZFxuIiwKLQkJZGF0YS0+dDdfY2ZnLmFjdGl2ZSwgZGF0YS0+dDdfY2ZnLmlkbGUpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG14dF9jb25maWd1cmVfb2JqZWN0cyhzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEsCiAJCQkJIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqY2ZnKQogewpAQCAtMTgwOSwxMiArMTc2NSw2IEBACiAJCQlkZXZfd2FybihkZXYsICJFcnJvciAlZCB1cGRhdGluZyBjb25maWdcbiIsIGVycm9yKTsKIAl9CiAKLQllcnJvciA9IG14dF9pbml0X3Q3X3Bvd2VyX2NmZyhkYXRhKTsKLQlpZiAoZXJyb3IpIHsKLQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwb3dlciBjZmdcbiIpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCiAJZXJyb3IgPSBteHRfaW5pdGlhbGl6ZV90OV9pbnB1dF9kZXZpY2UoZGF0YSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yMDkzLDE1ICsyMDQzLDE2IEBACiAKIHN0YXRpYyB2b2lkIG14dF9zdGFydChzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEpCiB7Ci0JbXh0X3NldF90N19wb3dlcl9jZmcoZGF0YSwgTVhUX1BPV0VSX0NGR19SVU4pOwotCi0JLyogUmVjYWxpYnJhdGUgc2luY2UgY2hpcCBoYXMgYmVlbiBpbiBkZWVwIHNsZWVwICovCi0JbXh0X3Q2X2NvbW1hbmQoZGF0YSwgTVhUX0NPTU1BTkRfQ0FMSUJSQVRFLCAxLCBmYWxzZSk7CisJLyogVG91Y2ggZW5hYmxlICovCisJbXh0X3dyaXRlX29iamVjdChkYXRhLAorCQkJTVhUX1RPVUNIX01VTFRJX1Q5LCBNWFRfVE9VQ0hfQ1RSTCwgMHg4Myk7CiB9CiAKIHN0YXRpYyB2b2lkIG14dF9zdG9wKHN0cnVjdCBteHRfZGF0YSAqZGF0YSkKIHsKLQlteHRfc2V0X3Q3X3Bvd2VyX2NmZyhkYXRhLCBNWFRfUE9XRVJfQ0ZHX0RFRVBTTEVFUCk7CisJLyogVG91Y2ggZGlzYWJsZSAqLworCW14dF93cml0ZV9vYmplY3QoZGF0YSwKKwkJCU1YVF9UT1VDSF9NVUxUSV9UOSwgTVhUX1RPVUNIX0NUUkwsIDApOwogfQogCiBzdGF0aWMgaW50IG14dF9pbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKQEAgLTIyNjYsNiArMjIxNyw4IEBACiAJc3RydWN0IG14dF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gZGF0YS0+aW5wdXRfZGV2OwogCisJbXh0X3NvZnRfcmVzZXQoZGF0YSk7CisKIAltdXRleF9sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKIAogCWlmIChpbnB1dF9kZXYtPnVzZXJzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lZHQtZnQ1eDA2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VkdC1mdDV4MDYuYwppbmRleCAzNzkzZmNjLi5kNGMyNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VkdC1mdDV4MDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VkdC1mdDV4MDYuYwpAQCAtODUwLDkgKzg1MCwxMSBAQAogfQogCiAjZGVmaW5lIEVEVF9BVFRSX0NIRUNLU0VUKG5hbWUsIHJlZykgXAorZG8gewkJCQkJCQkJXAogCWlmIChwZGF0YS0+bmFtZSA+PSBlZHRfZnQ1eDA2X2F0dHJfIyNuYW1lLmxpbWl0X2xvdyAmJgkJXAogCSAgICBwZGF0YS0+bmFtZSA8PSBlZHRfZnQ1eDA2X2F0dHJfIyNuYW1lLmxpbWl0X2hpZ2gpCQlcCi0JCWVkdF9mdDV4MDZfcmVnaXN0ZXJfd3JpdGUodHNkYXRhLCByZWcsIHBkYXRhLT5uYW1lKQorCQllZHRfZnQ1eDA2X3JlZ2lzdGVyX3dyaXRlKHRzZGF0YSwgcmVnLCBwZGF0YS0+bmFtZSk7CVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgRURUX0dFVF9QUk9QKG5hbWUsIHJlZykgewkJCQlcCiAJdTMyIHZhbDsJCQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMKaW5kZXggMTIzMjMzNi4uNDBkZmJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYwpAQCAtNDAyOSwxNCArNDAyOSw2IEBACiAJaWYgKGFjdGlvbiAhPSBCVVNfTk9USUZZX1JFTU9WRURfREVWSUNFKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogSWYgdGhlIGRldmljZSBpcyBzdGlsbCBhdHRhY2hlZCB0byBhIGRldmljZSBkcml2ZXIgd2UgY2FuJ3QKLQkgKiB0ZWFyIGRvd24gdGhlIGRvbWFpbiB5ZXQgYXMgRE1BIG1hcHBpbmdzIG1heSBzdGlsbCBiZSBpbiB1c2UuCi0JICogV2FpdCBmb3IgdGhlIEJVU19OT1RJRllfVU5CT1VORF9EUklWRVIgZXZlbnQgdG8gZG8gdGhhdC4KLQkgKi8KLQlpZiAoYWN0aW9uID09IEJVU19OT1RJRllfREVMX0RFVklDRSAmJiBkZXYtPmRyaXZlciAhPSBOVUxMKQotCQlyZXR1cm4gMDsKLQogCWRvbWFpbiA9IGZpbmRfZG9tYWluKGRldik7CiAJaWYgKCFkb21haW4pCiAJCXJldHVybiAwOwpAQCAtNDQyOCw2ICs0NDIwLDEwIEBACiAJCQkJZG9tYWluX3JlbW92ZV9vbmVfZGV2X2luZm8ob2xkX2RvbWFpbiwgZGV2KTsKIAkJCWVsc2UKIAkJCQlkb21haW5fcmVtb3ZlX2Rldl9pbmZvKG9sZF9kb21haW4pOworCisJCQlpZiAoIWRvbWFpbl90eXBlX2lzX3ZtX29yX3NpKG9sZF9kb21haW4pICYmCisJCQkgICAgIGxpc3RfZW1wdHkoJm9sZF9kb21haW4tPmRldmljZXMpKQorCQkJCWRvbWFpbl9leGl0KG9sZF9kb21haW4pOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYyBiL2RyaXZlcnMvaW9tbXUvaXBtbXUtdm1zYS5jCmluZGV4IDY4ZGZiMGYuLjc0ODY5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvaXBtbXUtdm1zYS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaXBtbXUtdm1zYS5jCkBAIC01NTgsNyArNTU4LDcgQEAKIAogc3RhdGljIHU2NCBpcG1tdV9wYWdlX3Byb3QodW5zaWduZWQgaW50IHByb3QsIHU2NCB0eXBlKQogewotCXU2NCBwZ3Byb3QgPSBBUk1fVk1TQV9QVEVfWE4gfCBBUk1fVk1TQV9QVEVfbkcgfCBBUk1fVk1TQV9QVEVfQUYKKwl1NjQgcGdwcm90ID0gQVJNX1ZNU0FfUFRFX25HIHwgQVJNX1ZNU0FfUFRFX0FGCiAJCSAgIHwgQVJNX1ZNU0FfUFRFX1NIX0lTIHwgQVJNX1ZNU0FfUFRFX0FQX1VOUFJJVgogCQkgICB8IEFSTV9WTVNBX1BURV9OUyB8IHR5cGU7CiAKQEAgLTU2OCw4ICs1NjgsOCBAQAogCWlmIChwcm90ICYgSU9NTVVfQ0FDSEUpCiAJCXBncHJvdCB8PSBJTU1BSVJfQVRUUl9JRFhfV0JSV0EgPDwgQVJNX1ZNU0FfUFRFX0FUVFJJTkRYX1NISUZUOwogCi0JaWYgKHByb3QgJiBJT01NVV9FWEVDKQotCQlwZ3Byb3QgJj0gfkFSTV9WTVNBX1BURV9YTjsKKwlpZiAocHJvdCAmIElPTU1VX05PRVhFQykKKwkJcGdwcm90IHw9IEFSTV9WTVNBX1BURV9YTjsKIAllbHNlIGlmICghKHByb3QgJiAoSU9NTVVfUkVBRCB8IElPTU1VX1dSSVRFKSkpCiAJCS8qIElmIG5vIGFjY2VzcyBjcmVhdGUgYSBmYXVsdGluZyBlbnRyeSB0byBhdm9pZCBUTEIgZmlsbHMuICovCiAJCXBncHJvdCAmPSB+QVJNX1ZNU0FfUFRFX1BBR0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMgYi9kcml2ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMKaW5kZXggYjIwMjNhZi4uNmE4YjFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9yb2NrY2hpcC1pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYwpAQCAtMTAwOSw3ICsxMDA5LDYgQEAKIAkucmVtb3ZlID0gcmtfaW9tbXVfcmVtb3ZlLAogCS5kcml2ZXIgPSB7CiAJCSAgIC5uYW1lID0gInJrX2lvbW11IiwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihya19pb21tdV9kdF9pZHMpLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS90ZWdyYS1nYXJ0LmMgYi9kcml2ZXJzL2lvbW11L3RlZ3JhLWdhcnQuYwppbmRleCBmNzIyYTBjLi5jNDhkYTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L3RlZ3JhLWdhcnQuYworKysgYi9kcml2ZXJzL2lvbW11L3RlZ3JhLWdhcnQuYwpAQCAtMzE1LDYgKzMxNSw3IEBACiAJLmF0dGFjaF9kZXYJPSBnYXJ0X2lvbW11X2F0dGFjaF9kZXYsCiAJLmRldGFjaF9kZXYJPSBnYXJ0X2lvbW11X2RldGFjaF9kZXYsCiAJLm1hcAkJPSBnYXJ0X2lvbW11X21hcCwKKwkubWFwX3NnCQk9IGRlZmF1bHRfaW9tbXVfbWFwX3NnLAogCS51bm1hcAkJPSBnYXJ0X2lvbW11X3VubWFwLAogCS5pb3ZhX3RvX3BoeXMJPSBnYXJ0X2lvbW11X2lvdmFfdG9fcGh5cywKIAkucGdzaXplX2JpdG1hcAk9IEdBUlRfSU9NTVVfUEdTSVpFUywKQEAgLTM5NSw3ICszOTYsNyBAQAogCWRvX2dhcnRfc2V0dXAoZ2FydCwgTlVMTCk7CiAKIAlnYXJ0X2hhbmRsZSA9IGdhcnQ7Ci0JYnVzX3NldF9pb21tdSgmcGxhdGZvcm1fYnVzX3R5cGUsICZnYXJ0X2lvbW11X29wcyk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMtY29tbW9uLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uYwppbmRleCBkMTExYWM3Li42M2NkMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uYwpAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBBVDkxX0FJQ19JUlFfTUlOX1BSSU9SSVRZCTAKICNkZWZpbmUgQVQ5MV9BSUNfSVJRX01BWF9QUklPUklUWQk3CiAKLSNkZWZpbmUgQVQ5MV9BSUNfU1JDVFlQRQkJR0VOTUFTSyg3LCA2KQorI2RlZmluZSBBVDkxX0FJQ19TUkNUWVBFCQlHRU5NQVNLKDYsIDUpCiAjZGVmaW5lIEFUOTFfQUlDX1NSQ1RZUEVfTE9XCQkoMCA8PCA1KQogI2RlZmluZSBBVDkxX0FJQ19TUkNUWVBFX0ZBTExJTkcJKDEgPDwgNSkKICNkZWZpbmUgQVQ5MV9BSUNfU1JDVFlQRV9ISUdICQkoMiA8PCA1KQpAQCAtNzQsNyArNzQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkqdmFsICY9IEFUOTFfQUlDX1NSQ1RZUEU7CisJKnZhbCAmPSB+QVQ5MV9BSUNfU1JDVFlQRTsKIAkqdmFsIHw9IGFpY190eXBlOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy12My1pdHMuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXYzLWl0cy5jCmluZGV4IDg2ZTQ2ODQuLmQ4OTk2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXYzLWl0cy5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXYzLWl0cy5jCkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogCSAqIG9mIHR3byBlbnRyaWVzLiBObywgdGhlIGFyY2hpdGVjdHVyZSBkb2Vzbid0IGxldCB5b3UKIAkgKiBleHByZXNzIGFuIElUVCB3aXRoIGEgc2luZ2xlIGVudHJ5LgogCSAqLwotCW5yX2l0ZXMgPSBtYXgoMiwgcm91bmR1cF9wb3dfb2ZfdHdvKG52ZWNzKSk7CisJbnJfaXRlcyA9IG1heCgyVUwsIHJvdW5kdXBfcG93X29mX3R3byhudmVjcykpOwogCXN6ID0gbnJfaXRlcyAqIGl0cy0+aXRlX3NpemU7CiAJc3ogPSBtYXgoc3osIElUU19JVFRfQUxJR04pICsgSVRTX0lUVF9BTElHTiAtIDE7CiAJaXR0ID0ga21hbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWhpcDA0LmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWhpcDA0LmMKaW5kZXggMjliOGYyMS4uNmJjMmRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1oaXAwNC5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtaGlwMDQuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJICogSXQgd2lsbCBiZSByZWZpbmVkIGFzIGVhY2ggQ1BVIHByb2JlcyBpdHMgSUQuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IE5SX0hJUDA0X0NQVV9JRjsgaSsrKQotCQloaXAwNF9jcHVfbWFwW2ldID0gMHhmZjsKKwkJaGlwMDRfY3B1X21hcFtpXSA9IDB4ZmZmZjsKIAogCS8qCiAJICogRmluZCBvdXQgaG93IG1hbnkgaW50ZXJydXB0cyBhcmUgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1tdGstc3lzaXJxLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLW10ay1zeXNpcnEuYwppbmRleCA3ZTM0MmRmLi4wYjBkMmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLW10ay1zeXNpcnEuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLW10ay1zeXNpcnEuYwpAQCAtMTM3LDkgKzEzNyw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJY2hpcF9kYXRhLT5pbnRwb2xfYmFzZSA9IG9mX2lvX3JlcXVlc3RfYW5kX21hcChub2RlLCAwLCAiaW50cG9sIik7Ci0JaWYgKCFjaGlwX2RhdGEtPmludHBvbF9iYXNlKSB7CisJaWYgKElTX0VSUihjaGlwX2RhdGEtPmludHBvbF9iYXNlKSkgewogCQlwcl9lcnIoIm10a19zeXNpcnE6IHVuYWJsZSB0byBtYXAgc3lzaXJxIHJlZ2lzdGVyXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKKwkJcmV0ID0gUFRSX0VSUihjaGlwX2RhdGEtPmludHBvbF9iYXNlKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtb21hcC1pbnRjLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLW9tYXAtaW50Yy5jCmluZGV4IDI4NzE4ZDMuLmMwM2YxNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtb21hcC1pbnRjLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1vbWFwLWludGMuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0X2lycV9sZWdhY3kodTMyIGJhc2UpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfaXJxX2xlZ2FjeSh1MzIgYmFzZSwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewogCWludCBqLCBpcnFfYmFzZTsKIApAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCWlycV9iYXNlID0gMDsKIAl9CiAKLQlkb21haW4gPSBpcnFfZG9tYWluX2FkZF9sZWdhY3koTlVMTCwgb21hcF9ucl9pcnFzLCBpcnFfYmFzZSwgMCwKKwlkb21haW4gPSBpcnFfZG9tYWluX2FkZF9sZWdhY3kobm9kZSwgb21hcF9ucl9pcnFzLCBpcnFfYmFzZSwgMCwKIAkJCSZpcnFfZG9tYWluX3NpbXBsZV9vcHMsIE5VTEwpOwogCiAJb21hcF9pcnFfc29mdF9yZXNldCgpOwpAQCAtMzAxLDEwICszMDEsMjYgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKG5vZGUpCisJLyoKKwkgKiBGSVhNRSBsZWdhY3kgT01BUCBETUEgZHJpdmVyIHNpdHRpbmcgdW5kZXIgYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisJICogZGVwZW5kcyBpcyBzdGlsbCBub3QgcmVhZHkgZm9yIGxpbmVhciBJUlEgZG9tYWluczsgYmVjYXVzZSBvZiB0aGF0CisJICogd2UgbmVlZCB0byB0ZW1wb3JhcmlseSAiYmxhY2tsaXN0IiBPTUFQMiBhbmQgT01BUDMgZGV2aWNlcyBmcm9tIHVzaW5nCisJICogbGluZWFyIElSUSBEb21haW4gdW50aWwgdGhhdCBkcml2ZXIgaXMgZmluYWxseSBmaXhlZC4KKwkgKi8KKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInRpLG9tYXAyLWludGMiKSB8fAorCQkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInRpLG9tYXAzLWludGMiKSkgeworCQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCisJCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5vZGUsIDAsICZyZXMpKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJYmFzZSA9IHJlcy5zdGFydDsKKwkJcmV0ID0gb21hcF9pbml0X2lycV9sZWdhY3koYmFzZSwgbm9kZSk7CisJfSBlbHNlIGlmIChub2RlKSB7CiAJCXJldCA9IG9tYXBfaW5pdF9pcnFfb2Yobm9kZSk7Ci0JZWxzZQotCQlyZXQgPSBvbWFwX2luaXRfaXJxX2xlZ2FjeShiYXNlKTsKKwl9IGVsc2UgeworCQlyZXQgPSBvbWFwX2luaXRfaXJxX2xlZ2FjeShiYXNlLCBOVUxMKTsKKwl9CiAKIAlpZiAocmV0ID09IDApCiAJCW9tYXBfaXJxX2VuYWJsZV9wcm90ZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwppbmRleCBhODJlNTQyLi4wYjM4MDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKQEAgLTQ4ODAsNyArNDg4MCw3IEBACiAJYnl0ZSBTU19JbmRbXSA9ICJceDA1XHgwMlx4MDBceDAyXHgwMFx4MDAiOyAvKiBIb2xkX0luZCBzdHJ1Y3QqLwogCWJ5dGUgQ0ZfSW5kW10gPSAiXHgwOVx4MDJceDAwXHgwNlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCI7CiAJYnl0ZSBJbnRlcnJfRXJyX0luZFtdID0gIlx4MGFceDAyXHgwMFx4MDdceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIjsKLQlieXRlIENPTkZfSW5kW10gPSAiXHgwOVx4MTZceDAwXHgwNlx4MDBceDAwXDB4MDBcMHgwMFwweDAwXDB4MDAiOworCWJ5dGUgQ09ORl9JbmRbXSA9ICJceDA5XHgxNlx4MDBceDA2XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIjsKIAlieXRlIGZvcmNlX210X2luZm8gPSBmYWxzZTsKIAlieXRlIGRpcjsKIAlkd29yZCBkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtbmV0eGJpZy5jIGIvZHJpdmVycy9sZWRzL2xlZHMtbmV0eGJpZy5jCmluZGV4IDI2NTE1YzIuLjI1ZTQxOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLW5ldHhiaWcuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1uZXR4YmlnLmMKQEAgLTMzMCwxOCArMzMwLDE4IEBACiAJbGVkX2RhdC0+c2F0YSA9IDA7CiAJbGVkX2RhdC0+Y2Rldi5icmlnaHRuZXNzID0gTEVEX09GRjsKIAlsZWRfZGF0LT5jZGV2LmZsYWdzIHw9IExFRF9DT1JFX1NVU1BFTkRSRVNVTUU7Ci0JLyoKLQkgKiBJZiBhdmFpbGFibGUsIGV4cG9zZSB0aGUgU0FUQSBhY3Rpdml0eSBibGluayBjYXBhYmlsaXR5IHRocm91Z2gKLQkgKiBhICJzYXRhIiBzeXNmcyBhdHRyaWJ1dGUuCi0JICovCi0JaWYgKGxlZF9kYXQtPm1vZGVfdmFsW05FVFhCSUdfTEVEX1NBVEFdICE9IE5FVFhCSUdfTEVEX0lOVkFMSURfTU9ERSkKLQkJbGVkX2RhdC0+Y2Rldi5ncm91cHMgPSBuZXR4YmlnX2xlZF9ncm91cHM7CiAJbGVkX2RhdC0+bW9kZV9hZGRyID0gdGVtcGxhdGUtPm1vZGVfYWRkcjsKIAlsZWRfZGF0LT5tb2RlX3ZhbCA9IHRlbXBsYXRlLT5tb2RlX3ZhbDsKIAlsZWRfZGF0LT5icmlnaHRfYWRkciA9IHRlbXBsYXRlLT5icmlnaHRfYWRkcjsKIAlsZWRfZGF0LT5icmlnaHRfbWF4ID0gKDEgPDwgcGRhdGEtPmdwaW9fZXh0LT5udW1fZGF0YSkgLSAxOwogCWxlZF9kYXQtPnRpbWVyID0gcGRhdGEtPnRpbWVyOwogCWxlZF9kYXQtPm51bV90aW1lciA9IHBkYXRhLT5udW1fdGltZXI7CisJLyoKKwkgKiBJZiBhdmFpbGFibGUsIGV4cG9zZSB0aGUgU0FUQSBhY3Rpdml0eSBibGluayBjYXBhYmlsaXR5IHRocm91Z2gKKwkgKiBhICJzYXRhIiBzeXNmcyBhdHRyaWJ1dGUuCisJICovCisJaWYgKGxlZF9kYXQtPm1vZGVfdmFsW05FVFhCSUdfTEVEX1NBVEFdICE9IE5FVFhCSUdfTEVEX0lOVkFMSURfTU9ERSkKKwkJbGVkX2RhdC0+Y2Rldi5ncm91cHMgPSBuZXR4YmlnX2xlZF9ncm91cHM7CiAKIAlyZXR1cm4gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZsZWRfZGF0LT5jZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWNiL21jYi1pbnRlcm5hbC5oIGIvZHJpdmVycy9tY2IvbWNiLWludGVybmFsLmgKaW5kZXggZjk1NmVmMi4uZmI3NDkzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tY2IvbWNiLWludGVybmFsLmgKKysrIGIvZHJpdmVycy9tY2IvbWNiLWludGVybmFsLmgKQEAgLTcsNiArNyw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVOX0NIQU1FTEVPTgkweDRkNDUKICNkZWZpbmUgQ0hBTUVMRU9OX0ZJTEVOQU1FX0xFTgkJMTIKICNkZWZpbmUgQ0hBTUVMRU9OVjJfTUFHSUMJCTB4YWJjZQorI2RlZmluZSBDSEFNX0hFQURFUl9TSVpFCQkweDIwMAogCiBlbnVtIGNoYW1lbGVvbl9kZXNjcmlwdG9yX3R5cGUgewogCUNIQU1FTEVPTl9EVFlQRV9HRU5FUkFMID0gMHgwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tY2IvbWNiLXBjaS5jIGIvZHJpdmVycy9tY2IvbWNiLXBjaS5jCmluZGV4IGI1OTE4MTkuLjVlMWJkNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWNiL21jYi1wY2kuYworKysgYi9kcml2ZXJzL21jYi9tY2ItcGNpLmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogc3RydWN0IHByaXYgewogCXN0cnVjdCBtY2JfYnVzICpidXM7CisJcGh5c19hZGRyX3QgbWFwYmFzZTsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiB9OwogCkBAIC0zMSw4ICszMiw4IEBACiAKIHN0YXRpYyBpbnQgbWNiX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwcml2ICpwcml2OwotCXBoeXNfYWRkcl90IG1hcGJhc2U7CiAJaW50IHJldDsKIAlpbnQgbnVtX2NlbGxzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NywxOSArNDgsMjEgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JbWFwYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQlpZiAoIW1hcGJhc2UpIHsKKwlwcml2LT5tYXBiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWlmICghcHJpdi0+bWFwYmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBQQ0kgcmVzb3VyY2VcbiIpOwogCQlnb3RvIGVycl9zdGFydDsKIAl9CiAKLQlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgMCwgS0JVSUxEX01PRE5BTUUpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgUENJIEJBUnNcbiIpOworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihwcml2LT5tYXBiYXNlLCBDSEFNX0hFQURFUl9TSVpFLAorCQkJCSBLQlVJTERfTU9ETkFNRSk7CisJaWYgKElTX0VSUihyZXMpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IFBDSSBtZW1vcnlcbiIpOworCQlyZXQgPSBQVFJfRVJSKHJlcyk7CiAJCWdvdG8gZXJyX3N0YXJ0OwogCX0KIAotCXByaXYtPmJhc2UgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJcHJpdi0+YmFzZSA9IGlvcmVtYXAocHJpdi0+bWFwYmFzZSwgQ0hBTV9IRUFERVJfU0laRSk7CiAJaWYgKCFwcml2LT5iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBpb3JlbWFwXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTg0LDcgKzg3LDcgQEAKIAogCXByaXYtPmJ1cy0+Z2V0X2lycSA9IG1jYl9wY2lfZ2V0X2lycTsKIAotCXJldCA9IGNoYW1lbGVvbl9wYXJzZV9jZWxscyhwcml2LT5idXMsIG1hcGJhc2UsIHByaXYtPmJhc2UpOworCXJldCA9IGNoYW1lbGVvbl9wYXJzZV9jZWxscyhwcml2LT5idXMsIHByaXYtPm1hcGJhc2UsIHByaXYtPmJhc2UpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9kcnZkYXRhOwogCW51bV9jZWxscyA9IHJldDsKQEAgLTkzLDggKzk2LDEwIEBACiAKIAltY2JfYnVzX2FkZF9kZXZpY2VzKHByaXYtPmJ1cyk7CiAKKwlyZXR1cm4gMDsKKwogZXJyX2RydmRhdGE6Ci0JcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+YmFzZSk7CisJaW91bm1hcChwcml2LT5iYXNlKTsKIGVycl9pb3JlbWFwOgogCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKIGVycl9zdGFydDoKQEAgLTEwNyw2ICsxMTIsMTAgQEAKIAlzdHJ1Y3QgcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCW1jYl9yZWxlYXNlX2J1cyhwcml2LT5idXMpOworCisJaW91bm1hcChwcml2LT5iYXNlKTsKKwlyZWxlYXNlX3JlZ2lvbihwcml2LT5tYXBiYXNlLCBDSEFNX0hFQURFUl9TSVpFKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtY2JfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5jIGIvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5jCmluZGV4IDlmYzYxNmMuLmMxYzAxMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuYworKysgYi9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmMKQEAgLTk0LDYgKzk0LDkgQEAKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSB7CisJYXRvbWljX3QgcmVmX2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJc3RydWN0IGRtX2Jsb2NrX21hbmFnZXIgKmJtOwogCXN0cnVjdCBkbV9zcGFjZV9tYXAgKm1ldGFkYXRhX3NtOwpAQCAtNjY5LDEwICs2NzIsMTAgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpkbV9jYWNoZV9tZXRhZGF0YV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCi0JCQkJCQkgc2VjdG9yX3QgZGF0YV9ibG9ja19zaXplLAotCQkJCQkJIGJvb2wgbWF5X2Zvcm1hdF9kZXZpY2UsCi0JCQkJCQkgc2l6ZV90IHBvbGljeV9oaW50X3NpemUpCitzdGF0aWMgc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICptZXRhZGF0YV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCQkJCSAgICAgICBzZWN0b3JfdCBkYXRhX2Jsb2NrX3NpemUsCisJCQkJCSAgICAgICBib29sIG1heV9mb3JtYXRfZGV2aWNlLAorCQkJCQkgICAgICAgc2l6ZV90IHBvbGljeV9oaW50X3NpemUpCiB7CiAJaW50IHI7CiAJc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQ7CkBAIC02ODAsOSArNjgzLDEwIEBACiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwogCWlmICghY21kKSB7CiAJCURNRVJSKCJjb3VsZCBub3QgYWxsb2NhdGUgbWV0YWRhdGEgc3RydWN0Iik7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKKwlhdG9taWNfc2V0KCZjbWQtPnJlZl9jb3VudCwgMSk7CiAJaW5pdF9yd3NlbSgmY21kLT5yb290X2xvY2spOwogCWNtZC0+YmRldiA9IGJkZXY7CiAJY21kLT5kYXRhX2Jsb2NrX3NpemUgPSBkYXRhX2Jsb2NrX3NpemU7CkBAIC03MDUsMTAgKzcwOSw5NiBAQAogCXJldHVybiBjbWQ7CiB9CiAKKy8qCisgKiBXZSBrZWVwIGEgbGl0dGxlIGxpc3Qgb2YgcmVmIGNvdW50ZWQgbWV0YWRhdGEgb2JqZWN0cyB0byBwcmV2ZW50IHR3bworICogZGlmZmVyZW50IHRhcmdldCBpbnN0YW5jZXMgY3JlYXRpbmcgc2VwYXJhdGUgYnVmaW8gaW5zdGFuY2VzLiAgVGhpcyBpcworICogYW4gaXNzdWUgaWYgYSB0YWJsZSBpcyByZWxvYWRlZCBiZWZvcmUgdGhlIHN1c3BlbmQuCisgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgodGFibGVfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHRhYmxlKTsKKworc3RhdGljIHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqbG9va3VwKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtZCwgJnRhYmxlLCBsaXN0KQorCQlpZiAoY21kLT5iZGV2ID09IGJkZXYpIHsKKwkJCWF0b21pY19pbmMoJmNtZC0+cmVmX2NvdW50KTsKKwkJCXJldHVybiBjbWQ7CisJCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpsb29rdXBfb3Jfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorCQkJCQkJc2VjdG9yX3QgZGF0YV9ibG9ja19zaXplLAorCQkJCQkJYm9vbCBtYXlfZm9ybWF0X2RldmljZSwKKwkJCQkJCXNpemVfdCBwb2xpY3lfaGludF9zaXplKQoreworCXN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCAqY21kMjsKKworCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOworCWNtZCA9IGxvb2t1cChiZGV2KTsKKwltdXRleF91bmxvY2soJnRhYmxlX2xvY2spOworCisJaWYgKGNtZCkKKwkJcmV0dXJuIGNtZDsKKworCWNtZCA9IG1ldGFkYXRhX29wZW4oYmRldiwgZGF0YV9ibG9ja19zaXplLCBtYXlfZm9ybWF0X2RldmljZSwgcG9saWN5X2hpbnRfc2l6ZSk7CisJaWYgKCFJU19FUlIoY21kKSkgeworCQltdXRleF9sb2NrKCZ0YWJsZV9sb2NrKTsKKwkJY21kMiA9IGxvb2t1cChiZGV2KTsKKwkJaWYgKGNtZDIpIHsKKwkJCW11dGV4X3VubG9jaygmdGFibGVfbG9jayk7CisJCQlfX2Rlc3Ryb3lfcGVyc2lzdGVudF9kYXRhX29iamVjdHMoY21kKTsKKwkJCWtmcmVlKGNtZCk7CisJCQlyZXR1cm4gY21kMjsKKwkJfQorCQlsaXN0X2FkZCgmY21kLT5saXN0LCAmdGFibGUpOworCQltdXRleF91bmxvY2soJnRhYmxlX2xvY2spOworCX0KKworCXJldHVybiBjbWQ7Cit9CisKK3N0YXRpYyBib29sIHNhbWVfcGFyYW1zKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBzZWN0b3JfdCBkYXRhX2Jsb2NrX3NpemUpCit7CisJaWYgKGNtZC0+ZGF0YV9ibG9ja19zaXplICE9IGRhdGFfYmxvY2tfc2l6ZSkgeworCQlETUVSUigiZGF0YV9ibG9ja19zaXplICglbGx1KSBkaWZmZXJlbnQgZnJvbSB0aGF0IGluIG1ldGFkYXRhICglbGx1KVxuIiwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGF0YV9ibG9ja19zaXplLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjbWQtPmRhdGFfYmxvY2tfc2l6ZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpkbV9jYWNoZV9tZXRhZGF0YV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCQkJCQkgc2VjdG9yX3QgZGF0YV9ibG9ja19zaXplLAorCQkJCQkJIGJvb2wgbWF5X2Zvcm1hdF9kZXZpY2UsCisJCQkJCQkgc2l6ZV90IHBvbGljeV9oaW50X3NpemUpCit7CisJc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQgPSBsb29rdXBfb3Jfb3BlbihiZGV2LCBkYXRhX2Jsb2NrX3NpemUsCisJCQkJCQkgICAgICAgbWF5X2Zvcm1hdF9kZXZpY2UsIHBvbGljeV9oaW50X3NpemUpOworCisJaWYgKCFJU19FUlIoY21kKSAmJiAhc2FtZV9wYXJhbXMoY21kLCBkYXRhX2Jsb2NrX3NpemUpKSB7CisJCWRtX2NhY2hlX21ldGFkYXRhX2Nsb3NlKGNtZCk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXJldHVybiBjbWQ7Cit9CisKIHZvaWQgZG1fY2FjaGVfbWV0YWRhdGFfY2xvc2Uoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQpCiB7Ci0JX19kZXN0cm95X3BlcnNpc3RlbnRfZGF0YV9vYmplY3RzKGNtZCk7Ci0Ja2ZyZWUoY21kKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY21kLT5yZWZfY291bnQpKSB7CisJCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOworCQlsaXN0X2RlbCgmY21kLT5saXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZ0YWJsZV9sb2NrKTsKKworCQlfX2Rlc3Ryb3lfcGVyc2lzdGVudF9kYXRhX29iamVjdHMoY21kKTsKKwkJa2ZyZWUoY21kKTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNhY2hlLXRhcmdldC5jIGIvZHJpdmVycy9tZC9kbS1jYWNoZS10YXJnZXQuYwppbmRleCAxZTk2ZDc4Li5lMTY1MDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNhY2hlLXRhcmdldC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtdGFyZ2V0LmMKQEAgLTIyMSw3ICsyMjEsMTMgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5lZWRfY29tbWl0X21pZ3JhdGlvbnM7CiAJc2VjdG9yX3QgbWlncmF0aW9uX3RocmVzaG9sZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBtaWdyYXRpb25fd2FpdDsKLQlhdG9taWNfdCBucl9taWdyYXRpb25zOworCWF0b21pY190IG5yX2FsbG9jYXRlZF9taWdyYXRpb25zOworCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGluIGZsaWdodCBtaWdyYXRpb25zIHRoYXQgYXJlIHBlcmZvcm1pbmcKKwkgKiBiYWNrZ3JvdW5kIGlvLiBlZywgcHJvbW90aW9uLCB3cml0ZWJhY2suCisJICovCisJYXRvbWljX3QgbnJfaW9fbWlncmF0aW9uczsKIAogCXdhaXRfcXVldWVfaGVhZF90IHF1aWVzY2luZ193YWl0OwogCWF0b21pY190IHF1aWVzY2luZzsKQEAgLTI1OCw3ICsyNjQsNiBAQAogCXN0cnVjdCBkbV9kZWZlcnJlZF9zZXQgKmFsbF9pb19kczsKIAogCW1lbXBvb2xfdCAqbWlncmF0aW9uX3Bvb2w7Ci0Jc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbmV4dF9taWdyYXRpb247CiAKIAlzdHJ1Y3QgZG1fY2FjaGVfcG9saWN5ICpwb2xpY3k7CiAJdW5zaWduZWQgcG9saWN5X25yX2FyZ3M7CkBAIC0zNTAsMTAgKzM1NSwzMSBAQAogCWRtX2Jpb19wcmlzb25fZnJlZV9jZWxsKGNhY2hlLT5wcmlzb24sIGNlbGwpOwogfQogCitzdGF0aWMgc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqYWxsb2NfbWlncmF0aW9uKHN0cnVjdCBjYWNoZSAqY2FjaGUpCit7CisJc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWc7CisKKwltZyA9IG1lbXBvb2xfYWxsb2MoY2FjaGUtPm1pZ3JhdGlvbl9wb29sLCBHRlBfTk9XQUlUKTsKKwlpZiAobWcpIHsKKwkJbWctPmNhY2hlID0gY2FjaGU7CisJCWF0b21pY19pbmMoJm1nLT5jYWNoZS0+bnJfYWxsb2NhdGVkX21pZ3JhdGlvbnMpOworCX0KKworCXJldHVybiBtZzsKK30KKworc3RhdGljIHZvaWQgZnJlZV9taWdyYXRpb24oc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1nLT5jYWNoZS0+bnJfYWxsb2NhdGVkX21pZ3JhdGlvbnMpKQorCQl3YWtlX3VwKCZtZy0+Y2FjaGUtPm1pZ3JhdGlvbl93YWl0KTsKKworCW1lbXBvb2xfZnJlZShtZywgbWctPmNhY2hlLT5taWdyYXRpb25fcG9vbCk7Cit9CisKIHN0YXRpYyBpbnQgcHJlYWxsb2NfZGF0YV9zdHJ1Y3RzKHN0cnVjdCBjYWNoZSAqY2FjaGUsIHN0cnVjdCBwcmVhbGxvYyAqcCkKIHsKIAlpZiAoIXAtPm1nKSB7Ci0JCXAtPm1nID0gbWVtcG9vbF9hbGxvYyhjYWNoZS0+bWlncmF0aW9uX3Bvb2wsIEdGUF9OT1dBSVQpOworCQlwLT5tZyA9IGFsbG9jX21pZ3JhdGlvbihjYWNoZSk7CiAJCWlmICghcC0+bWcpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0zODIsNyArNDA4LDcgQEAKIAkJZnJlZV9wcmlzb25fY2VsbChjYWNoZSwgcC0+Y2VsbDEpOwogCiAJaWYgKHAtPm1nKQotCQltZW1wb29sX2ZyZWUocC0+bWcsIGNhY2hlLT5taWdyYXRpb25fcG9vbCk7CisJCWZyZWVfbWlncmF0aW9uKHAtPm1nKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKnByZWFsbG9jX2dldF9taWdyYXRpb24oc3RydWN0IHByZWFsbG9jICpwKQpAQCAtODU0LDI0ICs4ODAsMTQgQEAKICAqIE1pZ3JhdGlvbiBjb3ZlcnMgbW92aW5nIGRhdGEgZnJvbSB0aGUgb3JpZ2luIGRldmljZSB0byB0aGUgY2FjaGUsIG9yCiAgKiB2aWNlIHZlcnNhLgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBmcmVlX21pZ3JhdGlvbihzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKK3N0YXRpYyB2b2lkIGluY19pb19taWdyYXRpb25zKHN0cnVjdCBjYWNoZSAqY2FjaGUpCiB7Ci0JbWVtcG9vbF9mcmVlKG1nLCBtZy0+Y2FjaGUtPm1pZ3JhdGlvbl9wb29sKTsKKwlhdG9taWNfaW5jKCZjYWNoZS0+bnJfaW9fbWlncmF0aW9ucyk7CiB9CiAKLXN0YXRpYyB2b2lkIGluY19ucl9taWdyYXRpb25zKHN0cnVjdCBjYWNoZSAqY2FjaGUpCitzdGF0aWMgdm9pZCBkZWNfaW9fbWlncmF0aW9ucyhzdHJ1Y3QgY2FjaGUgKmNhY2hlKQogewotCWF0b21pY19pbmMoJmNhY2hlLT5ucl9taWdyYXRpb25zKTsKLX0KLQotc3RhdGljIHZvaWQgZGVjX25yX21pZ3JhdGlvbnMoc3RydWN0IGNhY2hlICpjYWNoZSkKLXsKLQlhdG9taWNfZGVjKCZjYWNoZS0+bnJfbWlncmF0aW9ucyk7Ci0KLQkvKgotCSAqIFdha2UgdGhlIHdvcmtlciBpbiBjYXNlIHdlJ3JlIHN1c3BlbmRpbmcgdGhlIHRhcmdldC4KLQkgKi8KLQl3YWtlX3VwKCZjYWNoZS0+bWlncmF0aW9uX3dhaXQpOworCWF0b21pY19kZWMoJmNhY2hlLT5ucl9pb19taWdyYXRpb25zKTsKIH0KIAogc3RhdGljIHZvaWQgX19jZWxsX2RlZmVyKHN0cnVjdCBjYWNoZSAqY2FjaGUsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCkBAIC04OTQsMTEgKzkxMCwxMCBAQAogCXdha2Vfd29ya2VyKGNhY2hlKTsKIH0KIAotc3RhdGljIHZvaWQgY2xlYW51cF9taWdyYXRpb24oc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcpCitzdGF0aWMgdm9pZCBmcmVlX2lvX21pZ3JhdGlvbihzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKIHsKLQlzdHJ1Y3QgY2FjaGUgKmNhY2hlID0gbWctPmNhY2hlOworCWRlY19pb19taWdyYXRpb25zKG1nLT5jYWNoZSk7CiAJZnJlZV9taWdyYXRpb24obWcpOwotCWRlY19ucl9taWdyYXRpb25zKGNhY2hlKTsKIH0KIAogc3RhdGljIHZvaWQgbWlncmF0aW9uX2ZhaWx1cmUoc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcpCkBAIC05MjMsNyArOTM4LDcgQEAKIAkJY2VsbF9kZWZlcihjYWNoZSwgbWctPm5ld19vY2VsbCwgdHJ1ZSk7CiAJfQogCi0JY2xlYW51cF9taWdyYXRpb24obWcpOworCWZyZWVfaW9fbWlncmF0aW9uKG1nKTsKIH0KIAogc3RhdGljIHZvaWQgbWlncmF0aW9uX3N1Y2Nlc3NfcHJlX2NvbW1pdChzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKQEAgLTkzNCw3ICs5NDksNyBAQAogCWlmIChtZy0+d3JpdGViYWNrKSB7CiAJCWNsZWFyX2RpcnR5KGNhY2hlLCBtZy0+b2xkX29ibG9jaywgbWctPmNibG9jayk7CiAJCWNlbGxfZGVmZXIoY2FjaGUsIG1nLT5vbGRfb2NlbGwsIGZhbHNlKTsKLQkJY2xlYW51cF9taWdyYXRpb24obWcpOworCQlmcmVlX2lvX21pZ3JhdGlvbihtZyk7CiAJCXJldHVybjsKIAogCX0gZWxzZSBpZiAobWctPmRlbW90ZSkgewpAQCAtOTQ0LDE0ICs5NTksMTQgQEAKIAkJCQkJICAgICBtZy0+b2xkX29ibG9jayk7CiAJCQlpZiAobWctPnByb21vdGUpCiAJCQkJY2VsbF9kZWZlcihjYWNoZSwgbWctPm5ld19vY2VsbCwgdHJ1ZSk7Ci0JCQljbGVhbnVwX21pZ3JhdGlvbihtZyk7CisJCQlmcmVlX2lvX21pZ3JhdGlvbihtZyk7CiAJCQlyZXR1cm47CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoZG1fY2FjaGVfaW5zZXJ0X21hcHBpbmcoY2FjaGUtPmNtZCwgbWctPmNibG9jaywgbWctPm5ld19vYmxvY2spKSB7CiAJCQlETVdBUk5fTElNSVQoInByb21vdGlvbiBmYWlsZWQ7IGNvdWxkbid0IHVwZGF0ZSBvbiBkaXNrIG1ldGFkYXRhIik7CiAJCQlwb2xpY3lfcmVtb3ZlX21hcHBpbmcoY2FjaGUtPnBvbGljeSwgbWctPm5ld19vYmxvY2spOwotCQkJY2xlYW51cF9taWdyYXRpb24obWcpOworCQkJZnJlZV9pb19taWdyYXRpb24obWcpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtOTg0LDcgKzk5OSw3IEBACiAJCX0gZWxzZSB7CiAJCQlpZiAobWctPmludmFsaWRhdGUpCiAJCQkJcG9saWN5X3JlbW92ZV9tYXBwaW5nKGNhY2hlLT5wb2xpY3ksIG1nLT5vbGRfb2Jsb2NrKTsKLQkJCWNsZWFudXBfbWlncmF0aW9uKG1nKTsKKwkJCWZyZWVfaW9fbWlncmF0aW9uKG1nKTsKIAkJfQogCiAJfSBlbHNlIHsKQEAgLTk5OSw3ICsxMDE0LDcgQEAKIAkJCWJpb19lbmRpbyhtZy0+bmV3X29jZWxsLT5ob2xkZXIsIDApOwogCQkJY2VsbF9kZWZlcihjYWNoZSwgbWctPm5ld19vY2VsbCwgZmFsc2UpOwogCQl9Ci0JCWNsZWFudXBfbWlncmF0aW9uKG1nKTsKKwkJZnJlZV9pb19taWdyYXRpb24obWcpOwogCX0KIH0KIApAQCAtMTI1MSw3ICsxMjY2LDcgQEAKIAltZy0+bmV3X29jZWxsID0gY2VsbDsKIAltZy0+c3RhcnRfamlmZmllcyA9IGppZmZpZXM7CiAKLQlpbmNfbnJfbWlncmF0aW9ucyhjYWNoZSk7CisJaW5jX2lvX21pZ3JhdGlvbnMoY2FjaGUpOwogCXF1aWVzY2VfbWlncmF0aW9uKG1nKTsKIH0KIApAQCAtMTI3NSw3ICsxMjkwLDcgQEAKIAltZy0+bmV3X29jZWxsID0gTlVMTDsKIAltZy0+c3RhcnRfamlmZmllcyA9IGppZmZpZXM7CiAKLQlpbmNfbnJfbWlncmF0aW9ucyhjYWNoZSk7CisJaW5jX2lvX21pZ3JhdGlvbnMoY2FjaGUpOwogCXF1aWVzY2VfbWlncmF0aW9uKG1nKTsKIH0KIApAQCAtMTMwMiw3ICsxMzE3LDcgQEAKIAltZy0+bmV3X29jZWxsID0gbmV3X29jZWxsOwogCW1nLT5zdGFydF9qaWZmaWVzID0gamlmZmllczsKIAotCWluY19ucl9taWdyYXRpb25zKGNhY2hlKTsKKwlpbmNfaW9fbWlncmF0aW9ucyhjYWNoZSk7CiAJcXVpZXNjZV9taWdyYXRpb24obWcpOwogfQogCkBAIC0xMzMwLDcgKzEzNDUsNyBAQAogCW1nLT5uZXdfb2NlbGwgPSBOVUxMOwogCW1nLT5zdGFydF9qaWZmaWVzID0gamlmZmllczsKIAotCWluY19ucl9taWdyYXRpb25zKGNhY2hlKTsKKwlpbmNfaW9fbWlncmF0aW9ucyhjYWNoZSk7CiAJcXVpZXNjZV9taWdyYXRpb24obWcpOwogfQogCkBAIC0xNDEyLDcgKzE0MjcsNyBAQAogCiBzdGF0aWMgYm9vbCBzcGFyZV9taWdyYXRpb25fYmFuZHdpZHRoKHN0cnVjdCBjYWNoZSAqY2FjaGUpCiB7Ci0Jc2VjdG9yX3QgY3VycmVudF92b2x1bWUgPSAoYXRvbWljX3JlYWQoJmNhY2hlLT5ucl9taWdyYXRpb25zKSArIDEpICoKKwlzZWN0b3JfdCBjdXJyZW50X3ZvbHVtZSA9IChhdG9taWNfcmVhZCgmY2FjaGUtPm5yX2lvX21pZ3JhdGlvbnMpICsgMSkgKgogCQljYWNoZS0+c2VjdG9yc19wZXJfYmxvY2s7CiAJcmV0dXJuIGN1cnJlbnRfdm9sdW1lIDwgY2FjaGUtPm1pZ3JhdGlvbl90aHJlc2hvbGQ7CiB9CkBAIC0xNzY0LDcgKzE3NzksNyBAQAogCiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9taWdyYXRpb25zKHN0cnVjdCBjYWNoZSAqY2FjaGUpCiB7Ci0Jd2FpdF9ldmVudChjYWNoZS0+bWlncmF0aW9uX3dhaXQsICFhdG9taWNfcmVhZCgmY2FjaGUtPm5yX21pZ3JhdGlvbnMpKTsKKwl3YWl0X2V2ZW50KGNhY2hlLT5taWdyYXRpb25fd2FpdCwgIWF0b21pY19yZWFkKCZjYWNoZS0+bnJfYWxsb2NhdGVkX21pZ3JhdGlvbnMpKTsKIH0KIAogc3RhdGljIHZvaWQgc3RvcF93b3JrZXIoc3RydWN0IGNhY2hlICpjYWNoZSkKQEAgLTE4NzYsOSArMTg5MSw2IEBACiB7CiAJdW5zaWduZWQgaTsKIAotCWlmIChjYWNoZS0+bmV4dF9taWdyYXRpb24pCi0JCW1lbXBvb2xfZnJlZShjYWNoZS0+bmV4dF9taWdyYXRpb24sIGNhY2hlLT5taWdyYXRpb25fcG9vbCk7Ci0KIAlpZiAoY2FjaGUtPm1pZ3JhdGlvbl9wb29sKQogCQltZW1wb29sX2Rlc3Ryb3koY2FjaGUtPm1pZ3JhdGlvbl9wb29sKTsKIApAQCAtMjQyNCw3ICsyNDM2LDggQEAKIAlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPnF1aWVzY2VkX21pZ3JhdGlvbnMpOwogCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+Y29tcGxldGVkX21pZ3JhdGlvbnMpOwogCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+bmVlZF9jb21taXRfbWlncmF0aW9ucyk7Ci0JYXRvbWljX3NldCgmY2FjaGUtPm5yX21pZ3JhdGlvbnMsIDApOworCWF0b21pY19zZXQoJmNhY2hlLT5ucl9hbGxvY2F0ZWRfbWlncmF0aW9ucywgMCk7CisJYXRvbWljX3NldCgmY2FjaGUtPm5yX2lvX21pZ3JhdGlvbnMsIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhY2hlLT5taWdyYXRpb25fd2FpdCk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYWNoZS0+cXVpZXNjaW5nX3dhaXQpOwpAQCAtMjQ4Nyw4ICsyNTAwLDYgQEAKIAkJZ290byBiYWQ7CiAJfQogCi0JY2FjaGUtPm5leHRfbWlncmF0aW9uID0gTlVMTDsKLQogCWNhY2hlLT5uZWVkX3RpY2tfYmlvID0gdHJ1ZTsKIAljYWNoZS0+c2l6ZWQgPSBmYWxzZTsKIAljYWNoZS0+aW52YWxpZGF0ZSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10aGluLmMgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwppbmRleCA4NzM1NTQzLi4wNzcwNWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRoaW4uYworKysgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwpAQCAtMTEyNyw2ICsxMTI3LDI0IEBACiAJCXNjaGVkdWxlX3plcm8odGMsIHZpcnRfYmxvY2ssIGRhdGFfZGVzdCwgY2VsbCwgYmlvKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X3Bvb2xfbW9kZShzdHJ1Y3QgcG9vbCAqcG9vbCwgZW51bSBwb29sX21vZGUgbmV3X21vZGUpOworCitzdGF0aWMgdm9pZCBjaGVja19mb3Jfc3BhY2Uoc3RydWN0IHBvb2wgKnBvb2wpCit7CisJaW50IHI7CisJZG1fYmxvY2tfdCBucl9mcmVlOworCisJaWYgKGdldF9wb29sX21vZGUocG9vbCkgIT0gUE1fT1VUX09GX0RBVEFfU1BBQ0UpCisJCXJldHVybjsKKworCXIgPSBkbV9wb29sX2dldF9mcmVlX2Jsb2NrX2NvdW50KHBvb2wtPnBtZCwgJm5yX2ZyZWUpOworCWlmIChyKQorCQlyZXR1cm47CisKKwlpZiAobnJfZnJlZSkKKwkJc2V0X3Bvb2xfbW9kZShwb29sLCBQTV9XUklURSk7Cit9CisKIC8qCiAgKiBBIG5vbi16ZXJvIHJldHVybiBpbmRpY2F0ZXMgcmVhZF9vbmx5IG9yIGZhaWxfaW8gbW9kZS4KICAqIE1hbnkgY2FsbGVycyBkb24ndCBjYXJlIGFib3V0IHRoZSByZXR1cm4gdmFsdWUuCkBAIC0xMTQxLDYgKzExNTksOCBAQAogCXIgPSBkbV9wb29sX2NvbW1pdF9tZXRhZGF0YShwb29sLT5wbWQpOwogCWlmIChyKQogCQltZXRhZGF0YV9vcGVyYXRpb25fZmFpbGVkKHBvb2wsICJkbV9wb29sX2NvbW1pdF9tZXRhZGF0YSIsIHIpOworCWVsc2UKKwkJY2hlY2tfZm9yX3NwYWNlKHBvb2wpOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0xMTU5LDggKzExNzksNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2V0X3Bvb2xfbW9kZShzdHJ1Y3QgcG9vbCAqcG9vbCwgZW51bSBwb29sX21vZGUgbmV3X21vZGUpOwotCiBzdGF0aWMgaW50IGFsbG9jX2RhdGFfYmxvY2soc3RydWN0IHRoaW5fYyAqdGMsIGRtX2Jsb2NrX3QgKnJlc3VsdCkKIHsKIAlpbnQgcjsKQEAgLTIxNTUsNyArMjE3Myw3IEBACiAJCXBvb2wtPnByb2Nlc3NfY2VsbCA9IHByb2Nlc3NfY2VsbF9yZWFkX29ubHk7CiAJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19kaXNjYXJkX2NlbGw7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZzsKLQkJcG9vbC0+cHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkID0gcHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkX3Bhc3Nkb3duOworCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQgPSBwcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQ7CiAKIAkJaWYgKCFwb29sLT5wZi5lcnJvcl9pZl9ub19zcGFjZSAmJiBub19zcGFjZV90aW1lb3V0KQogCQkJcXVldWVfZGVsYXllZF93b3JrKHBvb2wtPndxLCAmcG9vbC0+bm9fc3BhY2VfdGltZW91dCwgbm9fc3BhY2VfdGltZW91dCk7CkBAIC0zMzY3LDYgKzMzODUsMTIgQEAKIAlzdHJ1Y3QgcG9vbF9jICpwdCA9IHRpLT5wcml2YXRlOwogCXN0cnVjdCBwb29sICpwb29sID0gcHQtPnBvb2w7CiAKKwlpZiAoZ2V0X3Bvb2xfbW9kZShwb29sKSA+PSBQTV9SRUFEX09OTFkpIHsKKwkJRE1FUlIoIiVzOiB1bmFibGUgdG8gc2VydmljZSBwb29sIHRhcmdldCBtZXNzYWdlcyBpbiBSRUFEX09OTFkgb3IgRkFJTCBtb2RlIiwKKwkJICAgICAgZG1fZGV2aWNlX25hbWUocG9vbC0+cG9vbF9tZCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSwgImNyZWF0ZV90aGluIikpCiAJCXIgPSBwcm9jZXNzX2NyZWF0ZV90aGluX21lc2coYXJnYywgYXJndiwgcG9vbCk7CiAKQEAgLTM4MTQsNiArMzgzOCw4IEBACiAJCXIgPSAtRUlOVkFMOwogCQlnb3RvIGJhZDsKIAl9CisJYXRvbWljX3NldCgmdGMtPnJlZmNvdW50LCAxKTsKKwlpbml0X2NvbXBsZXRpb24oJnRjLT5jYW5fZGVzdHJveSk7CiAJbGlzdF9hZGRfdGFpbF9yY3UoJnRjLT5saXN0LCAmdGMtPnBvb2wtPmFjdGl2ZV90aGlucyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGMtPnBvb2wtPmxvY2ssIGZsYWdzKTsKIAkvKgpAQCAtMzgyNiw5ICszODUyLDYgQEAKIAogCWRtX3B1dChwb29sX21kKTsKIAotCWF0b21pY19zZXQoJnRjLT5yZWZjb3VudCwgMSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZ0Yy0+Y2FuX2Rlc3Ryb3kpOwotCiAJcmV0dXJuIDA7CiAKIGJhZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCA0YzA2NTg1Li4yY2FmNWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC0yMDYsNiArMjA2LDkgQEAKIAkvKiB6ZXJvLWxlbmd0aCBmbHVzaCB0aGF0IHdpbGwgYmUgY2xvbmVkIGFuZCBzdWJtaXR0ZWQgdG8gdGFyZ2V0cyAqLwogCXN0cnVjdCBiaW8gZmx1c2hfYmlvOwogCisJLyogdGhlIG51bWJlciBvZiBpbnRlcm5hbCBzdXNwZW5kcyAqLworCXVuc2lnbmVkIGludGVybmFsX3N1c3BlbmRfY291bnQ7CisKIAlzdHJ1Y3QgZG1fc3RhdHMgc3RhdHM7CiB9OwogCkBAIC04OTksNyArOTAyLDcgQEAKIAogc3RhdGljIHZvaWQgY2xvbmVfZW5kaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IpCiB7Ci0JaW50IHIgPSAwOworCWludCByID0gZXJyb3I7CiAJc3RydWN0IGRtX3RhcmdldF9pbyAqdGlvID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGRtX3RhcmdldF9pbywgY2xvbmUpOwogCXN0cnVjdCBkbV9pbyAqaW8gPSB0aW8tPmlvOwogCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IHRpby0+aW8tPm1kOwpAQCAtMjkyOCw3ICsyOTMxLDcgQEAKIHsKIAlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IE5VTEw7CiAKLQlpZiAoZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQobWQpKQorCWlmIChtZC0+aW50ZXJuYWxfc3VzcGVuZF9jb3VudCsrKQogCQlyZXR1cm47IC8qIG5lc3RlZCBpbnRlcm5hbCBzdXNwZW5kICovCiAKIAlpZiAoZG1fc3VzcGVuZGVkX21kKG1kKSkgewpAQCAtMjk1Myw3ICsyOTU2LDkgQEAKIAogc3RhdGljIHZvaWQgX19kbV9pbnRlcm5hbF9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCWlmICghZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQobWQpKQorCUJVR19PTighbWQtPmludGVybmFsX3N1c3BlbmRfY291bnQpOworCisJaWYgKC0tbWQtPmludGVybmFsX3N1c3BlbmRfY291bnQpCiAJCXJldHVybjsgLyogcmVzdW1lIGZyb20gbmVzdGVkIGludGVybmFsIHN1c3BlbmQgKi8KIAogCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwppbmRleCBkYjk5Y2EyLi4wNjkzMWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtNjE0LDcgKzYxNCw3IEBACiAJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAogCX0sCiAJW0NYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjQ0MDBdID0gewotCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjQ0MDAiLAorCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjQ0MDAvSFZSNTUwMCIsCiAJCS5wb3J0YQkJPSBDWDIzODg1X0FOQUxPR19WSURFTywKIAkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJCS5wb3J0YwkJPSBDWDIzODg1X01QRUdfRFZCLApAQCAtNjIyLDYgKzYyMiwxMCBAQAogCQkudHVuZXJfYWRkcgk9IDB4NjAsIC8qIDB4YzAgPj4gMSAqLwogCQkudHVuZXJfYnVzCT0gMSwKIAl9LAorCVtDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9TVEFSQlVSU1RdID0geworCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWIFN0YXJidXJzdCIsCisJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCiAJW0NYMjM4ODVfQk9BUkRfQVZFUk1FRElBX0hDODFSXSA9IHsKIAkJLm5hbWUJCT0gIkFWZXJUViBIeWJyaWQgRXhwcmVzcyBTbGltIEhDODFSIiwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9YQzIwMjgsCkBAIC05MzYsMTkgKzk0MCwxOSBAQAogCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4YzEwOCwKLQkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjQ0MDAsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI0NDAwLCAvKiBIYXVwcGF1Z2UgV2luVFYgSFZSLTQ0MDAgKE1vZGVsIDEyMXh4eCwgSHlicmlkIERWQi1UL1MyLCBJUikgKi8KIAl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweGMxMzgsCi0JCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI0NDAwLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSNDQwMCwgLyogSGF1cHBhdWdlIFdpblRWIEhWUi01NTAwIChNb2RlbCAxMjF4eHgsIEh5YnJpZCBEVkItVC9DL1MyLCBJUikgKi8KIAl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweGMxMmEsCi0JCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI0NDAwLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfU1RBUkJVUlNULCAvKiBIYXVwcGF1Z2UgV2luVFYgU3RhcmJ1cnN0IChNb2RlbCAxMjF4MDAsIERWQi1TMiwgSVIpICovCiAJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHhjMWY4LAotCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSNDQwMCwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjQ0MDAsIC8qIEhhdXBwYXVnZSBXaW5UViBIVlItNTUwMCAoTW9kZWwgMTIxeHh4LCBIeWJyaWQgRFZCLVQvQy9TMiwgSVIpICovCiAJfSwgewogCQkuc3VidmVuZG9yID0gMHgxNDYxLAogCQkuc3ViZGV2aWNlID0gMHhkOTM5LApAQCAtMTU0NSw4ICsxNTQ5LDkgQEAKIAkJY3hfd3JpdGUoR1BJT19JU00sIDB4MDAwMDAwMDApOy8qIElOVEVSUlVQVFMgYWN0aXZlIGxvdyovCiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSNDQwMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX1NUQVJCVVJTVDoKIAkJLyogR1BJTy04IHRkYTEwMDcxIGRlbW9kIHJlc2V0ICovCi0JCS8qIEdQSU8tOSBzaTIxNjUgZGVtb2QgcmVzZXQgKi8KKwkJLyogR1BJTy05IHNpMjE2NSBkZW1vZCByZXNldCAob25seSBIVlI0NDAwL0hWUjU1MDApKi8KIAogCQkvKiBQdXQgdGhlIHBhcnRzIGludG8gcmVzZXQgYW5kIGJhY2sgKi8KIAkJY3gyMzg4NV9ncGlvX2VuYWJsZShkZXYsIEdQSU9fOCB8IEdQSU9fOSwgMSk7CkBAIC0xODcyLDYgKzE4NzcsNyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyOTA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI0NDAwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfU1RBUkJVUlNUOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSU1QQUNUVkNCRToKIAkJaWYgKGRldi0+aTJjX2J1c1swXS5pMmNfcmMgPT0gMCkKIAkJCWhhdXBwYXVnZV9lZXByb20oZGV2LCBlZXByb20rMHhjMCk7CkBAIC0xOTgwLDYgKzE5ODYsMTEgQEAKIAkJdHMyLT50c19jbGtfZW5fdmFsID0gMHgxOyAvKiBFbmFibGUgVFNfQ0xLICovCiAJCXRzMi0+c3JjX3NlbF92YWwgICA9IENYMjM4ODVfU1JDX1NFTF9QQVJBTExFTF9NUEVHX1ZJREVPOwogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX1NUQVJCVVJTVDoKKwkJdHMxLT5nZW5fY3RybF92YWwgID0gMHhjOyAvKiBTZXJpYWwgYnVzICsgcHVuY3R1cmVkIGNsb2NrICovCisJCXRzMS0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLworCQl0czEtPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKKwkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9UOTU4MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfRFZCU0tZX1Q5ODI6CiAJCXRzMS0+Z2VuX2N0cmxfdmFsICA9IDB4NTsgLyogUGFyYWxsZWwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY29yZS5jCmluZGV4IDFkOWQwZjguLjFhZDQ5OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWNvcmUuYwpAQCAtMjA0OSwxMSArMjA0OSwxMSBAQAogCiAJY3gyMzg4NV9zaHV0ZG93bihkZXYpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwotCiAJLyogdW5yZWdpc3RlciBzdHVmZiAqLwogCWZyZWVfaXJxKHBjaV9kZXYtPmlycSwgZGV2KTsKIAorCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKKwogCWN4MjM4ODVfZGV2X3VucmVnaXN0ZXIoZGV2KTsKIAl2YjJfZG1hX3NnX2NsZWFudXBfY3R4KGRldi0+YWxsb2NfY3R4KTsKIAl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZkZXYtPmN0cmxfaGFuZGxlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggYzQ3ZDE4Mi4uYTljNDUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwpAQCAtMTcxMCw2ICsxNzEwLDE3IEBACiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX1NUQVJCVVJTVDoKKwkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA3MV9hdHRhY2gsCisJCQkJCQkmaGF1cHBhdWdlX3RkYTEwMDcxX2NvbmZpZywKKwkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlkdmJfYXR0YWNoKGE4MjkzX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLAorCQkJCSAgICZoYXVwcGF1Z2VfYTgyOTNfY29uZmlnKTsKKwkJfQorCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfRFZCU0tZX1Q5NTgwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVkJTS1lfUzk1MDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUuaCBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IGY1NWNkMTIuLjM2ZjJmOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS5oCkBAIC05OSw2ICs5OSw3IEBACiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfRFZCU0tZX1M5NTAgICAgICAgICAgICAgIDQ5CiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfRFZCU0tZX1M5NTIgICAgICAgICAgICAgIDUwCiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfRFZCU0tZX1Q5ODIgICAgICAgICAgICAgIDUxCisjZGVmaW5lIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX1NUQVJCVVJTVCAgICAgIDUyCiAKICNkZWZpbmUgR1BJT18wIDB4MDAwMDAwMDEKICNkZWZpbmUgR1BJT18xIDB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vb21hcDNpc3AvaXNwdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vb21hcDNpc3AvaXNwdmlkZW8uYwppbmRleCBiNDYzZmUxLi4zZmU5MDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL29tYXAzaXNwL2lzcHZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9vbWFwM2lzcC9pc3B2aWRlby5jCkBAIC02MDIsMTAgKzYwMiwxMyBAQAogCXN0cmxjcHkoY2FwLT5jYXJkLCB2aWRlby0+dmlkZW8ubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgIm1lZGlhIiwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAorCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1ZJREVPX09VVFBVVAorCQl8IFY0TDJfQ0FQX1NUUkVBTUlORyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOworCiAJaWYgKHZpZGVvLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCQljYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKIAllbHNlCi0JCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fT1VUUFVUIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCQljYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fT1VUUFVUIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvYXRtZWwtaXNpLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvYXRtZWwtaXNpLmMKaW5kZXggOGVmZTQwMy4uNmQ4ODUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL2F0bWVsLWlzaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9hdG1lbC1pc2kuYwpAQCAtNzYwLDggKzc2MCw5IEBACiB7CiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiYXRtZWwtaXNpIik7CiAJc3RyY3B5KGNhcC0+Y2FyZCwgIkF0bWVsIEltYWdlIFNlbnNvciBJbnRlcmZhY2UiKTsKLQljYXAtPmNhcGFiaWxpdGllcyA9IChWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKLQkJCQlWNEwyX0NBUF9TVFJFQU1JTkcpOworCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9teDJfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvbXgyX2NhbWVyYS5jCmluZGV4IGNlNzJiZDIuLjE5MjM3N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9teDJfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL214Ml9jYW1lcmEuYwpAQCAtMTI1Niw3ICsxMjU2LDggQEAKIHsKIAkvKiBjYXAtPm5hbWUgaXMgc2V0IGJ5IHRoZSBmcmllbmRseSBjYWxsZXI6LT4gKi8KIAlzdHJsY3B5KGNhcC0+Y2FyZCwgTVgyX0NBTV9EUklWRVJfREVTQ1JJUFRJT04sIHNpemVvZihjYXAtPmNhcmQpKTsKLQljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJY2FwLT5kZXZpY2VfY2FwcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBjYXAtPmRldmljZV9jYXBzIHwgVjRMMl9DQVBfREVWSUNFX0NBUFM7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9teDNfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvbXgzX2NhbWVyYS5jCmluZGV4IGE2MGMzYmIuLjBiMzI5OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9teDNfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL214M19jYW1lcmEuYwpAQCAtOTY3LDcgKzk2Nyw4IEBACiB7CiAJLyogY2FwLT5uYW1lIGlzIHNldCBieSB0aGUgZmlyZW5kbHkgY2FsbGVyOi0+ICovCiAJc3RybGNweShjYXAtPmNhcmQsICJpLk1YM3ggQ2FtZXJhIiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwljYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwljYXAtPmNhcGFiaWxpdGllcyA9IGNhcC0+ZGV2aWNlX2NhcHMgfCBWNEwyX0NBUF9ERVZJQ0VfQ0FQUzsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL29tYXAxX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL29tYXAxX2NhbWVyYS5jCmluZGV4IGU2YjkzMjguLjE2ZjY1ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9vbWFwMV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvb21hcDFfY2FtZXJhLmMKQEAgLTE0MjcsNyArMTQyNyw4IEBACiB7CiAJLyogY2FwLT5uYW1lIGlzIHNldCBieSB0aGUgZnJpZW5kbHkgY2FsbGVyOi0+ICovCiAJc3RybGNweShjYXAtPmNhcmQsICJPTUFQMSBDYW1lcmEiLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3B4YV9jYW1lcmEuYwppbmRleCA5NTEyMjZhLi44ZDZlMzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvcHhhX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9weGFfY2FtZXJhLmMKQEAgLTE1NzYsNyArMTU3Niw4IEBACiB7CiAJLyogY2FwLT5uYW1lIGlzIHNldCBieSB0aGUgZmlyZW5kbHkgY2FsbGVyOi0+ICovCiAJc3RybGNweShjYXAtPmNhcmQsIHB4YV9jYW1fZHJpdmVyX2Rlc2NyaXB0aW9uLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvcmNhcl92aW4uYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9yY2FyX3Zpbi5jCmluZGV4IDBjMWY1NTYuLjlmMTQ3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9yY2FyX3Zpbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9yY2FyX3Zpbi5jCkBAIC0xNzk5LDcgKzE3OTksOSBAQAogCQkJICAgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CiAJc3RybGNweShjYXAtPmNhcmQsICJSX0Nhcl9WSU4iLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggOGIyN2IzZS4uNzE3ODc3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTE2NTIsNyArMTY1Miw5IEBACiAJCQkJICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CiAJc3RybGNweShjYXAtPmNhcmQsICJTdXBlckhfTW9iaWxlX0NFVSIsIHNpemVvZihjYXAtPmNhcmQpKTsKLQljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJY2FwLT5kZXZpY2VfY2FwcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBjYXAtPmRldmljZV9jYXBzIHwgVjRMMl9DQVBfREVWSUNFX0NBUFM7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi9jeHVzYi5jIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi9jeHVzYi5jCmluZGV4IDBmMzQ1YjEuLmYzMjdjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2IvY3h1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiL2N4dXNiLmMKQEAgLTIyMzIsNyArMjIzMiw3IEBACiAJCXsKIAkJCSJNeWdpY2EgVDIzMCBEVkItVC9UMi9DIiwKIAkJCXsgTlVMTCB9LAotCQkJeyAmY3h1c2JfdGFibGVbMjJdLCBOVUxMIH0sCisJCQl7ICZjeHVzYl90YWJsZVsyMF0sIE5VTEwgfSwKIAkJfSwKIAl9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKaW5kZXggMWIxNThmMS4uNTM2MjEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCkBAIC04OSwxNiArODksNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHZiaV9uciwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmJpX25yLCAiT2Zmc2V0IGZvciBkZXZpY2UncyB2YmkgZGV2IG1pbm9yIik7CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5IHB2cl9jYXBhYmlsaXR5ID17Ci0JLmRyaXZlciAgICAgICAgID0gInB2cnVzYjIiLAotCS5jYXJkICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgcHZyLXVzYjIiLAotCS5idXNfaW5mbyAgICAgICA9ICJ1c2IiLAotCS52ZXJzaW9uICAgICAgICA9IExJTlVYX1ZFUlNJT05fQ09ERSwKLQkuY2FwYWJpbGl0aWVzICAgPSAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8Ci0JCQkgICBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfUkFESU8gfAotCQkJICAgVjRMMl9DQVBfUkVBRFdSSVRFKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHB2cl9mbXRkZXNjIFtdID0gewogCXsKIAkJLmluZGV4ICAgICAgICAgID0gMCwKQEAgLTE2MCwxMCArMTUwLDIyIEBACiAJc3RydWN0IHB2cjJfdjRsMl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBmaC0+Y2hhbm5lbC5tY19oZWFkLT5oZHc7CiAKLQltZW1jcHkoY2FwLCAmcHZyX2NhcGFiaWxpdHksIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KSk7CisJc3RybGNweShjYXAtPmRyaXZlciwgInB2cnVzYjIiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+YnVzX2luZm8sIHB2cjJfaGR3X2dldF9idXNfaW5mbyhoZHcpLAogCQkJc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgcHZyMl9oZHdfZ2V0X2Rlc2MoaGR3KSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1RVTkVSIHwKKwkJCSAgICBWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1JBRElPIHwKKwkJCSAgICBWNEwyX0NBUF9SRUFEV1JJVEUgfCBWNEwyX0NBUF9ERVZJQ0VfQ0FQUzsKKwlzd2l0Y2ggKGZoLT5wZGktPmRldmJhc2UudmZsX3R5cGUpIHsKKwljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CisJCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfQVVESU87CisJCWJyZWFrOworCWNhc2UgVkZMX1RZUEVfUkFESU86CisJCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9SQURJTzsKKwkJYnJlYWs7CisJfQorCWNhcC0+ZGV2aWNlX2NhcHMgfD0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SRUFEV1JJVEU7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItY29yZS5jCmluZGV4IGQwOWE4OTEuLmJjMDhhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdmlkZW9idWYyLWNvcmUuYwpAQCAtMzE0NiwyNyArMzE0NiwyNiBAQAogCQkJcHJlcXVldWUtLTsKIAkJfSBlbHNlIHsKIAkJCWNhbGxfdm9pZF9xb3AocSwgd2FpdF9maW5pc2gsIHEpOwotCQkJcmV0ID0gdmIyX2ludGVybmFsX2RxYnVmKHEsICZmaWxlaW8tPmIsIDApOworCQkJaWYgKCF0aHJlYWRpby0+c3RvcCkKKwkJCQlyZXQgPSB2YjJfaW50ZXJuYWxfZHFidWYocSwgJmZpbGVpby0+YiwgMCk7CiAJCQljYWxsX3ZvaWRfcW9wKHEsIHdhaXRfcHJlcGFyZSwgcSk7CiAJCQlkcHJpbnRrKDUsICJmaWxlIGlvOiB2YjJfZHFidWYgcmVzdWx0OiAlZFxuIiwgcmV0KTsKIAkJfQotCQlpZiAodGhyZWFkaW8tPnN0b3ApCi0JCQlicmVhazsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCB8fCB0aHJlYWRpby0+c3RvcCkKIAkJCWJyZWFrOwogCQl0cnlfdG9fZnJlZXplKCk7CiAKIAkJdmIgPSBxLT5idWZzW2ZpbGVpby0+Yi5pbmRleF07CiAJCWlmICghKGZpbGVpby0+Yi5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfRVJST1IpKQotCQkJcmV0ID0gdGhyZWFkaW8tPmZuYyh2YiwgdGhyZWFkaW8tPnByaXYpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7CisJCQlpZiAodGhyZWFkaW8tPmZuYyh2YiwgdGhyZWFkaW8tPnByaXYpKQorCQkJCWJyZWFrOwogCQljYWxsX3ZvaWRfcW9wKHEsIHdhaXRfZmluaXNoLCBxKTsKIAkJaWYgKHNldF90aW1lc3RhbXApCiAJCQl2NGwyX2dldF90aW1lc3RhbXAoJmZpbGVpby0+Yi50aW1lc3RhbXApOwotCQlyZXQgPSB2YjJfaW50ZXJuYWxfcWJ1ZihxLCAmZmlsZWlvLT5iKTsKKwkJaWYgKCF0aHJlYWRpby0+c3RvcCkKKwkJCXJldCA9IHZiMl9pbnRlcm5hbF9xYnVmKHEsICZmaWxlaW8tPmIpOwogCQljYWxsX3ZvaWRfcW9wKHEsIHdhaXRfcHJlcGFyZSwgcSk7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQgfHwgdGhyZWFkaW8tPnN0b3ApCiAJCQlicmVhazsKIAl9CiAKQEAgLTMyMzUsMTEgKzMyMzQsMTEgQEAKIAl0aHJlYWRpby0+c3RvcCA9IHRydWU7CiAJdmIyX2ludGVybmFsX3N0cmVhbW9mZihxLCBxLT50eXBlKTsKIAljYWxsX3ZvaWRfcW9wKHEsIHdhaXRfcHJlcGFyZSwgcSk7CisJZXJyID0ga3RocmVhZF9zdG9wKHRocmVhZGlvLT50aHJlYWQpOwogCXEtPmZpbGVpbyA9IE5VTEw7CiAJZmlsZWlvLT5yZXEuY291bnQgPSAwOwogCXZiMl9yZXFidWZzKHEsICZmaWxlaW8tPnJlcSk7CiAJa2ZyZWUoZmlsZWlvKTsKLQllcnIgPSBrdGhyZWFkX3N0b3AodGhyZWFkaW8tPnRocmVhZCk7CiAJdGhyZWFkaW8tPnRocmVhZCA9IE5VTEw7CiAJa2ZyZWUodGhyZWFkaW8pOwogCXEtPmZpbGVpbyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9kYTkwNTItY29yZS5jIGIvZHJpdmVycy9tZmQvZGE5MDUyLWNvcmUuYwppbmRleCA1MmEwYzJmLi5hZTQ5OGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9kYTkwNTItY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL2RhOTA1Mi1jb3JlLmMKQEAgLTU1NCw3ICs1NTQsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhkYTkwNTItPmRldiwgLTEsIGRhOTA1Ml9zdWJkZXZfaW5mbywKKwlyZXQgPSBtZmRfYWRkX2RldmljZXMoZGE5MDUyLT5kZXYsIFBMQVRGT1JNX0RFVklEX0FVVE8sCisJCQkgICAgICBkYTkwNTJfc3ViZGV2X2luZm8sCiAJCQkgICAgICBBUlJBWV9TSVpFKGRhOTA1Ml9zdWJkZXZfaW5mbyksIE5VTEwsIDAsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkYTkwNTItPmRldiwgIm1mZF9hZGRfZGV2aWNlcyBmYWlsZWQ6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvcnRzeF91c2IuYyBiL2RyaXZlcnMvbWZkL3J0c3hfdXNiLmMKaW5kZXggZGJkZDBmYS4uMjEwZDFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvcnRzeF91c2IuYworKysgYi9kcml2ZXJzL21mZC9ydHN4X3VzYi5jCkBAIC02ODEsMjEgKzY4MSw5IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHJ0c3hfdXNiX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewotCXN0cnVjdCBydHN4X3VjciAqdWNyID0KLQkJKHN0cnVjdCBydHN4X3VjciAqKXVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KIAlkZXZfZGJnKCZpbnRmLT5kZXYsICIlcyBjYWxsZWQgd2l0aCBwbSBtZXNzYWdlIDB4JTA0eFxuIiwKIAkJCV9fZnVuY19fLCBtZXNzYWdlLmV2ZW50KTsKIAotCS8qCi0JICogQ2FsbCB0byBtYWtlIHN1cmUgTEVEIGlzIG9mZiBkdXJpbmcgc3VzcGVuZCB0byBzYXZlIG1vcmUgcG93ZXIuCi0JICogSXQgaXMgTk9UIGEgcGVybWFuZW50IHN0YXRlIGFuZCBjb3VsZCBiZSB0dXJuZWQgb24gYW55dGltZSBsYXRlci4KLQkgKiBUaHVzIG5vIG5lZWQgdG8gY2FsbCB0dXJuX29uIHdoZW4gcmVzdW5taW5nLgotCSAqLwotCW11dGV4X2xvY2soJnVjci0+ZGV2X211dGV4KTsKLQlydHN4X3VzYl90dXJuX29mZl9sZWQodWNyKTsKLQltdXRleF91bmxvY2soJnVjci0+ZGV2X211dGV4KTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zdG1wZS5jIGIvZHJpdmVycy9tZmQvc3RtcGUuYwppbmRleCBlMmY5ZGYxLi4yZDdmYWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zdG1wZS5jCisrKyBiL2RyaXZlcnMvbWZkL3N0bXBlLmMKQEAgLTUxOSw2ICs1MTksNyBAQAogCVtTVE1QRV9JRFhfR1BEUl9MU0JdCT0gU1RNUEUxNjAxX1JFR19HUElPX1NFVF9ESVJfTFNCLAogCVtTVE1QRV9JRFhfR1BSRVJfTFNCXQk9IFNUTVBFMTYwMV9SRUdfR1BJT19SRV9MU0IsCiAJW1NUTVBFX0lEWF9HUEZFUl9MU0JdCT0gU1RNUEUxNjAxX1JFR19HUElPX0ZFX0xTQiwKKwlbU1RNUEVfSURYX0dQUFVSX0xTQl0JPSBTVE1QRTE2MDFfUkVHX0dQSU9fUFVfTFNCLAogCVtTVE1QRV9JRFhfR1BBRlJfVV9NU0JdCT0gU1RNUEUxNjAxX1JFR19HUElPX0FGX1VfTVNCLAogCVtTVE1QRV9JRFhfSUVHUElPUl9MU0JdCT0gU1RNUEUxNjAxX1JFR19JTlRfRU5fR1BJT19NQVNLX0xTQiwKIAlbU1RNUEVfSURYX0lTR1BJT1JfTVNCXQk9IFNUTVBFMTYwMV9SRUdfSU5UX1NUQV9HUElPX01TQiwKQEAgLTY2Nyw2ICs2NjgsNyBAQAogCVtTVE1QRV9JRFhfR1BEUl9MU0JdCT0gU1RNUEUxODAxX1JFR19HUElPX1NFVF9ESVJfTE9XLAogCVtTVE1QRV9JRFhfR1BSRVJfTFNCXQk9IFNUTVBFMTgwMV9SRUdfR1BJT19SRV9MT1csCiAJW1NUTVBFX0lEWF9HUEZFUl9MU0JdCT0gU1RNUEUxODAxX1JFR19HUElPX0ZFX0xPVywKKwlbU1RNUEVfSURYX0dQUFVSX0xTQl0JPSBTVE1QRTE4MDFfUkVHX0dQSU9fUFVMTF9VUF9MT1csCiAJW1NUTVBFX0lEWF9JRUdQSU9SX0xTQl0JPSBTVE1QRTE4MDFfUkVHX0lOVF9FTl9HUElPX01BU0tfTE9XLAogCVtTVE1QRV9JRFhfSVNHUElPUl9MU0JdCT0gU1RNUEUxODAxX1JFR19JTlRfU1RBX0dQSU9fTE9XLAogfTsKQEAgLTc1MCw2ICs3NTIsOCBAQAogCVtTVE1QRV9JRFhfR1BEUl9MU0JdCT0gU1RNUEUyNFhYX1JFR19HUERSX0xTQiwKIAlbU1RNUEVfSURYX0dQUkVSX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0dQUkVSX0xTQiwKIAlbU1RNUEVfSURYX0dQRkVSX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0dQRkVSX0xTQiwKKwlbU1RNUEVfSURYX0dQUFVSX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0dQUFVSX0xTQiwKKwlbU1RNUEVfSURYX0dQUERSX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0dQUERSX0xTQiwKIAlbU1RNUEVfSURYX0dQQUZSX1VfTVNCXQk9IFNUTVBFMjRYWF9SRUdfR1BBRlJfVV9NU0IsCiAJW1NUTVBFX0lEWF9JRUdQSU9SX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0lFR1BJT1JfTFNCLAogCVtTVE1QRV9JRFhfSVNHUElPUl9NU0JdCT0gU1RNUEUyNFhYX1JFR19JU0dQSU9SX01TQiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3N0bXBlLmggYi9kcml2ZXJzL21mZC9zdG1wZS5oCmluZGV4IGJlZTBhYmYuLjg0YWRiNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3N0bXBlLmgKKysrIGIvZHJpdmVycy9tZmQvc3RtcGUuaApAQCAtMTg4LDYgKzE4OCw3IEBACiAjZGVmaW5lIFNUTVBFMTYwMV9SRUdfR1BJT19FRF9NU0IJCTB4OEEKICNkZWZpbmUgU1RNUEUxNjAxX1JFR19HUElPX1JFX0xTQgkJMHg4RAogI2RlZmluZSBTVE1QRTE2MDFfUkVHX0dQSU9fRkVfTFNCCQkweDhGCisjZGVmaW5lIFNUTVBFMTYwMV9SRUdfR1BJT19QVV9MU0IJCTB4OTEKICNkZWZpbmUgU1RNUEUxNjAxX1JFR19HUElPX0FGX1VfTVNCCQkweDkyCiAKICNkZWZpbmUgU1RNUEUxNjAxX1NZU19DVFJMX0VOQUJMRV9HUElPCQkoMSA8PCAzKQpAQCAtMjc2LDYgKzI3Nyw4IEBACiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BFRFJfTVNCCQkweDhDCiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BSRVJfTFNCCQkweDkxCiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BGRVJfTFNCCQkweDk0CisjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BQVVJfTFNCCQkweDk3CisjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BQRFJfTFNCCQkweDlhCiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BBRlJfVV9NU0IJMHg5QgogCiAjZGVmaW5lIFNUTVBFMjRYWF9TWVNfQ1RSTF9FTkFCTEVfR1BJTwkJKDEgPDwgMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1MjE4LmMgYi9kcml2ZXJzL21mZC90cHM2NTIxOC5jCmluZGV4IDBkMjU2Y2IuLmQ2Yjc2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RwczY1MjE4LmMKKysrIGIvZHJpdmVycy9tZmQvdHBzNjUyMTguYwpAQCAtMTI1LDEwICsxMjUsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwczY1MjE4X2NsZWFyX2JpdHMpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSB0cHM2NTIxOF95ZXNfcmFuZ2VzW10gPSB7CisJcmVnbWFwX3JlZ19yYW5nZShUUFM2NTIxOF9SRUdfSU5UMSwgVFBTNjUyMThfUkVHX0lOVDIpLAorCXJlZ21hcF9yZWdfcmFuZ2UoVFBTNjUyMThfUkVHX1NUQVRVUywgVFBTNjUyMThfUkVHX1NUQVRVUyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgdHBzNjUyMThfdm9sYXRpbGVfdGFibGUgPSB7CisJLnllc19yYW5nZXMgPSB0cHM2NTIxOF95ZXNfcmFuZ2VzLAorCS5uX3llc19yYW5nZXMgPSBBUlJBWV9TSVpFKHRwczY1MjE4X3llc19yYW5nZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIHRwczY1MjE4X3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzID0gOCwKIAkudmFsX2JpdHMgPSA4LAogCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfUkJUUkVFLAorCS52b2xhdGlsZV90YWJsZSA9ICZ0cHM2NTIxOF92b2xhdGlsZV90YWJsZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycSB0cHM2NTIxOF9pcnFzW10gPSB7CkBAIC0xOTMsNiArMjA0LDcgQEAKIAogCS5udW1fcmVncyA9IDIsCiAJLm1hc2tfYmFzZSA9IFRQUzY1MjE4X1JFR19JTlRfTUFTSzEsCisJLnN0YXR1c19iYXNlID0gVFBTNjUyMThfUkVHX0lOVDEsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl90cHM2NTIxOF9tYXRjaF90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2N4bC9jb250ZXh0LmMgYi9kcml2ZXJzL21pc2MvY3hsL2NvbnRleHQuYwppbmRleCA1MWZkNmI1Li5kMWI1NWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3hsL2NvbnRleHQuYworKysgYi9kcml2ZXJzL21pc2MvY3hsL2NvbnRleHQuYwpAQCAtMTAwLDYgKzEwMCw0NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN4bF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgY3hsX2NvbnRleHQgKmN0eCA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzOworCXU2NCBhcmVhLCBvZmZzZXQ7CisKKwlvZmZzZXQgPSB2bWYtPnBnb2ZmIDw8IFBBR0VfU0hJRlQ7CisKKwlwcl9kZXZlbCgiJXM6IHBlOiAlaSBhZGRyZXNzOiAweCVseCBvZmZzZXQ6IDB4JWxseFxuIiwKKwkJCV9fZnVuY19fLCBjdHgtPnBlLCBhZGRyZXNzLCBvZmZzZXQpOworCisJaWYgKGN0eC0+YWZ1LT5jdXJyZW50X21vZGUgPT0gQ1hMX01PREVfREVESUNBVEVEKSB7CisJCWFyZWEgPSBjdHgtPmFmdS0+cHNuX3BoeXM7CisJCWlmIChvZmZzZXQgPiBjdHgtPmFmdS0+YWRhcHRlci0+cHNfc2l6ZSkKKwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisJfSBlbHNlIHsKKwkJYXJlYSA9IGN0eC0+cHNuX3BoeXM7CisJCWlmIChvZmZzZXQgPiBjdHgtPnBzbl9zaXplKQorCQkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKwl9CisKKwltdXRleF9sb2NrKCZjdHgtPnN0YXR1c19tdXRleCk7CisKKwlpZiAoY3R4LT5zdGF0dXMgIT0gU1RBUlRFRCkgeworCQltdXRleF91bmxvY2soJmN0eC0+c3RhdHVzX211dGV4KTsKKwkJcHJfZGV2ZWwoIiVzOiBDb250ZXh0IG5vdCBzdGFydGVkLCBmYWlsaW5nIHByb2JsZW0gc3RhdGUgYWNjZXNzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisJfQorCisJdm1faW5zZXJ0X3Bmbih2bWEsIGFkZHJlc3MsIChhcmVhICsgb2Zmc2V0KSA+PiBQQUdFX1NISUZUKTsKKworCW11dGV4X3VubG9jaygmY3R4LT5zdGF0dXNfbXV0ZXgpOworCisJcmV0dXJuIFZNX0ZBVUxUX05PUEFHRTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjeGxfbW1hcF92bW9wcyA9IHsKKwkuZmF1bHQgPSBjeGxfbW1hcF9mYXVsdCwKK307CisKIC8qCiAgKiBNYXAgYSBwZXItY29udGV4dCBtbWlvIHNwYWNlIGludG8gdGhlIGdpdmVuIHZtYS4KICAqLwpAQCAtMTA4LDI2ICsxNDgsMjUgQEAKIAl1NjQgbGVuID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwogCWxlbiA9IG1pbihsZW4sIGN0eC0+cHNuX3NpemUpOwogCi0JaWYgKGN0eC0+YWZ1LT5jdXJyZW50X21vZGUgPT0gQ1hMX01PREVfREVESUNBVEVEKSB7Ci0JCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7Ci0JCXJldHVybiB2bV9pb21hcF9tZW1vcnkodm1hLCBjdHgtPmFmdS0+cHNuX3BoeXMsIGN0eC0+YWZ1LT5hZGFwdGVyLT5wc19zaXplKTsKLQl9CisJaWYgKGN0eC0+YWZ1LT5jdXJyZW50X21vZGUgIT0gQ1hMX01PREVfREVESUNBVEVEKSB7CisJCS8qIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIHZhbGlkIHBlciBwcm9jZXNzIHNwYWNlIGZvciB0aGlzIEFGVSAqLworCQlpZiAoKGN0eC0+bWFzdGVyICYmICFjdHgtPmFmdS0+cHNhKSB8fCAoIWN0eC0+YWZ1LT5wcF9wc2EpKSB7CisJCQlwcl9kZXZlbCgiQUZVIGRvZXNuJ3Qgc3VwcG9ydCBtbWlvIHNwYWNlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAKLQkvKiBtYWtlIHN1cmUgdGhlcmUgaXMgYSB2YWxpZCBwZXIgcHJvY2VzcyBzcGFjZSBmb3IgdGhpcyBBRlUgKi8KLQlpZiAoKGN0eC0+bWFzdGVyICYmICFjdHgtPmFmdS0+cHNhKSB8fCAoIWN0eC0+YWZ1LT5wcF9wc2EpKSB7Ci0JCXByX2RldmVsKCJBRlUgZG9lc24ndCBzdXBwb3J0IG1taW8gc3BhY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogQ2FuJ3QgbW1hcCB1bnRpbCB0aGUgQUZVIGlzIGVuYWJsZWQgKi8KKwkJaWYgKCFjdHgtPmFmdS0+ZW5hYmxlZCkKKwkJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JLyogQ2FuJ3QgbW1hcCB1bnRpbCB0aGUgQUZVIGlzIGVuYWJsZWQgKi8KLQlpZiAoIWN0eC0+YWZ1LT5lbmFibGVkKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJcHJfZGV2ZWwoIiVzOiBtbWlvIHBoeXNpY2FsOiAlbGx4IHBlOiAlaSBtYXN0ZXI6JWlcbiIsIF9fZnVuY19fLAogCQkgY3R4LT5wc25fcGh5cywgY3R4LT5wZSAsIGN0eC0+bWFzdGVyKTsKIAorCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9QRk5NQVA7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKLQlyZXR1cm4gdm1faW9tYXBfbWVtb3J5KHZtYSwgY3R4LT5wc25fcGh5cywgbGVuKTsKKwl2bWEtPnZtX29wcyA9ICZjeGxfbW1hcF92bW9wczsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTE1MCwxMiArMTg5LDYgQEAKIAlhZnVfcmVsZWFzZV9pcnFzKGN0eCk7CiAJZmx1c2hfd29yaygmY3R4LT5mYXVsdF93b3JrKTsgLyogT25seSBuZWVkZWQgZm9yIGRlZGljYXRlZCBwcm9jZXNzICovCiAJd2FrZV91cF9hbGwoJmN0eC0+d3EpOwotCi0JLyogUmVsZWFzZSBQcm9ibGVtIFN0YXRlIEFyZWEgbWFwcGluZyAqLwotCW11dGV4X2xvY2soJmN0eC0+bWFwcGluZ19sb2NrKTsKLQlpZiAoY3R4LT5tYXBwaW5nKQotCQl1bm1hcF9tYXBwaW5nX3JhbmdlKGN0eC0+bWFwcGluZywgMCwgMCwgMSk7Ci0JbXV0ZXhfdW5sb2NrKCZjdHgtPm1hcHBpbmdfbG9jayk7CiB9CiAKIC8qCkBAIC0xODQsNiArMjE3LDE3IEBACiAJCSAqIGNyZWF0ZWQgYW5kIHRvcm4gZG93biBhZnRlciB0aGUgSURSIHJlbW92ZWQKIAkJICovCiAJCV9fZGV0YWNoX2NvbnRleHQoY3R4KTsKKworCQkvKgorCQkgKiBXZSBhcmUgZm9yY2UgZGV0YWNoaW5nIC0gcmVtb3ZlIGFueSBhY3RpdmUgUFNBIG1hcHBpbmdzIHNvCisJCSAqIHVzZXJzcGFjZSBjYW5ub3QgaW50ZXJmZXJlIHdpdGggdGhlIGNhcmQgaWYgaXQgY29tZXMgYmFjay4KKwkJICogRWFzaWVzdCB3YXkgdG8gZXhlcmNpc2UgdGhpcyBpcyB0byB1bmJpbmQgYW5kIHJlYmluZCB0aGUKKwkJICogZHJpdmVyIHZpYSBzeXNmcyB3aGlsZSBpdCBpcyBpbiB1c2UuCisJCSAqLworCQltdXRleF9sb2NrKCZjdHgtPm1hcHBpbmdfbG9jayk7CisJCWlmIChjdHgtPm1hcHBpbmcpCisJCQl1bm1hcF9tYXBwaW5nX3JhbmdlKGN0eC0+bWFwcGluZywgMCwgMCwgMSk7CisJCW11dGV4X3VubG9jaygmY3R4LT5tYXBwaW5nX2xvY2spOwogCX0KIAltdXRleF91bmxvY2soJmFmdS0+Y29udGV4dHNfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY3hsL2ZpbGUuYyBiL2RyaXZlcnMvbWlzYy9jeGwvZmlsZS5jCmluZGV4IGU5ZjJmMTAuLmIxNWQ4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9jeGwvZmlsZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9jeGwvZmlsZS5jCkBAIC0xNDAsMTggKzE0MCwyMCBAQAogCiAJcHJfZGV2ZWwoIiVzOiBwZTogJWlcbiIsIF9fZnVuY19fLCBjdHgtPnBlKTsKIAotCW11dGV4X2xvY2soJmN0eC0+c3RhdHVzX211dGV4KTsKLQlpZiAoY3R4LT5zdGF0dXMgIT0gT1BFTkVEKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCisJLyogRG8gdGhpcyBvdXRzaWRlIHRoZSBzdGF0dXNfbXV0ZXggdG8gYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IHdpdGgKKwkgKiB0aGUgbG9ja2luZyBpbiBjeGxfbW1hcF9mYXVsdCgpICovCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ3b3JrLCB1d29yaywKIAkJCSAgIHNpemVvZihzdHJ1Y3QgY3hsX2lvY3RsX3N0YXJ0X3dvcmspKSkgewogCQlyYyA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwogCX0KIAorCW11dGV4X2xvY2soJmN0eC0+c3RhdHVzX211dGV4KTsKKwlpZiAoY3R4LT5zdGF0dXMgIT0gT1BFTkVEKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCiAJLyoKIAkgKiBpZiBhbnkgb2YgdGhlIHJlc2VydmVkIGZpZWxkcyBhcmUgc2V0IG9yIGFueSBvZiB0aGUgdW51c2VkCiAJICogZmxhZ3MgYXJlIHNldCBpdCdzIGludmFsaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tZWkvaHctbWUuYyBiL2RyaXZlcnMvbWlzYy9tZWkvaHctbWUuYwppbmRleCBmZjI3NTUwLi4wNmZmMGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbWVpL2h3LW1lLmMKKysrIGIvZHJpdmVycy9taXNjL21laS9ody1tZS5jCkBAIC0yMzQsNiArMjM0LDE4IEBACiAJc3RydWN0IG1laV9tZV9odyAqaHcgPSB0b19tZV9odyhkZXYpOwogCXUzMiBoY3NyID0gbWVpX2hjc3JfcmVhZChodyk7CiAKKwkvKiBIX1JTVCBtYXkgYmUgZm91bmQgbGl0IGJlZm9yZSByZXNldCBpcyBzdGFydGVkLAorCSAqIGZvciBleGFtcGxlIGlmIHByZWNlZGluZyByZXNldCBmbG93IGhhc24ndCBjb21wbGV0ZWQuCisJICogSW4gdGhhdCBjYXNlIGFzc2VydGluZyBIX1JTVCB3aWxsIGJlIGlnbm9yZWQsIHRoZXJlZm9yZQorCSAqIHdlIG5lZWQgdG8gY2xlYW4gSF9SU1QgYml0IHRvIHN0YXJ0IGEgc3VjY2Vzc2Z1bCByZXNldCBzZXF1ZW5jZS4KKwkgKi8KKwlpZiAoKGhjc3IgJiBIX1JTVCkgPT0gSF9SU1QpIHsKKwkJZGV2X3dhcm4oZGV2LT5kZXYsICJIX1JTVCBpcyBzZXQgPSAweCUwOFgiLCBoY3NyKTsKKwkJaGNzciAmPSB+SF9SU1Q7CisJCW1laV9tZV9yZWdfd3JpdGUoaHcsIEhfQ1NSLCBoY3NyKTsKKwkJaGNzciA9IG1laV9oY3NyX3JlYWQoaHcpOworCX0KKwogCWhjc3IgfD0gSF9SU1QgfCBIX0lHIHwgSF9JUzsKIAogCWlmIChpbnRyX2VuYWJsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IDAyYWQ3OTIuLjc0NjZjZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtODg2LDcgKzg4Niw3IEBACiAJdW5zaWduZWQgaWR4LCBidXNfd2lkdGggPSAwOwogCWludCBlcnIgPSAwOwogCi0JaWYgKCFtbWNfY2FuX2V4dF9jc2QoY2FyZCkgJiYKKwlpZiAoIW1tY19jYW5fZXh0X2NzZChjYXJkKSB8fAogCSAgICAhKGhvc3QtPmNhcHMgJiAoTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF84X0JJVF9EQVRBKSkpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWFjcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCmluZGV4IGUzZTU2ZDMuLjk3MDMxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCkBAIC0yNDcsNiArMjQ3LDcgQEAKIAl7ICJJTlQzM0JCIiAgLCAiMyIgLCAmc2RoY2lfYWNwaV9zbG90X2ludF9zZCB9LAogCXsgIklOVDMzQzYiICAsIE5VTEwsICZzZGhjaV9hY3BpX3Nsb3RfaW50X3NkaW8gfSwKIAl7ICJJTlQzNDM2IiAgLCBOVUxMLCAmc2RoY2lfYWNwaV9zbG90X2ludF9zZGlvIH0sCisJeyAiSU5UMzQ0RCIgICwgTlVMTCwgJnNkaGNpX2FjcGlfc2xvdF9pbnRfc2RpbyB9LAogCXsgIlBOUDBENDAiICB9LAogCXsgfSwKIH07CkBAIC0yNTcsNiArMjU4LDcgQEAKIAl7ICJJTlQzM0JCIiAgfSwKIAl7ICJJTlQzM0M2IiAgfSwKIAl7ICJJTlQzNDM2IiAgfSwKKwl7ICJJTlQzNDREIiAgfSwKIAl7ICJQTlAwRDQwIiAgfSwKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKaW5kZXggMDM0Mjc3NS4uNGYzODU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCkBAIC05OTMsNiArOTkzLDMxIEBACiAJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAogCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX2ludGVsX21yZmxfbW1jLAogCX0sCisKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9JTlRFTCwKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVF9FTU1DLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfaW50ZWxfYnl0X2VtbWMsCisJfSwKKworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfSU5URUxfU1BUX1NESU8sCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gKGtlcm5lbF91bG9uZ190KSZzZGhjaV9pbnRlbF9ieXRfc2RpbywKKwl9LAorCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfSU5URUwsCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9JTlRFTF9TUFRfU0QsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gKGtlcm5lbF91bG9uZ190KSZzZGhjaV9pbnRlbF9ieXRfc2QsCisJfSwKKwogCXsKIAkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX08yLAogCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfTzJfODEyMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5oCmluZGV4IGQ1N2MzZDEuLjFlYzY4NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuaApAQCAtMjEsNiArMjEsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NMVl9FTU1DMAkweDA4ZTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DTFZfRU1NQzEJMHgwOGU2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUVJLX1NECTB4MDhBNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVF9FTU1DCTB4OWQyYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVF9TRElPCTB4OWQyYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVF9TRAkweDlkMmQKIAogLyoKICAqIFBDSSByZWdpc3RlcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYwppbmRleCA0NTIzODg3Li5jYTM0MjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYzLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2My5jCkBAIC0zMDAsMTMgKzMwMCw2IEBACiAJaWYgKElTX0VSUihob3N0KSkKIAkJcmV0dXJuIFBUUl9FUlIoaG9zdCk7CiAKLQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJtYXJ2ZWxsLGFybWFkYS0zODAtc2RoY2kiKSkgewotCQlyZXQgPSBtdl9jb25mX21idXNfd2luZG93cyhwZGV2LCBtdl9tYnVzX2RyYW1faW5mbygpKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycl9tYnVzX3dpbjsKLQl9Ci0KLQogCXBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwogCXBsdGZtX2hvc3QtPnByaXYgPSBweGE7CiAKQEAgLTMyNSw2ICszMTgsMTIgQEAKIAlpZiAoIUlTX0VSUihweGEtPmNsa19jb3JlKSkKIAkJY2xrX3ByZXBhcmVfZW5hYmxlKHB4YS0+Y2xrX2NvcmUpOwogCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAibWFydmVsbCxhcm1hZGEtMzgwLXNkaGNpIikpIHsKKwkJcmV0ID0gbXZfY29uZl9tYnVzX3dpbmRvd3MocGRldiwgbXZfbWJ1c19kcmFtX2luZm8oKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJfbWJ1c193aW47CisJfQorCiAJLyogZW5hYmxlIDEvOFYgRERSIGNhcGFibGUgKi8KIAlob3N0LT5tbWMtPmNhcHMgfD0gTU1DX0NBUF8xXzhWX0REUjsKIApAQCAtMzk2LDExICszOTUsMTEgQEAKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiBlcnJfb2ZfcGFyc2U6CiBlcnJfY2RfcmVxOgorZXJyX21idXNfd2luOgogCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19pbyk7CiAJaWYgKCFJU19FUlIocHhhLT5jbGtfY29yZSkpCiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19jb3JlKTsKIGVycl9jbGtfZ2V0OgotZXJyX21idXNfd2luOgogCXNkaGNpX3BsdGZtX2ZyZWUocGRldik7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwppbmRleCBjYmIyNDViLi5mMWE0ODhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCkBAIC0yNTksOCArMjU5LDYgQEAKIAogCQlkZWxfdGltZXJfc3luYygmaG9zdC0+dHVuaW5nX3RpbWVyKTsKIAkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX05FRURTX1JFVFVOSU5HOwotCQlob3N0LT5tbWMtPm1heF9ibGtfY291bnQgPQotCQkJKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX05PX01VTFRJQkxPQ0spID8gMSA6IDY1NTM1OwogCX0KIAlzZGhjaV9lbmFibGVfY2FyZF9kZXRlY3Rpb24oaG9zdCk7CiB9CkBAIC0xMjczLDYgKzEyNzEsMTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZob3N0LT5sb2NrKTsKIAkJbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKG1tYywgbW1jLT5zdXBwbHkudm1tYywgdmRkKTsKIAkJc3Bpbl9sb2NrX2lycSgmaG9zdC0+bG9jayk7CisKKwkJaWYgKG1vZGUgIT0gTU1DX1BPV0VSX09GRikKKwkJCXNkaGNpX3dyaXRlYihob3N0LCBTREhDSV9QT1dFUl9PTiwgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CisJCWVsc2UKKwkJCXNkaGNpX3dyaXRlYihob3N0LCAwLCBTREhDSV9QT1dFUl9DT05UUk9MKTsKKwogCQlyZXR1cm47CiAJfQogCkBAIC0xMzUzLDYgKzEzNTcsOCBAQAogCiAJc2RoY2lfcnVudGltZV9wbV9nZXQoaG9zdCk7CiAKKwlwcmVzZW50ID0gbW1jX2dwaW9fZ2V0X2NkKGhvc3QtPm1tYyk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJV0FSTl9PTihob3N0LT5tcnEgIT0gTlVMTCk7CkBAIC0xMzgxLDcgKzEzODcsNiBAQAogCSAqICAgICB6ZXJvOiBjZC1ncGlvIGlzIHVzZWQsIGFuZCBjYXJkIGlzIHJlbW92ZWQKIAkgKiAgICAgb25lOiBjZC1ncGlvIGlzIHVzZWQsIGFuZCBjYXJkIGlzIHByZXNlbnQKIAkgKi8KLQlwcmVzZW50ID0gbW1jX2dwaW9fZ2V0X2NkKGhvc3QtPm1tYyk7CiAJaWYgKHByZXNlbnQgPCAwKSB7CiAJCS8qIElmIHBvbGxpbmcsIGFzc3VtZSB0aGF0IHRoZSBjYXJkIGlzIGFsd2F5cyBwcmVzZW50LiAqLwogCQlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OKQpAQCAtMTg4MCw2ICsxODg1LDE4IEBACiAJcmV0dXJuICEocHJlc2VudF9zdGF0ZSAmIFNESENJX0RBVEFfTFZMX01BU0spOwogfQogCitzdGF0aWMgaW50IHNkaGNpX3ByZXBhcmVfaHM0MDBfdHVuaW5nKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlob3N0LT5mbGFncyB8PSBTREhDSV9IUzQwMF9UVU5JTkc7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2RoY2lfZXhlY3V0ZV90dW5pbmcoc3RydWN0IG1tY19ob3N0ICptbWMsIHUzMiBvcGNvZGUpCiB7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwpAQCAtMTg4NywxMCArMTkwNCwxOCBAQAogCWludCB0dW5pbmdfbG9vcF9jb3VudGVyID0gTUFYX1RVTklOR19MT09QOwogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHR1bmluZ19jb3VudCA9IDA7CisJYm9vbCBoczQwMF90dW5pbmc7CiAKIAlzZGhjaV9ydW50aW1lX3BtX2dldChob3N0KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCisJaHM0MDBfdHVuaW5nID0gaG9zdC0+ZmxhZ3MgJiBTREhDSV9IUzQwMF9UVU5JTkc7CisJaG9zdC0+ZmxhZ3MgJj0gflNESENJX0hTNDAwX1RVTklORzsKKworCWlmIChob3N0LT50dW5pbmdfbW9kZSA9PSBTREhDSV9UVU5JTkdfTU9ERV8xKQorCQl0dW5pbmdfY291bnQgPSBob3N0LT50dW5pbmdfY291bnQ7CisKIAkvKgogCSAqIFRoZSBIb3N0IENvbnRyb2xsZXIgbmVlZHMgdHVuaW5nIG9ubHkgaW4gY2FzZSBvZiBTRFIxMDQgbW9kZQogCSAqIGFuZCBmb3IgU0RSNTAgbW9kZSB3aGVuIFVzZSBUdW5pbmcgZm9yIFNEUjUwIGlzIHNldCBpbiB0aGUKQEAgLTE4OTksOCArMTkyNCwyMCBAQAogCSAqIHR1bmluZyBmdW5jdGlvbiBoYXMgdG8gYmUgZXhlY3V0ZWQuCiAJICovCiAJc3dpdGNoIChob3N0LT50aW1pbmcpIHsKKwkvKiBIUzQwMCB0dW5pbmcgaXMgZG9uZSBpbiBIUzIwMCBtb2RlICovCiAJY2FzZSBNTUNfVElNSU5HX01NQ19IUzQwMDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfdW5sb2NrOworCiAJY2FzZSBNTUNfVElNSU5HX01NQ19IUzIwMDoKKwkJLyoKKwkJICogUGVyaW9kaWMgcmUtdHVuaW5nIGZvciBIUzQwMCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbmVlZGVkLCBzbworCQkgKiBkaXNhYmxlIGl0IGhlcmUuCisJCSAqLworCQlpZiAoaHM0MDBfdHVuaW5nKQorCQkJdHVuaW5nX2NvdW50ID0gMDsKKwkJYnJlYWs7CisKIAljYXNlIE1NQ19USU1JTkdfVUhTX1NEUjEwNDoKIAkJYnJlYWs7CiAKQEAgLTE5MTEsOSArMTk0OCw3IEBACiAJCS8qIEZBTExUSFJPVUdIICovCiAKIAlkZWZhdWx0OgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Ci0JCXNkaGNpX3J1bnRpbWVfcG1fcHV0KGhvc3QpOwotCQlyZXR1cm4gMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCWlmIChob3N0LT5vcHMtPnBsYXRmb3JtX2V4ZWN1dGVfdHVuaW5nKSB7CkBAIC0yMDM3LDI0ICsyMDcyLDExIEBACiAJfQogCiBvdXQ6Ci0JLyoKLQkgKiBJZiB0aGlzIGlzIHRoZSB2ZXJ5IGZpcnN0IHRpbWUgd2UgYXJlIGhlcmUsIHdlIHN0YXJ0IHRoZSByZXR1bmluZwotCSAqIHRpbWVyLiBTaW5jZSBvbmx5IGR1cmluZyB0aGUgZmlyc3QgdGltZSwgU0RIQ0lfTkVFRFNfUkVUVU5JTkcKLQkgKiBmbGFnIHdvbid0IGJlIHNldCwgd2UgY2hlY2sgdGhpcyBjb25kaXRpb24gYmVmb3JlIGFjdHVhbGx5IHN0YXJ0aW5nCi0JICogdGhlIHRpbWVyLgotCSAqLwotCWlmICghKGhvc3QtPmZsYWdzICYgU0RIQ0lfTkVFRFNfUkVUVU5JTkcpICYmIGhvc3QtPnR1bmluZ19jb3VudCAmJgotCSAgICAoaG9zdC0+dHVuaW5nX21vZGUgPT0gU0RIQ0lfVFVOSU5HX01PREVfMSkpIHsKKwlob3N0LT5mbGFncyAmPSB+U0RIQ0lfTkVFRFNfUkVUVU5JTkc7CisKKwlpZiAodHVuaW5nX2NvdW50KSB7CiAJCWhvc3QtPmZsYWdzIHw9IFNESENJX1VTSU5HX1JFVFVOSU5HX1RJTUVSOwotCQltb2RfdGltZXIoJmhvc3QtPnR1bmluZ190aW1lciwgamlmZmllcyArCi0JCQlob3N0LT50dW5pbmdfY291bnQgKiBIWik7Ci0JCS8qIFR1bmluZyBtb2RlIDEgbGltaXRzIHRoZSBtYXhpbXVtIGRhdGEgbGVuZ3RoIHRvIDRNQiAqLwotCQltbWMtPm1heF9ibGtfY291bnQgPSAoNCAqIDEwMjQgKiAxMDI0KSAvIG1tYy0+bWF4X2Jsa19zaXplOwotCX0gZWxzZSBpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0lOR19SRVRVTklOR19USU1FUikgewotCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfTkVFRFNfUkVUVU5JTkc7Ci0JCS8qIFJlbG9hZCB0aGUgbmV3IGluaXRpYWwgdmFsdWUgZm9yIHRpbWVyICovCi0JCW1vZF90aW1lcigmaG9zdC0+dHVuaW5nX3RpbWVyLCBqaWZmaWVzICsKLQkJCSAgaG9zdC0+dHVuaW5nX2NvdW50ICogSFopOworCQltb2RfdGltZXIoJmhvc3QtPnR1bmluZ190aW1lciwgamlmZmllcyArIHR1bmluZ19jb3VudCAqIEhaKTsKIAl9CiAKIAkvKgpAQCAtMjA3MCw2ICsyMDkyLDcgQEAKIAogCXNkaGNpX3dyaXRlbChob3N0LCBob3N0LT5pZXIsIFNESENJX0lOVF9FTkFCTEUpOwogCXNkaGNpX3dyaXRlbChob3N0LCBob3N0LT5pZXIsIFNESENJX1NJR05BTF9FTkFCTEUpOworb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAJc2RoY2lfcnVudGltZV9wbV9wdXQoaG9zdCk7CiAKQEAgLTIxMTAsMTUgKzIxMzMsMTggQEAKIHsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcHJlc2VudDsKIAogCS8qIEZpcnN0IGNoZWNrIGlmIGNsaWVudCBoYXMgcHJvdmlkZWQgdGhlaXIgb3duIGNhcmQgZXZlbnQgKi8KIAlpZiAoaG9zdC0+b3BzLT5jYXJkX2V2ZW50KQogCQlob3N0LT5vcHMtPmNhcmRfZXZlbnQoaG9zdCk7CiAKKwlwcmVzZW50ID0gc2RoY2lfZG9fZ2V0X2NkKGhvc3QpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAogCS8qIENoZWNrIGhvc3QtPm1ycSBmaXJzdCBpbiBjYXNlIHdlIGFyZSBydW50aW1lIHN1c3BlbmRlZCAqLwotCWlmIChob3N0LT5tcnEgJiYgIXNkaGNpX2RvX2dldF9jZChob3N0KSkgeworCWlmIChob3N0LT5tcnEgJiYgIXByZXNlbnQpIHsKIAkJcHJfZXJyKCIlczogQ2FyZCByZW1vdmVkIGR1cmluZyB0cmFuc2ZlciFcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CiAJCXByX2VycigiJXM6IFJlc2V0dGluZyBjb250cm9sbGVyLlxuIiwKQEAgLTIxNDIsNiArMjE2OCw3IEBACiAJLmh3X3Jlc2V0CT0gc2RoY2lfaHdfcmVzZXQsCiAJLmVuYWJsZV9zZGlvX2lycSA9IHNkaGNpX2VuYWJsZV9zZGlvX2lycSwKIAkuc3RhcnRfc2lnbmFsX3ZvbHRhZ2Vfc3dpdGNoCT0gc2RoY2lfc3RhcnRfc2lnbmFsX3ZvbHRhZ2Vfc3dpdGNoLAorCS5wcmVwYXJlX2hzNDAwX3R1bmluZwkJPSBzZGhjaV9wcmVwYXJlX2hzNDAwX3R1bmluZywKIAkuZXhlY3V0ZV90dW5pbmcJCQk9IHNkaGNpX2V4ZWN1dGVfdHVuaW5nLAogCS5jYXJkX2V2ZW50CQkJPSBzZGhjaV9jYXJkX2V2ZW50LAogCS5jYXJkX2J1c3kJPSBzZGhjaV9jYXJkX2J1c3ksCkBAIC0zMjYwLDggKzMyODcsOSBAQAogCQltbWMtPm1heF9zZWdzID0gU0RIQ0lfTUFYX1NFR1M7CiAKIAkvKgotCSAqIE1heGltdW0gbnVtYmVyIG9mIHNlY3RvcnMgaW4gb25lIHRyYW5zZmVyLiBMaW1pdGVkIGJ5IERNQSBib3VuZGFyeQotCSAqIHNpemUgKDUxMktpQikuCisJICogTWF4aW11bSBudW1iZXIgb2Ygc2VjdG9ycyBpbiBvbmUgdHJhbnNmZXIuIExpbWl0ZWQgYnkgU0RNQSBib3VuZGFyeQorCSAqIHNpemUgKDUxMktpQikuIE5vdGUgc29tZSB0dW5pbmcgbW9kZXMgaW1wb3NlIGEgNE1pQiBsaW1pdCwgYnV0IHRoaXMKKwkgKiBpcyBsZXNzIGFueXdheS4KIAkgKi8KIAltbWMtPm1heF9yZXFfc2l6ZSA9IDUyNDI4ODsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggMTg0YzQzNC4uMGRjZWJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0xNjQ4LDcgKzE2NDgsNyBAQAogCS8qIHNsYXZlIGlzIG5vdCBhIHNsYXZlIG9yIG1hc3RlciBpcyBub3QgbWFzdGVyIG9mIHRoaXMgc2xhdmUgKi8KIAlpZiAoIShzbGF2ZV9kZXYtPmZsYWdzICYgSUZGX1NMQVZFKSB8fAogCSAgICAhbmV0ZGV2X2hhc191cHBlcl9kZXYoc2xhdmVfZGV2LCBib25kX2RldikpIHsKLQkJbmV0ZGV2X2Vycihib25kX2RldiwgImNhbm5vdCByZWxlYXNlICVzXG4iLAorCQluZXRkZXZfZGJnKGJvbmRfZGV2LCAiY2Fubm90IHJlbGVhc2UgJXNcbiIsCiAJCQkgICBzbGF2ZV9kZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfdmlydGlvLmMgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfdmlydGlvLmMKaW5kZXggYTVmZWZiOS4uYjMwNjIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3ZpcnRpby5jCisrKyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl92aXJ0aW8uYwpAQCAtMjU3LDcgKzI1Nyw2IEBACiAJc3RydWN0IHZyaW5naF9raW92ICpyaW92ID0gJmNmdi0+Y3R4LnJpb3Y7CiAJdW5zaWduZWQgaW50IHNrYl9sZW47CiAKLWFnYWluOgogCWRvIHsKIAkJc2tiID0gTlVMTDsKIApAQCAtMzIyLDcgKzMyMSw2IEBACiAJCSAgICBuYXBpX3NjaGVkdWxlX3ByZXAobmFwaSkpIHsKIAkJCXZyaW5naF9ub3RpZnlfZGlzYWJsZV9rZXJuKGNmdi0+dnJfcngpOwogCQkJX19uYXBpX3NjaGVkdWxlKG5hcGkpOwotCQkJZ290byBhZ2FpbjsKIAkJfQogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vY19jYW4vY19jYW4uYwppbmRleCBmOTRhOWZhLi5jNjcyYzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vY19jYW4vY19jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vY19jYW4vY19jYW4uYwpAQCAtNjE1LDYgKzYxNSw5IEBACiAKIAljX2Nhbl9pcnFfY29udHJvbChwcml2LCBmYWxzZSk7CiAKKwkvKiBwdXQgY3RybCB0byBpbml0IG9uIHN0b3AgdG8gZW5kIG9uZ29pbmcgdHJhbnNtaXNzaW9uICovCisJcHJpdi0+d3JpdGVfcmVnKHByaXYsIENfQ0FOX0NUUkxfUkVHLCBDT05UUk9MX0lOSVQpOworCiAJLyogZGVhY3RpdmF0ZSBwaW5zICovCiAJcGluY3RybF9wbV9zZWxlY3Rfc2xlZXBfc3RhdGUoZGV2LT5kZXYucGFyZW50KTsKIAlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbl9wbGF0Zm9ybS5jIGIvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuX3BsYXRmb3JtLmMKaW5kZXggZjM2Mzk3Mi4uZTM2ZDEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuX3BsYXRmb3JtLmMKQEAgLTEwMywyNyArMTAzLDM0IEBACiAJbWFzayA9IDEgPDwgcmFtaW5pdC0+Yml0cy5zdGFydCB8IDEgPDwgcmFtaW5pdC0+Yml0cy5kb25lOwogCXJlZ21hcF9yZWFkKHJhbWluaXQtPnN5c2NvbiwgcmFtaW5pdC0+cmVnLCAmY3RybCk7CiAKLQkvKiBXZSBjbGVhciB0aGUgZG9uZSBhbmQgc3RhcnQgYml0IGZpcnN0LiBUaGUgc3RhcnQgYml0IGlzCisJLyogV2UgY2xlYXIgdGhlIHN0YXJ0IGJpdCBmaXJzdC4gVGhlIHN0YXJ0IGJpdCBpcwogCSAqIGxvb2tpbmcgYXQgdGhlIDAgLT4gdHJhbnNpdGlvbiwgYnV0IGlzIG5vdCBzZWxmIGNsZWFyaW5nOwotCSAqIEFuZCB3ZSBjbGVhciB0aGUgaW5pdCBkb25lIGJpdCBhcyB3ZWxsLgogCSAqIE5PVEU6IERPTkUgbXVzdCBiZSB3cml0dGVuIHdpdGggMSB0byBjbGVhciBpdC4KKwkgKiBXZSBjYW4ndCBjbGVhciB0aGUgRE9ORSBiaXQgaGVyZSB1c2luZyByZWdtYXBfdXBkYXRlX2JpdHMoKQorCSAqIGFzIGl0IHdpbGwgYnlwYXNzIHRoZSB3cml0ZSBpZiBpbml0aWFsIGNvbmRpdGlvbiBpcyBTVEFSVDowIERPTkU6MQorCSAqIGUuZy4gb24gRFJBNyB3aGljaCBuZWVkcyBTVEFSVCBwdWxzZS4KIAkgKi8KLQljdHJsICY9IH4oMSA8PCByYW1pbml0LT5iaXRzLnN0YXJ0KTsKLQljdHJsIHw9IDEgPDwgcmFtaW5pdC0+Yml0cy5kb25lOwotCXJlZ21hcF93cml0ZShyYW1pbml0LT5zeXNjb24sIHJhbWluaXQtPnJlZywgY3RybCk7CisJY3RybCAmPSB+bWFzazsJLyogU1RBUlQgPSAwLCBET05FID0gMCAqLworCXJlZ21hcF91cGRhdGVfYml0cyhyYW1pbml0LT5zeXNjb24sIHJhbWluaXQtPnJlZywgbWFzaywgY3RybCk7CiAKLQljdHJsICY9IH4oMSA8PCByYW1pbml0LT5iaXRzLmRvbmUpOwotCWNfY2FuX2h3X3JhbWluaXRfd2FpdF9zeXNjb24ocHJpdiwgbWFzaywgY3RybCk7CisJLyogY2hlY2sgaWYgU1RBUlQgYml0IGlzIDAuIElnbm9yZSBET05FIGJpdCBmb3Igbm93CisJICogYXMgaXQgY2FuIGJlIGVpdGhlciAwIG9yIDEuCisJICovCisJY19jYW5faHdfcmFtaW5pdF93YWl0X3N5c2Nvbihwcml2LCAxIDw8IHJhbWluaXQtPmJpdHMuc3RhcnQsIGN0cmwpOwogCiAJaWYgKGVuYWJsZSkgewotCQkvKiBTZXQgc3RhcnQgYml0IGFuZCB3YWl0IGZvciB0aGUgZG9uZSBiaXQuICovCisJCS8qIENsZWFyIERPTkUgYml0ICYgc2V0IFNUQVJUIGJpdC4gKi8KIAkJY3RybCB8PSAxIDw8IHJhbWluaXQtPmJpdHMuc3RhcnQ7Ci0JCXJlZ21hcF93cml0ZShyYW1pbml0LT5zeXNjb24sIHJhbWluaXQtPnJlZywgY3RybCk7Ci0KKwkJLyogRE9ORSBtdXN0IGJlIHdyaXR0ZW4gd2l0aCAxIHRvIGNsZWFyIGl0ICovCisJCWN0cmwgfD0gMSA8PCByYW1pbml0LT5iaXRzLmRvbmU7CisJCXJlZ21hcF91cGRhdGVfYml0cyhyYW1pbml0LT5zeXNjb24sIHJhbWluaXQtPnJlZywgbWFzaywgY3RybCk7CisJCS8qIHByZXZlbnQgZnVydGhlciBjbGVhcmluZyBvZiBET05FIGJpdCAqLworCQljdHJsICY9IH4oMSA8PCByYW1pbml0LT5iaXRzLmRvbmUpOwogCQkvKiBjbGVhciBTVEFSVCBiaXQgaWYgc3RhcnQgcHVsc2UgaXMgbmVlZGVkICovCiAJCWlmIChyYW1pbml0LT5uZWVkc19wdWxzZSkgewogCQkJY3RybCAmPSB+KDEgPDwgcmFtaW5pdC0+Yml0cy5zdGFydCk7Ci0JCQlyZWdtYXBfd3JpdGUocmFtaW5pdC0+c3lzY29uLCByYW1pbml0LT5yZWcsIGN0cmwpOworCQkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJhbWluaXQtPnN5c2NvbiwgcmFtaW5pdC0+cmVnLAorCQkJCQkgICBtYXNrLCBjdHJsKTsKIAkJfQogCiAJCWN0cmwgfD0gMSA8PCByYW1pbml0LT5iaXRzLmRvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2LmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2LmMKaW5kZXggM2VjOGY2Zi4uODQ3YzFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYwpAQCAtODA3LDEwICs4MDcsMTQgQEAKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCiAJCQlyZXR1cm4gLUVCVVNZOwogCQljbSA9IG5sYV9kYXRhKGRhdGFbSUZMQV9DQU5fQ1RSTE1PREVdKTsKLQkJaWYgKGNtLT5mbGFncyAmIH5wcml2LT5jdHJsbW9kZV9zdXBwb3J0ZWQpCisKKwkJLyogY2hlY2sgd2hldGhlciBjaGFuZ2VkIGJpdHMgYXJlIGFsbG93ZWQgdG8gYmUgbW9kaWZpZWQgKi8KKwkJaWYgKGNtLT5tYXNrICYgfnByaXYtPmN0cmxtb2RlX3N1cHBvcnRlZCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCQkvKiBjbGVhciBiaXRzIHRvIGJlIG1vZGlmaWVkIGFuZCBjb3B5IHRoZSBmbGFnIHZhbHVlcyAqLwogCQlwcml2LT5jdHJsbW9kZSAmPSB+Y20tPm1hc2s7Ci0JCXByaXYtPmN0cmxtb2RlIHw9IGNtLT5mbGFnczsKKwkJcHJpdi0+Y3RybG1vZGUgfD0gKGNtLT5mbGFncyAmIGNtLT5tYXNrKTsKIAogCQkvKiBDQU5fQ1RSTE1PREVfRkQgY2FuIG9ubHkgYmUgc2V0IHdoZW4gZHJpdmVyIHN1cHBvcnRzIEZEICovCiAJCWlmIChwcml2LT5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9GRCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9tX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL21fY2FuL21fY2FuLmMKaW5kZXggZDdiYzQ2Mi4uMjQ0NTI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21fY2FuL21fY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21fY2FuL21fY2FuLmMKQEAgLTk1NSw2ICs5NTUsMTEgQEAKIAlwcml2LT5jYW4uZGF0YV9iaXR0aW1pbmdfY29uc3QgPSAmbV9jYW5fZGF0YV9iaXR0aW1pbmdfY29uc3Q7CiAJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gbV9jYW5fc2V0X21vZGU7CiAJcHJpdi0+Y2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBtX2Nhbl9nZXRfYmVycl9jb3VudGVyOworCisJLyogQ0FOX0NUUkxNT0RFX0ZEX05PTl9JU08gaXMgZml4ZWQgd2l0aCBNX0NBTiBJUCB2My4wLjEgKi8KKwlwcml2LT5jYW4uY3RybG1vZGUgPSBDQU5fQ1RSTE1PREVfRkRfTk9OX0lTTzsKKworCS8qIENBTl9DVFJMTU9ERV9GRF9OT05fSVNPIGNhbiBub3QgYmUgY2hhbmdlZCB3aXRoIE1fQ0FOIElQIHYzLjAuMSAqLwogCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfTE9PUEJBQ0sgfAogCQkJCQlDQU5fQ1RSTE1PREVfTElTVEVOT05MWSB8CiAJCQkJCUNBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORyB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi5jCmluZGV4IDU0MWZiN2EuLjdhZjM3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi5jCkBAIC01MjAsMTAgKzUyMCwxMCBAQAogCQlza2IgPSBhbGxvY19jYW5fZXJyX3NrYihwcml2LT5uZXRkZXYsICZjZik7CiAJCWlmIChza2IpIHsKIAkJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9SRVNUQVJURUQ7Ci0JCQluZXRpZl9yeChza2IpOwogCiAJCQlzdGF0cy0+cnhfcGFja2V0cysrOwogCQkJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5jYW5fZGxjOworCQkJbmV0aWZfcngoc2tiKTsKIAkJfSBlbHNlIHsKIAkJCW5ldGRldl9lcnIocHJpdi0+bmV0ZGV2LAogCQkJCSAgICJObyBtZW1vcnkgbGVmdCBmb3IgZXJyX3NrYlxuIik7CkBAIC01ODcsNyArNTg3LDcgQEAKIAkJCSAgdXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwKIAkJCQkJICBkZXYtPmJ1bGtfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKSwKIAkJCSAgYnVmLCBtc2ctPmxlbiwKLQkJCSAga3Zhc2VyX3VzYl9zaW1wbGVfbXNnX2NhbGxiYWNrLCBwcml2KTsKKwkJCSAga3Zhc2VyX3VzYl9zaW1wbGVfbXNnX2NhbGxiYWNrLCBuZXRkZXYpOwogCXVzYl9hbmNob3JfdXJiKHVyYiwgJnByaXYtPnR4X3N1Ym1pdHRlZCk7CiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwpAQCAtNjYyLDExICs2NjIsNiBAQAogCXByaXYgPSBkZXYtPm5ldHNbY2hhbm5lbF07CiAJc3RhdHMgPSAmcHJpdi0+bmV0ZGV2LT5zdGF0czsKIAotCWlmIChzdGF0dXMgJiBNMTZDX1NUQVRFX0JVU19SRVNFVCkgewotCQlrdmFzZXJfdXNiX3VubGlua190eF91cmJzKHByaXYpOwotCQlyZXR1cm47Ci0JfQotCiAJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IocHJpdi0+bmV0ZGV2LCAmY2YpOwogCWlmICghc2tiKSB7CiAJCXN0YXRzLT5yeF9kcm9wcGVkKys7CkBAIC02NzcsNyArNjcyLDcgQEAKIAogCW5ldGRldl9kYmcocHJpdi0+bmV0ZGV2LCAiRXJyb3Igc3RhdHVzOiAweCUwMnhcbiIsIHN0YXR1cyk7CiAKLQlpZiAoc3RhdHVzICYgTTE2Q19TVEFURV9CVVNfT0ZGKSB7CisJaWYgKHN0YXR1cyAmIChNMTZDX1NUQVRFX0JVU19PRkYgfCBNMTZDX1NUQVRFX0JVU19SRVNFVCkpIHsKIAkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU09GRjsKIAogCQlwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19vZmYrKzsKQEAgLTcwMyw5ICs2OTgsNyBAQAogCQl9CiAKIAkJbmV3X3N0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkU7Ci0JfQotCi0JaWYgKHN0YXR1cyA9PSBNMTZDX1NUQVRFX0JVU19FUlJPUikgeworCX0gZWxzZSBpZiAoc3RhdHVzICYgTTE2Q19TVEFURV9CVVNfRVJST1IpIHsKIAkJaWYgKChwcml2LT5jYW4uc3RhdGUgPCBDQU5fU1RBVEVfRVJST1JfV0FSTklORykgJiYKIAkJICAgICgodHhlcnIgPj0gOTYpIHx8IChyeGVyciA+PSA5NikpKSB7CiAJCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKQEAgLTcxNSw3ICs3MDgsOCBAQAogCiAJCQlwcml2LT5jYW4uY2FuX3N0YXRzLmVycm9yX3dhcm5pbmcrKzsKIAkJCW5ld19zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9XQVJOSU5HOwotCQl9IGVsc2UgaWYgKHByaXYtPmNhbi5zdGF0ZSA+IENBTl9TVEFURV9FUlJPUl9BQ1RJVkUpIHsKKwkJfSBlbHNlIGlmICgocHJpdi0+Y2FuLnN0YXRlID4gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRSkgJiYKKwkJCSAgICgodHhlcnIgPCA5NikgJiYgKHJ4ZXJyIDwgOTYpKSkgewogCQkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX1BST1Q7CiAJCQljZi0+ZGF0YVsyXSA9IENBTl9FUlJfUFJPVF9BQ1RJVkU7CiAKQEAgLTc3MCwxMCArNzY0LDkgQEAKIAogCXByaXYtPmNhbi5zdGF0ZSA9IG5ld19zdGF0ZTsKIAotCW5ldGlmX3J4KHNrYik7Ci0KIAlzdGF0cy0+cnhfcGFja2V0cysrOwogCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKKwluZXRpZl9yeChza2IpOwogfQogCiBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX3J4X2Nhbl9lcnIoY29uc3Qgc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKnByaXYsCkBAIC04MDUsMTAgKzc5OCw5IEBACiAJCXN0YXRzLT5yeF9vdmVyX2Vycm9ycysrOwogCQlzdGF0cy0+cnhfZXJyb3JzKys7CiAKLQkJbmV0aWZfcngoc2tiKTsKLQogCQlzdGF0cy0+cnhfcGFja2V0cysrOwogCQlzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7CisJCW5ldGlmX3J4KHNrYik7CiAJfQogfQogCkBAIC04ODcsMTAgKzg3OSw5IEBACiAJCQkgICAgICAgY2YtPmNhbl9kbGMpOwogCX0KIAotCW5ldGlmX3J4KHNrYik7Ci0KIAlzdGF0cy0+cnhfcGFja2V0cysrOwogCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKKwluZXRpZl9yeChza2IpOwogfQogCiBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX3N0YXJ0X2NoaXBfcmVwbHkoY29uc3Qgc3RydWN0IGt2YXNlcl91c2IgKmRldiwKQEAgLTEyNDYsNiArMTIzNyw5IEBACiAJaWYgKGVycikKIAkJbmV0ZGV2X3dhcm4obmV0ZGV2LCAiQ2Fubm90IHN0b3AgZGV2aWNlLCBlcnJvciAlZFxuIiwgZXJyKTsKIAorCS8qIHJlc2V0IHR4IGNvbnRleHRzICovCisJa3Zhc2VyX3VzYl91bmxpbmtfdHhfdXJicyhwcml2KTsKKwogCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TVE9QUEVEOwogCWNsb3NlX2NhbmRldihwcml2LT5uZXRkZXYpOwogCkBAIC0xMjk0LDEyICsxMjg4LDE0IEBACiAJaWYgKCF1cmIpIHsKIAkJbmV0ZGV2X2VycihuZXRkZXYsICJObyBtZW1vcnkgbGVmdCBmb3IgVVJCc1xuIik7CiAJCXN0YXRzLT50eF9kcm9wcGVkKys7Ci0JCWdvdG8gbm91cmJtZW07CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3Zhc2VyX21zZyksIEdGUF9BVE9NSUMpOwogCWlmICghYnVmKSB7CiAJCXN0YXRzLT50eF9kcm9wcGVkKys7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJZ290byBub2J1Zm1lbTsKIAl9CiAKQEAgLTEzMzQsNiArMTMzMCw3IEBACiAJCX0KIAl9CiAKKwkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW47IGl0IGltcGxpZXMgYSBmbG93IGNvbnRyb2wgYnVnICovCiAJaWYgKCFjb250ZXh0KSB7CiAJCW5ldGRldl93YXJuKG5ldGRldiwgImNhbm5vdCBmaW5kIGZyZWUgY29udGV4dFxuIik7CiAJCXJldCA9ICBORVRERVZfVFhfQlVTWTsKQEAgLTEzNjQsOSArMTM2MSw2IEBACiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJY2FuX2ZyZWVfZWNob19za2IobmV0ZGV2LCBjb250ZXh0LT5lY2hvX2luZGV4KTsKIAotCQlza2IgPSBOVUxMOyAvKiBzZXQgdG8gTlVMTCB0byBhdm9pZCBkb3VibGUgZnJlZSBpbgotCQkJICAgICAqIGRldl9rZnJlZV9za2Ioc2tiKSAqLwotCiAJCWF0b21pY19kZWMoJnByaXYtPmFjdGl2ZV90eF91cmJzKTsKIAkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwogCkBAIC0xMzg4LDggKzEzODIsNiBAQAogCWtmcmVlKGJ1Zik7CiBub2J1Zm1lbToKIAl1c2JfZnJlZV91cmIodXJiKTsKLW5vdXJibWVtOgotCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTAyLDYgKzE0OTQsMTAgQEAKIAlzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqcHJpdjsKIAlpbnQgaSwgZXJyOwogCisJZXJyID0ga3Zhc2VyX3VzYl9zZW5kX3NpbXBsZV9tc2coZGV2LCBDTURfUkVTRVRfQ0hJUCwgY2hhbm5lbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCW5ldGRldiA9IGFsbG9jX2NhbmRldihzaXplb2YoKnByaXYpLCBNQVhfVFhfVVJCUyk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ2Fubm90IGFsbG9jIGNhbmRldlxuIik7CkBAIC0xNTg4LDcgKzE1ODQsNyBAQAogewogCXN0cnVjdCBrdmFzZXJfdXNiICpkZXY7CiAJaW50IGVyciA9IC1FTk9NRU07Ci0JaW50IGk7CisJaW50IGksIHJldHJ5ID0gMzsKIAogCWRldiA9IGRldm1fa3phbGxvYygmaW50Zi0+ZGV2LCBzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KQpAQCAtMTYwNiwxMCArMTYwMiwxNSBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9ORVRfREVWSUNFUzsgaSsrKQotCQlrdmFzZXJfdXNiX3NlbmRfc2ltcGxlX21zZyhkZXYsIENNRF9SRVNFVF9DSElQLCBpKTsKKwkvKiBPbiBzb21lIHg4NiBsYXB0b3BzLCBwbHVnZ2luZyBhIEt2YXNlciBkZXZpY2UgYWdhaW4gYWZ0ZXIKKwkgKiBhbiB1bnBsdWcgbWFrZXMgdGhlIGZpcm13YXJlIGFsd2F5cyBpZ25vcmUgdGhlIHZlcnkgZmlyc3QKKwkgKiBjb21tYW5kLiBGb3Igc3VjaCBhIGNhc2UsIHByb3ZpZGUgc29tZSByb29tIGZvciByZXRyaWVzCisJICogaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGV4aXRpbmcgdGhlIGRyaXZlci4KKwkgKi8KKwlkbyB7CisJCWVyciA9IGt2YXNlcl91c2JfZ2V0X3NvZnR3YXJlX2luZm8oZGV2KTsKKwl9IHdoaWxlICgtLXJldHJ5ICYmIGVyciA9PSAtRVRJTUVET1VUKTsKIAotCWVyciA9IGt2YXNlcl91c2JfZ2V0X3NvZnR3YXJlX2luZm8oZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwKIAkJCSJDYW5ub3QgZ2V0IHNvZnR3YXJlIGluZm9zLCBlcnJvciAlZFxuIiwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbmUyay1wY2kuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbmUyay1wY2kuYwppbmRleCA4OWM4ZDlmLi41N2U5NzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL25lMmstcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9uZTJrLXBjaS5jCkBAIC0yNDYsMTMgKzI0NiwxMyBAQAogCiAJaWYgKCFpb2FkZHIgfHwgKChwY2lfcmVzb3VyY2VfZmxhZ3MgKHBkZXYsIDApICYgSU9SRVNPVVJDRV9JTykgPT0gMCkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gSS9PIHJlc291cmNlIGF0IFBDSSBCQVIgIzBcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0OwogCX0KIAogCWlmIChyZXF1ZXN0X3JlZ2lvbiAoaW9hZGRyLCBORV9JT19FWFRFTlQsIERSVl9OQU1FKSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkkvTyByZXNvdXJjZSAweCV4IEAgMHglbHggYnVzeVxuIiwKIAkJCU5FX0lPX0VYVEVOVCwgaW9hZGRyKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJZ290byBlcnJfb3V0OwogCX0KIAogCXJlZzAgPSBpbmIoaW9hZGRyKTsKQEAgLTM5Miw2ICszOTIsOCBAQAogCWZyZWVfbmV0ZGV2IChkZXYpOwogZXJyX291dF9mcmVlX3JlczoKIAlyZWxlYXNlX3JlZ2lvbiAoaW9hZGRyLCBORV9JT19FWFRFTlQpOworZXJyX291dDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnCmluZGV4IGRmNzYwNTAuLmVhZGNiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwpAQCAtMTU2LDE4ICsxNTYsNiBAQAogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvS2NvbmZpZyIKLQotY29uZmlnIFM2R01BQwotCXRyaXN0YXRlICJTNjEwNSBHTUFDIGV0aGVybmV0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBYVEVOU0FfVkFSSUFOVF9TNjAwMAotCXNlbGVjdCBQSFlMSUIKLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgb24gY2hpcCBldGhlcm5ldCBkZXZpY2Ugb24gdGhlCi0JICBTNjEwNSB4dGVuc2EgcHJvY2Vzc29yLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBzNmdtYWMuCi0KIHNvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZWVxL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L2V0aGVybmV0L3NpbGFuL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlCmluZGV4IGJmNTZmOGIuLjEzNjdhZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlCkBAIC02Niw3ICs2Niw2IEBACiBvYmotJChDT05GSUdfU0hfRVRIKSArPSByZW5lc2FzLwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUkRDKSArPSByZGMvCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVIpICs9IHJvY2tlci8KLW9iai0kKENPTkZJR19TNkdNQUMpICs9IHM2Z21hYy5vCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HKSArPSBzYW1zdW5nLwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfU0VFUSkgKz0gc2VlcS8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NJTEFOKSArPSBzaWxhbi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsbHdpbm5lci9zdW40aS1lbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGx3aW5uZXIvc3VuNGktZW1hYy5jCmluZGV4IDFmY2Q1NTYuLmYzNDcwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsbHdpbm5lci9zdW40aS1lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxsd2lubmVyL3N1bjRpLWVtYWMuYwpAQCAtODUwLDggKzg1MCwxMCBAQAogCX0KIAogCWRiLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihkYi0+Y2xrKSkKKwlpZiAoSVNfRVJSKGRiLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZGItPmNsayk7CiAJCWdvdG8gb3V0OworCX0KIAogCWNsa19wcmVwYXJlX2VuYWJsZShkYi0+Y2xrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jCmluZGV4IDM0OTg3NjAuLjc2MGM3MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMKQEAgLTExNzAsMTAgKzExNzAsNiBAQAogaW5pdF9lcnJvcjoKIAlmcmVlX3NrYnVmcyhkZXYpOwogYWxsb2Nfc2tidWZfZXJyb3I6Ci0JaWYgKHByaXYtPnBoeWRldikgewotCQlwaHlfZGlzY29ubmVjdChwcml2LT5waHlkZXYpOwotCQlwcml2LT5waHlkZXYgPSBOVUxMOwotCX0KIHBoeV9lcnJvcjoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE4NiwxMiArMTE4Miw5IEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGludCBmbGFnczsKIAotCS8qIFN0b3AgYW5kIGRpc2Nvbm5lY3QgdGhlIFBIWSAqLwotCWlmIChwcml2LT5waHlkZXYpIHsKKwkvKiBTdG9wIHRoZSBQSFkgKi8KKwlpZiAocHJpdi0+cGh5ZGV2KQogCQlwaHlfc3RvcChwcml2LT5waHlkZXYpOwotCQlwaHlfZGlzY29ubmVjdChwcml2LT5waHlkZXYpOwotCQlwcml2LT5waHlkZXYgPSBOVUxMOwotCX0KIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwpAQCAtMTUyNSw2ICsxNTE4LDEwIEBACiBzdGF0aWMgaW50IGFsdGVyYV90c2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYWx0ZXJhX3RzZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlpZiAocHJpdi0+cGh5ZGV2KQorCQlwaHlfZGlzY29ubmVjdChwcml2LT5waHlkZXYpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJYWx0ZXJhX3RzZV9tZGlvX2Rlc3Ryb3kobmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWNvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1jb21tb24uaAppbmRleCA3NWIwOGM2Li4yOWEwOTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtY29tbW9uLmgKQEAgLTc2NywxNiArNzY3LDE3IEBACiAjZGVmaW5lIE1UTF9RX1JRT01SCQkJMHg0MAogI2RlZmluZSBNVExfUV9SUU1QT0NSCQkJMHg0NAogI2RlZmluZSBNVExfUV9SUURSCQkJMHg0YworI2RlZmluZSBNVExfUV9SUUZDUgkJCTB4NTAKICNkZWZpbmUgTVRMX1FfSUVSCQkJMHg3MAogI2RlZmluZSBNVExfUV9JU1IJCQkweDc0CiAKIC8qIE1UTCBxdWV1ZSByZWdpc3RlciBlbnRyeSBiaXQgcG9zaXRpb25zIGFuZCBzaXplcyAqLworI2RlZmluZSBNVExfUV9SUUZDUl9SRkFfSU5ERVgJCTEKKyNkZWZpbmUgTVRMX1FfUlFGQ1JfUkZBX1dJRFRICQk2CisjZGVmaW5lIE1UTF9RX1JRRkNSX1JGRF9JTkRFWAkJMTcKKyNkZWZpbmUgTVRMX1FfUlFGQ1JfUkZEX1dJRFRICQk2CiAjZGVmaW5lIE1UTF9RX1JRT01SX0VIRkNfSU5ERVgJCTcKICNkZWZpbmUgTVRMX1FfUlFPTVJfRUhGQ19XSURUSAkJMQotI2RlZmluZSBNVExfUV9SUU9NUl9SRkFfSU5ERVgJCTgKLSNkZWZpbmUgTVRMX1FfUlFPTVJfUkZBX1dJRFRICQkzCi0jZGVmaW5lIE1UTF9RX1JRT01SX1JGRF9JTkRFWAkJMTMKLSNkZWZpbmUgTVRMX1FfUlFPTVJfUkZEX1dJRFRICQkzCiAjZGVmaW5lIE1UTF9RX1JRT01SX1JRU19JTkRFWAkJMTYKICNkZWZpbmUgTVRMX1FfUlFPTVJfUlFTX1dJRFRICQk5CiAjZGVmaW5lIE1UTF9RX1JRT01SX1JTRl9JTkRFWAkJNQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kZXYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZGV2LmMKaW5kZXggNTNmNWY2Ni4uNGM2NmNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kZXYuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRldi5jCkBAIC0yMDc5LDEwICsyMDc5LDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPnJ4X3FfY291bnQ7IGkrKykgewogCQkvKiBBY3RpdmF0ZSBmbG93IGNvbnRyb2wgd2hlbiBsZXNzIHRoYW4gNGsgbGVmdCBpbiBmaWZvICovCi0JCVhHTUFDX01UTF9JT1dSSVRFX0JJVFMocGRhdGEsIGksIE1UTF9RX1JRT01SLCBSRkEsIDIpOworCQlYR01BQ19NVExfSU9XUklURV9CSVRTKHBkYXRhLCBpLCBNVExfUV9SUUZDUiwgUkZBLCAyKTsKIAogCQkvKiBEZS1hY3RpdmF0ZSBmbG93IGNvbnRyb2wgd2hlbiBtb3JlIHRoYW4gNmsgbGVmdCBpbiBmaWZvICovCi0JCVhHTUFDX01UTF9JT1dSSVRFX0JJVFMocGRhdGEsIGksIE1UTF9RX1JRT01SLCBSRkQsIDQpOworCQlYR01BQ19NVExfSU9XUklURV9CSVRTKHBkYXRhLCBpLCBNVExfUV9SUUZDUiwgUkZELCA0KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWx4L21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWx4L21haW4uYwppbmRleCBlMzk4ZWRhLi5jOGFmM2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FseC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hbHgvbWFpbi5jCkBAIC0xODQsMTUgKzE4NCwxNiBAQAogCXNjaGVkdWxlX3dvcmsoJmFseC0+cmVzZXRfd2spOwogfQogCi1zdGF0aWMgYm9vbCBhbHhfY2xlYW5fcnhfaXJxKHN0cnVjdCBhbHhfcHJpdiAqYWx4LCBpbnQgYnVkZ2V0KQorc3RhdGljIGludCBhbHhfY2xlYW5fcnhfaXJxKHN0cnVjdCBhbHhfcHJpdiAqYWx4LCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBhbHhfcnhfcXVldWUgKnJ4cSA9ICZhbHgtPnJ4cTsKIAlzdHJ1Y3QgYWx4X3JyZCAqcnJkOwogCXN0cnVjdCBhbHhfYnVmZmVyICpyeGI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MTYgbGVuZ3RoLCByZmRfY2xlYW5lZCA9IDA7CisJaW50IHdvcmsgPSAwOwogCi0Jd2hpbGUgKGJ1ZGdldCA+IDApIHsKKwl3aGlsZSAod29yayA8IGJ1ZGdldCkgewogCQlycmQgPSAmcnhxLT5ycmRbcnhxLT5ycmRfcmVhZF9pZHhdOwogCQlpZiAoIShycmQtPndvcmQzICYgY3B1X3RvX2xlMzIoMSA8PCBSUkRfVVBEQVRFRF9TSElGVCkpKQogCQkJYnJlYWs7CkBAIC0yMDMsNyArMjA0LDcgQEAKIAkJICAgIEFMWF9HRVRfRklFTEQobGUzMl90b19jcHUocnJkLT53b3JkMCksCiAJCQkJICBSUkRfTk9SKSAhPSAxKSB7CiAJCQlhbHhfc2NoZWR1bGVfcmVzZXQoYWx4KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIHdvcms7CiAJCX0KIAogCQlyeGIgPSAmcnhxLT5idWZzW3J4cS0+cmVhZF9pZHhdOwpAQCAtMjQzLDcgKzI0NCw3IEBACiAJCX0KIAogCQluYXBpX2dyb19yZWNlaXZlKCZhbHgtPm5hcGksIHNrYik7Ci0JCWJ1ZGdldC0tOworCQl3b3JrKys7CiAKIG5leHRfcGt0OgogCQlpZiAoKytyeHEtPnJlYWRfaWR4ID09IGFseC0+cnhfcmluZ3N6KQpAQCAtMjU4LDIxICsyNTksMjIgQEAKIAlpZiAocmZkX2NsZWFuZWQpCiAJCWFseF9yZWZpbGxfcnhfcmluZyhhbHgsIEdGUF9BVE9NSUMpOwogCi0JcmV0dXJuIGJ1ZGdldCA+IDA7CisJcmV0dXJuIHdvcms7CiB9CiAKIHN0YXRpYyBpbnQgYWx4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBhbHhfcHJpdiAqYWx4ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBhbHhfcHJpdiwgbmFwaSk7CiAJc3RydWN0IGFseF9odyAqaHcgPSAmYWx4LT5odzsKLQlib29sIGNvbXBsZXRlID0gdHJ1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgdHhfY29tcGxldGU7CisJaW50IHdvcms7CiAKLQljb21wbGV0ZSA9IGFseF9jbGVhbl90eF9pcnEoYWx4KSAmJgotCQkgICBhbHhfY2xlYW5fcnhfaXJxKGFseCwgYnVkZ2V0KTsKKwl0eF9jb21wbGV0ZSA9IGFseF9jbGVhbl90eF9pcnEoYWx4KTsKKwl3b3JrID0gYWx4X2NsZWFuX3J4X2lycShhbHgsIGJ1ZGdldCk7CiAKLQlpZiAoIWNvbXBsZXRlKQotCQlyZXR1cm4gMTsKKwlpZiAoIXR4X2NvbXBsZXRlIHx8IHdvcmsgPT0gYnVkZ2V0KQorCQlyZXR1cm4gYnVkZ2V0OwogCiAJbmFwaV9jb21wbGV0ZSgmYWx4LT5uYXBpKTsKIApAQCAtMjg0LDcgKzI4Niw3IEBACiAKIAlhbHhfcG9zdF93cml0ZShodyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gd29yazsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGFseF9pbnRyX2hhbmRsZShzdHJ1Y3QgYWx4X3ByaXYgKmFseCwgdTMyIGludHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYwppbmRleCAwNWM2YWY2Li4zMDA3ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMKQEAgLTExNjcsMTAgKzExNjcsMTAgQEAKIAkJYmdtYWMtPmludF9zdGF0dXMgPSAwOwogCX0KIAotCWlmIChoYW5kbGVkIDwgd2VpZ2h0KQorCWlmIChoYW5kbGVkIDwgd2VpZ2h0KSB7CiAJCW5hcGlfY29tcGxldGUobmFwaSk7Ci0KLQliZ21hY19jaGlwX2ludHJzX29uKGJnbWFjKTsKKwkJYmdtYWNfY2hpcF9pbnRyc19vbihiZ21hYyk7CisJfQogCiAJcmV0dXJuIGhhbmRsZWQ7CiB9CkBAIC0xNTE1LDYgKzE1MTUsOCBAQAogCWlmIChjb3JlLT5idXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCR01BQ19CRkxfRU5FVEFETSkKIAkJYmdtYWNfd2FybihiZ21hYywgIlN1cHBvcnQgZm9yIEFETXRlayBldGhlcm5ldCBzd2l0Y2ggbm90IGltcGxlbWVudGVkXG4iKTsKIAorCW5ldGlmX25hcGlfYWRkKG5ldF9kZXYsICZiZ21hYy0+bmFwaSwgYmdtYWNfcG9sbCwgQkdNQUNfV0VJR0hUKTsKKwogCWVyciA9IGJnbWFjX21paV9yZWdpc3RlcihiZ21hYyk7CiAJaWYgKGVycikgewogCQliZ21hY19lcnIoYmdtYWMsICJDYW5ub3QgcmVnaXN0ZXIgTURJT1xuIik7CkBAIC0xNTI5LDggKzE1MzEsNiBAQAogCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0X2Rldik7CiAKLQluZXRpZl9uYXBpX2FkZChuZXRfZGV2LCAmYmdtYWMtPm5hcGksIGJnbWFjX3BvbGwsIEJHTUFDX1dFSUdIVCk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyX21paV91bnJlZ2lzdGVyOgpAQCAtMTU0OSw5ICsxNTQ5LDkgQEAKIHsKIAlzdHJ1Y3QgYmdtYWMgKmJnbWFjID0gYmNtYV9nZXRfZHJ2ZGF0YShjb3JlKTsKIAotCW5ldGlmX25hcGlfZGVsKCZiZ21hYy0+bmFwaSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoYmdtYWMtPm5ldF9kZXYpOwogCWJnbWFjX21paV91bnJlZ2lzdGVyKGJnbWFjKTsKKwluZXRpZl9uYXBpX2RlbCgmYmdtYWMtPm5hcGkpOwogCWJnbWFjX2RtYV9mcmVlKGJnbWFjKTsKIAliY21hX3NldF9kcnZkYXRhKGNvcmUsIE5VTEwpOwogCWZyZWVfbmV0ZGV2KGJnbWFjLT5uZXRfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMKaW5kZXggMWQxMTQ3Yy4uZTQ2OGVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMKQEAgLTMxNzUsNyArMzE3NSw3IEBACiAJCX0KICNlbmRpZgogCQlpZiAoIWJueDJ4X2ZwX2xvY2tfbmFwaShmcCkpCi0JCQlyZXR1cm4gd29ya19kb25lOworCQkJcmV0dXJuIGJ1ZGdldDsKIAogCQlmb3JfZWFjaF9jb3NfaW5fdHhfcXVldWUoZnAsIGNvcykKIAkJCWlmIChibngyeF90eF9xdWV1ZV9oYXNfd29yayhmcC0+dHhkYXRhX3B0cltjb3NdKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X21haW4uYwppbmRleCA5ZjVlMzg3Li43MmVlZjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfbWFpbi5jCkBAIC0xMjU1Myw5ICsxMjU1MywxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbCBibngyeF9nc29fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBibngyeF9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIHsKLQlyZXR1cm4gdnhsYW5fZ3NvX2NoZWNrKHNrYik7CisJcmV0dXJuIHZ4bGFuX2ZlYXR1cmVzX2NoZWNrKHNrYiwgZmVhdHVyZXMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJueDJ4X25ldGRldl9vcHMgPSB7CkBAIC0xMjU4OSw3ICsxMjU5MSw3IEBACiAjZW5kaWYKIAkubmRvX2dldF9waHlzX3BvcnRfaWQJPSBibngyeF9nZXRfcGh5c19wb3J0X2lkLAogCS5uZG9fc2V0X3ZmX2xpbmtfc3RhdGUJPSBibngyeF9zZXRfdmZfbGlua19zdGF0ZSwKLQkubmRvX2dzb19jaGVjawkJPSBibngyeF9nc29fY2hlY2ssCisJLm5kb19mZWF0dXJlc19jaGVjawk9IGJueDJ4X2ZlYXR1cmVzX2NoZWNrLAogfTsKIAogc3RhdGljIGludCBibngyeF9zZXRfY29oZXJlbmN5X21hc2soc3RydWN0IGJueDJ4ICpicCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMKaW5kZXggYmI0OGE2MS4uOTZiZjAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMKQEAgLTc0MTMsNiArNzQxMyw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHRnM19pcnFfcXVpZXNjZShzdHJ1Y3QgdGczICp0cCkKKwlfX3JlbGVhc2VzKHRwLT5sb2NrKQorCV9fYWNxdWlyZXModHAtPmxvY2spCiB7CiAJaW50IGk7CiAKQEAgLTc0MjEsOCArNzQyMywxMiBAQAogCXRwLT5pcnFfc3luYyA9IDE7CiAJc21wX21iKCk7CiAKKwlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOworCiAJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspCiAJCXN5bmNocm9uaXplX2lycSh0cC0+bmFwaVtpXS5pcnFfdmVjKTsKKworCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwogfQogCiAvKiBGdWxseSBzaHV0ZG93biBhbGwgdGczIGRyaXZlciBhY3Rpdml0eSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbS4KQEAgLTkwMTgsNiArOTAyNCw4IEBACiAKIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCiBzdGF0aWMgaW50IHRnM19jaGlwX3Jlc2V0KHN0cnVjdCB0ZzMgKnRwKQorCV9fcmVsZWFzZXModHAtPmxvY2spCisJX19hY3F1aXJlcyh0cC0+bG9jaykKIHsKIAl1MzIgdmFsOwogCXZvaWQgKCp3cml0ZV9vcCkoc3RydWN0IHRnMyAqLCB1MzIsIHUzMik7CkBAIC05MDczLDkgKzkwODEsMTMgQEAKIAl9CiAJc21wX21iKCk7CiAKKwl0ZzNfZnVsbF91bmxvY2sodHApOworCiAJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspCiAJCXN5bmNocm9uaXplX2lycSh0cC0+bmFwaVtpXS5pcnFfdmVjKTsKIAorCXRnM19mdWxsX2xvY2sodHAsIDApOworCiAJaWYgKHRnM19hc2ljX3Jldih0cCkgPT0gQVNJQ19SRVZfNTc3ODApIHsKIAkJdmFsID0gdHIzMihURzNfUENJRV9MTktDVEwpICYgflRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRU47CiAJCXR3MzIoVEczX1BDSUVfTE5LQ1RMLCB2YWwgfCBURzNfUENJRV9MTktDVExfTDFfUExMX1BEX0RJUyk7CkBAIC0xMDkwMywxMSArMTA5MTUsMTMgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IChzdHJ1Y3QgdGczICopIF9fb3BhcXVlOwogCi0JaWYgKHRwLT5pcnFfc3luYyB8fCB0ZzNfZmxhZyh0cCwgUkVTRVRfVEFTS19QRU5ESU5HKSkKLQkJZ290byByZXN0YXJ0X3RpbWVyOwotCiAJc3Bpbl9sb2NrKCZ0cC0+bG9jayk7CiAKKwlpZiAodHAtPmlycV9zeW5jIHx8IHRnM19mbGFnKHRwLCBSRVNFVF9UQVNLX1BFTkRJTkcpKSB7CisJCXNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7CisJCWdvdG8gcmVzdGFydF90aW1lcjsKKwl9CisKIAlpZiAodGczX2FzaWNfcmV2KHRwKSA9PSBBU0lDX1JFVl81NzE3IHx8CiAJICAgIHRnM19mbGFnKHRwLCA1Nzc2NV9DTEFTUykpCiAJCXRnM19jaGtfbWlzc2VkX21zaSh0cCk7CkBAIC0xMTEwMSwxMSArMTExMTUsMTMgQEAKIAlzdHJ1Y3QgdGczICp0cCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdGczLCByZXNldF90YXNrKTsKIAlpbnQgZXJyOwogCisJcnRubF9sb2NrKCk7CiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcodHAtPmRldikpIHsKIAkJdGczX2ZsYWdfY2xlYXIodHAsIFJFU0VUX1RBU0tfUEVORElORyk7CiAJCXRnM19mdWxsX3VubG9jayh0cCk7CisJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExMTM4LDYgKzExMTU0LDcgQEAKIAkJdGczX3BoeV9zdGFydCh0cCk7CiAKIAl0ZzNfZmxhZ19jbGVhcih0cCwgUkVTRVRfVEFTS19QRU5ESU5HKTsKKwlydG5sX3VubG9jaygpOwogfQogCiBzdGF0aWMgaW50IHRnM19yZXF1ZXN0X2lycShzdHJ1Y3QgdGczICp0cCwgaW50IGlycV9udW0pCkBAIC0xNzgwMCwyMyArMTc4MTcsNiBAQAogCQlnb3RvIGVycl9vdXRfYXBldW5tYXA7CiAJfQogCi0JLyoKLQkgKiBSZXNldCBjaGlwIGluIGNhc2UgVU5ESSBvciBFRkkgZHJpdmVyIGRpZCBub3Qgc2h1dGRvd24KLQkgKiBETUEgc2VsZiB0ZXN0IHdpbGwgZW5hYmxlIFdETUFDIGFuZCB3ZSdsbCBzZWUgKHNwdXJpb3VzKQotCSAqIHBlbmRpbmcgRE1BIG9uIHRoZSBQQ0kgYnVzIGF0IHRoYXQgcG9pbnQuCi0JICovCi0JaWYgKCh0cjMyKEhPU1RDQ19NT0RFKSAmIEhPU1RDQ19NT0RFX0VOQUJMRSkgfHwKLQkgICAgKHRyMzIoV0RNQUNfTU9ERSkgJiBXRE1BQ19NT0RFX0VOQUJMRSkpIHsKLQkJdHczMihNRU1BUkJfTU9ERSwgTUVNQVJCX01PREVfRU5BQkxFKTsKLQkJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwotCX0KLQotCWVyciA9IHRnM190ZXN0X2RtYSh0cCk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJETUEgZW5naW5lIHRlc3QgZmFpbGVkLCBhYm9ydGluZ1xuIik7Ci0JCWdvdG8gZXJyX291dF9hcGV1bm1hcDsKLQl9Ci0KIAlpbnRtYnggPSBNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1c7CiAJcmN2bWJ4ID0gTUFJTEJPWF9SQ1ZSRVRfQ09OX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1c7CiAJc25kbWJ4ID0gTUFJTEJPWF9TTkRIT1NUX1BST0RfSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVzsKQEAgLTE3ODYxLDYgKzE3ODYxLDIzIEBACiAJCQlzbmRtYnggKz0gMHhjOwogCX0KIAorCS8qCisJICogUmVzZXQgY2hpcCBpbiBjYXNlIFVOREkgb3IgRUZJIGRyaXZlciBkaWQgbm90IHNodXRkb3duCisJICogRE1BIHNlbGYgdGVzdCB3aWxsIGVuYWJsZSBXRE1BQyBhbmQgd2UnbGwgc2VlIChzcHVyaW91cykKKwkgKiBwZW5kaW5nIERNQSBvbiB0aGUgUENJIGJ1cyBhdCB0aGF0IHBvaW50LgorCSAqLworCWlmICgodHIzMihIT1NUQ0NfTU9ERSkgJiBIT1NUQ0NfTU9ERV9FTkFCTEUpIHx8CisJICAgICh0cjMyKFdETUFDX01PREUpICYgV0RNQUNfTU9ERV9FTkFCTEUpKSB7CisJCXR3MzIoTUVNQVJCX01PREUsIE1FTUFSQl9NT0RFX0VOQUJMRSk7CisJCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKKwl9CisKKwllcnIgPSB0ZzNfdGVzdF9kbWEodHApOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRE1BIGVuZ2luZSB0ZXN0IGZhaWxlZCwgYWJvcnRpbmdcbiIpOworCQlnb3RvIGVycl9vdXRfYXBldW5tYXA7CisJfQorCiAJdGczX2luaXRfY29hbCh0cCk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWRfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZF9kZWJ1Z2ZzLmMKaW5kZXggN2Q2YWE4Yy4uNjE5MDgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZF9kZWJ1Z2ZzLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiAJLyogUmV0cmlldmUgZmxhc2ggcGFydGl0aW9uIGluZm8gKi8KIAlmY29tcC5jb21wX3N0YXR1cyA9IDA7Ci0JaW5pdF9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKwlyZWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJuYWQtPmJuYV9sb2NrLCBmbGFncyk7CiAJcmV0ID0gYmZhX253X2ZsYXNoX2dldF9hdHRyKCZibmFkLT5ibmEuZmxhc2gsICZkcnZpbmZvLT5mbGFzaF9hdHRyLAogCQkJCWJuYWRfY2JfY29tcGxldGlvbiwgJmZjb21wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvYXQ5MV9ldGhlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9hdDkxX2V0aGVyLmMKaW5kZXggNTVlYjdmMi4uN2VmNTVmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9hdDkxX2V0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9hdDkxX2V0aGVyLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCQlyZXMgPSBQVFJfRVJSKGxwLT5wY2xrKTsKIAkJZ290byBlcnJfZnJlZV9kZXY7CiAJfQotCWNsa19lbmFibGUobHAtPnBjbGspOworCWNsa19wcmVwYXJlX2VuYWJsZShscC0+cGNsayk7CiAKIAlscC0+aGNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CiAJbHAtPnR4X2NsayA9IEVSUl9QVFIoLUVOT0VOVCk7CkBAIC00MDYsNyArNDA2LDcgQEAKIGVycl9vdXRfdW5yZWdpc3Rlcl9uZXRkZXY6CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIGVycl9kaXNhYmxlX2Nsb2NrOgotCWNsa19kaXNhYmxlKGxwLT5wY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobHAtPnBjbGspOwogZXJyX2ZyZWVfZGV2OgogCWZyZWVfbmV0ZGV2KGRldik7CiAJcmV0dXJuIHJlczsKQEAgLTQyNCw3ICs0MjQsNyBAQAogCWtmcmVlKGxwLT5taWlfYnVzLT5pcnEpOwogCW1kaW9idXNfZnJlZShscC0+bWlpX2J1cyk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQljbGtfZGlzYWJsZShscC0+cGNsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGxwLT5wY2xrKTsKIAlmcmVlX25ldGRldihkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC00NDAsNyArNDQwLDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXRfZGV2KTsKIAkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRfZGV2KTsKIAotCQljbGtfZGlzYWJsZShscC0+cGNsayk7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShscC0+cGNsayk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDUxLDcgKzQ1MSw3IEBACiAJc3RydWN0IG1hY2IgKmxwID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRfZGV2KSkgewotCQljbGtfZW5hYmxlKGxwLT5wY2xrKTsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKGxwLT5wY2xrKTsKIAogCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldF9kZXYpOwogCQluZXRpZl9zdGFydF9xdWV1ZShuZXRfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvYWRhcHRlci5oCmluZGV4IGQwMGE3NTEuLjYwNDlmNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9hZGFwdGVyLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2FkYXB0ZXIuaApAQCAtOTYsNiArOTYsOSBAQAogCXMxNiB4YWN0X2FkZHJfZmlsdDsJCS8qIGluZGV4IG9mIG91ciBNQUMgYWRkcmVzcyBmaWx0ZXIgKi8KIAl1MTYgcnNzX3NpemU7CQkJLyogc2l6ZSBvZiBWSSdzIFJTUyB0YWJsZSBzbGljZSAqLwogCXU4IHBpZHg7CQkJLyogaW5kZXggaW50byBhZGFwdGVyIHBvcnRbXSAqLworCXM4IG1kaW9fYWRkcjsKKwl1OCBwb3J0X3R5cGU7CQkJLyogZmlybXdhcmUgcG9ydCB0eXBlICovCisJdTggbW9kX3R5cGU7CQkJLyogZmlybXdhcmUgbW9kdWxlIHR5cGUgKi8KIAl1OCBwb3J0X2lkOwkJCS8qIHBoeXNpY2FsIHBvcnQgSUQgKi8KIAl1OCBucXNldHM7CQkJLyogIyBvZiAiUXVldWUgU2V0cyIgKi8KIAl1OCBmaXJzdF9xc2V0OwkJCS8qIGluZGV4IG9mIGZpcnN0ICJRdWV1ZSBTZXQiICovCkBAIC01MjIsNiArNTI1LDcgQEAKICAqIGlzICJjb250cmFjdGVkIiB0byBwcm92aWRlIGZvciB0aGUgY29tbW9uIGNvZGUuCiAgKi8KIHZvaWQgdDR2Zl9vc19saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKiwgaW50LCBpbnQpOwordm9pZCB0NHZmX29zX3BvcnRtb2RfY2hhbmdlZChzdHJ1Y3QgYWRhcHRlciAqLCBpbnQpOwogCiAvKgogICogU0dFIGZ1bmN0aW9uIHByb3RvdHlwZSBkZWNsYXJhdGlvbnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKaW5kZXggYWE3NGVjMy4uYTkzNmVlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9jeGdiNHZmX21haW4uYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tZGlvLmg+CiAKICNpbmNsdWRlICJ0NHZmX2NvbW1vbi5oIgogI2luY2x1ZGUgInQ0dmZfZGVmcy5oIgpAQCAtMjEwLDYgKzIxMSwzOCBAQAogfQogCiAvKgorICogVEhlIHBvcnQgbW9kdWxlIHR5cGUgaGFzIGNoYW5nZWQgb24gdGhlIGluZGljYXRlZCAicG9ydCIgKFZpcnR1YWwKKyAqIEludGVyZmFjZSkuCisgKi8KK3ZvaWQgdDR2Zl9vc19wb3J0bW9kX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwaWR4KQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbW9kX3N0cltdID0geworCQlOVUxMLCAiTFIiLCAiU1IiLCAiRVIiLCAicGFzc2l2ZSBEQSIsICJhY3RpdmUgREEiLCAiTFJNIgorCX07CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPnBvcnRbcGlkeF07CisJY29uc3Qgc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHBpLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX05PTkUpCisJCWRldl9pbmZvKGFkYXB0ZXItPnBkZXZfZGV2LCAiJXM6IHBvcnQgbW9kdWxlIHVucGx1Z2dlZFxuIiwKKwkJCSBkZXYtPm5hbWUpOworCWVsc2UgaWYgKHBpLT5tb2RfdHlwZSA8IEFSUkFZX1NJWkUobW9kX3N0cikpCisJCWRldl9pbmZvKGFkYXB0ZXItPnBkZXZfZGV2LCAiJXM6ICVzIHBvcnQgbW9kdWxlIGluc2VydGVkXG4iLAorCQkJIGRldi0+bmFtZSwgbW9kX3N0cltwaS0+bW9kX3R5cGVdKTsKKwllbHNlIGlmIChwaS0+bW9kX3R5cGUgPT0gRldfUE9SVF9NT0RfVFlQRV9OT1RTVVBQT1JURUQpCisJCWRldl9pbmZvKGFkYXB0ZXItPnBkZXZfZGV2LCAiJXM6IHVuc3VwcG9ydGVkIG9wdGljYWwgcG9ydCAiCisJCQkgIm1vZHVsZSBpbnNlcnRlZFxuIiwgZGV2LT5uYW1lKTsKKwllbHNlIGlmIChwaS0+bW9kX3R5cGUgPT0gRldfUE9SVF9NT0RfVFlQRV9VTktOT1dOKQorCQlkZXZfaW5mbyhhZGFwdGVyLT5wZGV2X2RldiwgIiVzOiB1bmtub3duIHBvcnQgbW9kdWxlIGluc2VydGVkLCIKKwkJCSAiZm9yY2luZyBUV0lOQVhcbiIsIGRldi0+bmFtZSk7CisJZWxzZSBpZiAocGktPm1vZF90eXBlID09IEZXX1BPUlRfTU9EX1RZUEVfRVJST1IpCisJCWRldl9pbmZvKGFkYXB0ZXItPnBkZXZfZGV2LCAiJXM6IHRyYW5zY2VpdmVyIG1vZHVsZSBlcnJvclxuIiwKKwkJCSBkZXYtPm5hbWUpOworCWVsc2UKKwkJZGV2X2luZm8oYWRhcHRlci0+cGRldl9kZXYsICIlczogdW5rbm93biBtb2R1bGUgdHlwZSAlZCAiCisJCQkgImluc2VydGVkXG4iLCBkZXYtPm5hbWUsIHBpLT5tb2RfdHlwZSk7Cit9CisKKy8qCiAgKiBOZXQgZGV2aWNlIG9wZXJhdGlvbnMuCiAgKiA9PT09PT09PT09PT09PT09PT09PT09CiAgKi8KQEAgLTExOTMsMjQgKzEyMjYsMTAzIEBACiAgKiBzdGF0ZSBvZiB0aGUgcG9ydCB0byB3aGljaCB3ZSdyZSBsaW5rZWQuCiAgKi8KIAotLyoKLSAqIFJldHVybiBjdXJyZW50IHBvcnQgbGluayBzZXR0aW5ncy4KLSAqLwotc3RhdGljIGludCBjeGdiNHZmX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBldGh0b29sX2NtZCAqY21kKQorc3RhdGljIHVuc2lnbmVkIGludCB0NHZmX2Zyb21fZndfbGlua2NhcHMoZW51bSBmd19wb3J0X3R5cGUgdHlwZSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgY2FwcykKIHsKLQljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IHYgPSAwOwogCi0JY21kLT5zdXBwb3J0ZWQgPSBwaS0+bGlua19jZmcuc3VwcG9ydGVkOwotCWNtZC0+YWR2ZXJ0aXNpbmcgPSBwaS0+bGlua19jZmcuYWR2ZXJ0aXNpbmc7CisJaWYgKHR5cGUgPT0gRldfUE9SVF9UWVBFX0JUX1NHTUlJIHx8IHR5cGUgPT0gRldfUE9SVF9UWVBFX0JUX1hGSSB8fAorCSAgICB0eXBlID09IEZXX1BPUlRfVFlQRV9CVF9YQVVJKSB7CisJCXYgfD0gU1VQUE9SVEVEX1RQOworCQlpZiAoY2FwcyAmIEZXX1BPUlRfQ0FQX1NQRUVEXzEwME0pCisJCQl2IHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOworCQlpZiAoY2FwcyAmIEZXX1BPUlRfQ0FQX1NQRUVEXzFHKQorCQkJdiB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CisJCWlmIChjYXBzICYgRldfUE9SVF9DQVBfU1BFRURfMTBHKQorCQkJdiB8PSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworCX0gZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfS1g0IHx8IHR5cGUgPT0gRldfUE9SVF9UWVBFX0tYKSB7CisJCXYgfD0gU1VQUE9SVEVEX0JhY2twbGFuZTsKKwkJaWYgKGNhcHMgJiBGV19QT1JUX0NBUF9TUEVFRF8xRykKKwkJCXYgfD0gU1VQUE9SVEVEXzEwMDBiYXNlS1hfRnVsbDsKKwkJaWYgKGNhcHMgJiBGV19QT1JUX0NBUF9TUEVFRF8xMEcpCisJCQl2IHw9IFNVUFBPUlRFRF8xMDAwMGJhc2VLWDRfRnVsbDsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gRldfUE9SVF9UWVBFX0tSKQorCQl2IHw9IFNVUFBPUlRFRF9CYWNrcGxhbmUgfCBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbDsKKwllbHNlIGlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9CUF9BUCkKKwkJdiB8PSBTVVBQT1JURURfQmFja3BsYW5lIHwgU1VQUE9SVEVEXzEwMDAwYmFzZVJfRkVDIHwKKwkJICAgICBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbCB8IFNVUFBPUlRFRF8xMDAwYmFzZUtYX0Z1bGw7CisJZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfQlA0X0FQKQorCQl2IHw9IFNVUFBPUlRFRF9CYWNrcGxhbmUgfCBTVVBQT1JURURfMTAwMDBiYXNlUl9GRUMgfAorCQkgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VLUl9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlS1hfRnVsbCB8CisJCSAgICAgU1VQUE9SVEVEXzEwMDAwYmFzZUtYNF9GdWxsOworCWVsc2UgaWYgKHR5cGUgPT0gRldfUE9SVF9UWVBFX0ZJQkVSX1hGSSB8fAorCQkgdHlwZSA9PSBGV19QT1JUX1RZUEVfRklCRVJfWEFVSSB8fAorCQkgdHlwZSA9PSBGV19QT1JUX1RZUEVfU0ZQIHx8CisJCSB0eXBlID09IEZXX1BPUlRfVFlQRV9RU0ZQXzEwRyB8fAorCQkgdHlwZSA9PSBGV19QT1JUX1RZUEVfUVNBKSB7CisJCXYgfD0gU1VQUE9SVEVEX0ZJQlJFOworCQlpZiAoY2FwcyAmIEZXX1BPUlRfQ0FQX1NQRUVEXzFHKQorCQkJdiB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CisJCWlmIChjYXBzICYgRldfUE9SVF9DQVBfU1BFRURfMTBHKQorCQkJdiB8PSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworCX0gZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfQlA0MF9CQSB8fAorCQkgICB0eXBlID09IEZXX1BPUlRfVFlQRV9RU0ZQKSB7CisJCXYgfD0gU1VQUE9SVEVEXzQwMDAwYmFzZVNSNF9GdWxsOworCQl2IHw9IFNVUFBPUlRFRF9GSUJSRTsKKwl9CisKKwlpZiAoY2FwcyAmIEZXX1BPUlRfQ0FQX0FORUcpCisJCXYgfD0gU1VQUE9SVEVEX0F1dG9uZWc7CisJcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBpbnQgY3hnYjR2Zl9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJY29uc3Qgc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAocC0+cG9ydF90eXBlID09IEZXX1BPUlRfVFlQRV9CVF9TR01JSSB8fAorCSAgICBwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX0JUX1hGSSB8fAorCSAgICBwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX0JUX1hBVUkpCisJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJZWxzZSBpZiAocC0+cG9ydF90eXBlID09IEZXX1BPUlRfVFlQRV9GSUJFUl9YRkkgfHwKKwkJIHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfRklCRVJfWEFVSSkKKwkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwllbHNlIGlmIChwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX1NGUCB8fAorCQkgcC0+cG9ydF90eXBlID09IEZXX1BPUlRfVFlQRV9RU0ZQXzEwRyB8fAorCQkgcC0+cG9ydF90eXBlID09IEZXX1BPUlRfVFlQRV9RU0EgfHwKKwkJIHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfUVNGUCkgeworCQlpZiAocC0+bW9kX3R5cGUgPT0gRldfUE9SVF9NT0RfVFlQRV9MUiB8fAorCQkgICAgcC0+bW9kX3R5cGUgPT0gRldfUE9SVF9NT0RfVFlQRV9TUiB8fAorCQkgICAgcC0+bW9kX3R5cGUgPT0gRldfUE9SVF9NT0RfVFlQRV9FUiB8fAorCQkgICAgcC0+bW9kX3R5cGUgPT0gRldfUE9SVF9NT0RfVFlQRV9MUk0pCisJCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQllbHNlIGlmIChwLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX1RXSU5BWF9QQVNTSVZFIHx8CisJCQkgcC0+bW9kX3R5cGUgPT0gRldfUE9SVF9NT0RfVFlQRV9UV0lOQVhfQUNUSVZFKQorCQkJY21kLT5wb3J0ID0gUE9SVF9EQTsKKwkJZWxzZQorCQkJY21kLT5wb3J0ID0gUE9SVF9PVEhFUjsKKwl9IGVsc2UKKwkJY21kLT5wb3J0ID0gUE9SVF9PVEhFUjsKKworCWlmIChwLT5tZGlvX2FkZHIgPj0gMCkgeworCQljbWQtPnBoeV9hZGRyZXNzID0gcC0+bWRpb19hZGRyOworCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKKwkJY21kLT5tZGlvX3N1cHBvcnQgPSBwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX0JUX1NHTUlJID8KKwkJCU1ESU9fU1VQUE9SVFNfQzIyIDogTURJT19TVVBQT1JUU19DNDU7CisJfSBlbHNlIHsKKwkJY21kLT5waHlfYWRkcmVzcyA9IDA7ICAvKiBub3QgcmVhbGx5LCBidXQgbm8gYmV0dGVyIG9wdGlvbiAqLworCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwkJY21kLT5tZGlvX3N1cHBvcnQgPSAwOworCX0KKworCWNtZC0+c3VwcG9ydGVkID0gdDR2Zl9mcm9tX2Z3X2xpbmtjYXBzKHAtPnBvcnRfdHlwZSwKKwkJCQkJICAgICAgIHAtPmxpbmtfY2ZnLnN1cHBvcnRlZCk7CisJY21kLT5hZHZlcnRpc2luZyA9IHQ0dmZfZnJvbV9md19saW5rY2FwcyhwLT5wb3J0X3R5cGUsCisJCQkJCSAgICBwLT5saW5rX2NmZy5hZHZlcnRpc2luZyk7CiAJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwKLQkJCSAgICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSA/IHBpLT5saW5rX2NmZy5zcGVlZCA6IC0xKTsKKwkJCSAgICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSA/IHAtPmxpbmtfY2ZnLnNwZWVkIDogMCk7CiAJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQotCWNtZC0+cG9ydCA9IChjbWQtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9UUCkgPyBQT1JUX1RQIDogUE9SVF9GSUJSRTsKLQljbWQtPnBoeV9hZGRyZXNzID0gcGktPnBvcnRfaWQ7Ci0JY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7Ci0JY21kLT5hdXRvbmVnID0gcGktPmxpbmtfY2ZnLmF1dG9uZWc7CisJY21kLT5hdXRvbmVnID0gcC0+bGlua19jZmcuYXV0b25lZzsKIAljbWQtPm1heHR4cGt0ID0gMDsKIAljbWQtPm1heHJ4cGt0ID0gMDsKIAlyZXR1cm4gMDsKQEAgLTIzMTgsNyArMjQzMCw3IEBACiAJICovCiAJbjEwZyA9IDA7CiAJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwaWR4KQotCQluMTBnICs9IGlzXzEwZ19wb3J0KCZhZGFwMnBpbmZvKGFkYXB0ZXIsIHBpZHgpLT5saW5rX2NmZyk7CisJCW4xMGcgKz0gaXNfeF8xMGdfcG9ydCgmYWRhcDJwaW5mbyhhZGFwdGVyLCBwaWR4KS0+bGlua19jZmcpOwogCiAJLyoKIAkgKiBXZSBkZWZhdWx0IHRvIDEgcXVldWUgcGVyIG5vbi0xMEcgcG9ydCBhbmQgdXAgdG8gIyBvZiBjb3JlcyBxdWV1ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfY29tbW9uLmgKaW5kZXggOGQzMjM3Zi4uYjlkZWJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfY29tbW9uLmgKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfMTBnX3BvcnQoY29uc3Qgc3RydWN0IGxpbmtfY29uZmlnICpsYykKIHsKLQlyZXR1cm4gKGxjLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKSAhPSAwOworCXJldHVybiAobGMtPnN1cHBvcnRlZCAmIEZXX1BPUlRfQ0FQX1NQRUVEXzEwRykgIT0gMDsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzX3hfMTBnX3BvcnQoY29uc3Qgc3RydWN0IGxpbmtfY29uZmlnICpsYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9ody5jCmluZGV4IDAyZTg4MzMuLjYwNDI2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfaHcuYwpAQCAtMjQ1LDYgKzI0NSwxMCBAQAogCXJldHVybiBhICYgMHgzZjsKIH0KIAorI2RlZmluZSBBRFZFUlRfTUFTSyAoRldfUE9SVF9DQVBfU1BFRURfMTAwTSB8IEZXX1BPUlRfQ0FQX1NQRUVEXzFHIHxcCisJCSAgICAgRldfUE9SVF9DQVBfU1BFRURfMTBHIHwgRldfUE9SVF9DQVBfU1BFRURfNDBHIHwgXAorCQkgICAgIEZXX1BPUlRfQ0FQX1NQRUVEXzEwMEcgfCBGV19QT1JUX0NBUF9BTkVHKQorCiAvKioKICAqCWluaXRfbGlua19jb25maWcgLSBpbml0aWFsaXplIGEgbGluaydzIFNXIHN0YXRlCiAgKglAbGM6IHN0cnVjdHVyZSBob2xkaW5nIHRoZSBsaW5rIHN0YXRlCkBAIC0yNTksOCArMjYzLDggQEAKIAlsYy0+cmVxdWVzdGVkX3NwZWVkID0gMDsKIAlsYy0+c3BlZWQgPSAwOwogCWxjLT5yZXF1ZXN0ZWRfZmMgPSBsYy0+ZmMgPSBQQVVTRV9SWCB8IFBBVVNFX1RYOwotCWlmIChsYy0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpIHsKLQkJbGMtPmFkdmVydGlzaW5nID0gbGMtPnN1cHBvcnRlZDsKKwlpZiAobGMtPnN1cHBvcnRlZCAmIEZXX1BPUlRfQ0FQX0FORUcpIHsKKwkJbGMtPmFkdmVydGlzaW5nID0gbGMtPnN1cHBvcnRlZCAmIEFEVkVSVF9NQVNLOwogCQlsYy0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCQlsYy0+cmVxdWVzdGVkX2ZjIHw9IFBBVVNFX0FVVE9ORUc7CiAJfSBlbHNlIHsKQEAgLTI4MCw3ICsyODQsNiBAQAogCXN0cnVjdCBmd192aV9jbWQgdmlfY21kLCB2aV9ycGw7CiAJc3RydWN0IGZ3X3BvcnRfY21kIHBvcnRfY21kLCBwb3J0X3JwbDsKIAlpbnQgdjsKLQl1MzIgd29yZDsKIAogCS8qCiAJICogRXhlY3V0ZSBhIFZJIFJlYWQgY29tbWFuZCB0byBnZXQgb3VyIFZpcnR1YWwgSW50ZXJmYWNlIGluZm9ybWF0aW9uCkBAIC0zMTksMTkgKzMyMiwxMyBAQAogCWlmICh2KQogCQlyZXR1cm4gdjsKIAotCXYgPSAwOwotCXdvcmQgPSBiZTE2X3RvX2NwdShwb3J0X3JwbC51LmluZm8ucGNhcCk7Ci0JaWYgKHdvcmQgJiBGV19QT1JUX0NBUF9TUEVFRF8xMDBNKQotCQl2IHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOwotCWlmICh3b3JkICYgRldfUE9SVF9DQVBfU1BFRURfMUcpCi0JCXYgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOwotCWlmICh3b3JkICYgRldfUE9SVF9DQVBfU1BFRURfMTBHKQotCQl2IHw9IFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGw7Ci0JaWYgKHdvcmQgJiBGV19QT1JUX0NBUF9TUEVFRF80MEcpCi0JCXYgfD0gU1VQUE9SVEVEXzQwMDAwYmFzZVNSNF9GdWxsOwotCWlmICh3b3JkICYgRldfUE9SVF9DQVBfQU5FRykKLQkJdiB8PSBTVVBQT1JURURfQXV0b25lZzsKLQlpbml0X2xpbmtfY29uZmlnKCZwaS0+bGlua19jZmcsIHYpOworCXYgPSBiZTMyX3RvX2NwdShwb3J0X3JwbC51LmluZm8ubHN0YXR1c190b19tb2R0eXBlKTsKKwlwaS0+bWRpb19hZGRyID0gKHYgJiBGV19QT1JUX0NNRF9NRElPQ0FQX0YpID8KKwkJCUZXX1BPUlRfQ01EX01ESU9BRERSX0codikgOiAtMTsKKwlwaS0+cG9ydF90eXBlID0gRldfUE9SVF9DTURfUFRZUEVfRyh2KTsKKwlwaS0+bW9kX3R5cGUgPSBGV19QT1JUX01PRF9UWVBFX05BOworCisJaW5pdF9saW5rX2NvbmZpZygmcGktPmxpbmtfY2ZnLCBiZTE2X3RvX2NwdShwb3J0X3JwbC51LmluZm8ucGNhcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDkxLDcgKzE0ODgsNyBAQAogCQkgKi8KIAkJY29uc3Qgc3RydWN0IGZ3X3BvcnRfY21kICpwb3J0X2NtZCA9CiAJCQkoY29uc3Qgc3RydWN0IGZ3X3BvcnRfY21kICopcnBsOwotCQl1MzIgd29yZDsKKwkJdTMyIHN0YXQsIG1vZDsKIAkJaW50IGFjdGlvbiwgcG9ydF9pZCwgbGlua19vaywgc3BlZWQsIGZjLCBwaWR4OwogCiAJCS8qCkBAIC0xNTA5LDIxICsxNTA2LDIxIEBACiAJCXBvcnRfaWQgPSBGV19QT1JUX0NNRF9QT1JUSURfRygKIAkJCWJlMzJfdG9fY3B1KHBvcnRfY21kLT5vcF90b19wb3J0aWQpKTsKIAotCQl3b3JkID0gYmUzMl90b19jcHUocG9ydF9jbWQtPnUuaW5mby5sc3RhdHVzX3RvX21vZHR5cGUpOwotCQlsaW5rX29rID0gKHdvcmQgJiBGV19QT1JUX0NNRF9MU1RBVFVTX0YpICE9IDA7CisJCXN0YXQgPSBiZTMyX3RvX2NwdShwb3J0X2NtZC0+dS5pbmZvLmxzdGF0dXNfdG9fbW9kdHlwZSk7CisJCWxpbmtfb2sgPSAoc3RhdCAmIEZXX1BPUlRfQ01EX0xTVEFUVVNfRikgIT0gMDsKIAkJc3BlZWQgPSAwOwogCQlmYyA9IDA7Ci0JCWlmICh3b3JkICYgRldfUE9SVF9DTURfUlhQQVVTRV9GKQorCQlpZiAoc3RhdCAmIEZXX1BPUlRfQ01EX1JYUEFVU0VfRikKIAkJCWZjIHw9IFBBVVNFX1JYOwotCQlpZiAod29yZCAmIEZXX1BPUlRfQ01EX1RYUEFVU0VfRikKKwkJaWYgKHN0YXQgJiBGV19QT1JUX0NNRF9UWFBBVVNFX0YpCiAJCQlmYyB8PSBQQVVTRV9UWDsKLQkJaWYgKHdvcmQgJiBGV19QT1JUX0NNRF9MU1BFRURfVihGV19QT1JUX0NBUF9TUEVFRF8xMDBNKSkKKwkJaWYgKHN0YXQgJiBGV19QT1JUX0NNRF9MU1BFRURfVihGV19QT1JUX0NBUF9TUEVFRF8xMDBNKSkKIAkJCXNwZWVkID0gMTAwOwotCQllbHNlIGlmICh3b3JkICYgRldfUE9SVF9DTURfTFNQRUVEX1YoRldfUE9SVF9DQVBfU1BFRURfMUcpKQorCQllbHNlIGlmIChzdGF0ICYgRldfUE9SVF9DTURfTFNQRUVEX1YoRldfUE9SVF9DQVBfU1BFRURfMUcpKQogCQkJc3BlZWQgPSAxMDAwOwotCQllbHNlIGlmICh3b3JkICYgRldfUE9SVF9DTURfTFNQRUVEX1YoRldfUE9SVF9DQVBfU1BFRURfMTBHKSkKKwkJZWxzZSBpZiAoc3RhdCAmIEZXX1BPUlRfQ01EX0xTUEVFRF9WKEZXX1BPUlRfQ0FQX1NQRUVEXzEwRykpCiAJCQlzcGVlZCA9IDEwMDAwOwotCQllbHNlIGlmICh3b3JkICYgRldfUE9SVF9DTURfTFNQRUVEX1YoRldfUE9SVF9DQVBfU1BFRURfNDBHKSkKKwkJZWxzZSBpZiAoc3RhdCAmIEZXX1BPUlRfQ01EX0xTUEVFRF9WKEZXX1BPUlRfQ0FQX1NQRUVEXzQwRykpCiAJCQlzcGVlZCA9IDQwMDAwOwogCiAJCS8qCkBAIC0xNTQwLDEyICsxNTM3LDIxIEBACiAJCQkJY29udGludWU7CiAKIAkJCWxjID0gJnBpLT5saW5rX2NmZzsKKworCQkJbW9kID0gRldfUE9SVF9DTURfTU9EVFlQRV9HKHN0YXQpOworCQkJaWYgKG1vZCAhPSBwaS0+bW9kX3R5cGUpIHsKKwkJCQlwaS0+bW9kX3R5cGUgPSBtb2Q7CisJCQkJdDR2Zl9vc19wb3J0bW9kX2NoYW5nZWQoYWRhcHRlciwgcGlkeCk7CisJCQl9CisKIAkJCWlmIChsaW5rX29rICE9IGxjLT5saW5rX29rIHx8IHNwZWVkICE9IGxjLT5zcGVlZCB8fAogCQkJICAgIGZjICE9IGxjLT5mYykgewogCQkJCS8qIHNvbWV0aGluZyBjaGFuZ2VkICovCiAJCQkJbGMtPmxpbmtfb2sgPSBsaW5rX29rOwogCQkJCWxjLT5zcGVlZCA9IHNwZWVkOwogCQkJCWxjLT5mYyA9IGZjOworCQkJCWxjLT5zdXBwb3J0ZWQgPQorCQkJCQliZTE2X3RvX2NwdShwb3J0X2NtZC0+dS5pbmZvLnBjYXApOwogCQkJCXQ0dmZfb3NfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIHBpZHgsIGxpbmtfb2spOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYwppbmRleCA4NjhkMGY2Li5lMzU2YWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMKQEAgLTEwNjAsMTAgKzEwNjAsMTQgQEAKIAkJCQkgICAgIFBLVF9IQVNIX1RZUEVfTDQgOiBQS1RfSEFTSF9UWVBFX0wzKTsKIAkJfQogCi0JCWlmICgobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJiAhY3N1bV9ub3RfY2FsYykgewotCQkJc2tiLT5jc3VtID0gaHRvbnMoY2hlY2tzdW0pOwotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKLQkJfQorCQkvKiBIYXJkd2FyZSBkb2VzIG5vdCBwcm92aWRlIHdob2xlIHBhY2tldCBjaGVja3N1bS4gSXQgb25seQorCQkgKiBwcm92aWRlcyBwc2V1ZG8gY2hlY2tzdW0uIFNpbmNlIGh3IHZhbGlkYXRlcyB0aGUgcGFja2V0CisJCSAqIGNoZWNrc3VtIGJ1dCBub3QgcHJvdmlkZSB1cyB0aGUgY2hlY2tzdW0gdmFsdWUuIHVzZQorCQkgKiBDSEVDU1VNX1VOTkVDRVNTQVJZLgorCQkgKi8KKwkJaWYgKChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmIHRjcF91ZHBfY3N1bV9vayAmJgorCQkgICAgaXB2NF9jc3VtX29rKQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAogCQlpZiAodmxhbl9zdHJpcHBlZCkKIAkJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHZsYW5fdGNpKTsKQEAgLTEzMzEsNyArMTMzNSw3IEBACiAJaW50IGVycjsKIAogCWlmICghZW5pY19wb2xsX2xvY2tfbmFwaSgmZW5pYy0+cnFbcnFdKSkKLQkJcmV0dXJuIHdvcmtfZG9uZTsKKwkJcmV0dXJuIGJ1ZGdldDsKIAkvKiBTZXJ2aWNlIFJRCiAJICovCiAKQEAgLTE2MTIsNyArMTYxNiw3IEBACiAJCWlmICh2bmljX3JxX2Rlc2NfdXNlZCgmZW5pYy0+cnFbaV0pID09IDApIHsKIAkJCW5ldGRldl9lcnIobmV0ZGV2LCAiVW5hYmxlIHRvIGFsbG9jIHJlY2VpdmUgYnVmZmVyc1xuIik7CiAJCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBlcnJfb3V0X25vdGlmeV91bnNldDsKKwkJCWdvdG8gZXJyX291dF9mcmVlX3JxOwogCQl9CiAJfQogCkBAIC0xNjQ1LDcgKzE2NDksOSBAQAogCiAJcmV0dXJuIDA7CiAKLWVycl9vdXRfbm90aWZ5X3Vuc2V0OgorZXJyX291dF9mcmVlX3JxOgorCWZvciAoaSA9IDA7IGkgPCBlbmljLT5ycV9jb3VudDsgaSsrKQorCQl2bmljX3JxX2NsZWFuKCZlbmljLT5ycVtpXSwgZW5pY19mcmVlX3JxX2J1Zik7CiAJZW5pY19kZXZfbm90aWZ5X3Vuc2V0KGVuaWMpOwogZXJyX291dF9mcmVlX2ludHI6CiAJZW5pY19mcmVlX2ludHIoZW5pYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kbmV0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kbmV0LmMKaW5kZXggYTM3OWMzZS4uMTNkMDBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZG5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RuZXQuYwpAQCAtMzk4LDEzICszOTgsOCBAQAogCQkgKiBicmVhayBvdXQgb2Ygd2hpbGUgbG9vcCBpZiB0aGVyZSBhcmUgbm8gbW9yZQogCQkgKiBwYWNrZXRzIHdhaXRpbmcKIAkJICovCi0JCWlmICghKGRuZXRfcmVhZGwoYnAsIFJYX0ZJRk9fV0NOVCkgPj4gMTYpKSB7Ci0JCQluYXBpX2NvbXBsZXRlKG5hcGkpOwotCQkJaW50X2VuYWJsZSA9IGRuZXRfcmVhZGwoYnAsIElOVFJfRU5CKTsKLQkJCWludF9lbmFibGUgfD0gRE5FVF9JTlRSX1NSQ19SWF9DTURGSUZPQUY7Ci0JCQlkbmV0X3dyaXRlbChicCwgaW50X2VuYWJsZSwgSU5UUl9FTkIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJaWYgKCEoZG5ldF9yZWFkbChicCwgUlhfRklGT19XQ05UKSA+PiAxNikpCisJCQlicmVhazsKIAogCQljbWRfd29yZCA9IGRuZXRfcmVhZGwoYnAsIFJYX0xFTl9GSUZPKTsKIAkJcGt0X2xlbiA9IGNtZF93b3JkICYgMHhGRkZGOwpAQCAtNDMzLDIwICs0MjgsMTcgQEAKIAkJCSAgICAgICAic2l6ZSAldS5cbiIsIGRldi0+bmFtZSwgcGt0X2xlbik7CiAJfQogCi0JYnVkZ2V0IC09IG5wYWNrZXRzOwotCiAJaWYgKG5wYWNrZXRzIDwgYnVkZ2V0KSB7CiAJCS8qIFdlIHByb2Nlc3NlZCBhbGwgcGFja2V0cyBhdmFpbGFibGUuICBUZWxsIE5BUEkgaXQgY2FuCi0JCSAqIHN0b3AgcG9sbGluZyB0aGVuIHJlLWVuYWJsZSByeCBpbnRlcnJ1cHRzICovCisJCSAqIHN0b3AgcG9sbGluZyB0aGVuIHJlLWVuYWJsZSByeCBpbnRlcnJ1cHRzLgorCQkgKi8KIAkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaW50X2VuYWJsZSA9IGRuZXRfcmVhZGwoYnAsIElOVFJfRU5CKTsKIAkJaW50X2VuYWJsZSB8PSBETkVUX0lOVFJfU1JDX1JYX0NNREZJRk9BRjsKIAkJZG5ldF93cml0ZWwoYnAsIGludF9lbmFibGUsIElOVFJfRU5CKTsKLQkJcmV0dXJuIDA7CiAJfQogCi0JLyogVGhlcmUgYXJlIHN0aWxsIHBhY2tldHMgd2FpdGluZyAqLwotCXJldHVybiAxOworCXJldHVybiBucGFja2V0czsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGRuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jCmluZGV4IDE5NjA3MzEuLmQ0ODgwNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYwpAQCAtNDM4Myw4ICs0MzgzLDkgQEAKICAqIGRpc3Rpbmd1aXNoIHZhcmlvdXMgdHlwZXMgb2YgdHJhbnNwb3J0cyAoVnhMQU4sIEdSRSwgTlZHUkUgLi4pLiBTbywgb2ZmbG9hZAogICogaXMgZXhwZWN0ZWQgdG8gd29yayBhY3Jvc3MgYWxsIHR5cGVzIG9mIElQIHR1bm5lbHMgb25jZSBleHBvcnRlZC4gU2t5aGF3awogICogc3VwcG9ydHMgb2ZmbG9hZHMgZm9yIGVpdGhlciBWeExBTiBvciBOVkdSRSwgZXhjbHVzaXZlbHkuIFNvIHdlIGV4cG9ydCBWeExBTgotICogb2ZmbG9hZHMgaW4gaHdfZW5jX2ZlYXR1cmVzIG9ubHkgd2hlbiBhIFZ4TEFOIHBvcnQgaXMgYWRkZWQuIE5vdGUgdGhpcyBvbmx5Ci0gKiBlbnN1cmVzIHRoYXQgb3RoZXIgdHVubmVscyB3b3JrIGZpbmUgd2hpbGUgVnhMQU4gb2ZmbG9hZHMgYXJlIG5vdCBlbmFibGVkLgorICogb2ZmbG9hZHMgaW4gaHdfZW5jX2ZlYXR1cmVzIG9ubHkgd2hlbiBhIFZ4TEFOIHBvcnQgaXMgYWRkZWQuIElmIG90aGVyIChub24KKyAqIFZ4TEFOKSB0dW5uZWxzIGFyZSBjb25maWd1cmVkIHdoaWxlIFZ4TEFOIG9mZmxvYWRzIGFyZSBlbmFibGVkLCBvZmZsb2FkcyBmb3IKKyAqIHRob3NlIG90aGVyIHR1bm5lbHMgYXJlIHVuZXhwb3J0ZWQgb24gdGhlIGZseSB0aHJvdWdoIG5kb19mZWF0dXJlc19jaGVjaygpLgogICoKICAqIFNreWhhd2sgc3VwcG9ydHMgVnhMQU4gb2ZmbG9hZHMgb25seSBmb3Igb25lIFVEUCBkcG9ydC4gU28sIGlmIHRoZSBzdGFjawogICogYWRkcyBtb3JlIHRoYW4gb25lIHBvcnQsIGRpc2FibGUgb2ZmbG9hZHMgYW5kIGRvbid0IHJlLWVuYWJsZSB0aGVtIGFnYWluCkBAIC00NDU5LDkgKzQ0NjAsNDUgQEAKIAlhZGFwdGVyLT52eGxhbl9wb3J0X2NvdW50LS07CiB9CiAKLXN0YXRpYyBib29sIGJlX2dzb19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl9mZWF0dXJlc190IGJlX2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogewotCXJldHVybiB2eGxhbl9nc29fY2hlY2soc2tiKTsKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJdTggbDRfaGRyID0gMDsKKworCS8qIFRoZSBjb2RlIGJlbG93IHJlc3RyaWN0cyBvZmZsb2FkIGZlYXR1cmVzIGZvciBzb21lIHR1bm5lbGVkIHBhY2tldHMuCisJICogT2ZmbG9hZCBmZWF0dXJlcyBmb3Igbm9ybWFsIChub24gdHVubmVsKSBwYWNrZXRzIGFyZSB1bmNoYW5nZWQuCisJICovCisJaWYgKCFza2ItPmVuY2Fwc3VsYXRpb24gfHwKKwkgICAgIShhZGFwdGVyLT5mbGFncyAmIEJFX0ZMQUdTX1ZYTEFOX09GRkxPQURTKSkKKwkJcmV0dXJuIGZlYXR1cmVzOworCisJLyogSXQncyBhbiBlbmNhcHN1bGF0ZWQgcGFja2V0IGFuZCBWeExBTiBvZmZsb2FkcyBhcmUgZW5hYmxlZC4gV2UKKwkgKiBzaG91bGQgZGlzYWJsZSB0dW5uZWwgb2ZmbG9hZCBmZWF0dXJlcyBpZiBpdCdzIG5vdCBhIFZ4TEFOIHBhY2tldCwKKwkgKiBhcyB0dW5uZWwgb2ZmbG9hZHMgaGF2ZSBiZWVuIGVuYWJsZWQgb25seSBmb3IgVnhMQU4uIFRoaXMgaXMgZG9uZSB0bworCSAqIGFsbG93IG90aGVyIHR1bm5lbGVkIHRyYWZmaWMgbGlrZSBHUkUgd29yayBmaW5lIHdoaWxlIFZ4TEFOCisJICogb2ZmbG9hZHMgYXJlIGNvbmZpZ3VyZWQgaW4gU2t5aGF3ay1SLgorCSAqLworCXN3aXRjaCAodmxhbl9nZXRfcHJvdG9jb2woc2tiKSkgeworCWNhc2UgaHRvbnMoRVRIX1BfSVApOgorCQlsNF9oZHIgPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CisJCWJyZWFrOworCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CisJCWw0X2hkciA9IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBmZWF0dXJlczsKKwl9CisKKwlpZiAobDRfaGRyICE9IElQUFJPVE9fVURQIHx8CisJICAgIHNrYi0+aW5uZXJfcHJvdG9jb2xfdHlwZSAhPSBFTkNBUF9UWVBFX0VUSEVSIHx8CisJICAgIHNrYi0+aW5uZXJfcHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfVEVCKSB8fAorCSAgICBza2JfaW5uZXJfbWFjX2hlYWRlcihza2IpIC0gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAhPQorCSAgICBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBzaXplb2Yoc3RydWN0IHZ4bGFuaGRyKSkKKwkJcmV0dXJuIGZlYXR1cmVzICYgfihORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9HU09fTUFTSyk7CisKKwlyZXR1cm4gZmVhdHVyZXM7CiB9CiAjZW5kaWYKIApAQCAtNDQ5Miw3ICs0NTI5LDcgQEAKICNpZmRlZiBDT05GSUdfQkUyTkVUX1ZYTEFOCiAJLm5kb19hZGRfdnhsYW5fcG9ydAk9IGJlX2FkZF92eGxhbl9wb3J0LAogCS5uZG9fZGVsX3Z4bGFuX3BvcnQJPSBiZV9kZWxfdnhsYW5fcG9ydCwKLQkubmRvX2dzb19jaGVjawkJPSBiZV9nc29fY2hlY2ssCisJLm5kb19mZWF0dXJlc19jaGVjawk9IGJlX2ZlYXR1cmVzX2NoZWNrLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmgKaW5kZXggNDY5NjkxYS4uNDAxMzI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaApAQCAtNDI0LDYgKzQyNCw4IEBACiAgKiAoNDBucyAqIDYpLgogICovCiAjZGVmaW5lIEZFQ19RVUlSS19CVUdfQ0FQVFVSRQkJKDEgPDwgMTApCisvKiBDb250cm9sbGVyIGhhcyBvbmx5IG9uZSBNRElPIGJ1cyAqLworI2RlZmluZSBGRUNfUVVJUktfU0lOR0xFX01ESU8JCSgxIDw8IDExKQogCiBzdHJ1Y3QgZmVjX2VuZXRfcHJpdl90eF9xIHsKIAlpbnQgaW5kZXg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jCmluZGV4IDVlYmRmOGQuLmJiYTg3NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jCkBAIC05MSw3ICs5MSw4IEBACiAJCS5kcml2ZXJfZGF0YSA9IDAsCiAJfSwgewogCQkubmFtZSA9ICJpbXgyOC1mZWMiLAotCQkuZHJpdmVyX2RhdGEgPSBGRUNfUVVJUktfRU5FVF9NQUMgfCBGRUNfUVVJUktfU1dBUF9GUkFNRSwKKwkJLmRyaXZlcl9kYXRhID0gRkVDX1FVSVJLX0VORVRfTUFDIHwgRkVDX1FVSVJLX1NXQVBfRlJBTUUgfAorCQkJCUZFQ19RVUlSS19TSU5HTEVfTURJTywKIAl9LCB7CiAJCS5uYW1lID0gImlteDZxLWZlYyIsCiAJCS5kcml2ZXJfZGF0YSA9IEZFQ19RVUlSS19FTkVUX01BQyB8IEZFQ19RVUlSS19IQVNfR0JJVCB8CkBAIC0xOTM3LDcgKzE5MzgsNyBAQAogCWludCBlcnIgPSAtRU5YSU8sIGk7CiAKIAkvKgotCSAqIFRoZSBkdWFsIGZlYyBpbnRlcmZhY2VzIGFyZSBub3QgZXF1aXZhbGVudCB3aXRoIGVuZXQtbWFjLgorCSAqIFRoZSBpLk1YMjggZHVhbCBmZWMgaW50ZXJmYWNlcyBhcmUgbm90IGVxdWFsLgogCSAqIEhlcmUgYXJlIHRoZSBkaWZmZXJlbmNlczoKIAkgKgogCSAqICAtIGZlYzAgc3VwcG9ydHMgTUlJICYgUk1JSSBtb2RlcyB3aGlsZSBmZWMxIG9ubHkgc3VwcG9ydHMgUk1JSQpAQCAtMTk1Miw3ICsxOTUzLDcgQEAKIAkgKiBtZGlvIGludGVyZmFjZSBpbiBib2FyZCBkZXNpZ24sIGFuZCBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgYnkKIAkgKiBmZWMwIG1paV9idXMuCiAJICovCi0JaWYgKChmZXAtPnF1aXJrcyAmIEZFQ19RVUlSS19FTkVUX01BQykgJiYgZmVwLT5kZXZfaWQgPiAwKSB7CisJaWYgKChmZXAtPnF1aXJrcyAmIEZFQ19RVUlSS19TSU5HTEVfTURJTykgJiYgZmVwLT5kZXZfaWQgPiAwKSB7CiAJCS8qIGZlYzEgdXNlcyBmZWMwIG1paV9idXMgKi8KIAkJaWYgKG1paV9jbnQgJiYgZmVjMF9taWlfYnVzKSB7CiAJCQlmZXAtPm1paV9idXMgPSBmZWMwX21paV9idXM7CkBAIC0yMDE1LDcgKzIwMTYsNyBAQAogCW1paV9jbnQrKzsKIAogCS8qIHNhdmUgZmVjMCBtaWlfYnVzICovCi0JaWYgKGZlcC0+cXVpcmtzICYgRkVDX1FVSVJLX0VORVRfTUFDKQorCWlmIChmZXAtPnF1aXJrcyAmIEZFQ19RVUlSS19TSU5HTEVfTURJTykKIAkJZmVjMF9taWlfYnVzID0gZmVwLT5taWlfYnVzOwogCiAJcmV0dXJuIDA7CkBAIC0zMTI5LDYgKzMxMzAsNyBAQAogCQlwZGV2LT5pZF9lbnRyeSA9IG9mX2lkLT5kYXRhOwogCWZlcC0+cXVpcmtzID0gcGRldi0+aWRfZW50cnktPmRyaXZlcl9kYXRhOwogCisJZmVwLT5uZXRkZXYgPSBuZGV2OwogCWZlcC0+bnVtX3J4X3F1ZXVlcyA9IG51bV9yeF9xczsKIAlmZXAtPm51bV90eF9xdWV1ZXMgPSBudW1fdHhfcXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnCmluZGV4IDViODMwMGEuLjRkNjFlZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZwpAQCAtMjgxLDYgKzI4MSwxNyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgSTQwRV9GQ09FCisJYm9vbCAiRmlicmUgQ2hhbm5lbCBvdmVyIEV0aGVybmV0IChGQ29FKSIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIEk0MEUgJiYgRENCICYmIEZDT0UKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBGaWJyZSBDaGFubmVsIG92ZXIgRXRoZXJuZXQgKEZDb0UpCisJICBpbiB0aGUgZHJpdmVyLiBUaGlzIHdpbGwgY3JlYXRlIG5ldyBuZXRkZXYgZm9yIGV4Y2x1c2l2ZSBGQ29FCisJICB1c2Ugd2l0aCBYTDcxMCBGQ29FIG9mZmxvYWRzIGVuYWJsZWQuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBJNDBFVkYKIAl0cmlzdGF0ZSAiSW50ZWwoUikgWEw3MTAgWDcxMCBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0lfTVNJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMKaW5kZXggNzgxMDY1ZS4uZTljM2E4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYwpAQCAtMTU0Myw3ICsxNTQzLDcgQEAKIAkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOwogCX0gZWxzZSBpZiAoKG5pYy0+bWFjID49IG1hY184MjU1MF9EMTAyKSB8fCAoKG5pYy0+ZmxhZ3MgJiBpY2gpICYmCiAJICAgKG1kaW9fcmVhZChuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX1RQSVNUQVRVUykgJiAweDgwMDApICYmCi0JCSEobmljLT5lZXByb21bZWVwcm9tX2NuZmdfbWRpeF0gJiBlZXByb21fbWRpeF9lbmFibGVkKSkpIHsKKwkJKG5pYy0+ZWVwcm9tW2VlcHJvbV9jbmZnX21kaXhdICYgZWVwcm9tX21kaXhfZW5hYmxlZCkpKSB7CiAJCS8qIGVuYWJsZS9kaXNhYmxlIE1ESS9NREktWCBhdXRvLXN3aXRjaGluZy4gKi8KIAkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX05DT05GSUcsCiAJCQkJbmljLT5taWkuZm9yY2VfbWVkaWEgPyAwIDogTkNPTkZJR19BVVRPX1NXSVRDSCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9NYWtlZmlsZQppbmRleCA0Yjk0ZGRiLi5jNDA1ODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvTWFrZWZpbGUKQEAgLTQ0LDQgKzQ0LDQgQEAKIAlpNDBlX3ZpcnRjaG5sX3BmLm8KIAogaTQwZS0kKENPTkZJR19JNDBFX0RDQikgKz0gaTQwZV9kY2IubyBpNDBlX2RjYl9ubC5vCi1pNDBlLSQoQ09ORklHX0ZDT0U6bT15KSArPSBpNDBlX2Zjb2UubworaTQwZS0kKENPTkZJR19JNDBFX0ZDT0UpICs9IGk0MGVfZmNvZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2RlYnVnZnMuYwppbmRleCA0MzNhNTU4Li5jYjBkZTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9kZWJ1Z2ZzLmMKQEAgLTgyOSw3ICs4MjksNyBAQAogCQlpZiAoZGVzY19uID49IHJpbmctPmNvdW50IHx8IGRlc2NfbiA8IDApIHsKIAkJCWRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LAogCQkJCSAiZGVzY3JpcHRvciAlZCBub3QgZm91bmRcbiIsIGRlc2Nfbik7Ci0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJfQogCQlpZiAoIWlzX3J4X3JpbmcpIHsKIAkJCXR4ZCA9IEk0MEVfVFhfREVTQyhyaW5nLCBkZXNjX24pOwpAQCAtODU1LDYgKzg1NSw4IEBACiAJfSBlbHNlIHsKIAkJZGV2X2luZm8oJnBmLT5wZGV2LT5kZXYsICJkdW1wIGRlc2MgcngvdHggPHZzaV9zZWlkPiA8cmluZ19pZD4gWzxkZXNjX24+XVxuIik7CiAJfQorCitvdXQ6CiAJa2ZyZWUocmluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9vc2RlcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX29zZGVwLmgKaW5kZXggMDQ1YjVjNC4uYWQ4MDJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX29zZGVwLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX29zZGVwLmgKQEAgLTc4LDcgKzc4LDcgQEAKIH0gd2hpbGUgKDApCiAKIHR5cGVkZWYgZW51bSBpNDBlX3N0YXR1c19jb2RlIGk0MGVfc3RhdHVzOwotI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JNDBFX0ZDT0UKICNkZWZpbmUgSTQwRV9GQ09FCi0jZW5kaWYgLyogQ09ORklHX0ZDT0Ugb3IgQ09ORklHX0ZDT0VfTU9EVUxFICovCisjZW5kaWYKICNlbmRpZiAvKiBfSTQwRV9PU0RFUF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMKaW5kZXggMDRiNDQxNC4uY2VjYjM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jCkBAIC02NTgsNiArNjU4LDggQEAKIAlyZXR1cm4gbGUzMl90b19jcHUoKih2b2xhdGlsZSBfX2xlMzIgKiloZWFkKTsKIH0KIAorI2RlZmluZSBXQl9TVFJJREUgMHgzCisKIC8qKgogICogaTQwZV9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEB0eF9yaW5nOiAgdHggcmluZyB0byBjbGVhbgpAQCAtNzU5LDYgKzc2MSwxOCBAQAogCXR4X3JpbmctPnFfdmVjdG9yLT50eC50b3RhbF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAl0eF9yaW5nLT5xX3ZlY3Rvci0+dHgudG90YWxfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOwogCisJLyogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLWNhY2hlIGFsaWduZWQgZGVzY3JpcHRvcnMKKwkgKiB3YWl0aW5nIHRvIGJlIHdyaXR0ZW4gYmFjaywgYW5kIGtpY2sgdGhlIGhhcmR3YXJlIHRvIGZvcmNlCisJICogdGhlbSB0byBiZSB3cml0dGVuIGJhY2sgaW4gY2FzZSBvZiBuYXBpIHBvbGxpbmcKKwkgKi8KKwlpZiAoYnVkZ2V0ICYmCisJICAgICEoKGkgJiBXQl9TVFJJREUpID09IFdCX1NUUklERSkgJiYKKwkgICAgIXRlc3RfYml0KF9fSTQwRV9ET1dOLCAmdHhfcmluZy0+dnNpLT5zdGF0ZSkgJiYKKwkgICAgKEk0MEVfREVTQ19VTlVTRUQodHhfcmluZykgIT0gdHhfcmluZy0+Y291bnQpKQorCQl0eF9yaW5nLT5hcm1fd2IgPSB0cnVlOworCWVsc2UKKwkJdHhfcmluZy0+YXJtX3diID0gZmFsc2U7CisKIAlpZiAoY2hlY2tfZm9yX3R4X2hhbmcodHhfcmluZykgJiYgaTQwZV9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7CiAJCS8qIHNjaGVkdWxlIGltbWVkaWF0ZSByZXNldCBpZiB3ZSBiZWxpZXZlIHdlIGh1bmcgKi8KIAkJZGV2X2luZm8odHhfcmluZy0+ZGV2LCAiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nXG4iCkBAIC03NzcsMTMgKzc5MSwxNiBAQAogCQluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctPm5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOwogCiAJCWRldl9pbmZvKHR4X3JpbmctPmRldiwKLQkJCSAidHggaGFuZyBkZXRlY3RlZCBvbiBxdWV1ZSAlZCwgcmVzZXR0aW5nIGFkYXB0ZXJcbiIsCisJCQkgInR4IGhhbmcgZGV0ZWN0ZWQgb24gcXVldWUgJWQsIHJlc2V0IHJlcXVlc3RlZFxuIiwKIAkJCSB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7CiAKLQkJdHhfcmluZy0+bmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fdHhfdGltZW91dCh0eF9yaW5nLT5uZXRkZXYpOworCQkvKiBkbyBub3QgZmlyZSB0aGUgcmVzZXQgaW1tZWRpYXRlbHksIHdhaXQgZm9yIHRoZSBzdGFjayB0bworCQkgKiBkZWNpZGUgd2UgYXJlIHRydWx5IHN0dWNrLCBhbHNvIHByZXZlbnRzIGV2ZXJ5IHF1ZXVlIGZyb20KKwkJICogc2ltdWx0YW5lb3VzbHkgcmVxdWVzdGluZyBhIHJlc2V0CisJCSAqLwogCi0JCS8qIHRoZSBhZGFwdGVyIGlzIGFib3V0IHRvIHJlc2V0LCBubyBwb2ludCBpbiBlbmFibGluZyBzdHVmZiAqLwotCQlyZXR1cm4gdHJ1ZTsKKwkJLyogdGhlIGFkYXB0ZXIgaXMgYWJvdXQgdG8gcmVzZXQsIG5vIHBvaW50IGluIGVuYWJsaW5nIHBvbGxpbmcgKi8KKwkJYnVkZ2V0ID0gMTsKIAl9CiAKIAluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUodHhfcmluZy0+bmV0ZGV2LApAQCAtODA2LDcgKzgyMywyNSBAQAogCQl9CiAJfQogCi0JcmV0dXJuIGJ1ZGdldCA+IDA7CisJcmV0dXJuICEhYnVkZ2V0OworfQorCisvKioKKyAqIGk0MGVfZm9yY2Vfd2IgLSBBcm0gaGFyZHdhcmUgdG8gZG8gYSB3YiBvbiBub25jYWNoZSBhbGlnbmVkIGRlc2NyaXB0b3JzCisgKiBAdnNpOiB0aGUgVlNJIHdlIGNhcmUgYWJvdXQKKyAqIEBxX3ZlY3RvcjogdGhlIHZlY3RvciAgb24gd2hpY2ggdG8gZm9yY2Ugd3JpdGViYWNrCisgKgorICoqLworc3RhdGljIHZvaWQgaTQwZV9mb3JjZV93YihzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgc3RydWN0IGk0MGVfcV92ZWN0b3IgKnFfdmVjdG9yKQoreworCXUzMiB2YWwgPSBJNDBFX1BGSU5UX0RZTl9DVExOX0lOVEVOQV9NQVNLIHwKKwkJICBJNDBFX1BGSU5UX0RZTl9DVExOX1NXSU5UX1RSSUdfTUFTSyB8CisJCSAgSTQwRV9QRklOVF9EWU5fQ1RMTl9TV19JVFJfSU5EWF9FTkFfTUFTSworCQkgIC8qIGFsbG93IDAwIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGluZGV4ICovOworCisJd3IzMigmdnNpLT5iYWNrLT5odywKKwkgICAgIEk0MEVfUEZJTlRfRFlOX0NUTE4ocV92ZWN0b3ItPnZfaWR4ICsgdnNpLT5iYXNlX3ZlY3RvciAtIDEpLAorCSAgICAgdmFsKTsKIH0KIAogLyoqCkBAIC0xMjkwLDkgKzEzMjUsNyBAQAogCSAqIHNvIHRoZSB0b3RhbCBsZW5ndGggb2YgSVB2NCBoZWFkZXIgaXMgSUhMKjQgYnl0ZXMKIAkgKiBUaGUgVURQXzAgYml0ICptYXkqIGJldCBzZXQgaWYgdGhlICppbm5lciogaGVhZGVyIGlzIFVEUAogCSAqLwotCWlmIChpcHY0X3R1bm5lbCAmJgotCSAgICAoZGVjb2RlZC5pbm5lcl9wcm90ICE9IEk0MEVfUlhfUFRZUEVfSU5ORVJfUFJPVF9VRFApICYmCi0JICAgICEocnhfc3RhdHVzICYgKDEgPDwgSTQwRV9SWF9ERVNDX1NUQVRVU19VRFBfMF9TSElGVCkpKSB7CisJaWYgKGlwdjRfdHVubmVsKSB7CiAJCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bWFjX2hlYWRlciArCiAJCQkJCXNpemVvZihzdHJ1Y3QgZXRoaGRyKSArCiAJCQkJCShpcF9oZHIoc2tiKS0+aWhsICogNCk7CkBAIC0xMzAyLDE1ICsxMzM1LDE5IEBACiAJCQkJCSAgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxQUQpKQogCQkJCQkgID8gVkxBTl9ITEVOIDogMDsKIAotCQlyeF91ZHBfY3N1bSA9IHVkcF9jc3VtKHNrYik7Ci0JCWlwaCA9IGlwX2hkcihza2IpOwotCQljc3VtID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKLQkJCQkoc2tiLT5sZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKSwKLQkJCQlJUFBST1RPX1VEUCwgcnhfdWRwX2NzdW0pOworCQlpZiAoKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgJiYKKwkJICAgICh1ZHBfaGRyKHNrYiktPmNoZWNrICE9IDApKSB7CisJCQlyeF91ZHBfY3N1bSA9IHVkcF9jc3VtKHNrYik7CisJCQlpcGggPSBpcF9oZHIoc2tiKTsKKwkJCWNzdW0gPSBjc3VtX3RjcHVkcF9tYWdpYygKKwkJCQkJaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJKHNrYi0+bGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSksCisJCQkJCUlQUFJPVE9fVURQLCByeF91ZHBfY3N1bSk7CiAKLQkJaWYgKHVkcF9oZHIoc2tiKS0+Y2hlY2sgIT0gY3N1bSkKLQkJCWdvdG8gY2hlY2tzdW1fZmFpbDsKKwkJCWlmICh1ZHBfaGRyKHNrYiktPmNoZWNrICE9IGNzdW0pCisJCQkJZ290byBjaGVja3N1bV9mYWlsOworCisJCX0gLyogZWxzZSBpdHMgR1JFIGFuZCBzbyBubyBvdXRlciBVRFAgaGVhZGVyICovCiAJfQogCiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTE1ODEsNiArMTYxOCw3IEBACiAJc3RydWN0IGk0MGVfdnNpICp2c2kgPSBxX3ZlY3Rvci0+dnNpOwogCXN0cnVjdCBpNDBlX3JpbmcgKnJpbmc7CiAJYm9vbCBjbGVhbl9jb21wbGV0ZSA9IHRydWU7CisJYm9vbCBhcm1fd2IgPSBmYWxzZTsKIAlpbnQgYnVkZ2V0X3Blcl9yaW5nOwogCiAJaWYgKHRlc3RfYml0KF9fSTQwRV9ET1dOLCAmdnNpLT5zdGF0ZSkpIHsKQEAgLTE1OTEsOCArMTYyOSwxMCBAQAogCS8qIFNpbmNlIHRoZSBhY3R1YWwgVHggd29yayBpcyBtaW5pbWFsLCB3ZSBjYW4gZ2l2ZSB0aGUgVHggYSBsYXJnZXIKIAkgKiBidWRnZXQgYW5kIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCBjbGVhbmluZyB1cCB0aGUgVHggZGVzY3JpcHRvcnMuCiAJICovCi0JaTQwZV9mb3JfZWFjaF9yaW5nKHJpbmcsIHFfdmVjdG9yLT50eCkKKwlpNDBlX2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItPnR4KSB7CiAJCWNsZWFuX2NvbXBsZXRlICY9IGk0MGVfY2xlYW5fdHhfaXJxKHJpbmcsIHZzaS0+d29ya19saW1pdCk7CisJCWFybV93YiB8PSByaW5nLT5hcm1fd2I7CisJfQogCiAJLyogV2UgYXR0ZW1wdCB0byBkaXN0cmlidXRlIGJ1ZGdldCB0byBlYWNoIFJ4IHF1ZXVlIGZhaXJseSwgYnV0IGRvbid0CiAJICogYWxsb3cgdGhlIGJ1ZGdldCB0byBnbyBiZWxvdyAxIGJlY2F1c2UgdGhhdCB3b3VsZCBleGl0IHBvbGxpbmcgZWFybHkuCkBAIC0xNjAzLDggKzE2NDMsMTEgQEAKIAkJY2xlYW5fY29tcGxldGUgJj0gaTQwZV9jbGVhbl9yeF9pcnEocmluZywgYnVkZ2V0X3Blcl9yaW5nKTsKIAogCS8qIElmIHdvcmsgbm90IGNvbXBsZXRlZCwgcmV0dXJuIGJ1ZGdldCBhbmQgcG9sbGluZyB3aWxsIHJldHVybiAqLwotCWlmICghY2xlYW5fY29tcGxldGUpCisJaWYgKCFjbGVhbl9jb21wbGV0ZSkgeworCQlpZiAoYXJtX3diKQorCQkJaTQwZV9mb3JjZV93Yih2c2ksIHFfdmVjdG9yKTsKIAkJcmV0dXJuIGJ1ZGdldDsKKwl9CiAKIAkvKiBXb3JrIGlzIGRvbmUgc28gZXhpdCB0aGUgcG9sbGluZyBtb2RlIGFuZCByZS1lbmFibGUgdGhlIGludGVycnVwdCAqLwogCW5hcGlfY29tcGxldGUobmFwaSk7CkBAIC0xODQwLDE3ICsxODgzLDE2IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAocHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCWlwaCA9IHNrYi0+ZW5jYXBzdWxhdGlvbiA/IGlubmVyX2lwX2hkcihza2IpIDogaXBfaGRyKHNrYik7CisJaXBoID0gc2tiLT5lbmNhcHN1bGF0aW9uID8gaW5uZXJfaXBfaGRyKHNrYikgOiBpcF9oZHIoc2tiKTsKKwlpcHY2aCA9IHNrYi0+ZW5jYXBzdWxhdGlvbiA/IGlubmVyX2lwdjZfaGRyKHNrYikgOiBpcHY2X2hkcihza2IpOworCisJaWYgKGlwaC0+dmVyc2lvbiA9PSA0KSB7CiAJCXRjcGggPSBza2ItPmVuY2Fwc3VsYXRpb24gPyBpbm5lcl90Y3BfaGRyKHNrYikgOiB0Y3BfaGRyKHNrYik7CiAJCWlwaC0+dG90X2xlbiA9IDA7CiAJCWlwaC0+Y2hlY2sgPSAwOwogCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAogCQkJCQkJIDAsIElQUFJPVE9fVENQLCAwKTsKLQl9IGVsc2UgaWYgKHNrYl9pc19nc29fdjYoc2tiKSkgewotCi0JCWlwdjZoID0gc2tiLT5lbmNhcHN1bGF0aW9uID8gaW5uZXJfaXB2Nl9oZHIoc2tiKQotCQkJCQkgICA6IGlwdjZfaGRyKHNrYik7CisJfSBlbHNlIGlmIChpcHY2aC0+dmVyc2lvbiA9PSA2KSB7CiAJCXRjcGggPSBza2ItPmVuY2Fwc3VsYXRpb24gPyBpbm5lcl90Y3BfaGRyKHNrYikgOiB0Y3BfaGRyKHNrYik7CiAJCWlwdjZoLT5wYXlsb2FkX2xlbiA9IDA7CiAJCXRjcGgtPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmaXB2NmgtPnNhZGRyLCAmaXB2NmgtPmRhZGRyLApAQCAtMTk0NiwxMyArMTk4OCw5IEBACiAJCQkJCSBJNDBFX1RYX0NUWF9FWFRfSVBfSVBWNF9OT19DU1VNOwogCQkJfQogCQl9IGVsc2UgaWYgKHR4X2ZsYWdzICYgSTQwRV9UWF9GTEFHU19JUFY2KSB7Ci0JCQlpZiAodHhfZmxhZ3MgJiBJNDBFX1RYX0ZMQUdTX1RTTykgewotCQkJCSpjZF90dW5uZWxpbmcgfD0gSTQwRV9UWF9DVFhfRVhUX0lQX0lQVjY7CisJCQkqY2RfdHVubmVsaW5nIHw9IEk0MEVfVFhfQ1RYX0VYVF9JUF9JUFY2OworCQkJaWYgKHR4X2ZsYWdzICYgSTQwRV9UWF9GTEFHU19UU08pCiAJCQkJaXBfaGRyKHNrYiktPmNoZWNrID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJKmNkX3R1bm5lbGluZyB8PQotCQkJCQkgSTQwRV9UWF9DVFhfRVhUX0lQX0lQVjRfTk9fQ1NVTTsKLQkJCX0KIAkJfQogCiAJCS8qIE5vdyBzZXQgdGhlIGN0eCBkZXNjcmlwdG9yIGZpZWxkcyAqLwpAQCAtMTk2Miw3ICsyMDAwLDEwIEBACiAJCQkJICAgKChza2JfaW5uZXJfbmV0d29ya19vZmZzZXQoc2tiKSAtCiAJCQkJCXNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpID4+IDEpIDw8CiAJCQkJICAgSTQwRV9UWERfQ1RYX1FXMF9OQVRMRU5fU0hJRlQ7Ci0KKwkJaWYgKHRoaXNfaXBfaGRyLT52ZXJzaW9uID09IDYpIHsKKwkJCXR4X2ZsYWdzICY9IH5JNDBFX1RYX0ZMQUdTX0lQVjQ7CisJCQl0eF9mbGFncyB8PSBJNDBFX1RYX0ZMQUdTX0lQVjY7CisJCX0KIAl9IGVsc2UgewogCQluZXR3b3JrX2hkcl9sZW4gPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7CiAJCXRoaXNfaXBfaGRyID0gaXBfaGRyKHNrYik7CkBAIC0yMTk4LDcgKzIyMzksNiBAQAogCS8qIFBsYWNlIFJTIGJpdCBvbiBsYXN0IGRlc2NyaXB0b3Igb2YgYW55IHBhY2tldCB0aGF0IHNwYW5zIGFjcm9zcyB0aGUKIAkgKiA0dGggZGVzY3JpcHRvciAoV0JfU1RSSURFIGFrYSAweDMpIGluIGEgNjRCIGNhY2hlbGluZS4KIAkgKi8KLSNkZWZpbmUgV0JfU1RSSURFIDB4MwogCWlmICgoKGkgJiBXQl9TVFJJREUpICE9IFdCX1NUUklERSkgJiYKIAkgICAgKGZpcnN0IDw9ICZ0eF9yaW5nLT50eF9iaVtpXSkgJiYKIAkgICAgKGZpcnN0ID49ICZ0eF9yaW5nLT50eF9iaVtpICYgfldCX1NUUklERV0pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaAppbmRleCBlNjBkM2FjLi4xOGIwMDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmgKQEAgLTI0MSw2ICsyNDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF9yeF90aW1lc3RhbXA7CiAKIAlib29sIHJpbmdfYWN0aXZlOwkJLyogaXMgcmluZyBvbmxpbmUgb3Igbm90ICovCisJYm9vbCBhcm1fd2I7CQkvKiBkbyBzb21ldGhpbmcgdG8gYXJtIHdyaXRlIGJhY2sgKi8KIAogCS8qIHN0YXRzIHN0cnVjdHMgKi8KIAlzdHJ1Y3QgaTQwZV9xdWV1ZV9zdGF0cwlzdGF0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmMKaW5kZXggMDUxZWE5NC4uMGY2OWVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmMKQEAgLTExMjUsNyArMTEyNSw3IEBACiAJdTMyIHN3bWFzayA9IG1hc2s7CiAJdTMyIGZ3bWFzayA9IG1hc2sgPDwgMTY7CiAJczMyIHJldF92YWwgPSAwOwotCXMzMiBpID0gMCwgdGltZW91dCA9IDIwMDsgLyogRklYTUU6IGZpbmQgcmVhbCB2YWx1ZSB0byB1c2UgaGVyZSAqLworCXMzMiBpID0gMCwgdGltZW91dCA9IDIwMDsKIAogCXdoaWxlIChpIDwgdGltZW91dCkgewogCQlpZiAoaWdiX2dldF9od19zZW1hcGhvcmUoaHcpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212NjQzeHhfZXRoLmMKaW5kZXggYTYyZmMzOC4uMWM3NTgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYwpAQCAtMTkyLDYgKzE5MiwxMCBAQAogI2RlZmluZSBJU19UU09fSEVBREVSKHR4cSwgYWRkcikgXAogCSgoYWRkciA+PSB0eHEtPnRzb19oZHJzX2RtYSkgJiYgXAogCSAoYWRkciA8IHR4cS0+dHNvX2hkcnNfZG1hICsgdHhxLT50eF9yaW5nX3NpemUgKiBUU09fSEVBREVSX1NJWkUpKQorCisjZGVmaW5lIERFU0NfRE1BX01BUF9TSU5HTEUgMAorI2RlZmluZSBERVNDX0RNQV9NQVBfUEFHRSAxCisKIC8qCiAgKiBSWC9UWCBkZXNjcmlwdG9ycy4KICAqLwpAQCAtMzYyLDYgKzM2Niw3IEBACiAJZG1hX2FkZHJfdCB0c29faGRyc19kbWE7CiAKIAlzdHJ1Y3QgdHhfZGVzYyAqdHhfZGVzY19hcmVhOworCWNoYXIgKnR4X2Rlc2NfbWFwcGluZzsgLyogYXJyYXkgdG8gdHJhY2sgdGhlIHR5cGUgb2YgdGhlIGRtYSBtYXBwaW5nICovCiAJZG1hX2FkZHJfdCB0eF9kZXNjX2RtYTsKIAlpbnQgdHhfZGVzY19hcmVhX3NpemU7CiAKQEAgLTc1MCw2ICs3NTUsNyBAQAogCWlmICh0eHEtPnR4X2N1cnJfZGVzYyA9PSB0eHEtPnR4X3Jpbmdfc2l6ZSkKIAkJdHhxLT50eF9jdXJyX2Rlc2MgPSAwOwogCWRlc2MgPSAmdHhxLT50eF9kZXNjX2FyZWFbdHhfaW5kZXhdOworCXR4cS0+dHhfZGVzY19tYXBwaW5nW3R4X2luZGV4XSA9IERFU0NfRE1BX01BUF9TSU5HTEU7CiAKIAlkZXNjLT5sNGlfY2hrID0gMDsKIAlkZXNjLT5ieXRlX2NudCA9IGxlbmd0aDsKQEAgLTg3OSwxNCArODg1LDEzIEBACiAJCXNrYl9mcmFnX3QgKnRoaXNfZnJhZzsKIAkJaW50IHR4X2luZGV4OwogCQlzdHJ1Y3QgdHhfZGVzYyAqZGVzYzsKLQkJdm9pZCAqYWRkcjsKIAogCQl0aGlzX2ZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmcmFnXTsKLQkJYWRkciA9IHBhZ2VfYWRkcmVzcyh0aGlzX2ZyYWctPnBhZ2UucCkgKyB0aGlzX2ZyYWctPnBhZ2Vfb2Zmc2V0OwogCQl0eF9pbmRleCA9IHR4cS0+dHhfY3Vycl9kZXNjKys7CiAJCWlmICh0eHEtPnR4X2N1cnJfZGVzYyA9PSB0eHEtPnR4X3Jpbmdfc2l6ZSkKIAkJCXR4cS0+dHhfY3Vycl9kZXNjID0gMDsKIAkJZGVzYyA9ICZ0eHEtPnR4X2Rlc2NfYXJlYVt0eF9pbmRleF07CisJCXR4cS0+dHhfZGVzY19tYXBwaW5nW3R4X2luZGV4XSA9IERFU0NfRE1BX01BUF9QQUdFOwogCiAJCS8qCiAJCSAqIFRoZSBsYXN0IGZyYWdtZW50IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0CkBAIC05MDIsOCArOTA3LDkgQEAKIAogCQlkZXNjLT5sNGlfY2hrID0gMDsKIAkJZGVzYy0+Ynl0ZV9jbnQgPSBza2JfZnJhZ19zaXplKHRoaXNfZnJhZyk7Ci0JCWRlc2MtPmJ1Zl9wdHIgPSBkbWFfbWFwX3NpbmdsZShtcC0+ZGV2LT5kZXYucGFyZW50LCBhZGRyLAotCQkJCQkgICAgICAgZGVzYy0+Ynl0ZV9jbnQsIERNQV9UT19ERVZJQ0UpOworCQlkZXNjLT5idWZfcHRyID0gc2tiX2ZyYWdfZG1hX21hcChtcC0+ZGV2LT5kZXYucGFyZW50LAorCQkJCQkJIHRoaXNfZnJhZywgMCwgZGVzYy0+Ynl0ZV9jbnQsCisJCQkJCQkgRE1BX1RPX0RFVklDRSk7CiAJfQogfQogCkBAIC05MzYsNiArOTQyLDcgQEAKIAlpZiAodHhxLT50eF9jdXJyX2Rlc2MgPT0gdHhxLT50eF9yaW5nX3NpemUpCiAJCXR4cS0+dHhfY3Vycl9kZXNjID0gMDsKIAlkZXNjID0gJnR4cS0+dHhfZGVzY19hcmVhW3R4X2luZGV4XTsKKwl0eHEtPnR4X2Rlc2NfbWFwcGluZ1t0eF9pbmRleF0gPSBERVNDX0RNQV9NQVBfU0lOR0xFOwogCiAJaWYgKG5yX2ZyYWdzKSB7CiAJCXR4cV9zdWJtaXRfZnJhZ19za2IodHhxLCBza2IpOwpAQCAtMTA0Nyw5ICsxMDU0LDEyIEBACiAJCWludCB0eF9pbmRleDsKIAkJc3RydWN0IHR4X2Rlc2MgKmRlc2M7CiAJCXUzMiBjbWRfc3RzOworCQljaGFyIGRlc2NfZG1hX21hcDsKIAogCQl0eF9pbmRleCA9IHR4cS0+dHhfdXNlZF9kZXNjOwogCQlkZXNjID0gJnR4cS0+dHhfZGVzY19hcmVhW3R4X2luZGV4XTsKKwkJZGVzY19kbWFfbWFwID0gdHhxLT50eF9kZXNjX21hcHBpbmdbdHhfaW5kZXhdOworCiAJCWNtZF9zdHMgPSBkZXNjLT5jbWRfc3RzOwogCiAJCWlmIChjbWRfc3RzICYgQlVGRkVSX09XTkVEX0JZX0RNQSkgewpAQCAtMTA2NSw5ICsxMDc1LDE5IEBACiAJCXJlY2xhaW1lZCsrOwogCQl0eHEtPnR4X2Rlc2NfY291bnQtLTsKIAotCQlpZiAoIUlTX1RTT19IRUFERVIodHhxLCBkZXNjLT5idWZfcHRyKSkKLQkJCWRtYV91bm1hcF9zaW5nbGUobXAtPmRldi0+ZGV2LnBhcmVudCwgZGVzYy0+YnVmX3B0ciwKLQkJCQkJIGRlc2MtPmJ5dGVfY250LCBETUFfVE9fREVWSUNFKTsKKwkJaWYgKCFJU19UU09fSEVBREVSKHR4cSwgZGVzYy0+YnVmX3B0cikpIHsKKworCQkJaWYgKGRlc2NfZG1hX21hcCA9PSBERVNDX0RNQV9NQVBfUEFHRSkKKwkJCQlkbWFfdW5tYXBfcGFnZShtcC0+ZGV2LT5kZXYucGFyZW50LAorCQkJCQkgICAgICAgZGVzYy0+YnVmX3B0ciwKKwkJCQkJICAgICAgIGRlc2MtPmJ5dGVfY250LAorCQkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCQllbHNlCisJCQkJZG1hX3VubWFwX3NpbmdsZShtcC0+ZGV2LT5kZXYucGFyZW50LAorCQkJCQkJIGRlc2MtPmJ1Zl9wdHIsCisJCQkJCQkgZGVzYy0+Ynl0ZV9jbnQsCisJCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCX0KIAogCQlpZiAoY21kX3N0cyAmIFRYX0VOQUJMRV9JTlRFUlJVUFQpIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKCZ0eHEtPnR4X3NrYik7CkBAIC0xOTk2LDYgKzIwMTYsNyBAQAogCXN0cnVjdCB0eF9xdWV1ZSAqdHhxID0gbXAtPnR4cSArIGluZGV4OwogCXN0cnVjdCB0eF9kZXNjICp0eF9kZXNjOwogCWludCBzaXplOworCWludCByZXQ7CiAJaW50IGk7CiAKIAl0eHEtPmluZGV4ID0gaW5kZXg7CkBAIC0yMDQ4LDE4ICsyMDY5LDM0IEBACiAJCQkJCW5leHRpICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKTsKIAl9CiAKKwl0eHEtPnR4X2Rlc2NfbWFwcGluZyA9IGtjYWxsb2ModHhxLT50eF9yaW5nX3NpemUsIHNpemVvZihjaGFyKSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF0eHEtPnR4X2Rlc2NfbWFwcGluZykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2Rlc2NfYXJlYTsKKwl9CisKIAkvKiBBbGxvY2F0ZSBETUEgYnVmZmVycyBmb3IgVFNPIE1BQy9JUC9UQ1AgaGVhZGVycyAqLwogCXR4cS0+dHNvX2hkcnMgPSBkbWFfYWxsb2NfY29oZXJlbnQobXAtPmRldi0+ZGV2LnBhcmVudCwKIAkJCQkJICAgdHhxLT50eF9yaW5nX3NpemUgKiBUU09fSEVBREVSX1NJWkUsCiAJCQkJCSAgICZ0eHEtPnRzb19oZHJzX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHR4cS0+dHNvX2hkcnMgPT0gTlVMTCkgewotCQlkbWFfZnJlZV9jb2hlcmVudChtcC0+ZGV2LT5kZXYucGFyZW50LCB0eHEtPnR4X2Rlc2NfYXJlYV9zaXplLAotCQkJCSAgdHhxLT50eF9kZXNjX2FyZWEsIHR4cS0+dHhfZGVzY19kbWEpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9kZXNjX21hcHBpbmc7CiAJfQogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnR4cS0+dHhfc2tiKTsKIAogCXJldHVybiAwOworCitlcnJfZnJlZV9kZXNjX21hcHBpbmc6CisJa2ZyZWUodHhxLT50eF9kZXNjX21hcHBpbmcpOworZXJyX2ZyZWVfZGVzY19hcmVhOgorCWlmIChpbmRleCA9PSAwICYmIHNpemUgPD0gbXAtPnR4X2Rlc2Nfc3JhbV9zaXplKQorCQlpb3VubWFwKHR4cS0+dHhfZGVzY19hcmVhKTsKKwllbHNlCisJCWRtYV9mcmVlX2NvaGVyZW50KG1wLT5kZXYtPmRldi5wYXJlbnQsIHR4cS0+dHhfZGVzY19hcmVhX3NpemUsCisJCQkJICB0eHEtPnR4X2Rlc2NfYXJlYSwgdHhxLT50eF9kZXNjX2RtYSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdHhxX2RlaW5pdChzdHJ1Y3QgdHhfcXVldWUgKnR4cSkKQEAgLTIwNzcsNiArMjExNCw4IEBACiAJZWxzZQogCQlkbWFfZnJlZV9jb2hlcmVudChtcC0+ZGV2LT5kZXYucGFyZW50LCB0eHEtPnR4X2Rlc2NfYXJlYV9zaXplLAogCQkJCSAgdHhxLT50eF9kZXNjX2FyZWEsIHR4cS0+dHhfZGVzY19kbWEpOworCWtmcmVlKHR4cS0+dHhfZGVzY19tYXBwaW5nKTsKKwogCWlmICh0eHEtPnRzb19oZHJzKQogCQlkbWFfZnJlZV9jb2hlcmVudChtcC0+ZGV2LT5kZXYucGFyZW50LAogCQkJCSAgdHhxLT50eF9yaW5nX3NpemUgKiBUU09fSEVBREVSX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9uZXRkZXYuYwppbmRleCAxOTBjYmQ5Li5hYzZhOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbmV0ZGV2LmMKQEAgLTQ3NSw3ICs0NzUsOCBAQAogewogCWludCBlcnI7CiAKLQlpZiAocHJpdi0+bWRldi0+ZGV2LT5jYXBzLnR1bm5lbF9vZmZsb2FkX21vZGUgIT0gTUxYNF9UVU5ORUxfT0ZGTE9BRF9NT0RFX1ZYTEFOKQorCWlmIChwcml2LT5tZGV2LT5kZXYtPmNhcHMudHVubmVsX29mZmxvYWRfbW9kZSAhPSBNTFg0X1RVTk5FTF9PRkZMT0FEX01PREVfVlhMQU4gfHwKKwkgICAgcHJpdi0+bWRldi0+ZGV2LT5jYXBzLmRtZnNfaGlnaF9zdGVlcl9tb2RlID09IE1MWDRfU1RFRVJJTkdfRE1GU19BMF9TVEFUSUMpCiAJCXJldHVybiAwOyAvKiBkbyBub3RoaW5nICovCiAKIAllcnIgPSBtbHg0X3R1bm5lbF9zdGVlcl9hZGQocHJpdi0+bWRldi0+ZGV2LCBhZGRyLCBwcml2LT5wb3J0LCBxcG4sCkBAIC0yMzY1LDkgKzIzNjYsMTEgQEAKIAlxdWV1ZV93b3JrKHByaXYtPm1kZXYtPndvcmtxdWV1ZSwgJnByaXYtPnZ4bGFuX2RlbF90YXNrKTsKIH0KIAotc3RhdGljIGJvb2wgbWx4NF9lbl9nc29fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBtbHg0X2VuX2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiB7Ci0JcmV0dXJuIHZ4bGFuX2dzb19jaGVjayhza2IpOworCXJldHVybiB2eGxhbl9mZWF0dXJlc19jaGVjayhza2IsIGZlYXR1cmVzKTsKIH0KICNlbmRpZgogCkBAIC0yNDAwLDcgKzI0MDMsNyBAQAogI2lmZGVmIENPTkZJR19NTFg0X0VOX1ZYTEFOCiAJLm5kb19hZGRfdnhsYW5fcG9ydAk9IG1seDRfZW5fYWRkX3Z4bGFuX3BvcnQsCiAJLm5kb19kZWxfdnhsYW5fcG9ydAk9IG1seDRfZW5fZGVsX3Z4bGFuX3BvcnQsCi0JLm5kb19nc29fY2hlY2sJCT0gbWx4NF9lbl9nc29fY2hlY2ssCisJLm5kb19mZWF0dXJlc19jaGVjawk9IG1seDRfZW5fZmVhdHVyZXNfY2hlY2ssCiAjZW5kaWYKIH07CiAKQEAgLTI0MzQsNyArMjQzNyw3IEBACiAjaWZkZWYgQ09ORklHX01MWDRfRU5fVlhMQU4KIAkubmRvX2FkZF92eGxhbl9wb3J0CT0gbWx4NF9lbl9hZGRfdnhsYW5fcG9ydCwKIAkubmRvX2RlbF92eGxhbl9wb3J0CT0gbWx4NF9lbl9kZWxfdnhsYW5fcG9ydCwKLQkubmRvX2dzb19jaGVjawkJPSBtbHg0X2VuX2dzb19jaGVjaywKKwkubmRvX2ZlYXR1cmVzX2NoZWNrCT0gbWx4NF9lbl9mZWF0dXJlc19jaGVjaywKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl90eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl90eC5jCmluZGV4IGEzMDhkNDEuLmUzMzU3YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fdHguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3R4LmMKQEAgLTk2Miw3ICs5NjIsMTcgQEAKIAkJdHhfZGVzYy0+Y3RybC5vd25lcl9vcGNvZGUgPSBvcF9vd247CiAJCWlmIChzZW5kX2Rvb3JiZWxsKSB7CiAJCQl3bWIoKTsKLQkJCWlvd3JpdGUzMihyaW5nLT5kb29yYmVsbF9xcG4sCisJCQkvKiBTaW5jZSB0aGVyZSBpcyBubyBpb3dyaXRlKl9uYXRpdmUoKSB0aGF0IHdyaXRlcyB0aGUKKwkJCSAqIHZhbHVlIGFzIGlzLCB3aXRob3V0IGJ5dGVzd2FwcGluZyAtIHVzaW5nIHRoZSBvbmUKKwkJCSAqIHRoZSBkb2Vzbid0IGRvIGJ5dGVzd2FwcGluZyBpbiB0aGUgcmVsZXZhbnQgYXJjaAorCQkJICogZW5kaWFubmVzcy4KKwkJCSAqLworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCQkJaW93cml0ZTMyKAorI2Vsc2UKKwkJCWlvd3JpdGUzMmJlKAorI2VuZGlmCisJCQkJICByaW5nLT5kb29yYmVsbF9xcG4sCiAJCQkJICByaW5nLT5iZi51YXItPm1hcCArIE1MWDRfU0VORF9ET09SQkVMTCk7CiAJCX0gZWxzZSB7CiAJCQlyaW5nLT54bWl0X21vcmUrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMKaW5kZXggOTQzY2JkNC4uNmUwODM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMKQEAgLTE3NDQsOCArMTc0NCw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBtbHg0X2Rldl9jYXAgKmRldl9jYXApCiB7CiAJaWYgKGRldi0+Y2Fwcy5zdGVlcmluZ19tb2RlID09IE1MWDRfU1RFRVJJTkdfTU9ERV9ERVZJQ0VfTUFOQUdFRCAmJgotCSAgICBkZXZfY2FwLT5mbGFnczIgJiBNTFg0X0RFVl9DQVBfRkxBRzJfVlhMQU5fT0ZGTE9BRFMgJiYKLQkgICAgZGV2LT5jYXBzLmRtZnNfaGlnaF9zdGVlcl9tb2RlICE9IE1MWDRfU1RFRVJJTkdfRE1GU19BMF9TVEFUSUMpCisJICAgIGRldl9jYXAtPmZsYWdzMiAmIE1MWDRfREVWX0NBUF9GTEFHMl9WWExBTl9PRkZMT0FEUykKIAkJZGV2LT5jYXBzLnR1bm5lbF9vZmZsb2FkX21vZGUgPSBNTFg0X1RVTk5FTF9PRkZMT0FEX01PREVfVlhMQU47CiAJZWxzZQogCQlkZXYtPmNhcHMudHVubmVsX29mZmxvYWRfbW9kZSA9IE1MWDRfVFVOTkVMX09GRkxPQURfTU9ERV9OT05FOwpAQCAtMTgyOSw3ICsxODI4LDcgQEAKIAkJZXJyID0gbWx4NF9kZXZfY2FwKGRldiwgJmRldl9jYXApOwogCQlpZiAoZXJyKSB7CiAJCQltbHg0X2VycihkZXYsICJRVUVSWV9ERVZfQ0FQIGNvbW1hbmQgZmFpbGVkLCBhYm9ydGluZ1xuIik7Ci0JCQlnb3RvIGVycl9zdG9wX2Z3OworCQkJcmV0dXJuIGVycjsKIAkJfQogCiAJCWNob29zZV9zdGVlcmluZ19tb2RlKGRldiwgJmRldl9jYXApOwpAQCAtMTg2MCw3ICsxODU5LDcgQEAKIAkJCQkJICAgICAmaW5pdF9oY2EpOwogCQlpZiAoKGxvbmcgbG9uZykgaWNtX3NpemUgPCAwKSB7CiAJCQllcnIgPSBpY21fc2l6ZTsKLQkJCWdvdG8gZXJyX3N0b3BfZnc7CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKIAkJZGV2LT5jYXBzLm1heF9mbXJfbWFwcyA9ICgxIDw8ICgzMiAtIGlsb2cyKGRldi0+Y2Fwcy5udW1fbXB0cykpKSAtIDE7CkBAIC0xODc0LDcgKzE4NzMsNyBAQAogCiAJCWVyciA9IG1seDRfaW5pdF9pY20oZGV2LCAmZGV2X2NhcCwgJmluaXRfaGNhLCBpY21fc2l6ZSk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGVycl9zdG9wX2Z3OworCQkJcmV0dXJuIGVycjsKIAogCQllcnIgPSBtbHg0X0lOSVRfSENBKGRldiwgJmluaXRfaGNhKTsKIAkJaWYgKGVycikgewpAQCAtMTg4Niw3ICsxODg1LDcgQEAKIAkJCWVyciA9IG1seDRfcXVlcnlfZnVuYyhkZXYsICZkZXZfY2FwKTsKIAkJCWlmIChlcnIgPCAwKSB7CiAJCQkJbWx4NF9lcnIoZGV2LCAiUVVFUllfRlVOQyBjb21tYW5kIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKLQkJCQlnb3RvIGVycl9zdG9wX2Z3OworCQkJCWdvdG8gZXJyX2Nsb3NlOwogCQkJfSBlbHNlIGlmIChlcnIgJiBNTFg0X1FVRVJZX0ZVTkNfTlVNX1NZU19FUVMpIHsKIAkJCQlkZXYtPmNhcHMubnVtX2VxcyA9IGRldl9jYXAubWF4X2VxczsKIAkJCQlkZXYtPmNhcHMucmVzZXJ2ZWRfZXFzID0gZGV2X2NhcC5yZXNlcnZlZF9lcXM7CkBAIC0yMDA2LDExICsyMDA1LDYgQEAKIAlpZiAoIW1seDRfaXNfc2xhdmUoZGV2KSkKIAkJbWx4NF9mcmVlX2ljbXMoZGV2KTsKIAotZXJyX3N0b3BfZnc6Ci0JaWYgKCFtbHg0X2lzX3NsYXZlKGRldikpIHsKLQkJbWx4NF9VTk1BUF9GQShkZXYpOwotCQltbHg0X2ZyZWVfaWNtKGRldiwgcHJpdi0+ZncuZndfaWNtLCAwKTsKLQl9CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tci5jCmluZGV4IGQ2ZjU0OTYuLjcwOTRhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbXIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21yLmMKQEAgLTU4NCw2ICs1ODQsNyBAQAogdm9pZCBtbHg0X21yX3JlcmVnX21lbV9jbGVhbnVwKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tciAqbXIpCiB7CiAJbWx4NF9tdHRfY2xlYW51cChkZXYsICZtci0+bXR0KTsKKwltci0+bXR0Lm9yZGVyID0gLTE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtbHg0X21yX3JlcmVnX21lbV9jbGVhbnVwKTsKIApAQCAtNTkzLDE0ICs1OTQsMTQgQEAKIHsKIAlpbnQgZXJyOwogCi0JbXB0X2VudHJ5LT5zdGFydCAgICAgICA9IGNwdV90b19iZTY0KGlvdmEpOwotCW1wdF9lbnRyeS0+bGVuZ3RoICAgICAgPSBjcHVfdG9fYmU2NChzaXplKTsKLQltcHRfZW50cnktPmVudGl0eV9zaXplID0gY3B1X3RvX2JlMzIocGFnZV9zaGlmdCk7Ci0KIAllcnIgPSBtbHg0X210dF9pbml0KGRldiwgbnBhZ2VzLCBwYWdlX3NoaWZ0LCAmbXItPm10dCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCW1wdF9lbnRyeS0+c3RhcnQgICAgICAgPSBjcHVfdG9fYmU2NChtci0+aW92YSk7CisJbXB0X2VudHJ5LT5sZW5ndGggICAgICA9IGNwdV90b19iZTY0KG1yLT5zaXplKTsKKwltcHRfZW50cnktPmVudGl0eV9zaXplID0gY3B1X3RvX2JlMzIobXItPm10dC5wYWdlX3NoaWZ0KTsKKwogCW1wdF9lbnRyeS0+cGRfZmxhZ3MgJj0gY3B1X3RvX2JlMzIoTUxYNF9NUFRfUERfTUFTSyB8CiAJCQkJCSAgIE1MWDRfTVBUX1BEX0ZMQUdfRU5fSU5WKTsKIAltcHRfZW50cnktPmZsYWdzICAgICY9IGNwdV90b19iZTMyKE1MWDRfTVBUX0ZMQUdfRlJFRSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3N6ODg0eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzejg4NHguYwppbmRleCBmMWViZWQ2Yy4uMmZhNmFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzejg4NHguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3N6ODg0eC5jCkBAIC0yMzAzLDEyICsyMzAzLDYgQEAKIAogLyogU3Bhbm5pbmcgVHJlZSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfZGlzX2xlYXJuKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKLXsKLQlwb3J0X2NmZyhodywgcCwKLQkJS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgUE9SVF9MRUFSTl9ESVNBQkxFLCBzZXQpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfcngoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQogewogCXBvcnRfY2ZnKGh3LCBwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXlyaWNvbS9teXJpMTBnZS9teXJpMTBnZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXlyaWNvbS9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IGFmMDk5MDUuLjcxYWY5OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L215cmljb20vbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9teXJpY29tL215cmkxMGdlL215cmkxMGdlLmMKQEAgLTQwMzMsOCArNDAzMywxMCBAQAogCSh2b2lkKXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKTsKIAltZ3AtPmNtZCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKm1ncC0+Y21kKSwKIAkJCQkgICAgICAmbWdwLT5jbWRfYnVzLCBHRlBfS0VSTkVMKTsKLQlpZiAobWdwLT5jbWQgPT0gTlVMTCkKKwlpZiAoIW1ncC0+Y21kKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CiAJCWdvdG8gYWJvcnRfd2l0aF9lbmFibGVkOworCX0KIAogCW1ncC0+Ym9hcmRfc3BhbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CiAJbWdwLT5pb21lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0ZXJpb24vczJpby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0ZXJpb24vczJpby5jCmluZGV4IGY1ZTRiODIuLmRiMGM3YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldGVyaW9uL3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRlcmlvbi9zMmlvLmMKQEAgLTY5ODcsNyArNjk4Nyw5IEBACiAJCQlpZiAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0gTVNJWF9GTEcpIHsKIAkJCQlpZiAoc3AtPnMyaW9fZW50cmllc1tpXS50eXBlID09CiAJCQkJICAgIE1TSVhfUklOR19UWVBFKSB7Ci0JCQkJCXNwcmludGYoc3AtPmRlc2NbaV0sICIlczpNU0ktWC0lZC1SWCIsCisJCQkJCXNucHJpbnRmKHNwLT5kZXNjW2ldLAorCQkJCQkJc2l6ZW9mKHNwLT5kZXNjW2ldKSwKKwkJCQkJCSIlczpNU0ktWC0lZC1SWCIsCiAJCQkJCQlkZXYtPm5hbWUsIGkpOwogCQkJCQllcnIgPSByZXF1ZXN0X2lycShzcC0+ZW50cmllc1tpXS52ZWN0b3IsCiAJCQkJCQkJICBzMmlvX21zaXhfcmluZ19oYW5kbGUsCkBAIC02OTk2LDcgKzY5OTgsOSBAQAogCQkJCQkJCSAgc3AtPnMyaW9fZW50cmllc1tpXS5hcmcpOwogCQkJCX0gZWxzZSBpZiAoc3AtPnMyaW9fZW50cmllc1tpXS50eXBlID09CiAJCQkJCSAgIE1TSVhfQUxBUk1fVFlQRSkgewotCQkJCQlzcHJpbnRmKHNwLT5kZXNjW2ldLCAiJXM6TVNJLVgtJWQtVFgiLAorCQkJCQlzbnByaW50ZihzcC0+ZGVzY1tpXSwKKwkJCQkJCXNpemVvZihzcC0+ZGVzY1tpXSksCisJCQkJCQkiJXM6TVNJLVgtJWQtVFgiLAogCQkJCQkJZGV2LT5uYW1lLCBpKTsKIAkJCQkJZXJyID0gcmVxdWVzdF9pcnEoc3AtPmVudHJpZXNbaV0udmVjdG9yLAogCQkJCQkJCSAgczJpb19tc2l4X2ZpZm9faGFuZGxlLApAQCAtODE1NCw3ICs4MTU4LDggQEAKIAkJCSAgIiVzOiBVRFAgRnJhZ21lbnRhdGlvbiBPZmZsb2FkKFVGTykgZW5hYmxlZFxuIiwKIAkJCSAgZGV2LT5uYW1lKTsKIAkvKiBJbml0aWFsaXplIGRldmljZSBuYW1lICovCi0Jc3ByaW50ZihzcC0+bmFtZSwgIiVzIE5ldGVyaW9uICVzIiwgZGV2LT5uYW1lLCBzcC0+cHJvZHVjdF9uYW1lKTsKKwlzbnByaW50ZihzcC0+bmFtZSwgc2l6ZW9mKHNwLT5uYW1lKSwgIiVzIE5ldGVyaW9uICVzIiwgZGV2LT5uYW1lLAorCQkgc3AtPnByb2R1Y3RfbmFtZSk7CiAKIAlpZiAodmxhbl90YWdfc3RyaXApCiAJCXNwLT52bGFuX3N0cmlwX2ZsYWcgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggNjEzMDM3NS4uYzUzMWM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0yMzg4LDcgKzIzODgsMTAgQEAKIAogCXdvcmtfZG9uZSA9IG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKHNkc19yaW5nLCBidWRnZXQpOwogCi0JaWYgKCh3b3JrX2RvbmUgPCBidWRnZXQpICYmIHR4X2NvbXBsZXRlKSB7CisJaWYgKCF0eF9jb21wbGV0ZSkKKwkJd29ya19kb25lID0gYnVkZ2V0OworCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQluYXBpX2NvbXBsZXRlKCZzZHNfcmluZy0+bmFwaSk7CiAJCWlmICh0ZXN0X2JpdChfX05YX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCW5ldHhlbl9uaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsYTN4eHguYwppbmRleCBjMmYwOWFmLi40ODQ3NzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGEzeHh4LmMKQEAgLTE0NiwxMCArMTQ2LDcgQEAKIHsKIAlpbnQgaSA9IDA7CiAKLQl3aGlsZSAoaSA8IDEwKSB7Ci0JCWlmIChpKQotCQkJc3NsZWVwKDEpOwotCisJZG8gewogCQlpZiAocWxfc2VtX2xvY2socWRldiwKIAkJCQlRTF9EUlZSX1NFTV9NQVNLLAogCQkJCShRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpCkBAIC0xNTgsNyArMTU1LDggQEAKIAkJCQkgICAgICAiZHJpdmVyIGxvY2sgYWNxdWlyZWRcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KLQl9CisJCXNzbGVlcCgxKTsKKwl9IHdoaWxlICgrK2kgPCAxMCk7CiAKIAluZXRkZXZfZXJyKHFkZXYtPm5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZHJpdmVyIGxvY2suLi5cbiIpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jCmluZGV4IDFhYTI1YjEuLjI1MjhjM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMKQEAgLTUwNSw5ICs1MDUsMTEgQEAKIAlhZGFwdGVyLT5mbGFncyB8PSBRTENOSUNfREVMX1ZYTEFOX1BPUlQ7CiB9CiAKLXN0YXRpYyBib29sIHFsY25pY19nc29fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBxbGNuaWNfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIHsKLQlyZXR1cm4gdnhsYW5fZ3NvX2NoZWNrKHNrYik7CisJcmV0dXJuIHZ4bGFuX2ZlYXR1cmVzX2NoZWNrKHNrYiwgZmVhdHVyZXMpOwogfQogI2VuZGlmCiAKQEAgLTUzMiw3ICs1MzQsNyBAQAogI2lmZGVmIENPTkZJR19RTENOSUNfVlhMQU4KIAkubmRvX2FkZF92eGxhbl9wb3J0CT0gcWxjbmljX2FkZF92eGxhbl9wb3J0LAogCS5uZG9fZGVsX3Z4bGFuX3BvcnQJPSBxbGNuaWNfZGVsX3Z4bGFuX3BvcnQsCi0JLm5kb19nc29fY2hlY2sJCT0gcWxjbmljX2dzb19jaGVjaywKKwkubmRvX2ZlYXR1cmVzX2NoZWNrCT0gcWxjbmljX2ZlYXR1cmVzX2NoZWNrLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IHFsY25pY19wb2xsX2NvbnRyb2xsZXIsCkBAIC0yNjAzLDYgKzI2MDUsNyBAQAogCX0gZWxzZSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSIlczogZmFpbGVkLiBQbGVhc2UgUmVib290XG4iLCBfX2Z1bmNfXyk7CisJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9mcmVlX2h3OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYwppbmRleCA2ZDBiOWRmLi43OGJiNGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYwpAQCAtNzg3LDEwICs3ODcsMTAgQEAKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKIAorCWRpc2FibGVfZGV2X29uX2VyciA9IDE7CiAJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zIChwZGV2LCBEUlZfTkFNRSk7CiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXQ7Ci0JZGlzYWJsZV9kZXZfb25fZXJyID0gMTsKIAogCXBjaV9zZXRfbWFzdGVyIChwZGV2KTsKIApAQCAtMTExMCw2ICsxMTEwLDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX291dDoKKwluZXRpZl9uYXBpX2RlbCgmdHAtPm5hcGkpOwogCV9fcnRsODEzOV9jbGVhbnVwX2RldiAoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UgKHBkZXYpOwogCXJldHVybiBpOwpAQCAtMTEyNCw2ICsxMTI1LDcgQEAKIAlhc3NlcnQgKGRldiAhPSBOVUxMKTsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHAtPnRocmVhZCk7CisJbmV0aWZfbmFwaV9kZWwoJnRwLT5uYXBpKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYwppbmRleCBjMjliYTgwLi4wNDI4M2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMKQEAgLTM5Niw2ICszOTYsOSBAQAogCVtUU1VfQURSTDMxXQk9IDB4MDFmYywKIH07CiAKK3N0YXRpYyB2b2lkIHNoX2V0aF9yY3Zfc25kX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzaF9ldGhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKKwogc3RhdGljIGJvb2wgc2hfZXRoX2lzX2dldGhlcihzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCkKIHsKIAlyZXR1cm4gbWRwLT5yZWdfb2Zmc2V0ID09IHNoX2V0aF9vZmZzZXRfZ2lnYWJpdDsKQEAgLTQ3Myw2ICs0NzYsNyBAQAogCS5lZXNyX2Vycl9jaGVjawk9IEVFU1JfVFdCIHwgRUVTUl9UQUJUIHwgRUVTUl9SQUJUIHwgRUVTUl9SRkUgfAogCQkJICBFRVNSX1JERSB8IEVFU1JfUkZSTUVSIHwgRUVTUl9URkUgfCBFRVNSX1RERSB8CiAJCQkgIEVFU1JfRUNJLAorCS5mZHJfdmFsdWUJPSAweDAwMDAwZjBmLAogCiAJLmFwcgkJPSAxLAogCS5tcHIJCT0gMSwKQEAgLTQ5NSw2ICs0OTksOSBAQAogCS5lZXNyX2Vycl9jaGVjawk9IEVFU1JfVFdCIHwgRUVTUl9UQUJUIHwgRUVTUl9SQUJUIHwgRUVTUl9SRkUgfAogCQkJICBFRVNSX1JERSB8IEVFU1JfUkZSTUVSIHwgRUVTUl9URkUgfCBFRVNSX1RERSB8CiAJCQkgIEVFU1JfRUNJLAorCS5mZHJfdmFsdWUJPSAweDAwMDAwZjBmLAorCisJLnRyc2Nlcl9lcnJfbWFzayA9IERFU0NfSV9SSU5UOCwKIAogCS5hcHIJCT0gMSwKIAkubXByCQk9IDEsCkBAIC04NTYsNiArODYzLDkgQEAKIAogCWlmICghY2QtPmVlc3JfZXJyX2NoZWNrKQogCQljZC0+ZWVzcl9lcnJfY2hlY2sgPSBERUZBVUxUX0VFU1JfRVJSX0NIRUNLOworCisJaWYgKCFjZC0+dHJzY2VyX2Vycl9tYXNrKQorCQljZC0+dHJzY2VyX2Vycl9tYXNrID0gREVGQVVMVF9UUlNDRVJfRVJSX01BU0s7CiB9CiAKIHN0YXRpYyBpbnQgc2hfZXRoX2NoZWNrX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQpAQCAtMTExMyw2ICsxMTIzLDcgQEAKIAlpbnQgcnhfcmluZ3NpemUgPSBzaXplb2YoKnJ4ZGVzYykgKiBtZHAtPm51bV9yeF9yaW5nOwogCWludCB0eF9yaW5nc2l6ZSA9IHNpemVvZigqdHhkZXNjKSAqIG1kcC0+bnVtX3R4X3Jpbmc7CiAJaW50IHNrYnVmZl9zaXplID0gbWRwLT5yeF9idWZfc3ogKyBTSF9FVEhfUlhfQUxJR04gLSAxOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAKIAltZHAtPmN1cl9yeCA9IDA7CiAJbWRwLT5jdXJfdHggPSAwOwpAQCAtMTEyNiw3ICsxMTM3LDYgQEAKIAkJLyogc2tiICovCiAJCW1kcC0+cnhfc2tidWZmW2ldID0gTlVMTDsKIAkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBza2J1ZmZfc2l6ZSk7Ci0JCW1kcC0+cnhfc2tidWZmW2ldID0gc2tiOwogCQlpZiAoc2tiID09IE5VTEwpCiAJCQlicmVhazsKIAkJc2hfZXRoX3NldF9yZWNlaXZlX2FsaWduKHNrYik7CkBAIC0xMTM1LDkgKzExNDUsMTUgQEAKIAkJcnhkZXNjID0gJm1kcC0+cnhfcmluZ1tpXTsKIAkJLyogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzLiAqLwogCQlyeGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMTYpOwotCQlkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsIHJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCwKLQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOwotCQlyeGRlc2MtPmFkZHIgPSB2aXJ0X3RvX3BoeXMoc2tiLT5kYXRhKTsKKwkJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCSAgcnhkZXNjLT5idWZmZXJfbGVuZ3RoLAorCQkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmbmRldi0+ZGV2LCBkbWFfYWRkcikpIHsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJYnJlYWs7CisJCX0KKwkJbWRwLT5yeF9za2J1ZmZbaV0gPSBza2I7CisJCXJ4ZGVzYy0+YWRkciA9IGRtYV9hZGRyOwogCQlyeGRlc2MtPnN0YXR1cyA9IGNwdV90b19lZG1hYyhtZHAsIFJEX1JBQ1QgfCBSRF9SRlApOwogCiAJCS8qIFJ4IGRlc2NyaXB0b3IgYWRkcmVzcyBzZXQgKi8KQEAgLTEyOTQsNyArMTMxMCw3IEBACiAJLyogRnJhbWUgcmVjdiBjb250cm9sIChlbmFibGUgbXVsdGlwbGUtcGFja2V0cyBwZXIgcnggaXJxKSAqLwogCXNoX2V0aF93cml0ZShuZGV2LCBSTUNSX1JOQywgUk1DUik7CiAKLQlzaF9ldGhfd3JpdGUobmRldiwgREVTQ19JX1JJTlQ4IHwgREVTQ19JX1JJTlQ1IHwgREVTQ19JX1RJTlQyLCBUUlNDRVIpOworCXNoX2V0aF93cml0ZShuZGV2LCBtZHAtPmNkLT50cnNjZXJfZXJyX21hc2ssIFRSU0NFUik7CiAKIAlpZiAobWRwLT5jZC0+YmN1bHIpCiAJCXNoX2V0aF93cml0ZShuZGV2LCAweDgwMCwgQkNVTFIpOwkvKiBCdXJzdCBzeWNsZSBzZXQgKi8KQEAgLTEzMDksOCArMTMyNSwxMCBAQAogCQkgICAgIFJGTFIpOwogCiAJc2hfZXRoX3dyaXRlKG5kZXYsIHNoX2V0aF9yZWFkKG5kZXYsIEVFU1IpLCBFRVNSKTsKLQlpZiAoc3RhcnQpCisJaWYgKHN0YXJ0KSB7CisJCW1kcC0+aXJxX2VuYWJsZWQgPSB0cnVlOwogCQlzaF9ldGhfd3JpdGUobmRldiwgbWRwLT5jZC0+ZWVzaXByX3ZhbHVlLCBFRVNJUFIpOworCX0KIAogCS8qIFBBVVNFIFByb2hpYml0aW9uICovCiAJdmFsID0gKHNoX2V0aF9yZWFkKG5kZXYsIEVDTVIpICYgRUNNUl9ETSkgfApAQCAtMTM0OSw2ICsxMzY3LDMzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgc2hfZXRoX2Rldl9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisJaW50IGk7CisKKwkvKiBEZWFjdGl2YXRlIGFsbCBUWCBkZXNjcmlwdG9ycywgc28gRE1BIHNob3VsZCBzdG9wIGF0IG5leHQKKwkgKiBwYWNrZXQgYm91bmRhcnkgaWYgaXQncyBjdXJyZW50bHkgcnVubmluZworCSAqLworCWZvciAoaSA9IDA7IGkgPCBtZHAtPm51bV90eF9yaW5nOyBpKyspCisJCW1kcC0+dHhfcmluZ1tpXS5zdGF0dXMgJj0gfmNwdV90b19lZG1hYyhtZHAsIFREX1RBQ1QpOworCisJLyogRGlzYWJsZSBUWCBGSUZPIGVncmVzcyB0byBNQUMgKi8KKwlzaF9ldGhfcmN2X3NuZF9kaXNhYmxlKG5kZXYpOworCisJLyogU3RvcCBSWCBETUEgYXQgbmV4dCBwYWNrZXQgYm91bmRhcnkgKi8KKwlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURSUlIpOworCisJLyogQXNpZGUgZnJvbSBUWCBETUEsIHdlIGNhbid0IHRlbGwgd2hlbiB0aGUgaGFyZHdhcmUgaXMKKwkgKiByZWFsbHkgc3RvcHBlZCwgc28gd2UgbmVlZCB0byByZXNldCB0byBtYWtlIHN1cmUuCisJICogQmVmb3JlIGRvaW5nIHRoYXQsIHdhaXQgZm9yIGxvbmcgZW5vdWdoIHRvICpwcm9iYWJseSoKKwkgKiBmaW5pc2ggdHJhbnNtaXR0aW5nIHRoZSBsYXN0IHBhY2tldCBhbmQgcG9sbCBzdGF0cy4KKwkgKi8KKwltc2xlZXAoMik7IC8qIG1heCBmcmFtZSB0aW1lIGF0IDEwIE1icHMgPCAxMjUwIHVzICovCisJc2hfZXRoX2dldF9zdGF0cyhuZGV2KTsKKwlzaF9ldGhfcmVzZXQobmRldik7Cit9CisKIC8qIGZyZWUgVHggc2tiIGZ1bmN0aW9uICovCiBzdGF0aWMgaW50IHNoX2V0aF90eGZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CkBAIC0xMzkzLDYgKzE0MzgsNyBAQAogCXUxNiBwa3RfbGVuID0gMDsKIAl1MzIgZGVzY19zdGF0dXM7CiAJaW50IHNrYnVmZl9zaXplID0gbWRwLT5yeF9idWZfc3ogKyBTSF9FVEhfUlhfQUxJR04gLSAxOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAKIAlib2d1c2NudCA9IG1pbihib2d1c2NudCwgKnF1b3RhKTsKIAlsaW1pdCA9IGJvZ3VzY250OwpAQCAtMTQ0MCw5ICsxNDg2LDkgQEAKIAkJCW1kcC0+cnhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CiAJCQlpZiAobWRwLT5jZC0+cnBhZGlyKQogCQkJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKLQkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZuZGV2LT5kZXYsIHJ4ZGVzYy0+YWRkciwKLQkJCQkJCUFMSUdOKG1kcC0+cnhfYnVmX3N6LCAxNiksCi0JCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZSgmbmRldi0+ZGV2LCByeGRlc2MtPmFkZHIsCisJCQkJCSBBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMTYpLAorCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOwogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKQEAgLTE0NjIsMTUgKzE1MDgsMjAgQEAKIAogCQlpZiAobWRwLT5yeF9za2J1ZmZbZW50cnldID09IE5VTEwpIHsKIAkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmRldiwgc2tidWZmX3NpemUpOwotCQkJbWRwLT5yeF9za2J1ZmZbZW50cnldID0gc2tiOwogCQkJaWYgKHNrYiA9PSBOVUxMKQogCQkJCWJyZWFrOwkvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kLiAqLwogCQkJc2hfZXRoX3NldF9yZWNlaXZlX2FsaWduKHNrYik7Ci0JCQlkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsCi0JCQkJICAgICAgIHJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkJICByeGRlc2MtPmJ1ZmZlcl9sZW5ndGgsCisJCQkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJm5kZXYtPmRldiwgZG1hX2FkZHIpKSB7CisJCQkJa2ZyZWVfc2tiKHNrYik7CisJCQkJYnJlYWs7CisJCQl9CisJCQltZHAtPnJ4X3NrYnVmZltlbnRyeV0gPSBza2I7CiAKIAkJCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOwotCQkJcnhkZXNjLT5hZGRyID0gdmlydF90b19waHlzKHNrYi0+ZGF0YSk7CisJCQlyeGRlc2MtPmFkZHIgPSBkbWFfYWRkcjsKIAkJfQogCQlpZiAoZW50cnkgPj0gbWRwLT5udW1fcnhfcmluZyAtIDEpCiAJCQlyeGRlc2MtPnN0YXR1cyB8PQpAQCAtMTU2Niw3ICsxNjE3LDYgQEAKIAkJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SRlJNRVIpIHsKIAkJCS8qIFJlY2VpdmUgRnJhbWUgT3ZlcmZsb3cgaW50ICovCiAJCQluZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKLQkJCW5ldGlmX2VycihtZHAsIHJ4X2VyciwgbmRldiwgIlJlY2VpdmUgQWJvcnRcbiIpOwogCQl9CiAJfQogCkBAIC0xNTg1LDEzICsxNjM1LDExIEBACiAJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SREUpIHsKIAkJLyogUmVjZWl2ZSBEZXNjcmlwdG9yIEVtcHR5IGludCAqLwogCQluZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQluZXRpZl9lcnIobWRwLCByeF9lcnIsIG5kZXYsICJSZWNlaXZlIERlc2NyaXB0b3IgRW1wdHlcbiIpOwogCX0KIAogCWlmIChpbnRyX3N0YXR1cyAmIEVFU1JfUkZFKSB7CiAJCS8qIFJlY2VpdmUgRklGTyBPdmVyZmxvdyBpbnQgKi8KIAkJbmRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKLQkJbmV0aWZfZXJyKG1kcCwgcnhfZXJyLCBuZGV2LCAiUmVjZWl2ZSBGSUZPIE92ZXJmbG93XG4iKTsKIAl9CiAKIAlpZiAoIW1kcC0+Y2QtPm5vX2FkZSAmJiAoaW50cl9zdGF0dXMgJiBFRVNSX0FERSkpIHsKQEAgLTE2NDYsNyArMTY5NCwxMiBAQAogCWlmIChpbnRyX3N0YXR1cyAmIChFRVNSX1JYX0NIRUNLIHwgY2QtPnR4X2NoZWNrIHwgY2QtPmVlc3JfZXJyX2NoZWNrKSkKIAkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJZWxzZQotCQlnb3RvIG90aGVyX2lycTsKKwkJZ290byBvdXQ7CisKKwlpZiAoIWxpa2VseShtZHAtPmlycV9lbmFibGVkKSkgeworCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRUVTSVBSKTsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SWF9DSEVDSykgewogCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZtZHAtPm5hcGkpKSB7CkBAIC0xNjc3LDcgKzE3MzAsNyBAQAogCQlzaF9ldGhfZXJyb3IobmRldiwgaW50cl9zdGF0dXMpOwogCX0KIAotb3RoZXJfaXJxOgorb3V0OgogCXNwaW5fdW5sb2NrKCZtZHAtPmxvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTE3MDUsNyArMTc1OCw4IEBACiAJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogCS8qIFJlZW5hYmxlIFJ4IGludGVycnVwdHMgKi8KLQlzaF9ldGhfd3JpdGUobmRldiwgbWRwLT5jZC0+ZWVzaXByX3ZhbHVlLCBFRVNJUFIpOworCWlmIChtZHAtPmlycV9lbmFibGVkKQorCQlzaF9ldGhfd3JpdGUobmRldiwgbWRwLT5jZC0+ZWVzaXByX3ZhbHVlLCBFRVNJUFIpOwogb3V0OgogCXJldHVybiBidWRnZXQgLSBxdW90YTsKIH0KQEAgLTE4MjAsNiArMTg3NCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCisJaWYgKCFtZHAtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWRwLT5sb2NrLCBmbGFncyk7CiAJcmV0ID0gcGh5X2V0aHRvb2xfZ3NldChtZHAtPnBoeWRldiwgZWNtZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRwLT5sb2NrLCBmbGFncyk7CkBAIC0xODM0LDYgKzE4OTEsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAorCWlmICghbWRwLT5waHlkZXYpCisJCXJldHVybiAtRU5PREVWOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1kcC0+bG9jaywgZmxhZ3MpOwogCiAJLyogZGlzYWJsZSB0eCBhbmQgcnggKi8KQEAgLTE4NjgsNiArMTkyOCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCisJaWYgKCFtZHAtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWRwLT5sb2NrLCBmbGFncyk7CiAJcmV0ID0gcGh5X3N0YXJ0X2FuZWcobWRwLT5waHlkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcC0+bG9jaywgZmxhZ3MpOwpAQCAtMTk1Miw0MCArMjAxNSw1MCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CiAJCW5ldGlmX3R4X2Rpc2FibGUobmRldik7Ci0JCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCi0JCXNoX2V0aF93cml0ZShuZGV2LCAweDAwMDAsIEVFU0lQUik7Ci0JCS8qIFN0b3AgdGhlIGNoaXAncyBUeCBhbmQgUnggcHJvY2Vzc2VzLiAqLwotCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURUUlIpOwotCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURSUlIpOwotCQlzeW5jaHJvbml6ZV9pcnEobmRldi0+aXJxKTsKLQl9CiAKLQkvKiBGcmVlIGFsbCB0aGUgc2tidWZmcyBpbiB0aGUgUnggcXVldWUuICovCi0Jc2hfZXRoX3JpbmdfZnJlZShuZGV2KTsKLQkvKiBGcmVlIERNQSBidWZmZXIgKi8KLQlzaF9ldGhfZnJlZV9kbWFfYnVmZmVyKG1kcCk7CisJCS8qIFNlcmlhbGlzZSB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgTkFQSSwgdGhlbgorCQkgKiBkaXNhYmxlIGludGVycnVwdHMuICBXZSBoYXZlIHRvIGNsZWFyIHRoZQorCQkgKiBpcnFfZW5hYmxlZCBmbGFnIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGludGVycnVwdHMKKwkJICogd29uJ3QgYmUgcmUtZW5hYmxlZC4KKwkJICovCisJCW1kcC0+aXJxX2VuYWJsZWQgPSBmYWxzZTsKKwkJc3luY2hyb25pemVfaXJxKG5kZXYtPmlycSk7CisJCW5hcGlfc3luY2hyb25pemUoJm1kcC0+bmFwaSk7CisJCXNoX2V0aF93cml0ZShuZGV2LCAweDAwMDAsIEVFU0lQUik7CisKKwkJc2hfZXRoX2Rldl9leGl0KG5kZXYpOworCisJCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBSeCBxdWV1ZS4gKi8KKwkJc2hfZXRoX3JpbmdfZnJlZShuZGV2KTsKKwkJLyogRnJlZSBETUEgYnVmZmVyICovCisJCXNoX2V0aF9mcmVlX2RtYV9idWZmZXIobWRwKTsKKwl9CiAKIAkvKiBTZXQgbmV3IHBhcmFtZXRlcnMgKi8KIAltZHAtPm51bV9yeF9yaW5nID0gcmluZy0+cnhfcGVuZGluZzsKIAltZHAtPm51bV90eF9yaW5nID0gcmluZy0+dHhfcGVuZGluZzsKIAotCXJldCA9IHNoX2V0aF9yaW5nX2luaXQobmRldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJbmV0ZGV2X2VycihuZGV2LCAiJXM6IHNoX2V0aF9yaW5nX2luaXQgZmFpbGVkLlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXQgPSBzaF9ldGhfZGV2X2luaXQobmRldiwgZmFsc2UpOwotCWlmIChyZXQgPCAwKSB7Ci0JCW5ldGRldl9lcnIobmRldiwgIiVzOiBzaF9ldGhfZGV2X2luaXQgZmFpbGVkLlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KLQogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCXJldCA9IHNoX2V0aF9yaW5nX2luaXQobmRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQluZXRkZXZfZXJyKG5kZXYsICIlczogc2hfZXRoX3JpbmdfaW5pdCBmYWlsZWQuXG4iLAorCQkJCSAgIF9fZnVuY19fKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0ID0gc2hfZXRoX2Rldl9pbml0KG5kZXYsIGZhbHNlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW5ldGRldl9lcnIobmRldiwgIiVzOiBzaF9ldGhfZGV2X2luaXQgZmFpbGVkLlxuIiwKKwkJCQkgICBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJbWRwLT5pcnFfZW5hYmxlZCA9IHRydWU7CiAJCXNoX2V0aF93cml0ZShuZGV2LCBtZHAtPmNkLT5lZXNpcHJfdmFsdWUsIEVFU0lQUik7CiAJCS8qIFNldHRpbmcgdGhlIFJ4IG1vZGUgd2lsbCBzdGFydCB0aGUgUnggcHJvY2Vzcy4gKi8KIAkJc2hfZXRoX3dyaXRlKG5kZXYsIEVEUlJSX1IsIEVEUlJSKTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIxMDEsNiArMjE3NCw5IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcC0+bG9jaywgZmxhZ3MpOwogCisJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwogCWVudHJ5ID0gbWRwLT5jdXJfdHggJSBtZHAtPm51bV90eF9yaW5nOwogCW1kcC0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKIAl0eGRlc2MgPSAmbWRwLT50eF9yaW5nW2VudHJ5XTsKQEAgLTIxMTAsMTAgKzIxODYsMTEgQEAKIAkJCQkgc2tiLT5sZW4gKyAyKTsKIAl0eGRlc2MtPmFkZHIgPSBkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwotCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKQotCQl0eGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBFVEhfWkxFTjsKLQllbHNlCi0JCXR4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IHNrYi0+bGVuOworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmbmRldi0+ZGV2LCB0eGRlc2MtPmFkZHIpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKwl0eGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBza2ItPmxlbjsKIAogCWlmIChlbnRyeSA+PSBtZHAtPm51bV90eF9yaW5nIC0gMSkKIAkJdHhkZXNjLT5zdGF0dXMgfD0gY3B1X3RvX2VkbWFjKG1kcCwgVERfVEFDVCB8IFREX1RETEUpOwpAQCAtMjE2NSwyNCArMjI0MiwyNiBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAotCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCisJLyogU2VyaWFsaXNlIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCBOQVBJLCB0aGVuIGRpc2FibGUKKwkgKiBpbnRlcnJ1cHRzLiAgV2UgaGF2ZSB0byBjbGVhciB0aGUgaXJxX2VuYWJsZWQgZmxhZyBmaXJzdCB0bworCSAqIGVuc3VyZSB0aGF0IGludGVycnVwdHMgd29uJ3QgYmUgcmUtZW5hYmxlZC4KKwkgKi8KKwltZHAtPmlycV9lbmFibGVkID0gZmFsc2U7CisJc3luY2hyb25pemVfaXJxKG5kZXYtPmlycSk7CisJbmFwaV9kaXNhYmxlKCZtZHAtPm5hcGkpOwogCXNoX2V0aF93cml0ZShuZGV2LCAweDAwMDAsIEVFU0lQUik7CiAKLQkvKiBTdG9wIHRoZSBjaGlwJ3MgVHggYW5kIFJ4IHByb2Nlc3Nlcy4gKi8KLQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURUUlIpOwotCXNoX2V0aF93cml0ZShuZGV2LCAwLCBFRFJSUik7CisJc2hfZXRoX2Rldl9leGl0KG5kZXYpOwogCi0Jc2hfZXRoX2dldF9zdGF0cyhuZGV2KTsKIAkvKiBQSFkgRGlzY29ubmVjdCAqLwogCWlmIChtZHAtPnBoeWRldikgewogCQlwaHlfc3RvcChtZHAtPnBoeWRldik7CiAJCXBoeV9kaXNjb25uZWN0KG1kcC0+cGh5ZGV2KTsKKwkJbWRwLT5waHlkZXYgPSBOVUxMOwogCX0KIAogCWZyZWVfaXJxKG5kZXYtPmlycSwgbmRldik7CiAKLQluYXBpX2Rpc2FibGUoJm1kcC0+bmFwaSk7Ci0KIAkvKiBGcmVlIGFsbCB0aGUgc2tidWZmcyBpbiB0aGUgUnggcXVldWUuICovCiAJc2hfZXRoX3JpbmdfZnJlZShuZGV2KTsKIApAQCAtMjQxMCw3ICsyNDg5LDcgQEAKIAlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCBpLCByZXQ7CiAKLQlpZiAodW5saWtlbHkoIW1kcC0+Y2QtPnRzdSkpCisJaWYgKCFtZHAtPmNkLT50c3UpCiAJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IFNIX0VUSF9UU1VfQ0FNX0VOVFJJRVM7IGkrKykgewpAQCAtMjQzMyw3ICsyNTEyLDcgQEAKIAl2b2lkICpyZWdfb2Zmc2V0ID0gc2hfZXRoX3RzdV9nZXRfb2Zmc2V0KG1kcCwgVFNVX0FEUkgwKTsKIAlpbnQgaTsKIAotCWlmICh1bmxpa2VseSghbWRwLT5jZC0+dHN1KSkKKwlpZiAoIW1kcC0+Y2QtPnRzdSkKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IFNIX0VUSF9UU1VfQ0FNX0VOVFJJRVM7IGkrKywgcmVnX29mZnNldCArPSA4KSB7CkBAIC0yNDQzLDggKzI1MjIsOCBAQAogCX0KIH0KIAotLyogTXVsdGljYXN0IHJlY2VwdGlvbiBkaXJlY3Rpb25zIHNldCAqLwotc3RhdGljIHZvaWQgc2hfZXRoX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKKy8qIFVwZGF0ZSBwcm9taXNjdW91cyBmbGFnIGFuZCBtdWx0aWNhc3QgZmlsdGVyICovCitzdGF0aWMgdm9pZCBzaF9ldGhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1MzIgZWNtcl9iaXRzOwpAQCAtMjQ1NSw3ICsyNTM0LDkgQEAKIAkvKiBJbml0aWFsIGNvbmRpdGlvbiBpcyBNQ1QgPSAxLCBQUk0gPSAwLgogCSAqIERlcGVuZGluZyBvbiBuZGV2LT5mbGFncywgc2V0IFBSTSBvciBjbGVhciBNQ1QKIAkgKi8KLQllY21yX2JpdHMgPSAoc2hfZXRoX3JlYWQobmRldiwgRUNNUikgJiB+RUNNUl9QUk0pIHwgRUNNUl9NQ1Q7CisJZWNtcl9iaXRzID0gc2hfZXRoX3JlYWQobmRldiwgRUNNUikgJiB+RUNNUl9QUk07CisJaWYgKG1kcC0+Y2QtPnRzdSkKKwkJZWNtcl9iaXRzIHw9IEVDTVJfTUNUOwogCiAJaWYgKCEobmRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSkgewogCQlzaF9ldGhfdHN1X3B1cmdlX21jYXN0KG5kZXYpOwpAQCAtMjQ4NCw5ICsyNTY1LDYgQEAKIAkJCQl9CiAJCQl9CiAJCX0KLQl9IGVsc2UgewotCQkvKiBOb3JtYWwsIHVuaWNhc3QvYnJvYWRjYXN0LW9ubHkgbW9kZS4gKi8KLQkJZWNtcl9iaXRzID0gKGVjbXJfYml0cyAmIH5FQ01SX1BSTSkgfCBFQ01SX01DVDsKIAl9CiAKIAkvKiB1cGRhdGUgdGhlIGV0aGVybmV0IG1vZGUgKi8KQEAgLTI2OTQsNiArMjc3Miw3IEBACiAJLm5kb19zdG9wCQk9IHNoX2V0aF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gc2hfZXRoX3N0YXJ0X3htaXQsCiAJLm5kb19nZXRfc3RhdHMJCT0gc2hfZXRoX2dldF9zdGF0cywKKwkubmRvX3NldF9yeF9tb2RlCT0gc2hfZXRoX3NldF9yeF9tb2RlLAogCS5uZG9fdHhfdGltZW91dAkJPSBzaF9ldGhfdHhfdGltZW91dCwKIAkubmRvX2RvX2lvY3RsCQk9IHNoX2V0aF9kb19pb2N0bCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKQEAgLTI3MDYsNyArMjc4NSw3IEBACiAJLm5kb19zdG9wCQk9IHNoX2V0aF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gc2hfZXRoX3N0YXJ0X3htaXQsCiAJLm5kb19nZXRfc3RhdHMJCT0gc2hfZXRoX2dldF9zdGF0cywKLQkubmRvX3NldF9yeF9tb2RlCT0gc2hfZXRoX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9yeF9tb2RlCT0gc2hfZXRoX3NldF9yeF9tb2RlLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gc2hfZXRoX3ZsYW5fcnhfYWRkX3ZpZCwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBzaF9ldGhfdmxhbl9yeF9raWxsX3ZpZCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gc2hfZXRoX3R4X3RpbWVvdXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguaAppbmRleCAyMjMwMWJmLi4zMzJkM2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmgKQEAgLTM2OSw2ICszNjksOCBAQAogCURFU0NfSV9SSU5UMSA9IDB4MDAwMSwKIH07CiAKKyNkZWZpbmUgREVGQVVMVF9UUlNDRVJfRVJSX01BU0sgKERFU0NfSV9SSU5UOCB8IERFU0NfSV9SSU5UNSB8IERFU0NfSV9USU5UMikKKwogLyogUlBBRElSICovCiBlbnVtIFJQQURJUl9CSVQgewogCVJQQURJUl9QQURTMSA9IDB4MjAwMDAsIFJQQURJUl9QQURTMCA9IDB4MTAwMDAsCkBAIC00NzAsNiArNDcyLDkgQEAKIAl1bnNpZ25lZCBsb25nIHR4X2NoZWNrOwogCXVuc2lnbmVkIGxvbmcgZWVzcl9lcnJfY2hlY2s7CiAKKwkvKiBFcnJvciBtYXNrICovCisJdW5zaWduZWQgbG9uZyB0cnNjZXJfZXJyX21hc2s7CisKIAkvKiBoYXJkd2FyZSBmZWF0dXJlcyAqLwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOyAvKiBJUlEgY29uZmlndXJhdGlvbiBmbGFncyAqLwogCXVuc2lnbmVkIG5vX3BzcjoxOwkvKiBFdGhlckMgRE8gTk9UIGhhdmUgUFNSICovCkBAIC01MDgsNiArNTEzLDcgQEAKIAl1MzIgcnhfYnVmX3N6OwkJCS8qIEJhc2VkIG9uIE1UVStzbGFjay4gKi8KIAlpbnQgZWRtYWNfZW5kaWFuOwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCWJvb2wgaXJxX2VuYWJsZWQ7CiAJLyogTUlJIHRyYW5zY2VpdmVyIHNlY3Rpb24uICovCiAJdTMyIHBoeV9pZDsJCQkvKiBQSFkgSUQgKi8KIAlzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1czsJLyogTURJTyBidXMgY29udHJvbCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvczZnbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zNmdtYWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUzN2NiZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zNmdtYWMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNTggKzAsMCBAQAotLyoKLSAqIEV0aGVybmV0IGRyaXZlciBmb3IgUzYxMDUgb24gY2hpcCBuZXR3b3JrIGRldmljZQotICogKGMpMjAwOCBlbWxpeCBHbWJIIGh0dHA6Ly93d3cuZW1saXguY29tCi0gKiBBdXRob3JzOglPc2thciBTY2hpcm1lciA8b3NrYXJAc2NhcmEuY29tPgotICoJCURhbmllbCBHbG9lY2tuZXIgPGRnQGVtbGl4LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPHZhcmlhbnQvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDx2YXJpYW50L2RtYWMuaD4KLQotI2RlZmluZSBEUlZfTkFNRSAiczZnbWFjIgotI2RlZmluZSBEUlZfUFJNVCBEUlZfTkFNRSAiOiAiCi0KLQotLyogcmVnaXN0ZXIgZGVjbGFyYXRpb25zICovCi0KLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMQkweDAwMAotI2RlZmluZSBTNl9HTUFDX01BQ0NPTkYxX1RYRU5BCQkwCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfU1lOQ1RYCQkxCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUlhFTkEJCTIKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9TWU5DUlgJCTMKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9UWEZMT1dDVFJMCTQKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9SWEZMT1dDVFJMCTUKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9MT09QQkFDSwk4Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUkVTVFhGVU5DCTE2Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUkVTUlhGVU5DCTE3Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUkVTVFhNQUNDVFJMCTE4Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUkVTUlhNQUNDVFJMCTE5Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfU0lNVUxSRVMJMzAKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9TT0ZUUkVTCTMxCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjIJMHgwMDQKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMl9GVUxMCQkwCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfQ1JDRU5BCQkxCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfUEFEQ1JDRU5BCTIKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMl9MRU5HVEhGQ0hLCTQKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMl9IVUdFRlJBTUVOQQk1Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFCQk4Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFX05JQkJMRQkJMQotI2RlZmluZSBTNl9HTUFDX01BQ0NPTkYyX0lGTU9ERV9CWVRFCQkyCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFX01BU0sJCTMKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMl9QUkVBTUJMRUxFTgkxMgotI2RlZmluZSBTNl9HTUFDX01BQ0NPTkYyX1BSRUFNQkxFTEVOX01BU0sJMHgwRgotI2RlZmluZSBTNl9HTUFDX01BQ0lQR0lGRwkweDAwOAotI2RlZmluZSBTNl9HTUFDX01BQ0lQR0lGR19CMkJJTlRFUlBHQVAJMAotI2RlZmluZSBTNl9HTUFDX01BQ0lQR0lGR19CMkJJTlRFUlBHQVBfTUFTSwkweDdGCi0jZGVmaW5lIFM2X0dNQUNfTUFDSVBHSUZHX01JTklGR0VORk9SQ0UJOAotI2RlZmluZSBTNl9HTUFDX01BQ0lQR0lGR19CMkJJTlRFUlBHQVAyCTE2Ci0jZGVmaW5lIFM2X0dNQUNfTUFDSVBHSUZHX0IyQklOVEVSUEdBUDEJMjQKLSNkZWZpbmUgUzZfR01BQ19NQUNIQUxGRFVQTEVYCTB4MDBDCi0jZGVmaW5lIFM2X0dNQUNfTUFDSEFMRkRVUExFWF9DT0xMSVNXSU4JMAotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfQ09MTElTV0lOX01BU0sJMHgzRgotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfUkVUWE1BWAkxMgotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfUkVUWE1BWF9NQVNLCTB4MEYKLSNkZWZpbmUgUzZfR01BQ19NQUNIQUxGRFVQTEVYX0VYQ0VTU0RFRgkxNgotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfTk9CQUNLT0ZGCTE3Ci0jZGVmaW5lIFM2X0dNQUNfTUFDSEFMRkRVUExFWF9CUE5PQkNLT0YJMTgKLSNkZWZpbmUgUzZfR01BQ19NQUNIQUxGRFVQTEVYX0FMVEJFQkVOQQkxOQotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfQUxUQkVCVFJOCTIwCi0jZGVmaW5lIFM2X0dNQUNfTUFDSEFMRkRVUExFWF9BTFRCRUJUUl9NQVNLCTB4MEYKLSNkZWZpbmUgUzZfR01BQ19NQUNNQVhGUkFNRUxFTgkweDAxMAotI2RlZmluZSBTNl9HTUFDX01BQ01JSUNPTkYJMHgwMjAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUwJCTAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTAJCTAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTIJCTEKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTQJCTIKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTgJCTMKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMjQJCTQKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMzQJCTUKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWNjgJCTYKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTY4CQk3Ci0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQ09ORl9DU0VMX01BU0sJCTcKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX1BSRUFNQkxFU1VQUgk0Ci0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQ09ORl9TQ0FOQVVUT0lOQ1IJNQotI2RlZmluZSBTNl9HTUFDX01BQ01JSUNNRAkweDAyNAotI2RlZmluZSBTNl9HTUFDX01BQ01JSUNNRF9SRUFECQkwCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQ01EX1NDQU4JCTEKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlBRERSCTB4MDI4Ci0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQUREUl9SRUcJCTAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlBRERSX1JFR19NQVNLCQkweDFGCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQUREUl9QSFkJCTgKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlBRERSX1BIWV9NQVNLCQkweDFGCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQ1RSTAkweDAyQwotI2RlZmluZSBTNl9HTUFDX01BQ01JSVNUQVQJMHgwMzAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlJTkRJCTB4MDM0Ci0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJSU5ESV9CVVNZCQkwCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJSU5ESV9TQ0FOCQkxCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJSU5ESV9JTlZBTAkyCi0jZGVmaW5lIFM2X0dNQUNfTUFDSU5URVJGU1RBVAkweDAzQwotI2RlZmluZSBTNl9HTUFDX01BQ0lOVEVSRlNUQVRfTElOS0ZBSUwJMwotI2RlZmluZSBTNl9HTUFDX01BQ0lOVEVSRlNUQVRfRVhDRVNTREVGCTkKLSNkZWZpbmUgUzZfR01BQ19NQUNTVEFUQUREUjEJMHgwNDAKLSNkZWZpbmUgUzZfR01BQ19NQUNTVEFUQUREUjIJMHgwNDQKLQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMAkweDA0OAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9IU1RSU1RXVAkwCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX0hTVFJTVFNSCTEKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjBfSFNUUlNURlIJMgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9IU1RSU1RTVAkzCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX0hTVFJTVEZUCTQKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjBfV1RNRU5SRVEJOAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9TUkZFTlJFUQk5Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX0ZSRkVOUkVRCTEwCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX1NURkVOUkVRCTExCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX0ZURkVOUkVRCTEyCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX1dUTUVOUlBMWQkxNgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9TUkZFTlJQTFkJMTcKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjBfRlJGRU5SUExZCTE4Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX1NURkVOUlBMWQkxOQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9GVEZFTlJQTFkJMjAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjEJMHgwNEMKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjIJMHgwNTAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjJfQ0ZHTFdNCTAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjJfQ0ZHSFdNCTE2Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYzCTB4MDU0Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYzX0NGR0ZUVEgJMAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GM19DRkdIV01GVAkxNgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GNAkweDA1OAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9QUkVWRFJPUAkwCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX1JVTlQJMQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9GQUxTRUNBUgkyCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX0NPREVFUlIJMwotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9DUkNFUlIJNAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9MRU5HVEhFUlIJNQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9MRU5SQU5HRQk2Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX09LCQk3Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX01VTFRJQ0FTVAk4Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX0JST0FEQ0FTVAk5Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX0RSSUJCTEUJMTAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORl9SU1ZfQ1RSTEZSQU1FCTExCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX1BBVVNFQ1RSTAkxMgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9VTk9QQ09ERQkxMwotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9WTEFOVEFHCTE0Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX0xPTkdFVkVOVAkxNQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9UUlVOQ0FURUQJMTYKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORl9SU1ZfTUFTSwkJMHgzRkZGRgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GNQkweDA1QwotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GNV9EUk9QTFQ2NAkxOAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GNV9DRkdCWVRNCTE5Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkY1X1JYRFJPUFNJWkUJMjAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjVfUlhEUk9QU0laRV9NQVNLCTB4RgotCi0jZGVmaW5lIFM2X0dNQUNfU1RBVF9SRUdTCTB4MDgwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVF9TSVpFX01JTgkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVFI2NAkweDA4MAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUjY0X1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMTI3CTB4MDg0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMTI3X1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMjU1CTB4MDg4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMjU1X1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSNTExCTB4MDhDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSNTExX1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMUsJMHgwOTAKLSNkZWZpbmUgUzZfR01BQ19TVEFUVFIxS19TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUk1BWAkweDA5NAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUk1BWF9TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUk1HVgkweDA5OAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUk1HVl9TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRSQllUCTB4MDlDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJCWVRfU0laRQkJMjQKLSNkZWZpbmUgUzZfR01BQ19TVEFUUlBLVAkweDBBMAotI2RlZmluZSBTNl9HTUFDX1NUQVRSUEtUX1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFJGQ1MJMHgwQTQKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkZDU19TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRSTUNBCTB4MEE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFJNQ0FfU0laRQkJMTgKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkJDQQkweDBBQwotI2RlZmluZSBTNl9HTUFDX1NUQVRSQkNBX1NJWkUJCTIyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJYQ0YJMHgwQjAKLSNkZWZpbmUgUzZfR01BQ19TVEFUUlhDRl9TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRSWFBGCTB4MEI0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFJYUEZfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUUlhVTwkweDBCOAotI2RlZmluZSBTNl9HTUFDX1NUQVRSWFVPX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJBTE4JMHgwQkMKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkFMTl9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRSRkxSCTB4MEMwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJGTFJfU0laRQkJMTYKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkNERQkweDBDNAotI2RlZmluZSBTNl9HTUFDX1NUQVRSQ0RFX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJDU0UJMHgwQzgKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkNTRV9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRSVU5ECTB4MENDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJVTkRfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUUk9WUgkweDBEMAotI2RlZmluZSBTNl9HTUFDX1NUQVRST1ZSX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJGUkcJMHgwRDQKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkZSR19TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRSSkJSCTB4MEQ4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFJKQlJfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkRSUAkweDBEQwotI2RlZmluZSBTNl9HTUFDX1NUQVRSRFJQX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRCWVQJMHgwRTAKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEJZVF9TSVpFCQkyNAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUEtUCTB4MEU0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRQS1RfU0laRQkJMTgKLSNkZWZpbmUgUzZfR01BQ19TVEFUVE1DQQkweDBFOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUTUNBX1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRCQ0EJMHgwRUMKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEJDQV9TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUWFBGCTB4MEYwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRYUEZfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVERGUgkweDBGNAotI2RlZmluZSBTNl9HTUFDX1NUQVRUREZSX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRFREYJMHgwRjgKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEVERl9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRUU0NMCTB4MEZDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRTQ0xfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVE1DTAkweDEwMAotI2RlZmluZSBTNl9HTUFDX1NUQVRUTUNMX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRMQ0wJMHgxMDQKLSNkZWZpbmUgUzZfR01BQ19TVEFUVExDTF9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRUWENMCTB4MTA4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRYQ0xfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVE5DTAkweDEwQwotI2RlZmluZSBTNl9HTUFDX1NUQVRUTkNMX1NJWkUJCTEzCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRQRkgJMHgxMTAKLSNkZWZpbmUgUzZfR01BQ19TVEFUVFBGSF9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRURFJQCTB4MTE0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFREUlBfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEpCUgkweDExOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUSkJSX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRGQ1MJMHgxMUMKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEZDU19TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRUWENGCTB4MTIwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRYQ0ZfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVE9WUgkweDEyNAotI2RlZmluZSBTNl9HTUFDX1NUQVRUT1ZSX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRVTkQJMHgxMjgKLSNkZWZpbmUgUzZfR01BQ19TVEFUVFVORF9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRURlJHCTB4MTJDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRGUkdfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkobikJKDB4MTMwICsgNCoobikpCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZTVNLKG4pCSgweDEzOCArIDQqKG4pKQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkRSUAkJMAotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkpCUgkJMQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkZSRwkJMgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUk9WUgkJMwotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUlVORAkJNAotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkNTRQkJNQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkNERQkJNgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkZMUgkJNwotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkFMTgkJOAotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUlhVTwkJOQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUlhQRgkJMTAKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1JYQ0YJCTExCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMV9SQkNBCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUk1DQQkJMTMKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1JGQ1MJCTE0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMV9SUEtUCQkxNQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkJZVAkJMTYKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1RSTUdWCTI1Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMV9UUk1BWAkyNgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfVFIxSwkJMjcKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1RSNTExCTI4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMV9UUjI1NQkyOQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfVFIxMjcJMzAKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1RSNjQJCTMxCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9URFJQCQkwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UUEZICQkxCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UTkNMCQkyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UWENMCQkzCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UTENMCQk0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UTUNMCQk1Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UU0NMCQk2Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9URURGCQk3Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UREZSCQk4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UWFBGCQk5Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UQkNBCQkxMAotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTJfVE1DQQkJMTEKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkyX1RQS1QJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UQllUCQkxMwotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTJfVEZSRwkJMTQKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkyX1RVTkQJCTE1Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UT1ZSCQkxNgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTJfVFhDRgkJMTcKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkyX1RGQ1MJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9USkJSCQkxOQotCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTAkweDE0MAotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfVFhFTkEJMAotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUlhFTkEJMQotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfVFhTUkVTCTIKLSNkZWZpbmUgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1JYU1JFUwkzCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9UWEJTSVoJOAotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUlhCU0laCTEyCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TSVpfMTYJCTQKLSNkZWZpbmUgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NJWl8zMgkJNQotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfU0laXzY0CQk2Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TSVpfMTI4CQk3Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TSVpfTUFTSwkJMHhGCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TVEFURU5BCTE2Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TVEFUQVVUT1oJMTcKLSNkZWZpbmUgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NUQVRDTEVBUgkxOAotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUkdNSUkJMTkKLSNkZWZpbmUgUzZfR01BQ19IT1NUX0lOVE1BU0sJMHgxNDQKLSNkZWZpbmUgUzZfR01BQ19IT1NUX0lOVFNUQVQJMHgxNDgKLSNkZWZpbmUgUzZfR01BQ19IT1NUX0lOVF9UWEJVUlNUT1ZFUgkzCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9JTlRfVFhQUkVXT1ZFUgk0Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9JTlRfUlhCVVJTVFVOREVSCTUKLSNkZWZpbmUgUzZfR01BQ19IT1NUX0lOVF9SWFBPU1RSRlVMTAk2Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9JTlRfUlhQT1NUUlVOREVSCTcKLSNkZWZpbmUgUzZfR01BQ19IT1NUX1JYRklGT0hXTQkweDE0QwotI2RlZmluZSBTNl9HTUFDX0hPU1RfQ1RSTEZSQU1YUAkweDE1MAotI2RlZmluZSBTNl9HTUFDX0hPU1RfRFNUQUREUkxPKG4pICgweDE2MCArIDgqKG4pKQotI2RlZmluZSBTNl9HTUFDX0hPU1RfRFNUQUREUkhJKG4pICgweDE2NCArIDgqKG4pKQotI2RlZmluZSBTNl9HTUFDX0hPU1RfRFNUTUFTS0xPKG4pICgweDE4MCArIDgqKG4pKQotI2RlZmluZSBTNl9HTUFDX0hPU1RfRFNUTUFTS0hJKG4pICgweDE4NCArIDgqKG4pKQotCi0jZGVmaW5lIFM2X0dNQUNfQlVSU1RfUFJFV1IJMHgxQjAKLSNkZWZpbmUgUzZfR01BQ19CVVJTVF9QUkVXUl9MRU4JCTAKLSNkZWZpbmUgUzZfR01BQ19CVVJTVF9QUkVXUl9MRU5fTUFTSwkJKCgxIDw8IDIwKSAtIDEpCi0jZGVmaW5lIFM2X0dNQUNfQlVSU1RfUFJFV1JfQ0ZFCQkyMAotI2RlZmluZSBTNl9HTUFDX0JVUlNUX1BSRVdSX1BQRQkJMjEKLSNkZWZpbmUgUzZfR01BQ19CVVJTVF9QUkVXUl9GQ1MJCTIyCi0jZGVmaW5lIFM2X0dNQUNfQlVSU1RfUFJFV1JfUEFECQkyMwotI2RlZmluZSBTNl9HTUFDX0JVUlNUX1BPU1RSRAkweDFEMAotI2RlZmluZSBTNl9HTUFDX0JVUlNUX1BPU1RSRF9MRU4JMAotI2RlZmluZSBTNl9HTUFDX0JVUlNUX1BPU1RSRF9MRU5fTUFTSwkJKCgxIDw8IDIwKSAtIDEpCi0jZGVmaW5lIFM2X0dNQUNfQlVSU1RfUE9TVFJEX0RST1AJMjAKLQotCi0vKiBkYXRhIGhhbmRsaW5nICovCi0KLSNkZWZpbmUgUzZfTlVNX1RYX1NLQgk4CS8qIG11c3QgYmUgbGFyZ2VyIHRoYW4gVFggZmlmbyBzaXplICovCi0jZGVmaW5lIFM2X05VTV9SWF9TS0IJMTYKLSNkZWZpbmUgUzZfTUFYX0ZSTEVOCTE1MzYKLQotc3RydWN0IHM2Z21hYyB7Ci0JdTMyIHJlZzsKLQl1MzIgdHhfZG1hOwotCXUzMiByeF9kbWE7Ci0JdTMyIGlvOwotCXU4IHR4X2NoYW47Ci0JdTggcnhfY2hhbjsKLQlzcGlubG9ja190IGxvY2s7Ci0JdTggdHhfc2tiX2ksIHR4X3NrYl9vOwotCXU4IHJ4X3NrYl9pLCByeF9za2JfbzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiW1M2X05VTV9UWF9TS0JdOwotCXN0cnVjdCBza19idWZmICpyeF9za2JbUzZfTlVNX1JYX1NLQl07Ci0JdW5zaWduZWQgbG9uZyBjYXJyeVtzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpIC8gc2l6ZW9mKGxvbmcpXTsKLQl1bnNpZ25lZCBsb25nIHN0YXRzW3NpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgLyBzaXplb2YobG9uZyldOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IG1paV9idXMgKmJ1czsKLQkJaW50IGlycVtQSFlfTUFYX0FERFJdOwotCX0gbWlpOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludCBtYml0OwotCQl1OCBnaWdhOwotCQl1OCBpc3VwOwotCQl1OCBmdWxsOwotCX0gbGluazsKLX07Ci0KLXN0YXRpYyB2b2lkIHM2Z21hY19yeF9maWxsZmlmbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXdoaWxlICgoKCh1OCkocGQtPnJ4X3NrYl9pIC0gcGQtPnJ4X3NrYl9vKSkgPCBTNl9OVU1fUlhfU0tCKSAmJgotCSAgICAgICAoIXM2ZG1hY19maWZvX2Z1bGwocGQtPnJ4X2RtYSwgcGQtPnJ4X2NoYW4pKSAmJgotCSAgICAgICAoc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIFM2X01BWF9GUkxFTiArIDIpKSkgewotCQlwZC0+cnhfc2tiWyhwZC0+cnhfc2tiX2krKykgJSBTNl9OVU1fUlhfU0tCXSA9IHNrYjsKLQkJczZkbWFjX3B1dF9maWZvX2NhY2hlKHBkLT5yeF9kbWEsIHBkLT5yeF9jaGFuLAotCQkJcGQtPmlvLCAodTMyKXNrYi0+ZGF0YSwgUzZfTUFYX0ZSTEVOKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHM2Z21hY19yeF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgczZnbWFjICpwZCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTMyIHBmeDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXdoaWxlICgoKHU4KShwZC0+cnhfc2tiX2kgLSBwZC0+cnhfc2tiX28pKSA+Ci0JCQlzNmRtYWNfcGVuZGluZ19jb3VudChwZC0+cnhfZG1hLCBwZC0+cnhfY2hhbikpIHsKLQkJc2tiID0gcGQtPnJ4X3NrYlsocGQtPnJ4X3NrYl9vKyspICUgUzZfTlVNX1JYX1NLQl07Ci0JCXBmeCA9IHJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX0JVUlNUX1BPU1RSRCk7Ci0JCWlmIChwZnggJiAoMSA8PCBTNl9HTUFDX0JVUlNUX1BPU1RSRF9EUk9QKSkgewotCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLQkJfSBlbHNlIHsKLQkJCXNrYl9wdXQoc2tiLCAocGZ4ID4+IFM2X0dNQUNfQlVSU1RfUE9TVFJEX0xFTikKLQkJCQkmIFM2X0dNQUNfQlVSU1RfUE9TVFJEX0xFTl9NQVNLKTsKLQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQkJbmV0aWZfcngoc2tiKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgczZnbWFjX3R4X2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl3aGlsZSAoKCh1OCkocGQtPnR4X3NrYl9pIC0gcGQtPnR4X3NrYl9vKSkgPgotCQkJczZkbWFjX3BlbmRpbmdfY291bnQocGQtPnR4X2RtYSwgcGQtPnR4X2NoYW4pKSB7Ci0JCWRldl9rZnJlZV9za2JfaXJxKHBkLT50eF9za2JbKHBkLT50eF9za2JfbysrKSAlIFM2X05VTV9UWF9TS0JdKTsKLQl9Ci0JaWYgKCFzNmRtYWNfZmlmb19mdWxsKHBkLT50eF9kbWEsIHBkLT50eF9jaGFuKSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotfQotCi1zdHJ1Y3QgczZnbWFjX3N0YXRpbmYgewotCXVuc2lnbmVkIHJlZ19zaXplIDogNDsgLyogMDogdW51c2VkICovCi0JdW5zaWduZWQgcmVnX29mZiA6IDY7Ci0JdW5zaWduZWQgbmV0X2luZGV4IDogNjsKLX07Ci0KLSNkZWZpbmUgUzZfU1RBVFNfQiAoOCAqIHNpemVvZih1MzIpKQotI2RlZmluZSBTNl9TVEFUU19DKGIsIHIsIGYpIFtiXSA9IHsgXAotCUJVSUxEX0JVR19PTl9aRVJPKHIjI19TSVpFIDwgUzZfR01BQ19TVEFUX1NJWkVfTUlOKSArIFwKLQlCVUlMRF9CVUdfT05fWkVSTygociMjX1NJWkUgLSAoUzZfR01BQ19TVEFUX1NJWkVfTUlOIC0gMSkpIFwKLQkJCT49ICgxPDw0KSkgKyBcCi0JciMjX1NJWkUgLSAoUzZfR01BQ19TVEFUX1NJWkVfTUlOIC0gMSksIFwKLQlCVUlMRF9CVUdfT05fWkVSTygoKHVuc2lnbmVkKSgociAtIFM2X0dNQUNfU1RBVF9SRUdTKSAvIHNpemVvZih1MzIpKSkgXAotCQkJPj0gKCgxPDw2KS0xKSkgKyBcCi0JKHIgLSBTNl9HTUFDX1NUQVRfUkVHUykgLyBzaXplb2YodTMyKSwgXAotCUJVSUxEX0JVR19PTl9aRVJPKChvZmZzZXRvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cywgZikpIFwKLQkJCSUgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSArIFwKLQlCVUlMRF9CVUdfT05fWkVSTygoKCh1bnNpZ25lZCkob2Zmc2V0b2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMsIGYpKSBcCi0JCQkvIHNpemVvZih1bnNpZ25lZCBsb25nKSkgPj0gKDE8PDYpKSkgKyBcCi0JQlVJTERfQlVHX09OX1pFUk8oKHNpemVvZigoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopMCktPmYpIFwKLQkJCSE9IHNpemVvZih1bnNpZ25lZCBsb25nKSkpICsgXAotCShvZmZzZXRvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cywgZikpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpfSwKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzNmdtYWNfc3RhdGluZiBzdGF0aW5mWzJdW1M2X1NUQVRTX0JdID0geyB7Ci0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUkJZVCwgUzZfR01BQ19TVEFUUkJZVCwgcnhfYnl0ZXMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUlBLVCwgUzZfR01BQ19TVEFUUlBLVCwgcnhfcGFja2V0cykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMV9SRkNTLCBTNl9HTUFDX1NUQVRSRkNTLCByeF9jcmNfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkxX1JNQ0EsIFM2X0dNQUNfU1RBVFJNQ0EsIG11bHRpY2FzdCkKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMV9SQUxOLCBTNl9HTUFDX1NUQVRSQUxOLCByeF9mcmFtZV9lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUkZMUiwgUzZfR01BQ19TVEFUUkZMUiwgcnhfbGVuZ3RoX2Vycm9ycykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMV9SQ0RFLCBTNl9HTUFDX1NUQVRSQ0RFLCByeF9taXNzZWRfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkxX1JVTkQsIFM2X0dNQUNfU1RBVFJVTkQsIHJ4X2xlbmd0aF9lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUk9WUiwgUzZfR01BQ19TVEFUUk9WUiwgcnhfbGVuZ3RoX2Vycm9ycykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMV9SRlJHLCBTNl9HTUFDX1NUQVRSRlJHLCByeF9jcmNfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkxX1JKQlIsIFM2X0dNQUNfU1RBVFJKQlIsIHJ4X2NyY19lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUkRSUCwgUzZfR01BQ19TVEFUUkRSUCwgcnhfZHJvcHBlZCkKLX0sIHsKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMl9UQllULCBTNl9HTUFDX1NUQVRUQllULCB0eF9ieXRlcykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMl9UUEtULCBTNl9HTUFDX1NUQVRUUEtULCB0eF9wYWNrZXRzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkyX1RFREYsIFM2X0dNQUNfU1RBVFRFREYsIHR4X2Fib3J0ZWRfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkyX1RYQ0wsIFM2X0dNQUNfU1RBVFRYQ0wsIHR4X2Fib3J0ZWRfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkyX1ROQ0wsIFM2X0dNQUNfU1RBVFROQ0wsIGNvbGxpc2lvbnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTJfVERSUCwgUzZfR01BQ19TVEFUVERSUCwgdHhfZHJvcHBlZCkKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMl9USkJSLCBTNl9HTUFDX1NUQVRUSkJSLCB0eF9lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTJfVEZDUywgUzZfR01BQ19TVEFUVEZDUywgdHhfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkyX1RPVlIsIFM2X0dNQUNfU1RBVFRPVlIsIHR4X2Vycm9ycykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMl9UVU5ELCBTNl9HTUFDX1NUQVRUVU5ELCB0eF9lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTJfVEZSRywgUzZfR01BQ19TVEFUVEZSRywgdHhfZXJyb3JzKQotfSB9OwotCi1zdGF0aWMgdm9pZCBzNmdtYWNfc3RhdHNfY29sbGVjdChzdHJ1Y3QgczZnbWFjICpwZCwKLQkJY29uc3Qgc3RydWN0IHM2Z21hY19zdGF0aW5mICppbmYpCi17Ci0JaW50IGI7Ci0JZm9yIChiID0gMDsgYiA8IFM2X1NUQVRTX0I7IGIrKykgewotCQlpZiAoaW5mW2JdLnJlZ19zaXplKSB7Ci0JCQlwZC0+c3RhdHNbaW5mW2JdLm5ldF9pbmRleF0gKz0KLQkJCQlyZWFkbChwZC0+cmVnICsgUzZfR01BQ19TVEFUX1JFR1MKLQkJCQkJKyBzaXplb2YodTMyKSAqIGluZltiXS5yZWdfb2ZmKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgczZnbWFjX3N0YXRzX2NhcnJ5KHN0cnVjdCBzNmdtYWMgKnBkLAotCQljb25zdCBzdHJ1Y3QgczZnbWFjX3N0YXRpbmYgKmluZiwgdTMyIG1hc2spCi17Ci0JaW50IGI7Ci0Jd2hpbGUgKG1hc2spIHsKLQkJYiA9IGZscyhtYXNrKSAtIDE7Ci0JCW1hc2sgJj0gfigxIDw8IGIpOwotCQlwZC0+Y2FycnlbaW5mW2JdLm5ldF9pbmRleF0gKz0gKDEgPDwgaW5mW2JdLnJlZ19zaXplKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHM2Z21hY19zdGF0c19wZW5kaW5nKHN0cnVjdCBzNmdtYWMgKnBkLCBpbnQgY2FycnkpCi17Ci0JaW50IHIgPSByZWFkbChwZC0+cmVnICsgUzZfR01BQ19TVEFUQ0FSUlkoY2FycnkpKSAmCi0JCX5yZWFkbChwZC0+cmVnICsgUzZfR01BQ19TVEFUQ0FSUllNU0soY2FycnkpKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHM2Z21hY19zdGF0c19pbnRlcnJ1cHQoc3RydWN0IHM2Z21hYyAqcGQsIGludCBjYXJyeSkKLXsKLQl1MzIgbWFzazsKLQltYXNrID0gczZnbWFjX3N0YXRzX3BlbmRpbmcocGQsIGNhcnJ5KTsKLQlpZiAobWFzaykgewotCQl3cml0ZWwobWFzaywgcGQtPnJlZyArIFM2X0dNQUNfU1RBVENBUlJZKGNhcnJ5KSk7Ci0JCXM2Z21hY19zdGF0c19jYXJyeShwZCwgJnN0YXRpbmZbY2FycnldWzBdLCBtYXNrKTsKLQl9Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzNmdtYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIElSUV9OT05FOwotCXNwaW5fbG9jaygmcGQtPmxvY2spOwotCWlmIChzNmRtYWNfdGVybWNudF9pcnEocGQtPnJ4X2RtYSwgcGQtPnJ4X2NoYW4pKQotCQlzNmdtYWNfcnhfaW50ZXJydXB0KGRldik7Ci0JczZnbWFjX3J4X2ZpbGxmaWZvKGRldik7Ci0JaWYgKHM2ZG1hY190ZXJtY250X2lycShwZC0+dHhfZG1hLCBwZC0+dHhfY2hhbikpCi0JCXM2Z21hY190eF9pbnRlcnJ1cHQoZGV2KTsKLQlzNmdtYWNfc3RhdHNfaW50ZXJydXB0KHBkLCAwKTsKLQlzNmdtYWNfc3RhdHNfaW50ZXJydXB0KHBkLCAxKTsKLQlzcGluX3VubG9jaygmcGQtPmxvY2spOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHM2Z21hY19zZXRfZHN0YWRkcihzdHJ1Y3QgczZnbWFjICpwZCwgaW50IG4sCi0JdTMyIGFkZHJsbywgdTMyIGFkZHJoaSwgdTMyIG1hc2tsbywgdTMyIG1hc2toaSkKLXsKLQl3cml0ZWwoYWRkcmxvLCBwZC0+cmVnICsgUzZfR01BQ19IT1NUX0RTVEFERFJMTyhuKSk7Ci0Jd3JpdGVsKGFkZHJoaSwgcGQtPnJlZyArIFM2X0dNQUNfSE9TVF9EU1RBRERSSEkobikpOwotCXdyaXRlbChtYXNrbG8sIHBkLT5yZWcgKyBTNl9HTUFDX0hPU1RfRFNUTUFTS0xPKG4pKTsKLQl3cml0ZWwobWFza2hpLCBwZC0+cmVnICsgUzZfR01BQ19IT1NUX0RTVE1BU0tISShuKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzNmdtYWNfc3RvcF9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgczZnbWFjICpwZCA9IG5ldGRldl9wcml2KGRldik7Ci0Jd3JpdGVsKDAsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ0NPTkYxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHM2Z21hY19pbml0X2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaXNfcmdtaWkgPSAhIShwZC0+cGh5ZGV2LT5zdXBwb3J0ZWQKLQkJJiAoU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmKSk7Ci0jaWYgMAotCXdyaXRlbCgxIDw8IFM2X0dNQUNfTUFDQ09ORjFfU1lOQ1RYIHwKLQkJMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1NZTkNSWCB8Ci0JCTEgPDwgUzZfR01BQ19NQUNDT05GMV9UWEZMT1dDVFJMIHwKLQkJMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1JYRkxPV0NUUkwgfAotCQkxIDw8IFM2X0dNQUNfTUFDQ09ORjFfUkVTVFhGVU5DIHwKLQkJMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1JFU1JYRlVOQyB8Ci0JCTEgPDwgUzZfR01BQ19NQUNDT05GMV9SRVNUWE1BQ0NUUkwgfAotCQkxIDw8IFM2X0dNQUNfTUFDQ09ORjFfUkVTUlhNQUNDVFJMLAotCQlwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMSk7Ci0jZW5kaWYKLQl3cml0ZWwoMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1NPRlRSRVMsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ0NPTkYxKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKDEgPDwgUzZfR01BQ19NQUNDT05GMV9UWEVOQSB8IDEgPDwgUzZfR01BQ19NQUNDT05GMV9SWEVOQSwKLQkJcGQtPnJlZyArIFM2X0dNQUNfTUFDQ09ORjEpOwotCXdyaXRlbCgxIDw8IFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9UWFNSRVMgfAotCQkxIDw8IFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9SWFNSRVMsCi0JCXBkLT5yZWcgKyBTNl9HTUFDX0hPU1RfUEJMS0NUUkwpOwotCXdyaXRlbChTNl9HTUFDX0hPU1RfUEJMS0NUUkxfU0laXzEyOCA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfVFhCU0laIHwKLQkJUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NJWl8xMjggPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1JYQlNJWiB8Ci0JCTEgPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NUQVRFTkEgfAotCQkxIDw8IFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TVEFUQ0xFQVIgfAotCQlpc19yZ21paSA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUkdNSUksCi0JCXBkLT5yZWcgKyBTNl9HTUFDX0hPU1RfUEJMS0NUUkwpOwotCXdyaXRlbCgxIDw8IFM2X0dNQUNfTUFDQ09ORjFfVFhFTkEgfAotCQkxIDw8IFM2X0dNQUNfTUFDQ09ORjFfUlhFTkEgfAotCQkoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSyA/IDEgOiAwKQotCQkJPDwgUzZfR01BQ19NQUNDT05GMV9MT09QQkFDSywKLQkJcGQtPnJlZyArIFM2X0dNQUNfTUFDQ09ORjEpOwotCXdyaXRlbChkZXYtPm10dSAmJiAoZGV2LT5tdHUgPCAoUzZfTUFYX0ZSTEVOIC0gRVRIX0hMRU4tRVRIX0ZDU19MRU4pKSA/Ci0JCQlkZXYtPm10dStFVEhfSExFTitFVEhfRkNTX0xFTiA6IFM2X01BWF9GUkxFTiwKLQkJcGQtPnJlZyArIFM2X0dNQUNfTUFDTUFYRlJBTUVMRU4pOwotCXdyaXRlbCgocGQtPmxpbmsuZnVsbCA/IDEgOiAwKSA8PCBTNl9HTUFDX01BQ0NPTkYyX0ZVTEwgfAotCQkxIDw8IFM2X0dNQUNfTUFDQ09ORjJfUEFEQ1JDRU5BIHwKLQkJMSA8PCBTNl9HTUFDX01BQ0NPTkYyX0xFTkdUSEZDSEsgfAotCQkocGQtPmxpbmsuZ2lnYSA/Ci0JCQlTNl9HTUFDX01BQ0NPTkYyX0lGTU9ERV9CWVRFIDoKLQkJCVM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFX05JQkJMRSkKLQkJCTw8IFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFIHwKLQkJNyA8PCBTNl9HTUFDX01BQ0NPTkYyX1BSRUFNQkxFTEVOLAotCQlwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMik7Ci0Jd3JpdGVsKDAsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ1NUQVRBRERSMSk7Ci0Jd3JpdGVsKDAsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ1NUQVRBRERSMik7Ci0Jd3JpdGVsKDEgPDwgUzZfR01BQ19GSUZPQ09ORjBfV1RNRU5SRVEgfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkYwX1NSRkVOUkVRIHwKLQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GMF9GUkZFTlJFUSB8Ci0JCTEgPDwgUzZfR01BQ19GSUZPQ09ORjBfU1RGRU5SRVEgfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkYwX0ZURkVOUkVRLAotCQlwZC0+cmVnICsgUzZfR01BQ19GSUZPQ09ORjApOwotCXdyaXRlbCgxMjggPDwgUzZfR01BQ19GSUZPQ09ORjNfQ0ZHRlRUSCB8Ci0JCTEyOCA8PCBTNl9HTUFDX0ZJRk9DT05GM19DRkdIV01GVCwKLQkJcGQtPnJlZyArIFM2X0dNQUNfRklGT0NPTkYzKTsKLQl3cml0ZWwoKFM2X0dNQUNfRklGT0NPTkZfUlNWX01BU0sgJiB+KAotCQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9SVU5UIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfQ1JDRVJSIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfT0sgfAotCQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9EUklCQkxFIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfQ1RSTEZSQU1FIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfUEFVU0VDVFJMIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfVU5PUENPREUgfAotCQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9UUlVOQ0FURUQpKSB8Ci0JCTEgPDwgUzZfR01BQ19GSUZPQ09ORjVfRFJPUExUNjQgfAotCQlwZC0+bGluay5naWdhIDw8IFM2X0dNQUNfRklGT0NPTkY1X0NGR0JZVE0gfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkY1X1JYRFJPUFNJWkUsCi0JCXBkLT5yZWcgKyBTNl9HTUFDX0ZJRk9DT05GNSk7Ci0Jd3JpdGVsKDEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfUlVOVCB8Ci0JCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfQ1JDRVJSIHwKLQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9EUklCQkxFIHwKLQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9DVFJMRlJBTUUgfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkZfUlNWX1BBVVNFQ1RSTCB8Ci0JCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfVU5PUENPREUgfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkZfUlNWX1RSVU5DQVRFRCwKLQkJcGQtPnJlZyArIFM2X0dNQUNfRklGT0NPTkY0KTsKLQlzNmdtYWNfc2V0X2RzdGFkZHIocGQsIDAsCi0JCTB4RkZGRkZGRkYsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYsIDB4MDAwMEZGRkYpOwotCXM2Z21hY19zZXRfZHN0YWRkcihwZCwgMSwKLQkJZGV2LT5kZXZfYWRkcls1XSB8Ci0JCWRldi0+ZGV2X2FkZHJbNF0gPDwgOCB8Ci0JCWRldi0+ZGV2X2FkZHJbM10gPDwgMTYgfAotCQlkZXYtPmRldl9hZGRyWzJdIDw8IDI0LAotCQlkZXYtPmRldl9hZGRyWzFdIHwKLQkJZGV2LT5kZXZfYWRkclswXSA8PCA4LAotCQkweEZGRkZGRkZGLCAweDAwMDBGRkZGKTsKLQlzNmdtYWNfc2V0X2RzdGFkZHIocGQsIDIsCi0JCTB4MDAwMDAwMDAsIDB4MDAwMDAxMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxMDApOwotCXM2Z21hY19zZXRfZHN0YWRkcihwZCwgMywKLQkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCk7Ci0Jd3JpdGVsKDEgPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1RYRU5BIHwKLQkJMSA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUlhFTkEgfAotCQlTNl9HTUFDX0hPU1RfUEJMS0NUUkxfU0laXzEyOCA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfVFhCU0laIHwKLQkJUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NJWl8xMjggPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1JYQlNJWiB8Ci0JCTEgPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NUQVRFTkEgfAotCQkxIDw8IFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TVEFUQ0xFQVIgfAotCQlpc19yZ21paSA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUkdNSUksCi0JCXBkLT5yZWcgKyBTNl9HTUFDX0hPU1RfUEJMS0NUUkwpOwotfQotCi1zdGF0aWMgdm9pZCBzNm1paV9lbmFibGUoc3RydWN0IHM2Z21hYyAqcGQpCi17Ci0Jd3JpdGVsKHJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX01BQ0NPTkYxKSAmCi0JCX4oMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1NPRlRSRVMpLAotCQlwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMSk7Ci0Jd3JpdGVsKChyZWFkbChwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlDT05GKQotCQkmIH4oUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfTUFTSyA8PCBTNl9HTUFDX01BQ01JSUNPTkZfQ1NFTCkpCi0JCXwgKFM2X0dNQUNfTUFDTUlJQ09ORl9DU0VMX0RJVjE2OCA8PCBTNl9HTUFDX01BQ01JSUNPTkZfQ1NFTCksCi0JCXBkLT5yZWcgKyBTNl9HTUFDX01BQ01JSUNPTkYpOwotfQotCi1zdGF0aWMgaW50IHM2bWlpX2J1c3koc3RydWN0IHM2Z21hYyAqcGQsIGludCB0bW8pCi17Ci0Jd2hpbGUgKHJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX01BQ01JSUlOREkpKSB7Ci0JCWlmICgtLXRtbyA9PSAwKQotCQkJcmV0dXJuIC1FVElNRTsKLQkJdWRlbGF5KDY0KTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczZtaWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0pCi17Ci0Jc3RydWN0IHM2Z21hYyAqcGQgPSBidXMtPnByaXY7Ci0JczZtaWlfZW5hYmxlKHBkKTsKLQlpZiAoczZtaWlfYnVzeShwZCwgMjU2KSkKLQkJcmV0dXJuIC1FVElNRTsKLQl3cml0ZWwocGh5X2FkZHIgPDwgUzZfR01BQ19NQUNNSUlBRERSX1BIWSB8Ci0JCXJlZ251bSA8PCBTNl9HTUFDX01BQ01JSUFERFJfUkVHLAotCQlwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlBRERSKTsKLQl3cml0ZWwoMSA8PCBTNl9HTUFDX01BQ01JSUNNRF9SRUFELCBwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlDTUQpOwotCXdyaXRlbCgwLCBwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlDTUQpOwotCWlmIChzNm1paV9idXN5KHBkLCAyNTYpKQotCQlyZXR1cm4gLUVUSU1FOwotCXJldHVybiAodTE2KXJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX01BQ01JSVNUQVQpOwotfQotCi1zdGF0aWMgaW50IHM2bWlpX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gYnVzLT5wcml2OwotCXM2bWlpX2VuYWJsZShwZCk7Ci0JaWYgKHM2bWlpX2J1c3kocGQsIDI1NikpCi0JCXJldHVybiAtRVRJTUU7Ci0Jd3JpdGVsKHBoeV9hZGRyIDw8IFM2X0dNQUNfTUFDTUlJQUREUl9QSFkgfAotCQlyZWdudW0gPDwgUzZfR01BQ19NQUNNSUlBRERSX1JFRywKLQkJcGQtPnJlZyArIFM2X0dNQUNfTUFDTUlJQUREUik7Ci0Jd3JpdGVsKHZhbHVlLCBwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlDVFJMKTsKLQlpZiAoczZtaWlfYnVzeShwZCwgMjU2KSkKLQkJcmV0dXJuIC1FVElNRTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzNm1paV9yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gYnVzLT5wcml2OwotCXM2bWlpX2VuYWJsZShwZCk7Ci0JaWYgKHM2bWlpX2J1c3kocGQsIFBIWV9JTklUX1RJTUVPVVQpKQotCQlyZXR1cm4gLUVUSU1FOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzNmdtYWNfc2V0X3JnbWlpX3R4Y2xvY2soc3RydWN0IHM2Z21hYyAqcGQpCi17Ci0JdTMyIHBsbHNlbCA9IHJlYWRsKFM2X1JFR19HUkVHMSArIFM2X0dSRUcxX1BMTFNFTCk7Ci0JcGxsc2VsICY9IH4oUzZfR1JFRzFfUExMU0VMX0dNQUNfTUFTSyA8PCBTNl9HUkVHMV9QTExTRUxfR01BQyk7Ci0Jc3dpdGNoIChwZC0+bGluay5tYml0KSB7Ci0JY2FzZSAxMDoKLQkJcGxsc2VsIHw9IFM2X0dSRUcxX1BMTFNFTF9HTUFDXzI1MDBLSFogPDwgUzZfR1JFRzFfUExMU0VMX0dNQUM7Ci0JCWJyZWFrOwotCWNhc2UgMTAwOgotCQlwbGxzZWwgfD0gUzZfR1JFRzFfUExMU0VMX0dNQUNfMjVNSFogPDwgUzZfR1JFRzFfUExMU0VMX0dNQUM7Ci0JCWJyZWFrOwotCWNhc2UgMTAwMDoKLQkJcGxsc2VsIHw9IFM2X0dSRUcxX1BMTFNFTF9HTUFDXzEyNU1IWiA8PCBTNl9HUkVHMV9QTExTRUxfR01BQzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQl3cml0ZWwocGxsc2VsLCBTNl9SRUdfR1JFRzEgKyBTNl9HUkVHMV9QTExTRUwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczZnbWFjX2xpbmtpc3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpc3VwKQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcGQtPnBoeWRldjsKLQotCXBkLT5saW5rLmZ1bGwgPSBwaHlkZXYtPmR1cGxleDsKLQlwZC0+bGluay5naWdhID0gKHBoeWRldi0+c3BlZWQgPT0gMTAwMCk7Ci0JaWYgKHBkLT5saW5rLm1iaXQgIT0gcGh5ZGV2LT5zcGVlZCkgewotCQlwZC0+bGluay5tYml0ID0gcGh5ZGV2LT5zcGVlZDsKLQkJczZnbWFjX3NldF9yZ21paV90eGNsb2NrKHBkKTsKLQl9Ci0JcGQtPmxpbmsuaXN1cCA9IGlzdXA7Ci0JaWYgKGlzdXApCi0JCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQlwaHlfcHJpbnRfc3RhdHVzKHBoeWRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHM2Z21hY19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcGQtPnBoeWRldjsKLQlpZiAocGQtPmxpbmsuaXN1cCAmJgotCQkJKCFwaHlkZXYtPmxpbmsgfHwKLQkJCShwZC0+bGluay5tYml0ICE9IHBoeWRldi0+c3BlZWQpIHx8Ci0JCQkocGQtPmxpbmsuZnVsbCAhPSBwaHlkZXYtPmR1cGxleCkpKSB7Ci0JCXBkLT5saW5rLmlzdXAgPSAwOwotCQluZXRpZl90eF9kaXNhYmxlKGRldik7Ci0JCWlmICghcGh5ZGV2LT5saW5rKSB7Ci0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQkJcGh5X3ByaW50X3N0YXR1cyhwaHlkZXYpOwotCQl9Ci0JfQotCWlmICghcGQtPmxpbmsuaXN1cCAmJiBwaHlkZXYtPmxpbmspIHsKLQkJaWYgKHBkLT5saW5rLmZ1bGwgIT0gcGh5ZGV2LT5kdXBsZXgpIHsKLQkJCXUzMiBtYWNjZmcgPSByZWFkbChwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMik7Ci0JCQlpZiAocGh5ZGV2LT5kdXBsZXgpCi0JCQkJbWFjY2ZnIHw9IDEgPDwgUzZfR01BQ19NQUNDT05GMl9GVUxMOwotCQkJZWxzZQotCQkJCW1hY2NmZyAmPSB+KDEgPDwgUzZfR01BQ19NQUNDT05GMl9GVUxMKTsKLQkJCXdyaXRlbChtYWNjZmcsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ0NPTkYyKTsKLQkJfQotCi0JCWlmIChwZC0+bGluay5naWdhICE9IChwaHlkZXYtPnNwZWVkID09IDEwMDApKSB7Ci0JCQl1MzIgZmlmb2NmZyA9IHJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX0ZJRk9DT05GNSk7Ci0JCQl1MzIgbWFjY2ZnID0gcmVhZGwocGQtPnJlZyArIFM2X0dNQUNfTUFDQ09ORjIpOwotCQkJbWFjY2ZnICY9IH4oUzZfR01BQ19NQUNDT05GMl9JRk1PREVfTUFTSwotCQkJCSAgICAgPDwgUzZfR01BQ19NQUNDT05GMl9JRk1PREUpOwotCQkJaWYgKHBoeWRldi0+c3BlZWQgPT0gMTAwMCkgewotCQkJCWZpZm9jZmcgfD0gMSA8PCBTNl9HTUFDX0ZJRk9DT05GNV9DRkdCWVRNOwotCQkJCW1hY2NmZyB8PSBTNl9HTUFDX01BQ0NPTkYyX0lGTU9ERV9CWVRFCi0JCQkJCSAgIDw8IFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFOwotCQkJfSBlbHNlIHsKLQkJCQlmaWZvY2ZnICY9IH4oMSA8PCBTNl9HTUFDX0ZJRk9DT05GNV9DRkdCWVRNKTsKLQkJCQltYWNjZmcgfD0gUzZfR01BQ19NQUNDT05GMl9JRk1PREVfTklCQkxFCi0JCQkJCSAgIDw8IFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFOwotCQkJfQotCQkJd3JpdGVsKGZpZm9jZmcsIHBkLT5yZWcgKyBTNl9HTUFDX0ZJRk9DT05GNSk7Ci0JCQl3cml0ZWwobWFjY2ZnLCBwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMik7Ci0JCX0KLQotCQlpZiAoIXM2ZG1hY19maWZvX2Z1bGwocGQtPnR4X2RtYSwgcGQtPnR4X2NoYW4pKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQlzNmdtYWNfbGlua2lzdXAoZGV2LCAxKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHM2Z21hY19waHlfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgczZnbWFjICpwZCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwID0gTlVMTDsKLQl3aGlsZSAoKGkgPCBQSFlfTUFYX0FERFIpICYmICghKHAgPSBwZC0+bWlpLmJ1cy0+cGh5X21hcFtpXSkpKQotCQlpKys7Ci0JcCA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnAtPmRldiksICZzNmdtYWNfYWRqdXN0X2xpbmssCi0JCQlQSFlfSU5URVJGQUNFX01PREVfUkdNSUkpOwotCWlmIChJU19FUlIocCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybiBQVFJfRVJSKHApOwotCX0KLQlwLT5zdXBwb3J0ZWQgJj0gUEhZX0dCSVRfRkVBVFVSRVM7Ci0JcC0+YWR2ZXJ0aXNpbmcgPSBwLT5zdXBwb3J0ZWQ7Ci0JcGQtPnBoeWRldiA9IHA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzNmdtYWNfaW5pdF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgbWFzazsKLQltYXNrID0JMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTFfUkRSUCB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkxX1JKQlIgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMV9SRlJHIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTFfUk9WUiB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkxX1JVTkQgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMV9SQ0RFIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTFfUkZMUiB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkxX1JBTE4gfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMV9STUNBIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTFfUkZDUyB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkxX1JQS1QgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMV9SQllUOwotCXdyaXRlbChtYXNrLCBwZC0+cmVnICsgUzZfR01BQ19TVEFUQ0FSUlkoMCkpOwotCXdyaXRlbCh+bWFzaywgcGQtPnJlZyArIFM2X0dNQUNfU1RBVENBUlJZTVNLKDApKTsKLQltYXNrID0JMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTJfVERSUCB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkyX1ROQ0wgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMl9UWENMIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTJfVEVERiB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkyX1RQS1QgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMl9UQllUIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTJfVEZSRyB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkyX1RVTkQgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMl9UT1ZSIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTJfVEZDUyB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkyX1RKQlI7Ci0Jd3JpdGVsKG1hc2ssIHBkLT5yZWcgKyBTNl9HTUFDX1NUQVRDQVJSWSgxKSk7Ci0Jd3JpdGVsKH5tYXNrLCBwZC0+cmVnICsgUzZfR01BQ19TVEFUQ0FSUllNU0soMSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczZnbWFjX2luaXRfZG1hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzNmRtYWNfZGlzYWJsZV9jaGFuKHBkLT50eF9kbWEsIHBkLT50eF9jaGFuKTsKLQlzNmRtYWNfZGlzYWJsZV9jaGFuKHBkLT5yeF9kbWEsIHBkLT5yeF9jaGFuKTsKLQlzNmRtYWNfZGlzYWJsZV9lcnJvcl9pcnFzKHBkLT50eF9kbWEsIDEgPDwgUzZfSElGRE1BX0dNQUNUWCk7Ci0JczZkbWFjX2Rpc2FibGVfZXJyb3JfaXJxcyhwZC0+cnhfZG1hLCAxIDw8IFM2X0hJRkRNQV9HTUFDUlgpOwotfQotCi1zdGF0aWMgaW50IHM2Z21hY190eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBkLT5sb2NrLCBmbGFncyk7Ci0Jd3JpdGVsKHNrYi0+bGVuIDw8IFM2X0dNQUNfQlVSU1RfUFJFV1JfTEVOIHwKLQkJMCA8PCBTNl9HTUFDX0JVUlNUX1BSRVdSX0NGRSB8Ci0JCTEgPDwgUzZfR01BQ19CVVJTVF9QUkVXUl9QUEUgfAotCQkxIDw8IFM2X0dNQUNfQlVSU1RfUFJFV1JfRkNTIHwKLQkJKChza2ItPmxlbiA8IEVUSF9aTEVOKSA/IDEgOiAwKSA8PCBTNl9HTUFDX0JVUlNUX1BSRVdSX1BBRCwKLQkJcGQtPnJlZyArIFM2X0dNQUNfQlVSU1RfUFJFV1IpOwotCXM2ZG1hY19wdXRfZmlmb19jYWNoZShwZC0+dHhfZG1hLCBwZC0+dHhfY2hhbiwKLQkJKHUzMilza2ItPmRhdGEsIHBkLT5pbywgc2tiLT5sZW4pOwotCWlmIChzNmRtYWNfZmlmb19mdWxsKHBkLT50eF9kbWEsIHBkLT50eF9jaGFuKSkKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCWlmICgoKHU4KShwZC0+dHhfc2tiX2kgLSBwZC0+dHhfc2tiX28pKSA+PSBTNl9OVU1fVFhfU0tCKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiR01BQyBCVUc6IHNrYiB0eCByaW5nIG92ZXJmbG93IFsleCwgJXhdXG4iLAotCQkJcGQtPnR4X3NrYl9vLCBwZC0+dHhfc2tiX2kpOwotCQlCVUcoKTsKLQl9Ci0JcGQtPnR4X3NrYlsocGQtPnR4X3NrYl9pKyspICUgUzZfTlVNX1RYX1NLQl0gPSBza2I7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgczZnbWFjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgczZnbWFjICpwZCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQlzNmdtYWNfdHhfaW50ZXJydXB0KGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGQtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBzNmdtYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXBoeV9yZWFkX3N0YXR1cyhwZC0+cGh5ZGV2KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQlwZC0+bGluay5tYml0ID0gMDsKLQlzNmdtYWNfbGlua2lzdXAoZGV2LCBwZC0+cGh5ZGV2LT5saW5rKTsKLQlzNmdtYWNfaW5pdF9kZXZpY2UoZGV2KTsKLQlzNmdtYWNfaW5pdF9zdGF0cyhkZXYpOwotCXM2Z21hY19pbml0X2RtYWMoZGV2KTsKLQlzNmdtYWNfcnhfZmlsbGZpZm8oZGV2KTsKLQlzNmRtYWNfZW5hYmxlX2NoYW4ocGQtPnJ4X2RtYSwgcGQtPnJ4X2NoYW4sCi0JCTIsIDEsIDAsIDEsIDAsIDAsIDAsIDcsIC0xLCAyLCAwLCAxKTsKLQlzNmRtYWNfZW5hYmxlX2NoYW4ocGQtPnR4X2RtYSwgcGQtPnR4X2NoYW4sCi0JCTIsIDAsIDEsIDAsIDAsIDAsIDAsIDcsIC0xLCAyLCAwLCAxKTsKLQl3cml0ZWwoMCA8PCBTNl9HTUFDX0hPU1RfSU5UX1RYQlVSU1RPVkVSIHwKLQkJMCA8PCBTNl9HTUFDX0hPU1RfSU5UX1RYUFJFV09WRVIgfAotCQkwIDw8IFM2X0dNQUNfSE9TVF9JTlRfUlhCVVJTVFVOREVSIHwKLQkJMCA8PCBTNl9HTUFDX0hPU1RfSU5UX1JYUE9TVFJGVUxMIHwKLQkJMCA8PCBTNl9HTUFDX0hPU1RfSU5UX1JYUE9TVFJVTkRFUiwKLQkJcGQtPnJlZyArIFM2X0dNQUNfSE9TVF9JTlRNQVNLKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZC0+bG9jaywgZmxhZ3MpOwotCXBoeV9zdGFydChwZC0+cGh5ZGV2KTsKLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHM2Z21hY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHM2Z21hYyAqcGQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXBoeV9zdG9wKHBkLT5waHlkZXYpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwZC0+bG9jaywgZmxhZ3MpOwotCXM2Z21hY19pbml0X2RtYWMoZGV2KTsKLQlzNmdtYWNfc3RvcF9kZXZpY2UoZGV2KTsKLQl3aGlsZSAocGQtPnR4X3NrYl9pICE9IHBkLT50eF9za2JfbykKLQkJZGV2X2tmcmVlX3NrYihwZC0+dHhfc2tiWyhwZC0+dHhfc2tiX28rKykgJSBTNl9OVU1fVFhfU0tCXSk7Ci0Jd2hpbGUgKHBkLT5yeF9za2JfaSAhPSBwZC0+cnhfc2tiX28pCi0JCWRldl9rZnJlZV9za2IocGQtPnJ4X3NrYlsocGQtPnJ4X3NrYl9vKyspICUgUzZfTlVNX1JYX1NLQl0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqczZnbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHM2Z21hYyAqcGQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdCA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSZwZC0+c3RhdHM7Ci0JaW50IGk7Ci0JZG8gewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGQtPnN0YXRzKTsgaSsrKQotCQkJcGQtPnN0YXRzW2ldID0KLQkJCQlwZC0+Y2FycnlbaV0gPDwgKFM2X0dNQUNfU1RBVF9TSVpFX01JTiAtIDEpOwotCQlzNmdtYWNfc3RhdHNfY29sbGVjdChwZCwgJnN0YXRpbmZbMF1bMF0pOwotCQlzNmdtYWNfc3RhdHNfY29sbGVjdChwZCwgJnN0YXRpbmZbMV1bMF0pOwotCQlpID0gczZnbWFjX3N0YXRzX3BlbmRpbmcocGQsIDApIHwKLQkJCXM2Z21hY19zdGF0c19wZW5kaW5nKHBkLCAxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQl9IHdoaWxlIChpKTsKLQlzdC0+cnhfZXJyb3JzID0gc3QtPnJ4X2NyY19lcnJvcnMgKwotCQkJc3QtPnJ4X2ZyYW1lX2Vycm9ycyArCi0JCQlzdC0+cnhfbGVuZ3RoX2Vycm9ycyArCi0JCQlzdC0+cnhfbWlzc2VkX2Vycm9yczsKLQlzdC0+dHhfZXJyb3JzICs9IHN0LT50eF9hYm9ydGVkX2Vycm9yczsKLQlyZXR1cm4gc3Q7Ci19Ci0KLXN0YXRpYyBpbnQgczZnbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgczZnbWFjICpwZDsKLQlpbnQgcmVzOwotCXVuc2lnbmVkIGxvbmcgaTsKLQlzdHJ1Y3QgbWlpX2J1cyAqbWI7Ci0KLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnBkKSk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGV2LT5vcGVuID0gczZnbWFjX29wZW47Ci0JZGV2LT5zdG9wID0gczZnbWFjX3N0b3A7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzNmdtYWNfdHg7Ci0JZGV2LT50eF90aW1lb3V0ID0gczZnbWFjX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOwotCWRldi0+Z2V0X3N0YXRzID0gczZnbWFjX3N0YXRzOwotCWRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlwZCA9IG5ldGRldl9wcml2KGRldik7Ci0JbWVtc2V0KHBkLCAwLCBzaXplb2YoKnBkKSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnBkLT5sb2NrKTsKLQlwZC0+cmVnID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKS0+c3RhcnQ7Ci0JaSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCktPnN0YXJ0OwotCXBkLT50eF9kbWEgPSBETUFfTUFTS19ETUFDKGkpOwotCXBkLT50eF9jaGFuID0gRE1BX0lOREVYX0NITkwoaSk7Ci0JaSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSktPnN0YXJ0OwotCXBkLT5yeF9kbWEgPSBETUFfTUFTS19ETUFDKGkpOwotCXBkLT5yeF9jaGFuID0gRE1BX0lOREVYX0NITkwoaSk7Ci0JcGQtPmlvID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApLT5zdGFydDsKLQlyZXMgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgczZnbWFjX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOwotCWlmIChyZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9QUk1UICJpcnEgcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCBkZXYtPmlycSk7Ci0JCWdvdG8gZXJyaXJxOwotCX0KLQlyZXMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfUFJNVCAiZXJyb3IgcmVnaXN0ZXJpbmcgZGV2aWNlICVzXG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJZ290byBlcnJkZXY7Ci0JfQotCW1iID0gbWRpb2J1c19hbGxvYygpOwotCWlmICghbWIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9QUk1UICJlcnJvciBhbGxvY2F0aW5nIG1paSBidXNcbiIpOwotCQlyZXMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm1paTsKLQl9Ci0JbWItPm5hbWUgPSAiczZnbWFjX21paSI7Ci0JbWItPnJlYWQgPSBzNm1paV9yZWFkOwotCW1iLT53cml0ZSA9IHM2bWlpX3dyaXRlOwotCW1iLT5yZXNldCA9IHM2bWlpX3Jlc2V0OwotCW1iLT5wcml2ID0gcGQ7Ci0Jc25wcmludGYobWItPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlcy0leCIsIHBkZXYtPm5hbWUsIHBkZXYtPmlkKTsKLQltYi0+cGh5X21hc2sgPSB+KDEgPDwgMCk7Ci0JbWItPmlycSA9ICZwZC0+bWlpLmlycVswXTsKLQlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspIHsKLQkJaW50IG4gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkgKyAxKTsKLQkJaWYgKG4gPCAwKQotCQkJbiA9IFBIWV9QT0xMOwotCQlwZC0+bWlpLmlycVtpXSA9IG47Ci0JfQotCW1kaW9idXNfcmVnaXN0ZXIobWIpOwotCXBkLT5taWkuYnVzID0gbWI7Ci0JcmVzID0gczZnbWFjX3BoeV9zdGFydChkZXYpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQlyZXR1cm4gMDsKLWVycm1paToKLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotZXJyZGV2OgotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotZXJyaXJxOgotCWZyZWVfbmV0ZGV2KGRldik7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludCBzNmdtYWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWlmIChkZXYpIHsKLQkJc3RydWN0IHM2Z21hYyAqcGQgPSBuZXRkZXZfcHJpdihkZXYpOwotCQltZGlvYnVzX3VucmVnaXN0ZXIocGQtPm1paS5idXMpOwotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHM2Z21hY19kcml2ZXIgPSB7Ci0JLnByb2JlID0gczZnbWFjX3Byb2JlLAotCS5yZW1vdmUgPSBzNmdtYWNfcmVtb3ZlLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInM2Z21hYyIsCi0JfSwKLX07Ci0KLW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoczZnbWFjX2RyaXZlcik7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUzYxMDUgb24gY2hpcCBFdGhlcm5ldCBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIk9za2FyIFNjaGlybWVyIDxvc2thckBzY2FyYS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jCmluZGV4IDY5ODQ5NDQuLmIxYTI3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jCkBAIC00NzQsMTMgKzQ3NCwxOSBAQAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgUlggc2tidWZmIGFycmF5ICovCiAJcnhfcmluZy0+cnhfc2tidWZmX2RtYSA9IGttYWxsb2NfYXJyYXkocnhfcnNpemUsCiAJCQkJCSAgICAgICBzaXplb2YoZG1hX2FkZHJfdCksIEdGUF9LRVJORUwpOwotCWlmIChyeF9yaW5nLT5yeF9za2J1ZmZfZG1hID09IE5VTEwpCi0JCWdvdG8gZG1hbWVtX2VycjsKKwlpZiAoIXJ4X3JpbmctPnJ4X3NrYnVmZl9kbWEpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQocHJpdi0+ZGV2aWNlLAorCQkJCSAgcnhfcnNpemUgKiBzaXplb2Yoc3RydWN0IHN4Z2JlX3J4X25vcm1fZGVzYyksCisJCQkJICByeF9yaW5nLT5kbWFfcngsIHJ4X3JpbmctPmRtYV9yeF9waHkpOworCQlnb3RvIGVycm9yOworCX0KIAogCXJ4X3JpbmctPnJ4X3NrYnVmZiA9IGttYWxsb2NfYXJyYXkocnhfcnNpemUsCiAJCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJ4X3JpbmctPnJ4X3NrYnVmZiA9PSBOVUxMKQotCQlnb3RvIHJ4YnVmZl9lcnI7CisJaWYgKCFyeF9yaW5nLT5yeF9za2J1ZmYpIHsKKwkJa2ZyZWUocnhfcmluZy0+cnhfc2tidWZmX2RtYSk7CisJCWdvdG8gZXJyb3I7CisJfQogCiAJLyogaW5pdGlhbGlzZSB0aGUgYnVmZmVycyAqLwogCWZvciAoZGVzY19pbmRleCA9IDA7IGRlc2NfaW5kZXggPCByeF9yc2l6ZTsgZGVzY19pbmRleCsrKSB7CkBAIC01MDIsMTMgKzUwOCw2IEBACiBlcnJfaW5pdF9yeF9idWZmZXJzOgogCXdoaWxlICgtLWRlc2NfaW5kZXggPj0gMCkKIAkJZnJlZV9yeF9yaW5nKHByaXYtPmRldmljZSwgcnhfcmluZywgZGVzY19pbmRleCk7Ci0Ja2ZyZWUocnhfcmluZy0+cnhfc2tidWZmKTsKLXJ4YnVmZl9lcnI6Ci0Ja2ZyZWUocnhfcmluZy0+cnhfc2tidWZmX2RtYSk7Ci1kbWFtZW1fZXJyOgotCWRtYV9mcmVlX2NvaGVyZW50KHByaXYtPmRldmljZSwKLQkJCSAgcnhfcnNpemUgKiBzaXplb2Yoc3RydWN0IHN4Z2JlX3J4X25vcm1fZGVzYyksCi0JCQkgIHJ4X3JpbmctPmRtYV9yeCwgcnhfcmluZy0+ZG1hX3J4X3BoeSk7CiBlcnJvcjoKIAlyZXR1cm4gLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfcGxhdGZvcm0uYwppbmRleCA4NjY1NjBlLi5iMDJlZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9wbGF0Zm9ybS5jCkBAIC0xMDgsMTAgKzEwOCw2IEBACiAJCX0KIAl9CiAKLQkvKiBHZXQgTUFDIGFkZHJlc3MgaWYgYXZhaWxhYmxlIChEVCkgKi8KLQlpZiAobWFjKQotCQlldGhlcl9hZGRyX2NvcHkocHJpdi0+ZGV2LT5kZXZfYWRkciwgbWFjKTsKLQogCXByaXYgPSBzeGdiZV9kcnZfcHJvYmUoJihwZGV2LT5kZXYpLCBwbGF0X2RhdCwgYWRkcik7CiAJaWYgKCFwcml2KSB7CiAJCXByX2VycigiJXM6IG1haW4gZHJpdmVyIHByb2JlIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMTI1LDYgKzEyMSwxMCBAQAogCQlnb3RvIGVycl9kcnZfcmVtb3ZlOwogCX0KIAorCS8qIEdldCBNQUMgYWRkcmVzcyBpZiBhdmFpbGFibGUgKERUKSAqLworCWlmIChtYWMpCisJCWV0aGVyX2FkZHJfY29weShwcml2LT5kZXYtPmRldl9hZGRyLCBtYWMpOworCiAJLyogR2V0IHRoZSBUWC9SWCBJUlEgbnVtYmVycyAqLwogCWZvciAoaSA9IDAsIGNoYW4gPSAxOyBpIDwgU1hHQkVfVFhfUVVFVUVTOyBpKyspIHsKIAkJcHJpdi0+dHhxW2ldLT5pcnFfbm8gPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCBjaGFuKyspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggMTE4YTQyNy4uY2Y2MmZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0xNjcxLDcgKzE2NzEsNyBAQAogICogIDAgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgKC0pdmUgaW50ZWdlciBhcyBkZWZpbmVkIGluIGVycm5vLmgKICAqICBmaWxlIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHN0bW1hY19od19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIGluaXRfcHRwKQogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKQEAgLTE3MDgsOSArMTcwOCwxMSBAQAogCiAJc3RtbWFjX21tY19zZXR1cChwcml2KTsKIAotCXJldCA9IHN0bW1hY19pbml0X3B0cChwcml2KTsKLQlpZiAocmV0ICYmIHJldCAhPSAtRU9QTk9UU1VQUCkKLQkJcHJfd2FybigiJXM6IGZhaWxlZCBQVFAgaW5pdGlhbGlzYXRpb25cbiIsIF9fZnVuY19fKTsKKwlpZiAoaW5pdF9wdHApIHsKKwkJcmV0ID0gc3RtbWFjX2luaXRfcHRwKHByaXYpOworCQlpZiAocmV0ICYmIHJldCAhPSAtRU9QTk9UU1VQUCkKKwkJCXByX3dhcm4oIiVzOiBmYWlsZWQgUFRQIGluaXRpYWxpc2F0aW9uXG4iLCBfX2Z1bmNfXyk7CisJfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJcmV0ID0gc3RtbWFjX2luaXRfZnMoZGV2KTsKQEAgLTE3ODcsNyArMTc4OSw3IEBACiAJCWdvdG8gaW5pdF9lcnJvcjsKIAl9CiAKLQlyZXQgPSBzdG1tYWNfaHdfc2V0dXAoZGV2KTsKKwlyZXQgPSBzdG1tYWNfaHdfc2V0dXAoZGV2LCB0cnVlKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcl9lcnIoIiVzOiBIdyBzZXR1cCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBpbml0X2Vycm9yOwpAQCAtMjc3Niw2ICsyNzc4LDkgQEAKICAqIEBhZGRyOiBpb2Jhc2UgbWVtb3J5IGFkZHJlc3MKICAqIERlc2NyaXB0aW9uOiB0aGlzIGlzIHRoZSBtYWluIHByb2JlIGZ1bmN0aW9uIHVzZWQgdG8KICAqIGNhbGwgdGhlIGFsbG9jX2V0aGVyZGV2LCBhbGxvY2F0ZSB0aGUgcHJpdiBzdHJ1Y3R1cmUuCisgKiBSZXR1cm46CisgKiBvbiBzdWNjZXNzIHRoZSBuZXcgcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgZXJyb3IKKyAqIHBvaW50ZXIuCiAgKi8KIHN0cnVjdCBzdG1tYWNfcHJpdiAqc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LApAQCAtMjc4Nyw3ICsyNzkyLDcgQEAKIAogCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHN0bW1hY19wcml2KSk7CiAJaWYgKCFuZGV2KQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXZpY2UpOwogCkBAIC0zMDM2LDcgKzMwNDEsNyBAQAogCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiAKIAlpbml0X2RtYV9kZXNjX3JpbmdzKG5kZXYsIEdGUF9BVE9NSUMpOwotCXN0bW1hY19od19zZXR1cChuZGV2KTsKKwlzdG1tYWNfaHdfc2V0dXAobmRldiwgZmFsc2UpOwogCXN0bW1hY19pbml0X3R4X2NvYWxlc2NlKHByaXYpOwogCiAJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwppbmRleCA0MDMyYjE3Li4zMDM5ZGUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMKQEAgLTQzMCw3ICs0MzAsNiBAQAogCS5yZW1vdmUgPSBzdG1tYWNfcGx0ZnJfcmVtb3ZlLAogCS5kcml2ZXIgPSB7CiAJCSAgIC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsCi0JCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogCQkgICAucG0gPSAmc3RtbWFjX3BsdGZyX3BtX29wcywKIAkJICAgLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHN0bW1hY19kdF9pZHMpLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vc3Vudm5ldC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL3N1bnZuZXQuYwppbmRleCA0NWM0MDhlLi5kMjgzNWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vc3Vudm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9zdW52bmV0LmMKQEAgLTEyMDEsNiArMTIwMSw3IEBACiAJCXNlZ3MgPSBza2JfZ3NvX3NlZ21lbnQoc2tiLCBkZXYtPmZlYXR1cmVzICYgfk5FVElGX0ZfVFNPKTsKIAlpZiAoSVNfRVJSKHNlZ3MpKSB7CiAJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jCmluZGV4IGM1NjBmOWEuLmEzOTEzMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogCiAJCQkvKiBDbGVhciBhbGwgbWNhc3QgZnJvbSBBTEUgKi8KIAkJCWNwc3dfYWxlX2ZsdXNoX211bHRpY2FzdChhbGUsIEFMRV9BTExfUE9SVFMgPDwKLQkJCQkJCSBwcml2LT5ob3N0X3BvcnQpOworCQkJCQkJIHByaXYtPmhvc3RfcG9ydCwgLTEpOwogCiAJCQkvKiBGbG9vZCBBbGwgVW5pY2FzdCBQYWNrZXRzIHRvIEhvc3QgcG9ydCAqLwogCQkJY3Bzd19hbGVfY29udHJvbF9zZXQoYWxlLCAwLCBBTEVfUDBfVU5JX0ZMT09ELCAxKTsKQEAgLTYzNCw2ICs2MzQsMTIgQEAKIHN0YXRpYyB2b2lkIGNwc3dfbmRvX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBjcHN3X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgdmlkOworCisJaWYgKHByaXYtPmRhdGEuZHVhbF9lbWFjKQorCQl2aWQgPSBwcml2LT5zbGF2ZXNbcHJpdi0+ZW1hY19wb3J0XS5wb3J0X3ZsYW47CisJZWxzZQorCQl2aWQgPSBwcml2LT5kYXRhLmRlZmF1bHRfdmxhbjsKIAogCWlmIChuZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCkBAIC02NDksNyArNjU1LDggQEAKIAljcHN3X2FsZV9zZXRfYWxsbXVsdGkocHJpdi0+YWxlLCBwcml2LT5uZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSk7CiAKIAkvKiBDbGVhciBhbGwgbWNhc3QgZnJvbSBBTEUgKi8KLQljcHN3X2FsZV9mbHVzaF9tdWx0aWNhc3QocHJpdi0+YWxlLCBBTEVfQUxMX1BPUlRTIDw8IHByaXYtPmhvc3RfcG9ydCk7CisJY3Bzd19hbGVfZmx1c2hfbXVsdGljYXN0KHByaXYtPmFsZSwgQUxFX0FMTF9QT1JUUyA8PCBwcml2LT5ob3N0X3BvcnQsCisJCQkJIHZpZCk7CiAKIAlpZiAoIW5ldGRldl9tY19lbXB0eShuZGV2KSkgewogCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwpAQCAtNzU3LDYgKzc2NCwxNCBAQAogc3RhdGljIGlycXJldHVybl90IGNwc3dfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgY3Bzd19wcml2ICpwcml2ID0gZGV2X2lkOworCWludCB2YWx1ZSA9IGlycSAtIHByaXYtPmlycXNfdGFibGVbMF07CisKKwkvKiBOT1RJQ0U6IEVuZGluZyBJUlEgaGVyZS4gVGhlIHRyaWNrIHdpdGggdGhlICd2YWx1ZScgdmFyaWFibGUgYWJvdmUKKwkgKiBpcyB0byBtYWtlIHN1cmUgd2Ugd2lsbCBhbHdheXMgd3JpdGUgdGhlIGNvcnJlY3QgdmFsdWUgdG8gdGhlIEVPSQorCSAqIHJlZ2lzdGVyLiBOYW1lbHkgMCBmb3IgUlhfVEhSRVNIIEludGVycnVwdCwgMSBmb3IgUlggSW50ZXJydXB0LCAyCisJICogZm9yIFRYIEludGVycnVwdCBhbmQgMyBmb3IgTUlTQyBJbnRlcnJ1cHQuCisJICovCisJY3BkbWFfY3Rscl9lb2kocHJpdi0+ZG1hLCB2YWx1ZSk7CiAKIAljcHN3X2ludHJfZGlzYWJsZShwcml2KTsKIAlpZiAocHJpdi0+aXJxX2VuYWJsZWQgPT0gdHJ1ZSkgewpAQCAtNzg2LDggKzgwMSw2IEBACiAJaW50CQkJbnVtX3R4LCBudW1fcng7CiAKIAludW1fdHggPSBjcGRtYV9jaGFuX3Byb2Nlc3MocHJpdi0+dHhjaCwgMTI4KTsKLQlpZiAobnVtX3R4KQotCQljcGRtYV9jdGxyX2VvaShwcml2LT5kbWEsIENQRE1BX0VPSV9UWCk7CiAKIAludW1fcnggPSBjcGRtYV9jaGFuX3Byb2Nlc3MocHJpdi0+cnhjaCwgYnVkZ2V0KTsKIAlpZiAobnVtX3J4IDwgYnVkZ2V0KSB7CkBAIC03OTUsNyArODA4LDYgQEAKIAogCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQljcHN3X2ludHJfZW5hYmxlKHByaXYpOwotCQljcGRtYV9jdGxyX2VvaShwcml2LT5kbWEsIENQRE1BX0VPSV9SWCk7CiAJCXByaW1fY3BzdyA9IGNwc3dfZ2V0X3NsYXZlX3ByaXYocHJpdiwgMCk7CiAJCWlmIChwcmltX2Nwc3ctPmlycV9lbmFibGVkID09IGZhbHNlKSB7CiAJCQlwcmltX2Nwc3ctPmlycV9lbmFibGVkID0gdHJ1ZTsKQEAgLTEzMTAsOCArMTMyMiw2IEBACiAJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwogCWNwZG1hX2N0bHJfc3RhcnQocHJpdi0+ZG1hKTsKIAljcHN3X2ludHJfZW5hYmxlKHByaXYpOwotCWNwZG1hX2N0bHJfZW9pKHByaXYtPmRtYSwgQ1BETUFfRU9JX1JYKTsKLQljcGRtYV9jdGxyX2VvaShwcml2LT5kbWEsIENQRE1BX0VPSV9UWCk7CiAKIAlwcmltX2Nwc3cgPSBjcHN3X2dldF9zbGF2ZV9wcml2KHByaXYsIDApOwogCWlmIChwcmltX2Nwc3ctPmlycV9lbmFibGVkID09IGZhbHNlKSB7CkBAIC0xNTc4LDkgKzE1ODgsNiBAQAogCWNwZG1hX2NoYW5fc3RhcnQocHJpdi0+dHhjaCk7CiAJY3BkbWFfY3Rscl9pbnRfY3RybChwcml2LT5kbWEsIHRydWUpOwogCWNwc3dfaW50cl9lbmFibGUocHJpdik7Ci0JY3BkbWFfY3Rscl9lb2kocHJpdi0+ZG1hLCBDUERNQV9FT0lfUlgpOwotCWNwZG1hX2N0bHJfZW9pKHByaXYtPmRtYSwgQ1BETUFfRU9JX1RYKTsKLQogfQogCiBzdGF0aWMgaW50IGNwc3dfbmRvX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqcCkKQEAgLTE2MjAsOSArMTYyNyw2IEBACiAJY3Bzd19pbnRlcnJ1cHQobmRldi0+aXJxLCBwcml2KTsKIAljcGRtYV9jdGxyX2ludF9jdHJsKHByaXYtPmRtYSwgdHJ1ZSk7CiAJY3Bzd19pbnRyX2VuYWJsZShwcml2KTsKLQljcGRtYV9jdGxyX2VvaShwcml2LT5kbWEsIENQRE1BX0VPSV9SWCk7Ci0JY3BkbWFfY3Rscl9lb2kocHJpdi0+ZG1hLCBDUERNQV9FT0lfVFgpOwotCiB9CiAjZW5kaWYKIApAQCAtMTYzMCwxNiArMTYzNCwyNCBAQAogCQkJCXVuc2lnbmVkIHNob3J0IHZpZCkKIHsKIAlpbnQgcmV0OwotCWludCB1bnJlZ19tY2FzdF9tYXNrOworCWludCB1bnJlZ19tY2FzdF9tYXNrID0gMDsKKwl1MzIgcG9ydF9tYXNrOwogCi0JaWYgKHByaXYtPm5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQotCQl1bnJlZ19tY2FzdF9tYXNrID0gQUxFX0FMTF9QT1JUUzsKLQllbHNlCi0JCXVucmVnX21jYXN0X21hc2sgPSBBTEVfUE9SVF8xIHwgQUxFX1BPUlRfMjsKKwlpZiAocHJpdi0+ZGF0YS5kdWFsX2VtYWMpIHsKKwkJcG9ydF9tYXNrID0gKDEgPDwgKHByaXYtPmVtYWNfcG9ydCArIDEpKSB8IEFMRV9QT1JUX0hPU1Q7CiAKLQlyZXQgPSBjcHN3X2FsZV9hZGRfdmxhbihwcml2LT5hbGUsIHZpZCwKLQkJCQlBTEVfQUxMX1BPUlRTIDw8IHByaXYtPmhvc3RfcG9ydCwKLQkJCQkwLCBBTEVfQUxMX1BPUlRTIDw8IHByaXYtPmhvc3RfcG9ydCwKKwkJaWYgKHByaXYtPm5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorCQkJdW5yZWdfbWNhc3RfbWFzayA9IHBvcnRfbWFzazsKKwl9IGVsc2UgeworCQlwb3J0X21hc2sgPSBBTEVfQUxMX1BPUlRTOworCisJCWlmIChwcml2LT5uZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKKwkJCXVucmVnX21jYXN0X21hc2sgPSBBTEVfQUxMX1BPUlRTOworCQllbHNlCisJCQl1bnJlZ19tY2FzdF9tYXNrID0gQUxFX1BPUlRfMSB8IEFMRV9QT1JUXzI7CisJfQorCisJcmV0ID0gY3Bzd19hbGVfYWRkX3ZsYW4ocHJpdi0+YWxlLCB2aWQsIHBvcnRfbWFzaywgMCwgcG9ydF9tYXNrLAogCQkJCXVucmVnX21jYXN0X21hc2sgPDwgcHJpdi0+aG9zdF9wb3J0KTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC0xNjUwLDggKzE2NjIsNyBAQAogCQlnb3RvIGNsZWFuX3ZpZDsKIAogCXJldCA9IGNwc3dfYWxlX2FkZF9tY2FzdChwcml2LT5hbGUsIHByaXYtPm5kZXYtPmJyb2FkY2FzdCwKLQkJCQkgQUxFX0FMTF9QT1JUUyA8PCBwcml2LT5ob3N0X3BvcnQsCi0JCQkJIEFMRV9WTEFOLCB2aWQsIDApOworCQkJCSBwb3J0X21hc2ssIEFMRV9WTEFOLCB2aWQsIDApOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBjbGVhbl92bGFuX3VjYXN0OwogCXJldHVybiAwOwpAQCAtMTY3Miw2ICsxNjgzLDE5IEBACiAJaWYgKHZpZCA9PSBwcml2LT5kYXRhLmRlZmF1bHRfdmxhbikKIAkJcmV0dXJuIDA7CiAKKwlpZiAocHJpdi0+ZGF0YS5kdWFsX2VtYWMpIHsKKwkJLyogSW4gZHVhbCBFTUFDLCByZXNlcnZlZCBWTEFOIGlkIHNob3VsZCBub3QgYmUgdXNlZCBmb3IKKwkJICogY3JlYXRpbmcgVkxBTiBpbnRlcmZhY2VzIGFzIHRoaXMgY2FuIGJyZWFrIHRoZSBkdWFsCisJCSAqIEVNQUMgcG9ydCBzZXBhcmF0aW9uCisJCSAqLworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+ZGF0YS5zbGF2ZXM7IGkrKykgeworCQkJaWYgKHZpZCA9PSBwcml2LT5zbGF2ZXNbaV0ucG9ydF92bGFuKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCiAJZGV2X2luZm8ocHJpdi0+ZGV2LCAiQWRkaW5nIHZsYW5pZCAlZCB0byB2bGFuIGZpbHRlclxuIiwgdmlkKTsKIAlyZXR1cm4gY3Bzd19hZGRfdmxhbl9hbGVfZW50cnkocHJpdiwgdmlkKTsKIH0KQEAgLTE2ODUsNiArMTcwOSwxNSBAQAogCWlmICh2aWQgPT0gcHJpdi0+ZGF0YS5kZWZhdWx0X3ZsYW4pCiAJCXJldHVybiAwOwogCisJaWYgKHByaXYtPmRhdGEuZHVhbF9lbWFjKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5kYXRhLnNsYXZlczsgaSsrKSB7CisJCQlpZiAodmlkID09IHByaXYtPnNsYXZlc1tpXS5wb3J0X3ZsYW4pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAlkZXZfaW5mbyhwcml2LT5kZXYsICJyZW1vdmluZyB2bGFuaWQgJWQgZnJvbSB2bGFuIGZpbHRlclxuIiwgdmlkKTsKIAlyZXQgPSBjcHN3X2FsZV9kZWxfdmxhbihwcml2LT5hbGUsIHZpZCwgMCk7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19hbGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfYWxlLmMKaW5kZXggMDk3ZWJlNy4uNTI0NmIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19hbGUuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X2FsZS5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAkJY3Bzd19hbGVfc2V0X2VudHJ5X3R5cGUoYWxlX2VudHJ5LCBBTEVfVFlQRV9GUkVFKTsKIH0KIAotaW50IGNwc3dfYWxlX2ZsdXNoX211bHRpY2FzdChzdHJ1Y3QgY3Bzd19hbGUgKmFsZSwgaW50IHBvcnRfbWFzaykKK2ludCBjcHN3X2FsZV9mbHVzaF9tdWx0aWNhc3Qoc3RydWN0IGNwc3dfYWxlICphbGUsIGludCBwb3J0X21hc2ssIGludCB2aWQpCiB7CiAJdTMyIGFsZV9lbnRyeVtBTEVfRU5UUllfV09SRFNdOwogCWludCByZXQsIGlkeDsKQEAgLTI0NSw2ICsyNDUsMTQgQEAKIAkJaWYgKHJldCAhPSBBTEVfVFlQRV9BRERSICYmIHJldCAhPSBBTEVfVFlQRV9WTEFOX0FERFIpCiAJCQljb250aW51ZTsKIAorCQkvKiBpZiB2aWQgcGFzc2VkIGlzIC0xIHRoZW4gcmVtb3ZlIGFsbCBtdWx0aWNhc3QgZW50cnkgZnJvbQorCQkgKiB0aGUgdGFibGUgaXJyZXNwZWN0aXZlIG9mIHZsYW4gaWQsIGlmIGEgdmFsaWQgdmxhbiBpZCBpcworCQkgKiBwYXNzZWQgdGhlbiByZW1vdmUgb25seSBtdWx0aWNhc3QgYWRkZWQgdG8gdGhhdCB2bGFuIGlkLgorCQkgKiBpZiB2bGFuIGlkIGRvZXNuJ3QgbWF0Y2ggdGhlbiBtb3ZlIG9uIHRvIG5leHQgZW50cnkuCisJCSAqLworCQlpZiAodmlkICE9IC0xICYmIGNwc3dfYWxlX2dldF92bGFuX2lkKGFsZV9lbnRyeSkgIT0gdmlkKQorCQkJY29udGludWU7CisKIAkJaWYgKGNwc3dfYWxlX2dldF9tY2FzdChhbGVfZW50cnkpKSB7CiAJCQl1OCBhZGRyWzZdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X2FsZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19hbGUuaAppbmRleCBjMGQ0MTI3YWE1Li5hZjFlN2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X2FsZS5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfYWxlLmgKQEAgLTkyLDcgKzkyLDcgQEAKIAogaW50IGNwc3dfYWxlX3NldF9hZ2VvdXQoc3RydWN0IGNwc3dfYWxlICphbGUsIGludCBhZ2VvdXQpOwogaW50IGNwc3dfYWxlX2ZsdXNoKHN0cnVjdCBjcHN3X2FsZSAqYWxlLCBpbnQgcG9ydF9tYXNrKTsKLWludCBjcHN3X2FsZV9mbHVzaF9tdWx0aWNhc3Qoc3RydWN0IGNwc3dfYWxlICphbGUsIGludCBwb3J0X21hc2spOworaW50IGNwc3dfYWxlX2ZsdXNoX211bHRpY2FzdChzdHJ1Y3QgY3Bzd19hbGUgKmFsZSwgaW50IHBvcnRfbWFzaywgaW50IHZpZCk7CiBpbnQgY3Bzd19hbGVfYWRkX3VjYXN0KHN0cnVjdCBjcHN3X2FsZSAqYWxlLCB1OCAqYWRkciwgaW50IHBvcnQsCiAJCSAgICAgICBpbnQgZmxhZ3MsIHUxNiB2aWQpOwogaW50IGNwc3dfYWxlX2RlbF91Y2FzdChzdHJ1Y3QgY3Bzd19hbGUgKmFsZSwgdTggKmFkZHIsIGludCBwb3J0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYwppbmRleCBlYTcxMjUxLi41ZmFlNDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYwpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX21kaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KIApAQCAtMzQzLDkgKzM0NCw3IEBACiAJdTMyIG11bHRpY2FzdF9oYXNoX2NudFtFTUFDX05VTV9NVUxUSUNBU1RfQklUU107CiAJdTMyIHJ4X2FkZHJfdHlwZTsKIAljb25zdCBjaGFyICpwaHlfaWQ7Ci0jaWZkZWYgQ09ORklHX09GCiAJc3RydWN0IGRldmljZV9ub2RlICpwaHlfbm9kZTsKLSNlbmRpZgogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAJc3BpbmxvY2tfdCBsb2NrOwogCS8qcGxhdGZvcm0gc3BlY2lmaWMgbWVtYmVycyovCkBAIC05MjIsNiArOTIxLDE2IEBACiAJCWlmIChwcml2LT5pbnRfZGlzYWJsZSkKIAkJCXByaXYtPmludF9kaXNhYmxlKCk7CiAKKwkJLyogTk9URTogUnggVGhyZXNob2xkIGFuZCBNaXNjIGludGVycnVwdHMgYXJlIG5vdCBlbmFibGVkICovCisKKwkJLyogYWNrIHJ4ZW4gb25seSB0aGVuIGEgbmV3IHB1bHNlIHdpbGwgYmUgZ2VuZXJhdGVkICovCisJCWVtYWNfd3JpdGUoRU1BQ19ETTY0NlhfTUFDRU9JVkVDVE9SLAorCQkJRU1BQ19ETTY0NlhfTUFDX0VPSV9DMF9SWEVOKTsKKworCQkvKiBhY2sgdHhlbi0gb25seSB0aGVuIGEgbmV3IHB1bHNlIHdpbGwgYmUgZ2VuZXJhdGVkICovCisJCWVtYWNfd3JpdGUoRU1BQ19ETTY0NlhfTUFDRU9JVkVDVE9SLAorCQkJRU1BQ19ETTY0NlhfTUFDX0VPSV9DMF9UWEVOKTsKKwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAl9IGVsc2UgewpAQCAtOTUxLDE1ICs5NjAsNiBAQAogCQkgKiByZWdpc3RlciAqLwogCiAJCS8qIE5PVEU6IFJ4IFRocmVzaG9sZCBhbmQgTWlzYyBpbnRlcnJ1cHRzIGFyZSBub3QgZW5hYmxlZCAqLwotCi0JCS8qIGFjayByeGVuIG9ubHkgdGhlbiBhIG5ldyBwdWxzZSB3aWxsIGJlIGdlbmVyYXRlZCAqLwotCQllbWFjX3dyaXRlKEVNQUNfRE02NDZYX01BQ0VPSVZFQ1RPUiwKLQkJCUVNQUNfRE02NDZYX01BQ19FT0lfQzBfUlhFTik7Ci0KLQkJLyogYWNrIHR4ZW4tIG9ubHkgdGhlbiBhIG5ldyBwdWxzZSB3aWxsIGJlIGdlbmVyYXRlZCAqLwotCQllbWFjX3dyaXRlKEVNQUNfRE02NDZYX01BQ0VPSVZFQ1RPUiwKLQkJCUVNQUNfRE02NDZYX01BQ19FT0lfQzBfVFhFTik7Ci0KIAl9IGVsc2UgewogCQkvKiBTZXQgRE02NDR4IGNvbnRyb2wgcmVnaXN0ZXJzIGZvciBpbnRlcnJ1cHQgY29udHJvbCAqLwogCQllbWFjX2N0cmxfd3JpdGUoRU1BQ19DVFJMX0VXQ1RMLCAweDEpOwpAQCAtMTUzNyw3ICsxNTM3LDEzIEBACiAJaW50IGkgPSAwOwogCXN0cnVjdCBlbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCXBtX3J1bnRpbWVfZ2V0KCZwcml2LT5wZGV2LT5kZXYpOworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJnByaXYtPnBkZXYtPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwcml2LT5wZGV2LT5kZXYpOworCQlkZXZfZXJyKCZwcml2LT5wZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIGdldF9zeW5jKCVkKVxuIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwogCWZvciAoY250ID0gMDsgY250IDwgRVRIX0FMRU47IGNudCsrKQpAQCAtMTU5Niw4ICsxNjAyLDIwIEBACiAJY3BkbWFfY3Rscl9zdGFydChwcml2LT5kbWEpOwogCiAJcHJpdi0+cGh5ZGV2ID0gTlVMTDsKKworCWlmIChwcml2LT5waHlfbm9kZSkgeworCQlwcml2LT5waHlkZXYgPSBvZl9waHlfY29ubmVjdChuZGV2LCBwcml2LT5waHlfbm9kZSwKKwkJCQkJICAgICAgJmVtYWNfYWRqdXN0X2xpbmssIDAsIDApOworCQlpZiAoIXByaXYtPnBoeWRldikgeworCQkJZGV2X2VycihlbWFjX2RldiwgImNvdWxkIG5vdCBjb25uZWN0IHRvIHBoeSAlc1xuIiwKKwkJCQlwcml2LT5waHlfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKwogCS8qIHVzZSB0aGUgZmlyc3QgcGh5IG9uIHRoZSBidXMgaWYgcGRhdGEgZGlkIG5vdCBnaXZlIHVzIGEgcGh5IGlkICovCi0JaWYgKCFwcml2LT5waHlfaWQpIHsKKwlpZiAoIXByaXYtPnBoeWRldiAmJiAhcHJpdi0+cGh5X2lkKSB7CiAJCXN0cnVjdCBkZXZpY2UgKnBoeTsKIAogCQlwaHkgPSBidXNfZmluZF9kZXZpY2UoJm1kaW9fYnVzX3R5cGUsIE5VTEwsIE5VTEwsCkBAIC0xNjA2LDcgKzE2MjQsNyBAQAogCQkJcHJpdi0+cGh5X2lkID0gZGV2X25hbWUocGh5KTsKIAl9CiAKLQlpZiAocHJpdi0+cGh5X2lkICYmICpwcml2LT5waHlfaWQpIHsKKwlpZiAoIXByaXYtPnBoeWRldiAmJiBwcml2LT5waHlfaWQgJiYgKnByaXYtPnBoeV9pZCkgewogCQlwcml2LT5waHlkZXYgPSBwaHlfY29ubmVjdChuZGV2LCBwcml2LT5waHlfaWQsCiAJCQkJCSAgICZlbWFjX2FkanVzdF9saW5rLAogCQkJCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKQEAgLTE2MjcsNyArMTY0NSw5IEBACiAJCQkiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlkPSV4KVxuIiwKIAkJCXByaXYtPnBoeWRldi0+ZHJ2LT5uYW1lLCBkZXZfbmFtZSgmcHJpdi0+cGh5ZGV2LT5kZXYpLAogCQkJcHJpdi0+cGh5ZGV2LT5waHlfaWQpOwotCX0gZWxzZSB7CisJfQorCisJaWYgKCFwcml2LT5waHlkZXYpIHsKIAkJLyogTm8gUEhZICwgZml4IHRoZSBsaW5rLCBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzICovCiAJCWRldl9ub3RpY2UoZW1hY19kZXYsICJubyBwaHksIGRlZmF1bHRpbmcgdG8gMTAwL2Z1bGxcbiIpOwogCQlwcml2LT5saW5rID0gMTsKQEAgLTE3MjQsNiArMTc0NCwxNSBAQAogCXN0cnVjdCBlbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1MzIgbWFjX2NvbnRyb2w7CiAJdTMyIHN0YXRzX2NsZWFyX21hc2s7CisJaW50IGVycjsKKworCWVyciA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJnByaXYtPnBkZXYtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwcml2LT5wZGV2LT5kZXYpOworCQlkZXZfZXJyKCZwcml2LT5wZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIGdldF9zeW5jKCVkKVxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOworCQlyZXR1cm4gJm5kZXYtPnN0YXRzOworCX0KIAogCS8qIHVwZGF0ZSBlbWFjIGhhcmR3YXJlIHN0YXRzIGFuZCByZXNldCB0aGUgcmVnaXN0ZXJzKi8KIApAQCAtMTc2Niw2ICsxNzk1LDggQEAKIAluZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycyArPSBlbWFjX3JlYWQoRU1BQ19UWFVOREVSUlVOKTsKIAllbWFjX3dyaXRlKEVNQUNfVFhVTkRFUlJVTiwgc3RhdHNfY2xlYXJfbWFzayk7CiAKKwlwbV9ydW50aW1lX3B1dCgmcHJpdi0+cGRldi0+ZGV2KTsKKwogCXJldHVybiAmbmRldi0+c3RhdHM7CiB9CiAKQEAgLTE4NTksNyArMTg5MCw3IEBACiBzdGF0aWMgaW50IGRhdmluY2lfZW1hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByYyA9IDA7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHJlc291cmNlICpyZXMsICpyZXNfY3RybDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgZW1hY19wcml2ICpwcml2OwogCXVuc2lnbmVkIGxvbmcgaHdfcmFtX2FkZHI7CkBAIC0xODc2LDYgKzE5MDcsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAllbWFjX2J1c19mcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoZW1hY19jbGspOworCWRldm1fY2xrX3B1dCgmcGRldi0+ZGV2LCBlbWFjX2Nsayk7CiAKIAkvKiBUT0RPOiBQcm9iZSBQSFkgaGVyZSBpZiBwb3NzaWJsZSAqLwogCkBAIC0xOTE3LDExICsxOTQ5LDIwIEBACiAJCXJjID0gUFRSX0VSUihwcml2LT5yZW1hcF9hZGRyKTsKIAkJZ290byBub19wZGF0YTsKIAl9CisKKwlyZXNfY3RybCA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKHJlc19jdHJsKSB7CisJCXByaXYtPmN0cmxfYmFzZSA9CisJCQlkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzX2N0cmwpOworCQlpZiAoSVNfRVJSKHByaXYtPmN0cmxfYmFzZSkpCisJCQlnb3RvIG5vX3BkYXRhOworCX0gZWxzZSB7CisJCXByaXYtPmN0cmxfYmFzZSA9IHByaXYtPnJlbWFwX2FkZHIgKyBwZGF0YS0+Y3RybF9tb2RfcmVnX29mZnNldDsKKwl9CisKIAlwcml2LT5lbWFjX2Jhc2UgPSBwcml2LT5yZW1hcF9hZGRyICsgcGRhdGEtPmN0cmxfcmVnX29mZnNldDsKIAluZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylwcml2LT5yZW1hcF9hZGRyOwogCi0JcHJpdi0+Y3RybF9iYXNlID0gcHJpdi0+cmVtYXBfYWRkciArIHBkYXRhLT5jdHJsX21vZF9yZWdfb2Zmc2V0OwotCiAJaHdfcmFtX2FkZHIgPSBwZGF0YS0+aHdfcmFtX2FkZHI7CiAJaWYgKCFod19yYW1fYWRkcikKIAkJaHdfcmFtX2FkZHIgPSAodTMyIF9fZm9yY2UpcmVzLT5zdGFydCArIHBkYXRhLT5jdHJsX3JhbV9vZmZzZXQ7CkBAIC0xOTgwLDEyICsyMDIxLDIyIEBACiAJbmRldi0+ZXRodG9vbF9vcHMgPSAmZXRodG9vbF9vcHM7CiAJbmV0aWZfbmFwaV9hZGQobmRldiwgJnByaXYtPm5hcGksIGVtYWNfcG9sbCwgRU1BQ19QT0xMX1dFSUdIVCk7CiAKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKwlyYyA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CisJaWYgKHJjIDwgMCkgeworCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBmYWlsZWQgdG8gZ2V0X3N5bmMoJWQpXG4iLAorCQkJX19mdW5jX18sIHJjKTsKKwkJZ290byBub19jcGRtYV9jaGFuOworCX0KKwogCS8qIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSAqLwogCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCWlmIChyYykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciBpbiByZWdpc3Rlcl9uZXRkZXZcbiIpOwogCQlyYyA9IC1FTk9ERVY7CisJCXBtX3J1bnRpbWVfcHV0KCZwZGV2LT5kZXYpOwogCQlnb3RvIG5vX2NwZG1hX2NoYW47CiAJfQogCkBAIC0xOTk1LDkgKzIwNDYsNyBAQAogCQkJICAgIihyZWdzOiAlcCwgaXJxOiAlZClcbiIsCiAJCQkgICAodm9pZCAqKXByaXYtPmVtYWNfYmFzZV9waHlzLCBuZGV2LT5pcnEpOwogCX0KLQotCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwotCXBtX3J1bnRpbWVfcmVzdW1lKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0KCZwZGV2LT5kZXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTIwNzEsOSArMjEyMCwxNCBAQAogCS5od19yYW1fYWRkcgkJPSAweDAxZTIwMDAwLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBlbWFjX3BsYXRmb3JtX2RhdGEgZG04MTZfZW1hY19kYXRhID0geworCS52ZXJzaW9uCQk9IEVNQUNfVkVSU0lPTl8yLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZGF2aW5jaV9lbWFjX29mX21hdGNoW10gPSB7CiAJey5jb21wYXRpYmxlID0gInRpLGRhdmluY2ktZG02NDY3LWVtYWMiLCB9LAogCXsuY29tcGF0aWJsZSA9ICJ0aSxhbTM1MTctZW1hYyIsIC5kYXRhID0gJmFtMzUxN19lbWFjX2RhdGEsIH0sCisJey5jb21wYXRpYmxlID0gInRpLGRtODE2LWVtYWMiLCAuZGF0YSA9ICZkbTgxNl9lbWFjX2RhdGEsIH0sCiAJe30sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZGF2aW5jaV9lbWFjX29mX21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9sbF90ZW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvbGxfdGVtYWNfbWFpbi5jCmluZGV4IDljMmQ5MWUuLmRiY2JmMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9sbF90ZW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L2xsX3RlbWFjX21haW4uYwpAQCAtMTA0Myw2ICsxMDQzLDcgQEAKIAlscC0+cmVncyA9IG9mX2lvbWFwKG9wLT5kZXYub2Zfbm9kZSwgMCk7CiAJaWYgKCFscC0+cmVncykgewogCQlkZXZfZXJyKCZvcC0+ZGV2LCAiY291bGQgbm90IG1hcCB0ZW1hYyByZWdzLlxuIik7CisJCXJjID0gLUVOT01FTTsKIAkJZ290byBub2RldjsKIAl9CiAKQEAgLTEwNjIsNiArMTA2Myw3IEBACiAJbnAgPSBvZl9wYXJzZV9waGFuZGxlKG9wLT5kZXYub2Zfbm9kZSwgImxsaW5rLWNvbm5lY3RlZCIsIDApOwogCWlmICghbnApIHsKIAkJZGV2X2Vycigmb3AtPmRldiwgImNvdWxkIG5vdCBmaW5kIERNQSBub2RlXG4iKTsKKwkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaAppbmRleCA0NGI4ZDJiLi40YzliNGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaApAQCAtMzg4LDcgKzM4OCw2IEBACiAgKiBAZG1hX2Vycl90YXNrbGV0OiBUYXNrbGV0IHN0cnVjdHVyZSB0byBwcm9jZXNzIEF4aSBETUEgZXJyb3JzCiAgKiBAdHhfaXJxOglBeGlkbWEgVFggSVJRIG51bWJlcgogICogQHJ4X2lycToJQXhpZG1hIFJYIElSUSBudW1iZXIKLSAqIEB0ZW1hY190eXBlOglheGllbmV0IHR5cGUgdG8gaWRlbnRpZnkgYmV0d2VlbiBzb2Z0IGFuZCBoYXJkIHRlbWFjCiAgKiBAcGh5X3R5cGU6CVBoeSB0eXBlIHRvIGlkZW50aWZ5IGJldHdlZW4gTUlJL0dNSUkvUkdNSUkvU0dNSUkvMTAwMCBCYXNlLVgKICAqIEBvcHRpb25zOglBeGlFdGhlcm5ldCBvcHRpb24gd29yZAogICogQGxhc3RfbGluazoJUGh5IGxpbmsgc3RhdGUgaW4gd2hpY2ggdGhlIFBIWSB3YXMgbmVnb3RpYXRlZCBlYXJsaWVyCkBAIC00MzEsNyArNDMwLDYgQEAKIAogCWludCB0eF9pcnE7CiAJaW50IHJ4X2lycTsKLQl1MzIgdGVtYWNfdHlwZTsKIAl1MzIgcGh5X3R5cGU7CiAKIAl1MzIgb3B0aW9uczsJCQkvKiBDdXJyZW50IG9wdGlvbnMgd29yZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMKaW5kZXggNGVhMmQ0ZS4uYTZkMjg2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jCkBAIC0xNTAxLDYgKzE1MDEsNyBAQAogCWxwLT5yZWdzID0gb2ZfaW9tYXAob3AtPmRldi5vZl9ub2RlLCAwKTsKIAlpZiAoIWxwLT5yZWdzKSB7CiAJCWRldl9lcnIoJm9wLT5kZXYsICJjb3VsZCBub3QgbWFwIEF4aSBFdGhlcm5ldCByZWdzLlxuIik7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gbm9kZXY7CiAJfQogCS8qIFNldHVwIGNoZWNrc3VtIG9mZmxvYWQsIGJ1dCBkZWZhdWx0IHRvIG9mZiBpZiBub3Qgc3BlY2lmaWVkICovCkBAIC0xNTU1LDEwICsxNTU2LDYgQEAKIAkJaWYgKChiZTMyX3RvX2NwdXAocCkpID49IDB4NDAwMCkKIAkJCWxwLT5qdW1ib19zdXBwb3J0ID0gMTsKIAl9Ci0JcCA9IChfX2JlMzIgKikgb2ZfZ2V0X3Byb3BlcnR5KG9wLT5kZXYub2Zfbm9kZSwgInhsbngsdGVtYWMtdHlwZSIsCi0JCQkJICAgICAgIE5VTEwpOwotCWlmIChwKQotCQlscC0+dGVtYWNfdHlwZSA9IGJlMzJfdG9fY3B1cChwKTsKIAlwID0gKF9fYmUzMiAqKSBvZl9nZXRfcHJvcGVydHkob3AtPmRldi5vZl9ub2RlLCAieGxueCxwaHktdHlwZSIsIE5VTEwpOwogCWlmIChwKQogCQlscC0+cGh5X3R5cGUgPSBiZTMyX3RvX2NwdXAocCk7CkBAIC0xNTY3LDYgKzE1NjQsNyBAQAogCW5wID0gb2ZfcGFyc2VfcGhhbmRsZShvcC0+ZGV2Lm9mX25vZGUsICJheGlzdHJlYW0tY29ubmVjdGVkIiwgMCk7CiAJaWYgKCFucCkgewogCQlkZXZfZXJyKCZvcC0+ZGV2LCAiY291bGQgbm90IGZpbmQgRE1BIG5vZGVcbiIpOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAlscC0+ZG1hX3JlZ3MgPSBvZl9pb21hcChucCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2VtYWNsaXRlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2VtYWNsaXRlLmMKaW5kZXggMjQ4NTg3OS4uOWQ0Y2UzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9lbWFjbGl0ZS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfZW1hY2xpdGUuYwpAQCAtMTEwOSw2ICsxMTA5LDcgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uob2ZkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKIAlpZiAoIXJlcykgewogCQlkZXZfZXJyKGRldiwgIm5vIElSUSBmb3VuZFxuIik7CisJCXJjID0gLUVOWElPOwogCQlnb3RvIGVycm9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaCBiL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmgKaW5kZXggMmY0OGY3OS4uMzg0Y2E0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaAorKysgYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oCkBAIC01OTAsNiArNTkwLDcgQEAKIAogCiAjZGVmaW5lIE5FVFZTQ19SRUNFSVZFX0JVRkZFUl9JRAkJMHhjYWZlCisjZGVmaW5lIE5FVFZTQ19TRU5EX0JVRkZFUl9JRAkJCTAKIAogI2RlZmluZSBORVRWU0NfUEFDS0VUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgNDA5NgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMKaW5kZXggZGQ4NjdlNi4uOWY0OWMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jCisrKyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYwpAQCAtMTYxLDggKzE2MSw4IEBACiAKIAkvKiBEZWFsIHdpdGggdGhlIHNlbmQgYnVmZmVyIHdlIG1heSBoYXZlIHNldHVwLgogCSAqIElmIHdlIGdvdCBhICBzZW5kIHNlY3Rpb24gc2l6ZSwgaXQgbWVhbnMgd2UgcmVjZWl2ZWQgYQotCSAqIFNlbmRzZW5kQnVmZmVyQ29tcGxldGUgbXNnIChpZSBzZW50Ci0JICogTnZzcE1lc3NhZ2UxVHlwZVNlbmRSZWNlaXZlQnVmZmVyIG1zZykgdGhlcmVmb3JlLCB3ZSBuZWVkCisJICogTlZTUF9NU0cxX1RZUEVfU0VORF9TRU5EX0JVRl9DT01QTEVURSBtc2cgKGllIHNlbnQKKwkgKiBOVlNQX01TRzFfVFlQRV9TRU5EX1NFTkRfQlVGIG1zZykgdGhlcmVmb3JlLCB3ZSBuZWVkCiAJICogdG8gc2VuZCBhIHJldm9rZSBtc2cgaGVyZQogCSAqLwogCWlmIChuZXRfZGV2aWNlLT5zZW5kX3NlY3Rpb25fc2l6ZSkgewpAQCAtMTcyLDcgKzE3Miw4IEBACiAKIAkJcmV2b2tlX3BhY2tldC0+aGRyLm1zZ190eXBlID0KIAkJCU5WU1BfTVNHMV9UWVBFX1JFVk9LRV9TRU5EX0JVRjsKLQkJcmV2b2tlX3BhY2tldC0+bXNnLnYxX21zZy5yZXZva2VfcmVjdl9idWYuaWQgPSAwOworCQlyZXZva2VfcGFja2V0LT5tc2cudjFfbXNnLnJldm9rZV9zZW5kX2J1Zi5pZCA9CisJCQlORVRWU0NfU0VORF9CVUZGRVJfSUQ7CiAKIAkJcmV0ID0gdm1idXNfc2VuZHBhY2tldChuZXRfZGV2aWNlLT5kZXYtPmNoYW5uZWwsCiAJCQkJICAgICAgIHJldm9rZV9wYWNrZXQsCkBAIC0yMDQsNyArMjA1LDcgQEAKIAkJbmV0X2RldmljZS0+c2VuZF9idWZfZ3BhZGxfaGFuZGxlID0gMDsKIAl9CiAJaWYgKG5ldF9kZXZpY2UtPnNlbmRfYnVmKSB7Ci0JCS8qIEZyZWUgdXAgdGhlIHJlY2VpdmUgYnVmZmVyICovCisJCS8qIEZyZWUgdXAgdGhlIHNlbmQgYnVmZmVyICovCiAJCXZmcmVlKG5ldF9kZXZpY2UtPnNlbmRfYnVmKTsKIAkJbmV0X2RldmljZS0+c2VuZF9idWYgPSBOVUxMOwogCX0KQEAgLTMzOSw5ICszNDAsOSBAQAogCWluaXRfcGFja2V0ID0gJm5ldF9kZXZpY2UtPmNoYW5uZWxfaW5pdF9wa3Q7CiAJbWVtc2V0KGluaXRfcGFja2V0LCAwLCBzaXplb2Yoc3RydWN0IG52c3BfbWVzc2FnZSkpOwogCWluaXRfcGFja2V0LT5oZHIubXNnX3R5cGUgPSBOVlNQX01TRzFfVFlQRV9TRU5EX1NFTkRfQlVGOwotCWluaXRfcGFja2V0LT5tc2cudjFfbXNnLnNlbmRfcmVjdl9idWYuZ3BhZGxfaGFuZGxlID0KKwlpbml0X3BhY2tldC0+bXNnLnYxX21zZy5zZW5kX3NlbmRfYnVmLmdwYWRsX2hhbmRsZSA9CiAJCW5ldF9kZXZpY2UtPnNlbmRfYnVmX2dwYWRsX2hhbmRsZTsKLQlpbml0X3BhY2tldC0+bXNnLnYxX21zZy5zZW5kX3JlY3ZfYnVmLmlkID0gMDsKKwlpbml0X3BhY2tldC0+bXNnLnYxX21zZy5zZW5kX3NlbmRfYnVmLmlkID0gTkVUVlNDX1NFTkRfQlVGRkVSX0lEOwogCiAJLyogU2VuZCB0aGUgZ3BhZGwgbm90aWZpY2F0aW9uIHJlcXVlc3QgKi8KIAlyZXQgPSB2bWJ1c19zZW5kcGFja2V0KGRldmljZS0+Y2hhbm5lbCwgaW5pdF9wYWNrZXQsCkBAIC0zNjQsNyArMzY1LDcgQEAKIAkJbmV0ZGV2X2VycihuZGV2LCAiVW5hYmxlIHRvIGNvbXBsZXRlIHNlbmQgYnVmZmVyICIKIAkJCSAgICJpbml0aWFsaXphdGlvbiB3aXRoIE5ldFZzcCAtIHN0YXR1cyAlZFxuIiwKIAkJCSAgIGluaXRfcGFja2V0LT5tc2cudjFfbXNnLgotCQkJICAgc2VuZF9yZWN2X2J1Zl9jb21wbGV0ZS5zdGF0dXMpOworCQkJICAgc2VuZF9zZW5kX2J1Zl9jb21wbGV0ZS5zdGF0dXMpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGNsZWFudXA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX2NvcmUuYwppbmRleCBhMTRkODc3Li4yZTE5NTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX2NvcmUuYwpAQCAtMzc3LDkgKzM3NywxMSBAQAogCX07CiAKIAlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KGRldl9uZXQoZGV2KSwgTlVMTCwgJmZsNik7Ci0JaWYgKElTX0VSUihkc3QpKQorCWlmIChkc3QtPmVycm9yKSB7CisJCXJldCA9IGRzdC0+ZXJyb3I7CisJCWRzdF9yZWxlYXNlKGRzdCk7CiAJCWdvdG8gZXJyOwotCisJfQogCXNrYl9kc3RfZHJvcChza2IpOwogCXNrYl9kc3Rfc2V0KHNrYiwgZHN0KTsKIAllcnIgPSBpcDZfbG9jYWxfb3V0KHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWljcmVsLmMgYi9kcml2ZXJzL25ldC9waHkvbWljcmVsLmMKaW5kZXggYzUzMGRlMS4uM2FkOGNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21pY3JlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9taWNyZWwuYwpAQCAtODgsNiArODgsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGtzenBoeV90eXBlIGtzejgwMjFfdHlwZSA9IHsKIAkubGVkX21vZGVfcmVnCQk9IE1JSV9LU1pQSFlfQ1RSTF8yLAorCS5oYXNfYnJvYWRjYXN0X2Rpc2FibGUJPSB0cnVlLAogCS5oYXNfcm1paV9yZWZfY2xrX3NlbAk9IHRydWUsCiB9OwogCkBAIC0yNTgsMTkgKzI1OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga3N6ODAyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCWludCByYzsKLQotCXJjID0ga3N6cGh5X2NvbmZpZ19pbml0KHBoeWRldik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlyYyA9IGtzenBoeV9icm9hZGNhc3RfZGlzYWJsZShwaHlkZXYpOwotCi0JcmV0dXJuIHJjIDwgMCA/IHJjIDogMDsKLX0KLQogc3RhdGljIGludCBrc3o5MDIxX2xvYWRfdmFsdWVzX2Zyb21fb2Yoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAkJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLCB1MTYgcmVnLAogCQkJCSAgICAgICBjaGFyICpmaWVsZDEsIGNoYXIgKmZpZWxkMiwKQEAgLTU4NCw3ICs1NzIsNyBAQAogCS5mbGFncwkJPSBQSFlfSEFTX01BR0lDQU5FRyB8IFBIWV9IQVNfSU5URVJSVVBULAogCS5kcml2ZXJfZGF0YQk9ICZrc3o4MDIxX3R5cGUsCiAJLnByb2JlCQk9IGtzenBoeV9wcm9iZSwKLQkuY29uZmlnX2luaXQJPSBrc3o4MDIxX2NvbmZpZ19pbml0LAorCS5jb25maWdfaW5pdAk9IGtzenBoeV9jb25maWdfaW5pdCwKIAkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCiAJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAogCS5hY2tfaW50ZXJydXB0CT0ga3N6cGh5X2Fja19pbnRlcnJ1cHQsCkBAIC02MDEsNyArNTg5LDcgQEAKIAkuZmxhZ3MJCT0gUEhZX0hBU19NQUdJQ0FORUcgfCBQSFlfSEFTX0lOVEVSUlVQVCwKIAkuZHJpdmVyX2RhdGEJPSAma3N6ODAyMV90eXBlLAogCS5wcm9iZQkJPSBrc3pwaHlfcHJvYmUsCi0JLmNvbmZpZ19pbml0CT0ga3N6ODAyMV9jb25maWdfaW5pdCwKKwkuY29uZmlnX2luaXQJPSBrc3pwaHlfY29uZmlnX2luaXQsCiAJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAogCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKIAkuYWNrX2ludGVycnVwdAk9IGtzenBoeV9hY2tfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVhbS90ZWFtLmMgYi9kcml2ZXJzL25ldC90ZWFtL3RlYW0uYwppbmRleCA5M2UyMjQyLi5mN2ZmNDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWFtL3RlYW0uYworKysgYi9kcml2ZXJzL25ldC90ZWFtL3RlYW0uYwpAQCAtNjI5LDYgKzYyOSw3IEBACiBzdGF0aWMgdm9pZCB0ZWFtX25vdGlmeV9wZWVyc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdGVhbSAqdGVhbTsKKwlpbnQgdmFsOwogCiAJdGVhbSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdGVhbSwgbm90aWZ5X3BlZXJzLmR3LndvcmspOwogCkBAIC02MzYsOSArNjM3LDE0IEBACiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdGVhbS0+bm90aWZ5X3BlZXJzLmR3LCAwKTsKIAkJcmV0dXJuOwogCX0KKwl2YWwgPSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZ0ZWFtLT5ub3RpZnlfcGVlcnMuY291bnRfcGVuZGluZyk7CisJaWYgKHZhbCA8IDApIHsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KIAljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX05PVElGWV9QRUVSUywgdGVhbS0+ZGV2KTsKIAlydG5sX3VubG9jaygpOwotCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmdGVhbS0+bm90aWZ5X3BlZXJzLmNvdW50X3BlbmRpbmcpKQorCWlmICh2YWwpCiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdGVhbS0+bm90aWZ5X3BlZXJzLmR3LAogCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXModGVhbS0+bm90aWZ5X3BlZXJzLmludGVydmFsKSk7CiB9CkBAIC02NjksNiArNjc1LDcgQEAKIHN0YXRpYyB2b2lkIHRlYW1fbWNhc3RfcmVqb2luX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB0ZWFtICp0ZWFtOworCWludCB2YWw7CiAKIAl0ZWFtID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0ZWFtLCBtY2FzdF9yZWpvaW4uZHcud29yayk7CiAKQEAgLTY3Niw5ICs2ODMsMTQgQEAKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0ZWFtLT5tY2FzdF9yZWpvaW4uZHcsIDApOwogCQlyZXR1cm47CiAJfQorCXZhbCA9IGF0b21pY19kZWNfaWZfcG9zaXRpdmUoJnRlYW0tPm1jYXN0X3Jlam9pbi5jb3VudF9wZW5kaW5nKTsKKwlpZiAodmFsIDwgMCkgeworCQlydG5sX3VubG9jaygpOworCQlyZXR1cm47CisJfQogCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfUkVTRU5EX0lHTVAsIHRlYW0tPmRldik7CiAJcnRubF91bmxvY2soKTsKLQlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnRlYW0tPm1jYXN0X3Jlam9pbi5jb3VudF9wZW5kaW5nKSkKKwlpZiAodmFsKQogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRlYW0tPm1jYXN0X3Jlam9pbi5kdywKIAkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKHRlYW0tPm1jYXN0X3Jlam9pbi5pbnRlcnZhbCkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCmluZGV4IGRjYjZkMzMuLjFlOWNkY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYworKysgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKQEAgLTEyNzYsNyArMTI3Niw3IEBACiAgICAgICAgIGF3ZC5kb25lID0gMDsKIAogICAgICAgICB1cmItPmNvbnRleHQgPSAmYXdkOwotICAgICAgICBzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9OT0lPKTsKKyAgICAgICAgc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nCiAgICAgICAgICAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYyBiL2RyaXZlcnMvbmV0L3VzYi9xbWlfd3dhbi5jCmluZGV4IGI4YTgyYjguLjYwMmRjNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9xbWlfd3dhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9xbWlfd3dhbi5jCkBAIC01Niw2ICs1Niw4IEBACiAvKiBkZWZhdWx0IGV0aGVybmV0IGFkZHJlc3MgdXNlZCBieSB0aGUgbW9kZW0gKi8KIHN0YXRpYyBjb25zdCB1OCBkZWZhdWx0X21vZGVtX2FkZHJbRVRIX0FMRU5dID0gezB4MDIsIDB4NTAsIDB4ZjN9OwogCitzdGF0aWMgY29uc3QgdTggYnVnZ3lfZndfYWRkcltFVEhfQUxFTl0gPSB7MHgwMCwgMHhhMCwgMHhjNiwgMHgwMCwgMHgwMCwgMHgwMH07CisKIC8qIE1ha2UgdXAgYW4gZXRoZXJuZXQgaGVhZGVyIGlmIHRoZSBwYWNrZXQgZG9lc24ndCBoYXZlIG9uZS4KICAqCiAgKiBBIGZpcm13YXJlIGJ1ZyBjb21tb24gYW1vbmcgc2V2ZXJhbCBkZXZpY2VzIGNhdXNlIHRoZW0gdG8gc2VuZCByYXcKQEAgLTMzMiwxMCArMzM0LDEyIEBACiAJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoZHJpdmVyLCBpbmZvLT5kYXRhKTsKIAl9CiAKLQkvKiBOZXZlciB1c2UgdGhlIHNhbWUgYWRkcmVzcyBvbiBib3RoIGVuZHMgb2YgdGhlIGxpbmssIGV2ZW4KLQkgKiBpZiB0aGUgYnVnZ3kgZmlybXdhcmUgdG9sZCB1cyB0by4KKwkvKiBOZXZlciB1c2UgdGhlIHNhbWUgYWRkcmVzcyBvbiBib3RoIGVuZHMgb2YgdGhlIGxpbmssIGV2ZW4gaWYgdGhlCisJICogYnVnZ3kgZmlybXdhcmUgdG9sZCB1cyB0by4gT3IsIGlmIGRldmljZSBpcyBhc3NpZ25lZCB0aGUgd2VsbC1rbm93bgorCSAqIGJ1Z2d5IGZpcm13YXJlIE1BQyBhZGRyZXNzLCByZXBsYWNlIGl0IHdpdGggYSByYW5kb20gYWRkcmVzcywKIAkgKi8KLQlpZiAoZXRoZXJfYWRkcl9lcXVhbChkZXYtPm5ldC0+ZGV2X2FkZHIsIGRlZmF1bHRfbW9kZW1fYWRkcikpCisJaWYgKGV0aGVyX2FkZHJfZXF1YWwoZGV2LT5uZXQtPmRldl9hZGRyLCBkZWZhdWx0X21vZGVtX2FkZHIpIHx8CisJICAgIGV0aGVyX2FkZHJfZXF1YWwoZGV2LT5uZXQtPmRldl9hZGRyLCBidWdneV9md19hZGRyKSkKIAkJZXRoX2h3X2FkZHJfcmFuZG9tKGRldi0+bmV0KTsKIAogCS8qIG1ha2UgTUFDIGFkZHIgZWFzaWx5IGRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIElQIGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwppbmRleCAyZDFjNzdlLi5iZjQwNWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYworKysgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwpAQCAtODMzLDkgKzgzMyw2IEBACiAJCWluZGV4ICY9IH4zOwogCX0KIAotCWdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YodG1wKSwgJnRtcCwgdHlwZSk7Ci0KLQlkYXRhIHw9IF9fbGUzMl90b19jcHUodG1wKSAmIH5tYXNrOwogCXRtcCA9IF9fY3B1X3RvX2xlMzIoZGF0YSk7CiAKIAlnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIGJ5ZW4sIHNpemVvZih0bXApLCAmdG1wLCB0eXBlKTsKQEAgLTg3NCw5ICs4NzEsNiBAQAogCQlpbmRleCAmPSB+MzsKIAl9CiAKLQlnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKHRtcCksICZ0bXAsIHR5cGUpOwotCi0JZGF0YSB8PSBfX2xlMzJfdG9fY3B1KHRtcCkgJiB+bWFzazsKIAl0bXAgPSBfX2NwdV90b19sZTMyKGRhdGEpOwogCiAJZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgJnRtcCwgdHlwZSk7CkBAIC05MjYsMTIgKzkyMCw2IEBACiAJb2NwX3JlZ193cml0ZSh0cCwgT0NQX1NSQU1fREFUQSwgZGF0YSk7CiB9CiAKLXN0YXRpYyB1MTYgc3JhbV9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyKQotewotCW9jcF9yZWdfd3JpdGUodHAsIE9DUF9TUkFNX0FERFIsIGFkZHIpOwotCXJldHVybiBvY3BfcmVnX3JlYWQodHAsIE9DUF9TUkFNX0RBVEEpOwotfQotCiBzdGF0aWMgaW50IHJlYWRfbWlpX3dvcmQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IHJlZykKIHsKIAlzdHJ1Y3QgcjgxNTIgKnRwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTE4OTcsNiArMTg4NSwyMiBAQAogCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKIH0KIAorc3RhdGljIG5ldGRldl9mZWF0dXJlc190CitydGw4MTUyX2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKK3sKKwl1MzIgbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwlpbnQgbWF4X29mZnNldCA9IG1zcyA/IEdUVENQSE9fTUFYIDogVENQSE9fTUFYOworCWludCBvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCisJaWYgKChtc3MgfHwgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgJiYgb2Zmc2V0ID4gbWF4X29mZnNldCkKKwkJZmVhdHVyZXMgJj0gfihORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9HU09fTUFTSyk7CisJZWxzZSBpZiAoKHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSkgPiBhZ2dfYnVmX3N6KQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9HU09fTUFTSzsKKworCXJldHVybiBmZWF0dXJlczsKK30KKwogc3RhdGljIG5ldGRldl90eF90IHJ0bDgxNTJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CkBAIC0yNTAyLDI0ICsyNTA2LDE4IEBACiAJZGF0YSA9IG9jcF9yZWdfcmVhZCh0cCwgT0NQX1BPV0VSX0NGRyk7CiAJZGF0YSB8PSBFTl8xME1fUExMT0ZGOwogCW9jcF9yZWdfd3JpdGUodHAsIE9DUF9QT1dFUl9DRkcsIGRhdGEpOwotCWRhdGEgPSBzcmFtX3JlYWQodHAsIFNSQU1fSU1QRURBTkNFKTsKLQlkYXRhICY9IH5SWF9EUklWSU5HX01BU0s7Ci0Jc3JhbV93cml0ZSh0cCwgU1JBTV9JTVBFREFOQ0UsIGRhdGEpOworCXNyYW1fd3JpdGUodHAsIFNSQU1fSU1QRURBTkNFLCAweDBiMTMpOwogCiAJb2NwX2RhdGEgPSBvY3BfcmVhZF93b3JkKHRwLCBNQ1VfVFlQRV9QTEEsIFBMQV9QSFlfUFdSKTsKIAlvY3BfZGF0YSB8PSBQRk1fUFdNX1NXSVRDSDsKIAlvY3Bfd3JpdGVfd29yZCh0cCwgTUNVX1RZUEVfUExBLCBQTEFfUEhZX1BXUiwgb2NwX2RhdGEpOwogCi0JZGF0YSA9IHNyYW1fcmVhZCh0cCwgU1JBTV9MUEZfQ0ZHKTsKLQlkYXRhIHw9IExQRl9BVVRPX1RVTkU7Ci0Jc3JhbV93cml0ZSh0cCwgU1JBTV9MUEZfQ0ZHLCBkYXRhKTsKKwkvKiBFbmFibGUgTFBGIGNvcm5lciBhdXRvIHR1bmUgKi8KKwlzcmFtX3dyaXRlKHRwLCBTUkFNX0xQRl9DRkcsIDB4ZjcwZik7CiAKLQlkYXRhID0gc3JhbV9yZWFkKHRwLCBTUkFNXzEwTV9BTVAxKTsKLQlkYXRhIHw9IEdEQUNfSUJfVVBBTEw7Ci0Jc3JhbV93cml0ZSh0cCwgU1JBTV8xME1fQU1QMSwgZGF0YSk7Ci0JZGF0YSA9IHNyYW1fcmVhZCh0cCwgU1JBTV8xME1fQU1QMik7Ci0JZGF0YSB8PSBBTVBfRE47Ci0Jc3JhbV93cml0ZSh0cCwgU1JBTV8xME1fQU1QMiwgZGF0YSk7CisJLyogQWRqdXN0IDEwTSBBbXBsaXR1ZGUgKi8KKwlzcmFtX3dyaXRlKHRwLCBTUkFNXzEwTV9BTVAxLCAweDAwYWYpOworCXNyYW1fd3JpdGUodHAsIFNSQU1fMTBNX0FNUDIsIDB4MDIwOCk7CiAKIAlzZXRfYml0KFBIWV9SRVNFVCwgJnRwLT5mbGFncyk7CiB9CkBAIC0zNzA2LDYgKzM3MDQsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcnRsODE1Ml9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHJ0bDgxNTJfY2hhbmdlX210dSwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2ZlYXR1cmVzX2NoZWNrCT0gcnRsODE1Ml9mZWF0dXJlc19jaGVjaywKIH07CiAKIHN0YXRpYyB2b2lkIHI4MTUyYl9nZXRfdmVyc2lvbihzdHJ1Y3QgcjgxNTIgKnRwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IGI4YmQ3MTkuLjVjYTk3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTc2MCw3ICs3NjAsNiBAQAogCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IHJlY2VpdmVfcXVldWUsIG5hcGkpOwogCXVuc2lnbmVkIGludCByLCByZWNlaXZlZCA9IDA7CiAKLWFnYWluOgogCXJlY2VpdmVkICs9IHZpcnRuZXRfcmVjZWl2ZShycSwgYnVkZ2V0IC0gcmVjZWl2ZWQpOwogCiAJLyogT3V0IG9mIHBhY2tldHM/ICovCkBAIC03NzEsNyArNzcwLDYgQEAKIAkJICAgIG5hcGlfc2NoZWR1bGVfcHJlcChuYXBpKSkgewogCQkJdmlydHF1ZXVlX2Rpc2FibGVfY2IocnEtPnZxKTsKIAkJCV9fbmFwaV9zY2hlZHVsZShuYXBpKTsKLQkJCWdvdG8gYWdhaW47CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuLmMgYi9kcml2ZXJzL25ldC92eGxhbi5jCmluZGV4IDQ5ZDlmMjIuLjdmYmQ4OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvdnhsYW4uYwpAQCAtMTU3OSw4ICsxNTc5LDEwIEBACiAJYm9vbCB1ZHBfc3VtID0gIXVkcF9nZXRfbm9fY2hlY2s2X3R4KHZzLT5zb2NrLT5zayk7CiAKIAlza2IgPSB1ZHBfdHVubmVsX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHVkcF9zdW0pOwotCWlmIChJU19FUlIoc2tiKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKElTX0VSUihza2IpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KIAogCXNrYl9zY3J1Yl9wYWNrZXQoc2tiLCB4bmV0KTsKIApAQCAtMTU5MCwxMiArMTU5MiwxNiBAQAogCiAJLyogTmVlZCBzcGFjZSBmb3IgbmV3IGhlYWRlcnMgKGludmFsaWRhdGVzIGlwaCBwdHIpICovCiAJZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgbWluX2hlYWRyb29tKTsKLQlpZiAodW5saWtlbHkoZXJyKSkKLQkJcmV0dXJuIGVycjsKKwlpZiAodW5saWtlbHkoZXJyKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJZ290byBlcnI7CisJfQogCiAJc2tiID0gdmxhbl9od2FjY2VsX3B1c2hfaW5zaWRlKHNrYik7Ci0JaWYgKFdBUk5fT04oIXNrYikpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChXQVJOX09OKCFza2IpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KIAogCXZ4aCA9IChzdHJ1Y3QgdnhsYW5oZHIgKikgX19za2JfcHVzaChza2IsIHNpemVvZigqdnhoKSk7CiAJdnhoLT52eF9mbGFncyA9IGh0b25sKFZYTEFOX0ZMQUdTKTsKQEAgLTE2MDYsNiArMTYxMiw5IEBACiAJdWRwX3R1bm5lbDZfeG1pdF9za2IodnMtPnNvY2ssIGRzdCwgc2tiLCBkZXYsIHNhZGRyLCBkYWRkciwgcHJpbywKIAkJCSAgICAgdHRsLCBzcmNfcG9ydCwgZHN0X3BvcnQpOwogCXJldHVybiAwOworZXJyOgorCWRzdF9yZWxlYXNlKGRzdCk7CisJcmV0dXJuIGVycjsKIH0KICNlbmRpZgogCkBAIC0xNjIxLDcgKzE2MzAsNyBAQAogCiAJc2tiID0gdWRwX3R1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2tiLCB1ZHBfc3VtKTsKIAlpZiAoSVNfRVJSKHNrYikpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gUFRSX0VSUihza2IpOwogCiAJbWluX2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpICsgcnQtPmRzdC5oZWFkZXJfbGVuCiAJCQkrIFZYTEFOX0hMRU4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKQpAQCAtMTYyOSw4ICsxNjM4LDEwIEBACiAKIAkvKiBOZWVkIHNwYWNlIGZvciBuZXcgaGVhZGVycyAoaW52YWxpZGF0ZXMgaXBoIHB0cikgKi8KIAllcnIgPSBza2JfY293X2hlYWQoc2tiLCBtaW5faGVhZHJvb20pOwotCWlmICh1bmxpa2VseShlcnIpKQorCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gZXJyOworCX0KIAogCXNrYiA9IHZsYW5faHdhY2NlbF9wdXNoX2luc2lkZShza2IpOwogCWlmIChXQVJOX09OKCFza2IpKQpAQCAtMTc3Niw5ICsxNzg3LDEyIEBACiAJCQkJICAgICB0b3MsIHR0bCwgZGYsIHNyY19wb3J0LCBkc3RfcG9ydCwKIAkJCQkgICAgIGh0b25sKHZuaSA8PCA4KSwKIAkJCQkgICAgICFuZXRfZXEodnhsYW4tPm5ldCwgZGV2X25ldCh2eGxhbi0+ZGV2KSkpOwotCi0JCWlmIChlcnIgPCAwKQorCQlpZiAoZXJyIDwgMCkgeworCQkJLyogc2tiIGlzIGFscmVhZHkgZnJlZWQuICovCisJCQlza2IgPSBOVUxMOwogCQkJZ290byBydF90eF9lcnJvcjsKKwkJfQorCiAJCWlwdHVubmVsX3htaXRfc3RhdHMoZXJyLCAmZGV2LT5zdGF0cywgZGV2LT50c3RhdHMpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IDlhNzI2NDAuLjYyYjBiZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMjg1LDYgKzI4NSw3IEBACiAKIAlfX2F0aF9jYW5jZWxfd29yayhzYyk7CiAKKwlkaXNhYmxlX2lycShzYy0+aXJxKTsKIAl0YXNrbGV0X2Rpc2FibGUoJnNjLT5pbnRyX3RxKTsKIAl0YXNrbGV0X2Rpc2FibGUoJnNjLT5iY29uX3Rhc2tsZXQpOwogCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKQEAgLTMzMSw2ICszMzIsNyBAQAogCQlyID0gLUVJTzsKIAogb3V0OgorCWVuYWJsZV9pcnEoc2MtPmlycSk7CiAJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAJdGFza2xldF9lbmFibGUoJnNjLT5iY29uX3Rhc2tsZXQpOwogCXRhc2tsZXRfZW5hYmxlKCZzYy0+aW50cl90cSk7CkBAIC01MTIsOSArNTE0LDYgQEAKIAlpZiAoIWFoIHx8IHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmY29tbW9uLT5vcF9mbGFncykpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmICghQVJfU1JFVl85MTAwKGFoKSAmJiB0ZXN0X2JpdChBVEhfT1BfSFdfUkVTRVQsICZjb21tb24tPm9wX2ZsYWdzKSkKLQkJcmV0dXJuIElSUV9OT05FOwotCiAJLyogc2hhcmVkIGlycSwgbm90IGZvciB1cyAqLwogCWlmICghYXRoOWtfaHdfaW50cnBlbmQoYWgpKQogCQlyZXR1cm4gSVJRX05PTkU7CkBAIC01MjksNyArNTI4LDcgQEAKIAlhdGg5a19kZWJ1Z19zeW5jX2NhdXNlKHNjLCBzeW5jX2NhdXNlKTsKIAlzdGF0dXMgJj0gYWgtPmltYXNrOwkvKiBkaXNjYXJkIHVuYXNrZWQtZm9yIGJpdHMgKi8KIAotCWlmIChBUl9TUkVWXzkxMDAoYWgpICYmIHRlc3RfYml0KEFUSF9PUF9IV19SRVNFVCwgJmNvbW1vbi0+b3BfZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChBVEhfT1BfSFdfUkVTRVQsICZjb21tb24tPm9wX2ZsYWdzKSkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYwppbmRleCAzYzA2ZTkzLi45ODgwZGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogCSAqLwogCWlmICgoc2Rpb19nZXRfaG9zdF9wbV9jYXBzKHNkaW9kZXYtPmZ1bmNbMV0pICYgTU1DX1BNX0tFRVBfUE9XRVIpICYmCiAJICAgICgoc2Rpb19nZXRfaG9zdF9wbV9jYXBzKHNkaW9kZXYtPmZ1bmNbMV0pICYgTU1DX1BNX1dBS0VfU0RJT19JUlEpIHx8Ci0JICAgICAoc2Rpb2Rldi0+cGRhdGEtPm9vYl9pcnFfc3VwcG9ydGVkKSkpCisJICAgICAoc2Rpb2Rldi0+cGRhdGEgJiYgc2Rpb2Rldi0+cGRhdGEtPm9vYl9pcnFfc3VwcG9ydGVkKSkpCiAJCWJ1c19pZi0+d293bF9zdXBwb3J0ZWQgPSB0cnVlOwogI2VuZGlmCiAKQEAgLTExNjcsNyArMTE2Nyw3IEBACiAJc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2ID0gYnVzX2lmLT5idXNfcHJpdi5zZGlvOwogCiAJYnJjbWZfZGJnKFNESU8sICJFbnRlclxuIik7Ci0JaWYgKHNkaW9kZXYtPnBkYXRhLT5vb2JfaXJxX3N1cHBvcnRlZCkKKwlpZiAoc2Rpb2Rldi0+cGRhdGEgJiYgc2Rpb2Rldi0+cGRhdGEtPm9vYl9pcnFfc3VwcG9ydGVkKQogCQlkaXNhYmxlX2lycV93YWtlKHNkaW9kZXYtPnBkYXRhLT5vb2JfaXJxX25yKTsKIAlicmNtZl9zZGlvX3dkX3RpbWVyKHNkaW9kZXYtPmJ1cywgQlJDTUZfV0RfUE9MTF9NUyk7CiAJYXRvbWljX3NldCgmc2Rpb2Rldi0+c3VzcGVuZCwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCmluZGV4IDkxYzBjYjMuLjIxZGU0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKQEAgLTY1LDcgKzY1LDggQEAKIAogY29uZmlnIElQVzIyMDAKIAl0cmlzdGF0ZSAiSW50ZWwgUFJPL1dpcmVsZXNzIDIyMDBCRyBhbmQgMjkxNUFCRyBOZXR3b3JrIENvbm5lY3Rpb24iCi0JZGVwZW5kcyBvbiBQQ0kgJiYgQ0ZHODAyMTEgJiYgQ0ZHODAyMTFfV0VYVAorCWRlcGVuZHMgb24gUENJICYmIENGRzgwMjExCisJc2VsZWN0IENGRzgwMjExX1dFWFQKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfU1BZCiAJc2VsZWN0IFdFWFRfUFJJVgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNzAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNzAwMC5jCmluZGV4IGU1YmUyZDIuLmE1ZjkxOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTcwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC03MDAwLmMKQEAgLTY5LDggKzY5LDggQEAKICNpbmNsdWRlICJpd2wtYWduLWh3LmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCi0jZGVmaW5lIElXTDcyNjBfVUNPREVfQVBJX01BWAkxMAotI2RlZmluZSBJV0wzMTYwX1VDT0RFX0FQSV9NQVgJMTAKKyNkZWZpbmUgSVdMNzI2MF9VQ09ERV9BUElfTUFYCTEyCisjZGVmaW5lIElXTDMxNjBfVUNPREVfQVBJX01BWAkxMgogCiAvKiBPbGRlc3QgdmVyc2lvbiB3ZSB3b24ndCB3YXJuIGFib3V0ICovCiAjZGVmaW5lIElXTDcyNjBfVUNPREVfQVBJX09LCTEwCkBAIC0xMDUsNyArMTA1LDcgQEAKICNkZWZpbmUgSVdMNzI2NV9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w3MjY1X0ZXX1BSRSBfX3N0cmluZ2lmeShhcGkpICIudWNvZGUiCiAKICNkZWZpbmUgSVdMNzI2NURfRldfUFJFICJpd2x3aWZpLTcyNjVELSIKLSNkZWZpbmUgSVdMNzI2NURfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNzI2NV9GV19QUkUgX19zdHJpbmdpZnkoYXBpKSAiLnVjb2RlIgorI2RlZmluZSBJV0w3MjY1RF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w3MjY1RF9GV19QUkUgX19zdHJpbmdpZnkoYXBpKSAiLnVjb2RlIgogCiAjZGVmaW5lIE5WTV9IV19TRUNUSU9OX05VTV9GQU1JTFlfNzAwMAkJMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC04MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC04MDAwLmMKaW5kZXggYmYwYTk1Yy4uMzY2OGZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtODAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTgwMDAuYwpAQCAtNjksNyArNjksNyBAQAogI2luY2x1ZGUgIml3bC1hZ24taHcuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgSVdMODAwMF9VQ09ERV9BUElfTUFYCTEwCisjZGVmaW5lIElXTDgwMDBfVUNPREVfQVBJX01BWAkxMgogCiAvKiBPbGRlc3QgdmVyc2lvbiB3ZSB3b24ndCB3YXJuIGFib3V0ICovCiAjZGVmaW5lIElXTDgwMDBfVUNPREVfQVBJX09LCTEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kcnYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5jCmluZGV4IDM4ZGUxNTEuLjg1MGI4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5jCkBAIC0xMzIzLDEwICsxMzIzLDEwIEBACiAKICB0cnlfYWdhaW46CiAJLyogdHJ5IG5leHQsIGlmIGFueSAqLwotCWtmcmVlKHBpZWNlcyk7CiAJcmVsZWFzZV9maXJtd2FyZSh1Y29kZV9yYXcpOwogCWlmIChpd2xfcmVxdWVzdF9maXJtd2FyZShkcnYsIGZhbHNlKSkKIAkJZ290byBvdXRfdW5iaW5kOworCWtmcmVlKHBpZWNlcyk7CiAJcmV0dXJuOwogCiAgb3V0X2ZyZWVfZnc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaAppbmRleCA5NTY0YWUxLi4xZjdmMTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKQEAgLTMxMCw2ICszMTAsNyBAQAogI2RlZmluZSBGSF9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUJKDB4MDEwMDAwMDApCiAKICNkZWZpbmUgRkhfTUVNX1RGRElCX1JFRzFfQUREUl9CSVRTSElGVAkyOAorI2RlZmluZSBGSF9NRU1fVEJfTUFYX0xFTkdUSAkJCSgweDAwMDIwMDAwKQogCiAvKiBURkRCICBBcmVhIC0gVEZEcyBidWZmZXIgdGFibGUgKi8KICNkZWZpbmUgRkhfTUVNX1RGRElCX0RSQU1fQUREUl9MU0JfTVNLICAgICAgKDB4RkZGRkZGRkYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy1maWxlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy1maWxlLmgKaW5kZXggZjJhMDQ3Zi4uNjYwZGRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZnctZmlsZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZ3LWZpbGUuaApAQCAtMjQzLDYgKzI0MywxMCBAQAogICogQElXTF9VQ09ERV9UTFZfQVBJX1NGX05PX0RVTU1ZX05PVElGOiB1Y29kZSBzdXBwb3J0cyBkaXNhYmxpbmcgZHVtbXkgbm90aWYuCiAgKiBASVdMX1VDT0RFX1RMVl9BUElfRlJBR01FTlRFRF9TQ0FOOiBUaGlzIHVjb2RlIHN1cHBvcnRzIGFjdGl2ZSBkd2VsbCB0aW1lCiAgKglsb25nZXIgdGhhbiB0aGUgcGFzc2l2ZSBvbmUsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgZnJhZ21lbnRlZCBzY2FuLgorICogQElXTF9VQ09ERV9UTFZfQVBJX0JBU0lDX0RXRUxMOiB1c2Ugb25seSBiYXNpYyBkd2VsbCB0aW1lIGluIHNjYW4gY29tbWFuZCwKKyAqCXJlZ2FyZGxlc3Mgb2YgdGhlIGJhbmQgb3IgdGhlIG51bWJlciBvZiB0aGUgcHJvYmVzLiBGVyB3aWxsIGNhbGN1bGF0ZQorICoJdGhlIGFjdHVhbCBkd2VsbCB0aW1lLgorICogQElXTF9VQ09ERV9UTFZfQVBJX1NJTkdMRV9TQ0FOX0VCUzogRUJTIGlzIHN1cHBvcnRlZCBmb3Igc2luZ2xlIHNjYW5zIHRvby4KICAqLwogZW51bSBpd2xfdWNvZGVfdGx2X2FwaSB7CiAJSVdMX1VDT0RFX1RMVl9BUElfV09XTEFOX0NPTkZJR19USUQJPSBCSVQoMCksCkBAIC0yNTMsNiArMjU3LDggQEAKIAlJV0xfVUNPREVfVExWX0FQSV9MTUFDX1NDQU4JCT0gQklUKDYpLAogCUlXTF9VQ09ERV9UTFZfQVBJX1NGX05PX0RVTU1ZX05PVElGCT0gQklUKDcpLAogCUlXTF9VQ09ERV9UTFZfQVBJX0ZSQUdNRU5URURfU0NBTgk9IEJJVCg4KSwKKwlJV0xfVUNPREVfVExWX0FQSV9CQVNJQ19EV0VMTAkJPSBCSVQoMTMpLAorCUlXTF9VQ09ERV9UTFZfQVBJX1NJTkdMRV9TQ0FOX0VCUwk9IEJJVCgxNiksCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1zY2FuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy1hcGktc2Nhbi5oCmluZGV4IDFmMmFjZjQuLmNmYzBlNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1zY2FuLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZnctYXBpLXNjYW4uaApAQCAtNjUzLDggKzY1MywxMSBAQAogfTsKIAogLyogaXdsX3NjYW5fY2hhbm5lbF9vcHQgLSBDSEFOTkVMX09QVElNSVpBVElPTl9BUElfUwotICogQGZsYWdzOiBlbnVtIGl3bF9zY2FuX2NoYW5uZWxfZmxncwotICogQG5vbl9lYnNfcmF0aW86IGhvdyBtYW55IHJlZ3VsYXIgc2NhbiBpdGVyYXRpb24gYmVmb3JlIEVCUworICogQGZsYWdzOiBlbnVtIGl3bF9zY2FuX2NoYW5uZWxfZmxhZ3MKKyAqIEBub25fZWJzX3JhdGlvOiBkZWZpbmVzIHRoZSByYXRpbyBvZiBudW1iZXIgb2Ygc2NhbiBpdGVyYXRpb25zIHdoZXJlIEVCUyBpcworICoJaW52b2x2ZWQuCisgKgkxIC0gRUJTIGlzIGRpc2FibGVkLgorICoJMiAtIGV2ZXJ5IHNlY29uZCBzY2FuIHdpbGwgYmUgZnVsbCBzY2FuKGFuZCBzbyBvbikuCiAgKi8KIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsX29wdCB7CiAJX19sZTE2IGZsYWdzOwpAQCAtNjcyLDYgKzY3NSw3IEBACiAgKiBASVdMX01WTV9MTUFDX1NDQU5fRkxBR19GUkFHTUVOVEVEOiBhbGwgcGFzc2l2ZSBzY2FucyB3aWxsIGJlIGZyYWdtZW50ZWQKICAqIEBJV0xfTVZNX0xNQUNfU0NBTl9GTEFHU19SUk1fRU5BQkxFRDogaW5zZXJ0IFdGQSB2ZW5kb3Itc3BlY2lmaWMgVFBDIHJlcG9ydAogICoJYW5kIERTIHBhcmFtZXRlciBzZXQgSUVzIGludG8gcHJvYmUgcmVxdWVzdHMuCisgKiBASVdMX01WTV9MTUFDX1NDQU5fRkxBR19NQVRDSDogU2VuZCBtYXRjaCBmb3VuZCBub3RpZmljYXRpb24gb24gbWF0Y2hlcwogICovCiBlbnVtIGl3bF9tdm1fbG1hY19zY2FuX2ZsYWdzIHsKIAlJV0xfTVZNX0xNQUNfU0NBTl9GTEFHX1BBU1NfQUxMCQk9IEJJVCgwKSwKQEAgLTY4MSw2ICs2ODUsNyBAQAogCUlXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdfTVVMVElQTEVfU1NJRFMJPSBCSVQoNCksCiAJSVdMX01WTV9MTUFDX1NDQU5fRkxBR19GUkFHTUVOVEVECT0gQklUKDUpLAogCUlXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdTX1JSTV9FTkFCTEVECT0gQklUKDYpLAorCUlXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdfTUFUQ0gJCT0gQklUKDkpLAogfTsKIAogZW51bSBpd2xfc2Nhbl9wcmlvcml0eSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tYWM4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbWFjODAyMTEuYwppbmRleCAzMWE1YjNmLi4yMDkxNTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tYWM4MDIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL21hYzgwMjExLmMKQEAgLTEwMDQsOCArMTAwNCwxMyBAQAogewogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm12bS0+bXV0ZXgpOwogCi0JLyogZGlzYWxsb3cgbG93IHBvd2VyIHN0YXRlcyB3aGVuIHRoZSBGVyBpcyBkb3duICovCi0JaXdsX212bV9yZWYobXZtLCBJV0xfTVZNX1JFRl9VQ09ERV9ET1dOKTsKKwkvKgorCSAqIERpc2FsbG93IGxvdyBwb3dlciBzdGF0ZXMgd2hlbiB0aGUgRlcgaXMgZG93biBieSB0YWtpbmcKKwkgKiB0aGUgVUNPREVfRE9XTiByZWYuIGluIGNhc2Ugb2Ygb25nb2luZyBodyByZXN0YXJ0IHRoZQorCSAqIHJlZiBpcyBhbHJlYWR5IHRha2VuLCBzbyBkb24ndCB0YWtlIGl0IGFnYWluLgorCSAqLworCWlmICghdGVzdF9iaXQoSVdMX01WTV9TVEFUVVNfSU5fSFdfUkVTVEFSVCwgJm12bS0+c3RhdHVzKSkKKwkJaXdsX212bV9yZWYobXZtLCBJV0xfTVZNX1JFRl9VQ09ERV9ET1dOKTsKIAogCS8qIGFzeW5jX2hhbmRsZXJzX3drIGlzIG5vdyBibG9ja2VkICovCiAKQEAgLTEwMjMsNiArMTAyOCwxMiBAQAogCS8qIHRoZSBmdyBpcyBzdG9wcGVkLCB0aGUgYXV4IHN0YSBpcyBkZWFkOiBjbGVhbiB1cCBkcml2ZXIgc3RhdGUgKi8KIAlpd2xfbXZtX2RlbF9hdXhfc3RhKG12bSk7CiAKKwkvKgorCSAqIENsZWFyIElOX0hXX1JFU1RBUlQgZmxhZyB3aGVuIHN0b3BwaW5nIHRoZSBodyAoYXMgcmVzdGFydF9jb21wbGV0ZSgpCisJICogd29uJ3QgYmUgY2FsbGVkIGluIHRoaXMgY2FzZSkuCisJICovCisJY2xlYXJfYml0KElXTF9NVk1fU1RBVFVTX0lOX0hXX1JFU1RBUlQsICZtdm0tPnN0YXR1cyk7CisKIAltdm0tPnVjb2RlX2xvYWRlZCA9IGZhbHNlOwogfQogCkBAIC0zMzMyLDE4ICszMzQzLDE2IEBACiAJCW1zayB8PSBtdm1zdGEtPnRmZF9xdWV1ZV9tc2s7CiAJfQogCi0JaWYgKGRyb3ApIHsKLQkJaWYgKGl3bF9tdm1fZmx1c2hfdHhfcGF0aChtdm0sIG1zaywgdHJ1ZSkpCi0JCQlJV0xfRVJSKG12bSwgImZsdXNoIHJlcXVlc3QgZmFpbFxuIik7Ci0JCW11dGV4X3VubG9jaygmbXZtLT5tdXRleCk7Ci0JfSBlbHNlIHsKLQkJbXV0ZXhfdW5sb2NrKCZtdm0tPm11dGV4KTsKKwltc2sgJj0gfkJJVCh2aWYtPmh3X3F1ZXVlW0lFRUU4MDIxMV9BQ19WT10pOwogCi0JCS8qIHRoaXMgY2FuIHRha2UgYSB3aGlsZSwgYW5kIHdlIG1heSBuZWVkL3dhbnQgb3RoZXIgb3BlcmF0aW9ucwotCQkgKiB0byBzdWNjZWVkIHdoaWxlIGRvaW5nIHRoaXMsIHNvIGRvIGl0IHdpdGhvdXQgdGhlIG11dGV4IGhlbGQKLQkJICovCi0JCWl3bF90cmFuc193YWl0X3R4X3F1ZXVlX2VtcHR5KG12bS0+dHJhbnMsIG1zayk7Ci0JfQorCWlmIChpd2xfbXZtX2ZsdXNoX3R4X3BhdGgobXZtLCBtc2ssIHRydWUpKQorCQlJV0xfRVJSKG12bSwgImZsdXNoIHJlcXVlc3QgZmFpbFxuIik7CisJbXV0ZXhfdW5sb2NrKCZtdm0tPm11dGV4KTsKKworCS8qIHRoaXMgY2FuIHRha2UgYSB3aGlsZSwgYW5kIHdlIG1heSBuZWVkL3dhbnQgb3RoZXIgb3BlcmF0aW9ucworCSAqIHRvIHN1Y2NlZWQgd2hpbGUgZG9pbmcgdGhpcywgc28gZG8gaXQgd2l0aG91dCB0aGUgbXV0ZXggaGVsZAorCSAqLworCWl3bF90cmFuc193YWl0X3R4X3F1ZXVlX2VtcHR5KG12bS0+dHJhbnMsIG1zayk7CiB9CiAKIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGl3bF9tdm1faHdfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc2Nhbi5jCmluZGV4IGU1Mjk0ZDAuLjg0NGJmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9zY2FuLmMKQEAgLTcyLDYgKzcyLDggQEAKIAogI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggMQogI2RlZmluZSBJV0xfQUNUSVZFX1FVSUVUX1RJTUUgMTAKKyNkZWZpbmUgSVdMX0RFTlNFX0VCU19TQ0FOX1JBVElPIDUKKyNkZWZpbmUgSVdMX1NQQVJTRV9FQlNfU0NBTl9SQVRJTyAxCiAKIHN0cnVjdCBpd2xfbXZtX3NjYW5fcGFyYW1zIHsKIAl1MzIgbWF4X291dF90aW1lOwpAQCAtMTcxLDE1ICsxNzMsMjEgQEAKICAqIGFscmVhZHkgaW5jbHVkZWQgaW4gdGhlIHByb2JlIHRlbXBsYXRlLCBzbyB3ZSBuZWVkIHRvIHNldCBvbmx5CiAgKiByZXEtPm5fc3NpZHMgLSAxIGJpdHMgaW4gYWRkaXRpb24gdG8gdGhlIGZpcnN0IGJpdC4KICAqLwotc3RhdGljIHUxNiBpd2xfbXZtX2dldF9hY3RpdmVfZHdlbGwoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCBpbnQgbl9zc2lkcykKK3N0YXRpYyB1MTYgaXdsX212bV9nZXRfYWN0aXZlX2R3ZWxsKHN0cnVjdCBpd2xfbXZtICptdm0sCisJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgaW50IG5fc3NpZHMpCiB7CisJaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfQkFTSUNfRFdFTEwpCisJCXJldHVybiAxMDsKIAlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQogCQlyZXR1cm4gMjAgICsgMyAqIChuX3NzaWRzICsgMSk7CiAJcmV0dXJuIDEwICArIDIgKiAobl9zc2lkcyArIDEpOwogfQogCi1zdGF0aWMgdTE2IGl3bF9tdm1fZ2V0X3Bhc3NpdmVfZHdlbGwoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQorc3RhdGljIHUxNiBpd2xfbXZtX2dldF9wYXNzaXZlX2R3ZWxsKHN0cnVjdCBpd2xfbXZtICptdm0sCisJCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CisJaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfQkFTSUNfRFdFTEwpCisJCQlyZXR1cm4gMTEwOwogCXJldHVybiBiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogPyAxMDAgKyAyMCA6IDEwMCArIDEwOwogfQogCkBAIC0zMzEsNyArMzM5LDggQEAKIAkJICovCiAJCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSkgewogCQkJdTMyIHBhc3NpdmVfZHdlbGwgPQotCQkJCWl3bF9tdm1fZ2V0X3Bhc3NpdmVfZHdlbGwoSUVFRTgwMjExX0JBTkRfMkdIWik7CisJCQkJaXdsX212bV9nZXRfcGFzc2l2ZV9kd2VsbChtdm0sCisJCQkJCQkJICBJRUVFODAyMTFfQkFORF8yR0haKTsKIAkJCXBhcmFtcy0+bWF4X291dF90aW1lID0gcGFzc2l2ZV9kd2VsbDsKIAkJfSBlbHNlIHsKIAkJCXBhcmFtcy0+cGFzc2l2ZV9mcmFnbWVudGVkID0gdHJ1ZTsKQEAgLTM0OCw4ICszNTcsOCBAQAogCQkJcGFyYW1zLT5kd2VsbFtiYW5kXS5wYXNzaXZlID0gZnJhZ19wYXNzaXZlX2R3ZWxsOwogCQllbHNlCiAJCQlwYXJhbXMtPmR3ZWxsW2JhbmRdLnBhc3NpdmUgPQotCQkJCWl3bF9tdm1fZ2V0X3Bhc3NpdmVfZHdlbGwoYmFuZCk7Ci0JCXBhcmFtcy0+ZHdlbGxbYmFuZF0uYWN0aXZlID0gaXdsX212bV9nZXRfYWN0aXZlX2R3ZWxsKGJhbmQsCisJCQkJaXdsX212bV9nZXRfcGFzc2l2ZV9kd2VsbChtdm0sIGJhbmQpOworCQlwYXJhbXMtPmR3ZWxsW2JhbmRdLmFjdGl2ZSA9IGl3bF9tdm1fZ2V0X2FjdGl2ZV9kd2VsbChtdm0sIGJhbmQsCiAJCQkJCQkJCSAgICAgIG5fc3NpZHMpOwogCX0KIH0KQEAgLTEwOTgsNiArMTEwNywxMiBAQAogCQlyZXR1cm4gaXdsX3VtYWNfc2Nhbl9zdG9wKG12bSwgSVdMX1VNQUNfU0NBTl9VSURfU0NIRURfU0NBTiwKIAkJCQkJICBub3RpZnkpOwogCisJaWYgKG12bS0+c2Nhbl9zdGF0dXMgPT0gSVdMX01WTV9TQ0FOX05PTkUpCisJCXJldHVybiAwOworCisJaWYgKGl3bF9tdm1faXNfcmFkaW9fa2lsbGVkKG12bSkpCisJCWdvdG8gb3V0OworCiAJaWYgKG12bS0+c2Nhbl9zdGF0dXMgIT0gSVdMX01WTV9TQ0FOX1NDSEVEICYmCiAJICAgICghKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfTE1BQ19TQ0FOKSB8fAogCSAgICAgbXZtLT5zY2FuX3N0YXR1cyAhPSBJV0xfTVZNX1NDQU5fT1MpKSB7CkBAIC0xMTM0LDYgKzExNDksNyBAQAogCWlmIChtdm0tPnNjYW5fc3RhdHVzID09IElXTF9NVk1fU0NBTl9PUykKIAkJaXdsX212bV91bnJlZihtdm0sIElXTF9NVk1fUkVGX1NDQU4pOwogCitvdXQ6CiAJbXZtLT5zY2FuX3N0YXR1cyA9IElXTF9NVk1fU0NBTl9OT05FOwogCiAJaWYgKG5vdGlmeSkgewpAQCAtMTI5MCwxOCArMTMwNiw2IEBACiAJY21kLT5zY2FuX3ByaW8gPSBjcHVfdG9fbGUzMihJV0xfU0NBTl9QUklPUklUWV9ISUdIKTsKIAljbWQtPml0ZXJfbnVtID0gY3B1X3RvX2xlMzIoMSk7CiAKLQlpZiAobXZtLT5mdy0+dWNvZGVfY2FwYS5mbGFncyAmIElXTF9VQ09ERV9UTFZfRkxBR1NfRUJTX1NVUFBPUlQgJiYKLQkgICAgbXZtLT5sYXN0X2Vic19zdWNjZXNzZnVsKSB7Ci0JCWNtZC0+Y2hhbm5lbF9vcHRbMF0uZmxhZ3MgPQotCQkJY3B1X3RvX2xlMTYoSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCUyB8Ci0JCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19FQlNfQUNDVVJBVEUgfAotCQkJCSAgICBJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfQ0FDSEVfQUREKTsKLQkJY21kLT5jaGFubmVsX29wdFsxXS5mbGFncyA9Ci0JCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKLQkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8Ci0JCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOwotCX0KLQogCWlmIChpd2xfbXZtX3JybV9zY2FuX25lZWRlZChtdm0pKQogCQljbWQtPnNjYW5fZmxhZ3MgfD0KIAkJCWNwdV90b19sZTMyKElXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdTX1JSTV9FTkFCTEVEKTsKQEAgLTEzNzYsNiArMTM4MCwyMiBAQAogCWNtZC0+c2NoZWR1bGVbMV0uaXRlcmF0aW9ucyA9IDA7CiAJY21kLT5zY2hlZHVsZVsxXS5mdWxsX3NjYW5fbXVsID0gMDsKIAorCWlmIChtdm0tPmZ3LT51Y29kZV9jYXBhLmFwaVswXSAmIElXTF9VQ09ERV9UTFZfQVBJX1NJTkdMRV9TQ0FOX0VCUyAmJgorCSAgICBtdm0tPmxhc3RfZWJzX3N1Y2Nlc3NmdWwpIHsKKwkJY21kLT5jaGFubmVsX29wdFswXS5mbGFncyA9CisJCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOworCQljbWQtPmNoYW5uZWxfb3B0WzBdLm5vbl9lYnNfcmF0aW8gPQorCQkJY3B1X3RvX2xlMTYoSVdMX0RFTlNFX0VCU19TQ0FOX1JBVElPKTsKKwkJY21kLT5jaGFubmVsX29wdFsxXS5mbGFncyA9CisJCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOworCQljbWQtPmNoYW5uZWxfb3B0WzFdLm5vbl9lYnNfcmF0aW8gPQorCQkJY3B1X3RvX2xlMTYoSVdMX1NQQVJTRV9FQlNfU0NBTl9SQVRJTyk7CisJfQorCiAJZm9yIChpID0gMTsgaSA8PSByZXEtPnJlcS5uX3NzaWRzOyBpKyspCiAJCXNzaWRfYml0bWFwIHw9IEJJVChpKTsKIApAQCAtMTQ0OCw2ICsxNDY4LDggQEAKIAogCWlmIChpd2xfbXZtX3NjYW5fcGFzc19hbGwobXZtLCByZXEpKQogCQlmbGFncyB8PSBJV0xfTVZNX0xNQUNfU0NBTl9GTEFHX1BBU1NfQUxMOworCWVsc2UKKwkJZmxhZ3MgfD0gSVdMX01WTV9MTUFDX1NDQU5fRkxBR19NQVRDSDsKIAogCWlmIChyZXEtPm5fc3NpZHMgPT0gMSAmJiByZXEtPnNzaWRzWzBdLnNzaWRfbGVuICE9IDApCiAJCWZsYWdzIHw9IElXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdfUFJFX0NPTk5FQ1RJT047CkBAIC0xNDc0LDYgKzE0OTYsMjIgQEAKIAljbWQtPnNjaGVkdWxlWzFdLml0ZXJhdGlvbnMgPSAweGZmOwogCWNtZC0+c2NoZWR1bGVbMV0uZnVsbF9zY2FuX211bCA9IElXTF9GVUxMX1NDQU5fTVVMVElQTElFUjsKIAorCWlmIChtdm0tPmZ3LT51Y29kZV9jYXBhLmZsYWdzICYgSVdMX1VDT0RFX1RMVl9GTEFHU19FQlNfU1VQUE9SVCAmJgorCSAgICBtdm0tPmxhc3RfZWJzX3N1Y2Nlc3NmdWwpIHsKKwkJY21kLT5jaGFubmVsX29wdFswXS5mbGFncyA9CisJCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOworCQljbWQtPmNoYW5uZWxfb3B0WzBdLm5vbl9lYnNfcmF0aW8gPQorCQkJY3B1X3RvX2xlMTYoSVdMX0RFTlNFX0VCU19TQ0FOX1JBVElPKTsKKwkJY21kLT5jaGFubmVsX29wdFsxXS5mbGFncyA9CisJCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOworCQljbWQtPmNoYW5uZWxfb3B0WzFdLm5vbl9lYnNfcmF0aW8gPQorCQkJY3B1X3RvX2xlMTYoSVdMX1NQQVJTRV9FQlNfU0NBTl9SQVRJTyk7CisJfQorCiAJaXdsX212bV9sbWFjX3NjYW5fY2ZnX2NoYW5uZWxzKG12bSwgcmVxLT5jaGFubmVscywgcmVxLT5uX2NoYW5uZWxzLAogCQkJCSAgICAgICBzc2lkX2JpdG1hcCwgY21kKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3R4LmMKaW5kZXggNGYxNWQ5ZC4uYzU5ZDA3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS90eC5jCkBAIC05MCw4ICs5MCw2IEBACiAKIAlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX1RTRjsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfYmFja19yZXEoZmMpKQotCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX0FDSyB8IFRYX0NNRF9GTEdfQkFSOwogCiAJaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSkKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19NT1JFX0ZSQUc7CkBAIC0xMDAsNiArOTgsMTUgQEAKIAkJdTggKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXR4X2NtZC0+dGlkX3RzcGVjID0gcWNbMF0gJiAweGY7CiAJCXR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1NFUV9DVEw7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYmFja19yZXEoZmMpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfYmFyICpiYXIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJdTE2IGNvbnRyb2wgPSBsZTE2X3RvX2NwdShiYXItPmNvbnRyb2wpOworCisJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQUNLIHwgVFhfQ01EX0ZMR19CQVI7CisJCXR4X2NtZC0+dGlkX3RzcGVjID0gKGNvbnRyb2wgJgorCQkJCSAgICAgSUVFRTgwMjExX0JBUl9DVFJMX1RJRF9JTkZPX01BU0spID4+CisJCQlJRUVFODAyMTFfQkFSX0NUUkxfVElEX0lORk9fU0hJRlQ7CisJCVdBUk5fT05fT05DRSh0eF9jbWQtPnRpZF90c3BlYyA+PSBJV0xfTUFYX1RJRF9DT1VOVCk7CiAJfSBlbHNlIHsKIAkJdHhfY21kLT50aWRfdHNwZWMgPSBJV0xfVElEX05PTl9RT1M7CiAJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkKQEAgLTEwOCw4ICsxMTUsMTIgQEAKIAkJCXR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1NFUV9DVEw7CiAJfQogCi0JLyogdGlkX3RzcGVjIHdpbGwgZGVmYXVsdCB0byAwID0gQkUgd2hlbiBRT1MgaXNuJ3QgZW5hYmxlZCAqLwotCWFjID0gdGlkX3RvX21hYzgwMjExX2FjW3R4X2NtZC0+dGlkX3RzcGVjXTsKKwkvKiBEZWZhdWx0IHRvIDAgKEJFKSB3aGVuIHRpZF9zcGVjIGlzIHNldCB0byBJV0xfVElEX05PTl9RT1MgKi8KKwlpZiAodHhfY21kLT50aWRfdHNwZWMgPCBJV0xfTUFYX1RJRF9DT1VOVCkKKwkJYWMgPSB0aWRfdG9fbWFjODAyMTFfYWNbdHhfY21kLT50aWRfdHNwZWNdOworCWVsc2UKKwkJYWMgPSB0aWRfdG9fbWFjODAyMTFfYWNbMF07CisKIAl0eF9mbGFncyB8PSBpd2xfbXZtX2J0X2NvZXhfdHhfcHJpbyhtdm0sIGhkciwgaW5mbywgYWMpIDw8CiAJCQlUWF9DTURfRkxHX0JUX1BSSU9fUE9TOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS91dGlscy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdXRpbHMuYwppbmRleCBlNTZlNzdlLi45MTc0MzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS91dGlscy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3V0aWxzLmMKQEAgLTY2NSw3ICs2NjUsNyBAQAogCWlmIChudW1fb2ZfYW50KG12bS0+ZnctPnZhbGlkX3J4X2FudCkgPT0gMSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKCFtdm0tPmNmZy0+cnhfd2l0aF9zaXNvX2RpdmVyc2l0eSkKKwlpZiAobXZtLT5jZmctPnJ4X3dpdGhfc2lzb19kaXZlcnNpdHkpCiAJCXJldHVybiBmYWxzZTsKIAogCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYygKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS9kcnYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS9kcnYuYwppbmRleCAzZWU4ZTM4Li5kNWFhZGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL3BjaWUvZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL2Rydi5jCkBAIC0zNjcsNyArMzY3LDExIEBACiAKIC8qIDMxNjUgU2VyaWVzICovCiAJe0lXTF9QQ0lfREVWSUNFKDB4MzE2NSwgMHg0MDEwLCBpd2wzMTY1XzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgzMTY1LCAweDQwMTIsIGl3bDMxNjVfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDMxNjUsIDB4NDExMCwgaXdsMzE2NV8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MzE2NSwgMHg0MjEwLCBpd2wzMTY1XzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgzMTY1LCAweDQ0MTAsIGl3bDMxNjVfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDMxNjUsIDB4NDUxMCwgaXdsMzE2NV8yYWNfY2ZnKX0sCiAKIC8qIDcyNjUgU2VyaWVzICovCiAJe0lXTF9QQ0lfREVWSUNFKDB4MDk1QSwgMHg1MDEwLCBpd2w3MjY1XzJhY19jZmcpfSwKQEAgLTUyMyw4ICs1MjcsMTAgQEAKIAllbHNlIGlmIChjZmcgPT0gJml3bDcyNjVfbl9jZmcpCiAJCWNmZ183MjY1ZCA9ICZpd2w3MjY1ZF9uX2NmZzsKIAlpZiAoY2ZnXzcyNjVkICYmCi0JICAgIChpd2xfdHJhbnMtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV83MjY1RCkKKwkgICAgKGl3bF90cmFucy0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzcyNjVEKSB7CiAJCWNmZyA9IGNmZ183MjY1ZDsKKwkJaXdsX3RyYW5zLT5jZmcgPSBjZmdfNzI2NWQ7CisJfQogI2VuZGlmCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaXdsX3RyYW5zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90cmFucy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL3RyYW5zLmMKaW5kZXggNWQ3OWExZi4uNTIzZmUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL3RyYW5zLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL3RyYW5zLmMKQEAgLTYxNCw3ICs2MTQsNyBAQAogewogCXU4ICp2X2FkZHI7CiAJZG1hX2FkZHJfdCBwX2FkZHI7Ci0JdTMyIG9mZnNldCwgY2h1bmtfc3ogPSBzZWN0aW9uLT5sZW47CisJdTMyIG9mZnNldCwgY2h1bmtfc3ogPSBtaW5fdCh1MzIsIEZIX01FTV9UQl9NQVhfTEVOR1RILCBzZWN0aW9uLT5sZW4pOwogCWludCByZXQgPSAwOwogCiAJSVdMX0RFQlVHX0ZXKHRyYW5zLCAiWyVkXSB1Q29kZSBzZWN0aW9uIGJlaW5nIGxvYWRlZC4uLlxuIiwKQEAgLTEwMTIsMTYgKzEwMTIsMjEgQEAKIAkvKiBTdG9wIHRoZSBkZXZpY2UsIGFuZCBwdXQgaXQgaW4gbG93IHBvd2VyIHN0YXRlICovCiAJaXdsX3BjaWVfYXBtX3N0b3AodHJhbnMpOwogCi0JLyogVXBvbiBzdG9wLCB0aGUgQVBNIGlzc3VlcyBhbiBpbnRlcnJ1cHQgaWYgSFcgUkYga2lsbCBpcyBzZXQuCi0JICogQ2xlYW4gYWdhaW4gdGhlIGludGVycnVwdCBoZXJlCisJLyogc3RvcCBhbmQgcmVzZXQgdGhlIG9uLWJvYXJkIHByb2Nlc3NvciAqLworCWl3bF93cml0ZTMyKHRyYW5zLCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7CisJdWRlbGF5KDIwKTsKKworCS8qCisJICogVXBvbiBzdG9wLCB0aGUgQVBNIGlzc3VlcyBhbiBpbnRlcnJ1cHQgaWYgSFcgUkYga2lsbCBpcyBzZXQuCisJICogVGhpcyBpcyBhIGJ1ZyBpbiBjZXJ0YWluIHZlcmlvbnMgb2YgdGhlIGhhcmR3YXJlLgorCSAqIENlcnRhaW4gZGV2aWNlcyBhbHNvIGtlZXAgc2VuZGluZyBIVyBSRiBraWxsIGludGVycnVwdCBhbGwKKwkgKiB0aGUgdGltZSwgdW5sZXNzIHRoZSBpbnRlcnJ1cHQgaXMgQUNLZWQgZXZlbiBpZiB0aGUgaW50ZXJydXB0CisJICogc2hvdWxkIGJlIG1hc2tlZC4gUmUtQUNLIGFsbCB0aGUgaW50ZXJydXB0cyBoZXJlLgogCSAqLwogCXNwaW5fbG9jaygmdHJhbnNfcGNpZS0+aXJxX2xvY2spOwogCWl3bF9kaXNhYmxlX2ludGVycnVwdHModHJhbnMpOwogCXNwaW5fdW5sb2NrKCZ0cmFuc19wY2llLT5pcnFfbG9jayk7CiAKLQkvKiBzdG9wIGFuZCByZXNldCB0aGUgb24tYm9hcmQgcHJvY2Vzc29yICovCi0JaXdsX3dyaXRlMzIodHJhbnMsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKLQl1ZGVsYXkoMjApOwogCiAJLyogY2xlYXIgYWxsIHN0YXR1cyBiaXRzICovCiAJY2xlYXJfYml0KFNUQVRVU19TWU5DX0hDTURfQUNUSVZFLCAmdHJhbnMtPnN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwppbmRleCA4NDZhMmU2Li5jNzBlZmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKQEAgLTY2Niw3ICs2NjYsOCBAQAogfQogCiBzdGF0aWMgaW50IF9ydGxfcGNpX2luaXRfb25lX3J4ZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgdTggKmVudHJ5LCBpbnQgcnhyaW5nX2lkeCwgaW50IGRlc2NfaWR4KQorCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiwgdTggKmVudHJ5LAorCQkJCSAgICBpbnQgcnhyaW5nX2lkeCwgaW50IGRlc2NfaWR4KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwpAQCAtNjc0LDExICs2NzUsMTUgQEAKIAl1OCB0bXBfb25lID0gMTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCisJaWYgKGxpa2VseShuZXdfc2tiKSkgeworCQlza2IgPSBuZXdfc2tiOworCQlnb3RvIHJlbWFwOworCX0KIAlza2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIDA7Ci0JcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLnJ4X2J1ZltkZXNjX2lkeF0gPSBza2I7CiAKK3JlbWFwOgogCS8qIGp1c3Qgc2V0IHNrYi0+Y2IgdG8gbWFwcGluZyBhZGRyIGZvciBwY2lfdW5tYXBfc2luZ2xlIHVzZSAqLwogCSooKGRtYV9hZGRyX3QgKilza2ItPmNiKSA9CiAJCXBjaV9tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwgc2tiX3RhaWxfcG9pbnRlcihza2IpLApAQCAtNjg2LDYgKzY5MSw3IEBACiAJYnVmZmVyYWRkcmVzcyA9ICooKGRtYV9hZGRyX3QgKilza2ItPmNiKTsKIAlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHJ0bHBjaS0+cGRldiwgYnVmZmVyYWRkcmVzcykpCiAJCXJldHVybiAwOworCXJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5yeF9idWZbZGVzY19pZHhdID0gc2tiOwogCWlmIChydGxwcml2LT51c2VfbmV3X3RyeF9mbG93KSB7CiAJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYyhodywgKHU4ICopZW50cnksIGZhbHNlLAogCQkJCQkgICAgSFdfREVTQ19SWF9QUkVQQVJFLApAQCAtNzgxLDYgKzc4Nyw3IEBACiAJCS8qcnggcGt0ICovCiAJCXN0cnVjdCBza19idWZmICpza2IgPSBydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0ucnhfYnVmWwogCQkJCSAgICAgIHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5pZHhdOworCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKIAogCQlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgewogCQkJcnhfcmVtYWluZWRfY250ID0KQEAgLTgwNyw2ICs4MTQsMTMgQEAKIAkJcGNpX3VubWFwX3NpbmdsZShydGxwY2ktPnBkZXYsICooKGRtYV9hZGRyX3QgKilza2ItPmNiKSwKIAkJCQkgcnRscGNpLT5yeGJ1ZmZlcnNpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKKwkJLyogZ2V0IGEgbmV3IHNrYiAtIGlmIGZhaWwsIG9sZCBvbmUgd2lsbCBiZSByZXVzZWQgKi8KKwkJbmV3X3NrYiA9IGRldl9hbGxvY19za2IocnRscGNpLT5yeGJ1ZmZlcnNpemUpOworCQlpZiAodW5saWtlbHkoIW5ld19za2IpKSB7CisJCQlwcl9lcnIoIkFsbG9jYXRpb24gb2YgbmV3IHNrYiBmYWlsZWQgaW4gJXNcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJZ290byBub19uZXc7CisJCX0KIAkJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpIHsKIAkJCWJ1ZmZlcl9kZXNjID0KIAkJCSAgJnJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5idWZmZXJfZGVzYwpAQCAtOTExLDE0ICs5MjUsMTYgQEAKIAkJCXNjaGVkdWxlX3dvcmsoJnJ0bHByaXYtPndvcmtzLmxwc19jaGFuZ2Vfd29yayk7CiAJCX0KIGVuZDoKKwkJc2tiID0gbmV3X3NrYjsKK25vX25ldzoKIAkJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpIHsKLQkJCV9ydGxfcGNpX2luaXRfb25lX3J4ZGVzYyhodywgKHU4ICopYnVmZmVyX2Rlc2MsCisJCQlfcnRsX3BjaV9pbml0X29uZV9yeGRlc2MoaHcsIHNrYiwgKHU4ICopYnVmZmVyX2Rlc2MsCiAJCQkJCQkgcnhyaW5nX2lkeCwKLQkJCQkJICAgICAgIHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5pZHgpOwotCQl9IGVsc2UgewotCQkJX3J0bF9wY2lfaW5pdF9vbmVfcnhkZXNjKGh3LCAodTggKilwZGVzYywgcnhyaW5nX2lkeCwKIAkJCQkJCSBydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uaWR4KTsKLQorCQl9IGVsc2UgeworCQkJX3J0bF9wY2lfaW5pdF9vbmVfcnhkZXNjKGh3LCBza2IsICh1OCAqKXBkZXNjLAorCQkJCQkJIHJ4cmluZ19pZHgsCisJCQkJCQkgcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmlkeCk7CiAJCQlpZiAocnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmlkeCA9PQogCQkJICAgIHJ0bHBjaS0+cnhyaW5nY291bnQgLSAxKQogCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYyhodywgKHU4ICopcGRlc2MsCkBAIC0xMzA3LDcgKzEzMjMsNyBAQAogCQlydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uaWR4ID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IHJ0bHBjaS0+cnhyaW5nY291bnQ7IGkrKykgewogCQkJZW50cnkgPSAmcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmJ1ZmZlcl9kZXNjW2ldOwotCQkJaWYgKCFfcnRsX3BjaV9pbml0X29uZV9yeGRlc2MoaHcsICh1OCAqKWVudHJ5LAorCQkJaWYgKCFfcnRsX3BjaV9pbml0X29uZV9yeGRlc2MoaHcsIE5VTEwsICh1OCAqKWVudHJ5LAogCQkJCQkJICAgICAgcnhyaW5nX2lkeCwgaSkpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTEzMzIsNyArMTM0OCw3IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IHJ0bHBjaS0+cnhyaW5nY291bnQ7IGkrKykgewogCQkJZW50cnkgPSAmcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmRlc2NbaV07Ci0JCQlpZiAoIV9ydGxfcGNpX2luaXRfb25lX3J4ZGVzYyhodywgKHU4ICopZW50cnksCisJCQlpZiAoIV9ydGxfcGNpX2luaXRfb25lX3J4ZGVzYyhodywgTlVMTCwgKHU4ICopZW50cnksCiAJCQkJCQkgICAgICByeHJpbmdfaWR4LCBpKSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay94ZW5idXMuYwppbmRleCBlZmJhZjJhLi43OTQyMDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay94ZW5idXMuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay94ZW5idXMuYwpAQCAtNzM3LDYgKzczNyw3IEBACiAJCX0KIAogCQlxdWV1ZS0+cmVtYWluaW5nX2NyZWRpdCA9IGNyZWRpdF9ieXRlczsKKwkJcXVldWUtPmNyZWRpdF91c2VjID0gY3JlZGl0X3VzZWM7CiAKIAkJZXJyID0gY29ubmVjdF9yaW5ncyhiZSwgcXVldWUpOwogCQlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCmluZGV4IDIyYmNiNGUuLmQ4YzEwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCisrKyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCkBAIC04OCwxMCArODgsOCBAQAogI2RlZmluZSBJUlFfTkFNRV9TSVpFIChRVUVVRV9OQU1FX1NJWkUgKyAzKQogCiBzdHJ1Y3QgbmV0ZnJvbnRfc3RhdHMgewotCXU2NAkJCXJ4X3BhY2tldHM7Ci0JdTY0CQkJdHhfcGFja2V0czsKLQl1NjQJCQlyeF9ieXRlczsKLQl1NjQJCQl0eF9ieXRlczsKKwl1NjQJCQlwYWNrZXRzOworCXU2NAkJCWJ5dGVzOwogCXN0cnVjdCB1NjRfc3RhdHNfc3luYwlzeW5jcDsKIH07CiAKQEAgLTE2MCw3ICsxNTgsOCBAQAogCXN0cnVjdCBuZXRmcm9udF9xdWV1ZSAqcXVldWVzOwogCiAJLyogU3RhdGlzdGljcyAqLwotCXN0cnVjdCBuZXRmcm9udF9zdGF0cyBfX3BlcmNwdSAqc3RhdHM7CisJc3RydWN0IG5ldGZyb250X3N0YXRzIF9fcGVyY3B1ICpyeF9zdGF0czsKKwlzdHJ1Y3QgbmV0ZnJvbnRfc3RhdHMgX19wZXJjcHUgKnR4X3N0YXRzOwogCiAJYXRvbWljX3QgcnhfZ3NvX2NoZWNrc3VtX2ZpeHVwOwogfTsKQEAgLTU2NSw3ICs1NjQsNyBAQAogewogCXVuc2lnbmVkIHNob3J0IGlkOwogCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldGZyb250X3N0YXRzICpzdGF0cyA9IHRoaXNfY3B1X3B0cihucC0+c3RhdHMpOworCXN0cnVjdCBuZXRmcm9udF9zdGF0cyAqdHhfc3RhdHMgPSB0aGlzX2NwdV9wdHIobnAtPnR4X3N0YXRzKTsKIAlzdHJ1Y3QgeGVuX25ldGlmX3R4X3JlcXVlc3QgKnR4OwogCWNoYXIgKmRhdGEgPSBza2ItPmRhdGE7CiAJUklOR19JRFggaTsKQEAgLTY3MiwxMCArNjcxLDEwIEBACiAJaWYgKG5vdGlmeSkKIAkJbm90aWZ5X3JlbW90ZV92aWFfaXJxKHF1ZXVlLT50eF9pcnEpOwogCi0JdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc3RhdHMtPnN5bmNwKTsKLQlzdGF0cy0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0Jc3RhdHMtPnR4X3BhY2tldHMrKzsKLQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc3RhdHMtPnN5bmNwKTsKKwl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZ0eF9zdGF0cy0+c3luY3ApOworCXR4X3N0YXRzLT5ieXRlcyArPSBza2ItPmxlbjsKKwl0eF9zdGF0cy0+cGFja2V0cysrOworCXU2NF9zdGF0c191cGRhdGVfZW5kKCZ0eF9zdGF0cy0+c3luY3ApOwogCiAJLyogTm90ZTogSXQgaXMgbm90IHNhZmUgdG8gYWNjZXNzIHNrYiBhZnRlciB4ZW5uZXRfdHhfYnVmX2djKCkhICovCiAJeGVubmV0X3R4X2J1Zl9nYyhxdWV1ZSk7CkBAIC05MzEsNyArOTMwLDcgQEAKIHN0YXRpYyBpbnQgaGFuZGxlX2luY29taW5nX3F1ZXVlKHN0cnVjdCBuZXRmcm9udF9xdWV1ZSAqcXVldWUsCiAJCQkJIHN0cnVjdCBza19idWZmX2hlYWQgKnJ4cSkKIHsKLQlzdHJ1Y3QgbmV0ZnJvbnRfc3RhdHMgKnN0YXRzID0gdGhpc19jcHVfcHRyKHF1ZXVlLT5pbmZvLT5zdGF0cyk7CisJc3RydWN0IG5ldGZyb250X3N0YXRzICpyeF9zdGF0cyA9IHRoaXNfY3B1X3B0cihxdWV1ZS0+aW5mby0+cnhfc3RhdHMpOwogCWludCBwYWNrZXRzX2Ryb3BwZWQgPSAwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTk1MiwxMCArOTUxLDEwIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnN0YXRzLT5zeW5jcCk7Ci0JCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0JCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnN0YXRzLT5zeW5jcCk7CisJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnJ4X3N0YXRzLT5zeW5jcCk7CisJCXJ4X3N0YXRzLT5wYWNrZXRzKys7CisJCXJ4X3N0YXRzLT5ieXRlcyArPSBza2ItPmxlbjsKKwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnJ4X3N0YXRzLT5zeW5jcCk7CiAKIAkJLyogUGFzcyBpdCB1cC4gKi8KIAkJbmFwaV9ncm9fcmVjZWl2ZSgmcXVldWUtPm5hcGksIHNrYik7CkBAIC0xMDc5LDE4ICsxMDc4LDIyIEBACiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IG5ldGZyb250X3N0YXRzICpzdGF0cyA9IHBlcl9jcHVfcHRyKG5wLT5zdGF0cywgY3B1KTsKKwkJc3RydWN0IG5ldGZyb250X3N0YXRzICpyeF9zdGF0cyA9IHBlcl9jcHVfcHRyKG5wLT5yeF9zdGF0cywgY3B1KTsKKwkJc3RydWN0IG5ldGZyb250X3N0YXRzICp0eF9zdGF0cyA9IHBlcl9jcHVfcHRyKG5wLT50eF9zdGF0cywgY3B1KTsKIAkJdTY0IHJ4X3BhY2tldHMsIHJ4X2J5dGVzLCB0eF9wYWNrZXRzLCB0eF9ieXRlczsKIAkJdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJCWRvIHsKLQkJCXN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luX2lycSgmc3RhdHMtPnN5bmNwKTsKKwkJCXN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luX2lycSgmdHhfc3RhdHMtPnN5bmNwKTsKKwkJCXR4X3BhY2tldHMgPSB0eF9zdGF0cy0+cGFja2V0czsKKwkJCXR4X2J5dGVzID0gdHhfc3RhdHMtPmJ5dGVzOworCQl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnlfaXJxKCZ0eF9zdGF0cy0+c3luY3AsIHN0YXJ0KSk7CiAKLQkJCXJ4X3BhY2tldHMgPSBzdGF0cy0+cnhfcGFja2V0czsKLQkJCXR4X3BhY2tldHMgPSBzdGF0cy0+dHhfcGFja2V0czsKLQkJCXJ4X2J5dGVzID0gc3RhdHMtPnJ4X2J5dGVzOwotCQkJdHhfYnl0ZXMgPSBzdGF0cy0+dHhfYnl0ZXM7Ci0JCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeV9pcnEoJnN0YXRzLT5zeW5jcCwgc3RhcnQpKTsKKwkJZG8geworCQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5faXJxKCZyeF9zdGF0cy0+c3luY3ApOworCQkJcnhfcGFja2V0cyA9IHJ4X3N0YXRzLT5wYWNrZXRzOworCQkJcnhfYnl0ZXMgPSByeF9zdGF0cy0+Ynl0ZXM7CisJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeV9pcnEoJnJ4X3N0YXRzLT5zeW5jcCwgc3RhcnQpKTsKIAogCQl0b3QtPnJ4X3BhY2tldHMgKz0gcnhfcGFja2V0czsKIAkJdG90LT50eF9wYWNrZXRzICs9IHR4X3BhY2tldHM7CkBAIC0xMjc1LDYgKzEyNzgsMTUgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHZvaWQgeGVubmV0X2ZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG5ldGZyb250X2luZm8gKm5wID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWZyZWVfcGVyY3B1KG5wLT5yeF9zdGF0cyk7CisJZnJlZV9wZXJjcHUobnAtPnR4X3N0YXRzKTsKKwlmcmVlX25ldGRldihuZXRkZXYpOworfQorCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnhlbm5ldF9jcmVhdGVfZGV2KHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCiB7CiAJaW50IGVycjsKQEAgLTEyOTUsOCArMTMwNywxMSBAQAogCW5wLT5xdWV1ZXMgPSBOVUxMOwogCiAJZXJyID0gLUVOT01FTTsKLQlucC0+c3RhdHMgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgbmV0ZnJvbnRfc3RhdHMpOwotCWlmIChucC0+c3RhdHMgPT0gTlVMTCkKKwlucC0+cnhfc3RhdHMgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgbmV0ZnJvbnRfc3RhdHMpOworCWlmIChucC0+cnhfc3RhdHMgPT0gTlVMTCkKKwkJZ290byBleGl0OworCW5wLT50eF9zdGF0cyA9IG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKHN0cnVjdCBuZXRmcm9udF9zdGF0cyk7CisJaWYgKG5wLT50eF9zdGF0cyA9PSBOVUxMKQogCQlnb3RvIGV4aXQ7CiAKIAluZXRkZXYtPm5ldGRldl9vcHMJPSAmeGVubmV0X25ldGRldl9vcHM7CkBAIC0xMzI3LDcgKzEzNDIsNyBAQAogCXJldHVybiBuZXRkZXY7CiAKICBleGl0OgotCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJeGVubmV0X2ZyZWVfbmV0ZGV2KG5ldGRldik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIApAQCAtMTM2OSw3ICsxMzg0LDcgQEAKIAlyZXR1cm4gMDsKIAogIGZhaWw6Ci0JZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwl4ZW5uZXRfZnJlZV9uZXRkZXYobmV0ZGV2KTsKIAlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjE4OSw5ICsyMjA0LDcgQEAKIAkJaW5mby0+cXVldWVzID0gTlVMTDsKIAl9CiAKLQlmcmVlX3BlcmNwdShpbmZvLT5zdGF0cyk7Ci0KLQlmcmVlX25ldGRldihpbmZvLT5uZXRkZXYpOworCXhlbm5ldF9mcmVlX25ldGRldihpbmZvLT5uZXRkZXYpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL292ZXJsYXkuYyBiL2RyaXZlcnMvb2Yvb3ZlcmxheS5jCmluZGV4IGVhNjNmYmQyLi4zNTJiNGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL292ZXJsYXkuYworKysgYi9kcml2ZXJzL29mL292ZXJsYXkuYwpAQCAtMTE0LDE3ICsxMTQsNiBAQAogCQlyZXQgPSBvZl9vdmVybGF5X2FwcGx5X29uZShvdiwgdGNoaWxkLCBjaGlsZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCi0JCS8qIFRoZSBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IGNvcGllZCwgbm93IGRvIHRoZSBjaGlsZCBub2RlcyAqLwotCQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGNoaWxkLCBncmFuZGNoaWxkKSB7Ci0JCQlyZXQgPSBvZl9vdmVybGF5X2FwcGx5X3NpbmdsZV9kZXZpY2Vfbm9kZShvdiwgdGNoaWxkLCBncmFuZGNoaWxkKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gYXBwbHkgc2luZ2xlIG5vZGUgQCVzLyVzXG4iLAotCQkJCQlfX2Z1bmNfXywgdGNoaWxkLT5mdWxsX25hbWUsCi0JCQkJCWdyYW5kY2hpbGQtPm5hbWUpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0KIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wbGF0Zm9ybS5jIGIvZHJpdmVycy9vZi9wbGF0Zm9ybS5jCmluZGV4IDViMzNjNmEuLmIwZDUwZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL29mL3BsYXRmb3JtLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCQlzaXplID0gZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKIAl9IGVsc2UgewogCQlvZmZzZXQgPSBQRk5fRE9XTihwYWRkciAtIGRtYV9hZGRyKTsKLQkJZGV2X2RiZyhkZXYsICJkbWFfcGZuX29mZnNldCglIzA4bHgpXG4iLCBkZXYtPmRtYV9wZm5fb2Zmc2V0KTsKKwkJZGV2X2RiZyhkZXYsICJkbWFfcGZuX29mZnNldCglIzA4bHgpXG4iLCBvZmZzZXQpOwogCX0KIAlkZXYtPmRtYV9wZm5fb2Zmc2V0ID0gb2Zmc2V0OwogCkBAIC01NjYsNiArNTY2LDEwIEBACiAJCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKHJkLT5kbi0+cGFyZW50LCBPRl9QT1BVTEFURURfQlVTKSkKIAkJCXJldHVybiBOT1RJRllfT0s7CS8qIG5vdCBmb3IgdXMgKi8KIAorCQkvKiBhbHJlYWR5IHBvcHVsYXRlZD8gKGRyaXZlciB1c2luZyBvZl9wb3B1bGF0ZSBtYW51YWxseSkgKi8KKwkJaWYgKG9mX25vZGVfY2hlY2tfZmxhZyhyZC0+ZG4sIE9GX1BPUFVMQVRFRCkpCisJCQlyZXR1cm4gTk9USUZZX09LOworCiAJCS8qIHBkZXZfcGFyZW50IG1heSBiZSBOVUxMIHdoZW4gbm8gYnVzIHBsYXRmb3JtIGRldmljZSAqLwogCQlwZGV2X3BhcmVudCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocmQtPmRuLT5wYXJlbnQpOwogCQlwZGV2ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShyZC0+ZG4sIE5VTEwsCkBAIC01ODEsNiArNTg1LDExIEBACiAJCWJyZWFrOwogCiAJY2FzZSBPRl9SRUNPTkZJR19DSEFOR0VfUkVNT1ZFOgorCisJCS8qIGFscmVhZHkgZGVwb3B1bGF0ZWQ/ICovCisJCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKHJkLT5kbiwgT0ZfUE9QVUxBVEVEKSkKKwkJCXJldHVybiBOT1RJRllfT0s7CisKIAkJLyogZmluZCBvdXIgZGV2aWNlIGJ5IG5vZGUgKi8KIAkJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocmQtPmRuKTsKIAkJaWYgKHBkZXYgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvdW5pdHRlc3QtZGF0YS90ZXN0cy1vdmVybGF5LmR0c2kgYi9kcml2ZXJzL29mL3VuaXR0ZXN0LWRhdGEvdGVzdHMtb3ZlcmxheS5kdHNpCmluZGV4IDc1OTc2ZGEuLmEyYjY4N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvdW5pdHRlc3QtZGF0YS90ZXN0cy1vdmVybGF5LmR0c2kKKysrIGIvZHJpdmVycy9vZi91bml0dGVzdC1kYXRhL3Rlc3RzLW92ZXJsYXkuZHRzaQpAQCAtMTc2LDUgKzE3Niw2MCBAQAogCQkJfTsKIAkJfTsKIAorCQlvdmVybGF5MTAgeworCQkJZnJhZ21lbnRAMCB7CisJCQkJdGFyZ2V0LXBhdGggPSAiL3Rlc3RjYXNlLWRhdGEvb3ZlcmxheS1ub2RlL3Rlc3QtYnVzIjsKKwkJCQlfX292ZXJsYXlfXyB7CisKKwkJCQkJLyogc3VwcHJlc3MgRFRDIHdhcm5pbmcgKi8KKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJCXRlc3Qtc2VsZnRlc3QxMCB7CisJCQkJCQljb21wYXRpYmxlID0gInNlbGZ0ZXN0IjsKKwkJCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCQkJCXJlZyA9IDwxMD47CisKKwkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQkJCXRlc3Qtc2VsZnRlc3QxMDEgeworCQkJCQkJCWNvbXBhdGlibGUgPSAic2VsZnRlc3QiOworCQkJCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCQkJCQlyZWcgPSA8MT47CisJCQkJCQl9OworCisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJb3ZlcmxheTExIHsKKwkJCWZyYWdtZW50QDAgeworCQkJCXRhcmdldC1wYXRoID0gIi90ZXN0Y2FzZS1kYXRhL292ZXJsYXktbm9kZS90ZXN0LWJ1cyI7CisJCQkJX19vdmVybGF5X18geworCisJCQkJCS8qIHN1cHByZXNzIERUQyB3YXJuaW5nICovCisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCQl0ZXN0LXNlbGZ0ZXN0MTEgeworCQkJCQkJY29tcGF0aWJsZSA9ICJzZWxmdGVzdCI7CisJCQkJCQlzdGF0dXMgPSAib2theSI7CisJCQkJCQlyZWcgPSA8MTE+OworCisJCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJCQl0ZXN0LXNlbGZ0ZXN0MTExIHsKKwkJCQkJCQljb21wYXRpYmxlID0gInNlbGZ0ZXN0IjsKKwkJCQkJCQlzdGF0dXMgPSAib2theSI7CisJCQkJCQkJcmVnID0gPDE+OworCQkJCQkJfTsKKworCQkJCQl9OworCQkJCX07CisJCQl9OworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi91bml0dGVzdC5jIGIvZHJpdmVycy9vZi91bml0dGVzdC5jCmluZGV4IDg0NDgzOGUuLjQxYTRhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvdW5pdHRlc3QuYworKysgYi9kcml2ZXJzL29mL3VuaXR0ZXN0LmMKQEAgLTk3OCw2ICs5NzgsOSBAQAogCX0KIAogCWRldl9kYmcoZGV2LCAiJXMgZm9yIG5vZGUgQCVzXG4iLCBfX2Z1bmNfXywgbnAtPmZ1bGxfbmFtZSk7CisKKwlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShucCwgTlVMTCwgTlVMTCwgJnBkZXYtPmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM4NSw2ICsxMzg4LDM5IEBACiAJc2VsZnRlc3QoMSwgIm92ZXJsYXkgdGVzdCAlZCBwYXNzZWRcbiIsIDgpOwogfQogCisvKiB0ZXN0IGluc2VydGlvbiBvZiBhIGJ1cyB3aXRoIHBhcmVudCBkZXZpY2VzICovCitzdGF0aWMgdm9pZCBvZl9zZWxmdGVzdF9vdmVybGF5XzEwKHZvaWQpCit7CisJaW50IHJldDsKKwljaGFyICpjaGlsZF9wYXRoOworCisJLyogZGV2aWNlIHNob3VsZCBkaXNhYmxlICovCisJcmV0ID0gb2Zfc2VsZnRlc3RfYXBwbHlfb3ZlcmxheV9jaGVjaygxMCwgMTAsIDAsIDEpOworCWlmIChzZWxmdGVzdChyZXQgPT0gMCwgIm92ZXJsYXkgdGVzdCAlZCBmYWlsZWQ7IG92ZXJsYXkgYXBwbGljYXRpb25cbiIsIDEwKSkKKwkJcmV0dXJuOworCisJY2hpbGRfcGF0aCA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMvdGVzdC1zZWxmdGVzdDEwMSIsCisJCQlzZWxmdGVzdF9wYXRoKDEwKSk7CisJaWYgKHNlbGZ0ZXN0KGNoaWxkX3BhdGgsICJvdmVybGF5IHRlc3QgJWQgZmFpbGVkOyBrYXNwcmludGZcbiIsIDEwKSkKKwkJcmV0dXJuOworCisJcmV0ID0gb2ZfcGF0aF9wbGF0Zm9ybV9kZXZpY2VfZXhpc3RzKGNoaWxkX3BhdGgpOworCWtmcmVlKGNoaWxkX3BhdGgpOworCWlmIChzZWxmdGVzdChyZXQsICJvdmVybGF5IHRlc3QgJWQgZmFpbGVkOyBubyBjaGlsZCBkZXZpY2VcbiIsIDEwKSkKKwkJcmV0dXJuOworfQorCisvKiB0ZXN0IGluc2VydGlvbiBvZiBhIGJ1cyB3aXRoIHBhcmVudCBkZXZpY2VzIChhbmQgcmV2ZXJ0KSAqLworc3RhdGljIHZvaWQgb2Zfc2VsZnRlc3Rfb3ZlcmxheV8xMSh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiBkZXZpY2Ugc2hvdWxkIGRpc2FibGUgKi8KKwlyZXQgPSBvZl9zZWxmdGVzdF9hcHBseV9yZXZlcnRfb3ZlcmxheV9jaGVjaygxMSwgMTEsIDAsIDEpOworCWlmIChzZWxmdGVzdChyZXQgPT0gMCwgIm92ZXJsYXkgdGVzdCAlZCBmYWlsZWQ7IG92ZXJsYXkgYXBwbGljYXRpb25cbiIsIDExKSkKKwkJcmV0dXJuOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgb2Zfc2VsZnRlc3Rfb3ZlcmxheSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqYnVzX25wID0gTlVMTDsKQEAgLTE0MzMsNiArMTQ2OSw5IEBACiAJb2Zfc2VsZnRlc3Rfb3ZlcmxheV82KCk7CiAJb2Zfc2VsZnRlc3Rfb3ZlcmxheV84KCk7CiAKKwlvZl9zZWxmdGVzdF9vdmVybGF5XzEwKCk7CisJb2Zfc2VsZnRlc3Rfb3ZlcmxheV8xMSgpOworCiBvdXQ6CiAJb2Zfbm9kZV9wdXQoYnVzX25wKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYyBiL2RyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYwppbmRleCAzN2U3MWZmLi5kY2ViOWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvbGJhX3BjaS5jCkBAIC02OTQsOSArNjk0LDggQEAKIAkJaW50IGk7CiAJCS8qIFBDSS1QQ0kgQnJpZGdlICovCiAJCXBjaV9yZWFkX2JyaWRnZV9iYXNlcyhidXMpOwotCQlmb3IgKGkgPSBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaSA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJCXBjaV9jbGFpbV9yZXNvdXJjZShidXMtPnNlbGYsIGkpOwotCQl9CisJCWZvciAoaSA9IFBDSV9CUklER0VfUkVTT1VSQ0VTOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykKKwkJCXBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoYnVzLT5zZWxmLCBpKTsKIAl9IGVsc2UgewogCQkvKiBIb3N0LVBDSSBCcmlkZ2UgKi8KIAkJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2J1cy5jIGIvZHJpdmVycy9wY2kvYnVzLmMKaW5kZXggNzNhZWY1MS4uOGZiMTYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvYnVzLmMKQEAgLTIyOCw2ICsyMjgsNDkgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19hbGxvY19yZXNvdXJjZSk7CiAKKy8qCisgKiBUaGUgQGlkeCByZXNvdXJjZSBvZiBAZGV2IHNob3VsZCBiZSBhIFBDSS1QQ0kgYnJpZGdlIHdpbmRvdy4gIElmIHRoaXMKKyAqIHJlc291cmNlIGZpdHMgaW5zaWRlIGEgd2luZG93IG9mIGFuIHVwc3RyZWFtIGJyaWRnZSwgZG8gbm90aGluZy4gIElmIGl0CisgKiBvdmVybGFwcyBhbiB1cHN0cmVhbSB3aW5kb3cgYnV0IGV4dGVuZHMgb3V0c2lkZSBpdCwgY2xpcCB0aGUgcmVzb3VyY2Ugc28KKyAqIGl0IGZpdHMgY29tcGxldGVseSBpbnNpZGUuCisgKi8KK2Jvb2wgcGNpX2J1c19jbGlwX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgpCit7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKKwlzdHJ1Y3QgcmVzb3VyY2Ugb3JpZ19yZXMgPSAqcmVzOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgaTsKKworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByLCBpKSB7CisJCXJlc291cmNlX3NpemVfdCBzdGFydCwgZW5kOworCisJCWlmICghcikKKwkJCWNvbnRpbnVlOworCisJCWlmIChyZXNvdXJjZV90eXBlKHJlcykgIT0gcmVzb3VyY2VfdHlwZShyKSkKKwkJCWNvbnRpbnVlOworCisJCXN0YXJ0ID0gbWF4KHItPnN0YXJ0LCByZXMtPnN0YXJ0KTsKKwkJZW5kID0gbWluKHItPmVuZCwgcmVzLT5lbmQpOworCisJCWlmIChzdGFydCA+IGVuZCkKKwkJCWNvbnRpbnVlOwkvKiBubyBvdmVybGFwICovCisKKwkJaWYgKHJlcy0+c3RhcnQgPT0gc3RhcnQgJiYgcmVzLT5lbmQgPT0gZW5kKQorCQkJcmV0dXJuIGZhbHNlOwkvKiBubyBjaGFuZ2UgKi8KKworCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7CisJCXJlcy0+ZW5kID0gZW5kOworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgIiVwUiBjbGlwcGVkIHRvICVwUlxuIiwKKwkJCQkgJm9yaWdfcmVzLCByZXMpOworCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogdm9pZCBfX3dlYWsgcGNpYmlvc19yZXNvdXJjZV9zdXJ2ZXlfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggY2FiMDVmMy4uZTlkNGZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTMyNzEsNyArMzI3MSw4IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKLQlpZiAocGNpX2lzX3Jvb3RfYnVzKGRldi0+YnVzKSB8fCBkZXYtPnN1Ym9yZGluYXRlIHx8ICFkZXYtPmJ1cy0+c2VsZikKKwlpZiAocGNpX2lzX3Jvb3RfYnVzKGRldi0+YnVzKSB8fCBkZXYtPnN1Ym9yZGluYXRlIHx8CisJICAgICFkZXYtPmJ1cy0+c2VsZiB8fCBkZXYtPmRldl9mbGFncyAmIFBDSV9ERVZfRkxBR1NfTk9fQlVTX1JFU0VUKQogCQlyZXR1cm4gLUVOT1RUWTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGRldiwgJmRldi0+YnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKQEAgLTMzMDUsNyArMzMwNiw4IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKLQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSB8fCAhZGV2LT5zbG90KQorCWlmIChkZXYtPnN1Ym9yZGluYXRlIHx8ICFkZXYtPnNsb3QgfHwKKwkgICAgZGV2LT5kZXZfZmxhZ3MgJiBQQ0lfREVWX0ZMQUdTX05PX0JVU19SRVNFVCkKIAkJcmV0dXJuIC1FTk9UVFk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXYsICZkZXYtPmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCkBAIC0zNTU3LDYgKzM1NTksMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV90cnlfcmVzZXRfZnVuY3Rpb24pOwogCisvKiBEbyBhbnkgZGV2aWNlcyBvbiBvciBiZWxvdyB0aGlzIGJ1cyBwcmV2ZW50IGEgYnVzIHJlc2V0PyAqLworc3RhdGljIGJvb2wgcGNpX2J1c19yZXNldGFibGUoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCWlmIChkZXYtPmRldl9mbGFncyAmIFBDSV9ERVZfRkxBR1NfTk9fQlVTX1JFU0VUIHx8CisJCSAgICAoZGV2LT5zdWJvcmRpbmF0ZSAmJiAhcGNpX2J1c19yZXNldGFibGUoZGV2LT5zdWJvcmRpbmF0ZSkpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCiAvKiBMb2NrIGRldmljZXMgZnJvbSB0aGUgdG9wIG9mIHRoZSB0cmVlIGRvd24gKi8KIHN0YXRpYyB2b2lkIHBjaV9idXNfbG9jayhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewpAQCAtMzYwNyw2ICszNjIzLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIERvIGFueSBkZXZpY2VzIG9uIG9yIGJlbG93IHRoaXMgc2xvdCBwcmV2ZW50IGEgYnVzIHJlc2V0PyAqLworc3RhdGljIGJvb2wgcGNpX3Nsb3RfcmVzZXRhYmxlKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZzbG90LT5idXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCWlmICghZGV2LT5zbG90IHx8IGRldi0+c2xvdCAhPSBzbG90KQorCQkJY29udGludWU7CisJCWlmIChkZXYtPmRldl9mbGFncyAmIFBDSV9ERVZfRkxBR1NfTk9fQlVTX1JFU0VUIHx8CisJCSAgICAoZGV2LT5zdWJvcmRpbmF0ZSAmJiAhcGNpX2J1c19yZXNldGFibGUoZGV2LT5zdWJvcmRpbmF0ZSkpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCiAvKiBMb2NrIGRldmljZXMgZnJvbSB0aGUgdG9wIG9mIHRoZSB0cmVlIGRvd24gKi8KIHN0YXRpYyB2b2lkIHBjaV9zbG90X2xvY2soc3RydWN0IHBjaV9zbG90ICpzbG90KQogewpAQCAtMzcyOCw3ICszNzYwLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlpZiAoIXNsb3QpCisJaWYgKCFzbG90IHx8ICFwY2lfc2xvdF9yZXNldGFibGUoc2xvdCkpCiAJCXJldHVybiAtRU5PVFRZOwogCiAJaWYgKCFwcm9iZSkKQEAgLTM4MjAsNyArMzg1Miw3IEBACiAKIHN0YXRpYyBpbnQgcGNpX2J1c19yZXNldChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgcHJvYmUpCiB7Ci0JaWYgKCFidXMtPnNlbGYpCisJaWYgKCFidXMtPnNlbGYgfHwgIXBjaV9idXNfcmVzZXRhYmxlKGJ1cykpCiAJCXJldHVybiAtRU5PVFRZOwogCiAJaWYgKHByb2JlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCA4YWZmMjlhLi5kNTQ2MzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMjA4LDYgKzIwOCw3IEBACiB2b2lkIF9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsCiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqcmVhbGxvY19oZWFkLAogCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmZhaWxfaGVhZCk7Citib29sIHBjaV9idXNfY2xpcF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KTsKIAogLyoqCiAgKiBwY2lfYXJpX2VuYWJsZWQgLSBxdWVyeSBBUkkgZm9yd2FyZGluZyBzdGF0dXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggZWQ2Zjg5Yi4uZTUyMzU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTMwMjgsNiArMzAyOCwyMCBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTUVMTEFOT1gsIFBDSV9BTllfSUQsCiAJCQkgcXVpcmtfYnJva2VuX2ludHhfbWFza2luZyk7CiAKK3N0YXRpYyB2b2lkIHF1aXJrX25vX2J1c19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWRldi0+ZGV2X2ZsYWdzIHw9IFBDSV9ERVZfRkxBR1NfTk9fQlVTX1JFU0VUOworfQorCisvKgorICogQXRoZXJvcyBBUjkzeHggY2hpcHMgZG8gbm90IGJlaGF2ZSBhZnRlciBhIGJ1cyByZXNldC4gIFRoZSBkZXZpY2Ugd2lsbAorICogdGhyb3cgYSBMaW5rIERvd24gZXJyb3Igb24gQUVSLWNhcGFibGUgc3lzdGVtcyBhbmQgcmVnYXJkbGVzcyBvZiBBRVIsCisgKiBjb25maWcgc3BhY2Ugb2YgdGhlIGRldmljZSBpcyBuZXZlciBhY2Nlc3NpYmxlIGFnYWluIGFuZCB0eXBpY2FsbHkKKyAqIGNhdXNlcyB0aGUgc3lzdGVtIHRvIGhhbmcgb3IgcmVzZXQgd2hlbiBhY2Nlc3MgaXMgYXR0ZW1wdGVkLgorICogaHR0cDovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1wY2kvbXNnMzQ3OTcuaHRtbAorICovCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLCAweDAwMzAsIHF1aXJrX25vX2J1c19yZXNldCk7CisKICNpZmRlZiBDT05GSUdfQUNQSQogLyoKICAqIEFwcGxlOiBTaHV0ZG93biBDYWN0dXMgUmlkZ2UgVGh1bmRlcmJvbHQgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKaW5kZXggMDQ4MjIzNS4uZTNlMTdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKQEAgLTUzMCw5ICs1MzAsOCBAQAogICAgY29uZmlnIHNwYWNlIHdyaXRlcywgc28gaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0IGFuIEkvTyB3aW5kb3cgb2YKICAgIHRoZSBicmlkZ2Ugd2lsbCBoYXZlIHNvbWUgdW5kZXNpcmFibGUgYWRkcmVzcyAoZS5nLiAwKSBhZnRlciB0aGUKICAgIGZpcnN0IHdyaXRlLiBEaXR0byA2NC1iaXQgcHJlZmV0Y2hhYmxlIE1NSU8uICAqLwotc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9pbyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9pbyhzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKQogewotCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKIAl1bnNpZ25lZCBsb25nIGlvX21hc2s7CkBAIC01NDUsNyArNTQ0LDcgQEAKIAkJaW9fbWFzayA9IFBDSV9JT18xS19SQU5HRV9NQVNLOwogCiAJLyogU2V0IHVwIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgUENJIEkvTyBzZWdtZW50IGZvciB0aGlzIGJ1cy4gKi8KLQlyZXMgPSBidXMtPnJlc291cmNlWzBdOworCXJlcyA9ICZicmlkZ2UtPnJlc291cmNlW1BDSV9CUklER0VfUkVTT1VSQ0VTICsgMF07CiAJcGNpYmlvc19yZXNvdXJjZV90b19idXMoYnJpZGdlLT5idXMsICZyZWdpb24sIHJlcyk7CiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgUENJX0lPX0JBU0UsICZsKTsKQEAgLTU2OCwxNSArNTY3LDE0IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9JT19CQVNFX1VQUEVSMTYsIGlvX3VwcGVyMTYpOwogfQogCi1zdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW8oc3RydWN0IHBjaV9idXMgKmJ1cykKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2VfbW1pbyhzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKQogewotCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKIAl1MzIgbDsKIAogCS8qIFNldCB1cCB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGhlIFBDSSBNZW1vcnkgc2VnbWVudCBmb3IgdGhpcyBidXMuICovCi0JcmVzID0gYnVzLT5yZXNvdXJjZVsxXTsKKwlyZXMgPSAmYnJpZGdlLT5yZXNvdXJjZVtQQ0lfQlJJREdFX1JFU09VUkNFUyArIDFdOwogCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKGJyaWRnZS0+YnVzLCAmcmVnaW9uLCByZXMpOwogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJbCA9IChyZWdpb24uc3RhcnQgPj4gMTYpICYgMHhmZmYwOwpAQCAtNTg4LDkgKzU4Niw4IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9NRU1PUllfQkFTRSwgbCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKHN0cnVjdCBwY2lfYnVzICpidXMpCitzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW9fcHJlZihzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKQogewotCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKIAl1MzIgbCwgYnUsIGx1OwpAQCAtNjAyLDcgKzU5OSw3IEBACiAKIAkvKiBTZXQgdXAgUFJFRiBiYXNlL2xpbWl0LiAqLwogCWJ1ID0gbHUgPSAwOwotCXJlcyA9IGJ1cy0+cmVzb3VyY2VbMl07CisJcmVzID0gJmJyaWRnZS0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMgKyAyXTsKIAlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhicmlkZ2UtPmJ1cywgJnJlZ2lvbiwgcmVzKTsKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpIHsKIAkJbCA9IChyZWdpb24uc3RhcnQgPj4gMTYpICYgMHhmZmYwOwpAQCAtNjMwLDEzICs2MjcsMTMgQEAKIAkJICZidXMtPmJ1c25fcmVzKTsKIAogCWlmICh0eXBlICYgSU9SRVNPVVJDRV9JTykKLQkJcGNpX3NldHVwX2JyaWRnZV9pbyhidXMpOworCQlwY2lfc2V0dXBfYnJpZGdlX2lvKGJyaWRnZSk7CiAKIAlpZiAodHlwZSAmIElPUkVTT1VSQ0VfTUVNKQotCQlwY2lfc2V0dXBfYnJpZGdlX21taW8oYnVzKTsKKwkJcGNpX3NldHVwX2JyaWRnZV9tbWlvKGJyaWRnZSk7CiAKIAlpZiAodHlwZSAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpCi0JCXBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKGJ1cyk7CisJCXBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKGJyaWRnZSk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYnJpZGdlLCBQQ0lfQlJJREdFX0NPTlRST0wsIGJ1cy0+YnJpZGdlX2N0bCk7CiB9CkBAIC02NDksNiArNjQ2LDQxIEBACiAJX19wY2lfc2V0dXBfYnJpZGdlKGJ1cywgdHlwZSk7CiB9CiAKKworaW50IHBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgaW50IGkpCit7CisJaWYgKGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFUyB8fCBpID4gUENJX0JSSURHRV9SRVNPVVJDRV9FTkQpCisJCXJldHVybiAwOworCisJaWYgKHBjaV9jbGFpbV9yZXNvdXJjZShicmlkZ2UsIGkpID09IDApCisJCXJldHVybiAwOwkvKiBjbGFpbWVkIHRoZSB3aW5kb3cgKi8KKworCWlmICgoYnJpZGdlLT5jbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXBjaV9idXNfY2xpcF9yZXNvdXJjZShicmlkZ2UsIGkpKQorCQlyZXR1cm4gLUVJTlZBTDsJLyogY2xpcHBpbmcgZGlkbid0IGNoYW5nZSBhbnl0aGluZyAqLworCisJc3dpdGNoIChpIC0gUENJX0JSSURHRV9SRVNPVVJDRVMpIHsKKwljYXNlIDA6CisJCXBjaV9zZXR1cF9icmlkZ2VfaW8oYnJpZGdlKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwY2lfc2V0dXBfYnJpZGdlX21taW8oYnJpZGdlKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwY2lfc2V0dXBfYnJpZGdlX21taW9fcHJlZihicmlkZ2UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGNpX2NsYWltX3Jlc291cmNlKGJyaWRnZSwgaSkgPT0gMCkKKwkJcmV0dXJuIDA7CS8qIGNsYWltZWQgYSBzbWFsbGVyIHdpbmRvdyAqLworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIC8qIENoZWNrIHdoZXRoZXIgdGhlIGJyaWRnZSBzdXBwb3J0cyBvcHRpb25hbCBJL08gYW5kCiAgICBwcmVmZXRjaGFibGUgbWVtb3J5IHJhbmdlcy4gSWYgbm90LCB0aGUgcmVzcGVjdGl2ZQogICAgYmFzZS9saW1pdCByZWdpc3RlcnMgbXVzdCBiZSByZWFkLW9ubHkgYW5kIHJlYWQgYXMgMC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1taXBoeTI4bHAuYyBiL2RyaXZlcnMvcGh5L3BoeS1taXBoeTI4bHAuYwppbmRleCBlMzRkYTEzLi4yN2ZhNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktbWlwaHkyOGxwLmMKKysrIGIvZHJpdmVycy9waHkvcGh5LW1pcGh5MjhscC5jCkBAIC0xMDUwLDcgKzEwNTAsOCBAQAogCQlyZXQgPSBtaXBoeTI4bHBfaW5pdF91c2IzKG1pcGh5X3BoeSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKIAl9CiAKIAltdXRleF91bmxvY2soJm1pcGh5X2Rldi0+bWlwaHlfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LW9tYXAtY29udHJvbC5jIGIvZHJpdmVycy9waHkvcGh5LW9tYXAtY29udHJvbC5jCmluZGV4IGM5NmU4MTguLmVmZTcyNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L3BoeS1vbWFwLWNvbnRyb2wuYworKysgYi9kcml2ZXJzL3BoeS9waHktb21hcC1jb250cm9sLmMKQEAgLTI5LDEwICsyOSw5IEBACiAvKioKICAqIG9tYXBfY29udHJvbF9wY2llX3BjcyAtIHNldCB0aGUgUENTIGRlbGF5IGNvdW50CiAgKiBAZGV2OiB0aGUgY29udHJvbCBtb2R1bGUgZGV2aWNlCi0gKiBAaWQ6IGluZGV4IG9mIHRoZSBwY2llIFBIWSAoc2hvdWxkIGJlIDEgb3IgMikKICAqIEBkZWxheTogOCBiaXQgZGVsYXkgdmFsdWUKICAqLwotdm9pZCBvbWFwX2NvbnRyb2xfcGNpZV9wY3Moc3RydWN0IGRldmljZSAqZGV2LCB1OCBpZCwgdTggZGVsYXkpCit2b2lkIG9tYXBfY29udHJvbF9wY2llX3BjcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IGRlbGF5KQogewogCXUzMiB2YWw7CiAJc3RydWN0IG9tYXBfY29udHJvbF9waHkJKmNvbnRyb2xfcGh5OwpAQCAtNTUsOCArNTQsOCBAQAogCiAJdmFsID0gcmVhZGwoY29udHJvbF9waHktPnBjaWVfcGNzKTsKIAl2YWwgJj0gfihPTUFQX0NUUkxfUENJRV9QQ1NfTUFTSyA8PAotCQkoaWQgKiBPTUFQX0NUUkxfUENJRV9QQ1NfREVMQVlfQ09VTlRfU0hJRlQpKTsKLQl2YWwgfD0gZGVsYXkgPDwgKGlkICogT01BUF9DVFJMX1BDSUVfUENTX0RFTEFZX0NPVU5UX1NISUZUKTsKKwkJT01BUF9DVFJMX1BDSUVfUENTX0RFTEFZX0NPVU5UX1NISUZUKTsKKwl2YWwgfD0gKGRlbGF5IDw8IE9NQVBfQ1RSTF9QQ0lFX1BDU19ERUxBWV9DT1VOVF9TSElGVCk7CiAJd3JpdGVsKHZhbCwgY29udHJvbF9waHktPnBjaWVfcGNzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9tYXBfY29udHJvbF9wY2llX3Bjcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktc3VuNGktdXNiLmMgYi9kcml2ZXJzL3BoeS9waHktc3VuNGktdXNiLmMKaW5kZXggZmIwMmE2Ny4uYTJiMDhmM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L3BoeS1zdW40aS11c2IuYworKysgYi9kcml2ZXJzL3BoeS9waHktc3VuNGktdXNiLmMKQEAgLTI0NCw3ICsyNDQsOCBAQAogCWVsc2UKIAkJZGF0YS0+bnVtX3BoeXMgPSAzOwogCi0JaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYWxsd2lubmVyLHN1bjRpLWExMC11c2ItcGh5IikpCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYWxsd2lubmVyLHN1bjRpLWExMC11c2ItcGh5IikgfHwKKwkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhbGx3aW5uZXIsc3VuNmktYTMxLXVzYi1waHkiKSkKIAkJZGF0YS0+ZGlzY190aHJlc2ggPSAzOwogCWVsc2UKIAkJZGF0YS0+ZGlzY190aHJlc2ggPSAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LXRpLXBpcGUzLmMgYi9kcml2ZXJzL3BoeS9waHktdGktcGlwZTMuYwppbmRleCAxMzg3YjRkLi40NjVkZTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktdGktcGlwZTMuYworKysgYi9kcml2ZXJzL3BoeS9waHktdGktcGlwZTMuYwpAQCAtODIsNyArODIsNiBAQAogCXN0cnVjdCBjbGsJCSpyZWZjbGs7CiAJc3RydWN0IGNsawkJKmRpdl9jbGs7CiAJc3RydWN0IHBpcGUzX2RwbGxfbWFwCSpkcGxsX21hcDsKLQl1OAkJCWlkOwogfTsKIAogc3RhdGljIHN0cnVjdCBwaXBlM19kcGxsX21hcCBkcGxsX21hcF91c2JbXSA9IHsKQEAgLTIxNyw4ICsyMTYsMTMgQEAKIAl1MzIgdmFsOwogCWludCByZXQgPSAwOwogCisJLyoKKwkgKiBTZXQgcGNpZV9wY3MgcmVnaXN0ZXIgdG8gMHg5NiBmb3IgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHBoeQorCSAqIGFzIHJlY29tbWVuZGVkIGluIEFNNTcyeCBUUk0gU1BSVUhaNiwgc2VjdGlvbiAxOC41LjIuMiwgdGFibGUKKwkgKiAxOC0xODA0LgorCSAqLwogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwaHktPmRldi0+b2Zfbm9kZSwgInRpLHBoeS1waXBlMy1wY2llIikpIHsKLQkJb21hcF9jb250cm9sX3BjaWVfcGNzKHBoeS0+Y29udHJvbF9kZXYsIHBoeS0+aWQsIDB4RjEpOworCQlvbWFwX2NvbnRyb2xfcGNpZV9wY3MocGh5LT5jb250cm9sX2RldiwgMHg5Nik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzQ3LDggKzM1MSw2IEBACiAJfQogCiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJ0aSxwaHktcGlwZTMtcGNpZSIpKSB7Ci0JCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3U4KG5vZGUsICJpZCIsICZwaHktPmlkKSA8IDApCi0JCQlwaHktPmlkID0gMTsKIAogCQljbGsgPSBkZXZtX2Nsa19nZXQocGh5LT5kZXYsICJkcGxsX3JlZiIpOwogCQlpZiAoSVNfRVJSKGNsaykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9jb3JlLmMgYi9kcml2ZXJzL3BpbmN0cmwvY29yZS5jCmluZGV4IGU0ZjY1NTEuLjg5ZGNhNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9jb3JlLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL2NvcmUuYwpAQCAtMTgwMSwxNCArMTgwMSwxNSBAQAogCWlmIChwY3RsZGV2ID09IE5VTEwpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJnBpbmN0cmxkZXZfbGlzdF9tdXRleCk7CiAJbXV0ZXhfbG9jaygmcGN0bGRldi0+bXV0ZXgpOwotCiAJcGluY3RybF9yZW1vdmVfZGV2aWNlX2RlYnVnZnMocGN0bGRldik7CisJbXV0ZXhfdW5sb2NrKCZwY3RsZGV2LT5tdXRleCk7CiAKIAlpZiAoIUlTX0VSUihwY3RsZGV2LT5wKSkKIAkJcGluY3RybF9wdXQocGN0bGRldi0+cCk7CiAKKwltdXRleF9sb2NrKCZwaW5jdHJsZGV2X2xpc3RfbXV0ZXgpOworCW11dGV4X2xvY2soJnBjdGxkZXYtPm11dGV4KTsKIAkvKiBUT0RPOiBjaGVjayB0aGF0IG5vIHBpbm11eGVzIGFyZSBzdGlsbCBhY3RpdmU/ICovCiAJbGlzdF9kZWwoJnBjdGxkZXYtPm5vZGUpOwogCS8qIERlc3Ryb3kgZGVzY3JpcHRvciB0cmVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hdDkxLmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hdDkxLmMKaW5kZXggZGZkMDIxZS4uZjRjZDBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYXQ5MS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWF0OTEuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJc3RydWN0IGRldmljZQkJKmRldjsKIAlzdHJ1Y3QgcGluY3RybF9kZXYJKnBjdGw7CiAKLQlpbnQJCQluYmFua3M7CisJaW50CQkJbmFjdGl2ZV9iYW5rczsKIAogCXVpbnQzMl90CQkqbXV4X21hc2s7CiAJaW50CQkJbm11eDsKQEAgLTY1MywxMiArNjUzLDE4IEBACiAJaW50IG11eDsKIAogCS8qIGNoZWNrIGlmIGl0J3MgYSB2YWxpZCBjb25maWcgKi8KLQlpZiAocGluLT5iYW5rID49IGluZm8tPm5iYW5rcykgeworCWlmIChwaW4tPmJhbmsgPj0gZ3Bpb19iYW5rcykgewogCQlkZXZfZXJyKGluZm8tPmRldiwgIiVzOiBwaW4gY29uZiAlZCBiYW5rX2lkICVkID49IG5iYW5rcyAlZFxuIiwKLQkJCW5hbWUsIGluZGV4LCBwaW4tPmJhbmssIGluZm8tPm5iYW5rcyk7CisJCQluYW1lLCBpbmRleCwgcGluLT5iYW5rLCBncGlvX2JhbmtzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKCFncGlvX2NoaXBzW3Bpbi0+YmFua10pIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICIlczogcGluIGNvbmYgJWQgYmFua19pZCAlZCBub3QgZW5hYmxlZFxuIiwKKwkJCW5hbWUsIGluZGV4LCBwaW4tPmJhbmspOworCQlyZXR1cm4gLUVOWElPOworCX0KKwogCWlmIChwaW4tPnBpbiA+PSBNQVhfTkJfR1BJT19QRVJfQkFOSykgewogCQlkZXZfZXJyKGluZm8tPmRldiwgIiVzOiBwaW4gY29uZiAlZCBwaW5fYmFua19pZCAlZCA+PSAlZFxuIiwKIAkJCW5hbWUsIGluZGV4LCBwaW4tPnBpbiwgTUFYX05CX0dQSU9fUEVSX0JBTkspOwpAQCAtOTgxLDcgKzk4Nyw4IEBACiAKIAlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgewogCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsIGdwaW9fY29tcGF0KSkgewotCQkJaW5mby0+bmJhbmtzKys7CisJCQlpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShjaGlsZCkpCisJCQkJaW5mby0+bmFjdGl2ZV9iYW5rcysrOwogCQl9IGVsc2UgewogCQkJaW5mby0+bmZ1bmN0aW9ucysrOwogCQkJaW5mby0+bmdyb3VwcyArPSBvZl9nZXRfY2hpbGRfY291bnQoY2hpbGQpOwpAQCAtMTAwMywxMSArMTAxMCwxMSBAQAogCX0KIAogCXNpemUgLz0gc2l6ZW9mKCpsaXN0KTsKLQlpZiAoIXNpemUgfHwgc2l6ZSAlIGluZm8tPm5iYW5rcykgewotCQlkZXZfZXJyKGluZm8tPmRldiwgIndyb25nIG11eCBtYXNrIGFycmF5IHNob3VsZCBiZSBieSAlZFxuIiwgaW5mby0+bmJhbmtzKTsKKwlpZiAoIXNpemUgfHwgc2l6ZSAlIGdwaW9fYmFua3MpIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJ3cm9uZyBtdXggbWFzayBhcnJheSBzaG91bGQgYmUgYnkgJWRcbiIsIGdwaW9fYmFua3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaW5mby0+bm11eCA9IHNpemUgLyBpbmZvLT5uYmFua3M7CisJaW5mby0+bm11eCA9IHNpemUgLyBncGlvX2JhbmtzOwogCiAJaW5mby0+bXV4X21hc2sgPSBkZXZtX2t6YWxsb2MoaW5mby0+ZGV2LCBzaXplb2YodTMyKSAqIHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghaW5mby0+bXV4X21hc2spIHsKQEAgLTExMzEsNyArMTEzOCw3IEBACiAJCW9mX21hdGNoX2RldmljZShhdDkxX3BpbmN0cmxfb2ZfbWF0Y2gsICZwZGV2LT5kZXYpLT5kYXRhOwogCWF0OTFfcGluY3RybF9jaGlsZF9jb3VudChpbmZvLCBucCk7CiAKLQlpZiAoaW5mby0+bmJhbmtzIDwgMSkgeworCWlmIChncGlvX2JhbmtzIDwgMSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ5b3UgbmVlZCB0byBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBncGlvLWNvbnRyb2xsZXJcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMTQ0LDcgKzExNTEsNyBAQAogCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAibXV4LW1hc2tcbiIpOwogCXRtcCA9IGluZm8tPm11eF9tYXNrOwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uYmFua3M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IGluZm8tPm5tdXg7IGorKywgdG1wKyspIHsKIAkJCWRldl9kYmcoJnBkZXYtPmRldiwgIiVkOiVkXHQweCV4XG4iLCBpLCBqLCB0bXBbMF0pOwogCQl9CkBAIC0xMTYyLDcgKzExNjksNyBAQAogCWlmICghaW5mby0+Z3JvdXBzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIm5iYW5rcyA9ICVkXG4iLCBpbmZvLT5uYmFua3MpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIm5iYW5rcyA9ICVkXG4iLCBncGlvX2JhbmtzKTsKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJuZnVuY3Rpb25zID0gJWRcbiIsIGluZm8tPm5mdW5jdGlvbnMpOwogCWRldl9kYmcoJnBkZXYtPmRldiwgIm5ncm91cHMgPSAlZFxuIiwgaW5mby0+bmdyb3Vwcyk7CiAKQEAgLTExODUsNyArMTE5Miw3IEBACiB7CiAJc3RydWN0IGF0OTFfcGluY3RybCAqaW5mbzsKIAlzdHJ1Y3QgcGluY3RybF9waW5fZGVzYyAqcGRlc2M7Ci0JaW50IHJldCwgaSwgaiwgazsKKwlpbnQgcmV0LCBpLCBqLCBrLCBuZ3Bpb19jaGlwc19lbmFibGVkID0gMDsKIAogCWluZm8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQpAQCAtMTIwMCwyMyArMTIwNywyNyBAQAogCSAqIHRvIG9idGFpbiByZWZlcmVuY2VzIHRvIHRoZSBzdHJ1Y3QgZ3Bpb19jaGlwICogZm9yIHRoZW0sIGFuZCB3ZQogCSAqIG5lZWQgdGhpcyB0byBwcm9jZWVkLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uYmFua3M7IGkrKykgewotCQlpZiAoIWdwaW9fY2hpcHNbaV0pIHsKLQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJHUElPIGNoaXAgJWQgbm90IHJlZ2lzdGVyZWQgeWV0XG4iLCBpKTsKLQkJCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgaW5mbyk7Ci0JCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspCisJCWlmIChncGlvX2NoaXBzW2ldKQorCQkJbmdwaW9fY2hpcHNfZW5hYmxlZCsrOworCisJaWYgKG5ncGlvX2NoaXBzX2VuYWJsZWQgPCBpbmZvLT5uYWN0aXZlX2JhbmtzKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkgIkFsbCBHUElPIGNoaXBzIGFyZSBub3QgcmVnaXN0ZXJlZCB5ZXQgKCVkLyVkKVxuIiwKKwkJCSBuZ3Bpb19jaGlwc19lbmFibGVkLCBpbmZvLT5uYWN0aXZlX2JhbmtzKTsKKwkJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBpbmZvKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CiAJfQogCiAJYXQ5MV9waW5jdHJsX2Rlc2MubmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwotCWF0OTFfcGluY3RybF9kZXNjLm5waW5zID0gaW5mby0+bmJhbmtzICogTUFYX05CX0dQSU9fUEVSX0JBTks7CisJYXQ5MV9waW5jdHJsX2Rlc2MubnBpbnMgPSBncGlvX2JhbmtzICogTUFYX05CX0dQSU9fUEVSX0JBTks7CiAJYXQ5MV9waW5jdHJsX2Rlc2MucGlucyA9IHBkZXNjID0KIAkJZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGRlc2MpICogYXQ5MV9waW5jdHJsX2Rlc2MubnBpbnMsIEdGUF9LRVJORUwpOwogCiAJaWYgKCFhdDkxX3BpbmN0cmxfZGVzYy5waW5zKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAoaSA9IDAgLCBrID0gMDsgaSA8IGluZm8tPm5iYW5rczsgaSsrKSB7CisJZm9yIChpID0gMCwgayA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9OQl9HUElPX1BFUl9CQU5LOyBqKyssIGsrKykgewogCQkJcGRlc2MtPm51bWJlciA9IGs7CiAJCQlwZGVzYy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAicGlvJWMlZCIsIGkgKyAnQScsIGopOwpAQCAtMTIzNCw4ICsxMjQ1LDkgQEAKIAl9CiAKIAkvKiBXZSB3aWxsIGhhbmRsZSBhIHJhbmdlIG9mIEdQSU8gcGlucyAqLwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uYmFua3M7IGkrKykKLQkJcGluY3RybF9hZGRfZ3Bpb19yYW5nZShpbmZvLT5wY3RsLCAmZ3Bpb19jaGlwc1tpXS0+cmFuZ2UpOworCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspCisJCWlmIChncGlvX2NoaXBzW2ldKQorCQkJcGluY3RybF9hZGRfZ3Bpb19yYW5nZShpbmZvLT5wY3RsLCAmZ3Bpb19jaGlwc1tpXS0+cmFuZ2UpOwogCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgImluaXRpYWxpemVkIEFUOTEgcGluY3RybCBkcml2ZXJcbiIpOwogCkBAIC0xNjEzLDkgKzE2MjUsMTAgQEAKIHN0YXRpYyBpbnQgYXQ5MV9ncGlvX29mX2lycV9zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCSAgc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8pCiB7CisJc3RydWN0IGdwaW9fY2hpcAkqZ3Bpb2NoaXBfcHJldiA9IE5VTEw7CiAJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICAgKnByZXYgPSBOVUxMOwogCXN0cnVjdCBpcnFfZGF0YQkJKmQgPSBpcnFfZ2V0X2lycV9kYXRhKGF0OTFfZ3Bpby0+cGlvY192aXJxKTsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAKIAlhdDkxX2dwaW8tPnBpb2NfaHdpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCkBAIC0xNjQxLDI0ICsxNjU0LDMzIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JLyogU2V0dXAgY2hhaW5lZCBoYW5kbGVyICovCi0JaWYgKGF0OTFfZ3Bpby0+cGlvY19pZHgpCi0JCXByZXYgPSBncGlvX2NoaXBzW2F0OTFfZ3Bpby0+cGlvY19pZHggLSAxXTsKLQogCS8qIFRoZSB0b3AgbGV2ZWwgaGFuZGxlciBoYW5kbGVzIG9uZSBiYW5rIG9mIEdQSU9zLCBleGNlcHQKIAkgKiBvbiBzb21lIFNvQyBpdCBjYW4gaGFuZGxlIHVwIHRvIHRocmVlLi4uCiAJICogV2Ugb25seSBzZXQgdXAgdGhlIGhhbmRsZXIgZm9yIHRoZSBmaXJzdCBvZiB0aGUgbGlzdC4KIAkgKi8KLQlpZiAocHJldiAmJiBwcmV2LT5uZXh0ID09IGF0OTFfZ3BpbykKKwlncGlvY2hpcF9wcmV2ID0gaXJxX2dldF9oYW5kbGVyX2RhdGEoYXQ5MV9ncGlvLT5waW9jX3ZpcnEpOworCWlmICghZ3Bpb2NoaXBfcHJldikgeworCQkvKiBUaGVuIHJlZ2lzdGVyIHRoZSBjaGFpbiBvbiB0aGUgcGFyZW50IElSUSAqLworCQlncGlvY2hpcF9zZXRfY2hhaW5lZF9pcnFjaGlwKCZhdDkxX2dwaW8tPmNoaXAsCisJCQkJCSAgICAgJmdwaW9faXJxY2hpcCwKKwkJCQkJICAgICBhdDkxX2dwaW8tPnBpb2NfdmlycSwKKwkJCQkJICAgICBncGlvX2lycV9oYW5kbGVyKTsKIAkJcmV0dXJuIDA7CisJfQogCi0JLyogVGhlbiByZWdpc3RlciB0aGUgY2hhaW4gb24gdGhlIHBhcmVudCBJUlEgKi8KLQlncGlvY2hpcF9zZXRfY2hhaW5lZF9pcnFjaGlwKCZhdDkxX2dwaW8tPmNoaXAsCi0JCQkJICAgICAmZ3Bpb19pcnFjaGlwLAotCQkJCSAgICAgYXQ5MV9ncGlvLT5waW9jX3ZpcnEsCi0JCQkJICAgICBncGlvX2lycV9oYW5kbGVyKTsKKwlwcmV2ID0gY29udGFpbmVyX29mKGdwaW9jaGlwX3ByZXYsIHN0cnVjdCBhdDkxX2dwaW9fY2hpcCwgY2hpcCk7CiAKLQlyZXR1cm4gMDsKKwkvKiB3ZSBjYW4gb25seSBoYXZlIDIgYmFua3MgYmVmb3JlICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAocHJldi0+bmV4dCkgeworCQkJcHJldiA9IHByZXYtPm5leHQ7CisJCX0gZWxzZSB7CisJCQlwcmV2LT5uZXh0ID0gYXQ5MV9ncGlvOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcmVwbGljYXRlZCBmb3IgZWFjaCBHUElPIGJsb2NrIGFsbG9jYXRlZCBhdCBwcm9iZSB0aW1lICovCkBAIC0xNjc1LDI0ICsxNjk3LDYgQEAKIAkubmdwaW8JCQk9IE1BWF9OQl9HUElPX1BFUl9CQU5LLAogfTsKIAotc3RhdGljIHZvaWQgYXQ5MV9ncGlvX3Byb2JlX2ZpeHVwKHZvaWQpCi17Ci0JdW5zaWduZWQgaTsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbywgKmxhc3QgPSBOVUxMOwotCi0JZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykgewotCQlhdDkxX2dwaW8gPSBncGlvX2NoaXBzW2ldOwotCi0JCS8qCi0JCSAqIEdQSU8gY29udHJvbGxlciBhcmUgZ3JvdXBlZCBvbiBzb21lIFNvQzoKLQkJICogUElPQywgUElPRCBhbmQgUElPRSBjYW4gc2hhcmUgdGhlIHNhbWUgSVJRIGxpbmUKLQkJICovCi0JCWlmIChsYXN0ICYmIGxhc3QtPnBpb2NfdmlycSA9PSBhdDkxX2dwaW8tPnBpb2NfdmlycSkKLQkJCWxhc3QtPm5leHQgPSBhdDkxX2dwaW87Ci0JCWxhc3QgPSBhdDkxX2dwaW87Ci0JfQotfQotCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhdDkxX2dwaW9fb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtZ3BpbyIsIC5kYXRhID0gJmF0OTFzYW05eDVfb3BzLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1ncGlvIiwgLmRhdGEgPSAmYXQ5MXJtOTIwMF9vcHMgfSwKQEAgLTE4MDUsOCArMTgwOSw2IEBACiAJZ3Bpb19jaGlwc1thbGlhc19pZHhdID0gYXQ5MV9jaGlwOwogCWdwaW9fYmFua3MgPSBtYXgoZ3Bpb19iYW5rcywgYWxpYXNfaWR4ICsgMSk7CiAKLQlhdDkxX2dwaW9fcHJvYmVfZml4dXAoKTsKLQogCXJldCA9IGF0OTFfZ3Bpb19vZl9pcnFfc2V0dXAocGRldiwgYXQ5MV9jaGlwKTsKIAlpZiAocmV0KQogCQlnb3RvIGlycV9zZXR1cF9lcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1yb2NrY2hpcC5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcm9ja2NoaXAuYwppbmRleCBiYTc0ZjBhLi40M2VhY2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1yb2NrY2hpcC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXJvY2tjaGlwLmMKQEAgLTg5LDYgKzg5LDcgQEAKICAqIEByZWdfcHVsbDogb3B0aW9uYWwgc2VwYXJhdGUgcmVnaXN0ZXIgZm9yIGFkZGl0aW9uYWwgcHVsbCBzZXR0aW5ncwogICogQGNsazogY2xvY2sgb2YgdGhlIGdwaW8gYmFuawogICogQGlycTogaW50ZXJydXB0IG9mIHRoZSBncGlvIGJhbmsKKyAqIEBzYXZlZF9lbmFibGVzOiBTYXZlZCBjb250ZW50IG9mIEdQSU9fSU5URU4gYXQgc3VzcGVuZCB0aW1lLgogICogQHBpbl9iYXNlOiBmaXJzdCBwaW4gbnVtYmVyCiAgKiBAbnJfcGluczogbnVtYmVyIG9mIHBpbnMgaW4gdGhpcyBiYW5rCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgYmFuawpAQCAtMTA3LDYgKzEwOCw3IEBACiAJc3RydWN0IHJlZ21hcAkJCSpyZWdtYXBfcHVsbDsKIAlzdHJ1Y3QgY2xrCQkJKmNsazsKIAlpbnQJCQkJaXJxOworCXUzMgkJCQlzYXZlZF9lbmFibGVzOwogCXUzMgkJCQlwaW5fYmFzZTsKIAl1OAkJCQlucl9waW5zOwogCWNoYXIJCQkJKm5hbWU7CkBAIC0xMzk2LDEwICsxMzk4LDcgQEAKIHsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZ2V0X2NoaXAoaXJxKTsKIAlzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmJhbmsgPSBpcnFfZ2V0X2hhbmRsZXJfZGF0YShpcnEpOwotCXUzMiBwb2xhcml0eSA9IDAsIGRhdGEgPSAwOwogCXUzMiBwZW5kOwotCWJvb2wgZWRnZV9jaGFuZ2VkID0gZmFsc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRldl9kYmcoYmFuay0+ZHJ2ZGF0YS0+ZGV2LCAiZ290IGlycSBmb3IgYmFuayAlc1xuIiwgYmFuay0+bmFtZSk7CiAKQEAgLTE0MDcsMTIgKzE0MDYsNiBAQAogCiAJcGVuZCA9IHJlYWRsX3JlbGF4ZWQoYmFuay0+cmVnX2Jhc2UgKyBHUElPX0lOVF9TVEFUVVMpOwogCi0JaWYgKGJhbmstPnRvZ2dsZV9lZGdlX21vZGUpIHsKLQkJcG9sYXJpdHkgPSByZWFkbF9yZWxheGVkKGJhbmstPnJlZ19iYXNlICsKLQkJCQkJIEdQSU9fSU5UX1BPTEFSSVRZKTsKLQkJZGF0YSA9IHJlYWRsX3JlbGF4ZWQoYmFuay0+cmVnX2Jhc2UgKyBHUElPX0VYVF9QT1JUKTsKLQl9Ci0KIAl3aGlsZSAocGVuZCkgewogCQl1bnNpZ25lZCBpbnQgdmlycTsKIApAQCAtMTQzMiwyOSArMTQyNSwzMyBAQAogCQkgKiBuZWVkcyBtYW51YWwgaW50ZXJ2ZW50aW9uLgogCQkgKi8KIAkJaWYgKGJhbmstPnRvZ2dsZV9lZGdlX21vZGUgJiBCSVQoaXJxKSkgewotCQkJaWYgKGRhdGEgJiBCSVQoaXJxKSkKLQkJCQlwb2xhcml0eSAmPSB+QklUKGlycSk7Ci0JCQllbHNlCi0JCQkJcG9sYXJpdHkgfD0gQklUKGlycSk7CisJCQl1MzIgZGF0YSwgZGF0YV9vbGQsIHBvbGFyaXR5OworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQkJZWRnZV9jaGFuZ2VkID0gdHJ1ZTsKKwkJCWRhdGEgPSByZWFkbF9yZWxheGVkKGJhbmstPnJlZ19iYXNlICsgR1BJT19FWFRfUE9SVCk7CisJCQlkbyB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPnNsb2NrLCBmbGFncyk7CisKKwkJCQlwb2xhcml0eSA9IHJlYWRsX3JlbGF4ZWQoYmFuay0+cmVnX2Jhc2UgKworCQkJCQkJCSBHUElPX0lOVF9QT0xBUklUWSk7CisJCQkJaWYgKGRhdGEgJiBCSVQoaXJxKSkKKwkJCQkJcG9sYXJpdHkgJj0gfkJJVChpcnEpOworCQkJCWVsc2UKKwkJCQkJcG9sYXJpdHkgfD0gQklUKGlycSk7CisJCQkJd3JpdGVsKHBvbGFyaXR5LAorCQkJCSAgICAgICBiYW5rLT5yZWdfYmFzZSArIEdQSU9fSU5UX1BPTEFSSVRZKTsKKworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPnNsb2NrLCBmbGFncyk7CisKKwkJCQlkYXRhX29sZCA9IGRhdGE7CisJCQkJZGF0YSA9IHJlYWRsX3JlbGF4ZWQoYmFuay0+cmVnX2Jhc2UgKworCQkJCQkJICAgICBHUElPX0VYVF9QT1JUKTsKKwkJCX0gd2hpbGUgKChkYXRhICYgQklUKGlycSkpICE9IChkYXRhX29sZCAmIEJJVChpcnEpKSk7CiAJCX0KIAogCQlnZW5lcmljX2hhbmRsZV9pcnEodmlycSk7CiAJfQogCi0JaWYgKGJhbmstPnRvZ2dsZV9lZGdlX21vZGUgJiYgZWRnZV9jaGFuZ2VkKSB7Ci0JCS8qIEludGVycnVwdCBwYXJhbXMgc2hvdWxkIG9ubHkgYmUgc2V0IHdpdGggaW50cyBkaXNhYmxlZCAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+c2xvY2ssIGZsYWdzKTsKLQotCQlkYXRhID0gcmVhZGxfcmVsYXhlZChiYW5rLT5yZWdfYmFzZSArIEdQSU9fSU5URU4pOwotCQl3cml0ZWxfcmVsYXhlZCgwLCBiYW5rLT5yZWdfYmFzZSArIEdQSU9fSU5URU4pOwotCQl3cml0ZWwocG9sYXJpdHksIGJhbmstPnJlZ19iYXNlICsgR1BJT19JTlRfUE9MQVJJVFkpOwotCQl3cml0ZWwoZGF0YSwgYmFuay0+cmVnX2Jhc2UgKyBHUElPX0lOVEVOKTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5zbG9jaywgZmxhZ3MpOwotCX0KLQogCWNoYWluZWRfaXJxX2V4aXQoY2hpcCwgZGVzYyk7CiB9CiAKQEAgLTE1NDMsNiArMTU0MCw1MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCByb2NrY2hpcF9pcnFfc3VzcGVuZChzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IHJvY2tjaGlwX3Bpbl9iYW5rICpiYW5rID0gZ2MtPnByaXZhdGU7CisKKwliYW5rLT5zYXZlZF9lbmFibGVzID0gaXJxX3JlZ19yZWFkbChnYywgR1BJT19JTlRFTik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT53YWtlX2FjdGl2ZSwgR1BJT19JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIHJvY2tjaGlwX2lycV9yZXN1bWUoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCByb2NrY2hpcF9waW5fYmFuayAqYmFuayA9IGdjLT5wcml2YXRlOworCisJaXJxX3JlZ193cml0ZWwoZ2MsIGJhbmstPnNhdmVkX2VuYWJsZXMsIEdQSU9fSU5URU4pOworfQorCitzdGF0aWMgdm9pZCByb2NrY2hpcF9pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdTMyIHZhbDsKKworCWlycV9nY19sb2NrKGdjKTsKKworCXZhbCA9IGlycV9yZWdfcmVhZGwoZ2MsIEdQSU9fSU5URU4pOworCXZhbCAmPSB+ZC0+bWFzazsKKwlpcnFfcmVnX3dyaXRlbChnYywgdmFsLCBHUElPX0lOVEVOKTsKKworCWlycV9nY191bmxvY2soZ2MpOworfQorCitzdGF0aWMgdm9pZCByb2NrY2hpcF9pcnFfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1MzIgdmFsOworCisJaXJxX2djX2xvY2soZ2MpOworCisJdmFsID0gaXJxX3JlZ19yZWFkbChnYywgR1BJT19JTlRFTik7CisJdmFsIHw9IGQtPm1hc2s7CisJaXJxX3JlZ193cml0ZWwoZ2MsIHZhbCwgR1BJT19JTlRFTik7CisKKwlpcnFfZ2NfdW5sb2NrKGdjKTsKK30KKwogc3RhdGljIGludCByb2NrY2hpcF9pbnRlcnJ1cHRzX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJCQlzdHJ1Y3Qgcm9ja2NoaXBfcGluY3RybCAqaW5mbykKIHsKQEAgLTE1ODEsMTIgKzE2MjMsMTYgQEAKIAkJZ2MgPSBpcnFfZ2V0X2RvbWFpbl9nZW5lcmljX2NoaXAoYmFuay0+ZG9tYWluLCAwKTsKIAkJZ2MtPnJlZ19iYXNlID0gYmFuay0+cmVnX2Jhc2U7CiAJCWdjLT5wcml2YXRlID0gYmFuazsKLQkJZ2MtPmNoaXBfdHlwZXNbMF0ucmVncy5tYXNrID0gR1BJT19JTlRFTjsKKwkJZ2MtPmNoaXBfdHlwZXNbMF0ucmVncy5tYXNrID0gR1BJT19JTlRNQVNLOwogCQlnYy0+Y2hpcF90eXBlc1swXS5yZWdzLmFjayA9IEdQSU9fUE9SVFNfRU9JOwogCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9hY2sgPSBpcnFfZ2NfYWNrX3NldF9iaXQ7Ci0JCWdjLT5jaGlwX3R5cGVzWzBdLmNoaXAuaXJxX21hc2sgPSBpcnFfZ2NfbWFza19jbHJfYml0OwotCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV91bm1hc2sgPSBpcnFfZ2NfbWFza19zZXRfYml0OworCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9tYXNrID0gaXJxX2djX21hc2tfc2V0X2JpdDsKKwkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfY2xyX2JpdDsKKwkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfZW5hYmxlID0gcm9ja2NoaXBfaXJxX2VuYWJsZTsKKwkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfZGlzYWJsZSA9IHJvY2tjaGlwX2lycV9kaXNhYmxlOwogCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9zZXRfd2FrZSA9IGlycV9nY19zZXRfd2FrZTsKKwkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfc3VzcGVuZCA9IHJvY2tjaGlwX2lycV9zdXNwZW5kOworCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9yZXN1bWUgPSByb2NrY2hpcF9pcnFfcmVzdW1lOwogCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9zZXRfdHlwZSA9IHJvY2tjaGlwX2lycV9zZXRfdHlwZTsKIAkJZ2MtPndha2VfZW5hYmxlZCA9IElSUV9NU0soYmFuay0+bnJfcGlucyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXN0LmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zdC5jCmluZGV4IDdjOWQ1MTMuLjllNWVjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXN0LmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc3QuYwpAQCAtMTAxMiw4ICsxMDEyLDEwIEBACiAJCQkJICAgc3RydWN0IHNlcV9maWxlICpzLCB1bnNpZ25lZCBwaW5faWQpCiB7CiAJdW5zaWduZWQgbG9uZyBjb25maWc7Ci0Jc3RfcGluY29uZl9nZXQocGN0bGRldiwgcGluX2lkLCAmY29uZmlnKTsKIAorCW11dGV4X3VubG9jaygmcGN0bGRldi0+bXV0ZXgpOworCXN0X3BpbmNvbmZfZ2V0KHBjdGxkZXYsIHBpbl9pZCwgJmNvbmZpZyk7CisJbXV0ZXhfbG9jaygmcGN0bGRldi0+bXV0ZXgpOwogCXNlcV9wcmludGYocywgIltPRTolbGQsUFU6JWxkLE9EOiVsZF1cbiIKIAkJIlx0XHRbcmV0aW1lOiVsZCxpbnZjbGs6JWxkLGNsa25vdGRhdDolbGQsIgogCQkiZGU6JWxkLHJ0LWNsazolbGQscnQtZGVsYXk6JWxkXSIsCkBAIC0xNDQzLDYgKzE0NDUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHN0X2dwaW9faXJxY2hpcCA9IHsKIAkubmFtZQkJPSAiR1BJTyIsCisJLmlycV9kaXNhYmxlCT0gc3RfZ3Bpb19pcnFfbWFzaywKIAkuaXJxX21hc2sJPSBzdF9ncGlvX2lycV9tYXNrLAogCS5pcnFfdW5tYXNrCT0gc3RfZ3Bpb19pcnFfdW5tYXNrLAogCS5pcnFfc2V0X3R5cGUJPSBzdF9ncGlvX2lycV9zZXRfdHlwZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXh3YXkuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXh3YXkuYwppbmRleCBjNWNlZjU5Li43Nzk5NTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC14d2F5LmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwteHdheS5jCkBAIC03OTgsMTAgKzc5OCw4IEBACiAKIAkvKiBsb2FkIHRoZSBncGlvIGNoaXAgKi8KIAl4d2F5X2NoaXAuZGV2ID0gJnBkZXYtPmRldjsKLQlvZl9ncGlvY2hpcF9hZGQoJnh3YXlfY2hpcCk7CiAJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZ4d2F5X2NoaXApOwogCWlmIChyZXQpIHsKLQkJb2ZfZ3Bpb2NoaXBfcmVtb3ZlKCZ4d2F5X2NoaXApOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgZ3BpbyBjaGlwXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1zbS5jIGIvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tc20uYwppbmRleCBlNzMwOTM1Li5lZDcwMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1zbS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbXNtLmMKQEAgLTg2NSwxMCArODY1LDEwIEBACiAKIHN0YXRpYyB2b2lkIG1zbV9waW5jdHJsX3NldHVwX3BtX3Jlc2V0KHN0cnVjdCBtc21fcGluY3RybCAqcGN0cmwpCiB7Ci0JaW50IGkgPSAwOworCWludCBpOwogCWNvbnN0IHN0cnVjdCBtc21fZnVuY3Rpb24gKmZ1bmMgPSBwY3RybC0+c29jLT5mdW5jdGlvbnM7CiAKLQlmb3IgKDsgaSA8PSBwY3RybC0+c29jLT5uZnVuY3Rpb25zOyBpKyspCisJZm9yIChpID0gMDsgaSA8IHBjdHJsLT5zb2MtPm5mdW5jdGlvbnM7IGkrKykKIAkJaWYgKCFzdHJjbXAoZnVuY1tpXS5uYW1lLCAicHNfaG9sZCIpKSB7CiAJCQlwY3RybC0+cmVzdGFydF9uYi5ub3RpZmllcl9jYWxsID0gbXNtX3BzX2hvbGRfcmVzdGFydDsKIAkJCXBjdHJsLT5yZXN0YXJ0X25iLnByaW9yaXR5ID0gMTI4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKaW5kZXggOTQxMWVhZS4uM2QyMWVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCkBAIC0yLDExICsyLDkgQEAKICAqICBEcml2ZXIgZm9yIERlbGwgbGFwdG9wIGV4dHJhcwogICoKICAqICBDb3B5cmlnaHQgKGMpIFJlZCBIYXQgPG1qZ0ByZWRoYXQuY29tPgotICogIENvcHlyaWdodCAoYykgMjAxNCBHYWJyaWVsZSBNYXp6b3R0YSA8Z2FicmllbGUubXp0QGdtYWlsLmNvbT4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTQgUGFsaSBSb2jDoXIgPHBhbGkucm9oYXJAZ21haWwuY29tPgogICoKLSAqICBCYXNlZCBvbiBkb2N1bWVudGF0aW9uIGluIHRoZSBsaWJzbWJpb3MgcGFja2FnZToKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNCBEZWxsIEluYy4KKyAqICBCYXNlZCBvbiBkb2N1bWVudGF0aW9uIGluIHRoZSBsaWJzbWJpb3MgcGFja2FnZSwgQ29weXJpZ2h0IChDKSAyMDA1IERlbGwKKyAqICBJbmMuCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTM0LDEzICszMiw2IEBACiAjaW5jbHVkZSAiLi4vLi4vZmlybXdhcmUvZGNkYmFzLmgiCiAKICNkZWZpbmUgQlJJR0hUTkVTU19UT0tFTiAweDdkCi0jZGVmaW5lIEtCRF9MRURfT0ZGX1RPS0VOIDB4MDFFMQotI2RlZmluZSBLQkRfTEVEX09OX1RPS0VOIDB4MDFFMgotI2RlZmluZSBLQkRfTEVEX0FVVE9fVE9LRU4gMHgwMUUzCi0jZGVmaW5lIEtCRF9MRURfQVVUT18yNV9UT0tFTiAweDAyRUEKLSNkZWZpbmUgS0JEX0xFRF9BVVRPXzUwX1RPS0VOIDB4MDJFQgotI2RlZmluZSBLQkRfTEVEX0FVVE9fNzVfVE9LRU4gMHgwMkVDCi0jZGVmaW5lIEtCRF9MRURfQVVUT18xMDBfVE9LRU4gMHgwMkY2CiAKIC8qIFRoaXMgc3RydWN0dXJlIHdpbGwgYmUgbW9kaWZpZWQgYnkgdGhlIGZpcm13YXJlIHdoZW4gd2UgZW50ZXIKICAqIHN5c3RlbSBtYW5hZ2VtZW50IG1vZGUsIGhlbmNlIHRoZSB2b2xhdGlsZXMgKi8KQEAgLTcxLDEzICs2Miw2IEBACiAKIHN0cnVjdCBxdWlya19lbnRyeSB7CiAJdTggdG91Y2hwYWRfbGVkOwotCi0JaW50IG5lZWRzX2tiZF90aW1lb3V0czsKLQkvKgotCSAqIE9yZGVyZWQgbGlzdCBvZiB0aW1lb3V0cyBleHByZXNzZWQgaW4gc2Vjb25kcy4KLQkgKiBUaGUgbGlzdCBtdXN0IGVuZCB3aXRoIC0xCi0JICovCi0JaW50IGtiZF90aW1lb3V0c1tdOwogfTsKIAogc3RhdGljIHN0cnVjdCBxdWlya19lbnRyeSAqcXVpcmtzOwpAQCAtOTIsMTUgKzc2LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyoKLSAqIFRoZXNlIHZhbHVlcyBjb21lIGZyb20gV2luZG93cyB1dGlsaXR5IHByb3ZpZGVkIGJ5IERlbGwuIElmIGFueSBvdGhlciB2YWx1ZQotICogaXMgdXNlZCB0aGVuIEJJT1Mgc2lsZW50bHkgc2V0IHRpbWVvdXQgdG8gMCB3aXRob3V0IGFueSBlcnJvciBtZXNzYWdlLgotICovCi1zdGF0aWMgc3RydWN0IHF1aXJrX2VudHJ5IHF1aXJrX2RlbGxfeHBzMTNfOTMzMyA9IHsKLQkubmVlZHNfa2JkX3RpbWVvdXRzID0gMSwKLQkua2JkX3RpbWVvdXRzID0geyAwLCA1LCAxNSwgNjAsIDUgKiA2MCwgMTUgKiA2MCwgLTEgfSwKLX07Ci0KIHN0YXRpYyBpbnQgZGFfY29tbWFuZF9hZGRyZXNzOwogc3RhdGljIGludCBkYV9jb21tYW5kX2NvZGU7CiBzdGF0aWMgaW50IGRhX251bV90b2tlbnM7CkBAIC0yOTIsMTUgKzI2Nyw2IEBACiAJCX0sCiAJCS5kcml2ZXJfZGF0YSA9ICZxdWlya19kZWxsX3Zvc3Ryb192MTMwLAogCX0sCi0JewotCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKLQkJLmlkZW50ID0gIkRlbGwgWFBTMTMgOTMzMyIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlhQUzEzIDkzMzMiKSwKLQkJfSwKLQkJLmRyaXZlcl9kYXRhID0gJnF1aXJrX2RlbGxfeHBzMTNfOTMzMywKLQl9LAogCXsgfQogfTsKIApAQCAtMzY1LDI5ICszMzEsMTcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZmluZF90b2tlbl9pZChpbnQgdG9rZW5pZCkKK3N0YXRpYyBpbnQgZmluZF90b2tlbl9sb2NhdGlvbihpbnQgdG9rZW5pZCkKIHsKIAlpbnQgaTsKLQogCWZvciAoaSA9IDA7IGkgPCBkYV9udW1fdG9rZW5zOyBpKyspIHsKIAkJaWYgKGRhX3Rva2Vuc1tpXS50b2tlbklEID09IHRva2VuaWQpCi0JCQlyZXR1cm4gaTsKKwkJCXJldHVybiBkYV90b2tlbnNbaV0ubG9jYXRpb247CiAJfQogCiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IGZpbmRfdG9rZW5fbG9jYXRpb24oaW50IHRva2VuaWQpCi17Ci0JaW50IGlkOwotCi0JaWQgPSBmaW5kX3Rva2VuX2lkKHRva2VuaWQpOwotCWlmIChpZCA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIGRhX3Rva2Vuc1tpZF0ubG9jYXRpb247Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyICoKIGRlbGxfc2VuZF9yZXF1ZXN0KHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNsYXNzLAogCQkgIGludCBzZWxlY3QpCkBAIC00MDgsMjAgKzM2Miw2IEBACiAJcmV0dXJuIGJ1ZmZlcjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZGVsbF9zbWlfZXJyb3IoaW50IHZhbHVlKQotewotCXN3aXRjaCAodmFsdWUpIHsKLQljYXNlIDA6IC8qIENvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSAtMTogLyogQ29tcGxldGVkIHdpdGggZXJyb3IgKi8KLQkJcmV0dXJuIC1FSU87Ci0JY2FzZSAtMjogLyogRnVuY3Rpb24gbm90IHN1cHBvcnRlZCAqLwotCQlyZXR1cm4gLUVOWElPOwotCWRlZmF1bHQ6IC8qIFVua25vd24gZXJyb3IgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotCiAvKiBEZXJpdmVkIGZyb20gaW5mb3JtYXRpb24gaW4gRGVsbFdpcmVsZXNzQ3RsLmNwcDoKICAgIENsYXNzIDE3LCBzZWxlY3QgMTEgaXMgcmFkaW8gY29udHJvbC4gSXQgcmV0dXJucyBhbiBhcnJheSBvZiAzMi1iaXQgdmFsdWVzLgogCkBAIC03NzYsNyArNzE2LDcgQEAKIAllbHNlCiAJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMSwgMSk7CiAKLSBvdXQ6CitvdXQ6CiAJcmVsZWFzZV9idWZmZXIoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtODAwLDcgKzc0MCw3IEBACiAKIAlyZXQgPSBidWZmZXItPm91dHB1dFsxXTsKIAotIG91dDoKK291dDoKIAlyZWxlYXNlX2J1ZmZlcigpOwogCXJldHVybiByZXQ7CiB9CkBAIC04NDksOTg0ICs3ODksNiBAQAogCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZ0b3VjaHBhZF9sZWQpOwogfQogCi0vKgotICogRGVyaXZlZCBmcm9tIGluZm9ybWF0aW9uIGluIHNtYmlvcy1rZXlib2FyZC1jdGw6Ci0gKgotICogY2JDbGFzcyA0Ci0gKiBjYlNlbGVjdCAxMQotICogS2V5Ym9hcmQgaWxsdW1pbmF0aW9uCi0gKiBjYkFyZzEgZGV0ZXJtaW5lcyB0aGUgZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkCi0gKgotICogY2JBcmcxIDB4MCA9IEdldCBGZWF0dXJlIEluZm9ybWF0aW9uCi0gKiAgY2JSRVMxICAgICAgICAgU3RhbmRhcmQgcmV0dXJuIGNvZGVzICgwLCAtMSwgLTIpCi0gKiAgY2JSRVMyLCB3b3JkMCAgQml0bWFwIG9mIHVzZXItc2VsZWN0YWJsZSBtb2RlcwotICogICAgIGJpdCAwICAgICBBbHdheXMgb2ZmIChBbGwgc3lzdGVtcykKLSAqICAgICBiaXQgMSAgICAgQWx3YXlzIG9uIChUcmF2aXMgQVRHLCBTaWJlcmlhKQotICogICAgIGJpdCAyICAgICBBdXRvOiBBTFMtYmFzZWQgT247IEFMUy1iYXNlZCBPZmYgKFRyYXZpcyBBVEcpCi0gKiAgICAgYml0IDMgICAgIEF1dG86IEFMUy0gYW5kIGlucHV0LWFjdGl2aXR5LWJhc2VkIE9uOyBpbnB1dC1hY3Rpdml0eSBiYXNlZCBPZmYKLSAqICAgICBiaXQgNCAgICAgQXV0bzogSW5wdXQtYWN0aXZpdHktYmFzZWQgT247IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA1ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbiAoaWxsdW1pbmF0aW9uIGxldmVsIDI1JSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA2ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbiAoaWxsdW1pbmF0aW9uIGxldmVsIDUwJSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA3ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbiAoaWxsdW1pbmF0aW9uIGxldmVsIDc1JSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA4ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbiAoaWxsdW1pbmF0aW9uIGxldmVsIDEwMCUpOyBpbnB1dC1hY3Rpdml0eSBiYXNlZCBPZmYKLSAqICAgICBiaXRzIDktMTUgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAqICBjYlJFUzIsIGJ5dGUyICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQotICogIGNiUkVTMiwgYnl0ZTMgIEtleWJvYXJkIGlsbHVtaW5hdGlvbiB0eXBlCi0gKiAgICAgMCAgICAgICAgIFJlc2VydmVkCi0gKiAgICAgMSAgICAgICAgIFRhc2tsaWdodAotICogICAgIDIgICAgICAgICBCYWNrbGlnaHQKLSAqICAgICAzLTI1NSAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAqICBjYlJFUzMsIGJ5dGUwICBTdXBwb3J0ZWQgYXV0byBrZXlib2FyZCBpbGx1bWluYXRpb24gdHJpZ2dlciBiaXRtYXAuCi0gKiAgICAgYml0IDAgICAgIEFueSBrZXlzdHJva2UKLSAqICAgICBiaXQgMSAgICAgVG91Y2hwYWQgYWN0aXZpdHkKLSAqICAgICBiaXQgMiAgICAgUG9pbnRpbmcgc3RpY2sKLSAqICAgICBiaXQgMyAgICAgQW55IG1vdXNlCi0gKiAgICAgYml0cyA0LTcgIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCi0gKiAgY2JSRVMzLCBieXRlMSAgU3VwcG9ydGVkIHRpbWVvdXQgdW5pdCBiaXRtYXAKLSAqICAgICBiaXQgMCAgICAgU2Vjb25kcwotICogICAgIGJpdCAxICAgICBNaW51dGVzCi0gKiAgICAgYml0IDIgICAgIEhvdXJzCi0gKiAgICAgYml0IDMgICAgIERheXMKLSAqICAgICBiaXRzIDQtNyAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAqICBjYlJFUzMsIGJ5dGUyICBOdW1iZXIgb2Yga2V5Ym9hcmQgbGlnaHQgYnJpZ2h0bmVzcyBsZXZlbHMKLSAqICBjYlJFUzQsIGJ5dGUwICBNYXhpbXVtIGFjY2VwdGFibGUgc2Vjb25kcyB2YWx1ZSAoMCBpZiBzZWNvbmRzIG5vdCBzdXBwb3J0ZWQpLgotICogIGNiUkVTNCwgYnl0ZTEgIE1heGltdW0gYWNjZXB0YWJsZSBtaW51dGVzIHZhbHVlICgwIGlmIG1pbnV0ZXMgbm90IHN1cHBvcnRlZCkuCi0gKiAgY2JSRVM0LCBieXRlMiAgTWF4aW11bSBhY2NlcHRhYmxlIGhvdXJzIHZhbHVlICgwIGlmIGhvdXJzIG5vdCBzdXBwb3J0ZWQpLgotICogIGNiUkVTNCwgYnl0ZTMgIE1heGltdW0gYWNjZXB0YWJsZSBkYXlzIHZhbHVlICgwIGlmIGRheXMgbm90IHN1cHBvcnRlZCkKLSAqCi0gKiBjYkFyZzEgMHgxID0gR2V0IEN1cnJlbnQgU3RhdGUKLSAqICBjYlJFUzEgICAgICAgICBTdGFuZGFyZCByZXR1cm4gY29kZXMgKDAsIC0xLCAtMikKLSAqICBjYlJFUzIsIHdvcmQwICBCaXRtYXAgb2YgY3VycmVudCBtb2RlIHN0YXRlCi0gKiAgICAgYml0IDAgICAgIEFsd2F5cyBvZmYgKEFsbCBzeXN0ZW1zKQotICogICAgIGJpdCAxICAgICBBbHdheXMgb24gKFRyYXZpcyBBVEcsIFNpYmVyaWEpCi0gKiAgICAgYml0IDIgICAgIEF1dG86IEFMUy1iYXNlZCBPbjsgQUxTLWJhc2VkIE9mZiAoVHJhdmlzIEFURykKLSAqICAgICBiaXQgMyAgICAgQXV0bzogQUxTLSBhbmQgaW5wdXQtYWN0aXZpdHktYmFzZWQgT247IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA0ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbjsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDUgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgMjUlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDYgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgNTAlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDcgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgNzUlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDggICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgMTAwJSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdHMgOS0xNSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQotICogICAgIE5vdGU6IE9ubHkgT25lIGJpdCBjYW4gYmUgc2V0Ci0gKiAgY2JSRVMyLCBieXRlMiAgQ3VycmVudGx5IGFjdGl2ZSBhdXRvIGtleWJvYXJkIGlsbHVtaW5hdGlvbiB0cmlnZ2Vycy4KLSAqICAgICBiaXQgMCAgICAgQW55IGtleXN0cm9rZQotICogICAgIGJpdCAxICAgICBUb3VjaHBhZCBhY3Rpdml0eQotICogICAgIGJpdCAyICAgICBQb2ludGluZyBzdGljawotICogICAgIGJpdCAzICAgICBBbnkgbW91c2UKLSAqICAgICBiaXRzIDQtNyAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAqICBjYlJFUzIsIGJ5dGUzICBDdXJyZW50IFRpbWVvdXQKLSAqICAgICBiaXRzIDc6NiAgVGltZW91dCB1bml0cyBpbmRpY2F0b3I6Ci0gKiAgICAgMDBiICAgICAgIFNlY29uZHMKLSAqICAgICAwMWIgICAgICAgTWludXRlcwotICogICAgIDEwYiAgICAgICBIb3VycwotICogICAgIDExYiAgICAgICBEYXlzCi0gKiAgICAgYml0cyA1OjAgIFRpbWVvdXQgdmFsdWUgKDAtNjMpIGluIHNlYy9taW4vaHIvZGF5Ci0gKiAgICAgTk9URTogQSB2YWx1ZSBvZiAwIG1lYW5zIGFsd2F5cyBvbiAobm8gdGltZW91dCkgaWYgYW55IGJpdHMgb2YgUkVTMyBieXRlCi0gKiAgICAgYXJlIHNldCB1cG9uIHJldHVybiBmcm9tIHRoZSBbR2V0IGZlYXR1cmUgaW5mb3JtYXRpb25dIGNhbGwuCi0gKiAgY2JSRVMzLCBieXRlMCAgQ3VycmVudCBzZXR0aW5nIG9mIEFMUyB2YWx1ZSB0aGF0IHR1cm5zIHRoZSBsaWdodCBvbiBvciBvZmYuCi0gKiAgY2JSRVMzLCBieXRlMSAgQ3VycmVudCBBTFMgcmVhZGluZwotICogIGNiUkVTMywgYnl0ZTIgIEN1cnJlbnQga2V5Ym9hcmQgbGlnaHQgbGV2ZWwuCi0gKgotICogY2JBcmcxIDB4MiA9IFNldCBOZXcgU3RhdGUKLSAqICBjYlJFUzEgICAgICAgICBTdGFuZGFyZCByZXR1cm4gY29kZXMgKDAsIC0xLCAtMikKLSAqICBjYkFyZzIsIHdvcmQwICBCaXRtYXAgb2YgY3VycmVudCBtb2RlIHN0YXRlCi0gKiAgICAgYml0IDAgICAgIEFsd2F5cyBvZmYgKEFsbCBzeXN0ZW1zKQotICogICAgIGJpdCAxICAgICBBbHdheXMgb24gKFRyYXZpcyBBVEcsIFNpYmVyaWEpCi0gKiAgICAgYml0IDIgICAgIEF1dG86IEFMUy1iYXNlZCBPbjsgQUxTLWJhc2VkIE9mZiAoVHJhdmlzIEFURykKLSAqICAgICBiaXQgMyAgICAgQXV0bzogQUxTLSBhbmQgaW5wdXQtYWN0aXZpdHktYmFzZWQgT247IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA0ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbjsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDUgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgMjUlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDYgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgNTAlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDcgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgNzUlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDggICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgMTAwJSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdHMgOS0xNSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQotICogICAgIE5vdGU6IE9ubHkgT25lIGJpdCBjYW4gYmUgc2V0Ci0gKiAgY2JBcmcyLCBieXRlMiAgRGVzaXJlZCBhdXRvIGtleWJvYXJkIGlsbHVtaW5hdGlvbiB0cmlnZ2Vycy4gTXVzdCByZW1haW4gaW5hY3RpdmUgdG8gYWxsb3cKLSAqICAgICAgICAgICAgICAgICBrZXlib2FyZCB0byB0dXJuIG9mZiBhdXRvbWF0aWNhbGx5LgotICogICAgIGJpdCAwICAgICBBbnkga2V5c3Ryb2tlCi0gKiAgICAgYml0IDEgICAgIFRvdWNocGFkIGFjdGl2aXR5Ci0gKiAgICAgYml0IDIgICAgIFBvaW50aW5nIHN0aWNrCi0gKiAgICAgYml0IDMgICAgIEFueSBtb3VzZQotICogICAgIGJpdHMgNC03ICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQotICogIGNiQXJnMiwgYnl0ZTMgIERlc2lyZWQgVGltZW91dAotICogICAgIGJpdHMgNzo2ICBUaW1lb3V0IHVuaXRzIGluZGljYXRvcjoKLSAqICAgICAwMGIgICAgICAgU2Vjb25kcwotICogICAgIDAxYiAgICAgICBNaW51dGVzCi0gKiAgICAgMTBiICAgICAgIEhvdXJzCi0gKiAgICAgMTFiICAgICAgIERheXMKLSAqICAgICBiaXRzIDU6MCAgVGltZW91dCB2YWx1ZSAoMC02MykgaW4gc2VjL21pbi9oci9kYXkKLSAqICBjYkFyZzMsIGJ5dGUwICBEZXNpcmVkIHNldHRpbmcgb2YgQUxTIHZhbHVlIHRoYXQgdHVybnMgdGhlIGxpZ2h0IG9uIG9yIG9mZi4KLSAqICBjYkFyZzMsIGJ5dGUyICBEZXNpcmVkIGtleWJvYXJkIGxpZ2h0IGxldmVsLgotICovCi0KLQotZW51bSBrYmRfdGltZW91dF91bml0IHsKLQlLQkRfVElNRU9VVF9TRUNPTkRTID0gMCwKLQlLQkRfVElNRU9VVF9NSU5VVEVTLAotCUtCRF9USU1FT1VUX0hPVVJTLAotCUtCRF9USU1FT1VUX0RBWVMsCi19OwotCi1lbnVtIGtiZF9tb2RlX2JpdCB7Ci0JS0JEX01PREVfQklUX09GRiA9IDAsCi0JS0JEX01PREVfQklUX09OLAotCUtCRF9NT0RFX0JJVF9BTFMsCi0JS0JEX01PREVfQklUX1RSSUdHRVJfQUxTLAotCUtCRF9NT0RFX0JJVF9UUklHR0VSLAotCUtCRF9NT0RFX0JJVF9UUklHR0VSXzI1LAotCUtCRF9NT0RFX0JJVF9UUklHR0VSXzUwLAotCUtCRF9NT0RFX0JJVF9UUklHR0VSXzc1LAotCUtCRF9NT0RFX0JJVF9UUklHR0VSXzEwMCwKLX07Ci0KLSNkZWZpbmUga2JkX2lzX2Fsc19tb2RlX2JpdChiaXQpIFwKLQkoKGJpdCkgPT0gS0JEX01PREVfQklUX0FMUyB8fCAoYml0KSA9PSBLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFMpCi0jZGVmaW5lIGtiZF9pc190cmlnZ2VyX21vZGVfYml0KGJpdCkgXAotCSgoYml0KSA+PSBLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFMgJiYgKGJpdCkgPD0gS0JEX01PREVfQklUX1RSSUdHRVJfMTAwKQotI2RlZmluZSBrYmRfaXNfbGV2ZWxfbW9kZV9iaXQoYml0KSBcCi0JKChiaXQpID49IEtCRF9NT0RFX0JJVF9UUklHR0VSXzI1ICYmIChiaXQpIDw9IEtCRF9NT0RFX0JJVF9UUklHR0VSXzEwMCkKLQotc3RydWN0IGtiZF9pbmZvIHsKLQl1MTYgbW9kZXM7Ci0JdTggdHlwZTsKLQl1OCB0cmlnZ2VyczsKLQl1OCBsZXZlbHM7Ci0JdTggc2Vjb25kczsKLQl1OCBtaW51dGVzOwotCXU4IGhvdXJzOwotCXU4IGRheXM7Ci19OwotCi1zdHJ1Y3Qga2JkX3N0YXRlIHsKLQl1OCBtb2RlX2JpdDsKLQl1OCB0cmlnZ2VyczsKLQl1OCB0aW1lb3V0X3ZhbHVlOwotCXU4IHRpbWVvdXRfdW5pdDsKLQl1OCBhbHNfc2V0dGluZzsKLQl1OCBhbHNfdmFsdWU7Ci0JdTggbGV2ZWw7Ci19OwotCi1zdGF0aWMgY29uc3QgaW50IGtiZF90b2tlbnNbXSA9IHsKLQlLQkRfTEVEX09GRl9UT0tFTiwKLQlLQkRfTEVEX0FVVE9fMjVfVE9LRU4sCi0JS0JEX0xFRF9BVVRPXzUwX1RPS0VOLAotCUtCRF9MRURfQVVUT183NV9UT0tFTiwKLQlLQkRfTEVEX0FVVE9fMTAwX1RPS0VOLAotCUtCRF9MRURfT05fVE9LRU4sCi19OwotCi1zdGF0aWMgdTE2IGtiZF90b2tlbl9iaXRzOwotCi1zdGF0aWMgc3RydWN0IGtiZF9pbmZvIGtiZF9pbmZvOwotc3RhdGljIGJvb2wga2JkX2Fsc19zdXBwb3J0ZWQ7Ci1zdGF0aWMgYm9vbCBrYmRfdHJpZ2dlcnNfc3VwcG9ydGVkOwotCi1zdGF0aWMgdTgga2JkX21vZGVfbGV2ZWxzWzE2XTsKLXN0YXRpYyBpbnQga2JkX21vZGVfbGV2ZWxzX2NvdW50OwotCi1zdGF0aWMgdTgga2JkX3ByZXZpb3VzX2xldmVsOwotc3RhdGljIHU4IGtiZF9wcmV2aW91c19tb2RlX2JpdDsKLQotc3RhdGljIGJvb2wga2JkX2xlZF9wcmVzZW50OwotCi0vKgotICogTk9URTogdGhlcmUgYXJlIHRocmVlIHdheXMgdG8gc2V0IHRoZSBrZXlib2FyZCBiYWNrbGlnaHQgbGV2ZWwuCi0gKiBGaXJzdCwgdmlhIGtiZF9zdGF0ZS5tb2RlX2JpdCAoYXNzaWduaW5nIEtCRF9NT0RFX0JJVF9UUklHR0VSXyogdmFsdWUpLgotICogU2Vjb25kLCB2aWEga2JkX3N0YXRlLmxldmVsIChhc3NpZ25pbmcgbnVtZXJpY2FsIHZhbHVlIDw9IGtiZF9pbmZvLmxldmVscykuCi0gKiBUaGlyZCwgdmlhIFNNQklPUyB0b2tlbnMgKEtCRF9MRURfKiBpbiBrYmRfdG9rZW5zKQotICoKLSAqIFRoZXJlIGFyZSBsYXB0b3BzIHdoaWNoIHN1cHBvcnQgb25seSBvbmUgb2YgdGhlc2UgbWV0aG9kcy4gSWYgd2Ugd2FudCB0bwotICogc3VwcG9ydCBhcyBtYW55IG1hY2hpbmVzIGFzIHBvc3NpYmxlIHdlIG5lZWQgdG8gaW1wbGVtZW50IGFsbCB0aHJlZSBtZXRob2RzLgotICogVGhlIGZpcnN0IHR3byBtZXRob2RzIHVzZSB0aGUga2JkX3N0YXRlIHN0cnVjdHVyZS4gVGhlIHRoaXJkIHVzZXMgU01CSU9TCi0gKiB0b2tlbnMuIElmIGtiZF9pbmZvLmxldmVscyA9PSAwLCB0aGUgbWFjaGluZSBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgdGhlCi0gKiBrZXlib2FyZCBiYWNrbGlnaHQgbGV2ZWwgdmlhIGtiZF9zdGF0ZS5sZXZlbC4KLSAqLwotCi1zdGF0aWMgaW50IGtiZF9nZXRfaW5mbyhzdHJ1Y3Qga2JkX2luZm8gKmluZm8pCi17Ci0JdTggdW5pdHM7Ci0JaW50IHJldDsKLQotCWdldF9idWZmZXIoKTsKLQotCWJ1ZmZlci0+aW5wdXRbMF0gPSAweDA7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCA0LCAxMSk7Ci0JcmV0ID0gYnVmZmVyLT5vdXRwdXRbMF07Ci0KLQlpZiAocmV0KSB7Ci0JCXJldCA9IGRlbGxfc21pX2Vycm9yKHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWluZm8tPm1vZGVzID0gYnVmZmVyLT5vdXRwdXRbMV0gJiAweEZGRkY7Ci0JaW5mby0+dHlwZSA9IChidWZmZXItPm91dHB1dFsxXSA+PiAyNCkgJiAweEZGOwotCWluZm8tPnRyaWdnZXJzID0gYnVmZmVyLT5vdXRwdXRbMl0gJiAweEZGOwotCXVuaXRzID0gKGJ1ZmZlci0+b3V0cHV0WzJdID4+IDgpICYgMHhGRjsKLQlpbmZvLT5sZXZlbHMgPSAoYnVmZmVyLT5vdXRwdXRbMl0gPj4gMTYpICYgMHhGRjsKLQotCWlmICh1bml0cyAmIEJJVCgwKSkKLQkJaW5mby0+c2Vjb25kcyA9IChidWZmZXItPm91dHB1dFszXSA+PiAwKSAmIDB4RkY7Ci0JaWYgKHVuaXRzICYgQklUKDEpKQotCQlpbmZvLT5taW51dGVzID0gKGJ1ZmZlci0+b3V0cHV0WzNdID4+IDgpICYgMHhGRjsKLQlpZiAodW5pdHMgJiBCSVQoMikpCi0JCWluZm8tPmhvdXJzID0gKGJ1ZmZlci0+b3V0cHV0WzNdID4+IDE2KSAmIDB4RkY7Ci0JaWYgKHVuaXRzICYgQklUKDMpKQotCQlpbmZvLT5kYXlzID0gKGJ1ZmZlci0+b3V0cHV0WzNdID4+IDI0KSAmIDB4RkY7Ci0KLSBvdXQ6Ci0JcmVsZWFzZV9idWZmZXIoKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGtiZF9nZXRfbWF4X2xldmVsKHZvaWQpCi17Ci0JaWYgKGtiZF9pbmZvLmxldmVscyAhPSAwKQotCQlyZXR1cm4ga2JkX2luZm8ubGV2ZWxzOwotCWlmIChrYmRfbW9kZV9sZXZlbHNfY291bnQgPiAwKQotCQlyZXR1cm4ga2JkX21vZGVfbGV2ZWxzX2NvdW50IC0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBrYmRfZ2V0X2xldmVsKHN0cnVjdCBrYmRfc3RhdGUgKnN0YXRlKQotewotCWludCBpOwotCi0JaWYgKGtiZF9pbmZvLmxldmVscyAhPSAwKQotCQlyZXR1cm4gc3RhdGUtPmxldmVsOwotCi0JaWYgKGtiZF9tb2RlX2xldmVsc19jb3VudCA+IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IGtiZF9tb2RlX2xldmVsc19jb3VudDsgKytpKQotCQkJaWYgKGtiZF9tb2RlX2xldmVsc1tpXSA9PSBzdGF0ZS0+bW9kZV9iaXQpCi0JCQkJcmV0dXJuIGk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGtiZF9zZXRfbGV2ZWwoc3RydWN0IGtiZF9zdGF0ZSAqc3RhdGUsIHU4IGxldmVsKQotewotCWlmIChrYmRfaW5mby5sZXZlbHMgIT0gMCkgewotCQlpZiAobGV2ZWwgIT0gMCkKLQkJCWtiZF9wcmV2aW91c19sZXZlbCA9IGxldmVsOwotCQlpZiAoc3RhdGUtPmxldmVsID09IGxldmVsKQotCQkJcmV0dXJuIDA7Ci0JCXN0YXRlLT5sZXZlbCA9IGxldmVsOwotCQlpZiAobGV2ZWwgIT0gMCAmJiBzdGF0ZS0+bW9kZV9iaXQgPT0gS0JEX01PREVfQklUX09GRikKLQkJCXN0YXRlLT5tb2RlX2JpdCA9IGtiZF9wcmV2aW91c19tb2RlX2JpdDsKLQkJZWxzZSBpZiAobGV2ZWwgPT0gMCAmJiBzdGF0ZS0+bW9kZV9iaXQgIT0gS0JEX01PREVfQklUX09GRikgewotCQkJa2JkX3ByZXZpb3VzX21vZGVfYml0ID0gc3RhdGUtPm1vZGVfYml0OwotCQkJc3RhdGUtPm1vZGVfYml0ID0gS0JEX01PREVfQklUX09GRjsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoa2JkX21vZGVfbGV2ZWxzX2NvdW50ID4gMCAmJiBsZXZlbCA8IGtiZF9tb2RlX2xldmVsc19jb3VudCkgewotCQlpZiAobGV2ZWwgIT0gMCkKLQkJCWtiZF9wcmV2aW91c19sZXZlbCA9IGxldmVsOwotCQlzdGF0ZS0+bW9kZV9iaXQgPSBrYmRfbW9kZV9sZXZlbHNbbGV2ZWxdOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBrYmRfZ2V0X3N0YXRlKHN0cnVjdCBrYmRfc3RhdGUgKnN0YXRlKQotewotCWludCByZXQ7Ci0KLQlnZXRfYnVmZmVyKCk7Ci0KLQlidWZmZXItPmlucHV0WzBdID0gMHgxOwotCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgNCwgMTEpOwotCXJldCA9IGJ1ZmZlci0+b3V0cHV0WzBdOwotCi0JaWYgKHJldCkgewotCQlyZXQgPSBkZWxsX3NtaV9lcnJvcihyZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzdGF0ZS0+bW9kZV9iaXQgPSBmZnMoYnVmZmVyLT5vdXRwdXRbMV0gJiAweEZGRkYpOwotCWlmIChzdGF0ZS0+bW9kZV9iaXQgIT0gMCkKLQkJc3RhdGUtPm1vZGVfYml0LS07Ci0KLQlzdGF0ZS0+dHJpZ2dlcnMgPSAoYnVmZmVyLT5vdXRwdXRbMV0gPj4gMTYpICYgMHhGRjsKLQlzdGF0ZS0+dGltZW91dF92YWx1ZSA9IChidWZmZXItPm91dHB1dFsxXSA+PiAyNCkgJiAweDNGOwotCXN0YXRlLT50aW1lb3V0X3VuaXQgPSAoYnVmZmVyLT5vdXRwdXRbMV0gPj4gMzApICYgMHgzOwotCXN0YXRlLT5hbHNfc2V0dGluZyA9IGJ1ZmZlci0+b3V0cHV0WzJdICYgMHhGRjsKLQlzdGF0ZS0+YWxzX3ZhbHVlID0gKGJ1ZmZlci0+b3V0cHV0WzJdID4+IDgpICYgMHhGRjsKLQlzdGF0ZS0+bGV2ZWwgPSAoYnVmZmVyLT5vdXRwdXRbMl0gPj4gMTYpICYgMHhGRjsKLQotIG91dDoKLQlyZWxlYXNlX2J1ZmZlcigpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQga2JkX3NldF9zdGF0ZShzdHJ1Y3Qga2JkX3N0YXRlICpzdGF0ZSkKLXsKLQlpbnQgcmV0OwotCi0JZ2V0X2J1ZmZlcigpOwotCWJ1ZmZlci0+aW5wdXRbMF0gPSAweDI7Ci0JYnVmZmVyLT5pbnB1dFsxXSA9IEJJVChzdGF0ZS0+bW9kZV9iaXQpICYgMHhGRkZGOwotCWJ1ZmZlci0+aW5wdXRbMV0gfD0gKHN0YXRlLT50cmlnZ2VycyAmIDB4RkYpIDw8IDE2OwotCWJ1ZmZlci0+aW5wdXRbMV0gfD0gKHN0YXRlLT50aW1lb3V0X3ZhbHVlICYgMHgzRikgPDwgMjQ7Ci0JYnVmZmVyLT5pbnB1dFsxXSB8PSAoc3RhdGUtPnRpbWVvdXRfdW5pdCAmIDB4MykgPDwgMzA7Ci0JYnVmZmVyLT5pbnB1dFsyXSA9IHN0YXRlLT5hbHNfc2V0dGluZyAmIDB4RkY7Ci0JYnVmZmVyLT5pbnB1dFsyXSB8PSAoc3RhdGUtPmxldmVsICYgMHhGRikgPDwgMTY7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCA0LCAxMSk7Ci0JcmV0ID0gYnVmZmVyLT5vdXRwdXRbMF07Ci0JcmVsZWFzZV9idWZmZXIoKTsKLQotCXJldHVybiBkZWxsX3NtaV9lcnJvcihyZXQpOwotfQotCi1zdGF0aWMgaW50IGtiZF9zZXRfc3RhdGVfc2FmZShzdHJ1Y3Qga2JkX3N0YXRlICpzdGF0ZSwgc3RydWN0IGtiZF9zdGF0ZSAqb2xkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBrYmRfc2V0X3N0YXRlKHN0YXRlKTsKLQlpZiAocmV0ID09IDApCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBXaGVuIHNldHRpbmcgdGhlIG5ldyBzdGF0ZSBmYWlscyx0cnkgdG8gcmVzdG9yZSB0aGUgcHJldmlvdXMgb25lLgotCSAqIFRoaXMgaXMgbmVlZGVkIG9uIHNvbWUgbWFjaGluZXMgd2hlcmUgQklPUyBzZXRzIGEgZGVmYXVsdCBzdGF0ZSB3aGVuCi0JICogc2V0dGluZyBhIG5ldyBzdGF0ZSBmYWlscy4gVGhpcyBkZWZhdWx0IHN0YXRlIGNvdWxkIGJlIGFsbCBvZmYuCi0JICovCi0KLQlpZiAoa2JkX3NldF9zdGF0ZShvbGQpKQotCQlwcl9lcnIoIlNldHRpbmcgb2xkIHByZXZpb3VzIGtleWJvYXJkIHN0YXRlIGZhaWxlZFxuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGtiZF9zZXRfdG9rZW5fYml0KHU4IGJpdCkKLXsKLQlpbnQgaWQ7Ci0JaW50IHJldDsKLQotCWlmIChiaXQgPj0gQVJSQVlfU0laRShrYmRfdG9rZW5zKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZCA9IGZpbmRfdG9rZW5faWQoa2JkX3Rva2Vuc1tiaXRdKTsKLQlpZiAoaWQgPT0gLTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZ2V0X2J1ZmZlcigpOwotCWJ1ZmZlci0+aW5wdXRbMF0gPSBkYV90b2tlbnNbaWRdLmxvY2F0aW9uOwotCWJ1ZmZlci0+aW5wdXRbMV0gPSBkYV90b2tlbnNbaWRdLnZhbHVlOwotCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMSwgMCk7Ci0JcmV0ID0gYnVmZmVyLT5vdXRwdXRbMF07Ci0JcmVsZWFzZV9idWZmZXIoKTsKLQotCXJldHVybiBkZWxsX3NtaV9lcnJvcihyZXQpOwotfQotCi1zdGF0aWMgaW50IGtiZF9nZXRfdG9rZW5fYml0KHU4IGJpdCkKLXsKLQlpbnQgaWQ7Ci0JaW50IHJldDsKLQlpbnQgdmFsOwotCi0JaWYgKGJpdCA+PSBBUlJBWV9TSVpFKGtiZF90b2tlbnMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlkID0gZmluZF90b2tlbl9pZChrYmRfdG9rZW5zW2JpdF0pOwotCWlmIChpZCA9PSAtMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlnZXRfYnVmZmVyKCk7Ci0JYnVmZmVyLT5pbnB1dFswXSA9IGRhX3Rva2Vuc1tpZF0ubG9jYXRpb247Ci0JZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAwLCAwKTsKLQlyZXQgPSBidWZmZXItPm91dHB1dFswXTsKLQl2YWwgPSBidWZmZXItPm91dHB1dFsxXTsKLQlyZWxlYXNlX2J1ZmZlcigpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIGRlbGxfc21pX2Vycm9yKHJldCk7Ci0KLQlyZXR1cm4gKHZhbCA9PSBkYV90b2tlbnNbaWRdLnZhbHVlKTsKLX0KLQotc3RhdGljIGludCBrYmRfZ2V0X2ZpcnN0X2FjdGl2ZV90b2tlbl9iaXQodm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa2JkX3Rva2Vucyk7ICsraSkgewotCQlyZXQgPSBrYmRfZ2V0X3Rva2VuX2JpdChpKTsKLQkJaWYgKHJldCA9PSAxKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBrYmRfZ2V0X3ZhbGlkX3Rva2VuX2NvdW50cyh2b2lkKQotewotCXJldHVybiBod2VpZ2h0MTYoa2JkX3Rva2VuX2JpdHMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBrYmRfaW5pdF9pbmZvKHZvaWQpCi17Ci0Jc3RydWN0IGtiZF9zdGF0ZSBzdGF0ZTsKLQlpbnQgcmV0OwotCWludCBpOwotCi0JcmV0ID0ga2JkX2dldF9pbmZvKCZrYmRfaW5mbyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWtiZF9nZXRfc3RhdGUoJnN0YXRlKTsKLQotCS8qIE5PVEU6IHRpbWVvdXQgdmFsdWUgaXMgc3RvcmVkIGluIDYgYml0cyBzbyBtYXggdmFsdWUgaXMgNjMgKi8KLQlpZiAoa2JkX2luZm8uc2Vjb25kcyA+IDYzKQotCQlrYmRfaW5mby5zZWNvbmRzID0gNjM7Ci0JaWYgKGtiZF9pbmZvLm1pbnV0ZXMgPiA2MykKLQkJa2JkX2luZm8ubWludXRlcyA9IDYzOwotCWlmIChrYmRfaW5mby5ob3VycyA+IDYzKQotCQlrYmRfaW5mby5ob3VycyA9IDYzOwotCWlmIChrYmRfaW5mby5kYXlzID4gNjMpCi0JCWtiZF9pbmZvLmRheXMgPSA2MzsKLQotCS8qIE5PVEU6IE9uIHRlc3RlZCBtYWNoaW5lcyBPTiBtb2RlIGRpZCBub3Qgd29yayBhbmQgY2F1c2VkCi0JICogICAgICAgcHJvYmxlbXMgKHR1cm5lZCBiYWNrbGlnaHQgb2ZmKSBzbyBkbyBub3QgdXNlIGl0Ci0JICovCi0Ja2JkX2luZm8ubW9kZXMgJj0gfkJJVChLQkRfTU9ERV9CSVRfT04pOwotCi0Ja2JkX3ByZXZpb3VzX2xldmVsID0ga2JkX2dldF9sZXZlbCgmc3RhdGUpOwotCWtiZF9wcmV2aW91c19tb2RlX2JpdCA9IHN0YXRlLm1vZGVfYml0OwotCi0JaWYgKGtiZF9wcmV2aW91c19sZXZlbCA9PSAwICYmIGtiZF9nZXRfbWF4X2xldmVsKCkgIT0gMCkKLQkJa2JkX3ByZXZpb3VzX2xldmVsID0gMTsKLQotCWlmIChrYmRfcHJldmlvdXNfbW9kZV9iaXQgPT0gS0JEX01PREVfQklUX09GRikgewotCQlrYmRfcHJldmlvdXNfbW9kZV9iaXQgPQotCQkJZmZzKGtiZF9pbmZvLm1vZGVzICYgfkJJVChLQkRfTU9ERV9CSVRfT0ZGKSk7Ci0JCWlmIChrYmRfcHJldmlvdXNfbW9kZV9iaXQgIT0gMCkKLQkJCWtiZF9wcmV2aW91c19tb2RlX2JpdC0tOwotCX0KLQotCWlmIChrYmRfaW5mby5tb2RlcyAmIChCSVQoS0JEX01PREVfQklUX0FMUykgfAotCQkJICAgICAgQklUKEtCRF9NT0RFX0JJVF9UUklHR0VSX0FMUykpKQotCQlrYmRfYWxzX3N1cHBvcnRlZCA9IHRydWU7Ci0KLQlpZiAoa2JkX2luZm8ubW9kZXMgJiAoCi0JICAgIEJJVChLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFMpIHwgQklUKEtCRF9NT0RFX0JJVF9UUklHR0VSKSB8Ci0JICAgIEJJVChLQkRfTU9ERV9CSVRfVFJJR0dFUl8yNSkgfCBCSVQoS0JEX01PREVfQklUX1RSSUdHRVJfNTApIHwKLQkgICAgQklUKEtCRF9NT0RFX0JJVF9UUklHR0VSXzc1KSB8IEJJVChLQkRfTU9ERV9CSVRfVFJJR0dFUl8xMDApCi0JICAgKSkKLQkJa2JkX3RyaWdnZXJzX3N1cHBvcnRlZCA9IHRydWU7Ci0KLQkvKiBrYmRfbW9kZV9sZXZlbHNbMF0gaXMgcmVzZXJ2ZWQsIHNlZSBiZWxvdyAqLwotCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQotCQlpZiAoa2JkX2lzX2xldmVsX21vZGVfYml0KGkpICYmIChCSVQoaSkgJiBrYmRfaW5mby5tb2RlcykpCi0JCQlrYmRfbW9kZV9sZXZlbHNbMSArIGtiZF9tb2RlX2xldmVsc19jb3VudCsrXSA9IGk7Ci0KLQkvKgotCSAqIEZpbmQgdGhlIGZpcnN0IHN1cHBvcnRlZCBtb2RlIGFuZCBhc3NpZ24gdG8ga2JkX21vZGVfbGV2ZWxzWzBdLgotCSAqIFRoaXMgc2hvdWxkIGJlIDAgKG9mZiksIGJ1dCB3ZSBjYW5ub3QgZGVwZW5kIG9uIHRoZSBCSU9TIHRvCi0JICogc3VwcG9ydCAwLgotCSAqLwotCWlmIChrYmRfbW9kZV9sZXZlbHNfY291bnQgPiAwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7Ci0JCQlpZiAoQklUKGkpICYga2JkX2luZm8ubW9kZXMpIHsKLQkJCQlrYmRfbW9kZV9sZXZlbHNbMF0gPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWtiZF9tb2RlX2xldmVsc19jb3VudCsrOwotCX0KLQotCXJldHVybiAwOwotCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrYmRfaW5pdF90b2tlbnModm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtiZF90b2tlbnMpOyArK2kpCi0JCWlmIChmaW5kX3Rva2VuX2lkKGtiZF90b2tlbnNbaV0pICE9IC0xKQotCQkJa2JkX3Rva2VuX2JpdHMgfD0gQklUKGkpOwotfQotCi1zdGF0aWMgdm9pZCBrYmRfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBrYmRfaW5pdF9pbmZvKCk7Ci0Ja2JkX2luaXRfdG9rZW5zKCk7Ci0KLQlpZiAoa2JkX3Rva2VuX2JpdHMgIT0gMCB8fCByZXQgPT0gMCkKLQkJa2JkX2xlZF9wcmVzZW50ID0gdHJ1ZTsKLX0KLQotc3RhdGljIHNzaXplX3Qga2JkX2xlZF90aW1lb3V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGtiZF9zdGF0ZSBuZXdfc3RhdGU7Ci0Jc3RydWN0IGtiZF9zdGF0ZSBzdGF0ZTsKLQlib29sIGNvbnZlcnQ7Ci0JaW50IHZhbHVlOwotCWludCByZXQ7Ci0JY2hhciBjaDsKLQl1OCB1bml0OwotCWludCBpOwotCi0JcmV0ID0gc3NjYW5mKGJ1ZiwgIiVkICVjIiwgJnZhbHVlLCAmY2gpOwotCWlmIChyZXQgPCAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmIChyZXQgPT0gMSkKLQkJY2ggPSAncyc7Ci0KLQlpZiAodmFsdWUgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNvbnZlcnQgPSBmYWxzZTsKLQotCXN3aXRjaCAoY2gpIHsKLQljYXNlICdzJzoKLQkJaWYgKHZhbHVlID4ga2JkX2luZm8uc2Vjb25kcykKLQkJCWNvbnZlcnQgPSB0cnVlOwotCQl1bml0ID0gS0JEX1RJTUVPVVRfU0VDT05EUzsKLQkJYnJlYWs7Ci0JY2FzZSAnbSc6Ci0JCWlmICh2YWx1ZSA+IGtiZF9pbmZvLm1pbnV0ZXMpCi0JCQljb252ZXJ0ID0gdHJ1ZTsKLQkJdW5pdCA9IEtCRF9USU1FT1VUX01JTlVURVM7Ci0JCWJyZWFrOwotCWNhc2UgJ2gnOgotCQlpZiAodmFsdWUgPiBrYmRfaW5mby5ob3VycykKLQkJCWNvbnZlcnQgPSB0cnVlOwotCQl1bml0ID0gS0JEX1RJTUVPVVRfSE9VUlM7Ci0JCWJyZWFrOwotCWNhc2UgJ2QnOgotCQlpZiAodmFsdWUgPiBrYmRfaW5mby5kYXlzKQotCQkJY29udmVydCA9IHRydWU7Ci0JCXVuaXQgPSBLQkRfVElNRU9VVF9EQVlTOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAocXVpcmtzICYmIHF1aXJrcy0+bmVlZHNfa2JkX3RpbWVvdXRzKQotCQljb252ZXJ0ID0gdHJ1ZTsKLQotCWlmIChjb252ZXJ0KSB7Ci0JCS8qIENvbnZlcnQgdmFsdWUgZnJvbSBjdXJyZW50IHVuaXRzIHRvIHNlY29uZHMgKi8KLQkJc3dpdGNoICh1bml0KSB7Ci0JCWNhc2UgS0JEX1RJTUVPVVRfREFZUzoKLQkJCXZhbHVlICo9IDI0OwotCQljYXNlIEtCRF9USU1FT1VUX0hPVVJTOgotCQkJdmFsdWUgKj0gNjA7Ci0JCWNhc2UgS0JEX1RJTUVPVVRfTUlOVVRFUzoKLQkJCXZhbHVlICo9IDYwOwotCQkJdW5pdCA9IEtCRF9USU1FT1VUX1NFQ09ORFM7Ci0JCX0KLQotCQlpZiAocXVpcmtzICYmIHF1aXJrcy0+bmVlZHNfa2JkX3RpbWVvdXRzKSB7Ci0JCQlmb3IgKGkgPSAwOyBxdWlya3MtPmtiZF90aW1lb3V0c1tpXSAhPSAtMTsgaSsrKSB7Ci0JCQkJaWYgKHZhbHVlIDw9IHF1aXJrcy0+a2JkX3RpbWVvdXRzW2ldKSB7Ci0JCQkJCXZhbHVlID0gcXVpcmtzLT5rYmRfdGltZW91dHNbaV07Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmICh2YWx1ZSA8PSBrYmRfaW5mby5zZWNvbmRzICYmIGtiZF9pbmZvLnNlY29uZHMpIHsKLQkJCXVuaXQgPSBLQkRfVElNRU9VVF9TRUNPTkRTOwotCQl9IGVsc2UgaWYgKHZhbHVlIC8gNjAgPD0ga2JkX2luZm8ubWludXRlcyAmJiBrYmRfaW5mby5taW51dGVzKSB7Ci0JCQl2YWx1ZSAvPSA2MDsKLQkJCXVuaXQgPSBLQkRfVElNRU9VVF9NSU5VVEVTOwotCQl9IGVsc2UgaWYgKHZhbHVlIC8gKDYwICogNjApIDw9IGtiZF9pbmZvLmhvdXJzICYmIGtiZF9pbmZvLmhvdXJzKSB7Ci0JCQl2YWx1ZSAvPSAoNjAgKiA2MCk7Ci0JCQl1bml0ID0gS0JEX1RJTUVPVVRfSE9VUlM7Ci0JCX0gZWxzZSBpZiAodmFsdWUgLyAoNjAgKiA2MCAqIDI0KSA8PSBrYmRfaW5mby5kYXlzICYmIGtiZF9pbmZvLmRheXMpIHsKLQkJCXZhbHVlIC89ICg2MCAqIDYwICogMjQpOwotCQkJdW5pdCA9IEtCRF9USU1FT1VUX0RBWVM7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXJldCA9IGtiZF9nZXRfc3RhdGUoJnN0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbmV3X3N0YXRlID0gc3RhdGU7Ci0JbmV3X3N0YXRlLnRpbWVvdXRfdmFsdWUgPSB2YWx1ZTsKLQluZXdfc3RhdGUudGltZW91dF91bml0ID0gdW5pdDsKLQotCXJldCA9IGtiZF9zZXRfc3RhdGVfc2FmZSgmbmV3X3N0YXRlLCAmc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtiZF9sZWRfdGltZW91dF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qga2JkX3N0YXRlIHN0YXRlOwotCWludCByZXQ7Ci0JaW50IGxlbjsKLQotCXJldCA9IGtiZF9nZXRfc3RhdGUoJnN0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbGVuID0gc3ByaW50ZihidWYsICIlZCIsIHN0YXRlLnRpbWVvdXRfdmFsdWUpOwotCi0Jc3dpdGNoIChzdGF0ZS50aW1lb3V0X3VuaXQpIHsKLQljYXNlIEtCRF9USU1FT1VUX1NFQ09ORFM6Ci0JCXJldHVybiBsZW4gKyBzcHJpbnRmKGJ1ZitsZW4sICJzXG4iKTsKLQljYXNlIEtCRF9USU1FT1VUX01JTlVURVM6Ci0JCXJldHVybiBsZW4gKyBzcHJpbnRmKGJ1ZitsZW4sICJtXG4iKTsKLQljYXNlIEtCRF9USU1FT1VUX0hPVVJTOgotCQlyZXR1cm4gbGVuICsgc3ByaW50ZihidWYrbGVuLCAiaFxuIik7Ci0JY2FzZSBLQkRfVElNRU9VVF9EQVlTOgotCQlyZXR1cm4gbGVuICsgc3ByaW50ZihidWYrbGVuLCAiZFxuIik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHN0b3BfdGltZW91dCwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIGtiZF9sZWRfdGltZW91dF9zaG93LCBrYmRfbGVkX3RpbWVvdXRfc3RvcmUpOwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtiZF9sZWRfdHJpZ2dlcnNbXSA9IHsKLQkia2V5Ym9hcmQiLAotCSJ0b3VjaHBhZCIsCi0JLyoidHJhY2tzdGljayIqLyBOVUxMLCAvKiBOT1RFOiB0cmFja3N0aWNrIGlzIGp1c3QgYWxpYXMgZm9yIHRvdWNocGFkICovCi0JIm1vdXNlIiwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGtiZF9sZWRfdHJpZ2dlcnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBrYmRfc3RhdGUgbmV3X3N0YXRlOwotCXN0cnVjdCBrYmRfc3RhdGUgc3RhdGU7Ci0JYm9vbCB0cmlnZ2Vyc19lbmFibGVkID0gZmFsc2U7Ci0JYm9vbCBhbHNfZW5hYmxlZCA9IGZhbHNlOwotCWJvb2wgZGlzYWJsZV9hbHMgPSBmYWxzZTsKLQlib29sIGVuYWJsZV9hbHMgPSBmYWxzZTsKLQlpbnQgdHJpZ2dlcl9iaXQgPSAtMTsKLQljaGFyIHRyaWdnZXJbMjFdOwotCWludCBpLCByZXQ7Ci0KLQlyZXQgPSBzc2NhbmYoYnVmLCAiJTIwcyIsIHRyaWdnZXIpOwotCWlmIChyZXQgIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodHJpZ2dlclswXSAhPSAnKycgJiYgdHJpZ2dlclswXSAhPSAnLScpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0ga2JkX2dldF9zdGF0ZSgmc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoa2JkX2Fsc19zdXBwb3J0ZWQpCi0JCWFsc19lbmFibGVkID0ga2JkX2lzX2Fsc19tb2RlX2JpdChzdGF0ZS5tb2RlX2JpdCk7Ci0KLQlpZiAoa2JkX3RyaWdnZXJzX3N1cHBvcnRlZCkKLQkJdHJpZ2dlcnNfZW5hYmxlZCA9IGtiZF9pc190cmlnZ2VyX21vZGVfYml0KHN0YXRlLm1vZGVfYml0KTsKLQotCWlmIChrYmRfYWxzX3N1cHBvcnRlZCkgewotCQlpZiAoc3RyY21wKHRyaWdnZXIsICIrYWxzIikgPT0gMCkgewotCQkJaWYgKGFsc19lbmFibGVkKQotCQkJCXJldHVybiBjb3VudDsKLQkJCWVuYWJsZV9hbHMgPSB0cnVlOwotCQl9IGVsc2UgaWYgKHN0cmNtcCh0cmlnZ2VyLCAiLWFscyIpID09IDApIHsKLQkJCWlmICghYWxzX2VuYWJsZWQpCi0JCQkJcmV0dXJuIGNvdW50OwotCQkJZGlzYWJsZV9hbHMgPSB0cnVlOwotCQl9Ci0JfQotCi0JaWYgKGVuYWJsZV9hbHMgfHwgZGlzYWJsZV9hbHMpIHsKLQkJbmV3X3N0YXRlID0gc3RhdGU7Ci0JCWlmIChlbmFibGVfYWxzKSB7Ci0JCQlpZiAodHJpZ2dlcnNfZW5hYmxlZCkKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFM7Ci0JCQllbHNlCi0JCQkJbmV3X3N0YXRlLm1vZGVfYml0ID0gS0JEX01PREVfQklUX0FMUzsKLQkJfSBlbHNlIHsKLQkJCWlmICh0cmlnZ2Vyc19lbmFibGVkKSB7Ci0JCQkJbmV3X3N0YXRlLm1vZGVfYml0ID0gS0JEX01PREVfQklUX1RSSUdHRVI7Ci0JCQkJa2JkX3NldF9sZXZlbCgmbmV3X3N0YXRlLCBrYmRfcHJldmlvdXNfbGV2ZWwpOwotCQkJfSBlbHNlIHsKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfT047Ci0JCQl9Ci0JCX0KLQkJaWYgKCEoa2JkX2luZm8ubW9kZXMgJiBCSVQobmV3X3N0YXRlLm1vZGVfYml0KSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0ID0ga2JkX3NldF9zdGF0ZV9zYWZlKCZuZXdfc3RhdGUsICZzdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlrYmRfcHJldmlvdXNfbW9kZV9iaXQgPSBuZXdfc3RhdGUubW9kZV9iaXQ7Ci0JCXJldHVybiBjb3VudDsKLQl9Ci0KLQlpZiAoa2JkX3RyaWdnZXJzX3N1cHBvcnRlZCkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShrYmRfbGVkX3RyaWdnZXJzKTsgKytpKSB7Ci0JCQlpZiAoIShrYmRfaW5mby50cmlnZ2VycyAmIEJJVChpKSkpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWtiZF9sZWRfdHJpZ2dlcnNbaV0pCi0JCQkJY29udGludWU7Ci0JCQlpZiAoc3RyY21wKHRyaWdnZXIrMSwga2JkX2xlZF90cmlnZ2Vyc1tpXSkgIT0gMCkKLQkJCQljb250aW51ZTsKLQkJCWlmICh0cmlnZ2VyWzBdID09ICcrJyAmJgotCQkJICAgIHRyaWdnZXJzX2VuYWJsZWQgJiYgKHN0YXRlLnRyaWdnZXJzICYgQklUKGkpKSkKLQkJCQlyZXR1cm4gY291bnQ7Ci0JCQlpZiAodHJpZ2dlclswXSA9PSAnLScgJiYKLQkJCSAgICAoIXRyaWdnZXJzX2VuYWJsZWQgfHwgIShzdGF0ZS50cmlnZ2VycyAmIEJJVChpKSkpKQotCQkJCXJldHVybiBjb3VudDsKLQkJCXRyaWdnZXJfYml0ID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHRyaWdnZXJfYml0ICE9IC0xKSB7Ci0JCW5ld19zdGF0ZSA9IHN0YXRlOwotCQlpZiAodHJpZ2dlclswXSA9PSAnKycpCi0JCQluZXdfc3RhdGUudHJpZ2dlcnMgfD0gQklUKHRyaWdnZXJfYml0KTsKLQkJZWxzZSB7Ci0JCQluZXdfc3RhdGUudHJpZ2dlcnMgJj0gfkJJVCh0cmlnZ2VyX2JpdCk7Ci0JCQkvKiBOT1RFOiB0cmFja3N0aWNrIGJpdCAoMikgbXVzdCBiZSBkaXNhYmxlZCB3aGVuCi0JCQkgKiAgICAgICBkaXNhYmxpbmcgdG91Y2hwYWQgYml0ICgxKSwgb3RoZXJ3aXNlIHRvdWNocGFkCi0JCQkgKiAgICAgICBiaXQgKDEpIHdpbGwgbm90IGJlIGRpc2FibGVkICovCi0JCQlpZiAodHJpZ2dlcl9iaXQgPT0gMSkKLQkJCQluZXdfc3RhdGUudHJpZ2dlcnMgJj0gfkJJVCgyKTsKLQkJfQotCQlpZiAoKGtiZF9pbmZvLnRyaWdnZXJzICYgbmV3X3N0YXRlLnRyaWdnZXJzKSAhPQotCQkgICAgbmV3X3N0YXRlLnRyaWdnZXJzKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChuZXdfc3RhdGUudHJpZ2dlcnMgJiYgIXRyaWdnZXJzX2VuYWJsZWQpIHsKLQkJCWlmIChhbHNfZW5hYmxlZCkKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFM7Ci0JCQllbHNlIHsKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfVFJJR0dFUjsKLQkJCQlrYmRfc2V0X2xldmVsKCZuZXdfc3RhdGUsIGtiZF9wcmV2aW91c19sZXZlbCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobmV3X3N0YXRlLnRyaWdnZXJzID09IDApIHsKLQkJCWlmIChhbHNfZW5hYmxlZCkKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfQUxTOwotCQkJZWxzZQotCQkJCWtiZF9zZXRfbGV2ZWwoJm5ld19zdGF0ZSwgMCk7Ci0JCX0KLQkJaWYgKCEoa2JkX2luZm8ubW9kZXMgJiBCSVQobmV3X3N0YXRlLm1vZGVfYml0KSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0ID0ga2JkX3NldF9zdGF0ZV9zYWZlKCZuZXdfc3RhdGUsICZzdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlpZiAobmV3X3N0YXRlLm1vZGVfYml0ICE9IEtCRF9NT0RFX0JJVF9PRkYpCi0JCQlrYmRfcHJldmlvdXNfbW9kZV9iaXQgPSBuZXdfc3RhdGUubW9kZV9iaXQ7Ci0JCXJldHVybiBjb3VudDsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHNzaXplX3Qga2JkX2xlZF90cmlnZ2Vyc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGtiZF9zdGF0ZSBzdGF0ZTsKLQlib29sIHRyaWdnZXJzX2VuYWJsZWQ7Ci0JaW50IGxldmVsLCBpLCByZXQ7Ci0JaW50IGxlbiA9IDA7Ci0KLQlyZXQgPSBrYmRfZ2V0X3N0YXRlKCZzdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWxlbiA9IDA7Ci0KLQlpZiAoa2JkX3RyaWdnZXJzX3N1cHBvcnRlZCkgewotCQl0cmlnZ2Vyc19lbmFibGVkID0ga2JkX2lzX3RyaWdnZXJfbW9kZV9iaXQoc3RhdGUubW9kZV9iaXQpOwotCQlsZXZlbCA9IGtiZF9nZXRfbGV2ZWwoJnN0YXRlKTsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa2JkX2xlZF90cmlnZ2Vycyk7ICsraSkgewotCQkJaWYgKCEoa2JkX2luZm8udHJpZ2dlcnMgJiBCSVQoaSkpKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFrYmRfbGVkX3RyaWdnZXJzW2ldKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCh0cmlnZ2Vyc19lbmFibGVkIHx8IGxldmVsIDw9IDApICYmCi0JCQkgICAgKHN0YXRlLnRyaWdnZXJzICYgQklUKGkpKSkKLQkJCQlidWZbbGVuKytdID0gJysnOwotCQkJZWxzZQotCQkJCWJ1ZltsZW4rK10gPSAnLSc7Ci0JCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiJXMgIiwga2JkX2xlZF90cmlnZ2Vyc1tpXSk7Ci0JCX0KLQl9Ci0KLQlpZiAoa2JkX2Fsc19zdXBwb3J0ZWQpIHsKLQkJaWYgKGtiZF9pc19hbHNfbW9kZV9iaXQoc3RhdGUubW9kZV9iaXQpKQotCQkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIithbHMgIik7Ci0JCWVsc2UKLQkJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICItYWxzICIpOwotCX0KLQotCWlmIChsZW4pCi0JCWJ1ZltsZW4gLSAxXSA9ICdcbic7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoc3RhcnRfdHJpZ2dlcnMsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBrYmRfbGVkX3RyaWdnZXJzX3Nob3csIGtiZF9sZWRfdHJpZ2dlcnNfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdCBrYmRfbGVkX2Fsc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qga2JkX3N0YXRlIHN0YXRlOwotCXN0cnVjdCBrYmRfc3RhdGUgbmV3X3N0YXRlOwotCXU4IHNldHRpbmc7Ci0JaW50IHJldDsKLQotCXJldCA9IGtzdHJ0b3U4KGJ1ZiwgMTAsICZzZXR0aW5nKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0ga2JkX2dldF9zdGF0ZSgmc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQluZXdfc3RhdGUgPSBzdGF0ZTsKLQluZXdfc3RhdGUuYWxzX3NldHRpbmcgPSBzZXR0aW5nOwotCi0JcmV0ID0ga2JkX3NldF9zdGF0ZV9zYWZlKCZuZXdfc3RhdGUsICZzdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qga2JkX2xlZF9hbHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qga2JkX3N0YXRlIHN0YXRlOwotCWludCByZXQ7Ci0KLQlyZXQgPSBrYmRfZ2V0X3N0YXRlKCZzdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzdGF0ZS5hbHNfc2V0dGluZyk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihhbHNfc2V0dGluZywgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIGtiZF9sZWRfYWxzX3Nob3csIGtiZF9sZWRfYWxzX3N0b3JlKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmtiZF9sZWRfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfc3RvcF90aW1lb3V0LmF0dHIsCi0JJmRldl9hdHRyX3N0YXJ0X3RyaWdnZXJzLmF0dHIsCi0JJmRldl9hdHRyX2Fsc19zZXR0aW5nLmF0dHIsCi0JTlVMTCwKLX07Ci1BVFRSSUJVVEVfR1JPVVBTKGtiZF9sZWQpOwotCi1zdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBrYmRfbGVkX2xldmVsX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKLXsKLQlpbnQgcmV0OwotCXUxNiBudW07Ci0Jc3RydWN0IGtiZF9zdGF0ZSBzdGF0ZTsKLQotCWlmIChrYmRfZ2V0X21heF9sZXZlbCgpKSB7Ci0JCXJldCA9IGtiZF9nZXRfc3RhdGUoJnN0YXRlKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAwOwotCQlyZXQgPSBrYmRfZ2V0X2xldmVsKCZzdGF0ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIDA7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGtiZF9nZXRfdmFsaWRfdG9rZW5fY291bnRzKCkpIHsKLQkJcmV0ID0ga2JkX2dldF9maXJzdF9hY3RpdmVfdG9rZW5fYml0KCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIDA7Ci0JCWZvciAobnVtID0ga2JkX3Rva2VuX2JpdHM7IG51bSAhPSAwICYmIHJldCA+IDA7IC0tcmV0KQotCQkJbnVtICY9IG51bSAtIDE7IC8qIGNsZWFyIHRoZSBmaXJzdCBiaXQgc2V0ICovCi0JCWlmIChudW0gPT0gMCkKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gZmZzKG51bSkgLSAxOwotCX0KLQotCXByX3dhcm4oIktleWJvYXJkIGJyaWdodG5lc3MgbGV2ZWwgY29udHJvbCBub3Qgc3VwcG9ydGVkXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQga2JkX2xlZF9sZXZlbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQotewotCXN0cnVjdCBrYmRfc3RhdGUgc3RhdGU7Ci0Jc3RydWN0IGtiZF9zdGF0ZSBuZXdfc3RhdGU7Ci0JdTE2IG51bTsKLQotCWlmIChrYmRfZ2V0X21heF9sZXZlbCgpKSB7Ci0JCWlmIChrYmRfZ2V0X3N0YXRlKCZzdGF0ZSkpCi0JCQlyZXR1cm47Ci0JCW5ld19zdGF0ZSA9IHN0YXRlOwotCQlpZiAoa2JkX3NldF9sZXZlbCgmbmV3X3N0YXRlLCB2YWx1ZSkpCi0JCQlyZXR1cm47Ci0JCWtiZF9zZXRfc3RhdGVfc2FmZSgmbmV3X3N0YXRlLCAmc3RhdGUpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGtiZF9nZXRfdmFsaWRfdG9rZW5fY291bnRzKCkpIHsKLQkJZm9yIChudW0gPSBrYmRfdG9rZW5fYml0czsgbnVtICE9IDAgJiYgdmFsdWUgPiAwOyAtLXZhbHVlKQotCQkJbnVtICY9IG51bSAtIDE7IC8qIGNsZWFyIHRoZSBmaXJzdCBiaXQgc2V0ICovCi0JCWlmIChudW0gPT0gMCkKLQkJCXJldHVybjsKLQkJa2JkX3NldF90b2tlbl9iaXQoZmZzKG51bSkgLSAxKTsKLQkJcmV0dXJuOwotCX0KLQotCXByX3dhcm4oIktleWJvYXJkIGJyaWdodG5lc3MgbGV2ZWwgY29udHJvbCBub3Qgc3VwcG9ydGVkXG4iKTsKLX0KLQotc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYga2JkX2xlZCA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiZGVsbDo6a2JkX2JhY2tsaWdodCIsCi0JLmJyaWdodG5lc3Nfc2V0ID0ga2JkX2xlZF9sZXZlbF9zZXQsCi0JLmJyaWdodG5lc3NfZ2V0ID0ga2JkX2xlZF9sZXZlbF9nZXQsCi0JLmdyb3VwcyAgICAgICAgID0ga2JkX2xlZF9ncm91cHMsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBrYmRfbGVkX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWtiZF9pbml0KCk7Ci0JaWYgKCFrYmRfbGVkX3ByZXNlbnQpCi0JCXJldHVybiAtRU5PREVWOwotCWtiZF9sZWQubWF4X2JyaWdodG5lc3MgPSBrYmRfZ2V0X21heF9sZXZlbCgpOwotCWlmICgha2JkX2xlZC5tYXhfYnJpZ2h0bmVzcykgewotCQlrYmRfbGVkLm1heF9icmlnaHRuZXNzID0ga2JkX2dldF92YWxpZF90b2tlbl9jb3VudHMoKTsKLQkJaWYgKGtiZF9sZWQubWF4X2JyaWdodG5lc3MpCi0JCQlrYmRfbGVkLm1heF9icmlnaHRuZXNzLS07Ci0JfQotCXJldHVybiBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoZGV2LCAma2JkX2xlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJyaWdodG5lc3Nfc2V0X2V4aXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKLXsKLQkvKiBEb24ndCBjaGFuZ2UgYmFja2xpZ2h0IGxldmVsIG9uIGV4aXQgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIGtiZF9sZWRfZXhpdCh2b2lkKQotewotCWlmICgha2JkX2xlZF9wcmVzZW50KQotCQlyZXR1cm47Ci0Ja2JkX2xlZC5icmlnaHRuZXNzX3NldCA9IGJyaWdodG5lc3Nfc2V0X2V4aXQ7Ci0JbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmtiZF9sZWQpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBkZWxsX2luaXQodm9pZCkKIHsKIAlpbnQgbWF4X2ludGVuc2l0eSA9IDA7CkBAIC0xODc5LDggKzg0MSw2IEBACiAJaWYgKHF1aXJrcyAmJiBxdWlya3MtPnRvdWNocGFkX2xlZCkKIAkJdG91Y2hwYWRfbGVkX2luaXQoJnBsYXRmb3JtX2RldmljZS0+ZGV2KTsKIAotCWtiZF9sZWRfaW5pdCgmcGxhdGZvcm1fZGV2aWNlLT5kZXYpOwotCiAJZGVsbF9sYXB0b3BfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJkZWxsX2xhcHRvcCIsIE5VTEwpOwogCWlmIChkZWxsX2xhcHRvcF9kaXIgIT0gTlVMTCkKIAkJZGVidWdmc19jcmVhdGVfZmlsZSgicmZraWxsIiwgMDQ0NCwgZGVsbF9sYXB0b3BfZGlyLCBOVUxMLApAQCAtMTk0OCw3ICs5MDgsNiBAQAogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkZWxsX2xhcHRvcF9kaXIpOwogCWlmIChxdWlya3MgJiYgcXVpcmtzLT50b3VjaHBhZF9sZWQpCiAJCXRvdWNocGFkX2xlZF9leGl0KCk7Ci0Ja2JkX2xlZF9leGl0KCk7CiAJaTgwNDJfcmVtb3ZlX2ZpbHRlcihkZWxsX2xhcHRvcF9pODA0Ml9maWx0ZXIpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGVsbF9yZmtpbGxfd29yayk7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGRlbGxfYmFja2xpZ2h0X2RldmljZSk7CkBAIC0xOTY1LDcgKzkyNCw1IEBACiBtb2R1bGVfZXhpdChkZWxsX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPiIpOwotTU9EVUxFX0FVVEhPUigiR2FicmllbGUgTWF6em90dGEgPGdhYnJpZWxlLm16dEBnbWFpbC5jb20+Iik7Ci1NT0RVTEVfQVVUSE9SKCJQYWxpIFJvaMOhciA8cGFsaS5yb2hhckBnbWFpbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRlbGwgbGFwdG9wIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlcmNhcC9pbnRlbF9yYXBsLmMgYi9kcml2ZXJzL3Bvd2VyY2FwL2ludGVsX3JhcGwuYwppbmRleCBjNzE0NDNjLi45N2I1ZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyY2FwL2ludGVsX3JhcGwuYworKysgYi9kcml2ZXJzL3Bvd2VyY2FwL2ludGVsX3JhcGwuYwpAQCAtMTA0MSw2ICsxMDQxLDcgQEAKIAlSQVBMX0NQVSgweDQ1LCByYXBsX2RlZmF1bHRzX2NvcmUpLC8qIEhhc3dlbGwgVUxUICovCiAJUkFQTF9DUFUoMHg0QywgcmFwbF9kZWZhdWx0c19hdG9tKSwvKiBCcmFzd2VsbCAqLwogCVJBUExfQ1BVKDB4NEEsIHJhcGxfZGVmYXVsdHNfYXRvbSksLyogVGFuZ2llciAqLworCVJBUExfQ1BVKDB4NTYsIHJhcGxfZGVmYXVsdHNfY29yZSksLyogRnV0dXJlIFhlb24gKi8KIAlSQVBMX0NQVSgweDVBLCByYXBsX2RlZmF1bHRzX2F0b20pLC8qIEFubmlkYWxlICovCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggZTIyNTcxMS4uOWM0OGZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9nZXRfb3B0aW9uYWwpOwogCi0vKiBMb2NrcyBoZWxkIGJ5IHJlZ3VsYXRvcl9wdXQoKSAqLworLyogcmVndWxhdG9yX2xpc3RfbXV0ZXggbG9jayBoZWxkIGJ5IHJlZ3VsYXRvcl9wdXQoKSAqLwogc3RhdGljIHZvaWQgX3JlZ3VsYXRvcl9wdXQoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwpAQCAtMTUwMywxMiArMTUwMywxNCBAQAogCS8qIHJlbW92ZSBhbnkgc3lzZnMgZW50cmllcyAqLwogCWlmIChyZWd1bGF0b3ItPmRldikKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJnJkZXYtPmRldi5rb2JqLCByZWd1bGF0b3ItPnN1cHBseV9uYW1lKTsKKwltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CiAJa2ZyZWUocmVndWxhdG9yLT5zdXBwbHlfbmFtZSk7CiAJbGlzdF9kZWwoJnJlZ3VsYXRvci0+bGlzdCk7CiAJa2ZyZWUocmVndWxhdG9yKTsKIAogCXJkZXYtPm9wZW5fY291bnQtLTsKIAlyZGV2LT5leGNsdXNpdmUgPSAwOworCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwogCiAJbW9kdWxlX3B1dChyZGV2LT5vd25lcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMKaW5kZXggYzE0NDRjMy4uZmY4MjgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvczJtcHMxMS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYwpAQCAtNDA1LDYgKzQwNSw0MCBAQAogCS5lbmFibGVfbWFzawk9IFMyTVBTMTRfRU5BQkxFX01BU0sJCQlcCiB9CiAKKyNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrNyhudW0sIG1pbiwgc3RlcCwgbWluX3NlbCkgewlcCisJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJXAorCS5pZAkJPSBTMk1QUzEzX0JVQ0sjI251bSwJCQlcCisJLm9wcwkJPSAmczJtcHMxNF9yZWdfb3BzLAkJCVwKKwkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJCQlcCisJLm1pbl91VgkJPSBtaW4sCQkJCQlcCisJLnVWX3N0ZXAJPSBzdGVwLAkJCQkJXAorCS5saW5lYXJfbWluX3NlbAk9IG1pbl9zZWwsCQkJCVwKKwkubl92b2x0YWdlcwk9IFMyTVBTMTRfQlVDS19OX1ZPTFRBR0VTLAkJXAorCS5yYW1wX2RlbGF5CT0gUzJNUFMxM19CVUNLX1JBTVBfREVMQVksCQlcCisJLnZzZWxfcmVnCT0gUzJNUFMxM19SRUdfQjFPVVQgKyAobnVtKSAqIDIgLSAxLAlcCisJLnZzZWxfbWFzawk9IFMyTVBTMTRfQlVDS19WU0VMX01BU0ssCQlcCisJLmVuYWJsZV9yZWcJPSBTMk1QUzEzX1JFR19CMUNUUkwgKyAobnVtIC0gMSkgKiAyLAlcCisJLmVuYWJsZV9tYXNrCT0gUzJNUFMxNF9FTkFCTEVfTUFTSwkJCVwKK30KKworI2RlZmluZSByZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2s4XzEwKG51bSwgbWluLCBzdGVwLCBtaW5fc2VsKSB7CVwKKwkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQlcCisJLmlkCQk9IFMyTVBTMTNfQlVDSyMjbnVtLAkJCVwKKwkub3BzCQk9ICZzMm1wczE0X3JlZ19vcHMsCQkJXAorCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkJCVwKKwkubWluX3VWCQk9IG1pbiwJCQkJCVwKKwkudVZfc3RlcAk9IHN0ZXAsCQkJCQlcCisJLmxpbmVhcl9taW5fc2VsCT0gbWluX3NlbCwJCQkJXAorCS5uX3ZvbHRhZ2VzCT0gUzJNUFMxNF9CVUNLX05fVk9MVEFHRVMsCQlcCisJLnJhbXBfZGVsYXkJPSBTMk1QUzEzX0JVQ0tfUkFNUF9ERUxBWSwJCVwKKwkudnNlbF9yZWcJPSBTMk1QUzEzX1JFR19CMU9VVCArIChudW0pICogMiAtIDEsCVwKKwkudnNlbF9tYXNrCT0gUzJNUFMxNF9CVUNLX1ZTRUxfTUFTSywJCVwKKwkuZW5hYmxlX3JlZwk9IFMyTVBTMTNfUkVHX0IxQ1RSTCArIChudW0pICogMiAtIDEsCVwKKwkuZW5hYmxlX21hc2sJPSBTMk1QUzE0X0VOQUJMRV9NQVNLCQkJXAorfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHMybXBzMTNfcmVndWxhdG9yc1tdID0gewogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDEsICBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKIAlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyLCAgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCkBAIC00NTIsMTAgKzQ4NiwxMCBAQAogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg0LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCiAJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDUsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKIAlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soNiwgIE1JTl81MDBfTVYsICBTVEVQXzZfMjVfTVYsIDB4MTApLAotCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg3LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCi0JcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDgsICBNSU5fMTAwMF9NViwgU1RFUF8xMl81X01WLCAweDIwKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soOSwgIE1JTl8xMDAwX01WLCBTVEVQXzEyXzVfTVYsIDB4MjApLAotCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjaygxMCwgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrNyg3LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrOF8xMCg4LCAgTUlOXzEwMDBfTVYsIFNURVBfMTJfNV9NViwgMHgyMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrOF8xMCg5LCAgTUlOXzEwMDBfTVYsIFNURVBfMTJfNV9NViwgMHgyMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrOF8xMCgxMCwgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCiB9OwogCiBzdGF0aWMgaW50IHMybXBzMTRfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKQEAgLTU3MCw3ICs2MDQsNyBAQAogCS5lbmFibGVfbWFzawk9IFMyTVBTMTRfRU5BQkxFX01BU0sJCVwKIH0KIAotI2RlZmluZSByZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2sobnVtLCBtaW4sIHN0ZXApIHsJCVwKKyNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9idWNrKG51bSwgbWluLCBzdGVwLCBtaW5fc2VsKSB7CVwKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQlcCiAJLmlkCQk9IFMyTVBTMTRfQlVDSyMjbnVtLAkJCVwKIAkub3BzCQk9ICZzMm1wczE0X3JlZ19vcHMsCQkJXApAQCAtNTc5LDcgKzYxMyw3IEBACiAJLm1pbl91VgkJPSBtaW4sCQkJCQlcCiAJLnVWX3N0ZXAJPSBzdGVwLAkJCQkJXAogCS5uX3ZvbHRhZ2VzCT0gUzJNUFMxNF9CVUNLX05fVk9MVEFHRVMsCQlcCi0JLmxpbmVhcl9taW5fc2VsID0gUzJNUFMxNF9CVUNLMTIzNV9TVEFSVF9TRUwsCQlcCisJLmxpbmVhcl9taW5fc2VsID0gbWluX3NlbCwJCQkJXAogCS5yYW1wX2RlbGF5CT0gUzJNUFMxNF9CVUNLX1JBTVBfREVMQVksCQlcCiAJLnZzZWxfcmVnCT0gUzJNUFMxNF9SRUdfQjFDVFJMMiArIChudW0gLSAxKSAqIDIsCVwKIAkudnNlbF9tYXNrCT0gUzJNUFMxNF9CVUNLX1ZTRUxfTUFTSywJCVwKQEAgLTYxMywxMSArNjQ3LDE2IEBACiAJcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9sZG8oMjMsIE1JTl84MDBfTVYsIFNURVBfMjVfTVYpLAogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTRfbGRvKDI0LCBNSU5fMTgwMF9NViwgU1RFUF8yNV9NViksCiAJcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9sZG8oMjUsIE1JTl8xODAwX01WLCBTVEVQXzI1X01WKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soMSwgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soMiwgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soMywgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soNCwgTUlOXzE0MDBfTVYsIFNURVBfMTJfNV9NViksCi0JcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9idWNrKDUsIE1JTl82MDBfTVYsIFNURVBfNl8yNV9NViksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9idWNrKDEsIE1JTl82MDBfTVYsIFNURVBfNl8yNV9NViwKKwkJCQkgICAgUzJNUFMxNF9CVUNLMTIzNV9TVEFSVF9TRUwpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTRfYnVjaygyLCBNSU5fNjAwX01WLCBTVEVQXzZfMjVfTVYsCisJCQkJICAgIFMyTVBTMTRfQlVDSzEyMzVfU1RBUlRfU0VMKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soMywgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WLAorCQkJCSAgICBTMk1QUzE0X0JVQ0sxMjM1X1NUQVJUX1NFTCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9idWNrKDQsIE1JTl8xNDAwX01WLCBTVEVQXzEyXzVfTVYsCisJCQkJICAgIFMyTVBTMTRfQlVDSzRfU1RBUlRfU0VMKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soNSwgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WLAorCQkJCSAgICBTMk1QUzE0X0JVQ0sxMjM1X1NUQVJUX1NFTCksCiB9OwogCiBzdGF0aWMgaW50IHMybXBzMTRfcG1pY19lbmFibGVfZXh0X2NvbnRyb2woc3RydWN0IHMybXBzMTFfaW5mbyAqczJtcHMxMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVzZXQvcmVzZXQtc3VueGkuYyBiL2RyaXZlcnMvcmVzZXQvcmVzZXQtc3VueGkuYwppbmRleCBlZWJjNTJjLi4zZDk1Yzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXN1bnhpLmMKKysrIGIvZHJpdmVycy9yZXNldC9yZXNldC1zdW54aS5jCkBAIC0xMDIsNiArMTAyLDggQEAKIAkJZ290byBlcnJfYWxsb2M7CiAJfQogCisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOworCiAJZGF0YS0+cmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKIAlkYXRhLT5yY2Rldi5ucl9yZXNldHMgPSBzaXplICogMzI7CiAJZGF0YS0+cmNkZXYub3BzID0gJnN1bnhpX3Jlc2V0X29wczsKQEAgLTE1Nyw2ICsxNTksOCBAQAogCWlmIChJU19FUlIoZGF0YS0+bWVtYmFzZSkpCiAJCXJldHVybiBQVFJfRVJSKGRhdGEtPm1lbWJhc2UpOwogCisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOworCiAJZGF0YS0+cmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKIAlkYXRhLT5yY2Rldi5ucl9yZXNldHMgPSByZXNvdXJjZV9zaXplKHJlcykgKiAzMjsKIAlkYXRhLT5yY2Rldi5vcHMgPSAmc3VueGlfcmVzZXRfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXM1bS5jIGIvZHJpdmVycy9ydGMvcnRjLXM1bS5jCmluZGV4IGI1ZTdjNDYuLjg5YWMxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zNW0uYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtczVtLmMKQEAgLTgzMiw2ICs4MzIsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgczVtX3J0Y19pZFtdID0gewogCXsgInM1bS1ydGMiLAkJUzVNODc2N1ggfSwKIAl7ICJzMm1wczE0LXJ0YyIsCVMyTVBTMTRYIH0sCisJeyB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczVtX3J0Y19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwppbmRleCA5MWU5N2VjLi40ZDQxYmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKQEAgLTExNjMsOSArMTE2MywxMyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBhcF90ZXN0X2NvbmZpZ19kb21haW4odW5zaWduZWQgaW50IGRvbWFpbikKIHsKLQlpZiAoIWFwX2NvbmZpZ3VyYXRpb24pCi0JCXJldHVybiAxOwotCXJldHVybiBhcF90ZXN0X2NvbmZpZyhhcF9jb25maWd1cmF0aW9uLT5hcW0sIGRvbWFpbik7CisJaWYgKCFhcF9jb25maWd1cmF0aW9uKQkgIC8qIFFDSSBub3Qgc3VwcG9ydGVkICovCisJCWlmIChkb21haW4gPCAxNikKKwkJCXJldHVybiAxOyAvKiB0aGVuIGRvbWFpbnMgMC4uLjE1IGFyZSBjb25maWd1cmVkICovCisJCWVsc2UKKwkJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGFwX3Rlc3RfY29uZmlnKGFwX2NvbmZpZ3VyYXRpb24tPmFxbSwgZG9tYWluKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggZjQwN2UzNy4uNjQyYzc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtMTc4NCw2ICsxNzg0LDggQEAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiaWR4YW5zd3IiKTsKIAljYXJkID0gQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KTsKIAlpb2IgPSBxZXRoX2dldF9idWZmZXIoY2hhbm5lbCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWlvYi0+Y2FsbGJhY2sgPSBpZHhfcmVwbHlfY2I7CiAJbWVtY3B5KCZjaGFubmVsLT5jY3csIFJFQURfQ0NXLCBzaXplb2Yoc3RydWN0IGNjdzEpKTsKIAljaGFubmVsLT5jY3cuY291bnQgPSBRRVRIX0JVRlNJWkU7CkBAIC0xODM0LDYgKzE4MzYsOCBAQAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJpZHhhY3RjaCIpOwogCiAJaW9iID0gcWV0aF9nZXRfYnVmZmVyKGNoYW5uZWwpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlpb2ItPmNhbGxiYWNrID0gaWR4X3JlcGx5X2NiOwogCW1lbWNweSgmY2hhbm5lbC0+Y2N3LCBXUklURV9DQ1csIHNpemVvZihzdHJ1Y3QgY2N3MSkpOwogCWNoYW5uZWwtPmNjdy5jb3VudCA9IElEWF9BQ1RJVkFURV9TSVpFOwpAQCAtMjAyMSwxMCArMjAyNSwzNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9wcmVwYXJlX2NvbnRyb2xfZGF0YSk7CiAKKy8qKgorICogcWV0aF9zZW5kX2NvbnRyb2xfZGF0YSgpIC0Jc2VuZCBjb250cm9sIGNvbW1hbmQgdG8gdGhlIGNhcmQKKyAqIEBjYXJkOgkJCXFldGhfY2FyZCBzdHJ1Y3R1cmUgcG9pbnRlcgorICogQGxlbjoJCQlzaXplIG9mIHRoZSBjb21tYW5kIGJ1ZmZlcgorICogQGlvYjoJCQlxZXRoX2NtZF9idWZmZXIgcG9pbnRlcgorICogQHJlcGx5X2NiOgkJCWNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIKKyAqIEBjYl9jYXJkOgkJCXBvaW50ZXIgdG8gdGhlIHFldGhfY2FyZCBzdHJ1Y3R1cmUKKyAqIEBjYl9yZXBseToJCQlwb2ludGVyIHRvIHRoZSBxZXRoX3JlcGx5IHN0cnVjdHVyZQorICogQGNiX2NtZDoJCQlwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBpb2IgZm9yIG5vbi1JUEEKKyAqCQkJCWNvbW1hbmRzLCBvciB0byB0aGUgcWV0aF9pcGFfY21kIHN0cnVjdHVyZQorICoJCQkJZm9yIHRoZSBJUEEgY29tbWFuZHMuCisgKiBAcmVwbHlfcGFyYW06CQlwcml2YXRlIHBvaW50ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworICoKKyAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBgcmV0dXJuX2NvZGUnIGZpZWxkIG9mIHRoZSByZXNwb25zZQorICogYmxvY2sgcmV0dXJuZWQgZnJvbSB0aGUgaGFyZHdhcmUsIG9yIG90aGVyIGVycm9yIGluZGljYXRpb24uCisgKiBWYWx1ZSBvZiB6ZXJvIGluZGljYXRlcyBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZiB0aGUgY29tbWFuZC4KKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBnZXRzIGNhbGxlZCBvbmUgb3IgbW9yZSB0aW1lcywgd2l0aCBjYl9jbWQKKyAqIHBvaW50aW5nIHRvIHRoZSByZXNwb25zZSByZXR1cm5lZCBieSB0aGUgaGFyZHdhcmUuIENhbGxiYWNrCisgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBub24temVybyBpZiBtb3JlIHJlcGx5IGJsb2NrcyBhcmUgZXhwZWN0ZWQsCisgKiBhbmQgemVybyBpZiB0aGUgbGFzdCBvciBvbmx5IHJlcGx5IGJsb2NrIGlzIHJlY2VpdmVkLiBDYWxsYmFjaworICogZnVuY3Rpb24gY2FuIGdldCB0aGUgdmFsdWUgb2YgdGhlIHJlcGx5X3BhcmFtIHBvaW50ZXIgZnJvbSB0aGUKKyAqIGZpZWxkICdwYXJhbScgb2YgdGhlIHN0cnVjdHVyZSBxZXRoX3JlcGx5LgorICovCisKIGludCBxZXRoX3NlbmRfY29udHJvbF9kYXRhKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBsZW4sCiAJCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwKLQkJaW50ICgqcmVwbHlfY2IpKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcmVwbHkgKiwKLQkJCXVuc2lnbmVkIGxvbmcpLAorCQlpbnQgKCpyZXBseV9jYikoc3RydWN0IHFldGhfY2FyZCAqY2JfY2FyZCwKKwkJCQlzdHJ1Y3QgcWV0aF9yZXBseSAqY2JfcmVwbHksCisJCQkJdW5zaWduZWQgbG9uZyBjYl9jbWQpLAogCQl2b2lkICpyZXBseV9wYXJhbSkKIHsKIAlpbnQgcmM7CkBAIC0yOTE0LDkgKzI5NDQsMTYgQEAKIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCi0JaW9iID0gcWV0aF93YWl0X2Zvcl9idWZmZXIoJmNhcmQtPndyaXRlKTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JcWV0aF9maWxsX2lwYWNtZF9oZWFkZXIoY2FyZCwgY21kLCBpcGFjbWQsIHByb3QpOworCWlvYiA9IHFldGhfZ2V0X2J1ZmZlcigmY2FyZC0+d3JpdGUpOworCWlmIChpb2IpIHsKKwkJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCQlxZXRoX2ZpbGxfaXBhY21kX2hlYWRlcihjYXJkLCBjbWQsIGlwYWNtZCwgcHJvdCk7CisJfSBlbHNlIHsKKwkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwKKwkJCSAiVGhlIHFldGggZHJpdmVyIHJhbiBvdXQgb2YgY2hhbm5lbCBjb21tYW5kIGJ1ZmZlcnNcbiIpOworCQlRRVRIX0RCRl9NRVNTQUdFKDEsICIlcyBUaGUgcWV0aCBkcml2ZXIgcmFuIG91dCBvZiBjaGFubmVsIGNvbW1hbmQgYnVmZmVycyIsCisJCQkJIGRldl9uYW1lKCZjYXJkLT5nZGV2LT5kZXYpKTsKKwl9CiAKIAlyZXR1cm4gaW9iOwogfQpAQCAtMjkzMiw2ICsyOTY5LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3ByZXBhcmVfaXBhX2NtZCk7CiAKKy8qKgorICogcWV0aF9zZW5kX2lwYV9jbWQoKSAtIHNlbmQgYW4gSVBBIGNvbW1hbmQKKyAqCisgKiBTZWUgcWV0aF9zZW5kX2NvbnRyb2xfZGF0YSgpIGZvciBleHBsYW5hdGlvbiBvZiB0aGUgYXJndW1lbnRzLgorICovCisKIGludCBxZXRoX3NlbmRfaXBhX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCiAJCWludCAoKnJlcGx5X2NiKShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3JlcGx5KiwKIAkJCXVuc2lnbmVkIGxvbmcpLApAQCAtMjk2OCw2ICszMDExLDggQEAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic3RydGxhbiIpOwogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NUQVJUTEFOLCAwKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIE5VTEwsIE5VTEwpOwogCXJldHVybiByYzsKIH0KQEAgLTMwMTMsMTEgKzMwNTgsMTMgQEAKIAogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9TRVRBREFQVEVSUEFSTVMsCiAJCQkJICAgICBRRVRIX1BST1RfSVBWNCk7Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwotCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLmNtZGxlbmd0aCA9IGNtZGxlbjsKLQljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci5jb21tYW5kX2NvZGUgPSBjb21tYW5kOwotCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnVzZWRfdG90YWwgPSAxOwotCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyA9IDE7CisJaWYgKGlvYikgeworCQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLmNtZGxlbmd0aCA9IGNtZGxlbjsKKwkJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuY29tbWFuZF9jb2RlID0gY29tbWFuZDsKKwkJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIudXNlZF90b3RhbCA9IDE7CisJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyA9IDE7CisJfQogCiAJcmV0dXJuIGlvYjsKIH0KQEAgLTMwMzAsNiArMzA3Nyw4IEBACiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgInF1ZXJ5YWRwIik7CiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9RVUVSWV9DT01NQU5EU19TVVBQT1JURUQsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcykpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXNfY2IsIE5VTEwpOwogCXJldHVybiByYzsKIH0KQEAgLTMwODAsNiArMzEyOSw4IEBACiAKIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgInFpcGFzc2klaSIsIHByb3QpOwogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9RSVBBU1NJU1QsIHByb3QpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9xdWVyeV9pcGFzc2lzdHNfY2IsIE5VTEwpOwogCXJldHVybiByYzsKIH0KQEAgLTMxMTksNiArMzE3MCw4IEBACiAJCXJldHVybiAtRU5PTUVESVVNOwogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfUVVFUllfU1dJVENIX0FUVFJJQlVURVMsCiAJCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtc19oZHIpKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwKIAkJCQlxZXRoX3F1ZXJ5X3N3aXRjaF9hdHRyaWJ1dGVzX2NiLCBzd19pbmZvKTsKIH0KQEAgLTMxNDYsNiArMzE5OSw4IEBACiAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAicWRpYWdhc3MiKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUX0RJQUdfQVNTLCAwKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5kaWFnYXNzLnN1YmNtZF9sZW4gPSAxNjsKIAljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWQgPSBRRVRIX0RJQUdTX0NNRF9RVUVSWTsKQEAgLTMxOTcsNiArMzI1Miw4IEBACiAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGlhZ3RyYXAiKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUX0RJQUdfQVNTLCAwKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5kaWFnYXNzLnN1YmNtZF9sZW4gPSA4MDsKIAljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWQgPSBRRVRIX0RJQUdTX0NNRF9UUkFQOwpAQCAtNDE2Miw2ICs0MjE5LDggQEAKIAogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSwKIAkJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YSArIElQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5tb2RlID0gbW9kZTsKIAlxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfc2V0YWRwX3Byb21pc2NfbW9kZV9jYiwgTlVMTCk7CkBAIC00MjMyLDYgKzQyOTEsOCBAQAogCiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUywKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zKSk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuY21kID0gQ0hBTkdFX0FERFJfUkVBRF9NQUM7CiAJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLmNoYW5nZV9hZGRyLmFkZHJfc2l6ZSA9IE9TQV9BRERSX0xFTjsKQEAgLTQzNDUsNiArNDQwNiw4IEBACiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfQUNDRVNTX0NPTlRST0wsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtc19oZHIpICsKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfc2V0X2FjY2Vzc19jdHJsKSk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAlhY2Nlc3NfY3RybF9yZXEgPSAmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLnNldF9hY2Nlc3NfY3RybDsKIAlhY2Nlc3NfY3RybF9yZXEtPnN1YmNtZF9jb2RlID0gaXNvbGF0aW9uOwpAQCAtNDU4OCw2ICs0NjUxLDEwIEBACiAKIAlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBJUEFfU0VUQURQX1NFVF9TTk1QX0NPTlRST0wsCiAJCQkJICAgUUVUSF9TTk1QX1NFVEFEUF9DTURMRU5HVEggKyByZXFfbGVuKTsKKwlpZiAoIWlvYikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJbWVtY3B5KCZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuc25tcCwgJnVyZXEtPmNtZCwgcmVxX2xlbik7CiAJcmMgPSBxZXRoX3NlbmRfaXBhX3NubXBfY21kKGNhcmQsIGlvYiwgUUVUSF9TRVRBRFBfQkFTRV9MRU4gKyByZXFfbGVuLApAQCAtNDU5OSw3ICs0NjY2LDcgQEAKIAkJaWYgKGNvcHlfdG9fdXNlcih1ZGF0YSwgcWluZm8udWRhdGEsIHFpbmZvLnVkYXRhX2xlbikpCiAJCQlyYyA9IC1FRkFVTFQ7CiAJfQotCitvdXQ6CiAJa2ZyZWUodXJlcSk7CiAJa2ZyZWUocWluZm8udWRhdGEpOwogCXJldHVybiByYzsKQEAgLTQ2NzAsNiArNDczNywxMCBAQAogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfUVVFUllfT0FULAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyKSArCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX3F1ZXJ5X29hdCkpOworCWlmICghaW9iKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCW9hdF9yZXEgPSAmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLnF1ZXJ5X29hdDsKIAlvYXRfcmVxLT5zdWJjbWRfY29kZSA9IG9hdF9kYXRhLmNvbW1hbmQ7CkBAIC00NzM1LDYgKzQ4MDYsOCBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9RVUVSWV9DQVJEX0lORk8sCiAJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyKSk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfcXVlcnlfY2FyZF9pbmZvX2NiLAogCQkJCQkodm9pZCAqKWNhcnJpZXJfaW5mbyk7CiB9CkBAIC01MDYwLDExICs1MTMzLDIzIEBACiAJY2FyZC0+b3B0aW9ucy5hZHAuc3VwcG9ydGVkX2Z1bmNzID0gMDsKIAljYXJkLT5vcHRpb25zLnNicC5zdXBwb3J0ZWRfZnVuY3MgPSAwOwogCWNhcmQtPmluZm8uZGlhZ2Fzc19zdXBwb3J0ID0gMDsKLQlxZXRoX3F1ZXJ5X2lwYXNzaXN0cyhjYXJkLCBRRVRIX1BST1RfSVBWNCk7Ci0JaWYgKHFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBREFQVEVSUEFSTVMpKQotCQlxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhjYXJkKTsKLQlpZiAocWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX0RJQUdfQVNTSVNUKSkKLQkJcWV0aF9xdWVyeV9zZXRkaWFnYXNzKGNhcmQpOworCXJjID0gcWV0aF9xdWVyeV9pcGFzc2lzdHMoY2FyZCwgUUVUSF9QUk9UX0lQVjQpOworCWlmIChyYyA9PSAtRU5PTUVNKQorCQlnb3RvIG91dDsKKwlpZiAocWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEQVBURVJQQVJNUykpIHsKKwkJcmMgPSBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhjYXJkKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI2ZXJyJWQiLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlpZiAocWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX0RJQUdfQVNTSVNUKSkgeworCQlyYyA9IHFldGhfcXVlcnlfc2V0ZGlhZ2FzcyhjYXJkKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI3ZXJyJWQiLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIG91dDoKIAlkZXZfd2FybigmY2FyZC0+Z2Rldi0+ZGV2LCAiVGhlIHFldGggZGV2aWNlIGRyaXZlciBmYWlsZWQgdG8gcmVjb3ZlciAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCBkMDJjZDFhLi5jZTg3YWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTI3LDEwICsyNyw3IEBACiBzdGF0aWMgaW50IHFldGhfbDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICosIF9fdTggKik7CiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoc3RydWN0IHFldGhfY2FyZCAqLCBfX3U4ICosCi0JCQkgICBlbnVtIHFldGhfaXBhX2NtZHMsCi0JCQkgICBpbnQgKCpyZXBseV9jYikgKHN0cnVjdCBxZXRoX2NhcmQgKiwKLQkJCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5KiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcpKTsKKwkJCSAgIGVudW0gcWV0aF9pcGFfY21kcyk7CiBzdGF0aWMgdm9pZCBxZXRoX2wyX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgcWV0aF9sMl9yZWNvdmVyKHZvaWQgKik7CiBzdGF0aWMgdm9pZCBxZXRoX2JyaWRnZXBvcnRfcXVlcnlfc3VwcG9ydChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKTsKQEAgLTEzMCw1NiArMTI3LDcxIEBACiAJcmV0dXJuIG5kZXY7CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldGdyb3VwbWFjX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCQkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBpbnQgcWV0aF9zZXRkZWxfbWFrZXJjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCByZXRjb2RlKQogewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQlfX3U4ICptYWM7CisJaW50IHJjOwogCi0JUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2dtYWNiIik7Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKLQltYWMgPSAmY21kLT5kYXRhLnNldGRlbG1hYy5tYWNbMF07Ci0JLyogTUFDIGFscmVhZHkgcmVnaXN0ZXJlZCwgbmVlZGVkIGluIGNvdXBsZS91bmNvdXBsZSBjYXNlICovCi0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlID09ICBJUEFfUkNfTDJfRFVQX01BQykgewotCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJHcm91cCBNQUMgJXBNIGFscmVhZHkgZXhpc3Rpbmcgb24gJXMgXG4iLAotCQkJICBtYWMsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQljbWQtPmhkci5yZXR1cm5fY29kZSA9IDA7CisJaWYgKHJldGNvZGUpCisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiZXJyJTA0eCIsIHJldGNvZGUpOworCXN3aXRjaCAocmV0Y29kZSkgeworCWNhc2UgSVBBX1JDX1NVQ0NFU1M6CisJCXJjID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJUEFfUkNfTDJfVU5TVVBQT1JURURfQ01EOgorCQlyYyA9IC1FTk9TWVM7CisJCWJyZWFrOworCWNhc2UgSVBBX1JDX0wyX0FERFJfVEFCTEVfRlVMTDoKKwkJcmMgPSAtRU5PU1BDOworCQlicmVhazsKKwljYXNlIElQQV9SQ19MMl9EVVBfTUFDOgorCWNhc2UgSVBBX1JDX0wyX0RVUF9MQVlFUjNfTUFDOgorCQlyYyA9IC1FRVhJU1Q7CisJCWJyZWFrOworCWNhc2UgSVBBX1JDX0wyX01BQ19OT1RfQVVUSF9CWV9IWVA6CisJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKKwkJcmMgPSAtRVBFUk07CisJCWJyZWFrOworCWNhc2UgSVBBX1JDX0wyX01BQ19OT1RfRk9VTkQ6CisJCXJjID0gLUVOT0VOVDsKKwkJYnJlYWs7CisJY2FzZSAtRU5PTUVNOgorCQlyYyA9IC1FTk9NRU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gLUVJTzsKKwkJYnJlYWs7CiAJfQotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiQ291bGQgbm90IHNldCBncm91cCBNQUMgJXBNIG9uICVzOiAleFxuIiwKLQkJCSAgbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9zZXRncm91cG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CisJaW50IHJjOworCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2dtYWMiKTsKLQlyZXR1cm4gcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUR01BQywKLQkJCQkJICBxZXRoX2wyX3NlbmRfc2V0Z3JvdXBtYWNfY2IpOwotfQotCi1zdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxncm91cG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLQkJCQl1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCV9fdTggKm1hYzsKLQotCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRnbWFjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JbWFjID0gJmNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjWzBdOwotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiQ291bGQgbm90IGRlbGV0ZSBncm91cCBNQUMgJXBNIG9uICVzOiAleFxuIiwKLQkJCSAgbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JcmV0dXJuIDA7CisJcmMgPSBxZXRoX3NldGRlbF9tYWtlcmMoY2FyZCwgcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsCisJCQkJCUlQQV9DTURfU0VUR01BQykpOworCWlmIChyYyA9PSAtRUVYSVNUKQorCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJHcm91cCBNQUMgJXBNIGFscmVhZHkgZXhpc3Rpbmcgb24gJXNcbiIsCisJCQltYWMsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCWVsc2UgaWYgKHJjKQorCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJDb3VsZCBub3Qgc2V0IGdyb3VwIE1BQyAlcE0gb24gJXM6ICVkXG4iLAorCQkJbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxncm91cG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CisJaW50IHJjOworCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyRGdtYWMiKTsKLQlyZXR1cm4gcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfREVMR01BQywKLQkJCQkJICBxZXRoX2wyX3NlbmRfZGVsZ3JvdXBtYWNfY2IpOworCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLAorCQkJCQlJUEFfQ01EX0RFTEdNQUMpKTsKKwlpZiAocmMpCisJCVFFVEhfREJGX01FU1NBR0UoMiwKKwkJCSJDb3VsZCBub3QgZGVsZXRlIGdyb3VwIE1BQyAlcE0gb24gJXM6ICVkXG4iLAorCQkJbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBxZXRoX2wyX2FkZF9tYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMsIGludCB2bWFjKQpAQCAtMTk3LDEwICsyMDksMTEgQEAKIAltYy0+aXNfdm1hYyA9IHZtYWM7CiAKIAlpZiAodm1hYykgewotCQlyYyA9IHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX1NFVFZNQUMsCi0JCQkJCU5VTEwpOworCQlyYyA9IHFldGhfc2V0ZGVsX21ha2VyYyhjYXJkLAorCQkJcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUVk1BQykpOwogCX0gZWxzZSB7Ci0JCXJjID0gcWV0aF9sMl9zZW5kX3NldGdyb3VwbWFjKGNhcmQsIG1hYyk7CisJCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsCisJCQlxZXRoX2wyX3NlbmRfc2V0Z3JvdXBtYWMoY2FyZCwgbWFjKSk7CiAJfQogCiAJaWYgKCFyYykKQEAgLTIxOCw3ICsyMzEsNyBAQAogCQlpZiAoZGVsKSB7CiAJCQlpZiAobWMtPmlzX3ZtYWMpCiAJCQkJcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYy0+bWNfYWRkciwKLQkJCQkJSVBBX0NNRF9ERUxWTUFDLCBOVUxMKTsKKwkJCQkJSVBBX0NNRF9ERUxWTUFDKTsKIAkJCWVsc2UKIAkJCQlxZXRoX2wyX3NlbmRfZGVsZ3JvdXBtYWMoY2FyZCwgbWMtPm1jX2FkZHIpOwogCQl9CkBAIC0yOTEsNiArMzA0LDggQEAKIAogCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAiTDJzZHYleCIsIGlwYWNtZCk7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBpcGFjbWQsIFFFVEhfUFJPVF9JUFY0KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQgPSBpOwogCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsCkBAIC0zMTMsNiArMzI4LDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBxZXRoX3ZsYW5fdmlkICppZDsKKwlpbnQgcmM7CiAKIAlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgImFpZDolZCIsIHZpZCk7CiAJaWYgKCF2aWQpCkBAIC0zMjgsNyArMzQ0LDExIEBACiAJaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF92bGFuX3ZpZCksIEdGUF9BVE9NSUMpOwogCWlmIChpZCkgewogCQlpZC0+dmlkID0gdmlkOwotCQlxZXRoX2wyX3NlbmRfc2V0ZGVsdmxhbihjYXJkLCB2aWQsIElQQV9DTURfU0VUVkxBTik7CisJCXJjID0gcWV0aF9sMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgdmlkLCBJUEFfQ01EX1NFVFZMQU4pOworCQlpZiAocmMpIHsKKwkJCWtmcmVlKGlkKTsKKwkJCXJldHVybiByYzsKKwkJfQogCQlzcGluX2xvY2tfYmgoJmNhcmQtPnZsYW5sb2NrKTsKIAkJbGlzdF9hZGRfdGFpbCgmaWQtPmxpc3QsICZjYXJkLT52aWRfbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CkBAIC0zNDMsNiArMzYzLDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQsICp0bXBpZCA9IE5VTEw7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKKwlpbnQgcmMgPSAwOwogCiAJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJraWQ6JWQiLCB2aWQpOwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NNKSB7CkBAIC0zNjMsMTEgKzM4NCwxMSBAQAogCX0KIAlzcGluX3VubG9ja19iaCgmY2FyZC0+dmxhbmxvY2spOwogCWlmICh0bXBpZCkgewotCQlxZXRoX2wyX3NlbmRfc2V0ZGVsdmxhbihjYXJkLCB2aWQsIElQQV9DTURfREVMVkxBTik7CisJCXJjID0gcWV0aF9sMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgdmlkLCBJUEFfQ01EX0RFTFZMQU4pOwogCQlrZnJlZSh0bXBpZCk7CiAJfQogCXFldGhfbDJfc2V0X211bHRpY2FzdF9saXN0KGNhcmQtPmRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc3RvcF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCByZWNvdmVyeV9tb2RlKQpAQCAtNTM5LDkxICs1NjAsNjIgQEAKIH0KIAogc3RhdGljIGludCBxZXRoX2wyX3NlbmRfc2V0ZGVsbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYywKLQkJCSAgIGVudW0gcWV0aF9pcGFfY21kcyBpcGFjbWQsCi0JCQkgICBpbnQgKCpyZXBseV9jYikgKHN0cnVjdCBxZXRoX2NhcmQgKiwKLQkJCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5KiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcpKQorCQkJICAgZW51bSBxZXRoX2lwYV9jbWRzIGlwYWNtZCkKIHsKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyc2RtYWMiKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgUUVUSF9QUk9UX0lQVjQpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJY21kLT5kYXRhLnNldGRlbG1hYy5tYWNfbGVuZ3RoID0gT1NBX0FERFJfTEVOOwogCW1lbWNweSgmY21kLT5kYXRhLnNldGRlbG1hYy5tYWMsIG1hYywgT1NBX0FERFJfTEVOKTsKLQlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCByZXBseV9jYiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMlNtYWNjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiTDJlciV4IiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwotCQljYXJkLT5pbmZvLm1hY19iaXRzICY9IH5RRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKLQkJc3dpdGNoIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewotCQljYXNlIElQQV9SQ19MMl9EVVBfTUFDOgotCQljYXNlIElQQV9SQ19MMl9EVVBfTEFZRVIzX01BQzoKLQkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwKLQkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7Ci0JCQlicmVhazsKLQkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0hZUDoKLQkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKLQkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwKLQkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJY2FyZC0+aW5mby5tYWNfYml0cyB8PSBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKLQkJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsIGNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjLAotCQkgICAgICAgT1NBX0FERFJfTEVOKTsKLQkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwKLQkJCSJNQUMgYWRkcmVzcyAlcE0gc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgb24gZGV2aWNlICVzXG4iLAotCQkJY2FyZC0+ZGV2LT5kZXZfYWRkciwgY2FyZC0+ZGV2LT5uYW1lKTsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CisJaW50IHJjOworCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2V0bWFjIik7Ci0JcmV0dXJuIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX1NFVFZNQUMsCi0JCQkJCSAgcWV0aF9sMl9zZW5kX3NldG1hY19jYik7Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRtYWNjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiZXJyJWQiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JCXJldHVybiAwOworCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLAorCQkJCQlJUEFfQ01EX1NFVFZNQUMpKTsKKwlpZiAocmMgPT0gMCkgeworCQljYXJkLT5pbmZvLm1hY19iaXRzIHw9IFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOworCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwgbWFjLCBPU0FfQUREUl9MRU4pOworCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAorCQkJIk1BQyBhZGRyZXNzICVwTSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBvbiBkZXZpY2UgJXNcbiIsCisJCQljYXJkLT5kZXYtPmRldl9hZGRyLCBjYXJkLT5kZXYtPm5hbWUpOworCX0gZWxzZSB7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgJj0gflFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgLUVFWElTVDoKKwkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwgbWFjKTsKKwkJCWJyZWFrOworCQljYXNlIC1FUEVSTToKKwkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwgbWFjKTsKKwkJCWJyZWFrOworCQl9CiAJfQotCWNhcmQtPmluZm8ubWFjX2JpdHMgJj0gflFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxtYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191OCAqbWFjKQogeworCWludCByYzsKKwogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRlbG1hYyIpOwogCWlmICghKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRCkpCiAJCXJldHVybiAwOwotCXJldHVybiBxZXRoX2wyX3NlbmRfc2V0ZGVsbWFjKGNhcmQsIG1hYywgSVBBX0NNRF9ERUxWTUFDLAotCQkJCQkgIHFldGhfbDJfc2VuZF9kZWxtYWNfY2IpOworCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLAorCQkJCQlJUEFfQ01EX0RFTFZNQUMpKTsKKwlpZiAocmMgPT0gMCkKKwkJY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfcmVxdWVzdF9pbml0aWFsX21hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQpAQCAtNjUxLDcgKzY0Myw3IEBACiAJCWlmIChyYykgewogCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiY291bGRuJ3QgZ2V0IE1BQyBhZGRyZXNzIG9uICIKIAkJCQkiZGV2aWNlICVzOiB4JXhcbiIsIENBUkRfQlVTX0lEKGNhcmQpLCByYyk7Ci0JCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjFlcnIlZCIsIHJjKTsKKwkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMWVyciUwNHgiLCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAkJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCBjYXJkLT5kZXYtPmRldl9hZGRyLCBPU0FfQUREUl9MRU4pOwpAQCAtNjg3LDcgKzY3OSw3IEBACiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCXJjID0gcWV0aF9sMl9zZW5kX2RlbG1hYyhjYXJkLCAmY2FyZC0+ZGV2LT5kZXZfYWRkclswXSk7Ci0JaWYgKCFyYyB8fCAocmMgPT0gSVBBX1JDX0wyX01BQ19OT1RfRk9VTkQpKQorCWlmICghcmMgfHwgKHJjID09IC1FTk9FTlQpKQogCQlyYyA9IHFldGhfbDJfc2VuZF9zZXRtYWMoY2FyZCwgYWRkci0+c2FfZGF0YSk7CiAJcmV0dXJuIHJjID8gLUVJTlZBTCA6IDA7CiB9CkBAIC05OTYsNyArOTg4LDcgQEAKIAlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKIAlyYyA9IHFldGhfY29yZV9oYXJkc2V0dXBfY2FyZChjYXJkKTsKIAlpZiAocmMpIHsKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciUwNHgiLCByYyk7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVtb3ZlOwogCX0KQEAgLTE3MzAsNiArMTcyMiw4IEBACiAKIAlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiYnJxc3VwcG8iKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUQlJJREdFUE9SVCwgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybjsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJY21kLT5kYXRhLnNicC5oZHIuY21kbGVuZ3RoID0KIAkJc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zYnBfaGRyKSArCkBAIC0xODA1LDYgKzE3OTksOCBAQAogCWlmICghKGNhcmQtPm9wdGlvbnMuc2JwLnN1cHBvcnRlZF9mdW5jcyAmIElQQV9TQlBfUVVFUllfQlJJREdFX1BPUlRTKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9TRVRCUklER0VQT1JULCAwKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zYnAuaGRyLmNtZGxlbmd0aCA9CiAJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2JwX2hkcik7CkBAIC0xODE3LDkgKzE4MTMsNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCXJjID0gcWV0aF9icmlkZ2Vwb3J0X21ha2VyYyhjYXJkLCAmY2JjdGwsIElQQV9TQlBfUVVFUllfQlJJREdFX1BPUlRTKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2JyaWRnZXBvcnRfcXVlcnlfcG9ydHMpOwogCkBAIC0xODczLDYgKzE4NjcsOCBAQAogCWlmICghKGNhcmQtPm9wdGlvbnMuc2JwLnN1cHBvcnRlZF9mdW5jcyAmIHNldGNtZCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUQlJJREdFUE9SVCwgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2JwLmhkci5jbWRsZW5ndGggPSBjbWRsZW5ndGg7CiAJY21kLT5kYXRhLnNicC5oZHIuY29tbWFuZF9jb2RlID0gc2V0Y21kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggNjI1MjI3YWQuLmUyYTBlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwpAQCAtNTQ5LDYgKzU0OSw4IEBACiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNldGRlbG1jIik7CiAKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgYWRkci0+cHJvdG8pOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJbWVtY3B5KCZjbWQtPmRhdGEuc2V0ZGVsaXBtLm1hYywgYWRkci0+bWFjLCBPU0FfQUREUl9MRU4pOwogCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikKQEAgLTU4OCw2ICs1OTAsOCBAQAogCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAiZmxhZ3MlMDJYIiwgZmxhZ3MpOwogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBpcGFjbWQsIGFkZHItPnByb3RvKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikgewogCQltZW1jcHkoY21kLT5kYXRhLnNldGRlbGlwNi5pcF9hZGRyLCAmYWRkci0+dS5hNi5hZGRyLApAQCAtNjE2LDYgKzYyMCw4IEBACiAKIAlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAic2V0cm91dGciKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUUlRHLCBwcm90KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zZXRydGcudHlwZSA9ICh0eXBlKTsKIAlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7CkBAIC0xMDQ5LDEyICsxMDU1LDE0IEBACiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImdldGFzc2NtIik7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVEFTU1BBUk1TLCBwcm90KTsKIAotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKLQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmFzc2lzdF9ubyA9IGlwYV9mdW5jOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIubGVuZ3RoID0gOCArIGxlbjsKLQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmNvbW1hbmRfY29kZSA9IGNtZF9jb2RlOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIucmV0dXJuX2NvZGUgPSAwOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIuc2VxX25vID0gMDsKKwlpZiAoaW9iKSB7CisJCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5hc3Npc3Rfbm8gPSBpcGFfZnVuYzsKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5sZW5ndGggPSA4ICsgbGVuOworCQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmNvbW1hbmRfY29kZSA9IGNtZF9jb2RlOworCQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnJldHVybl9jb2RlID0gMDsKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5zZXFfbm8gPSAwOworCX0KIAogCXJldHVybiBpb2I7CiB9CkBAIC0xMDkwLDYgKzEwOTgsOCBAQAogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJzaW1hc3NwNiIpOwogCWlvYiA9IHFldGhfbDNfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBpcGFfZnVuYywgY21kX2NvZGUsCiAJCQkJICAgICAgIDAsIFFFVEhfUFJPVF9JUFY2KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX2wzX3NlbmRfc2V0YXNzcGFybXMoY2FyZCwgaW9iLCAwLCAwLAogCQkJCSAgIHFldGhfbDNfZGVmYXVsdF9zZXRhc3NwYXJtc19jYiwgTlVMTCk7CiAJcmV0dXJuIHJjOwpAQCAtMTEwOCw2ICsxMTE4LDggQEAKIAkJbGVuZ3RoID0gc2l6ZW9mKF9fdTMyKTsKIAlpb2IgPSBxZXRoX2wzX2dldF9zZXRhc3NwYXJtc19jbWQoY2FyZCwgaXBhX2Z1bmMsIGNtZF9jb2RlLAogCQkJCSAgICAgICBsZW5ndGgsIFFFVEhfUFJPVF9JUFY0KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX2wzX3NlbmRfc2V0YXNzcGFybXMoY2FyZCwgaW9iLCBsZW5ndGgsIGRhdGEsCiAJCQkJICAgcWV0aF9sM19kZWZhdWx0X3NldGFzc3Bhcm1zX2NiLCBOVUxMKTsKIAlyZXR1cm4gcmM7CkBAIC0xNDk0LDYgKzE1MDYsOCBAQAogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX0NSRUFURV9BRERSLAogCQkJCSAgICAgUUVUSF9QUk9UX0lQVjYpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQogCQkJY2FyZC0+aW5mby51bmlxdWVfaWQ7CkBAIC0xNTM3LDYgKzE1NTEsOCBAQAogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX0NSRUFURV9BRERSLAogCQkJCSAgICAgUUVUSF9QUk9UX0lQVjYpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQogCQkJY2FyZC0+aW5mby51bmlxdWVfaWQ7CkBAIC0xNjExLDYgKzE2MjcsOCBAQAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkaWFndHJhYyIpOwogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVF9ESUFHX0FTUywgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWRfbGVuID0gMTY7CiAJY21kLT5kYXRhLmRpYWdhc3Muc3ViY21kID0gUUVUSF9ESUFHU19DTURfVFJBQ0U7CkBAIC0yNDQyLDYgKzI0NjAsOCBAQAogCQkJSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8sCiAJCQlzaXplb2Yoc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2RhdGEpIC0gc2l6ZW9mKGNoYXIpLAogCQkJcHJvdCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5xdWVyeV9hcnAucmVxdWVzdF9iaXRzID0gMHgwMDBGOwogCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5kYXRhLnF1ZXJ5X2FycC5yZXBseV9iaXRzID0gMDsKQEAgLTI1MzUsNiArMjU1NSw4IEBACiAJCQkJICAgICAgIElQQV9DTURfQVNTX0FSUF9BRERfRU5UUlksCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkpLAogCQkJCSAgICAgICBRRVRIX1BST1RfSVBWNCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCXJjID0gcWV0aF9sM19zZW5kX3NldGFzc3Bhcm1zKGNhcmQsIGlvYiwKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfYXJwX2NhY2hlX2VudHJ5KSwKIAkJCQkgICAodW5zaWduZWQgbG9uZykgZW50cnksCkBAIC0yNTc0LDYgKzI1OTYsOCBAQAogCQkJCSAgICAgICBJUEFfQ01EX0FTU19BUlBfUkVNT1ZFX0VOVFJZLAogCQkJCSAgICAgICAxMiwKIAkJCQkgICAgICAgUUVUSF9QUk9UX0lQVjQpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyYyA9IHFldGhfbDNfc2VuZF9zZXRhc3NwYXJtcyhjYXJkLCBpb2IsCiAJCQkJICAgMTIsICh1bnNpZ25lZCBsb25nKWJ1ZiwKIAkJCQkgICBxZXRoX2wzX2RlZmF1bHRfc2V0YXNzcGFybXNfY2IsIE5VTEwpOwpAQCAtMzI2Miw2ICszMjg2LDggQEAKIAogc3RhdGljIGludCBxZXRoX2wzX3NldHVwX25ldGRldihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogeworCWludCByYzsKKwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NEIHx8CiAJICAgIGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU1gpIHsKIAkJaWYgKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSKSB8fApAQCAtMzI5Myw3ICszMzE5LDkgQEAKIAkJCXJldHVybiAtRU5PREVWOwogCQljYXJkLT5kZXYtPmZsYWdzIHw9IElGRl9OT0FSUDsKIAkJY2FyZC0+ZGV2LT5uZXRkZXZfb3BzID0gJnFldGhfbDNfbmV0ZGV2X29wczsKLQkJcWV0aF9sM19pcWRfcmVhZF9pbml0aWFsX21hYyhjYXJkKTsKKwkJcmMgPSBxZXRoX2wzX2lxZF9yZWFkX2luaXRpYWxfbWFjKGNhcmQpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CiAJCWlmIChjYXJkLT5vcHRpb25zLmhzdWlkWzBdKQogCQkJbWVtY3B5KGNhcmQtPmRldi0+cGVybV9hZGRyLCBjYXJkLT5vcHRpb25zLmhzdWlkLCA5KTsKIAl9IGVsc2UKQEAgLTMzNjAsNyArMzM4OCw3IEBACiAJcmVjb3Zlcl9mbGFnID0gY2FyZC0+c3RhdGU7CiAJcmMgPSBxZXRoX2NvcmVfaGFyZHNldHVwX2NhcmQoY2FyZCk7CiAJaWYgKHJjKSB7Ci0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjJlcnIlMDR4IiwgcmMpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3JlbW92ZTsKIAl9CkBAIC0zNDAxLDcgKzM0MjksNyBAQAogY29udGluOgogCXJjID0gcWV0aF9sM19zZXRhZGFwdGVyX3Bhcm1zKGNhcmQpOwogCWlmIChyYykKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciUwNHgiLCByYyk7CiAJaWYgKCFjYXJkLT5vcHRpb25zLnNuaWZmZXIpIHsKIAkJcmMgPSBxZXRoX2wzX3N0YXJ0X2lwYXNzaXN0cyhjYXJkKTsKIAkJaWYgKHJjKSB7CkBAIC0zNDEwLDEwICszNDM4LDEwIEBACiAJCX0KIAkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjQoY2FyZCk7CiAJCWlmIChyYykKLQkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNGVyciVkIiwgcmMpOworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI0ZXJyJTA0eCIsIHJjKTsKIAkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjYoY2FyZCk7CiAJCWlmIChyYykKLQkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJTA0eCIsIHJjKTsKIAl9CiAJbmV0aWZfdHhfZGlzYWJsZShjYXJkLT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmggYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKaW5kZXggM2I3M2I5Ni4uMjYyNzBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaApAQCAtMzksNyArMzksNyBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkiZm5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gRkNvRSBIQkEgRHJpdmVyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNi4wLjE2IgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNi4wLjE3IgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCiAjZGVmaW5lIERGWCAgICAgICAgICAgICAgICAgICAgIERSVl9OQU1FICIlZDogIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCmluZGV4IDIwOTdkZTQuLjE1NWIyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCkBAIC0xODkyLDYgKzE4OTIsMjEgQEAKIAkJZ290byBmbmljX2Fib3J0X2NtZF9lbmQ7CiAJfQogCisJLyogSU8gb3V0IG9mIG9yZGVyICovCisKKwlpZiAoIShDTURfRkxBR1Moc2MpICYgKEZOSUNfSU9fQUJPUlRFRCB8IEZOSUNfSU9fRE9ORSkpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9fbG9jaywgZmxhZ3MpOworCQlGTklDX1NDU0lfREJHKEtFUk5fREVCVUcsIGZuaWMtPmxwb3J0LT5ob3N0LAorCQkJIklzc3VpbmcgSG9zdCByZXNldCBkdWUgdG8gb3V0IG9mIG9yZGVyIElPXG4iKTsKKworCQlpZiAoZm5pY19ob3N0X3Jlc2V0KHNjKSA9PSBGQUlMRUQpIHsKKwkJCUZOSUNfU0NTSV9EQkcoS0VSTl9ERUJVRywgZm5pYy0+bHBvcnQtPmhvc3QsCisJCQkJImZuaWNfaG9zdF9yZXNldCBmYWlsZWQuXG4iKTsKKwkJfQorCQlyZXQgPSBGQUlMRUQ7CisJCWdvdG8gZm5pY19hYm9ydF9jbWRfZW5kOworCX0KKwogCUNNRF9TVEFURShzYykgPSBGTklDX0lPUkVRX0FCVFNfQ09NUExFVEU7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IGRmNGUyN2MuLjkyMTk5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTY4Myw2ICs2ODMsNyBAQAogCWlwcl9yZWluaXRfaXByX2NtbmQoaXByX2NtZCk7CiAJaXByX2NtZC0+dS5zY3JhdGNoID0gMDsKIAlpcHJfY21kLT5zaWJsaW5nID0gTlVMTDsKKwlpcHJfY21kLT5laF9jb21wID0gTlVMTDsKIAlpcHJfY21kLT5mYXN0X2RvbmUgPSBmYXN0X2RvbmU7CiAJaW5pdF90aW1lcigmaXByX2NtZC0+dGltZXIpOwogfQpAQCAtODQ4LDYgKzg0OSw4IEBACiAKIAlzY3NpX2RtYV91bm1hcChpcHJfY21kLT5zY3NpX2NtZCk7CiAJc2NzaV9jbWQtPnNjc2lfZG9uZShzY3NpX2NtZCk7CisJaWYgKGlwcl9jbWQtPmVoX2NvbXApCisJCWNvbXBsZXRlKGlwcl9jbWQtPmVoX2NvbXApOwogCWxpc3RfYWRkX3RhaWwoJmlwcl9jbWQtPnF1ZXVlLCAmaXByX2NtZC0+aHJycS0+aHJycV9mcmVlX3EpOwogfQogCkBAIC00ODExLDYgKzQ4MTQsODQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogaXByX21hdGNoX2x1biAtIE1hdGNoIGZ1bmN0aW9uIGZvciBzcGVjaWZpZWQgTFVOCisgKiBAaXByX2NtZDoJaXByIGNvbW1hbmQgc3RydWN0CisgKiBAZGV2aWNlOgkJZGV2aWNlIHRvIG1hdGNoIChzZGV2KQorICoKKyAqIFJldHVybnM6CisgKgkxIGlmIGNvbW1hbmQgbWF0Y2hlcyBzZGV2IC8gMCBpZiBjb21tYW5kIGRvZXMgbm90IG1hdGNoIHNkZXYKKyAqKi8KK3N0YXRpYyBpbnQgaXByX21hdGNoX2x1bihzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQsIHZvaWQgKmRldmljZSkKK3sKKwlpZiAoaXByX2NtZC0+c2NzaV9jbWQgJiYgaXByX2NtZC0+c2NzaV9jbWQtPmRldmljZSA9PSBkZXZpY2UpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwcl93YWl0X2Zvcl9vcHMgLSBXYWl0IGZvciBtYXRjaGluZyBjb21tYW5kcyB0byBjb21wbGV0ZQorICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAorICogQGRldmljZToJCWRldmljZSB0byBtYXRjaCAoc2RldikKKyAqIEBtYXRjaDoJCW1hdGNoIGZ1bmN0aW9uIHRvIHVzZQorICoKKyAqIFJldHVybnM6CisgKglTVUNDRVNTIC8gRkFJTEVECisgKiovCitzdGF0aWMgaW50IGlwcl93YWl0X2Zvcl9vcHMoc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLCB2b2lkICpkZXZpY2UsCisJCQkgICAgaW50ICgqbWF0Y2gpKHN0cnVjdCBpcHJfY21uZCAqLCB2b2lkICopKQoreworCXN0cnVjdCBpcHJfY21uZCAqaXByX2NtZDsKKwlpbnQgd2FpdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcHJfaHJyX3F1ZXVlICpocnJxOworCXNpZ25lZCBsb25nIHRpbWVvdXQgPSBJUFJfQUJPUlRfVEFTS19USU1FT1VUOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXApOworCisJRU5URVI7CisJZG8geworCQl3YWl0ID0gMDsKKworCQlmb3JfZWFjaF9ocnJxKGhycnEsIGlvYV9jZmcpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKGhycnEtPmxvY2ssIGZsYWdzKTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXByX2NtZCwgJmhycnEtPmhycnFfcGVuZGluZ19xLCBxdWV1ZSkgeworCQkJCWlmIChtYXRjaChpcHJfY21kLCBkZXZpY2UpKSB7CisJCQkJCWlwcl9jbWQtPmVoX2NvbXAgPSAmY29tcDsKKwkJCQkJd2FpdCsrOworCQkJCX0KKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaHJycS0+bG9jaywgZmxhZ3MpOworCQl9CisKKwkJaWYgKHdhaXQpIHsKKwkJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNvbXAsIHRpbWVvdXQpOworCisJCQlpZiAoIXRpbWVvdXQpIHsKKwkJCQl3YWl0ID0gMDsKKworCQkJCWZvcl9lYWNoX2hycnEoaHJycSwgaW9hX2NmZykgeworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZShocnJxLT5sb2NrLCBmbGFncyk7CisJCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXByX2NtZCwgJmhycnEtPmhycnFfcGVuZGluZ19xLCBxdWV1ZSkgeworCQkJCQkJaWYgKG1hdGNoKGlwcl9jbWQsIGRldmljZSkpIHsKKwkJCQkJCQlpcHJfY21kLT5laF9jb21wID0gTlVMTDsKKwkJCQkJCQl3YWl0Kys7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShocnJxLT5sb2NrLCBmbGFncyk7CisJCQkJfQorCisJCQkJaWYgKHdhaXQpCisJCQkJCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBhYm9ydGVkIGNvbW1hbmRzXG4iKTsKKwkJCQlMRUFWRTsKKwkJCQlyZXR1cm4gd2FpdCA/IEZBSUxFRCA6IFNVQ0NFU1M7CisJCQl9CisJCX0KKwl9IHdoaWxlICh3YWl0KTsKKworCUxFQVZFOworCXJldHVybiBTVUNDRVNTOworfQorCiBzdGF0aWMgaW50IGlwcl9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmc7CkBAIC01MDMwLDExICs1MTExLDE3IEBACiBzdGF0aWMgaW50IGlwcl9laF9kZXZfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCWludCByYzsKKwlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmc7CisKKwlpb2FfY2ZnID0gKHN0cnVjdCBpcHJfaW9hX2NmZyAqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAKIAlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwogCXJjID0gX19pcHJfZWhfZGV2X3Jlc2V0KGNtZCk7CiAJc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwogCisJaWYgKHJjID09IFNVQ0NFU1MpCisJCXJjID0gaXByX3dhaXRfZm9yX29wcyhpb2FfY2ZnLCBjbWQtPmRldmljZSwgaXByX21hdGNoX2x1bik7CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTUyMzQsMTMgKzUzMjEsMTggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKKwlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmc7CiAKIAlFTlRFUjsKIAorCWlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopIHNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2NzaV9jbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJcmMgPSBpcHJfY2FuY2VsX29wKHNjc2lfY21kKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCisJaWYgKHJjID09IFNVQ0NFU1MpCisJCXJjID0gaXByX3dhaXRfZm9yX29wcyhpb2FfY2ZnLCBzY3NpX2NtZC0+ZGV2aWNlLCBpcHJfbWF0Y2hfbHVuKTsKIAlMRUFWRTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggYjRmM2VlYy4uZWMwM2I0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMTYwNiw2ICsxNjA2LDcgQEAKIAkJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCX0gdTsKIAorCXN0cnVjdCBjb21wbGV0aW9uICplaF9jb21wOwogCXN0cnVjdCBpcHJfaHJyX3F1ZXVlICpocnJxOwogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZzsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDEyY2EyOTEuLmNjZTFjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC03MzQsNyArNzM0LDkgQEAKIAkgKiBSZXR1cm4gdGFyZ2V0IGJ1c3kgaWYgd2UndmUgcmVjZWl2ZWQgYSBub24temVybyByZXRyeV9kZWxheV90aW1lcgogCSAqIGluIGEgRkNQX1JTUC4KIAkgKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBmY3BvcnQtPnJldHJ5X2RlbGF5X3RpbWVzdGFtcCkpCisJaWYgKGZjcG9ydC0+cmV0cnlfZGVsYXlfdGltZXN0YW1wID09IDApIHsKKwkJLyogcmV0cnkgZGVsYXkgbm90IHNldCAqLworCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBmY3BvcnQtPnJldHJ5X2RlbGF5X3RpbWVzdGFtcCkpCiAJCWZjcG9ydC0+cmV0cnlfZGVsYXlfdGltZXN0YW1wID0gMDsKIAllbHNlCiAJCWdvdG8gcWMyNF90YXJnZXRfYnVzeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IGUwMjg4NTQuLjliMzgyOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtOTg2LDkgKzk4Niw5IEBACiAJCXJldHVybiAtRU5YSU87CiAJaWYgKCFnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldikpCiAJCXJldHVybiAtRU5YSU87Ci0JLyogV2UgY2FuIGZhaWwgdGhpcyBpZiB3ZSdyZSBkb2luZyBTQ1NJIG9wZXJhdGlvbnMKKwkvKiBXZSBjYW4gZmFpbCB0cnlfbW9kdWxlX2dldCBpZiB3ZSdyZSBkb2luZyBTQ1NJIG9wZXJhdGlvbnMKIAkgKiBmcm9tIG1vZHVsZSBleGl0IChsaWtlIGNhY2hlIGZsdXNoKSAqLwotCXRyeV9tb2R1bGVfZ2V0KHNkZXYtPmhvc3QtPmhvc3R0LT5tb2R1bGUpOworCV9fbW9kdWxlX2dldChzZGV2LT5ob3N0LT5ob3N0dC0+bW9kdWxlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAwNCwxNCArMTAwNCw3IEBACiAgKi8KIHZvaWQgc2NzaV9kZXZpY2VfcHV0KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLSNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAotCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSA9IHNkZXYtPmhvc3QtPmhvc3R0LT5tb2R1bGU7Ci0KLQkvKiBUaGUgbW9kdWxlIHJlZmNvdW50IHdpbGwgYmUgemVybyBpZiBzY3NpX2RldmljZV9nZXQoKQotCSAqIHdhcyBjYWxsZWQgZnJvbSBhIG1vZHVsZSByZW1vdmFsIHJvdXRpbmUgKi8KLQlpZiAobW9kdWxlICYmIG1vZHVsZV9yZWZjb3VudChtb2R1bGUpICE9IDApCi0JCW1vZHVsZV9wdXQobW9kdWxlKTsKLSNlbmRpZgorCW1vZHVsZV9wdXQoc2Rldi0+aG9zdC0+aG9zdHQtPm1vZHVsZSk7CiAJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX2RldmljZV9wdXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggN2I4YjUxYi4uNGFjYTFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC0xNjIzLDcgKzE2MjMsNyBAQAogCXJlcV9vcGNvZGUgPSBjbWRbM107CiAJcmVxX3NhID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGNtZCArIDQpOwogCWFsbG9jX2xlbiA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyA2KTsKLQlpZiAoYWxsb2NfbGVuIDwgNCAmJiBhbGxvY19sZW4gPiAweGZmZmYpIHsKKwlpZiAoYWxsb2NfbGVuIDwgNCB8fCBhbGxvY19sZW4gPiAweGZmZmYpIHsKIAkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgNiwgLTEpOwogCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAl9CkBAIC0xNjMxLDcgKzE2MzEsNyBAQAogCQlhX2xlbiA9IDgxOTI7CiAJZWxzZQogCQlhX2xlbiA9IGFsbG9jX2xlbjsKLQlhcnIgPSBremFsbG9jKChhX2xlbiA8IDI1NikgPyAzMjAgOiBhX2xlbiArIDY0LCBHRlBfS0VSTkVMKTsKKwlhcnIgPSBremFsbG9jKChhX2xlbiA8IDI1NikgPyAzMjAgOiBhX2xlbiArIDY0LCBHRlBfQVRPTUlDKTsKIAlpZiAoTlVMTCA9PSBhcnIpIHsKIAkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlNVRkZfUkVTX0FTQywKIAkJCQlJTlNVRkZfUkVTX0FTQ1EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggZTQyZmZmNi4uOGFmYjAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogCQl9CiAJCS8qIHNpZ25hbCBub3QgdG8gZW50ZXIgZWl0aGVyIGJyYW5jaCBvZiB0aGUgaWYgKCkgYmVsb3cgKi8KIAkJdGltZWxlZnQgPSAwOwotCQlydG4gPSBORUVEU19SRVRSWTsKKwkJcnRuID0gRkFJTEVEOwogCX0gZWxzZSB7CiAJCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkb25lLCB0aW1lb3V0KTsKIAkJcnRuID0gU1VDQ0VTUzsKQEAgLTEwODEsNyArMTA4MSw3IEBACiAJCQlydG4gPSBGQUlMRUQ7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAoIXJ0bikgeworCX0gZWxzZSBpZiAocnRuICE9IEZBSUxFRCkgewogCQlzY3NpX2Fib3J0X2VoX2NtbmQoc2NtZCk7CiAJCXJ0biA9IEZBSUxFRDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDllYTk1ZGQuLjE3YmI1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC01OTEsNyArNTkxLDYgQEAKIHN0YXRpYyBpbnQgc2NzaV9hbGxvY19zZ3RhYmxlKHN0cnVjdCBzY3NpX2RhdGFfYnVmZmVyICpzZGIsIGludCBuZW50cywgYm9vbCBtcSkKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmZpcnN0X2NodW5rID0gTlVMTDsKLQlnZnBfdCBnZnBfbWFzayA9IG1xID8gR0ZQX05PSU8gOiBHRlBfQVRPTUlDOwogCWludCByZXQ7CiAKIAlCVUdfT04oIW5lbnRzKTsKQEAgLTYwNiw3ICs2MDUsNyBAQAogCX0KIAogCXJldCA9IF9fc2dfYWxsb2NfdGFibGUoJnNkYi0+dGFibGUsIG5lbnRzLCBTQ1NJX01BWF9TR19TRUdNRU5UUywKLQkJCSAgICAgICBmaXJzdF9jaHVuaywgZ2ZwX21hc2ssIHNjc2lfc2dfYWxsb2MpOworCQkJICAgICAgIGZpcnN0X2NodW5rLCBHRlBfQVRPTUlDLCBzY3NpX3NnX2FsbG9jKTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJc2NzaV9mcmVlX3NndGFibGUoc2RiLCBtcSk7CiAJcmV0dXJuIHJldDsKQEAgLTExNDQsNyArMTE0MywxNyBAQAogCQlzdHJ1Y3Qgc2NzaV9kYXRhX2J1ZmZlciAqcHJvdF9zZGIgPSBjbWQtPnByb3Rfc2RiOwogCQlpbnQgaXZlY3MsIGNvdW50OwogCi0JCUJVR19PTihwcm90X3NkYiA9PSBOVUxMKTsKKwkJaWYgKHByb3Rfc2RiID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgc29tZW9uZSAoZS5nLiBtdWx0aXBhdGgpCisJCQkgKiBxdWV1ZXMgYSBjb21tYW5kIHRvIGEgZGV2aWNlIG9uIGFuIGFkYXB0ZXIKKwkJCSAqIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBESVguCisJCQkgKi8KKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJCWVycm9yID0gQkxLUFJFUF9LSUxMOworCQkJZ290byBlcnJfZXhpdDsKKwkJfQorCiAJCWl2ZWNzID0gYmxrX3JxX2NvdW50X2ludGVncml0eV9zZyhycS0+cSwgcnEtPmJpbyk7CiAKIAkJaWYgKHNjc2lfYWxsb2Nfc2d0YWJsZShwcm90X3NkYiwgaXZlY3MsIGlzX21xKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBmZWRhYjNjLi4zOTk1MTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMjYyMyw4ICsyNjIzLDkgQEAKIAkJCQlzZF9jb25maWdfZGlzY2FyZChzZGtwLCBTRF9MQlBfV1MxNik7CiAKIAkJfSBlbHNlIHsJLyogTEJQIFZQRCBwYWdlIHRlbGxzIHVzIHdoYXQgdG8gdXNlICovCi0KLQkJCWlmIChzZGtwLT5sYnB3cykKKwkJCWlmIChzZGtwLT5sYnB1ICYmIHNka3AtPm1heF91bm1hcF9ibG9ja3MgJiYgIXNka3AtPmxicHJ6KQorCQkJCXNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFNEX0xCUF9VTk1BUCk7CisJCQllbHNlIGlmIChzZGtwLT5sYnB3cykKIAkJCQlzZF9jb25maWdfZGlzY2FyZChzZGtwLCBTRF9MQlBfV1MxNik7CiAJCQllbHNlIGlmIChzZGtwLT5sYnB3czEwKQogCQkJCXNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFNEX0xCUF9XUzEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL0tjb25maWcgYi9kcml2ZXJzL3NwaS9LY29uZmlnCmluZGV4IDYzMTZkNmQuLjVhZGUwYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9zcGkvS2NvbmZpZwpAQCAtMTg1LDYgKzE4NSwxNiBAQAogCWhlbHAKIAkgIFNQSSBtYXN0ZXIgY29udHJvbGxlciBmb3IgRGFWaW5jaS9EQTh4L09NQVAtTC9BTTF4IFNQSSBtb2R1bGVzLgogCitjb25maWcgU1BJX0RMTjIKKyAgICAgICB0cmlzdGF0ZSAiRGlvbGFuIERMTi0yIFVTQiBTUEkgYWRhcHRlciIKKyAgICAgICBkZXBlbmRzIG9uIE1GRF9ETE4yCisgICAgICAgaGVscAorICAgICAgICAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgRGlvbGFuCisgICAgICAgICBETE4yLCBhIFVTQiB0byBTUEkgaW50ZXJmYWNlLgorCisgICAgICAgICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisgICAgICAgICB3aWxsIGJlIGNhbGxlZCBzcGktZGxuMi4KKwogY29uZmlnIFNQSV9FRk0zMgogCXRyaXN0YXRlICJFRk0zMiBTUEkgY29udHJvbGxlciIKIAlkZXBlbmRzIG9uIE9GICYmIEFSTSAmJiAoQVJDSF9FRk0zMiB8fCBDT01QSUxFX1RFU1QpCkBAIC0yNzksNyArMjg5LDcgQEAKIAlkZXBlbmRzIG9uIEZTTF9TT0MKIAogY29uZmlnIFNQSV9GU0xfU1BJCi0JYm9vbCAiRnJlZXNjYWxlIFNQSSBjb250cm9sbGVyIGFuZCBBZXJvZmxleCBHYWlzbGVyIEdSTElCIFNQSSBjb250cm9sbGVyIgorCXRyaXN0YXRlICJGcmVlc2NhbGUgU1BJIGNvbnRyb2xsZXIgYW5kIEFlcm9mbGV4IEdhaXNsZXIgR1JMSUIgU1BJIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBPRgogCXNlbGVjdCBTUElfRlNMX0xJQgogCXNlbGVjdCBTUElfRlNMX0NQTSBpZiBGU0xfU09DCkBAIC0yOTksNyArMzA5LDcgQEAKIAkgIG1vZGUuIFZGNjEwIHBsYXRmb3JtIHVzZXMgdGhlIGNvbnRyb2xsZXIuCiAKIGNvbmZpZyBTUElfRlNMX0VTUEkKLQlib29sICJGcmVlc2NhbGUgZVNQSSBjb250cm9sbGVyIgorCXRyaXN0YXRlICJGcmVlc2NhbGUgZVNQSSBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gRlNMX1NPQwogCXNlbGVjdCBTUElfRlNMX0xJQgogCWhlbHAKQEAgLTU5NCw3ICs2MDQsNiBAQAogCSAgMTYgYml0IHdvcmRzIGluIFNQSSBtb2RlIDAsIGF1dG9tYXRpY2FsbHkgYXNzZXJ0aW5nIENTIG9uIHRyYW5zZmVyCiAJICBzdGFydCBhbmQgZGVhc3NlcnRpbmcgb24gZW5kLgogCi0KIGNvbmZpZyBTUElfTlVDOTAwCiAJdHJpc3RhdGUgIk51dm90b24gTlVDOTAwIHNlcmllcyBTUEkiCiAJZGVwZW5kcyBvbiBBUkNIX1c5MFg5MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKaW5kZXggNmI5ZDJhYy4uZGY1ZTIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTI3LDYgKzI3LDcgQEAKIG9iai0kKENPTkZJR19TUElfQ0xQUzcxMVgpCQkrPSBzcGktY2xwczcxMXgubwogb2JqLSQoQ09ORklHX1NQSV9DT0xERklSRV9RU1BJKQkJKz0gc3BpLWNvbGRmaXJlLXFzcGkubwogb2JqLSQoQ09ORklHX1NQSV9EQVZJTkNJKQkJKz0gc3BpLWRhdmluY2kubworb2JqLSQoQ09ORklHX1NQSV9ETE4yKQkJCSs9IHNwaS1kbG4yLm8KIG9iai0kKENPTkZJR19TUElfREVTSUdOV0FSRSkJCSs9IHNwaS1kdy5vCiBvYmotJChDT05GSUdfU1BJX0RXX01NSU8pCQkrPSBzcGktZHctbW1pby5vCiBvYmotJChDT05GSUdfU1BJX0RXX1BDSSkJCSs9IHNwaS1kdy1taWRwY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWF0bWVsLmMgYi9kcml2ZXJzL3NwaS9zcGktYXRtZWwuYwppbmRleCAyM2Q4ZjVmNS4uOWFmNzg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWF0bWVsLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWF0bWVsLmMKQEAgLTEwNDYsNiArMTA0Niw3IEBACiAJc3RydWN0IGF0bWVsX3NwaV9kZXZpY2UJKmFzZDsKIAlpbnQJCQl0aW1lb3V0OwogCWludAkJCXJldDsKKwl1bnNpZ25lZCBsb25nCQlkbWFfdGltZW91dDsKIAogCWFzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwogCkBAIC0xMTAzLDE1ICsxMTA0LDEyIEBACiAKIAkJLyogaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNvIGZyZWUgdGhlIGxvY2sgZm9yIHNjaGVkdWxlICovCiAJCWF0bWVsX3NwaV91bmxvY2soYXMpOwotCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFzLT54ZmVyX2NvbXBsZXRpb24sCi0JCQkJCQkJU1BJX0RNQV9USU1FT1VUKTsKKwkJZG1hX3RpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFzLT54ZmVyX2NvbXBsZXRpb24sCisJCQkJCQkJICBTUElfRE1BX1RJTUVPVVQpOwogCQlhdG1lbF9zcGlfbG9jayhhcyk7Ci0JCWlmIChXQVJOX09OKHJldCA9PSAwKSkgewotCQkJZGV2X2Vycigmc3BpLT5kZXYsCi0JCQkJInNwaSB0cmFzZmVyIHRpbWVvdXQsIGVyciAlZFxuIiwgcmV0KTsKKwkJaWYgKFdBUk5fT04oZG1hX3RpbWVvdXQgPT0gMCkpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAic3BpIHRyYW5zZmVyIHRpbWVvdXRcbiIpOwogCQkJYXMtPmRvbmVfc3RhdHVzID0gLUVJTzsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IDA7CiAJCX0KIAogCQlpZiAoYXMtPmRvbmVfc3RhdHVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWF1MTU1MC5jIGIvZHJpdmVycy9zcGkvc3BpLWF1MTU1MC5jCmluZGV4IDMyNmY0NzkuLmY0NWUwODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1hdTE1NTAuYworKysgYi9kcml2ZXJzL3NwaS9zcGktYXUxNTUwLmMKQEAgLTE1LDEwICsxNSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWJjbTI4MzUuYyBiL2RyaXZlcnMvc3BpL3NwaS1iY20yODM1LmMKaW5kZXggOThhYWI0NTcuLjQxOWE3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1iY20yODM1LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWJjbTI4MzUuYwpAQCAtMTcsMTAgKzE3LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktYmNtNjN4eC5jIGIvZHJpdmVycy9zcGkvc3BpLWJjbTYzeHguYwppbmRleCBjMjA1MzA5Li5lNzNlMmIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWJjbTYzeHguYworKysgYi9kcml2ZXJzL3NwaS9zcGktYmNtNjN4eC5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1iaXRiYW5nLmMgYi9kcml2ZXJzL3NwaS9zcGktYml0YmFuZy5jCmluZGV4IGRjN2QyYzIuLjVlZjY2MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1iaXRiYW5nLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWJpdGJhbmcuYwpAQCAtMTAsMTAgKzEwLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jIGIvZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jCmluZGV4IGVlNGY5MWMuLjlhOTU4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWNvbGRmaXJlLXFzcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS1jb2xkZmlyZS1xc3BpLmMKaW5kZXggNDFiNWRjNC4uNjg4OTU2ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1jb2xkZmlyZS1xc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWNvbGRmaXJlLXFzcGkuYwpAQCAtMTIsMTEgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICoKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1kYXZpbmNpLmMgYi9kcml2ZXJzL3NwaS9zcGktZGF2aW5jaS5jCmluZGV4IGIzNzA3YmEuLjVlOTkxMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1kYXZpbmNpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWRhdmluY2kuYwpAQCAtMTEsMTAgKzExLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1kbG4yLmMgYi9kcml2ZXJzL3NwaS9zcGktZGxuMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiN2Q5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGktZGxuMi5jCkBAIC0wLDAgKzEsODgxIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgRGlvbGFuIERMTi0yIFVTQi1TUEkgYWRhcHRlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGxuMi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjZGVmaW5lIERMTjJfU1BJX01PRFVMRV9JRAkJMHgwMgorI2RlZmluZSBETE4yX1NQSV9DTUQoY21kKQkJRExOMl9DTUQoY21kLCBETE4yX1NQSV9NT0RVTEVfSUQpCisKKy8qIFNQSSBjb21tYW5kcyAqLworI2RlZmluZSBETE4yX1NQSV9HRVRfUE9SVF9DT1VOVAkJCURMTjJfU1BJX0NNRCgweDAwKQorI2RlZmluZSBETE4yX1NQSV9FTkFCTEUJCQkJRExOMl9TUElfQ01EKDB4MTEpCisjZGVmaW5lIERMTjJfU1BJX0RJU0FCTEUJCQlETE4yX1NQSV9DTUQoMHgxMikKKyNkZWZpbmUgRExOMl9TUElfSVNfRU5BQkxFRAkJCURMTjJfU1BJX0NNRCgweDEzKQorI2RlZmluZSBETE4yX1NQSV9TRVRfTU9ERQkJCURMTjJfU1BJX0NNRCgweDE0KQorI2RlZmluZSBETE4yX1NQSV9HRVRfTU9ERQkJCURMTjJfU1BJX0NNRCgweDE1KQorI2RlZmluZSBETE4yX1NQSV9TRVRfRlJBTUVfU0laRQkJCURMTjJfU1BJX0NNRCgweDE2KQorI2RlZmluZSBETE4yX1NQSV9HRVRfRlJBTUVfU0laRQkJCURMTjJfU1BJX0NNRCgweDE3KQorI2RlZmluZSBETE4yX1NQSV9TRVRfRlJFUVVFTkNZCQkJRExOMl9TUElfQ01EKDB4MTgpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9GUkVRVUVOQ1kJCQlETE4yX1NQSV9DTUQoMHgxOSkKKyNkZWZpbmUgRExOMl9TUElfUkVBRF9XUklURQkJCURMTjJfU1BJX0NNRCgweDFBKQorI2RlZmluZSBETE4yX1NQSV9SRUFECQkJCURMTjJfU1BJX0NNRCgweDFCKQorI2RlZmluZSBETE4yX1NQSV9XUklURQkJCQlETE4yX1NQSV9DTUQoMHgxQykKKyNkZWZpbmUgRExOMl9TUElfU0VUX0RFTEFZX0JFVFdFRU5fU1MJCURMTjJfU1BJX0NNRCgweDIwKQorI2RlZmluZSBETE4yX1NQSV9HRVRfREVMQVlfQkVUV0VFTl9TUwkJRExOMl9TUElfQ01EKDB4MjEpCisjZGVmaW5lIERMTjJfU1BJX1NFVF9ERUxBWV9BRlRFUl9TUwkJRExOMl9TUElfQ01EKDB4MjIpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9ERUxBWV9BRlRFUl9TUwkJRExOMl9TUElfQ01EKDB4MjMpCisjZGVmaW5lIERMTjJfU1BJX1NFVF9ERUxBWV9CRVRXRUVOX0ZSQU1FUwlETE4yX1NQSV9DTUQoMHgyNCkKKyNkZWZpbmUgRExOMl9TUElfR0VUX0RFTEFZX0JFVFdFRU5fRlJBTUVTCURMTjJfU1BJX0NNRCgweDI1KQorI2RlZmluZSBETE4yX1NQSV9TRVRfU1MJCQkJRExOMl9TUElfQ01EKDB4MjYpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TUwkJCQlETE4yX1NQSV9DTUQoMHgyNykKKyNkZWZpbmUgRExOMl9TUElfUkVMRUFTRV9TUwkJCURMTjJfU1BJX0NNRCgweDI4KQorI2RlZmluZSBETE4yX1NQSV9TU19WQVJJQUJMRV9FTkFCTEUJCURMTjJfU1BJX0NNRCgweDJCKQorI2RlZmluZSBETE4yX1NQSV9TU19WQVJJQUJMRV9ESVNBQkxFCQlETE4yX1NQSV9DTUQoMHgyQykKKyNkZWZpbmUgRExOMl9TUElfU1NfVkFSSUFCTEVfSVNfRU5BQkxFRAkJRExOMl9TUElfQ01EKDB4MkQpCisjZGVmaW5lIERMTjJfU1BJX1NTX0FBVF9FTkFCTEUJCQlETE4yX1NQSV9DTUQoMHgyRSkKKyNkZWZpbmUgRExOMl9TUElfU1NfQUFUX0RJU0FCTEUJCQlETE4yX1NQSV9DTUQoMHgyRikKKyNkZWZpbmUgRExOMl9TUElfU1NfQUFUX0lTX0VOQUJMRUQJCURMTjJfU1BJX0NNRCgweDMwKQorI2RlZmluZSBETE4yX1NQSV9TU19CRVRXRUVOX0ZSQU1FU19FTkFCTEUJRExOMl9TUElfQ01EKDB4MzEpCisjZGVmaW5lIERMTjJfU1BJX1NTX0JFVFdFRU5fRlJBTUVTX0RJU0FCTEUJRExOMl9TUElfQ01EKDB4MzIpCisjZGVmaW5lIERMTjJfU1BJX1NTX0JFVFdFRU5fRlJBTUVTX0lTX0VOQUJMRUQJRExOMl9TUElfQ01EKDB4MzMpCisjZGVmaW5lIERMTjJfU1BJX1NFVF9DUEhBCQkJRExOMl9TUElfQ01EKDB4MzQpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9DUEhBCQkJRExOMl9TUElfQ01EKDB4MzUpCisjZGVmaW5lIERMTjJfU1BJX1NFVF9DUE9MCQkJRExOMl9TUElfQ01EKDB4MzYpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9DUE9MCQkJRExOMl9TUElfQ01EKDB4MzcpCisjZGVmaW5lIERMTjJfU1BJX1NTX01VTFRJX0VOQUJMRQkJRExOMl9TUElfQ01EKDB4MzgpCisjZGVmaW5lIERMTjJfU1BJX1NTX01VTFRJX0RJU0FCTEUJCURMTjJfU1BJX0NNRCgweDM5KQorI2RlZmluZSBETE4yX1NQSV9TU19NVUxUSV9JU19FTkFCTEVECQlETE4yX1NQSV9DTUQoMHgzQSkKKyNkZWZpbmUgRExOMl9TUElfR0VUX1NVUFBPUlRFRF9NT0RFUwkJRExOMl9TUElfQ01EKDB4NDApCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TVVBQT1JURURfQ1BIQV9WQUxVRVMJRExOMl9TUElfQ01EKDB4NDEpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TVVBQT1JURURfQ1BPTF9WQUxVRVMJRExOMl9TUElfQ01EKDB4NDIpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TVVBQT1JURURfRlJBTUVfU0laRVMJRExOMl9TUElfQ01EKDB4NDMpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TU19DT1VOVAkJCURMTjJfU1BJX0NNRCgweDQ0KQorI2RlZmluZSBETE4yX1NQSV9HRVRfTUlOX0ZSRVFVRU5DWQkJRExOMl9TUElfQ01EKDB4NDUpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9NQVhfRlJFUVVFTkNZCQlETE4yX1NQSV9DTUQoMHg0NikKKyNkZWZpbmUgRExOMl9TUElfR0VUX01JTl9ERUxBWV9CRVRXRUVOX1NTCURMTjJfU1BJX0NNRCgweDQ3KQorI2RlZmluZSBETE4yX1NQSV9HRVRfTUFYX0RFTEFZX0JFVFdFRU5fU1MJRExOMl9TUElfQ01EKDB4NDgpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9NSU5fREVMQVlfQUZURVJfU1MJCURMTjJfU1BJX0NNRCgweDQ5KQorI2RlZmluZSBETE4yX1NQSV9HRVRfTUFYX0RFTEFZX0FGVEVSX1NTCQlETE4yX1NQSV9DTUQoMHg0QSkKKyNkZWZpbmUgRExOMl9TUElfR0VUX01JTl9ERUxBWV9CRVRXRUVOX0ZSQU1FUwlETE4yX1NQSV9DTUQoMHg0QikKKyNkZWZpbmUgRExOMl9TUElfR0VUX01BWF9ERUxBWV9CRVRXRUVOX0ZSQU1FUwlETE4yX1NQSV9DTUQoMHg0QykKKworI2RlZmluZSBETE4yX1NQSV9NQVhfWEZFUl9TSVpFCQkJMjU2CisjZGVmaW5lIERMTjJfU1BJX0JVRl9TSVpFCQkJKERMTjJfU1BJX01BWF9YRkVSX1NJWkUgKyAxNikKKyNkZWZpbmUgRExOMl9TUElfQVRUUl9MRUFWRV9TU19MT1cJCUJJVCgwKQorI2RlZmluZSBETE4yX1RSQU5TRkVSU19XQUlUX0NPTVBMRVRFCQkxCisjZGVmaW5lIERMTjJfVFJBTlNGRVJTX0NBTkNFTAkJCTAKKyNkZWZpbmUgRExOMl9SUE1fQVVUT1NVU1BFTkRfVElNRU9VVAkJMjAwMAorCitzdHJ1Y3QgZGxuMl9zcGkgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwl1OCBwb3J0OworCisJLyoKKwkgKiBUaGlzIGJ1ZmZlciB3aWxsIGJlIHVzZWQgbWFpbmx5IGZvciByZWFkL3dyaXRlIG9wZXJhdGlvbnMuIFNpbmNlCisJICogdGhleSdyZSBxdWl0ZSBsYXJnZSwgd2UgY2Fubm90IHVzZSB0aGUgc3RhY2suIFByb3RlY3Rpb24gaXMgbm90CisJICogbmVlZGVkIGJlY2F1c2UgYWxsIFNQSSBjb21tdW5pY2F0aW9uIGlzIHNlcmlhbGl6ZWQgYnkgdGhlIFNQSSBjb3JlLgorCSAqLworCXZvaWQgKmJ1ZjsKKworCXU4IGJwdzsKKwl1MzIgc3BlZWQ7CisJdTE2IG1vZGU7CisJdTggY3M7Cit9OworCisvKgorICogRW5hYmxlL0Rpc2FibGUgU1BJIG1vZHVsZS4gVGhlIGRpc2FibGUgY29tbWFuZCB3aWxsIHdhaXQgZm9yIHRyYW5zZmVycyB0bworICogY29tcGxldGUgZmlyc3QuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfZW5hYmxlKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgYm9vbCBlbmFibGUpCit7CisJdTE2IGNtZDsKKwlzdHJ1Y3QgeworCQl1OCBwb3J0OworCQl1OCB3YWl0X2Zvcl9jb21wbGV0aW9uOworCX0gdHg7CisJdW5zaWduZWQgbGVuID0gc2l6ZW9mKHR4KTsKKworCXR4LnBvcnQgPSBkbG4yLT5wb3J0OworCisJaWYgKGVuYWJsZSkgeworCQljbWQgPSBETE4yX1NQSV9FTkFCTEU7CisJCWxlbiAtPSBzaXplb2YodHgud2FpdF9mb3JfY29tcGxldGlvbik7CisJfSBlbHNlIHsKKwkJdHgud2FpdF9mb3JfY29tcGxldGlvbiA9IERMTjJfVFJBTlNGRVJTX1dBSVRfQ09NUExFVEU7CisJCWNtZCA9IERMTjJfU1BJX0RJU0FCTEU7CisJfQorCisJcmV0dXJuIGRsbjJfdHJhbnNmZXJfdHgoZGxuMi0+cGRldiwgY21kLCAmdHgsIGxlbik7Cit9CisKKy8qCisgKiBTZWxlY3QvdW5zZWxlY3QgbXVsdGlwbGUgQ1MgbGluZXMuIFRoZSBzZWxlY3RlZCBsaW5lcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAqIHRvZ2dsZWQgTE9XL0hJR0ggYnkgdGhlIGJvYXJkIGZpcm13YXJlIGR1cmluZyB0cmFuc2ZlcnMsIHByb3ZpZGVkIHRoZXkncmUKKyAqIGVuYWJsZWQgZmlyc3QuCisgKgorICogRXg6IGNzX21hc2sgPSAweDAzIC0+IENTMCAmIENTMSB3aWxsIGJlIHNlbGVjdGVkIGFuZCB0aGUgbmV4dCBXUi9SRCBvcGVyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHRvZ2dsZSB0aGUgbGluZXMgTE9XL0hJR0ggYXV0b21hdGljYWxseS4KKyAqLworc3RhdGljIGludCBkbG4yX3NwaV9jc19zZXQoc3RydWN0IGRsbjJfc3BpICpkbG4yLCB1OCBjc19tYXNrKQoreworCXN0cnVjdCB7CisJCXU4IHBvcnQ7CisJCXU4IGNzOworCX0gdHg7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKworCS8qCisJICogQWNjb3JkaW5nIHRvIERpb2xhbiBkb2NzLCAiYSBzbGF2ZSBkZXZpY2UgY2FuIGJlIHNlbGVjdGVkIGJ5IGNoYW5naW5nCisJICogdGhlIGNvcnJlc3BvbmRpbmcgYml0IHZhbHVlIHRvIDAiLiBUaGUgcmVzdCBtdXN0IGJlIHNldCB0byAxLiBIZW5jZQorCSAqIHRoZSBiaXR3aXNlIE5PVCBpbiBmcm9udC4KKwkgKi8KKwl0eC5jcyA9IH5jc19tYXNrOworCisJcmV0dXJuIGRsbjJfdHJhbnNmZXJfdHgoZGxuMi0+cGRldiwgRExOMl9TUElfU0VUX1NTLCAmdHgsIHNpemVvZih0eCkpOworfQorCisvKgorICogU2VsZWN0IG9uZSBDUyBsaW5lLiBUaGUgb3RoZXIgbGluZXMgd2lsbCBiZSB1bi1zZWxlY3RlZC4KKyAqLworc3RhdGljIGludCBkbG4yX3NwaV9jc19zZXRfb25lKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTggY3MpCit7CisJcmV0dXJuIGRsbjJfc3BpX2NzX3NldChkbG4yLCBCSVQoY3MpKTsKK30KKworLyoKKyAqIEVuYWJsZS9kaXNhYmxlIENTIGxpbmVzIGZvciB1c2FnZS4gVGhlIG1vZHVsZSBoYXMgdG8gYmUgZGlzYWJsZWQgZmlyc3QuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfY3NfZW5hYmxlKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTggY3NfbWFzaywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJdTggY3M7CisJfSB0eDsKKwl1MTYgY21kOworCisJdHgucG9ydCA9IGRsbjItPnBvcnQ7CisJdHguY3MgPSBjc19tYXNrOworCWNtZCA9IGVuYWJsZSA/IERMTjJfU1BJX1NTX01VTFRJX0VOQUJMRSA6IERMTjJfU1BJX1NTX01VTFRJX0RJU0FCTEU7CisKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBjbWQsICZ0eCwgc2l6ZW9mKHR4KSk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfY3NfZW5hYmxlX2FsbChzdHJ1Y3QgZGxuMl9zcGkgKmRsbjIsIGJvb2wgZW5hYmxlKQoreworCXU4IGNzX21hc2sgPSBHRU5NQVNLKGRsbjItPm1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgLSAxLCAwKTsKKworCXJldHVybiBkbG4yX3NwaV9jc19lbmFibGUoZGxuMiwgY3NfbWFzaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBkbG4yX3NwaV9nZXRfY3NfbnVtKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTE2ICpjc19udW0pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgeworCQl1OCBwb3J0OworCX0gdHg7CisJc3RydWN0IHsKKwkJX19sZTE2IGNzX2NvdW50OworCX0gcng7CisJdW5zaWduZWQgcnhfbGVuID0gc2l6ZW9mKHJ4KTsKKworCXR4LnBvcnQgPSBkbG4yLT5wb3J0OworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9TUElfR0VUX1NTX0NPVU5ULCAmdHgsIHNpemVvZih0eCksCisJCQkgICAgJnJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKHJ4KSkKKwkJcmV0dXJuIC1FUFJPVE87CisKKwkqY3NfbnVtID0gbGUxNl90b19jcHUocnguY3NfY291bnQpOworCisJZGV2X2RiZygmZGxuMi0+cGRldi0+ZGV2LCAiY3NfbnVtID0gJWRcbiIsICpjc19udW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfZ2V0X3NwZWVkKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTE2IGNtZCwgdTMyICpmcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwl9IHR4OworCXN0cnVjdCB7CisJCV9fbGUzMiBzcGVlZDsKKwl9IHJ4OworCXVuc2lnbmVkIHJ4X2xlbiA9IHNpemVvZihyeCk7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgY21kLCAmdHgsIHNpemVvZih0eCksICZyeCwgJnJ4X2xlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJ4X2xlbiA8IHNpemVvZihyeCkpCisJCXJldHVybiAtRVBST1RPOworCisJKmZyZXEgPSBsZTMyX3RvX2NwdShyeC5zcGVlZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCBidXMgbWluL21heCBmcmVxdWVuY2llcy4KKyAqLworc3RhdGljIGludCBkbG4yX3NwaV9nZXRfc3BlZWRfcmFuZ2Uoc3RydWN0IGRsbjJfc3BpICpkbG4yLCB1MzIgKmZtaW4sIHUzMiAqZm1heCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZGxuMl9zcGlfZ2V0X3NwZWVkKGRsbjIsIERMTjJfU1BJX0dFVF9NSU5fRlJFUVVFTkNZLCBmbWluKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRsbjJfc3BpX2dldF9zcGVlZChkbG4yLCBETE4yX1NQSV9HRVRfTUFYX0ZSRVFVRU5DWSwgZm1heCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfZGJnKCZkbG4yLT5wZGV2LT5kZXYsICJmcmVxX21pbiA9ICVkLCBmcmVxX21heCA9ICVkXG4iLAorCQkqZm1pbiwgKmZtYXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIGJ1cyBzcGVlZC4gVGhlIG1vZHVsZSB3aWxsIGF1dG9tYXRpY2FsbHkgcm91bmQgZG93biB0byB0aGUgY2xvc2VzdAorICogYXZhaWxhYmxlIGZyZXF1ZW5jeSBhbmQgcmV0dXJucyBpdC4gVGhlIG1vZHVsZSBoYXMgdG8gYmUgZGlzYWJsZWQgZmlyc3QuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfc2V0X3NwZWVkKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTMyIHNwZWVkKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJX19sZTMyIHNwZWVkOworCX0gX19wYWNrZWQgdHg7CisJc3RydWN0IHsKKwkJX19sZTMyIHNwZWVkOworCX0gcng7CisJaW50IHJ4X2xlbiA9IHNpemVvZihyeCk7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC5zcGVlZCA9IGNwdV90b19sZTMyKHNwZWVkKTsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9TUElfU0VUX0ZSRVFVRU5DWSwgJnR4LCBzaXplb2YodHgpLAorCQkJICAgICZyeCwgJnJ4X2xlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJ4X2xlbiA8IHNpemVvZihyeCkpCisJCXJldHVybiAtRVBST1RPOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGFuZ2UgQ1BPTCAmIENQSEEuIFRoZSBtb2R1bGUgaGFzIHRvIGJlIGRpc2FibGVkIGZpcnN0LgorICovCitzdGF0aWMgaW50IGRsbjJfc3BpX3NldF9tb2RlKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTggbW9kZSkKK3sKKwlzdHJ1Y3QgeworCQl1OCBwb3J0OworCQl1OCBtb2RlOworCX0gdHg7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC5tb2RlID0gbW9kZTsKKworCXJldHVybiBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfU1BJX1NFVF9NT0RFLCAmdHgsIHNpemVvZih0eCkpOworfQorCisvKgorICogQ2hhbmdlIGZyYW1lIHNpemUuIFRoZSBtb2R1bGUgaGFzIHRvIGJlIGRpc2FibGVkIGZpcnN0LgorICovCitzdGF0aWMgaW50IGRsbjJfc3BpX3NldF9icHcoc3RydWN0IGRsbjJfc3BpICpkbG4yLCB1OCBicHcpCit7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJdTggYnB3OworCX0gdHg7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC5icHcgPSBicHc7CisKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX1NQSV9TRVRfRlJBTUVfU0laRSwKKwkJCQkmdHgsIHNpemVvZih0eCkpOworfQorCitzdGF0aWMgaW50IGRsbjJfc3BpX2dldF9zdXBwb3J0ZWRfZnJhbWVfc2l6ZXMoc3RydWN0IGRsbjJfc3BpICpkbG4yLAorCQkJCQkgICAgICB1MzIgKmJwd19tYXNrKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwl9IHR4OworCXN0cnVjdCB7CisJCXU4IGNvdW50OworCQl1OCBmcmFtZV9zaXplc1szNl07CisJfSAqcnggPSBkbG4yLT5idWY7CisJdW5zaWduZWQgcnhfbGVuID0gc2l6ZW9mKCpyeCk7CisJaW50IGk7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9TUElfR0VUX1NVUFBPUlRFRF9GUkFNRV9TSVpFUywKKwkJCSAgICAmdHgsIHNpemVvZih0eCksIHJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKCpyeCkpCisJCXJldHVybiAtRVBST1RPOworCWlmIChyeC0+Y291bnQgPiBBUlJBWV9TSVpFKHJ4LT5mcmFtZV9zaXplcykpCisJCXJldHVybiAtRVBST1RPOworCisJKmJwd19tYXNrID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcngtPmNvdW50OyBpKyspCisJCSpicHdfbWFzayB8PSBCSVQocngtPmZyYW1lX3NpemVzW2ldIC0gMSk7CisKKwlkZXZfZGJnKCZkbG4yLT5wZGV2LT5kZXYsICJicHdfbWFzayA9IDB4JVhcbiIsICpicHdfbWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvcHkgdGhlIGRhdGEgdG8gRExOMiBidWZmZXIgYW5kIGNoYW5nZSB0aGUgYnl0ZSBvcmRlciB0byBMRSwgcmVxdWVzdGVkIGJ5CisgKiBETE4yIG1vZHVsZS4gU1BJIGNvcmUgbWFrZXMgc3VyZSB0aGF0IHRoZSBkYXRhIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHdvcmQKKyAqIHNpemUuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfY29weV90b19idWYodTggKmRsbjJfYnVmLCBjb25zdCB1OCAqc3JjLCB1MTYgbGVuLCB1OCBicHcpCit7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisJbWVtY3B5KGRsbjJfYnVmLCBzcmMsIGxlbik7CisjZWxzZQorCWlmIChicHcgPD0gOCkgeworCQltZW1jcHkoZGxuMl9idWYsIHNyYywgbGVuKTsKKwl9IGVsc2UgaWYgKGJwdyA8PSAxNikgeworCQlfX2xlMTYgKmQgPSAoX19sZTE2ICopZGxuMl9idWY7CisJCXUxNiAqcyA9ICh1MTYgKilzcmM7CisKKwkJbGVuID0gbGVuIC8gMjsKKwkJd2hpbGUgKGxlbi0tKQorCQkJKmQrKyA9IGNwdV90b19sZTE2cChzKyspOworCX0gZWxzZSB7CisJCV9fbGUzMiAqZCA9IChfX2xlMzIgKilkbG4yX2J1ZjsKKwkJdTMyICpzID0gKHUzMiAqKXNyYzsKKworCQlsZW4gPSBsZW4gLyA0OworCQl3aGlsZSAobGVuLS0pCisJCQkqZCsrID0gY3B1X3RvX2xlMzJwKHMrKyk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvcHkgdGhlIGRhdGEgZnJvbSBETE4yIGJ1ZmZlciBhbmQgY29udmVydCB0byBDUFUgYnl0ZSBvcmRlciBzaW5jZSB0aGUgRExOMgorICogYnVmZmVyIGlzIExFIG9yZGVyZWQuIFNQSSBjb3JlIG1ha2VzIHN1cmUgdGhhdCB0aGUgZGF0YSBsZW5ndGggaXMgYSBtdWx0aXBsZQorICogb2Ygd29yZCBzaXplLiBUaGUgUlggZGxuMl9idWYgaXMgMiBieXRlIGFsaWduZWQgc28sIGZvciBCRSwgd2UgaGF2ZSB0byBtYWtlCisgKiBzdXJlIHdlIGF2b2lkIHVuYWxpZ25lZCBhY2Nlc3NlcyBmb3IgMzIgYml0IGNhc2UuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfY29weV9mcm9tX2J1Zih1OCAqZGVzdCwgY29uc3QgdTggKmRsbjJfYnVmLCB1MTYgbGVuLCB1OCBicHcpCit7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisJbWVtY3B5KGRlc3QsIGRsbjJfYnVmLCBsZW4pOworI2Vsc2UKKwlpZiAoYnB3IDw9IDgpIHsKKwkJbWVtY3B5KGRlc3QsIGRsbjJfYnVmLCBsZW4pOworCX0gZWxzZSBpZiAoYnB3IDw9IDE2KSB7CisJCXUxNiAqZCA9ICh1MTYgKilkZXN0OworCQlfX2xlMTYgKnMgPSAoX19sZTE2ICopZGxuMl9idWY7CisKKwkJbGVuID0gbGVuIC8gMjsKKwkJd2hpbGUgKGxlbi0tKQorCQkJKmQrKyA9IGxlMTZfdG9fY3B1cChzKyspOworCX0gZWxzZSB7CisJCXUzMiAqZCA9ICh1MzIgKilkZXN0OworCQlfX2xlMzIgKnMgPSAoX19sZTMyICopZGxuMl9idWY7CisKKwkJbGVuID0gbGVuIC8gNDsKKwkJd2hpbGUgKGxlbi0tKQorCQkJKmQrKyA9IGdldF91bmFsaWduZWRfbGUzMihzKyspOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQZXJmb3JtIG9uZSB3cml0ZSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfd3JpdGVfb25lKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgY29uc3QgdTggKmRhdGEsCisJCQkgICAgICB1MTYgZGF0YV9sZW4sIHU4IGF0dHIpCit7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJX19sZTE2IHNpemU7CisJCXU4IGF0dHI7CisJCXU4IGJ1ZltETE4yX1NQSV9NQVhfWEZFUl9TSVpFXTsKKwl9IF9fcGFja2VkICp0eCA9IGRsbjItPmJ1ZjsKKwl1bnNpZ25lZCB0eF9sZW47CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCp0eCkgPiBETE4yX1NQSV9CVUZfU0laRSk7CisKKwlpZiAoZGF0YV9sZW4gPiBETE4yX1NQSV9NQVhfWEZFUl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXR4LT5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC0+c2l6ZSA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKwl0eC0+YXR0ciA9IGF0dHI7CisKKwlkbG4yX3NwaV9jb3B5X3RvX2J1Zih0eC0+YnVmLCBkYXRhLCBkYXRhX2xlbiwgZGxuMi0+YnB3KTsKKworCXR4X2xlbiA9IHNpemVvZigqdHgpICsgZGF0YV9sZW4gLSBETE4yX1NQSV9NQVhfWEZFUl9TSVpFOworCXJldHVybiBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfU1BJX1dSSVRFLCB0eCwgdHhfbGVuKTsKK30KKworLyoKKyAqIFBlcmZvcm0gb25lIHJlYWQgb3BlcmF0aW9uLgorICovCitzdGF0aWMgaW50IGRsbjJfc3BpX3JlYWRfb25lKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTggKmRhdGEsCisJCQkgICAgIHUxNiBkYXRhX2xlbiwgdTggYXR0cikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB7CisJCXU4IHBvcnQ7CisJCV9fbGUxNiBzaXplOworCQl1OCBhdHRyOworCX0gX19wYWNrZWQgdHg7CisJc3RydWN0IHsKKwkJX19sZTE2IHNpemU7CisJCXU4IGJ1ZltETE4yX1NQSV9NQVhfWEZFUl9TSVpFXTsKKwl9IF9fcGFja2VkICpyeCA9IGRsbjItPmJ1ZjsKKwl1bnNpZ25lZCByeF9sZW4gPSBzaXplb2YoKnJ4KTsKKworCUJVSUxEX0JVR19PTihzaXplb2YoKnJ4KSA+IERMTjJfU1BJX0JVRl9TSVpFKTsKKworCWlmIChkYXRhX2xlbiA+IERMTjJfU1BJX01BWF9YRkVSX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJdHgucG9ydCA9IGRsbjItPnBvcnQ7CisJdHguc2l6ZSA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKwl0eC5hdHRyID0gYXR0cjsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9TUElfUkVBRCwgJnR4LCBzaXplb2YodHgpLAorCQkJICAgIHJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKHJ4LT5zaXplKSArIGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKwlpZiAobGUxNl90b19jcHUocngtPnNpemUpICE9IGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWRsbjJfc3BpX2NvcHlfZnJvbV9idWYoZGF0YSwgcngtPmJ1ZiwgZGF0YV9sZW4sIGRsbjItPmJwdyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBlcmZvcm0gb25lIHdyaXRlICYgcmVhZCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfcmVhZF93cml0ZV9vbmUoc3RydWN0IGRsbjJfc3BpICpkbG4yLCBjb25zdCB1OCAqdHhfZGF0YSwKKwkJCQkgICB1OCAqcnhfZGF0YSwgdTE2IGRhdGFfbGVuLCB1OCBhdHRyKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJX19sZTE2IHNpemU7CisJCXU4IGF0dHI7CisJCXU4IGJ1ZltETE4yX1NQSV9NQVhfWEZFUl9TSVpFXTsKKwl9IF9fcGFja2VkICp0eDsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgc2l6ZTsKKwkJdTggYnVmW0RMTjJfU1BJX01BWF9YRkVSX1NJWkVdOworCX0gX19wYWNrZWQgKnJ4OworCXVuc2lnbmVkIHR4X2xlbiwgcnhfbGVuOworCisJQlVJTERfQlVHX09OKHNpemVvZigqdHgpID4gRExOMl9TUElfQlVGX1NJWkUgfHwKKwkJICAgICBzaXplb2YoKnJ4KSA+IERMTjJfU1BJX0JVRl9TSVpFKTsKKworCWlmIChkYXRhX2xlbiA+IERMTjJfU1BJX01BWF9YRkVSX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGlzIGEgcHNldWRvIGZ1bGwtZHVwbGV4IGNvbW11bmljYXRpb24sIHdlJ3JlIHBlcmZlY3RseQorCSAqIHNhZmUgdG8gdXNlIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYm90aCB0eCBhbmQgcnguIFdoZW4gRExOMiBzZW5kcyB0aGUKKwkgKiByZXNwb25zZSBiYWNrLCB3aXRoIHRoZSByeCBkYXRhLCB3ZSBkb24ndCBuZWVkIHRoZSB0eCBidWZmZXIgYW55bW9yZS4KKwkgKi8KKwl0eCA9IGRsbjItPmJ1ZjsKKwlyeCA9IGRsbjItPmJ1ZjsKKworCXR4LT5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC0+c2l6ZSA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKwl0eC0+YXR0ciA9IGF0dHI7CisKKwlkbG4yX3NwaV9jb3B5X3RvX2J1Zih0eC0+YnVmLCB0eF9kYXRhLCBkYXRhX2xlbiwgZGxuMi0+YnB3KTsKKworCXR4X2xlbiA9IHNpemVvZigqdHgpICsgZGF0YV9sZW4gLSBETE4yX1NQSV9NQVhfWEZFUl9TSVpFOworCXJ4X2xlbiA9IHNpemVvZigqcngpOworCisJcmV0ID0gZGxuMl90cmFuc2ZlcihkbG4yLT5wZGV2LCBETE4yX1NQSV9SRUFEX1dSSVRFLCB0eCwgdHhfbGVuLAorCQkJICAgIHJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKHJ4LT5zaXplKSArIGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKwlpZiAobGUxNl90b19jcHUocngtPnNpemUpICE9IGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWRsbjJfc3BpX2NvcHlfZnJvbV9idWYocnhfZGF0YSwgcngtPmJ1ZiwgZGF0YV9sZW4sIGRsbjItPmJwdyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQvV3JpdGUgd3JhcHBlci4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHNwbGl0IGFuIG9wZXJhdGlvbiBpbnRvIG11bHRpcGxlCisgKiBzaW5nbGUgb25lcyBkdWUgdG8gZGV2aWNlIGJ1ZmZlciBjb25zdHJhaW50cy4KKyAqLworc3RhdGljIGludCBkbG4yX3NwaV9yZHdyKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgY29uc3QgdTggKnR4X2RhdGEsCisJCQkgdTggKnJ4X2RhdGEsIHUxNiBkYXRhX2xlbiwgdTggYXR0cikgeworCWludCByZXQ7CisJdTE2IGxlbjsKKwl1OCB0ZW1wX2F0dHI7CisJdTE2IHJlbWFpbmluZyA9IGRhdGFfbGVuOworCXUxNiBvZmZzZXQ7CisKKwlkbyB7CisJCWlmIChyZW1haW5pbmcgPiBETE4yX1NQSV9NQVhfWEZFUl9TSVpFKSB7CisJCQlsZW4gPSBETE4yX1NQSV9NQVhfWEZFUl9TSVpFOworCQkJdGVtcF9hdHRyID0gRExOMl9TUElfQVRUUl9MRUFWRV9TU19MT1c7CisJCX0gZWxzZSB7CisJCQlsZW4gPSByZW1haW5pbmc7CisJCQl0ZW1wX2F0dHIgPSBhdHRyOworCQl9CisKKwkJb2Zmc2V0ID0gZGF0YV9sZW4gLSByZW1haW5pbmc7CisKKwkJaWYgKHR4X2RhdGEgJiYgcnhfZGF0YSkgeworCQkJcmV0ID0gZGxuMl9zcGlfcmVhZF93cml0ZV9vbmUoZGxuMiwKKwkJCQkJCSAgICAgIHR4X2RhdGEgKyBvZmZzZXQsCisJCQkJCQkgICAgICByeF9kYXRhICsgb2Zmc2V0LAorCQkJCQkJICAgICAgbGVuLCB0ZW1wX2F0dHIpOworCQl9IGVsc2UgaWYgKHR4X2RhdGEpIHsKKwkJCXJldCA9IGRsbjJfc3BpX3dyaXRlX29uZShkbG4yLAorCQkJCQkJIHR4X2RhdGEgKyBvZmZzZXQsCisJCQkJCQkgbGVuLCB0ZW1wX2F0dHIpOworCQl9IGVsc2UgaWYgKHJ4X2RhdGEpIHsKKwkJCXJldCA9IGRsbjJfc3BpX3JlYWRfb25lKGRsbjIsCisJCQkJCQlyeF9kYXRhICsgb2Zmc2V0LAorCQkJCQkJbGVuLCB0ZW1wX2F0dHIpOworCQkgfSBlbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQkgfQorCisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZW1haW5pbmcgLT0gbGVuOworCX0gd2hpbGUgKHJlbWFpbmluZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbG4yX3NwaV9wcmVwYXJlX21lc3NhZ2Uoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKKwkJCQkgICAgc3RydWN0IHNwaV9tZXNzYWdlICptZXNzYWdlKQoreworCWludCByZXQ7CisJc3RydWN0IGRsbjJfc3BpICpkbG4yID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBtZXNzYWdlLT5zcGk7CisKKwlpZiAoZGxuMi0+Y3MgIT0gc3BpLT5jaGlwX3NlbGVjdCkgeworCQlyZXQgPSBkbG4yX3NwaV9jc19zZXRfb25lKGRsbjIsIHNwaS0+Y2hpcF9zZWxlY3QpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZGxuMi0+Y3MgPSBzcGktPmNoaXBfc2VsZWN0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsbjJfc3BpX3RyYW5zZmVyX3NldHVwKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTMyIHNwZWVkLAorCQkJCSAgIHU4IGJwdywgdTggbW9kZSkKK3sKKwlpbnQgcmV0OworCWJvb2wgYnVzX3NldHVwX2NoYW5nZTsKKworCWJ1c19zZXR1cF9jaGFuZ2UgPSBkbG4yLT5zcGVlZCAhPSBzcGVlZCB8fCBkbG4yLT5tb2RlICE9IG1vZGUgfHwKKwkJCSAgIGRsbjItPmJwdyAhPSBicHc7CisKKwlpZiAoIWJ1c19zZXR1cF9jaGFuZ2UpCisJCXJldHVybiAwOworCisJcmV0ID0gZGxuMl9zcGlfZW5hYmxlKGRsbjIsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChkbG4yLT5zcGVlZCAhPSBzcGVlZCkgeworCQlyZXQgPSBkbG4yX3NwaV9zZXRfc3BlZWQoZGxuMiwgc3BlZWQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZGxuMi0+c3BlZWQgPSBzcGVlZDsKKwl9CisKKwlpZiAoZGxuMi0+bW9kZSAhPSBtb2RlKSB7CisJCXJldCA9IGRsbjJfc3BpX3NldF9tb2RlKGRsbjIsIG1vZGUgJiAweDMpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZGxuMi0+bW9kZSA9IG1vZGU7CisJfQorCisJaWYgKGRsbjItPmJwdyAhPSBicHcpIHsKKwkJcmV0ID0gZGxuMl9zcGlfc2V0X2JwdyhkbG4yLCBicHcpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZGxuMi0+YnB3ID0gYnB3OworCX0KKworCXJldHVybiBkbG4yX3NwaV9lbmFibGUoZGxuMiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfdHJhbnNmZXJfb25lKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsCisJCQkJIHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIpCit7CisJc3RydWN0IGRsbjJfc3BpICpkbG4yID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWludCBzdGF0dXM7CisJdTggYXR0ciA9IDA7CisKKwlzdGF0dXMgPSBkbG4yX3NwaV90cmFuc2Zlcl9zZXR1cChkbG4yLCB4ZmVyLT5zcGVlZF9oeiwKKwkJCQkJIHhmZXItPmJpdHNfcGVyX3dvcmQsCisJCQkJCSBzcGktPm1vZGUpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRldl9lcnIoJmRsbjItPnBkZXYtPmRldiwgIkNhbm5vdCBzZXR1cCB0cmFuc2ZlclxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKCF4ZmVyLT5jc19jaGFuZ2UgJiYgIXNwaV90cmFuc2Zlcl9pc19sYXN0KG1hc3RlciwgeGZlcikpCisJCWF0dHIgPSBETE4yX1NQSV9BVFRSX0xFQVZFX1NTX0xPVzsKKworCXN0YXR1cyA9IGRsbjJfc3BpX3Jkd3IoZGxuMiwgeGZlci0+dHhfYnVmLCB4ZmVyLT5yeF9idWYsCisJCQkgICAgICAgeGZlci0+bGVuLCBhdHRyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZGV2X2VycigmZGxuMi0+cGRldi0+ZGV2LCAid3JpdGUvcmVhZCBmYWlsZWQhXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBkbG4yX3NwaSAqZGxuMjsKKwlzdHJ1Y3QgZGxuMl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CisJaW50IHJldDsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKCpkbG4yKSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKKworCWRsbjIgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlkbG4yLT5idWYgPSBkZXZtX2ttYWxsb2MoJnBkZXYtPmRldiwgRExOMl9TUElfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGxuMi0+YnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9mcmVlX21hc3RlcjsKKwl9CisKKwlkbG4yLT5tYXN0ZXIgPSBtYXN0ZXI7CisJZGxuMi0+cGRldiA9IHBkZXY7CisJZGxuMi0+cG9ydCA9IHBkYXRhLT5wb3J0OworCS8qIGNzL21vZGUgY2FuIG5ldmVyIGJlIDB4ZmYsIHNvIHRoZSBmaXJzdCB0cmFuc2ZlciB3aWxsIHNldCB0aGVtICovCisJZGxuMi0+Y3MgPSAweGZmOworCWRsbjItPm1vZGUgPSAweGZmOworCisJLyogZGlzYWJsZSBTUEkgbW9kdWxlIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIHNldHVwICovCisJcmV0ID0gZGxuMl9zcGlfZW5hYmxlKGRsbjIsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZGlzYWJsZSBTUEkgbW9kdWxlXG4iKTsKKwkJZ290byBleGl0X2ZyZWVfbWFzdGVyOworCX0KKworCXJldCA9IGRsbjJfc3BpX2dldF9jc19udW0oZGxuMiwgJm1hc3Rlci0+bnVtX2NoaXBzZWxlY3QpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgbnVtYmVyIG9mIENTIHBpbnNcbiIpOworCQlnb3RvIGV4aXRfZnJlZV9tYXN0ZXI7CisJfQorCisJcmV0ID0gZGxuMl9zcGlfZ2V0X3NwZWVkX3JhbmdlKGRsbjIsCisJCQkJICAgICAgICZtYXN0ZXItPm1pbl9zcGVlZF9oeiwKKwkJCQkgICAgICAgJm1hc3Rlci0+bWF4X3NwZWVkX2h6KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBidXMgbWluL21heCBmcmVxc1xuIik7CisJCWdvdG8gZXhpdF9mcmVlX21hc3RlcjsKKwl9CisKKwlyZXQgPSBkbG4yX3NwaV9nZXRfc3VwcG9ydGVkX2ZyYW1lX3NpemVzKGRsbjIsCisJCQkJCQkgJm1hc3Rlci0+Yml0c19wZXJfd29yZF9tYXNrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBzdXBwb3J0ZWQgZnJhbWUgc2l6ZXNcbiIpOworCQlnb3RvIGV4aXRfZnJlZV9tYXN0ZXI7CisJfQorCisJcmV0ID0gZGxuMl9zcGlfY3NfZW5hYmxlX2FsbChkbG4yLCB0cnVlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIENTIHBpbnNcbiIpOworCQlnb3RvIGV4aXRfZnJlZV9tYXN0ZXI7CisJfQorCisJbWFzdGVyLT5idXNfbnVtID0gLTE7CisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBOworCW1hc3Rlci0+cHJlcGFyZV9tZXNzYWdlID0gZGxuMl9zcGlfcHJlcGFyZV9tZXNzYWdlOworCW1hc3Rlci0+dHJhbnNmZXJfb25lID0gZGxuMl9zcGlfdHJhbnNmZXJfb25lOworCW1hc3Rlci0+YXV0b19ydW50aW1lX3BtID0gdHJ1ZTsKKworCS8qIGVuYWJsZSBTUEkgbW9kdWxlLCB3ZSdyZSBnb29kIHRvIGdvICovCisJcmV0ID0gZGxuMl9zcGlfZW5hYmxlKGRsbjIsIHRydWUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgU1BJIG1vZHVsZVxuIik7CisJCWdvdG8gZXhpdF9mcmVlX21hc3RlcjsKKwl9CisKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmcGRldi0+ZGV2LAorCQkJCQkgRExOMl9SUE1fQVVUT1NVU1BFTkRfVElNRU9VVCk7CisJcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCisJcmV0ID0gZGV2bV9zcGlfcmVnaXN0ZXJfbWFzdGVyKCZwZGV2LT5kZXYsIG1hc3Rlcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG1hc3RlclxuIik7CisJCWdvdG8gZXhpdF9yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitleGl0X3JlZ2lzdGVyOgorCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJnBkZXYtPmRldik7CisKKwlpZiAoZGxuMl9zcGlfZW5hYmxlKGRsbjIsIGZhbHNlKSA8IDApCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBkaXNhYmxlIFNQSSBtb2R1bGVcbiIpOworZXhpdF9mcmVlX21hc3RlcjoKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkbG4yX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gc3BpX21hc3Rlcl9nZXQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworCXN0cnVjdCBkbG4yX3NwaSAqZGxuMiA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKworCWlmIChkbG4yX3NwaV9lbmFibGUoZGxuMiwgZmFsc2UpIDwgMCkKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGRpc2FibGUgU1BJIG1vZHVsZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBkbG4yX3NwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZGxuMl9zcGkgKmRsbjIgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlyZXQgPSBzcGlfbWFzdGVyX3N1c3BlbmQobWFzdGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkgeworCQlyZXQgPSBkbG4yX3NwaV9lbmFibGUoZGxuMiwgZmFsc2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBVU0IgcG93ZXIgbWF5IGJlIGN1dCBvZmYgZHVyaW5nIHNsZWVwLiBSZXNldHRpbmcgdGhlIGZvbGxvd2luZworCSAqIHBhcmFtZXRlcnMgd2lsbCBmb3JjZSB0aGUgYm9hcmQgdG8gYmUgc2V0IHVwIGJlZm9yZSBmaXJzdCB0cmFuc2Zlci4KKwkgKi8KKwlkbG4yLT5jcyA9IDB4ZmY7CisJZGxuMi0+c3BlZWQgPSAwOworCWRsbjItPmJwdyA9IDA7CisJZGxuMi0+bW9kZSA9IDB4ZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbG4yX3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkbG4yX3NwaSAqZGxuMiA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCWlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkgeworCQlyZXQgPSBkbG4yX3NwaV9jc19lbmFibGVfYWxsKGRsbjIsIHRydWUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZGxuMl9zcGlfZW5hYmxlKGRsbjIsIHRydWUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHNwaV9tYXN0ZXJfcmVzdW1lKG1hc3Rlcik7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZGxuMl9zcGlfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRsbjJfc3BpICpkbG4yID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJcmV0dXJuIGRsbjJfc3BpX2VuYWJsZShkbG4yLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZGxuMl9zcGkgKmRsbjIgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlyZXR1cm4gIGRsbjJfc3BpX2VuYWJsZShkbG4yLCB0cnVlKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGRsbjJfc3BpX3BtID0geworCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKGRsbjJfc3BpX3N1c3BlbmQsIGRsbjJfc3BpX3Jlc3VtZSkKKwlTRVRfUlVOVElNRV9QTV9PUFMoZGxuMl9zcGlfcnVudGltZV9zdXNwZW5kLAorCQkJICAgZGxuMl9zcGlfcnVudGltZV9yZXN1bWUsIE5VTEwpCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGlfZGxuMl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiZGxuMi1zcGkiLAorCQkucG0JPSAmZGxuMl9zcGlfcG0sCisJfSwKKwkucHJvYmUJCT0gZGxuMl9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBkbG4yX3NwaV9yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzcGlfZGxuMl9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIERpb2xhbiBETE4yIFNQSSBtYXN0ZXIgaW50ZXJmYWNlIik7CitNT0RVTEVfQVVUSE9SKCJMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRsbjItc3BpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZHctbWlkLmMgYi9kcml2ZXJzL3NwaS9zcGktZHctbWlkLmMKaW5kZXggNzI4MTMxNi4uYTAxOTdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWR3LW1pZC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1kdy1taWQuYwpAQCAtMjQ3LDkgKzI0Nyw5IEBACiAKIC8qIFNvbWUgc3BlY2lmaWMgaW5mbyBmb3IgU1BJMCBjb250cm9sbGVyIG9uIEludGVsIE1JRCAqLwogCi0vKiBIVyBpbmZvIGZvciBNUlNUIENMayBDb250cm9sIFVuaXQsIG9uZSAzMmIgcmVnICovCisvKiBIVyBpbmZvIGZvciBNUlNUIENsayBDb250cm9sIFVuaXQsIDMyYiByZWcgcGVyIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgTVJTVF9TUElfQ0xLX0JBU0UJMTAwMDAwMDAwCS8qIDEwMG0gKi8KLSNkZWZpbmUgTVJTVF9DTEtfU1BJMF9SRUcJMHhmZjExZDg2YworI2RlZmluZSBNUlNUX0NMS19TUElfUkVHCTB4ZmYxMWQ4NmMKICNkZWZpbmUgQ0xLX1NQSV9CRElWX09GRlNFVAkwCiAjZGVmaW5lIENMS19TUElfQkRJVl9NQVNLCTB4MDAwMDAwMDcKICNkZWZpbmUgQ0xLX1NQSV9DRElWX09GRlNFVAk5CkBAIC0yNjEsMTcgKzI2MSwxNyBAQAogCXZvaWQgX19pb21lbSAqY2xrX3JlZzsKIAl1MzIgY2xrX2NkaXY7CiAKLQljbGtfcmVnID0gaW9yZW1hcF9ub2NhY2hlKE1SU1RfQ0xLX1NQSTBfUkVHLCAxNik7CisJY2xrX3JlZyA9IGlvcmVtYXBfbm9jYWNoZShNUlNUX0NMS19TUElfUkVHLCAxNik7CiAJaWYgKCFjbGtfcmVnKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIGdldCBTUEkgY29udHJvbGxlciBvcGVyYXRpbmcgZnJlcSBpbmZvICovCi0JY2xrX2NkaXYgID0gKHJlYWRsKGNsa19yZWcpICYgQ0xLX1NQSV9DRElWX01BU0spID4+IENMS19TUElfQ0RJVl9PRkZTRVQ7CisJLyogR2V0IFNQSSBjb250cm9sbGVyIG9wZXJhdGluZyBmcmVxIGluZm8gKi8KKwljbGtfY2RpdiA9IHJlYWRsKGNsa19yZWcgKyBkd3MtPmJ1c19udW0gKiBzaXplb2YodTMyKSk7CisJY2xrX2NkaXYgJj0gQ0xLX1NQSV9DRElWX01BU0s7CisJY2xrX2NkaXYgPj49IENMS19TUElfQ0RJVl9PRkZTRVQ7CiAJZHdzLT5tYXhfZnJlcSA9IE1SU1RfU1BJX0NMS19CQVNFIC8gKGNsa19jZGl2ICsgMSk7Ci0JaW91bm1hcChjbGtfcmVnKTsKIAotCWR3cy0+bnVtX2NzID0gMTY7Ci0JZHdzLT5maWZvX2xlbiA9IDQwOwkvKiBGSUZPIGhhcyA0MCB3b3JkcyBidWZmZXIgKi8KKwlpb3VubWFwKGNsa19yZWcpOwogCiAjaWZkZWYgQ09ORklHX1NQSV9EV19NSURfRE1BCiAJZHdzLT5kbWFfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRfZG1hKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZHctcGNpLmMgYi9kcml2ZXJzL3NwaS9zcGktZHctcGNpLmMKaW5kZXggYmE2OGRhMS4uNWJhMzMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWR3LXBjaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1kdy1wY2kuYwpAQCAtMzAsMTAgKzMwLDIwIEBACiAKIHN0cnVjdCBzcGlfcGNpX2Rlc2MgewogCWludAkoKnNldHVwKShzdHJ1Y3QgZHdfc3BpICopOworCXUxNgludW1fY3M7CisJdTE2CWJ1c19udW07CiB9OwogCi1zdGF0aWMgc3RydWN0IHNwaV9wY2lfZGVzYyBzcGlfcGNpX21pZF9kZXNjID0geworc3RhdGljIHN0cnVjdCBzcGlfcGNpX2Rlc2Mgc3BpX3BjaV9taWRfZGVzY18xID0gewogCS5zZXR1cCA9IGR3X3NwaV9taWRfaW5pdCwKKwkubnVtX2NzID0gMzIsCisJLmJ1c19udW0gPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfcGNpX2Rlc2Mgc3BpX3BjaV9taWRfZGVzY18yID0geworCS5zZXR1cCA9IGR3X3NwaV9taWRfaW5pdCwKKwkubnVtX2NzID0gNCwKKwkuYnVzX251bSA9IDEsCiB9OwogCiBzdGF0aWMgaW50IHNwaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCkBAIC02NSwxOCArNzUsMjMgQEAKIAogCWR3cy0+cmVncyA9IHBjaW1faW9tYXBfdGFibGUocGRldilbcGNpX2Jhcl07CiAKLQlkd3MtPmJ1c19udW0gPSAwOwotCWR3cy0+bnVtX2NzID0gNDsKIAlkd3MtPmlycSA9IHBkZXYtPmlycTsKIAogCS8qCiAJICogU3BlY2lmaWMgaGFuZGxpbmcgZm9yIHBhbHRmb3JtcywgbGlrZSBkbWEgc2V0dXAsCiAJICogY2xvY2sgcmF0ZSwgRklGTyBkZXB0aC4KIAkgKi8KLQlpZiAoZGVzYyAmJiBkZXNjLT5zZXR1cCkgewotCQlyZXQgPSBkZXNjLT5zZXR1cChkd3MpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwlpZiAoZGVzYykgeworCQlkd3MtPm51bV9jcyA9IGRlc2MtPm51bV9jczsKKwkJZHdzLT5idXNfbnVtID0gZGVzYy0+YnVzX251bTsKKworCQlpZiAoZGVzYy0+c2V0dXApIHsKKwkJCXJldCA9IGRlc2MtPnNldHVwKGR3cyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXQgPSBkd19zcGlfYWRkX2hvc3QoJnBkZXYtPmRldiwgZHdzKTsKQEAgLTEyMSw3ICsxMzYsMTQgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHNbXSA9IHsKIAkvKiBJbnRlbCBNSUQgcGxhdGZvcm0gU1BJIGNvbnRyb2xsZXIgMCAqLwotCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MDgwMCksIChrZXJuZWxfdWxvbmdfdCkmc3BpX3BjaV9taWRfZGVzY30sCisJLyoKKwkgKiBUaGUgYWNjZXNzIHRvIHRoZSBkZXZpY2UgODA4NjowODAxIGlzIGRpc2FibGVkIGJ5IEhXLCBzaW5jZSBpdCdzCisJICogZXhjbHVzaXZlbHkgdXNlZCBieSBTQ1UgdG8gY29tbXVuaWNhdGUgd2l0aCBNU0lDLgorCSAqLworCS8qIEludGVsIE1JRCBwbGF0Zm9ybSBTUEkgY29udHJvbGxlciAxICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgwODAwKSwgKGtlcm5lbF91bG9uZ190KSZzcGlfcGNpX21pZF9kZXNjXzF9LAorCS8qIEludGVsIE1JRCBwbGF0Zm9ybSBTUEkgY29udHJvbGxlciAyICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgwODEyKSwgKGtlcm5lbF91bG9uZ190KSZzcGlfcGNpX21pZF9kZXNjXzJ9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWR3LmMgYi9kcml2ZXJzL3NwaS9zcGktZHcuYwppbmRleCBkMGQ1NTQyLi41YTk3YTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZHcuYworKysgYi9kcml2ZXJzL3NwaS9zcGktZHcuYwpAQCAtNjA4LDcgKzYwOCw3IEBACiB9CiAKIC8qIFJlc3RhcnQgdGhlIGNvbnRyb2xsZXIsIGRpc2FibGUgYWxsIGludGVycnVwdHMsIGNsZWFuIHJ4IGZpZm8gKi8KLXN0YXRpYyB2b2lkIHNwaV9od19pbml0KHN0cnVjdCBkd19zcGkgKmR3cykKK3N0YXRpYyB2b2lkIHNwaV9od19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGR3X3NwaSAqZHdzKQogewogCXNwaV9lbmFibGVfY2hpcChkd3MsIDApOwogCXNwaV9tYXNrX2ludHIoZHdzLCAweGZmKTsKQEAgLTYyMSwxNCArNjIxLDE1IEBACiAJaWYgKCFkd3MtPmZpZm9fbGVuKSB7CiAJCXUzMiBmaWZvOwogCi0JCWZvciAoZmlmbyA9IDI7IGZpZm8gPD0gMjU3OyBmaWZvKyspIHsKKwkJZm9yIChmaWZvID0gMjsgZmlmbyA8PSAyNTY7IGZpZm8rKykgewogCQkJZHdfd3JpdGV3KGR3cywgRFdfU1BJX1RYRkxUUiwgZmlmbyk7CiAJCQlpZiAoZmlmbyAhPSBkd19yZWFkdyhkd3MsIERXX1NQSV9UWEZMVFIpKQogCQkJCWJyZWFrOwogCQl9Ci0KLQkJZHdzLT5maWZvX2xlbiA9IChmaWZvID09IDI1NykgPyAwIDogZmlmbzsKIAkJZHdfd3JpdGV3KGR3cywgRFdfU1BJX1RYRkxUUiwgMCk7CisKKwkJZHdzLT5maWZvX2xlbiA9IChmaWZvID09IDIpID8gMCA6IGZpZm8gLSAxOworCQlkZXZfZGJnKGRldiwgIkRldGVjdGVkIEZJRk8gc2l6ZTogJXUgYnl0ZXNcbiIsIGR3cy0+Zmlmb19sZW4pOwogCX0KIH0KIApAQCAtNjY4LDEyICs2NjksMTIgQEAKIAltYXN0ZXItPmRldi5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOwogCiAJLyogQmFzaWMgSFcgaW5pdCAqLwotCXNwaV9od19pbml0KGR3cyk7CisJc3BpX2h3X2luaXQoZGV2LCBkd3MpOwogCiAJaWYgKGR3cy0+ZG1hX29wcyAmJiBkd3MtPmRtYV9vcHMtPmRtYV9pbml0KSB7CiAJCXJldCA9IGR3cy0+ZG1hX29wcy0+ZG1hX2luaXQoZHdzKTsKIAkJaWYgKHJldCkgewotCQkJZGV2X3dhcm4oJm1hc3Rlci0+ZGV2LCAiRE1BIGluaXQgZmFpbGVkXG4iKTsKKwkJCWRldl93YXJuKGRldiwgIkRNQSBpbml0IGZhaWxlZFxuIik7CiAJCQlkd3MtPmRtYV9pbml0ZWQgPSAwOwogCQl9CiAJfQpAQCAtNzMxLDcgKzczMiw3IEBACiB7CiAJaW50IHJldDsKIAotCXNwaV9od19pbml0KGR3cyk7CisJc3BpX2h3X2luaXQoJmR3cy0+bWFzdGVyLT5kZXYsIGR3cyk7CiAJcmV0ID0gc3BpX21hc3Rlcl9yZXN1bWUoZHdzLT5tYXN0ZXIpOwogCWlmIChyZXQpCiAJCWRldl9lcnIoJmR3cy0+bWFzdGVyLT5kZXYsICJmYWlsIHRvIHN0YXJ0IHF1ZXVlICglZClcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZmFsY29uLmMgYi9kcml2ZXJzL3NwaS9zcGktZmFsY29uLmMKaW5kZXggOTEyYjkwMy4uMjg2YjJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWZhbGNvbi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1mYWxjb24uYwpAQCAtMzUzLDE2ICszNTMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZhbGNvbl9zZmxhc2hfcHJlcGFyZV94ZmVyKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZmFsY29uX3NmbGFzaF91bnByZXBhcmVfeGZlcihzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGZhbGNvbl9zZmxhc2hfeGZlcl9vbmUoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKIAkJCQkJc3RydWN0IHNwaV9tZXNzYWdlICptKQogewpAQCAtNDIwLDkgKzQxMCw3IEBACiAJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfTU9ERV8zOwogCW1hc3Rlci0+ZmxhZ3MgPSBTUElfTUFTVEVSX0hBTEZfRFVQTEVYOwogCW1hc3Rlci0+c2V0dXAgPSBmYWxjb25fc2ZsYXNoX3NldHVwOwotCW1hc3Rlci0+cHJlcGFyZV90cmFuc2Zlcl9oYXJkd2FyZSA9IGZhbGNvbl9zZmxhc2hfcHJlcGFyZV94ZmVyOwogCW1hc3Rlci0+dHJhbnNmZXJfb25lX21lc3NhZ2UgPSBmYWxjb25fc2ZsYXNoX3hmZXJfb25lOwotCW1hc3Rlci0+dW5wcmVwYXJlX3RyYW5zZmVyX2hhcmR3YXJlID0gZmFsY29uX3NmbGFzaF91bnByZXBhcmVfeGZlcjsKIAltYXN0ZXItPmRldi5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAKIAlyZXQgPSBkZXZtX3NwaV9yZWdpc3Rlcl9tYXN0ZXIoJnBkZXYtPmRldiwgbWFzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1mc2wtY3BtLmMgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWNwbS5jCmluZGV4IGU4NWFiMWMuLjljNDZhMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1mc2wtY3BtLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWZzbC1jcG0uYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC02OCw2ICs2OSw3IEBACiAJCX0KIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9yZWluaXRfdHhyeCk7CiAKIHN0YXRpYyB2b2lkIGZzbF9zcGlfY3BtX2J1ZnNfc3RhcnQoc3RydWN0IG1wYzh4eHhfc3BpICptc3BpKQogewpAQCAtMTYyLDYgKzE2NCw3IEBACiAJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBtc3BpLT50eF9kbWEsIHQtPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9idWZzKTsKIAogdm9pZCBmc2xfc3BpX2NwbV9idWZzX2NvbXBsZXRlKHN0cnVjdCBtcGM4eHh4X3NwaSAqbXNwaSkKIHsKQEAgLTE3NCw2ICsxNzcsNyBAQAogCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgbXNwaS0+cnhfZG1hLCB0LT5sZW4sIERNQV9GUk9NX0RFVklDRSk7CiAJbXNwaS0+eGZlcl9pbl9wcm9ncmVzcyA9IE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9idWZzX2NvbXBsZXRlKTsKIAogdm9pZCBmc2xfc3BpX2NwbV9pcnEoc3RydWN0IG1wYzh4eHhfc3BpICptc3BpLCB1MzIgZXZlbnRzKQogewpAQCAtMTk4LDYgKzIwMiw3IEBACiAJZWxzZQogCQljb21wbGV0ZSgmbXNwaS0+ZG9uZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9pcnEpOwogCiBzdGF0aWMgdm9pZCAqZnNsX3NwaV9hbGxvY19kdW1teV9yeCh2b2lkKQogewpAQCAtMzc1LDYgKzM4MCw3IEBACiAJZnNsX3NwaV9mcmVlX2R1bW15X3J4KCk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9pbml0KTsKIAogdm9pZCBmc2xfc3BpX2NwbV9mcmVlKHN0cnVjdCBtcGM4eHh4X3NwaSAqbXNwaSkKIHsKQEAgLTM4OSwzICszOTUsNiBAQAogCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQobXNwaS0+cHJhbSkpOwogCWZzbF9zcGlfZnJlZV9kdW1teV9yeCgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX3NwaV9jcG1fZnJlZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1mc2wtbGliLmMgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWxpYi5jCmluZGV4IDQ0NmI3MzcuLmNiMzVkMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1mc2wtbGliLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWZzbC1saWIuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaWZkZWYgQ09ORklHX0ZTTF9TT0MKQEAgLTM1LDcgKzM2LDggQEAKIAl0eXBlICpyeCA9IG1wYzh4eHhfc3BpLT5yeDsJCQkJCSAgXAogCSpyeCsrID0gKHR5cGUpKGRhdGEgPj4gbXBjOHh4eF9zcGktPnJ4X3NoaWZ0KTsJCQkgIFwKIAltcGM4eHh4X3NwaS0+cnggPSByeDsJCQkJCQkgIFwKLX0KK30JCQkJCQkJCQkgIFwKK0VYUE9SVF9TWU1CT0xfR1BMKG1wYzh4eHhfc3BpX3J4X2J1Zl8jI3R5cGUpOwogCiAjZGVmaW5lIE1QQzhYWFhfU1BJX1RYX0JVRih0eXBlKQkJCQlcCiB1MzIgbXBjOHh4eF9zcGlfdHhfYnVmXyMjdHlwZShzdHJ1Y3QgbXBjOHh4eF9zcGkgKm1wYzh4eHhfc3BpKQlcCkBAIC00Nyw3ICs0OSw4IEBACiAJZGF0YSA9ICp0eCsrIDw8IG1wYzh4eHhfc3BpLT50eF9zaGlmdDsJCQlcCiAJbXBjOHh4eF9zcGktPnR4ID0gdHg7CQkJCQlcCiAJcmV0dXJuIGRhdGE7CQkJCQkJXAotfQorfQkJCQkJCQkJXAorRVhQT1JUX1NZTUJPTF9HUEwobXBjOHh4eF9zcGlfdHhfYnVmXyMjdHlwZSk7CiAKIE1QQzhYWFhfU1BJX1JYX0JVRih1OCkKIE1QQzhYWFhfU1BJX1JYX0JVRih1MTYpCkBAIC02MCw2ICs2Myw3IEBACiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihwZGF0YSwgc3RydWN0IG1wYzh4eHhfc3BpX3Byb2JlX2luZm8sIHBkYXRhKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHRvX29mX3BpbmZvKTsKIAogY29uc3QgY2hhciAqbXBjOHh4eF9zcGlfc3RybW9kZSh1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC03NSw2ICs3OSw3IEBACiAJfQogCXJldHVybiAiQ1BVIjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG1wYzh4eHhfc3BpX3N0cm1vZGUpOwogCiB2b2lkIG1wYzh4eHhfc3BpX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlc291cmNlICptZW0sCiAJCQl1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTAyLDEzICsxMDcsMTIgQEAKIAltcGM4eHh4X3NwaS0+cnhfc2hpZnQgPSAwOwogCW1wYzh4eHhfc3BpLT50eF9zaGlmdCA9IDA7CiAKLQlpbml0X2NvbXBsZXRpb24oJm1wYzh4eHhfc3BpLT5kb25lKTsKLQogCW1hc3Rlci0+YnVzX251bSA9IHBkYXRhLT5idXNfbnVtOwogCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBwZGF0YS0+bWF4X2NoaXBzZWxlY3Q7CiAKIAlpbml0X2NvbXBsZXRpb24oJm1wYzh4eHhfc3BpLT5kb25lKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG1wYzh4eHhfc3BpX3Byb2JlKTsKIAogaW50IG1wYzh4eHhfc3BpX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xMjcsNiArMTMxLDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobXBjOHh4eF9zcGlfcmVtb3ZlKTsKIAogaW50IG9mX21wYzh4eHhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogewpAQCAtMTczLDMgKzE3OCw2IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9mX21wYzh4eHhfc3BpX3Byb2JlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWZzbC1saWIuaCBiL2RyaXZlcnMvc3BpL3NwaS1mc2wtbGliLmgKaW5kZXggYjRlZDA0ZS4uMTMyNmEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWZzbC1saWIuaAorKysgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWxpYi5oCkBAIC0yOCw3ICsyOCw3IEBACiAJLyogcnggJiB0eCBidWZzIGZyb20gdGhlIHNwaV90cmFuc2ZlciAqLwogCWNvbnN0IHZvaWQgKnR4OwogCXZvaWQgKnJ4OwotI2lmZGVmIENPTkZJR19TUElfRlNMX0VTUEkKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfRlNMX0VTUEkpCiAJaW50IGxlbjsKICNlbmRpZgogCkBAIC02OCw3ICs2OCw3IEBACiAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKLSNpZmRlZiBDT05GSUdfU1BJX0ZTTF9TUEkKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TUElfRlNMX1NQSSkKIAlpbnQgdHlwZTsKIAlpbnQgbmF0aXZlX2NoaXBzZWxlY3RzOwogCXU4IG1heF9iaXRzX3Blcl93b3JkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWdwaW8uYyBiL2RyaXZlcnMvc3BpL3NwaS1ncGlvLmMKaW5kZXggYWVlNGU3NS4uMWMzNGM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWdwaW8uYworKysgYi9kcml2ZXJzL3NwaS9zcGktZ3Bpby5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtOTIsNyArODgsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzcGlfZ3BpbyAqIF9fcHVyZQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3BpX2dwaW8gKl9fcHVyZQogc3BpX3RvX3NwaV9ncGlvKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJY29uc3Qgc3RydWN0IHNwaV9iaXRiYW5nCSpiYW5nOwpAQCAtMTAzLDcgKzk5LDcgQEAKIAlyZXR1cm4gc3BpX2dwaW87CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNwaV9ncGlvX3BsYXRmb3JtX2RhdGEgKiBfX3B1cmUKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNwaV9ncGlvX3BsYXRmb3JtX2RhdGEgKl9fcHVyZQogc3BpX3RvX3BkYXRhKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJcmV0dXJuICZzcGlfdG9fc3BpX2dwaW8oc3BpKS0+cGRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktaW1nLXNwZmkuYyBiL2RyaXZlcnMvc3BpL3NwaS1pbWctc3BmaS5jCmluZGV4IGI0MTA0OTkuLmFhZDY2ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1pbWctc3BmaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1pbWctc3BmaS5jCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJZGVmYXVsdDoKIAkJCXJ4Y29uZi5zcmNfYWRkciA9IHNwZmktPnBoeXMgKyBTUEZJX1JYXzhCSVRfVkFMSURfREFUQTsKIAkJCXJ4Y29uZi5zcmNfYWRkcl93aWR0aCA9IDE7Ci0JCQlyeGNvbmYuc3JjX21heGJ1cnN0ID0gMTsKKwkJCXJ4Y29uZi5zcmNfbWF4YnVyc3QgPSA0OwogCQl9CiAJCWRtYWVuZ2luZV9zbGF2ZV9jb25maWcoc3BmaS0+cnhfY2gsICZyeGNvbmYpOwogCkBAIC0zNjgsNyArMzY4LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXR4Y29uZi5kc3RfYWRkciA9IHNwZmktPnBoeXMgKyBTUEZJX1RYXzhCSVRfVkFMSURfREFUQTsKIAkJCXR4Y29uZi5kc3RfYWRkcl93aWR0aCA9IDE7Ci0JCQl0eGNvbmYuZHN0X21heGJ1cnN0ID0gMTsKKwkJCXR4Y29uZi5kc3RfbWF4YnVyc3QgPSA0OwogCQkJYnJlYWs7CiAJCX0KIAkJZG1hZW5naW5lX3NsYXZlX2NvbmZpZyhzcGZpLT50eF9jaCwgJnR4Y29uZik7CkBAIC0zOTAsMTQgKzM5MCwxNCBAQAogCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhzcGZpLT5yeF9jaCk7CiAJfQogCisJc3BmaV9zdGFydChzcGZpKTsKKwogCWlmICh4ZmVyLT50eF9idWYpIHsKIAkJc3BmaS0+dHhfZG1hX2J1c3kgPSB0cnVlOwogCQlkbWFlbmdpbmVfc3VibWl0KHR4ZGVzYyk7CiAJCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHNwZmktPnR4X2NoKTsKIAl9CiAKLQlzcGZpX3N0YXJ0KHNwZmkpOwotCiAJcmV0dXJuIDE7CiAKIHN0b3BfZG1hOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWlteC5jIGIvZHJpdmVycy9zcGkvc3BpLWlteC5jCmluZGV4IDk2MWI5N2QuLmZlMWI3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1pbXguYworKysgYi9kcml2ZXJzL3NwaS9zcGktaW14LmMKQEAgLTgyMyw2ICs4MjMsMTAgQEAKIAlzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBzbGF2ZV9jb25maWcgPSB7fTsKIAlpbnQgcmV0OwogCisJLyogdXNlIHBpbyBtb2RlIGZvciBpLm14NmRsIGNoaXAgVEtUMjM4Mjg1ICovCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiZnNsLGlteDZkbCIpKQorCQlyZXR1cm4gMDsKKwogCS8qIFByZXBhcmUgZm9yIFRYIERNQTogKi8KIAltYXN0ZXItPmRtYV90eCA9IGRtYV9yZXF1ZXN0X3NsYXZlX2NoYW5uZWwoZGV2LCAidHgiKTsKIAlpZiAoIW1hc3Rlci0+ZG1hX3R4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jIGIvZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYwppbmRleCA0MWM1NzY1Li5iYTcyMzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktb21hcC0xMDBrLmMgYi9kcml2ZXJzL3NwaS9zcGktb21hcC0xMDBrLmMKaW5kZXggNzkzOTlhZS4uZDg5MGQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLW9tYXAtMTAway5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1vbWFwLTEwMGsuYwpAQCAtMTYsMTEgKzE2LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1vbWFwLXV3aXJlLmMgYi9kcml2ZXJzL3NwaS9zcGktb21hcC11d2lyZS5jCmluZGV4IGRhZjFhZGEuLjNjMDg0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1vbWFwLXV3aXJlLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLW9tYXAtdXdpcmUuYwpAQCAtMjgsMTAgKzI4LDYgQEAKICAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1vbWFwMi1tY3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLW9tYXAyLW1jc3BpLmMKaW5kZXggM2JjM2NiYS4uNGRmODk0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLW9tYXAyLW1jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLW9tYXAyLW1jc3BpLmMKQEAgLTE0LDExICsxNCw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC1weGFkbWEuYyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHgtcHhhZG1hLmMKaW5kZXggZThhMjZmMi4uZTUxZmNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC1weGFkbWEuYworKysgYi9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LXB4YWRtYS5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguYyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguYwppbmRleCAwNWM2MjNjLi4yNGE0OTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTQ2LDggKzU0Miw4IEBACiAJCQljc19kZWFzc2VydChkcnZfZGF0YSk7CiAJfQogCi0Jc3BpX2ZpbmFsaXplX2N1cnJlbnRfbWVzc2FnZShkcnZfZGF0YS0+bWFzdGVyKTsKIAlkcnZfZGF0YS0+Y3VyX2NoaXAgPSBOVUxMOworCXNwaV9maW5hbGl6ZV9jdXJyZW50X21lc3NhZ2UoZHJ2X2RhdGEtPm1hc3Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJlc2V0X3NjY3IxKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktcnNwaS5jIGIvZHJpdmVycy9zcGkvc3BpLXJzcGkuYwppbmRleCAyMDcxZjc4Li40NmNlNDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcnNwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1yc3BpLmMKQEAgLTE1LDExICsxNSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1zM2M2NHh4LmMgYi9kcml2ZXJzL3NwaS9zcGktczNjNjR4eC5jCmluZGV4IDM3YjE5ODMuLjkyMzFjMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1zM2M2NHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXMzYzY0eHguYwpAQCAtMTEsMTAgKzExLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1zYzE4aXM2MDIuYyBiL2RyaXZlcnMvc3BpL3NwaS1zYzE4aXM2MDIuYwppbmRleCAyMzdmMmU3Li41YTU2YWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktc2MxOGlzNjAyLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXNjMThpczYwMi5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXNoLWhzcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS1zaC1oc3BpLmMKaW5kZXggZmMyOTIzMy4uMjBlODAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXNoLWhzcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktc2gtaHNwaS5jCkBAIC0xNiwxMSArMTYsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktc2gtbXNpb2YuYyBiL2RyaXZlcnMvc3BpL3NwaS1zaC1tc2lvZi5jCmluZGV4IDIzOWJlN2MuLmU1N2VlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1zaC1tc2lvZi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1zaC1tc2lvZi5jCkBAIC04Miw3ICs4Miw5IEBACiAjZGVmaW5lIE1EUjFfU1lOQ01EX0xSCSAweDMwMDAwMDAwIC8qICAgTC9SIG1vZGUgKi8KICNkZWZpbmUgTURSMV9TWU5DQUNfU0hJRlQJIDI1IC8qIFN5bmMgUG9sYXJpdHkgKDEgPSBBY3RpdmUtbG93KSAqLwogI2RlZmluZSBNRFIxX0JJVExTQl9TSElGVAkgMjQgLyogTVNCL0xTQiBGaXJzdCAoMSA9IExTQiBmaXJzdCkgKi8KLSNkZWZpbmUgTURSMV9GTERfTUFTSwkgMHgwMDAwMDBjMCAvKiBGcmFtZSBTeW5jIFNpZ25hbCBJbnRlcnZhbCAoMC0zKSAqLworI2RlZmluZSBNRFIxX0RURExfU0hJRlQJCSAyMCAvKiBEYXRhIFBpbiBCaXQgRGVsYXkgZm9yIE1TSU9GX1NZTkMgKi8KKyNkZWZpbmUgTURSMV9TWU5DRExfU0hJRlQJIDE2IC8qIEZyYW1lIFN5bmMgU2lnbmFsIFRpbWluZyBEZWxheSAqLworI2RlZmluZSBNRFIxX0ZMRF9NQVNLCSAweDAwMDAwMDBjIC8qIEZyYW1lIFN5bmMgU2lnbmFsIEludGVydmFsICgwLTMpICovCiAjZGVmaW5lIE1EUjFfRkxEX1NISUZUCQkgIDIKICNkZWZpbmUgTURSMV9YWFNUUAkgMHgwMDAwMDAwMSAvKiBUcmFuc21pc3Npb24vUmVjZXB0aW9uIFN0b3Agb24gRklGTyAqLwogLyogVE1EUjEgKi8KQEAgLTI0MSw0MiArMjQzLDgwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIHNob3J0IGRpdjsKLQl1bnNpZ25lZCBzaG9ydCBzY3I7Ci19IGNvbnN0IHNoX21zaW9mX3NwaV9jbGtfdGFibGVbXSA9IHsKLQl7IDEsCVNDUl9CUlBTKCAxKSB8IFNDUl9CUkRWX0RJVl8xIH0sCi0JeyAyLAlTQ1JfQlJQUyggMSkgfCBTQ1JfQlJEVl9ESVZfMiB9LAotCXsgNCwJU0NSX0JSUFMoIDEpIHwgU0NSX0JSRFZfRElWXzQgfSwKLQl7IDgsCVNDUl9CUlBTKCAxKSB8IFNDUl9CUkRWX0RJVl84IH0sCi0JeyAxNiwJU0NSX0JSUFMoIDEpIHwgU0NSX0JSRFZfRElWXzE2IH0sCi0JeyAzMiwJU0NSX0JSUFMoIDEpIHwgU0NSX0JSRFZfRElWXzMyIH0sCi0JeyA2NCwJU0NSX0JSUFMoMzIpIHwgU0NSX0JSRFZfRElWXzIgfSwKLQl7IDEyOCwJU0NSX0JSUFMoMzIpIHwgU0NSX0JSRFZfRElWXzQgfSwKLQl7IDI1NiwJU0NSX0JSUFMoMzIpIHwgU0NSX0JSRFZfRElWXzggfSwKLQl7IDUxMiwJU0NSX0JSUFMoMzIpIHwgU0NSX0JSRFZfRElWXzE2IH0sCi0JeyAxMDI0LAlTQ1JfQlJQUygzMikgfCBTQ1JfQlJEVl9ESVZfMzIgfSwKKwl1bnNpZ25lZCBzaG9ydCBicmR2OworfSBjb25zdCBzaF9tc2lvZl9zcGlfZGl2X3RhYmxlW10gPSB7CisJeyAxLAlTQ1JfQlJEVl9ESVZfMSB9LAorCXsgMiwJU0NSX0JSRFZfRElWXzIgfSwKKwl7IDQsCVNDUl9CUkRWX0RJVl80IH0sCisJeyA4LAlTQ1JfQlJEVl9ESVZfOCB9LAorCXsgMTYsCVNDUl9CUkRWX0RJVl8xNiB9LAorCXsgMzIsCVNDUl9CUkRWX0RJVl8zMiB9LAogfTsKIAogc3RhdGljIHZvaWQgc2hfbXNpb2Zfc3BpX3NldF9jbGtfcmVncyhzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwgdTMyIHNwaV9oeikKIHsKIAl1bnNpZ25lZCBsb25nIGRpdiA9IDEwMjQ7CisJdTMyIGJycHMsIHNjcjsKIAlzaXplX3QgazsKIAogCWlmICghV0FSTl9PTighc3BpX2h6IHx8ICFwYXJlbnRfcmF0ZSkpCiAJCWRpdiA9IERJVl9ST1VORF9VUChwYXJlbnRfcmF0ZSwgc3BpX2h6KTsKIAotCS8qIFRPRE86IG1ha2UgbW9yZSBmaW5lIGdyYWluZWQgKi8KLQotCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHNoX21zaW9mX3NwaV9jbGtfdGFibGUpOyBrKyspIHsKLQkJaWYgKHNoX21zaW9mX3NwaV9jbGtfdGFibGVba10uZGl2ID49IGRpdikKKwlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShzaF9tc2lvZl9zcGlfZGl2X3RhYmxlKTsgaysrKSB7CisJCWJycHMgPSBESVZfUk9VTkRfVVAoZGl2LCBzaF9tc2lvZl9zcGlfZGl2X3RhYmxlW2tdLmRpdik7CisJCWlmIChicnBzIDw9IDMyKSAvKiBtYXggb2YgYnJkdiBpcyAzMiAqLwogCQkJYnJlYWs7CiAJfQogCi0JayA9IG1pbl90KGludCwgaywgQVJSQVlfU0laRShzaF9tc2lvZl9zcGlfY2xrX3RhYmxlKSAtIDEpOworCWsgPSBtaW5fdChpbnQsIGssIEFSUkFZX1NJWkUoc2hfbXNpb2Zfc3BpX2Rpdl90YWJsZSkgLSAxKTsKIAotCXNoX21zaW9mX3dyaXRlKHAsIFRTQ1IsIHNoX21zaW9mX3NwaV9jbGtfdGFibGVba10uc2NyKTsKKwlzY3IgPSBzaF9tc2lvZl9zcGlfZGl2X3RhYmxlW2tdLmJyZHYgfCBTQ1JfQlJQUyhicnBzKTsKKwlzaF9tc2lvZl93cml0ZShwLCBUU0NSLCBzY3IpOwogCWlmICghKHAtPmNoaXBkYXRhLT5tYXN0ZXJfZmxhZ3MgJiBTUElfTUFTVEVSX01VU1RfVFgpKQotCQlzaF9tc2lvZl93cml0ZShwLCBSU0NSLCBzaF9tc2lvZl9zcGlfY2xrX3RhYmxlW2tdLnNjcik7CisJCXNoX21zaW9mX3dyaXRlKHAsIFJTQ1IsIHNjcik7Cit9CisKK3N0YXRpYyB1MzIgc2hfbXNpb2ZfZ2V0X2RlbGF5X2JpdCh1MzIgZHRkbF9vcl9zeW5jZGwpCit7CisJLyoKKwkgKiBEVERML1NZTkNETCBiaXQJOiBwLT5pbmZvLT5kdGRsIG9yIHAtPmluZm8tPnN5bmNkbAorCSAqIGInMDAwCQk6IDAKKwkgKiBiJzAwMQkJOiAxMDAKKwkgKiBiJzAxMAkJOiAyMDAKKwkgKiBiJzAxMSAoU1lOQ0RMIG9ubHkpCTogMzAwCisJICogYicxMDEJCTogNTAKKwkgKiBiJzExMAkJOiAxNTAKKwkgKi8KKwlpZiAoZHRkbF9vcl9zeW5jZGwgJSAxMDApCisJCXJldHVybiBkdGRsX29yX3N5bmNkbCAvIDEwMCArIDU7CisJZWxzZQorCQlyZXR1cm4gZHRkbF9vcl9zeW5jZGwgLyAxMDA7Cit9CisKK3N0YXRpYyB1MzIgc2hfbXNpb2Zfc3BpX2dldF9kdGRsX2FuZF9zeW5jZGwoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwKQoreworCXUzMiB2YWw7CisKKwlpZiAoIXAtPmluZm8pCisJCXJldHVybiAwOworCisJLyogY2hlY2sgaWYgRFRETCBhbmQgU1lOQ0RMIGlzIGFsbG93ZWQgdmFsdWUgKi8KKwlpZiAocC0+aW5mby0+ZHRkbCA+IDIwMCB8fCBwLT5pbmZvLT5zeW5jZGwgPiAzMDApIHsKKwkJZGV2X3dhcm4oJnAtPnBkZXYtPmRldiwgIkRUREwgb3IgU1lOQ0RMIGlzIHRvbyBsYXJnZVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIGNoZWNrIGlmIHRoZSBzdW0gb2YgRFRETCBhbmQgU1lOQ0RMIGJlY29tZXMgYW4gaW50ZWdlciB2YWx1ZSAgKi8KKwlpZiAoKHAtPmluZm8tPmR0ZGwgKyBwLT5pbmZvLT5zeW5jZGwpICUgMTAwKSB7CisJCWRldl93YXJuKCZwLT5wZGV2LT5kZXYsICJ0aGUgc3VtIG9mIERUREwvU1lOQ0RMIGlzIG5vdCBnb29kXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdmFsID0gc2hfbXNpb2ZfZ2V0X2RlbGF5X2JpdChwLT5pbmZvLT5kdGRsKSA8PCBNRFIxX0RURExfU0hJRlQ7CisJdmFsIHw9IHNoX21zaW9mX2dldF9kZWxheV9iaXQocC0+aW5mby0+c3luY2RsKSA8PCBNRFIxX1NZTkNETF9TSElGVDsKKworCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV9zZXRfcGluX3JlZ3Moc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLApAQCAtMjk2LDYgKzMzNiw3IEBACiAJdG1wID0gTURSMV9TWU5DTURfU1BJIHwgMSA8PCBNRFIxX0ZMRF9TSElGVCB8IE1EUjFfWFhTVFA7CiAJdG1wIHw9ICFjc19oaWdoIDw8IE1EUjFfU1lOQ0FDX1NISUZUOwogCXRtcCB8PSBsc2JfZmlyc3QgPDwgTURSMV9CSVRMU0JfU0hJRlQ7CisJdG1wIHw9IHNoX21zaW9mX3NwaV9nZXRfZHRkbF9hbmRfc3luY2RsKHApOwogCXNoX21zaW9mX3dyaXRlKHAsIFRNRFIxLCB0bXAgfCBNRFIxX1RSTUQgfCBUTURSMV9QQ09OKTsKIAlpZiAocC0+Y2hpcGRhdGEtPm1hc3Rlcl9mbGFncyAmIFNQSV9NQVNURVJfTVVTVF9UWCkgewogCQkvKiBUaGVzZSBiaXRzIGFyZSByZXNlcnZlZCBpZiBSWCBuZWVkcyBUWCAqLwpAQCAtNDgwLDYgKzUyMSw4IEBACiAJc3RydWN0IGRldmljZV9ub2RlCSpucCA9IHNwaS0+bWFzdGVyLT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnAtPnBkZXYtPmRldik7CisKIAlpZiAoIW5wKSB7CiAJCS8qCiAJCSAqIFVzZSBzcGktPmNvbnRyb2xsZXJfZGF0YSBmb3IgQ1MgKHNhbWUgc3RyYXRlZ3kgYXMgc3BpX2dwaW8pLApAQCAtNDk4LDYgKzU0MSw5IEBACiAJaWYgKHNwaS0+Y3NfZ3BpbyA+PSAwKQogCQlncGlvX3NldF92YWx1ZShzcGktPmNzX2dwaW8sICEoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpKTsKIAorCisJcG1fcnVudGltZV9wdXQoJnAtPnBkZXYtPmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTkwLDggKzYzNiw3IEBACiAJfQogCiAJLyogd2FpdCBmb3IgdHggZmlmbyB0byBiZSBlbXB0aWVkIC8gcnggZmlmbyB0byBiZSBmaWxsZWQgKi8KLQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnAtPmRvbmUsIEhaKTsKLQlpZiAoIXJldCkgeworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwLT5kb25lLCBIWikpIHsKIAkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiUElPIHRpbWVvdXRcbiIpOwogCQlyZXQgPSAtRVRJTUVET1VUOwogCQlnb3RvIHN0b3BfcmVzZXQ7CkBAIC03MDEsOCArNzQ2LDcgQEAKIAl9CiAKIAkvKiB3YWl0IGZvciB0eCBmaWZvIHRvIGJlIGVtcHRpZWQgLyByeCBmaWZvIHRvIGJlIGZpbGxlZCAqLwotCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcC0+ZG9uZSwgSFopOwotCWlmICghcmV0KSB7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnAtPmRvbmUsIEhaKSkgewogCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJETUEgdGltZW91dFxuIik7CiAJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gc3RvcF9yZXNldDsKQEAgLTk1Miw2ICs5OTYsOCBAQAogCQkJCQkmaW5mby0+dHhfZmlmb19vdmVycmlkZSk7CiAJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJyZW5lc2FzLHJ4LWZpZm8tc2l6ZSIsCiAJCQkJCSZpbmZvLT5yeF9maWZvX292ZXJyaWRlKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJlbmVzYXMsZHRkbCIsICZpbmZvLT5kdGRsKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJlbmVzYXMsc3luY2RsIiwgJmluZm8tPnN5bmNkbCk7CiAKIAlpbmZvLT5udW1fY2hpcHNlbGVjdCA9IG51bV9jczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXNoLmMgYi9kcml2ZXJzL3NwaS9zcGktc2guYwppbmRleCAxY2ZjOTA2Li41MDI1MDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktc2guYworKysgYi9kcml2ZXJzL3NwaS9zcGktc2guYwpAQCAtMTQsMTEgKzE0LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXRvcGNsaWZmLXBjaC5jIGIvZHJpdmVycy9zcGkvc3BpLXRvcGNsaWZmLXBjaC5jCmluZGV4IGJlNjkyYWQuLjkzZGZjZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS10b3BjbGlmZi1wY2guYworKysgYi9kcml2ZXJzL3NwaS9zcGktdG9wY2xpZmYtcGNoLmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS5jCmluZGV4IDY2YTcwZTkuLjU5ZDc2MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03ODgsNyArNzg0LDcgQEAKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyOwogCWJvb2wga2VlcF9jcyA9IGZhbHNlOwogCWludCByZXQgPSAwOwotCWludCBtcyA9IDE7CisJdW5zaWduZWQgbG9uZyBtcyA9IDE7CiAKIAlzcGlfc2V0X2NzKG1zZy0+c3BpLCB0cnVlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpZGV2LmMgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwppbmRleCA2OTQxZTA0Li42Zjk3ZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlkZXYuYworKysgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwpAQCAtMTQsMTAgKzE0LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL25hbWVpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9uYW1laS5jCmluZGV4IDFiZjg5MWIuLjRmMzYxYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL25hbWVpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbmFtZWkuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIAkJaWYgKChiaXRzICYgKE1EU19JTk9ERUxPQ0tfTE9PS1VQIHwgTURTX0lOT0RFTE9DS19QRVJNKSkgJiYKIAkJICAgIGlub2RlLT5pX3NiLT5zX3Jvb3QgIT0gTlVMTCAmJgotCQkgICAgaXNfcm9vdF9pbm9kZShpbm9kZSkpCisJCSAgICAhaXNfcm9vdF9pbm9kZShpbm9kZSkpCiAJCQlsbF9pbnZhbGlkYXRlX2FsaWFzZXMoaW5vZGUpOwogCiAJCWlwdXQoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS92dnBfaW8uYwppbmRleCA5MzBmNjAxLi42NWQ2MTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS92dnBfaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS92dnBfaW8uYwpAQCAtNjMyLDcgKzYzMiw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChjZmlvLT5mYXVsdC5mdF9mbGFncyAmIFZNX0ZBVUxUX1NJR0JVUykgeworCWlmIChjZmlvLT5mYXVsdC5mdF9mbGFncyAmIChWTV9GQVVMVF9TSUdCVVMgfCBWTV9GQVVMVF9TSUdTRUdWKSkgewogCQlDREVCVUcoRF9QQUdFLCAiZ290IGFkZHIgJXAgLSBTSUdCVVNcbiIsIHZtZi0+dmlydHVhbF9hZGRyZXNzKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL0tjb25maWcKaW5kZXggODE3ODRjNi4uNzdkODc1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGxnMjMwMC9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIFZJREVPX1RMRzIzMDAKIAl0cmlzdGF0ZSAiVGVsZWdlbnQgVExHMjMwMCBVU0IgdmlkZW8gY2FwdHVyZSBzdXBwb3J0IChEZXByZWNhdGVkKSIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgU05EICYmIERWQl9DT1JFCisJZGVwZW5kcyBvbiBNRURJQV9VU0JfU1VQUE9SVAogCXNlbGVjdCBWSURFT19UVU5FUgogCXNlbGVjdCBWSURFT19UVkVFUFJPTQogCWRlcGVuZHMgb24gUkNfQ09SRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlYy5jIGIvZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlYy5jCmluZGV4IDA5MzUzNWMuLjEyMGI3MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjLmMKQEAgLTg1LDIzICs4NSwyMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBudmVjX2RldmljZXNbXSA9IHsKIAl7CiAJCS5uYW1lID0gIm52ZWMta2JkIiwKLQkJLmlkID0gMSwKIAl9LAogCXsKIAkJLm5hbWUgPSAibnZlYy1tb3VzZSIsCi0JCS5pZCA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIm52ZWMtcG93ZXIiLAorCQkuaWQgPSAwLAogCX0sCiAJewogCQkubmFtZSA9ICJudmVjLXBvd2VyIiwKIAkJLmlkID0gMSwKIAl9LAogCXsKLQkJLm5hbWUgPSAibnZlYy1wb3dlciIsCi0JCS5pZCA9IDIsCi0JfSwKLQl7CiAJCS5uYW1lID0gIm52ZWMtcGF6MDAiLAotCQkuaWQgPSAxLAogCX0sCiB9OwogCkBAIC04OTEsNyArODg4LDcgQEAKIAkJbnZlY19tc2dfZnJlZShudmVjLCBtc2cpOwogCX0KIAotCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhudmVjLT5kZXYsIC0xLCBudmVjX2RldmljZXMsCisJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKG52ZWMtPmRldiwgMCwgbnZlY19kZXZpY2VzLAogCQkJICAgICAgQVJSQVlfU0laRShudmVjX2RldmljZXMpLCBOVUxMLCAwLCBOVUxMKTsKIAlpZiAocmV0KQogCQlkZXZfZXJyKG52ZWMtPmRldiwgImVycm9yIGFkZGluZyBzdWJkZXZpY2VzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuYwppbmRleCA4NmM3MmJhLi5mOGM1ZmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9iYXNlYmFuZC5jCkBAIC0yMTc3LDcgKzIxNzcsNyBAQAogCQkvKiBJbml0IEFOVCBCIHNlbGVjdCxSWCBDb25maWcgQ1IxMCA9IDB4MjgtPjB4MkEsIDB4MkEtPjB4MjgoVkMxL1ZDMiBkZWZpbmUsIG1ha2UgdGhlIEFOVF9BLCBBTlRfQiBpbnZlcnRlZCkgKi8KIAkJLypiUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsMHgwYSwweDI4KTsqLwogCQkvKiBTZWxlY3QgVkMxL1ZDMiwgQ1IyMTUgPSAweDAyLT4weDA2ICovCi0JCWJSZXN1bHQgJj0gQkJiV3JpdGVFbWJlZGRlZChkd0lvQmFzZSwgMHhkNywgMHgwNik7CisJCWJSZXN1bHQgJj0gQkJiV3JpdGVFbWJlZGRlZChwcml2LCAweGQ3LCAweDA2KTsKIAkJLyogfX0gKi8KIAogCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9WVDMyNTNCMF9BR0M7IGlpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NoYW5uZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2hhbm5lbC5jCmluZGV4IGM4ZjczOWQuLjcwZjg3MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2hhbm5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2hhbm5lbC5jCkBAIC0xODIsNiArMTgyLDE0IEBACiAJaWYgKHBEZXZpY2UtPmJ5Q3VycmVudENoID09IHVDb25uZWN0aW9uQ2hhbm5lbCkKIAkJcmV0dXJuIGJSZXN1bHQ7CiAKKwkvKiBTZXQgVkdBIHRvIG1heCBzZW5zaXRpdml0eSAqLworCWlmIChwRGV2aWNlLT5iVXBkYXRlQkJWR0EgJiYKKwkgICAgcERldmljZS0+YnlCQlZHQUN1cnJlbnQgIT0gcERldmljZS0+YWJ5QkJWR0FbMF0pIHsKKwkJcERldmljZS0+YnlCQlZHQUN1cnJlbnQgPSBwRGV2aWNlLT5hYnlCQlZHQVswXTsKKworCQlCQnZTZXRWR0FHYWluT2Zmc2V0KHBEZXZpY2UsIHBEZXZpY2UtPmJ5QkJWR0FDdXJyZW50KTsKKwl9CisKIAkvKiBjbGVhciBOQVYgKi8KIAlNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTUFDQ1IsIE1BQ0NSX0NMUk5BVik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYwppbmRleCA4M2U0MTYyLi5jZDFhMjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCkBAIC0xMjMyLDcgKzEyMzIsNyBAQAogCiAJaGVhZF90ZCA9IHByaXYtPmFwQ3VyclREW2RtYV9pZHhdOwogCi0JaGVhZF90ZC0+bV90ZDFURDEuYnlUQ1IgPSAoVENSX0VEUHxUQ1JfU1RQKTsKKwloZWFkX3RkLT5tX3RkMVREMS5ieVRDUiA9IDA7CiAKIAloZWFkX3RkLT5wVERJbmZvLT5za2IgPSBza2I7CiAKQEAgLTEyNTcsNiArMTI1NywxMSBAQAogCiAJcHJpdi0+YlBXQml0T24gPSBmYWxzZTsKIAorCS8qIFNldCBUU1IxICYgUmVxQ291bnQgaW4gVHhEZXNjSGVhZCAqLworCWhlYWRfdGQtPm1fdGQxVEQxLmJ5VENSIHw9IChUQ1JfU1RQIHwgVENSX0VEUCB8IEVETVNEVSk7CisJaGVhZF90ZC0+bV90ZDFURDEud1JlcUNvdW50ID0KKwkJCWNwdV90b19sZTE2KCh1MTYpaGVhZF90ZC0+cFRESW5mby0+ZHdSZXFDb3VudCk7CisKIAloZWFkX3RkLT5wVERJbmZvLT5ieUZsYWdzID0gVERfRkxBR1NfTkVUSUZfU0tCOwogCiAJaWYgKGRtYV9pZHggPT0gVFlQRV9BQzBETUEpCkBAIC0xNTAwLDkgKzE1MDUsMTEgQEAKIAkJaWYgKGNvbmYtPmVuYWJsZV9iZWFjb24pIHsKIAkJCXZudF9iZWFjb25fZW5hYmxlKHByaXYsIHZpZiwgY29uZik7CiAKLQkJCU1BQ3ZSZWdCaXRzT24ocHJpdiwgTUFDX1JFR19UQ1IsIFRDUl9BVVRPQkNOVFgpOworCQkJTUFDdlJlZ0JpdHNPbihwcml2LT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1RDUiwKKwkJCQkgICAgICBUQ1JfQVVUT0JDTlRYKTsKIAkJfSBlbHNlIHsKLQkJCU1BQ3ZSZWdCaXRzT2ZmKHByaXYsIE1BQ19SRUdfVENSLCBUQ1JfQVVUT0JDTlRYKTsKKwkJCU1BQ3ZSZWdCaXRzT2ZmKHByaXYtPlBvcnRPZmZzZXQsIE1BQ19SRUdfVENSLAorCQkJCSAgICAgICBUQ1JfQVVUT0JDTlRYKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguYwppbmRleCA2MWMzOWRkLi5iNWIwMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguYwpAQCAtMTIwNCwxMyArMTIwNCwxMCBAQAogCiAJcHRkQ3VyciA9IChQU1R4RGVzYylwSGVhZFREOwogCi0JcHRkQ3Vyci0+cFRESW5mby0+ZHdSZXFDb3VudCA9IGNiUmVxQ291bnQgLSB1UGFkZGluZzsKKwlwdGRDdXJyLT5wVERJbmZvLT5kd1JlcUNvdW50ID0gY2JSZXFDb3VudDsKIAlwdGRDdXJyLT5wVERJbmZvLT5kd0hlYWRlckxlbmd0aCA9IGNiSGVhZGVyTGVuZ3RoOwogCXB0ZEN1cnItPnBUREluZm8tPnNrYl9kbWEgPSBwdGRDdXJyLT5wVERJbmZvLT5idWZfZG1hOwogCXB0ZEN1cnItPmJ1ZmZfYWRkciA9IGNwdV90b19sZTMyKHB0ZEN1cnItPnBUREluZm8tPnNrYl9kbWEpOwotCS8qIFNldCBUU1IxICYgUmVxQ291bnQgaW4gVHhEZXNjSGVhZCAqLwotCXB0ZEN1cnItPm1fdGQxVEQxLmJ5VENSIHw9IChUQ1JfU1RQIHwgVENSX0VEUCB8IEVETVNEVSk7Ci0JcHRkQ3Vyci0+bV90ZDFURDEud1JlcUNvdW50ID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KShjYlJlcUNvdW50KSk7CiAKIAlyZXR1cm4gY2JIZWFkZXJMZW5ndGg7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jCmluZGV4IDU1ZjY3NzQuLmFlYmRlMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jCkBAIC0yMDI3LDEwICsyMDI3LDEwIEBACiAJCWdvdG8gcmVqZWN0OwogCX0KIAlpZiAoIXN0cm5jbXAoIj1BbGwiLCB0ZXh0X3B0ciwgNCkpIHsKLQkJY21kLT5jbWRfZmxhZ3MgfD0gSUZDX1NFTkRUQVJHRVRTX0FMTDsKKwkJY21kLT5jbWRfZmxhZ3MgfD0gSUNGX1NFTkRUQVJHRVRTX0FMTDsKIAl9IGVsc2UgaWYgKCFzdHJuY21wKCI9aXFuLiIsIHRleHRfcHRyLCA1KSB8fAogCQkgICAhc3RybmNtcCgiPWV1aS4iLCB0ZXh0X3B0ciwgNSkpIHsKLQkJY21kLT5jbWRfZmxhZ3MgfD0gSUZDX1NFTkRUQVJHRVRTX1NJTkdMRTsKKwkJY21kLT5jbWRfZmxhZ3MgfD0gSUNGX1NFTkRUQVJHRVRTX1NJTkdMRTsKIAl9IGVsc2UgewogCQlwcl9lcnIoIlVuYWJsZSB0byBsb2NhdGUgdmFsaWQgU2VuZFRhcmdldHM9JXMgdmFsdWVcbiIsIHRleHRfcHRyKTsKIAkJZ290byByZWplY3Q7CkBAIC0zNDE1LDEwICszNDE1LDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkvKgotCSAqIExvY2F0ZSBwb2ludGVyIHRvIGlxbi4vZXVpLiBzdHJpbmcgZm9yIElGQ19TRU5EVEFSR0VUU19TSU5HTEUKKwkgKiBMb2NhdGUgcG9pbnRlciB0byBpcW4uL2V1aS4gc3RyaW5nIGZvciBJQ0ZfU0VORFRBUkdFVFNfU0lOR0xFCiAJICogZXhwbGljaXQgY2FzZS4uCiAJICovCi0JaWYgKGNtZC0+Y21kX2ZsYWdzICYgSUZDX1NFTkRUQVJHRVRTX1NJTkdMRSkgeworCWlmIChjbWQtPmNtZF9mbGFncyAmIElDRl9TRU5EVEFSR0VUU19TSU5HTEUpIHsKIAkJdGV4dF9wdHIgPSBzdHJjaHIodGV4dF9pbiwgJz0nKTsKIAkJaWYgKCF0ZXh0X3B0cikgewogCQkJcHJfZXJyKCJVbmFibGUgdG8gbG9jYXRlICc9JyBzdHJpbmcgaW4gdGV4dF9pbjoiCkBAIC0zNDM0LDcgKzM0MzQsNyBAQAogCiAJc3Bpbl9sb2NrKCZ0aXFuX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodGlxbiwgJmdfdGlxbl9saXN0LCB0aXFuX2xpc3QpIHsKLQkJaWYgKChjbWQtPmNtZF9mbGFncyAmIElGQ19TRU5EVEFSR0VUU19TSU5HTEUpICYmCisJCWlmICgoY21kLT5jbWRfZmxhZ3MgJiBJQ0ZfU0VORFRBUkdFVFNfU0lOR0xFKSAmJgogCQkgICAgIHN0cmNtcCh0aXFuLT50aXFuLCB0ZXh0X3B0cikpIHsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0zNTEyLDcgKzM1MTIsNyBAQAogCQlpZiAoZW5kX29mX2J1ZikKIAkJCWJyZWFrOwogCi0JCWlmIChjbWQtPmNtZF9mbGFncyAmIElGQ19TRU5EVEFSR0VUU19TSU5HTEUpCisJCWlmIChjbWQtPmNtZF9mbGFncyAmIElDRl9TRU5EVEFSR0VUU19TSU5HTEUpCiAJCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2soJnRpcW5fbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfY29yZS5oIGIvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X2NvcmUuaAppbmRleCAwOWE1MjJiLi5jYmNmZjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfY29yZS5oCisrKyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9jb3JlLmgKQEAgLTEzNSw4ICsxMzUsOCBAQAogCUlDRl9DT05USUdfTUVNT1JZCQkJPSAweDAwMDAwMDIwLAogCUlDRl9BVFRBQ0hFRF9UT19SUVVFVUUJCQk9IDB4MDAwMDAwNDAsCiAJSUNGX09PT19DTURTTgkJCQk9IDB4MDAwMDAwODAsCi0JSUZDX1NFTkRUQVJHRVRTX0FMTAkJCT0gMHgwMDAwMDEwMCwKLQlJRkNfU0VORFRBUkdFVFNfU0lOR0xFCQkJPSAweDAwMDAwMjAwLAorCUlDRl9TRU5EVEFSR0VUU19BTEwJCQk9IDB4MDAwMDAxMDAsCisJSUNGX1NFTkRUQVJHRVRTX1NJTkdMRQkJCT0gMHgwMDAwMDIwMCwKIH07CiAKIC8qIHN0cnVjdCBpc2NzaV9jbWQtPmlfc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKaW5kZXggNzY1M2NmYi4uNThmNDlmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKQEAgLTExMDMsNTEgKzExMDMsNiBAQAogfQogRVhQT1JUX1NZTUJPTChzZV9kZXZfc2V0X3F1ZXVlX2RlcHRoKTsKIAotaW50IHNlX2Rldl9zZXRfZmFicmljX21heF9zZWN0b3JzKHN0cnVjdCBzZV9kZXZpY2UgKmRldiwgdTMyIGZhYnJpY19tYXhfc2VjdG9ycykKLXsKLQlpbnQgYmxvY2tfc2l6ZSA9IGRldi0+ZGV2X2F0dHJpYi5ibG9ja19zaXplOwotCi0JaWYgKGRldi0+ZXhwb3J0X2NvdW50KSB7Ci0JCXByX2VycigiZGV2WyVwXTogVW5hYmxlIHRvIGNoYW5nZSBTRSBEZXZpY2UiCi0JCQkiIGZhYnJpY19tYXhfc2VjdG9ycyB3aGlsZSBleHBvcnRfY291bnQgaXMgJWRcbiIsCi0JCQlkZXYsIGRldi0+ZXhwb3J0X2NvdW50KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICghZmFicmljX21heF9zZWN0b3JzKSB7Ci0JCXByX2VycigiZGV2WyVwXTogSWxsZWdhbCBaRVJPIHZhbHVlIGZvciIKLQkJCSIgZmFicmljX21heF9zZWN0b3JzXG4iLCBkZXYpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKGZhYnJpY19tYXhfc2VjdG9ycyA8IERBX1NUQVRVU19NQVhfU0VDVE9SU19NSU4pIHsKLQkJcHJfZXJyKCJkZXZbJXBdOiBQYXNzZWQgZmFicmljX21heF9zZWN0b3JzOiAldSBsZXNzIHRoYW4iCi0JCQkiIERBX1NUQVRVU19NQVhfU0VDVE9SU19NSU46ICV1XG4iLCBkZXYsIGZhYnJpY19tYXhfc2VjdG9ycywKLQkJCQlEQV9TVEFUVVNfTUFYX1NFQ1RPUlNfTUlOKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChmYWJyaWNfbWF4X3NlY3RvcnMgPiBEQV9TVEFUVVNfTUFYX1NFQ1RPUlNfTUFYKSB7Ci0JCXByX2VycigiZGV2WyVwXTogUGFzc2VkIGZhYnJpY19tYXhfc2VjdG9yczogJXUiCi0JCQkiIGdyZWF0ZXIgdGhhbiBEQV9TVEFUVVNfTUFYX1NFQ1RPUlNfTUFYOiIKLQkJCSIgJXVcbiIsIGRldiwgZmFicmljX21heF9zZWN0b3JzLAotCQkJREFfU1RBVFVTX01BWF9TRUNUT1JTX01BWCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkvKgotCSAqIEFsaWduIG1heF9zZWN0b3JzIGRvd24gdG8gUEFHRV9TSVpFIHRvIGZvbGxvdyB0cmFuc3BvcnRfYWxsb2NhdGVfZGF0YV90YXNrcygpCi0JICovCi0JaWYgKCFibG9ja19zaXplKSB7Ci0JCWJsb2NrX3NpemUgPSA1MTI7Ci0JCXByX3dhcm4oIkRlZmF1bHRpbmcgdG8gNTEyIGZvciB6ZXJvIGJsb2NrX3NpemVcbiIpOwotCX0KLQlmYWJyaWNfbWF4X3NlY3RvcnMgPSBzZV9kZXZfYWxpZ25fbWF4X3NlY3RvcnMoZmFicmljX21heF9zZWN0b3JzLAotCQkJCQkJICAgICAgYmxvY2tfc2l6ZSk7Ci0KLQlkZXYtPmRldl9hdHRyaWIuZmFicmljX21heF9zZWN0b3JzID0gZmFicmljX21heF9zZWN0b3JzOwotCXByX2RlYnVnKCJkZXZbJXBdOiBTRSBEZXZpY2UgbWF4X3NlY3RvcnMgY2hhbmdlZCB0byAldVxuIiwKLQkJCWRldiwgZmFicmljX21heF9zZWN0b3JzKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woc2VfZGV2X3NldF9mYWJyaWNfbWF4X3NlY3RvcnMpOwotCiBpbnQgc2VfZGV2X3NldF9vcHRpbWFsX3NlY3RvcnMoc3RydWN0IHNlX2RldmljZSAqZGV2LCB1MzIgb3B0aW1hbF9zZWN0b3JzKQogewogCWlmIChkZXYtPmV4cG9ydF9jb3VudCkgewpAQCAtMTE1NiwxMCArMTExMSwxMCBAQAogCQkJZGV2LCBkZXYtPmV4cG9ydF9jb3VudCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAob3B0aW1hbF9zZWN0b3JzID4gZGV2LT5kZXZfYXR0cmliLmZhYnJpY19tYXhfc2VjdG9ycykgeworCWlmIChvcHRpbWFsX3NlY3RvcnMgPiBkZXYtPmRldl9hdHRyaWIuaHdfbWF4X3NlY3RvcnMpIHsKIAkJcHJfZXJyKCJkZXZbJXBdOiBQYXNzZWQgb3B0aW1hbF9zZWN0b3JzICV1IGNhbm5vdCBiZSIKLQkJCSIgZ3JlYXRlciB0aGFuIGZhYnJpY19tYXhfc2VjdG9yczogJXVcbiIsIGRldiwKLQkJCW9wdGltYWxfc2VjdG9ycywgZGV2LT5kZXZfYXR0cmliLmZhYnJpY19tYXhfc2VjdG9ycyk7CisJCQkiIGdyZWF0ZXIgdGhhbiBod19tYXhfc2VjdG9yczogJXVcbiIsIGRldiwKKwkJCW9wdGltYWxfc2VjdG9ycywgZGV2LT5kZXZfYXR0cmliLmh3X21heF9zZWN0b3JzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNTUzLDggKzE1MDgsNiBAQAogCWRldi0+ZGV2X2F0dHJpYi51bm1hcF9ncmFudWxhcml0eV9hbGlnbm1lbnQgPQogCQkJCURBX1VOTUFQX0dSQU5VTEFSSVRZX0FMSUdOTUVOVF9ERUZBVUxUOwogCWRldi0+ZGV2X2F0dHJpYi5tYXhfd3JpdGVfc2FtZV9sZW4gPSBEQV9NQVhfV1JJVEVfU0FNRV9MRU47Ci0JZGV2LT5kZXZfYXR0cmliLmZhYnJpY19tYXhfc2VjdG9ycyA9IERBX0ZBQlJJQ19NQVhfU0VDVE9SUzsKLQlkZXYtPmRldl9hdHRyaWIub3B0aW1hbF9zZWN0b3JzID0gREFfRkFCUklDX01BWF9TRUNUT1JTOwogCiAJeGNvcHlfbHVuID0gJmRldi0+eGNvcHlfbHVuOwogCXhjb3B5X2x1bi0+bHVuX3NlX2RldiA9IGRldjsKQEAgLTE1OTUsNiArMTU0OCw3IEBACiAJZGV2LT5kZXZfYXR0cmliLmh3X21heF9zZWN0b3JzID0KIAkJc2VfZGV2X2FsaWduX21heF9zZWN0b3JzKGRldi0+ZGV2X2F0dHJpYi5od19tYXhfc2VjdG9ycywKIAkJCQkJIGRldi0+ZGV2X2F0dHJpYi5od19ibG9ja19zaXplKTsKKwlkZXYtPmRldl9hdHRyaWIub3B0aW1hbF9zZWN0b3JzID0gZGV2LT5kZXZfYXR0cmliLmh3X21heF9zZWN0b3JzOwogCiAJZGV2LT5kZXZfaW5kZXggPSBzY3NpX2dldF9uZXdfaW5kZXgoU0NTSV9ERVZJQ0VfSU5ERVgpOwogCWRldi0+Y3JlYXRpb25fdGltZSA9IGdldF9qaWZmaWVzXzY0KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9maWxlLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9maWxlLmMKaW5kZXggYzJhZWEwOS4uZDgzNmRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYwpAQCAtNjIxLDcgKzYyMSwxNiBAQAogCXN0cnVjdCBmZF9wcm90IGZkX3Byb3Q7CiAJc2Vuc2VfcmVhc29uX3QgcmM7CiAJaW50IHJldCA9IDA7Ci0KKwkvKgorCSAqIFdlIGFyZSBjdXJyZW50bHkgbGltaXRlZCBieSB0aGUgbnVtYmVyIG9mIGlvdmVjcyAoMjA0OCkgcGVyCisJICogc2luZ2xlIHZmc19bd3JpdGV2LHJlYWR2XSBjYWxsLgorCSAqLworCWlmIChjbWQtPmRhdGFfbGVuZ3RoID4gRkRfTUFYX0JZVEVTKSB7CisJCXByX2VycigiRklMRUlPOiBOb3QgYWJsZSB0byBwcm9jZXNzIEkvTyBvZiAldSBieXRlcyBkdWUgdG8iCisJCSAgICAgICAiRkRfTUFYX0JZVEVTOiAldSBpb3ZlYyBjb3VudCBsaW1pdGlhdGlvblxuIiwKKwkJCWNtZC0+ZGF0YV9sZW5ndGgsIEZEX01BWF9CWVRFUyk7CisJCXJldHVybiBUQ01fTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRTsKKwl9CiAJLyoKIAkgKiBDYWxsIHZlY3Rvcml6ZWQgZmlsZWlvIGZ1bmN0aW9ucyB0byBtYXAgc3RydWN0IHNjYXR0ZXJsaXN0CiAJICogcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3NlcyB0byBzdHJ1Y3QgaW92ZWMgdmlydHVhbCBtZW1vcnkuCkBAIC05NTksNyArOTY4LDYgQEAKIAkmZmlsZWlvX2Rldl9hdHRyaWJfaHdfYmxvY2tfc2l6ZS5hdHRyLAogCSZmaWxlaW9fZGV2X2F0dHJpYl9ibG9ja19zaXplLmF0dHIsCiAJJmZpbGVpb19kZXZfYXR0cmliX2h3X21heF9zZWN0b3JzLmF0dHIsCi0JJmZpbGVpb19kZXZfYXR0cmliX2ZhYnJpY19tYXhfc2VjdG9ycy5hdHRyLAogCSZmaWxlaW9fZGV2X2F0dHJpYl9vcHRpbWFsX3NlY3RvcnMuYXR0ciwKIAkmZmlsZWlvX2Rldl9hdHRyaWJfaHdfcXVldWVfZGVwdGguYXR0ciwKIAkmZmlsZWlvX2Rldl9hdHRyaWJfcXVldWVfZGVwdGguYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2libG9jay5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMKaW5kZXggM2VmZmY5NC4uNzgzNDZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCXEgPSBiZGV2X2dldF9xdWV1ZShiZCk7CiAKIAlkZXYtPmRldl9hdHRyaWIuaHdfYmxvY2tfc2l6ZSA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkKTsKLQlkZXYtPmRldl9hdHRyaWIuaHdfbWF4X3NlY3RvcnMgPSBVSU5UX01BWDsKKwlkZXYtPmRldl9hdHRyaWIuaHdfbWF4X3NlY3RvcnMgPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKTsKIAlkZXYtPmRldl9hdHRyaWIuaHdfcXVldWVfZGVwdGggPSBxLT5ucl9yZXF1ZXN0czsKIAogCS8qCkBAIC04ODMsNyArODgzLDYgQEAKIAkmaWJsb2NrX2Rldl9hdHRyaWJfaHdfYmxvY2tfc2l6ZS5hdHRyLAogCSZpYmxvY2tfZGV2X2F0dHJpYl9ibG9ja19zaXplLmF0dHIsCiAJJmlibG9ja19kZXZfYXR0cmliX2h3X21heF9zZWN0b3JzLmF0dHIsCi0JJmlibG9ja19kZXZfYXR0cmliX2ZhYnJpY19tYXhfc2VjdG9ycy5hdHRyLAogCSZpYmxvY2tfZGV2X2F0dHJpYl9vcHRpbWFsX3NlY3RvcnMuYXR0ciwKIAkmaWJsb2NrX2Rldl9hdHRyaWJfaHdfcXVldWVfZGVwdGguYXR0ciwKIAkmaWJsb2NrX2Rldl9hdHRyaWJfcXVldWVfZGVwdGguYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jCmluZGV4IGQ1NmYyYWEuLjI4M2NmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYwpAQCAtNTI4LDYgKzUyOCwxOCBAQAogCiAJCQlyZXR1cm4gMDsKIAkJfQorICAgICAgIH0gZWxzZSBpZiAod2UgJiYgcmVnaXN0ZXJlZF9uZXh1cykgeworICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAqIFJlYWRzIGFyZSBhbGxvd2VkIGZvciBXcml0ZSBFeGNsdXNpdmUgbG9ja3MKKyAgICAgICAgICAgICAgICAqIGZyb20gYWxsIHJlZ2lzdHJhbnRzLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICBpZiAoY21kLT5kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgcHJfZGVidWcoIkFsbG93aW5nIFJFQUQgQ0RCOiAweCUwMnggZm9yICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVzZXJ2YXRpb25cbiIsIGNkYlswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3Njc2kzX3ByX2R1bXBfdHlwZShwcl9yZWdfdHlwZSkpOworCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgfQogCX0KIAlwcl9kZWJ1ZygiJXMgQ29uZmxpY3QgZm9yICVzcmVnaXN0ZXJlZCBuZXh1cyAlcyBDREI6IDB4JTJ4IgogCQkiIGZvciAlcyByZXNlcnZhdGlvblxuIiwgdHJhbnNwb3J0X2R1bXBfY21kX2RpcmVjdGlvbihjbWQpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcmQuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3JkLmMKaW5kZXggNjBlYmQxNy4uOThlODNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcmQuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9yZC5jCkBAIC02NTcsNyArNjU3LDYgQEAKIAkmcmRfbWNwX2Rldl9hdHRyaWJfaHdfYmxvY2tfc2l6ZS5hdHRyLAogCSZyZF9tY3BfZGV2X2F0dHJpYl9ibG9ja19zaXplLmF0dHIsCiAJJnJkX21jcF9kZXZfYXR0cmliX2h3X21heF9zZWN0b3JzLmF0dHIsCi0JJnJkX21jcF9kZXZfYXR0cmliX2ZhYnJpY19tYXhfc2VjdG9ycy5hdHRyLAogCSZyZF9tY3BfZGV2X2F0dHJpYl9vcHRpbWFsX3NlY3RvcnMuYXR0ciwKIAkmcmRfbWNwX2Rldl9hdHRyaWJfaHdfcXVldWVfZGVwdGguYXR0ciwKIAkmcmRfbWNwX2Rldl9hdHRyaWJfcXVldWVfZGVwdGguYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc2JjLmMKaW5kZXggMTFiZWExOS4uY2Q0YmVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc2JjLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc2JjLmMKQEAgLTk1MywyMSArOTUzLDYgQEAKIAogCWlmIChjbWQtPnNlX2NtZF9mbGFncyAmIFNDRl9TQ1NJX0RBVEFfQ0RCKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmRfbGJhOwotCi0JCWlmIChzZWN0b3JzID4gZGV2LT5kZXZfYXR0cmliLmZhYnJpY19tYXhfc2VjdG9ycykgewotCQkJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fRVJSICJTQ1NJIE9QICUwMnhoIHdpdGggdG9vIgotCQkJCSIgYmlnIHNlY3RvcnMgJXUgZXhjZWVkcyBmYWJyaWNfbWF4X3NlY3RvcnM6IgotCQkJCSIgJXVcbiIsIGNkYlswXSwgc2VjdG9ycywKLQkJCQlkZXYtPmRldl9hdHRyaWIuZmFicmljX21heF9zZWN0b3JzKTsKLQkJCXJldHVybiBUQ01fSU5WQUxJRF9DREJfRklFTEQ7Ci0JCX0KLQkJaWYgKHNlY3RvcnMgPiBkZXYtPmRldl9hdHRyaWIuaHdfbWF4X3NlY3RvcnMpIHsKLQkJCXByaW50a19yYXRlbGltaXRlZChLRVJOX0VSUiAiU0NTSSBPUCAlMDJ4aCB3aXRoIHRvbyIKLQkJCQkiIGJpZyBzZWN0b3JzICV1IGV4Y2VlZHMgYmFja2VuZCBod19tYXhfc2VjdG9yczoiCi0JCQkJIiAldVxuIiwgY2RiWzBdLCBzZWN0b3JzLAotCQkJCWRldi0+ZGV2X2F0dHJpYi5od19tYXhfc2VjdG9ycyk7Ci0JCQlyZXR1cm4gVENNX0lOVkFMSURfQ0RCX0ZJRUxEOwotCQl9CiBjaGVja19sYmE6CiAJCWVuZF9sYmEgPSBkZXYtPnRyYW5zcG9ydC0+Z2V0X2Jsb2NrcyhkZXYpICsgMTsKIAkJaWYgKGNtZC0+dF90YXNrX2xiYSArIHNlY3RvcnMgPiBlbmRfbGJhKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zcGMuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NwYy5jCmluZGV4IDEzMDc2MDAuLjRjNzE2NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NwYy5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NwYy5jCkBAIC01MDUsNyArNTA1LDYgQEAKIHNwY19lbXVsYXRlX2V2cGRfYjAoc3RydWN0IHNlX2NtZCAqY21kLCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNlX2RldmljZSAqZGV2ID0gY21kLT5zZV9kZXY7Ci0JdTMyIG1heF9zZWN0b3JzOwogCWludCBoYXZlX3RwID0gMDsKIAlpbnQgb3B0LCBtaW47CiAKQEAgLTUzOSw5ICs1MzgsNyBAQAogCS8qCiAJICogU2V0IE1BWElNVU0gVFJBTlNGRVIgTEVOR1RICiAJICovCi0JbWF4X3NlY3RvcnMgPSBtaW4oZGV2LT5kZXZfYXR0cmliLmZhYnJpY19tYXhfc2VjdG9ycywKLQkJCSAgZGV2LT5kZXZfYXR0cmliLmh3X21heF9zZWN0b3JzKTsKLQlwdXRfdW5hbGlnbmVkX2JlMzIobWF4X3NlY3RvcnMsICZidWZbOF0pOworCXB1dF91bmFsaWduZWRfYmUzMihkZXYtPmRldl9hdHRyaWIuaHdfbWF4X3NlY3RvcnMsICZidWZbOF0pOwogCiAJLyoKIAkgKiBTZXQgT1BUSU1BTCBUUkFOU0ZFUiBMRU5HVEgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYwppbmRleCA4YmZhNjFjLi4xMTU3YjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdXNlci5jCkBAIC0xMTE4LDcgKzExMTgsNiBAQAogCSZ0Y211X2Rldl9hdHRyaWJfaHdfYmxvY2tfc2l6ZS5hdHRyLAogCSZ0Y211X2Rldl9hdHRyaWJfYmxvY2tfc2l6ZS5hdHRyLAogCSZ0Y211X2Rldl9hdHRyaWJfaHdfbWF4X3NlY3RvcnMuYXR0ciwKLQkmdGNtdV9kZXZfYXR0cmliX2ZhYnJpY19tYXhfc2VjdG9ycy5hdHRyLAogCSZ0Y211X2Rldl9hdHRyaWJfb3B0aW1hbF9zZWN0b3JzLmF0dHIsCiAJJnRjbXVfZGV2X2F0dHJpYl9od19xdWV1ZV9kZXB0aC5hdHRyLAogCSZ0Y211X2Rldl9hdHRyaWJfcXVldWVfZGVwdGguYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9jcHVfY29vbGluZy5jIGIvZHJpdmVycy90aGVybWFsL2NwdV9jb29saW5nLmMKaW5kZXggYWQwOWU1MS4uZjY1ZjBkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2NwdV9jb29saW5nLmMKKysrIGIvZHJpdmVycy90aGVybWFsL2NwdV9jb29saW5nLmMKQEAgLTQsNiArNCw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDEyCVNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQoaHR0cDovL3d3dy5zYW1zdW5nLmNvbSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMTIgIEFtaXQgRGFuaWVsIDxhbWl0LmthY2hoYXBAbGluYXJvLm9yZz4KICAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0ICBWaXJlc2ggS3VtYXIgPHZpcmVzaC5rdW1hckBsaW5hcm8ub3JnPgorICoKICAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjgsNiArMzAsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVfY29vbGluZy5oPgogCisvKgorICogQ29vbGluZyBzdGF0ZSA8LT4gQ1BVRnJlcSBmcmVxdWVuY3kKKyAqCisgKiBDb29saW5nIHN0YXRlcyBhcmUgdHJhbnNsYXRlZCB0byBmcmVxdWVuY2llcyB0aHJvdWdob3V0IHRoaXMgZHJpdmVyIGFuZCB0aGlzCisgKiBpcyB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGVtLgorICoKKyAqIEhpZ2hlc3QgY29vbGluZyBzdGF0ZSBjb3JyZXNwb25kcyB0byBsb3dlc3QgcG9zc2libGUgZnJlcXVlbmN5LgorICoKKyAqIGkuZS4KKyAqCWxldmVsIDAgLS0+IDFzdCBNYXggRnJlcQorICoJbGV2ZWwgMSAtLT4gMm5kIE1heCBGcmVxCisgKgkuLi4KKyAqLworCiAvKioKICAqIHN0cnVjdCBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlIC0gZGF0YSBmb3IgY29vbGluZyBkZXZpY2Ugd2l0aCBjcHVmcmVxCiAgKiBAaWQ6IHVuaXF1ZSBpbnRlZ2VyIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlCkBAIC0zOCwyNSArNTQsMjcgQEAKICAqCWNvb2xpbmcJZGV2aWNlcy4KICAqIEBjcHVmcmVxX3ZhbDogaW50ZWdlciB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBjbGlwcGVkCiAgKglmcmVxdWVuY3kuCisgKiBAbWF4X2xldmVsOiBtYXhpbXVtIGNvb2xpbmcgbGV2ZWwuIE9uZSBsZXNzIHRoYW4gdG90YWwgbnVtYmVyIG9mIHZhbGlkCisgKgljcHVmcmVxIGZyZXF1ZW5jaWVzLgogICogQGFsbG93ZWRfY3B1czogYWxsIHRoZSBjcHVzIGludm9sdmVkIGZvciB0aGlzIGNwdWZyZXFfY29vbGluZ19kZXZpY2UuCisgKiBAbm9kZTogbGlzdF9oZWFkIHRvIGxpbmsgYWxsIGNwdWZyZXFfY29vbGluZ19kZXZpY2UgdG9nZXRoZXIuCiAgKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgcmVxdWlyZWQgZm9yIGtlZXBpbmcgaW5mb3JtYXRpb24gb2YgZWFjaAotICogY3B1ZnJlcV9jb29saW5nX2RldmljZSByZWdpc3RlcmVkLiBJbiBvcmRlciB0byBwcmV2ZW50IGNvcnJ1cHRpb24gb2YgdGhpcyBhCi0gKiBtdXRleCBsb2NrIGNvb2xpbmdfY3B1ZnJlcV9sb2NrIGlzIHVzZWQuCisgKiBUaGlzIHN0cnVjdHVyZSBpcyByZXF1aXJlZCBmb3Iga2VlcGluZyBpbmZvcm1hdGlvbiBvZiBlYWNoIHJlZ2lzdGVyZWQKKyAqIGNwdWZyZXFfY29vbGluZ19kZXZpY2UuCiAgKi8KIHN0cnVjdCBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlIHsKIAlpbnQgaWQ7CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNvb2xfZGV2OwogCXVuc2lnbmVkIGludCBjcHVmcmVxX3N0YXRlOwogCXVuc2lnbmVkIGludCBjcHVmcmVxX3ZhbDsKKwl1bnNpZ25lZCBpbnQgbWF4X2xldmVsOworCXVuc2lnbmVkIGludCAqZnJlcV90YWJsZTsJLyogSW4gZGVzY2VuZGluZyBvcmRlciAqLwogCXN0cnVjdCBjcHVtYXNrIGFsbG93ZWRfY3B1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiB9Owogc3RhdGljIERFRklORV9JRFIoY3B1ZnJlcV9pZHIpOwogc3RhdGljIERFRklORV9NVVRFWChjb29saW5nX2NwdWZyZXFfbG9jayk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9kZXZfY291bnQ7Ci0KIHN0YXRpYyBMSVNUX0hFQUQoY3B1ZnJlcV9kZXZfbGlzdCk7CiAKIC8qKgpAQCAtOTgsMTIwICsxMTYsMzAgQEAKIC8qIEJlbG93IGNvZGUgZGVmaW5lcyBmdW5jdGlvbnMgdG8gYmUgdXNlZCBmb3IgY3B1ZnJlcSBhcyBjb29saW5nIGRldmljZSAqLwogCiAvKioKLSAqIGlzX2NwdWZyZXFfdmFsaWQgLSBmdW5jdGlvbiB0byBjaGVjayBmcmVxdWVuY3kgdHJhbnNpdGlvbmluZyBjYXBhYmlsaXR5LgotICogQGNwdTogY3B1IGZvciB3aGljaCBjaGVjayBpcyBuZWVkZWQuCisgKiBnZXRfbGV2ZWw6IEZpbmQgdGhlIGxldmVsIGZvciBhIHBhcnRpY3VsYXIgZnJlcXVlbmN5CisgKiBAY3B1ZnJlcV9kZXY6IGNwdWZyZXFfZGV2IGZvciB3aGljaCB0aGUgcHJvcGVydHkgaXMgcmVxdWlyZWQKKyAqIEBmcmVxOiBGcmVxdWVuY3kKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHN5c3RlbSBpZgotICogaXQgaXMgY2FwYWJsZSBvZiBjaGFuZ2luZyB0aGUgZnJlcXVlbmN5IGZvciBhIGdpdmVuIEBjcHUuCi0gKgotICogUmV0dXJuOiAwIGlmIHRoZSBzeXN0ZW0gaXMgbm90IGN1cnJlbnRseSBjYXBhYmxlIG9mIGNoYW5naW5nCi0gKiB0aGUgZnJlcXVlbmN5IG9mIGdpdmVuIGNwdS4gITAgaW4gY2FzZSB0aGUgZnJlcXVlbmN5IGlzIGNoYW5nZWFibGUuCisgKiBSZXR1cm46IGxldmVsIG9uIHN1Y2Nlc3MsIFRIRVJNQUxfQ1NUQVRFX0lOVkFMSUQgb24gZXJyb3IuCiAgKi8KLXN0YXRpYyBpbnQgaXNfY3B1ZnJlcV92YWxpZChpbnQgY3B1KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2xldmVsKHN0cnVjdCBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlICpjcHVmcmVxX2RldiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZnJlcSkKIHsKLQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgcG9saWN5OworCXVuc2lnbmVkIGxvbmcgbGV2ZWw7CiAKLQlyZXR1cm4gIWNwdWZyZXFfZ2V0X3BvbGljeSgmcG9saWN5LCBjcHUpOwotfQorCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8PSBjcHVmcmVxX2Rldi0+bWF4X2xldmVsOyBsZXZlbCsrKSB7CisJCWlmIChmcmVxID09IGNwdWZyZXFfZGV2LT5mcmVxX3RhYmxlW2xldmVsXSkKKwkJCXJldHVybiBsZXZlbDsKIAotZW51bSBjcHVmcmVxX2Nvb2xpbmdfcHJvcGVydHkgewotCUdFVF9MRVZFTCwKLQlHRVRfRlJFUSwKLQlHRVRfTUFYTCwKLX07Ci0KLS8qKgotICogZ2V0X3Byb3BlcnR5IC0gZmV0Y2ggYSBwcm9wZXJ0eSBvZiBpbnRlcmVzdCBmb3IgYSBnaXZlIGNwdS4KLSAqIEBjcHU6IGNwdSBmb3Igd2hpY2ggdGhlIHByb3BlcnR5IGlzIHJlcXVpcmVkCi0gKiBAaW5wdXQ6IHF1ZXJ5IHBhcmFtZXRlcgotICogQG91dHB1dDogcXVlcnkgcmV0dXJuCi0gKiBAcHJvcGVydHk6IHR5cGUgb2YgcXVlcnkgKGZyZXF1ZW5jeSwgbGV2ZWwsIG1heCBsZXZlbCkKLSAqCi0gKiBUaGlzIGlzIHRoZSBjb21tb24gZnVuY3Rpb24gdG8KLSAqIDEuIGdldCBtYXhpbXVtIGNwdSBjb29saW5nIHN0YXRlcwotICogMi4gdHJhbnNsYXRlIGZyZXF1ZW5jeSB0byBjb29saW5nIHN0YXRlCi0gKiAzLiB0cmFuc2xhdGUgY29vbGluZyBzdGF0ZSB0byBmcmVxdWVuY3kKLSAqIE5vdGUgdGhhdCB0aGUgY29kZSBtYXkgYmUgbm90IGluIGdvb2Qgc2hhcGUKLSAqIGJ1dCBpdCBpcyB3cml0dGVuIGluIHRoaXMgd2F5IGluIG9yZGVyIHRvOgotICogYSkgcmVkdWNlIGR1cGxpY2F0ZSBjb2RlIGFzIG1vc3Qgb2YgdGhlIGNvZGUgY2FuIGJlIHNoYXJlZC4KLSAqIGIpIG1ha2Ugc3VyZSB0aGUgbG9naWMgaXMgY29uc2lzdGVudCB3aGVuIHRyYW5zbGF0aW5nIGJldHdlZW4KLSAqICAgIGNvb2xpbmcgc3RhdGVzIGFuZCBmcmVxdWVuY2llcy4KLSAqCi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCB3aGVuIGludmFsaWQgcGFyYW1ldGVycyBhcmUgcGFzc2VkLgotICovCi1zdGF0aWMgaW50IGdldF9wcm9wZXJ0eSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGlucHV0LAotCQkJdW5zaWduZWQgaW50ICpvdXRwdXQsCi0JCQllbnVtIGNwdWZyZXFfY29vbGluZ19wcm9wZXJ0eSBwcm9wZXJ0eSkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIG1heF9sZXZlbCA9IDAsIGxldmVsID0gMDsKLQl1bnNpZ25lZCBpbnQgZnJlcSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKLQlpbnQgZGVzY2VuZCA9IC0xOwotCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG9zLCAqdGFibGUgPQotCQkJCQljcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUoY3B1KTsKLQotCWlmICghb3V0cHV0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghdGFibGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY3B1ZnJlcV9mb3JfZWFjaF92YWxpZF9lbnRyeShwb3MsIHRhYmxlKSB7Ci0JCS8qIGlnbm9yZSBkdXBsaWNhdGUgZW50cnkgKi8KLQkJaWYgKGZyZXEgPT0gcG9zLT5mcmVxdWVuY3kpCi0JCQljb250aW51ZTsKLQotCQkvKiBnZXQgdGhlIGZyZXF1ZW5jeSBvcmRlciAqLwotCQlpZiAoZnJlcSAhPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQgJiYgZGVzY2VuZCA9PSAtMSkKLQkJCWRlc2NlbmQgPSBmcmVxID4gcG9zLT5mcmVxdWVuY3k7Ci0KLQkJZnJlcSA9IHBvcy0+ZnJlcXVlbmN5OwotCQltYXhfbGV2ZWwrKzsKKwkJaWYgKGZyZXEgPiBjcHVmcmVxX2Rldi0+ZnJlcV90YWJsZVtsZXZlbF0pCisJCQlicmVhazsKIAl9CiAKLQkvKiBObyB2YWxpZCBjcHUgZnJlcXVlbmN5IGVudHJ5ICovCi0JaWYgKG1heF9sZXZlbCA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIG1heF9sZXZlbCBpcyBhbiBpbmRleCwgbm90IGEgY291bnRlciAqLwotCW1heF9sZXZlbC0tOwotCi0JLyogZ2V0IG1heCBsZXZlbCAqLwotCWlmIChwcm9wZXJ0eSA9PSBHRVRfTUFYTCkgewotCQkqb3V0cHV0ID0gKHVuc2lnbmVkIGludCltYXhfbGV2ZWw7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChwcm9wZXJ0eSA9PSBHRVRfRlJFUSkKLQkJbGV2ZWwgPSBkZXNjZW5kID8gaW5wdXQgOiAobWF4X2xldmVsIC0gaW5wdXQpOwotCi0JaSA9IDA7Ci0JY3B1ZnJlcV9mb3JfZWFjaF92YWxpZF9lbnRyeShwb3MsIHRhYmxlKSB7Ci0JCS8qIGlnbm9yZSBkdXBsaWNhdGUgZW50cnkgKi8KLQkJaWYgKGZyZXEgPT0gcG9zLT5mcmVxdWVuY3kpCi0JCQljb250aW51ZTsKLQotCQkvKiBub3cgd2UgaGF2ZSBhIHZhbGlkIGZyZXF1ZW5jeSBlbnRyeSAqLwotCQlmcmVxID0gcG9zLT5mcmVxdWVuY3k7Ci0KLQkJaWYgKHByb3BlcnR5ID09IEdFVF9MRVZFTCAmJiAodW5zaWduZWQgaW50KWlucHV0ID09IGZyZXEpIHsKLQkJCS8qIGdldCBsZXZlbCBieSBmcmVxdWVuY3kgKi8KLQkJCSpvdXRwdXQgPSBkZXNjZW5kID8gaSA6IChtYXhfbGV2ZWwgLSBpKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWlmIChwcm9wZXJ0eSA9PSBHRVRfRlJFUSAmJiBsZXZlbCA9PSBpKSB7Ci0JCQkvKiBnZXQgZnJlcXVlbmN5IGJ5IGxldmVsICovCi0JCQkqb3V0cHV0ID0gZnJlcTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWkrKzsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gVEhFUk1BTF9DU1RBVEVfSU5WQUxJRDsKIH0KIAogLyoqCi0gKiBjcHVmcmVxX2Nvb2xpbmdfZ2V0X2xldmVsIC0gZm9yIGEgZ2l2ZSBjcHUsIHJldHVybiB0aGUgY29vbGluZyBsZXZlbC4KKyAqIGNwdWZyZXFfY29vbGluZ19nZXRfbGV2ZWwgLSBmb3IgYSBnaXZlbiBjcHUsIHJldHVybiB0aGUgY29vbGluZyBsZXZlbC4KICAqIEBjcHU6IGNwdSBmb3Igd2hpY2ggdGhlIGxldmVsIGlzIHJlcXVpcmVkCiAgKiBAZnJlcTogdGhlIGZyZXF1ZW5jeSBvZiBpbnRlcmVzdAogICoKQEAgLTIyMyw3OSArMTUxLDIzIEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgY3B1ZnJlcV9jb29saW5nX2dldF9sZXZlbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgZnJlcSkKIHsKLQl1bnNpZ25lZCBpbnQgdmFsOworCXN0cnVjdCBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlICpjcHVmcmVxX2RldjsKIAotCWlmIChnZXRfcHJvcGVydHkoY3B1LCAodW5zaWduZWQgbG9uZylmcmVxLCAmdmFsLCBHRVRfTEVWRUwpKQotCQlyZXR1cm4gVEhFUk1BTF9DU1RBVEVfSU5WQUxJRDsKKwltdXRleF9sb2NrKCZjb29saW5nX2NwdWZyZXFfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcHVmcmVxX2RldiwgJmNwdWZyZXFfZGV2X2xpc3QsIG5vZGUpIHsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmY3B1ZnJlcV9kZXYtPmFsbG93ZWRfY3B1cykpIHsKKwkJCW11dGV4X3VubG9jaygmY29vbGluZ19jcHVmcmVxX2xvY2spOworCQkJcmV0dXJuIGdldF9sZXZlbChjcHVmcmVxX2RldiwgZnJlcSk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjb29saW5nX2NwdWZyZXFfbG9jayk7CiAKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdmFsOworCXByX2VycigiJXM6IGNwdTolZCBub3QgcGFydCBvZiBhbnkgY29vbGluZyBkZXZpY2VcbiIsIF9fZnVuY19fLCBjcHUpOworCXJldHVybiBUSEVSTUFMX0NTVEFURV9JTlZBTElEOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1ZnJlcV9jb29saW5nX2dldF9sZXZlbCk7CiAKIC8qKgotICogZ2V0X2NwdV9mcmVxdWVuY3kgLSBnZXQgdGhlIGFic29sdXRlIHZhbHVlIG9mIGZyZXF1ZW5jeSBmcm9tIGxldmVsLgotICogQGNwdTogY3B1IGZvciB3aGljaCBmcmVxdWVuY3kgaXMgZmV0Y2hlZC4KLSAqIEBsZXZlbDogY29vbGluZyBsZXZlbAotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWF0Y2hlcyBjb29saW5nIGxldmVsIHdpdGggZnJlcXVlbmN5LiBCYXNlZCBvbiBhIGNvb2xpbmcgbGV2ZWwKLSAqIG9mIGZyZXF1ZW5jeSwgZXF1YWxzIGNvb2xpbmcgc3RhdGUgb2YgY3B1IGNvb2xpbmcgZGV2aWNlLCBpdCB3aWxsIHJldHVybgotICogdGhlIGNvcnJlc3BvbmRpbmcgZnJlcXVlbmN5LgotICoJZS5nIGxldmVsPTAgLS0+IDFzdCBNQVggRlJFUSwgbGV2ZWw9MSAtLS0+IDJuZCBNQVggRlJFUSwgLi4uLiBldGMKLSAqCi0gKiBSZXR1cm46IDAgb24gZXJyb3IsIHRoZSBjb3JyZXNwb25kaW5nIGZyZXF1ZW5jeSBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NwdV9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBsZXZlbCkKLXsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBpbnQgZnJlcTsKLQotCXJldCA9IGdldF9wcm9wZXJ0eShjcHUsIGxldmVsLCAmZnJlcSwgR0VUX0ZSRVEpOwotCWlmIChyZXQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGZyZXE7Ci19Ci0KLS8qKgotICogY3B1ZnJlcV9hcHBseV9jb29saW5nIC0gZnVuY3Rpb24gdG8gYXBwbHkgZnJlcXVlbmN5IGNsaXBwaW5nLgotICogQGNwdWZyZXFfZGV2aWNlOiBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlIHBvaW50ZXIgY29udGFpbmluZyBmcmVxdWVuY3kKLSAqCWNsaXBwaW5nIGRhdGEuCi0gKiBAY29vbGluZ19zdGF0ZTogdmFsdWUgb2YgdGhlIGNvb2xpbmcgc3RhdGUuCi0gKgotICogRnVuY3Rpb24gdXNlZCB0byBtYWtlIHN1cmUgdGhlIGNwdWZyZXEgbGF5ZXIgaXMgYXdhcmUgb2YgY3VycmVudCB0aGVybWFsCi0gKiBsaW1pdHMuIFRoZSBsaW1pdHMgYXJlIGFwcGxpZWQgYnkgdXBkYXRpbmcgdGhlIGNwdWZyZXEgcG9saWN5LgotICoKLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZSAoLUVJTlZBTCBpbiBjYXNlIHdyb25nCi0gKiBjb29saW5nIHN0YXRlKS4KLSAqLwotc3RhdGljIGludCBjcHVmcmVxX2FwcGx5X2Nvb2xpbmcoc3RydWN0IGNwdWZyZXFfY29vbGluZ19kZXZpY2UgKmNwdWZyZXFfZGV2aWNlLAotCQkJCSB1bnNpZ25lZCBsb25nIGNvb2xpbmdfc3RhdGUpCi17Ci0JdW5zaWduZWQgaW50IGNwdWlkLCBjbGlwX2ZyZXE7Ci0Jc3RydWN0IGNwdW1hc2sgKm1hc2sgPSAmY3B1ZnJlcV9kZXZpY2UtPmFsbG93ZWRfY3B1czsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gY3B1bWFza19hbnkobWFzayk7Ci0KLQotCS8qIENoZWNrIGlmIHRoZSBvbGQgY29vbGluZyBhY3Rpb24gaXMgc2FtZSBhcyBuZXcgY29vbGluZyBhY3Rpb24gKi8KLQlpZiAoY3B1ZnJlcV9kZXZpY2UtPmNwdWZyZXFfc3RhdGUgPT0gY29vbGluZ19zdGF0ZSkKLQkJcmV0dXJuIDA7Ci0KLQljbGlwX2ZyZXEgPSBnZXRfY3B1X2ZyZXF1ZW5jeShjcHUsIGNvb2xpbmdfc3RhdGUpOwotCWlmICghY2xpcF9mcmVxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNwdWZyZXFfZGV2aWNlLT5jcHVmcmVxX3N0YXRlID0gY29vbGluZ19zdGF0ZTsKLQljcHVmcmVxX2RldmljZS0+Y3B1ZnJlcV92YWwgPSBjbGlwX2ZyZXE7Ci0KLQlmb3JfZWFjaF9jcHUoY3B1aWQsIG1hc2spIHsKLQkJaWYgKGlzX2NwdWZyZXFfdmFsaWQoY3B1aWQpKQotCQkJY3B1ZnJlcV91cGRhdGVfcG9saWN5KGNwdWlkKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCiAgKiBjcHVmcmVxX3RoZXJtYWxfbm90aWZpZXIgLSBub3RpZmllciBjYWxsYmFjayBmb3IgY3B1ZnJlcSBwb2xpY3kgY2hhbmdlLgogICogQG5iOglzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiB3aXRoIGNhbGxiYWNrIGluZm8uCiAgKiBAZXZlbnQ6IHZhbHVlIHNob3dpbmcgY3B1ZnJlcSBldmVudCBmb3Igd2hpY2ggdGhpcyBmdW5jdGlvbiBpbnZva2VkLgpAQCAtMzIzLDExICsxOTUsNiBAQAogCQkJCQkmY3B1ZnJlcV9kZXYtPmFsbG93ZWRfY3B1cykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIWNwdWZyZXFfZGV2LT5jcHVmcmVxX3ZhbCkKLQkJCWNwdWZyZXFfZGV2LT5jcHVmcmVxX3ZhbCA9IGdldF9jcHVfZnJlcXVlbmN5KAotCQkJCQljcHVtYXNrX2FueSgmY3B1ZnJlcV9kZXYtPmFsbG93ZWRfY3B1cyksCi0JCQkJCWNwdWZyZXFfZGV2LT5jcHVmcmVxX3N0YXRlKTsKLQogCQltYXhfZnJlcSA9IGNwdWZyZXFfZGV2LT5jcHVmcmVxX3ZhbDsKIAogCQlpZiAocG9saWN5LT5tYXggIT0gbWF4X2ZyZXEpCkBAIC0zNTQsMTkgKzIyMSw5IEBACiAJCQkJIHVuc2lnbmVkIGxvbmcgKnN0YXRlKQogewogCXN0cnVjdCBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlICpjcHVmcmVxX2RldmljZSA9IGNkZXYtPmRldmRhdGE7Ci0Jc3RydWN0IGNwdW1hc2sgKm1hc2sgPSAmY3B1ZnJlcV9kZXZpY2UtPmFsbG93ZWRfY3B1czsKLQl1bnNpZ25lZCBpbnQgY3B1OwotCXVuc2lnbmVkIGludCBjb3VudCA9IDA7Ci0JaW50IHJldDsKIAotCWNwdSA9IGNwdW1hc2tfYW55KG1hc2spOwotCi0JcmV0ID0gZ2V0X3Byb3BlcnR5KGNwdSwgMCwgJmNvdW50LCBHRVRfTUFYTCk7Ci0KLQlpZiAoY291bnQgPiAwKQotCQkqc3RhdGUgPSBjb3VudDsKLQotCXJldHVybiByZXQ7CisJKnN0YXRlID0gY3B1ZnJlcV9kZXZpY2UtPm1heF9sZXZlbDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC00MDMsOCArMjYwLDI0IEBACiAJCQkJIHVuc2lnbmVkIGxvbmcgc3RhdGUpCiB7CiAJc3RydWN0IGNwdWZyZXFfY29vbGluZ19kZXZpY2UgKmNwdWZyZXFfZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gY3B1bWFza19hbnkoJmNwdWZyZXFfZGV2aWNlLT5hbGxvd2VkX2NwdXMpOworCXVuc2lnbmVkIGludCBjbGlwX2ZyZXE7CiAKLQlyZXR1cm4gY3B1ZnJlcV9hcHBseV9jb29saW5nKGNwdWZyZXFfZGV2aWNlLCBzdGF0ZSk7CisJLyogUmVxdWVzdCBzdGF0ZSBzaG91bGQgYmUgbGVzcyB0aGFuIG1heF9sZXZlbCAqLworCWlmIChXQVJOX09OKHN0YXRlID4gY3B1ZnJlcV9kZXZpY2UtPm1heF9sZXZlbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2hlY2sgaWYgdGhlIG9sZCBjb29saW5nIGFjdGlvbiBpcyBzYW1lIGFzIG5ldyBjb29saW5nIGFjdGlvbiAqLworCWlmIChjcHVmcmVxX2RldmljZS0+Y3B1ZnJlcV9zdGF0ZSA9PSBzdGF0ZSkKKwkJcmV0dXJuIDA7CisKKwljbGlwX2ZyZXEgPSBjcHVmcmVxX2RldmljZS0+ZnJlcV90YWJsZVtzdGF0ZV07CisJY3B1ZnJlcV9kZXZpY2UtPmNwdWZyZXFfc3RhdGUgPSBzdGF0ZTsKKwljcHVmcmVxX2RldmljZS0+Y3B1ZnJlcV92YWwgPSBjbGlwX2ZyZXE7CisKKwljcHVmcmVxX3VwZGF0ZV9wb2xpY3koY3B1KTsKKworCXJldHVybiAwOwogfQogCiAvKiBCaW5kIGNwdWZyZXEgY2FsbGJhY2tzIHRvIHRoZXJtYWwgY29vbGluZyBkZXZpY2Ugb3BzICovCkBAIC00MTksMTAgKzI5MiwyNSBAQAogCS5ub3RpZmllcl9jYWxsID0gY3B1ZnJlcV90aGVybWFsX25vdGlmaWVyLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfbWF4KHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUsCisJCQkJICB1bnNpZ25lZCBpbnQgcHJldl9tYXgpCit7CisJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3M7CisJdW5zaWduZWQgaW50IG1heCA9IDA7CisKKwljcHVmcmVxX2Zvcl9lYWNoX3ZhbGlkX2VudHJ5KHBvcywgdGFibGUpIHsKKwkJaWYgKHBvcy0+ZnJlcXVlbmN5ID4gbWF4ICYmIHBvcy0+ZnJlcXVlbmN5IDwgcHJldl9tYXgpCisJCQltYXggPSBwb3MtPmZyZXF1ZW5jeTsKKwl9CisKKwlyZXR1cm4gbWF4OworfQorCiAvKioKICAqIF9fY3B1ZnJlcV9jb29saW5nX3JlZ2lzdGVyIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBjcHVmcmVxIGNvb2xpbmcgZGV2aWNlCiAgKiBAbnA6IGEgdmFsaWQgc3RydWN0IGRldmljZV9ub2RlIHRvIHRoZSBjb29saW5nIGRldmljZSBkZXZpY2UgdHJlZSBub2RlCiAgKiBAY2xpcF9jcHVzOiBjcHVtYXNrIG9mIGNwdXMgd2hlcmUgdGhlIGZyZXF1ZW5jeSBjb25zdHJhaW50cyB3aWxsIGhhcHBlbi4KKyAqIE5vcm1hbGx5IHRoaXMgc2hvdWxkIGJlIHNhbWUgYXMgY3B1ZnJlcSBwb2xpY3ktPnJlbGF0ZWRfY3B1cy4KICAqCiAgKiBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZWdpc3RlcnMgdGhlIGNwdWZyZXEgY29vbGluZyBkZXZpY2Ugd2l0aCB0aGUgbmFtZQogICogInRoZXJtYWwtY3B1ZnJlcS0leCIuIFRoaXMgYXBpIGNhbiBzdXBwb3J0IG11bHRpcGxlIGluc3RhbmNlcyBvZiBjcHVmcmVxCkBAIC00MzcsMzcgKzMyNSw0MiBAQAogCQkJICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNsaXBfY3B1cykKIHsKIAlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY29vbF9kZXY7Ci0Jc3RydWN0IGNwdWZyZXFfY29vbGluZ19kZXZpY2UgKmNwdWZyZXFfZGV2ID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgbWluID0gMCwgbWF4ID0gMDsKKwlzdHJ1Y3QgY3B1ZnJlcV9jb29saW5nX2RldmljZSAqY3B1ZnJlcV9kZXY7CiAJY2hhciBkZXZfbmFtZVtUSEVSTUFMX05BTUVfTEVOR1RIXTsKLQlpbnQgcmV0ID0gMCwgaTsKLQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgcG9saWN5OworCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG9zLCAqdGFibGU7CisJdW5zaWduZWQgaW50IGZyZXEsIGk7CisJaW50IHJldDsKIAotCS8qIFZlcmlmeSB0aGF0IGFsbCB0aGUgY2xpcCBjcHVzIGhhdmUgc2FtZSBmcmVxX21pbiwgZnJlcV9tYXggbGltaXQgKi8KLQlmb3JfZWFjaF9jcHUoaSwgY2xpcF9jcHVzKSB7Ci0JCS8qIGNvbnRpbnVlIGlmIGNwdWZyZXEgcG9saWN5IG5vdCBmb3VuZCBhbmQgbm90IHJldHVybiBlcnJvciAqLwotCQlpZiAoIWNwdWZyZXFfZ2V0X3BvbGljeSgmcG9saWN5LCBpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobWluID09IDAgJiYgbWF4ID09IDApIHsKLQkJCW1pbiA9IHBvbGljeS5jcHVpbmZvLm1pbl9mcmVxOwotCQkJbWF4ID0gcG9saWN5LmNwdWluZm8ubWF4X2ZyZXE7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobWluICE9IHBvbGljeS5jcHVpbmZvLm1pbl9mcmVxIHx8Ci0JCQkgICAgbWF4ICE9IHBvbGljeS5jcHVpbmZvLm1heF9mcmVxKQotCQkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCQl9CisJdGFibGUgPSBjcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUoY3B1bWFza19maXJzdChjbGlwX2NwdXMpKTsKKwlpZiAoIXRhYmxlKSB7CisJCXByX2RlYnVnKCIlczogQ1BVRnJlcSB0YWJsZSBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CiAJfQotCWNwdWZyZXFfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfY29vbGluZ19kZXZpY2UpLAotCQkJICAgICAgR0ZQX0tFUk5FTCk7CisKKwljcHVmcmVxX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpjcHVmcmVxX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghY3B1ZnJlcV9kZXYpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCisJLyogRmluZCBtYXggbGV2ZWxzICovCisJY3B1ZnJlcV9mb3JfZWFjaF92YWxpZF9lbnRyeShwb3MsIHRhYmxlKQorCQljcHVmcmVxX2Rldi0+bWF4X2xldmVsKys7CisKKwljcHVmcmVxX2Rldi0+ZnJlcV90YWJsZSA9IGttYWxsb2Moc2l6ZW9mKCpjcHVmcmVxX2Rldi0+ZnJlcV90YWJsZSkgKgorCQkJCQkgIGNwdWZyZXFfZGV2LT5tYXhfbGV2ZWwsIEdGUF9LRVJORUwpOworCWlmICghY3B1ZnJlcV9kZXYtPmZyZXFfdGFibGUpIHsKKwkJY29vbF9kZXYgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGZyZWVfY2RldjsKKwl9CisKKwkvKiBtYXhfbGV2ZWwgaXMgYW4gaW5kZXgsIG5vdCBhIGNvdW50ZXIgKi8KKwljcHVmcmVxX2Rldi0+bWF4X2xldmVsLS07CisKIAljcHVtYXNrX2NvcHkoJmNwdWZyZXFfZGV2LT5hbGxvd2VkX2NwdXMsIGNsaXBfY3B1cyk7CiAKIAlyZXQgPSBnZXRfaWRyKCZjcHVmcmVxX2lkciwgJmNwdWZyZXFfZGV2LT5pZCk7CiAJaWYgKHJldCkgewotCQlrZnJlZShjcHVmcmVxX2Rldik7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQljb29sX2RldiA9IEVSUl9QVFIocmV0KTsKKwkJZ290byBmcmVlX3RhYmxlOwogCX0KIAogCXNucHJpbnRmKGRldl9uYW1lLCBzaXplb2YoZGV2X25hbWUpLCAidGhlcm1hbC1jcHVmcmVxLSVkIiwKQEAgLTQ3NSwyNSArMzY4LDQ0IEBACiAKIAljb29sX2RldiA9IHRoZXJtYWxfb2ZfY29vbGluZ19kZXZpY2VfcmVnaXN0ZXIobnAsIGRldl9uYW1lLCBjcHVmcmVxX2RldiwKIAkJCQkJCSAgICAgICZjcHVmcmVxX2Nvb2xpbmdfb3BzKTsKLQlpZiAoSVNfRVJSKGNvb2xfZGV2KSkgewotCQlyZWxlYXNlX2lkcigmY3B1ZnJlcV9pZHIsIGNwdWZyZXFfZGV2LT5pZCk7Ci0JCWtmcmVlKGNwdWZyZXFfZGV2KTsKLQkJcmV0dXJuIGNvb2xfZGV2OworCWlmIChJU19FUlIoY29vbF9kZXYpKQorCQlnb3RvIHJlbW92ZV9pZHI7CisKKwkvKiBGaWxsIGZyZXEtdGFibGUgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBmcmVxdWVuY2llcyAqLworCWZvciAoaSA9IDAsIGZyZXEgPSAtMTsgaSA8PSBjcHVmcmVxX2Rldi0+bWF4X2xldmVsOyBpKyspIHsKKwkJZnJlcSA9IGZpbmRfbmV4dF9tYXgodGFibGUsIGZyZXEpOworCQljcHVmcmVxX2Rldi0+ZnJlcV90YWJsZVtpXSA9IGZyZXE7CisKKwkJLyogV2FybiBmb3IgZHVwbGljYXRlIGVudHJpZXMgKi8KKwkJaWYgKCFmcmVxKQorCQkJcHJfd2FybigiJXM6IHRhYmxlIGhhcyBkdXBsaWNhdGUgZW50cmllc1xuIiwgX19mdW5jX18pOworCQllbHNlCisJCQlwcl9kZWJ1ZygiJXM6IGZyZXE6JXUgS0h6XG4iLCBfX2Z1bmNfXywgZnJlcSk7CiAJfQorCisJY3B1ZnJlcV9kZXYtPmNwdWZyZXFfdmFsID0gY3B1ZnJlcV9kZXYtPmZyZXFfdGFibGVbMF07CiAJY3B1ZnJlcV9kZXYtPmNvb2xfZGV2ID0gY29vbF9kZXY7Ci0JY3B1ZnJlcV9kZXYtPmNwdWZyZXFfc3RhdGUgPSAwOworCiAJbXV0ZXhfbG9jaygmY29vbGluZ19jcHVmcmVxX2xvY2spOwogCiAJLyogUmVnaXN0ZXIgdGhlIG5vdGlmaWVyIGZvciBmaXJzdCBjcHVmcmVxIGNvb2xpbmcgZGV2aWNlICovCi0JaWYgKGNwdWZyZXFfZGV2X2NvdW50ID09IDApCisJaWYgKGxpc3RfZW1wdHkoJmNwdWZyZXFfZGV2X2xpc3QpKQogCQljcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZ0aGVybWFsX2NwdWZyZXFfbm90aWZpZXJfYmxvY2ssCiAJCQkJCSAgQ1BVRlJFUV9QT0xJQ1lfTk9USUZJRVIpOwotCWNwdWZyZXFfZGV2X2NvdW50Kys7CiAJbGlzdF9hZGQoJmNwdWZyZXFfZGV2LT5ub2RlLCAmY3B1ZnJlcV9kZXZfbGlzdCk7CiAKIAltdXRleF91bmxvY2soJmNvb2xpbmdfY3B1ZnJlcV9sb2NrKTsKIAogCXJldHVybiBjb29sX2RldjsKKworcmVtb3ZlX2lkcjoKKwlyZWxlYXNlX2lkcigmY3B1ZnJlcV9pZHIsIGNwdWZyZXFfZGV2LT5pZCk7CitmcmVlX3RhYmxlOgorCWtmcmVlKGNwdWZyZXFfZGV2LT5mcmVxX3RhYmxlKTsKK2ZyZWVfY2RldjoKKwlrZnJlZShjcHVmcmVxX2Rldik7CisKKwlyZXR1cm4gY29vbF9kZXY7CiB9CiAKIC8qKgpAQCAtNTU0LDE2ICs0NjYsMTYgQEAKIAljcHVmcmVxX2RldiA9IGNkZXYtPmRldmRhdGE7CiAJbXV0ZXhfbG9jaygmY29vbGluZ19jcHVmcmVxX2xvY2spOwogCWxpc3RfZGVsKCZjcHVmcmVxX2Rldi0+bm9kZSk7Ci0JY3B1ZnJlcV9kZXZfY291bnQtLTsKIAogCS8qIFVucmVnaXN0ZXIgdGhlIG5vdGlmaWVyIGZvciB0aGUgbGFzdCBjcHVmcmVxIGNvb2xpbmcgZGV2aWNlICovCi0JaWYgKGNwdWZyZXFfZGV2X2NvdW50ID09IDApCisJaWYgKGxpc3RfZW1wdHkoJmNwdWZyZXFfZGV2X2xpc3QpKQogCQljcHVmcmVxX3VucmVnaXN0ZXJfbm90aWZpZXIoJnRoZXJtYWxfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKIAkJCQkJICAgIENQVUZSRVFfUE9MSUNZX05PVElGSUVSKTsKIAltdXRleF91bmxvY2soJmNvb2xpbmdfY3B1ZnJlcV9sb2NrKTsKIAogCXRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3RlcihjcHVmcmVxX2Rldi0+Y29vbF9kZXYpOwogCXJlbGVhc2VfaWRyKCZjcHVmcmVxX2lkciwgY3B1ZnJlcV9kZXYtPmlkKTsKKwlrZnJlZShjcHVmcmVxX2Rldi0+ZnJlcV90YWJsZSk7CiAJa2ZyZWUoY3B1ZnJlcV9kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1ZnJlcV9jb29saW5nX3VucmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2RiODUwMF9jcHVmcmVxX2Nvb2xpbmcuYyBiL2RyaXZlcnMvdGhlcm1hbC9kYjg1MDBfY3B1ZnJlcV9jb29saW5nLmMKaW5kZXggMDAwZDUzZS4uNjA3YjYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2RiODUwMF9jcHVmcmVxX2Nvb2xpbmcuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvZGI4NTAwX2NwdWZyZXFfY29vbGluZy5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NwdV9jb29saW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CkBAIC0yOCwxOCArMjcsMTcgQEAKIHN0YXRpYyBpbnQgZGI4NTAwX2NwdWZyZXFfY29vbGluZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2OwotCXN0cnVjdCBjcHVtYXNrIG1hc2tfdmFsOwogCi0JLyogbWFrZSBzdXJlIGNwdWZyZXEgZHJpdmVyIGhhcyBiZWVuIGluaXRpYWxpemVkICovCi0JaWYgKCFjcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUoMCkpCi0JCXJldHVybiAtRVBST0JFX0RFRkVSOwotCi0JY3B1bWFza19zZXRfY3B1KDAsICZtYXNrX3ZhbCk7Ci0JY2RldiA9IGNwdWZyZXFfY29vbGluZ19yZWdpc3RlcigmbWFza192YWwpOwotCisJY2RldiA9IGNwdWZyZXFfY29vbGluZ19yZWdpc3RlcihjcHVfcHJlc2VudF9tYXNrKTsKIAlpZiAoSVNfRVJSKGNkZXYpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb29saW5nIGRldmljZVxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGNkZXYpOworCQlpbnQgcmV0ID0gUFRSX0VSUihjZGV2KTsKKworCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkZhaWxlZCB0byByZWdpc3RlciBjb29saW5nIGRldmljZSAlZFxuIiwKKwkJCQlyZXQpOworCQkJCQorCQlyZXR1cm4gcmV0OwogCX0KIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2lteF90aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYwppbmRleCA4OGIzMmY5Li4yY2NiYzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYwpAQCAtOSw3ICs5LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdV9jb29saW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNDU0LDE1ICs0NTMsMTAgQEAKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9CiAJCW9mX21hdGNoX2RldmljZShvZl9pbXhfdGhlcm1hbF9tYXRjaCwgJnBkZXYtPmRldik7CiAJc3RydWN0IGlteF90aGVybWFsX2RhdGEgKmRhdGE7Ci0Jc3RydWN0IGNwdW1hc2sgY2xpcF9jcHVzOwogCXN0cnVjdCByZWdtYXAgKm1hcDsKIAlpbnQgbWVhc3VyZV9mcmVxOwogCWludCByZXQ7CiAKLQlpZiAoIWNwdWZyZXFfZ2V0X2N1cnJlbnRfZHJpdmVyKCkpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gY3B1ZnJlcSBkcml2ZXIhIik7Ci0JCXJldHVybiAtRVBST0JFX0RFRkVSOwotCX0KIAlkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01MTYsMTIgKzUxMCwxMyBAQAogCXJlZ21hcF93cml0ZShtYXAsIE1JU0MwICsgUkVHX1NFVCwgTUlTQzBfUkVGVE9QX1NFTEJJQVNPRkYpOwogCXJlZ21hcF93cml0ZShtYXAsIFRFTVBTRU5TRTAgKyBSRUdfU0VULCBURU1QU0VOU0UwX1BPV0VSX0RPV04pOwogCi0JY3B1bWFza19zZXRfY3B1KDAsICZjbGlwX2NwdXMpOwotCWRhdGEtPmNkZXYgPSBjcHVmcmVxX2Nvb2xpbmdfcmVnaXN0ZXIoJmNsaXBfY3B1cyk7CisJZGF0YS0+Y2RldiA9IGNwdWZyZXFfY29vbGluZ19yZWdpc3RlcihjcHVfcHJlc2VudF9tYXNrKTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNkZXYpKSB7CiAJCXJldCA9IFBUUl9FUlIoZGF0YS0+Y2Rldik7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1ZnJlcSBjb29saW5nIGRldmljZTogJWRcbiIsIHJldCk7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdWZyZXEgY29vbGluZyBkZXZpY2U6ICVkXG4iLAorCQkJCXJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC02MTMsNiArNjA4LDcgQEAKIAlyZWdtYXBfd3JpdGUobWFwLCBURU1QU0VOU0UwICsgUkVHX0NMUiwgVEVNUFNFTlNFMF9NRUFTVVJFX1RFTVApOwogCXJlZ21hcF93cml0ZShtYXAsIFRFTVBTRU5TRTAgKyBSRUdfU0VULCBURU1QU0VOU0UwX1BPV0VSX0RPV04pOwogCWRhdGEtPm1vZGUgPSBUSEVSTUFMX0RFVklDRV9ESVNBQkxFRDsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGF0YS0+dGhlcm1hbF9jbGspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MjIsNiArNjE4LDcgQEAKIAlzdHJ1Y3QgaW14X3RoZXJtYWxfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCByZWdtYXAgKm1hcCA9IGRhdGEtPnRlbXBtb247CiAKKwljbGtfcHJlcGFyZV9lbmFibGUoZGF0YS0+dGhlcm1hbF9jbGspOwogCS8qIEVuYWJsZWQgdGhlcm1hbCBzZW5zb3IgYWZ0ZXIgcmVzdW1lICovCiAJcmVnbWFwX3dyaXRlKG1hcCwgVEVNUFNFTlNFMCArIFJFR19DTFIsIFRFTVBTRU5TRTBfUE9XRVJfRE9XTik7CiAJcmVnbWFwX3dyaXRlKG1hcCwgVEVNUFNFTlNFMCArIFJFR19TRVQsIFRFTVBTRU5TRTBfTUVBU1VSRV9URU1QKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL01ha2VmaWxlCmluZGV4IGZmZTQwYmYuLmQ0NDEzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIG9iai0kKENPTkZJR19JTlQzNDBYX1RIRVJNQUwpCSs9IGludDM0MDBfdGhlcm1hbC5vCiBvYmotJChDT05GSUdfSU5UMzQwWF9USEVSTUFMKQkrPSBpbnQzNDAyX3RoZXJtYWwubwogb2JqLSQoQ09ORklHX0lOVDM0MFhfVEhFUk1BTCkJKz0gaW50MzQwM190aGVybWFsLm8KK29iai0kKENPTkZJR19JTlQzNDBYX1RIRVJNQUwpCSs9IHByb2Nlc3Nvcl90aGVybWFsX2RldmljZS5vCiBvYmotJChDT05GSUdfQUNQSV9USEVSTUFMX1JFTCkJKz0gYWNwaV90aGVybWFsX3JlbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2FjcGlfdGhlcm1hbF9yZWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvYWNwaV90aGVybWFsX3JlbC5jCmluZGV4IGU0ZTYxYjMuLjJjMmVjNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvYWNwaV90aGVybWFsX3JlbC5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvYWNwaV90aGVybWFsX3JlbC5jCkBAIC04Miw3ICs4Miw3IEBACiAJc3RydWN0IGFjcGlfYnVmZmVyIHRydF9mb3JtYXQgPSB7IHNpemVvZigiUlJOTk5OTk4iKSwgIlJSTk5OTk5OIiB9OwogCiAJaWYgKCFhY3BpX2hhc19tZXRob2QoaGFuZGxlLCAiX1RSVCIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfVFJUIiwgTlVMTCwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQpAQCAtMTE5LDE1ICsxMTksMTEgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9kZXZpY2UodHJ0LT5zb3VyY2UsICZhZGV2KTsKLQkJaWYgKCFyZXN1bHQpCi0JCQlhY3BpX2NyZWF0ZV9wbGF0Zm9ybV9kZXZpY2UoYWRldik7Ci0JCWVsc2UKKwkJaWYgKHJlc3VsdCkKIAkJCXByX3dhcm4oIkZhaWxlZCB0byBnZXQgc291cmNlIEFDUEkgZGV2aWNlXG4iKTsKIAogCQlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKHRydC0+dGFyZ2V0LCAmYWRldik7Ci0JCWlmICghcmVzdWx0KQotCQkJYWNwaV9jcmVhdGVfcGxhdGZvcm1fZGV2aWNlKGFkZXYpOwotCQllbHNlCisJCWlmIChyZXN1bHQpCiAJCQlwcl93YXJuKCJGYWlsZWQgdG8gZ2V0IHRhcmdldCBBQ1BJIGRldmljZVxuIik7CiAJfQogCkBAIC0xNjcsNyArMTYzLDcgQEAKIAkJc2l6ZW9mKCJSUk5OTk5OTk5OTk5OIiksICJSUk5OTk5OTk5OTk5OIiB9OwogCiAJaWYgKCFhY3BpX2hhc19tZXRob2QoaGFuZGxlLCAiX0FSVCIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfQVJUIiwgTlVMTCwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQpAQCAtMjA2LDE2ICsyMDIsMTIgQEAKIAogCQlpZiAoYXJ0LT5zb3VyY2UpIHsKIAkJCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9kZXZpY2UoYXJ0LT5zb3VyY2UsICZhZGV2KTsKLQkJCWlmICghcmVzdWx0KQotCQkJCWFjcGlfY3JlYXRlX3BsYXRmb3JtX2RldmljZShhZGV2KTsKLQkJCWVsc2UKKwkJCWlmIChyZXN1bHQpCiAJCQkJcHJfd2FybigiRmFpbGVkIHRvIGdldCBzb3VyY2UgQUNQSSBkZXZpY2VcbiIpOwogCQl9CiAJCWlmIChhcnQtPnRhcmdldCkgewogCQkJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X2RldmljZShhcnQtPnRhcmdldCwgJmFkZXYpOwotCQkJaWYgKCFyZXN1bHQpCi0JCQkJYWNwaV9jcmVhdGVfcGxhdGZvcm1fZGV2aWNlKGFkZXYpOwotCQkJZWxzZQorCQkJaWYgKHJlc3VsdCkKIAkJCQlwcl93YXJuKCJGYWlsZWQgdG8gZ2V0IHNvdXJjZSBBQ1BJIGRldmljZVxuIik7CiAJCX0KIAl9CkBAIC0zMjEsOCArMzEzLDggQEAKIAl1bnNpZ25lZCBsb25nIGxlbmd0aCA9IDA7CiAJaW50IGNvdW50ID0gMDsKIAljaGFyIF9fdXNlciAqYXJnID0gKHZvaWQgX191c2VyICopX19hcmc7Ci0Jc3RydWN0IHRydCAqdHJ0czsKLQlzdHJ1Y3QgYXJ0ICphcnRzOworCXN0cnVjdCB0cnQgKnRydHMgPSBOVUxMOworCXN0cnVjdCBhcnQgKmFydHMgPSBOVUxMOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEFDUElfVEhFUk1BTF9HRVRfVFJUX0NPVU5UOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAwX3RoZXJtYWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvaW50MzQwMF90aGVybWFsLmMKaW5kZXggZGNiMzA2ZS4uNjVhOThhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAwX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2ludDM0MDBfdGhlcm1hbC5jCkBAIC0zMzUsNyArMzM1LDYgQEAKIAkucmVtb3ZlID0gaW50MzQwMF90aGVybWFsX3JlbW92ZSwKIAkuZHJpdmVyID0gewogCQkgICAubmFtZSA9ICJpbnQzNDAwIHRoZXJtYWwiLAotCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJICAgLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUihpbnQzNDAwX3RoZXJtYWxfbWF0Y2gpLAogCQkgICB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvaW50MzQwMl90aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2ludDM0MDJfdGhlcm1hbC5jCmluZGV4IGE1ZDA4YzEuLmM1Y2JjM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvaW50MzQwMl90aGVybWFsLmMKKysrIGIvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAyX3RoZXJtYWwuYwpAQCAtMjMxLDcgKzIzMSw2IEBACiAJLnJlbW92ZSA9IGludDM0MDJfdGhlcm1hbF9yZW1vdmUsCiAJLmRyaXZlciA9IHsKIAkJICAgLm5hbWUgPSAiaW50MzQwMiB0aGVybWFsIiwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAgIC5hY3BpX21hdGNoX3RhYmxlID0gaW50MzQwMl90aGVybWFsX21hdGNoLAogCQkgICB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvaW50MzQwM190aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2ludDM0MDNfdGhlcm1hbC5jCmluZGV4IDFiZmE2YTYuLjBmYWY1MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvaW50MzQwM190aGVybWFsLmMKKysrIGIvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAzX3RoZXJtYWwuYwpAQCAtMzAxLDYgKzMwMSw4IEBACiB7CiAJc3RydWN0IGludDM0MDNfc2Vuc29yICpvYmogPSBwcml2LT5wcml2OwogCisJYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIocHJpdi0+YWRldi0+aGFuZGxlLAorCQkJCSAgIEFDUElfREVWSUNFX05PVElGWSwgaW50MzQwM19ub3RpZnkpOwogCXRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3RlcihvYmotPnR6b25lKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM2OSw2ICszNzEsNyBAQAogCXAgPSBidWYucG9pbnRlcjsKIAlpZiAoIXAgfHwgKHAtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgUFBTUyBkYXRhXG4iKTsKKwkJa2ZyZWUoYnVmLnBvaW50ZXIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTM4MSw2ICszODQsNyBAQAogCiAJcHJpdi0+cHJpdiA9IG9iajsKIAorCWtmcmVlKGJ1Zi5wb2ludGVyKTsKIAkvKiBUT0RPOiBhZGQgQUNQSSBub3RpZmljYXRpb24gc3VwcG9ydCAqLwogCiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvcHJvY2Vzc29yX3RoZXJtYWxfZGV2aWNlLmMgYi9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL3Byb2Nlc3Nvcl90aGVybWFsX2RldmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTVkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL3Byb2Nlc3Nvcl90aGVybWFsX2RldmljZS5jCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogcHJvY2Vzc29yX3RoZXJtYWxfZGV2aWNlLmMKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisKKy8qIEJyb2Fkd2VsbC1VL0hTQiB0aGVybWFsIHJlcG9ydGluZyBkZXZpY2UgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9DX0JEV19USEVSTUFMCTB4MTYwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST0NfSFNCX1RIRVJNQUwJMHgwQTAzCisKKy8qIEJyYXN3ZWxsIHRoZXJtYWwgcmVwb3J0aW5nIGRldmljZSAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST0NfQlNXX1RIRVJNQUwJMHgyMkRDCisKK3N0cnVjdCBwb3dlcl9jb25maWcgeworCXUzMglpbmRleDsKKwl1MzIJbWluX3V3OworCXUzMgltYXhfdXc7CisJdTMyCXRtaW5fdXM7CisJdTMyCXRtYXhfdXM7CisJdTMyCXN0ZXBfdXc7Cit9OworCitzdHJ1Y3QgcHJvY190aGVybWFsX2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldjsKKwlzdHJ1Y3QgcG93ZXJfY29uZmlnIHBvd2VyX2xpbWl0c1syXTsKK307CisKK2VudW0gcHJvY190aGVybWFsX2VtdW1fbW9kZV90eXBlIHsKKwlQUk9DX1RIRVJNQUxfTk9ORSwKKwlQUk9DX1RIRVJNQUxfUENJLAorCVBST0NfVEhFUk1BTF9QTEFURk9STV9ERVYKK307CisKKy8qCisgKiBXZSBjYW4gaGF2ZSBvbmx5IG9uZSB0eXBlIG9mIGVudW1lcmF0aW9uLCBQQ0kgb3IgUGxhdGZvcm0sCisgKiBub3QgYm90aC4gU28gd2UgZG9uJ3QgbmVlZCBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhLgorICovCitzdGF0aWMgZW51bSBwcm9jX3RoZXJtYWxfZW11bV9tb2RlX3R5cGUgcHJvY190aGVybWFsX2VtdW1fbW9kZSA9CisJCQkJCQkJUFJPQ19USEVSTUFMX05PTkU7CisKKyNkZWZpbmUgUE9XRVJfTElNSVRfU0hPVyhpbmRleCwgc3VmZml4KSBcCitzdGF0aWMgc3NpemVfdCBwb3dlcl9saW1pdF8jI2luZGV4IyNfIyNzdWZmaXgjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAorCQkJCQljaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OyBcCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsgXAorCXN0cnVjdCBwcm9jX3RoZXJtYWxfZGV2aWNlICpwcm9jX2RldjsgXAorXAorCWlmIChwcm9jX3RoZXJtYWxfZW11bV9tb2RlID09IFBST0NfVEhFUk1BTF9QTEFURk9STV9ERVYpIHsgXAorCQlwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7IFwKKwkJcHJvY19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsgXAorCX0gZWxzZSB7IFwKKwkJcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsgXAorCQlwcm9jX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsgXAorCX0gXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIixcCisJKHVuc2lnbmVkIGxvbmcpcHJvY19kZXYtPnBvd2VyX2xpbWl0c1tpbmRleF0uc3VmZml4ICogMTAwMCk7IFwKK30KKworUE9XRVJfTElNSVRfU0hPVygwLCBtaW5fdXcpCitQT1dFUl9MSU1JVF9TSE9XKDAsIG1heF91dykKK1BPV0VSX0xJTUlUX1NIT1coMCwgc3RlcF91dykKK1BPV0VSX0xJTUlUX1NIT1coMCwgdG1pbl91cykKK1BPV0VSX0xJTUlUX1NIT1coMCwgdG1heF91cykKKworUE9XRVJfTElNSVRfU0hPVygxLCBtaW5fdXcpCitQT1dFUl9MSU1JVF9TSE9XKDEsIG1heF91dykKK1BPV0VSX0xJTUlUX1NIT1coMSwgc3RlcF91dykKK1BPV0VSX0xJTUlUX1NIT1coMSwgdG1pbl91cykKK1BPV0VSX0xJTUlUX1NIT1coMSwgdG1heF91cykKKworc3RhdGljIERFVklDRV9BVFRSX1JPKHBvd2VyX2xpbWl0XzBfbWluX3V3KTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwb3dlcl9saW1pdF8wX21heF91dyk7CitzdGF0aWMgREVWSUNFX0FUVFJfUk8ocG93ZXJfbGltaXRfMF9zdGVwX3V3KTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwb3dlcl9saW1pdF8wX3RtaW5fdXMpOworc3RhdGljIERFVklDRV9BVFRSX1JPKHBvd2VyX2xpbWl0XzBfdG1heF91cyk7CisKK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwb3dlcl9saW1pdF8xX21pbl91dyk7CitzdGF0aWMgREVWSUNFX0FUVFJfUk8ocG93ZXJfbGltaXRfMV9tYXhfdXcpOworc3RhdGljIERFVklDRV9BVFRSX1JPKHBvd2VyX2xpbWl0XzFfc3RlcF91dyk7CitzdGF0aWMgREVWSUNFX0FUVFJfUk8ocG93ZXJfbGltaXRfMV90bWluX3VzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwb3dlcl9saW1pdF8xX3RtYXhfdXMpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG93ZXJfbGltaXRfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfcG93ZXJfbGltaXRfMF9taW5fdXcuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfbGltaXRfMV9taW5fdXcuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfbGltaXRfMF9tYXhfdXcuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfbGltaXRfMV9tYXhfdXcuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfbGltaXRfMF9zdGVwX3V3LmF0dHIsCisJJmRldl9hdHRyX3Bvd2VyX2xpbWl0XzFfc3RlcF91dy5hdHRyLAorCSZkZXZfYXR0cl9wb3dlcl9saW1pdF8wX3RtaW5fdXMuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfbGltaXRfMV90bWluX3VzLmF0dHIsCisJJmRldl9hdHRyX3Bvd2VyX2xpbWl0XzBfdG1heF91cy5hdHRyLAorCSZkZXZfYXR0cl9wb3dlcl9saW1pdF8xX3RtYXhfdXMuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwb3dlcl9saW1pdF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gcG93ZXJfbGltaXRfYXR0cnMsCisJLm5hbWUgPSAicG93ZXJfbGltaXRzIgorfTsKKworc3RhdGljIGludCBwcm9jX3RoZXJtYWxfYWRkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgcHJvY190aGVybWFsX2RldmljZSAqKnByaXYpCit7CisJc3RydWN0IHByb2NfdGhlcm1hbF9kZXZpY2UgKnByb2NfcHJpdjsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXY7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWYgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisJdW5pb24gYWNwaV9vYmplY3QgKmVsZW1lbnRzLCAqcHBjYzsKKwl1bmlvbiBhY3BpX29iamVjdCAqcDsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJYWRldiA9IEFDUElfQ09NUEFOSU9OKGRldik7CisJaWYgKCFhZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFkZXYtPmhhbmRsZSwgIlBQQ0MiLCBOVUxMLCAmYnVmKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOworCisJcCA9IGJ1Zi5wb2ludGVyOworCWlmICghcCB8fCAocC0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIFBQQ0MgZGF0YVxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZnJlZV9idWZmZXI7CisJfQorCWlmICghcC0+cGFja2FnZS5jb3VudCkgeworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgUFBDQyBwYWNrYWdlIHNpemVcbiIpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZyZWVfYnVmZmVyOworCX0KKworCXByb2NfcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJvY19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcm9jX3ByaXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2J1ZmZlcjsKKwl9CisKKwlwcm9jX3ByaXYtPmRldiA9IGRldjsKKwlwcm9jX3ByaXYtPmFkZXYgPSBhZGV2OworCisJZm9yIChpID0gMDsgaSA8IG1pbigoaW50KXAtPnBhY2thZ2UuY291bnQgLSAxLCAyKTsgKytpKSB7CisJCWVsZW1lbnRzID0gJihwLT5wYWNrYWdlLmVsZW1lbnRzW2krMV0pOworCQlpZiAoZWxlbWVudHMtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UgfHwKKwkJICAgIGVsZW1lbnRzLT5wYWNrYWdlLmNvdW50ICE9IDYpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGZyZWVfYnVmZmVyOworCQl9CisJCXBwY2MgPSBlbGVtZW50cy0+cGFja2FnZS5lbGVtZW50czsKKwkJcHJvY19wcml2LT5wb3dlcl9saW1pdHNbaV0uaW5kZXggPSBwcGNjWzBdLmludGVnZXIudmFsdWU7CisJCXByb2NfcHJpdi0+cG93ZXJfbGltaXRzW2ldLm1pbl91dyA9IHBwY2NbMV0uaW50ZWdlci52YWx1ZTsKKwkJcHJvY19wcml2LT5wb3dlcl9saW1pdHNbaV0ubWF4X3V3ID0gcHBjY1syXS5pbnRlZ2VyLnZhbHVlOworCQlwcm9jX3ByaXYtPnBvd2VyX2xpbWl0c1tpXS50bWluX3VzID0gcHBjY1szXS5pbnRlZ2VyLnZhbHVlOworCQlwcm9jX3ByaXYtPnBvd2VyX2xpbWl0c1tpXS50bWF4X3VzID0gcHBjY1s0XS5pbnRlZ2VyLnZhbHVlOworCQlwcm9jX3ByaXYtPnBvd2VyX2xpbWl0c1tpXS5zdGVwX3V3ID0gcHBjY1s1XS5pbnRlZ2VyLnZhbHVlOworCX0KKworCSpwcml2ID0gcHJvY19wcml2OworCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICZwb3dlcl9saW1pdF9hdHRyaWJ1dGVfZ3JvdXApOworCitmcmVlX2J1ZmZlcjoKKwlrZnJlZShidWYucG9pbnRlcik7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHByb2NfdGhlcm1hbF9yZW1vdmUoc3RydWN0IHByb2NfdGhlcm1hbF9kZXZpY2UgKnByb2NfcHJpdikKK3sKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnByb2NfcHJpdi0+ZGV2LT5rb2JqLAorCQkJICAgJnBvd2VyX2xpbWl0X2F0dHJpYnV0ZV9ncm91cCk7Cit9CisKK3N0YXRpYyBpbnQgaW50MzQwMV9hZGQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcHJvY190aGVybWFsX2RldmljZSAqcHJvY19wcml2OworCWludCByZXQ7CisKKwlpZiAocHJvY190aGVybWFsX2VtdW1fbW9kZSA9PSBQUk9DX1RIRVJNQUxfUENJKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yOiBlbnVtZXJhdGVkIGFzIFBDSSBkZXZcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBwcm9jX3RoZXJtYWxfYWRkKCZwZGV2LT5kZXYsICZwcm9jX3ByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcm9jX3ByaXYpOworCXByb2NfdGhlcm1hbF9lbXVtX21vZGUgPSBQUk9DX1RIRVJNQUxfUExBVEZPUk1fREVWOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50MzQwMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlwcm9jX3RoZXJtYWxfcmVtb3ZlKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50ICBwcm9jX3RoZXJtYWxfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICp1bnVzZWQpCit7CisJc3RydWN0IHByb2NfdGhlcm1hbF9kZXZpY2UgKnByb2NfcHJpdjsKKwlpbnQgcmV0OworCisJaWYgKHByb2NfdGhlcm1hbF9lbXVtX21vZGUgPT0gUFJPQ19USEVSTUFMX1BMQVRGT1JNX0RFVikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvcjogZW51bWVyYXRlZCBhcyBwbGF0Zm9ybSBkZXZcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvcjogY291bGQgbm90IGVuYWJsZSBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHByb2NfdGhlcm1hbF9hZGQoJnBkZXYtPmRldiwgJnByb2NfcHJpdik7CisJaWYgKHJldCkgeworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHByb2NfcHJpdik7CisJcHJvY190aGVybWFsX2VtdW1fbW9kZSA9IFBST0NfVEhFUk1BTF9QQ0k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgIHByb2NfdGhlcm1hbF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXByb2NfdGhlcm1hbF9yZW1vdmUocGNpX2dldF9kcnZkYXRhKHBkZXYpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwcm9jX3RoZXJtYWxfcGNpX2lkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX1BST0NfQkRXX1RIRVJNQUwpfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9QUk9DX0hTQl9USEVSTUFMKX0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfUFJPQ19CU1dfVEhFUk1BTCl9LAorCXsgMCwgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwcm9jX3RoZXJtYWxfcGNpX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwcm9jX3RoZXJtYWxfcGNpX2RyaXZlciA9IHsKKwkubmFtZQkJPSAicHJvY190aGVybWFsIiwKKwkucHJvYmUJCT0gcHJvY190aGVybWFsX3BjaV9wcm9iZSwKKwkucmVtb3ZlCQk9IHByb2NfdGhlcm1hbF9wY2lfcmVtb3ZlLAorCS5pZF90YWJsZQk9IHByb2NfdGhlcm1hbF9wY2lfaWRzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBpbnQzNDAxX2RldmljZV9pZHNbXSA9IHsKKwl7IklOVDM0MDEiLCAwfSwKKwl7IiIsIDB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgaW50MzQwMV9kZXZpY2VfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW50MzQwMV9kcml2ZXIgPSB7CisJLnByb2JlID0gaW50MzQwMV9hZGQsCisJLnJlbW92ZSA9IGludDM0MDFfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImludDM0MDEgdGhlcm1hbCIsCisJCS5hY3BpX21hdGNoX3RhYmxlID0gaW50MzQwMV9kZXZpY2VfaWRzLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX3RoZXJtYWxfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmludDM0MDFfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcHJvY190aGVybWFsX3BjaV9kcml2ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHByb2NfdGhlcm1hbF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmludDM0MDFfZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnByb2NfdGhlcm1hbF9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocHJvY190aGVybWFsX2luaXQpOworbW9kdWxlX2V4aXQocHJvY190aGVybWFsX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTcmluaXZhcyBQYW5kcnV2YWRhIDxzcmluaXZhcy5wYW5kcnV2YWRhQGxpbnV4LmludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUHJvY2Vzc29yIFRoZXJtYWwgUmVwb3J0aW5nIERldmljZSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9pbnRlbF9wb3dlcmNsYW1wLmMgYi9kcml2ZXJzL3RoZXJtYWwvaW50ZWxfcG93ZXJjbGFtcC5jCmluZGV4IGU5OGI0MjQuLjZjZWViZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9pbnRlbF9wb3dlcmNsYW1wLmMKKysrIGIvZHJpdmVycy90aGVybWFsL2ludGVsX3Bvd2VyY2xhbXAuYwpAQCAtNjg4LDYgKzY4OCw3IEBACiAJeyBYODZfVkVORE9SX0lOVEVMLCA2LCAweDQ1fSwKIAl7IFg4Nl9WRU5ET1JfSU5URUwsIDYsIDB4NDZ9LAogCXsgWDg2X1ZFTkRPUl9JTlRFTCwgNiwgMHg0Y30sCisJeyBYODZfVkVORE9SX0lOVEVMLCA2LCAweDU2fSwKIAl7fQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCBpbnRlbF9wb3dlcmNsYW1wX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvb2YtdGhlcm1hbC5jIGIvZHJpdmVycy90aGVybWFsL29mLXRoZXJtYWwuYwppbmRleCBlMTQ1YjY2Li5kNzE3ZjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvb2YtdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9vZi10aGVybWFsLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogICoKICAqIFJldHVybjogcG9pbnRlciB0byB0cmlwIHBvaW50cyB0YWJsZSwgTlVMTCBvdGhlcndpc2UKICAqLwotY29uc3Qgc3RydWN0IHRoZXJtYWxfdHJpcCAqIGNvbnN0Citjb25zdCBzdHJ1Y3QgdGhlcm1hbF90cmlwICoKIG9mX3RoZXJtYWxfZ2V0X3RyaXBfcG9pbnRzKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eikKIHsKIAlzdHJ1Y3QgX190aGVybWFsX3pvbmUgKmRhdGEgPSB0ei0+ZGV2ZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9yY2FyX3RoZXJtYWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9yY2FyX3RoZXJtYWwuYwppbmRleCA4ODAzZTY5Li4yNTgwYTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvcmNhcl90aGVybWFsLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3JjYXJfdGhlcm1hbC5jCkBAIC02Myw3ICs2Myw3IEBACiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWludCBpZDsKLQlpbnQgY3RlbXA7CisJdTMyIGN0ZW1wOwogfTsKIAogI2RlZmluZSByY2FyX3RoZXJtYWxfZm9yX2VhY2hfcHJpdihwb3MsIGNvbW1vbikJXApAQCAtMTQ1LDcgKzE0NSw3IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcmNhcl9wcml2X3RvX2Rldihwcml2KTsKIAlpbnQgaTsKLQlpbnQgY3RlbXAsIG9sZCwgbmV3OworCXUzMiBjdGVtcCwgb2xkLCBuZXc7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKQEAgLTM3Miw2ICszNzIsNyBAQAogCWludCBpOwogCWludCByZXQgPSAtRU5PREVWOwogCWludCBpZGxlID0gSURMRV9JTlRFUlZBTDsKKwl1MzIgZW5yX2JpdHMgPSAwOwogCiAJY29tbW9uID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjb21tb24pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbW1vbikKQEAgLTM5MCw3ICszOTEsNyBAQAogCiAJCS8qCiAJCSAqIHBsYXRmb3JtIGhhcyBJUlEgc3VwcG9ydC4KLQkJICogVGhlbiwgZHJpZXIgdXNlIGNvbW1vbiByZWdpc3RlcgorCQkgKiBUaGVuLCBkcml2ZXIgdXNlcyBjb21tb24gcmVnaXN0ZXJzCiAJCSAqLwogCiAJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEtPnN0YXJ0LCByY2FyX3RoZXJtYWxfaXJxLCAwLApAQCAtNDA4LDkgKzQwOSw2IEBACiAJCWlmIChJU19FUlIoY29tbW9uLT5iYXNlKSkKIAkJCXJldHVybiBQVFJfRVJSKGNvbW1vbi0+YmFzZSk7CiAKLQkJLyogZW5hYmxlIHRlbXBlcmF0dXJlIGNvbXBhcmF0aW9uICovCi0JCXJjYXJfdGhlcm1hbF9jb21tb25fd3JpdGUoY29tbW9uLCBFTlIsIDB4MDAwMzAzMDMpOwotCiAJCWlkbGUgPSAwOyAvKiBwb2xsaW5nIGRlbGF5IGlzIG5vdCBuZWVkZWQgKi8KIAl9CiAKQEAgLTQ1Miw4ICs0NTAsMTUgQEAKIAkJCXJjYXJfdGhlcm1hbF9pcnFfZW5hYmxlKHByaXYpOwogCiAJCWxpc3RfbW92ZV90YWlsKCZwcml2LT5saXN0LCAmY29tbW9uLT5oZWFkKTsKKworCQkvKiB1cGRhdGUgRU5SIGJpdHMgKi8KKwkJZW5yX2JpdHMgfD0gMyA8PCAoaSAqIDgpOwogCX0KIAorCS8qIGVuYWJsZSB0ZW1wZXJhdHVyZSBjb21wYXJhdGlvbiAqLworCWlmIChpcnEpCisJCXJjYXJfdGhlcm1hbF9jb21tb25fd3JpdGUoY29tbW9uLCBFTlIsIGVucl9iaXRzKTsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvbW1vbik7CiAKIAlkZXZfaW5mbyhkZXYsICIlZCBzZW5zb3IgcHJvYmVkXG4iLCBpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9yb2NrY2hpcF90aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvcm9ja2NoaXBfdGhlcm1hbC5jCmluZGV4IDFiY2RkZmMuLjljNmNlNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9yb2NrY2hpcF90aGVybWFsLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3JvY2tjaGlwX3RoZXJtYWwuYwpAQCAtNjc3LDcgKzY3Nyw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByb2NrY2hpcF90aGVybWFsX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJyb2NrY2hpcC10aGVybWFsIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCS5wbSA9ICZyb2NrY2hpcF90aGVybWFsX3BtX29wcywKIAkJLm9mX21hdGNoX3RhYmxlID0gb2Zfcm9ja2NoaXBfdGhlcm1hbF9tYXRjaCwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvS2NvbmZpZyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL0tjb25maWcKaW5kZXggZjc2MDM4OS4uYzQzMzA2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIEVYWU5PU19USEVSTUFMCiAJdHJpc3RhdGUgIkV4eW5vcyB0aGVybWFsIG1hbmFnZW1lbnQgdW5pdCBkcml2ZXIiCi0JZGVwZW5kcyBvbiBBUkNIX0hBU19CQU5ER0FQICYmIE9GCisJZGVwZW5kcyBvbiBPRgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVE1VIChUaGVybWFsIE1hbmFnZW1lbnQKIAkgIFVuaXQpIGRyaXZlciBmb3IgU0FNU1VORyBFWFlOT1Mgc2VyaWVzIG9mIFNvQ3MuIFRoaXMgZHJpdmVyIGluaXRpYWxpc2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdGhlcm1hbF9jb21tb24uYyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190aGVybWFsX2NvbW1vbi5jCmluZGV4IGI2YmU1NzIuLjZkYzM4MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190aGVybWFsX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190aGVybWFsX2NvbW1vbi5jCkBAIC0zNDcsNyArMzQ3LDYgQEAKIGludCBleHlub3NfcmVnaXN0ZXJfdGhlcm1hbChzdHJ1Y3QgdGhlcm1hbF9zZW5zb3JfY29uZiAqc2Vuc29yX2NvbmYpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgY3B1bWFzayBtYXNrX3ZhbDsKIAlzdHJ1Y3QgZXh5bm9zX3RoZXJtYWxfem9uZSAqdGhfem9uZTsKIAogCWlmICghc2Vuc29yX2NvbmYgfHwgIXNlbnNvcl9jb25mLT5yZWFkX3RlbXBlcmF0dXJlKSB7CkBAIC0zNjcsMTMgKzM2NiwxNCBAQAogCSAqCSBzZW5zb3IKIAkgKi8KIAlpZiAoc2Vuc29yX2NvbmYtPmNvb2xpbmdfZGF0YS5mcmVxX2NsaXBfY291bnQgPiAwKSB7Ci0JCWNwdW1hc2tfc2V0X2NwdSgwLCAmbWFza192YWwpOwogCQl0aF96b25lLT5jb29sX2Rldlt0aF96b25lLT5jb29sX2Rldl9zaXplXSA9Ci0JCQkJCWNwdWZyZXFfY29vbGluZ19yZWdpc3RlcigmbWFza192YWwpOworCQkJCWNwdWZyZXFfY29vbGluZ19yZWdpc3RlcihjcHVfcHJlc2VudF9tYXNrKTsKIAkJaWYgKElTX0VSUih0aF96b25lLT5jb29sX2Rldlt0aF96b25lLT5jb29sX2Rldl9zaXplXSkpIHsKLQkJCWRldl9lcnIoc2Vuc29yX2NvbmYtPmRldiwKLQkJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGNwdWZyZXEgY29vbGluZyBkZXZpY2VcbiIpOwotCQkJcmV0ID0gLUVJTlZBTDsKKwkJCXJldCA9IFBUUl9FUlIodGhfem9uZS0+Y29vbF9kZXZbdGhfem9uZS0+Y29vbF9kZXZfc2l6ZV0pOworCQkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJCWRldl9lcnIoc2Vuc29yX2NvbmYtPmRldiwKKwkJCQkJIkZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxIGNvb2xpbmcgZGV2aWNlOiAlZFxuIiwKKwkJCQkJcmV0KTsKIAkJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CiAJCX0KIAkJdGhfem9uZS0+Y29vbF9kZXZfc2l6ZSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdS5jIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdS5jCmluZGV4IGQ0NGQ5MWQuLmQyZjFlNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdG11LmMKQEAgLTkyNyw3ICs5MjcsMTAgQEAKIAkvKiBSZWdpc3RlciB0aGUgc2Vuc29yIHdpdGggdGhlcm1hbCBtYW5hZ2VtZW50IGludGVyZmFjZSAqLwogCXJldCA9IGV4eW5vc19yZWdpc3Rlcl90aGVybWFsKHNlbnNvcl9jb25mKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciB0aGVybWFsIGludGVyZmFjZVxuIik7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIHRoZXJtYWwgaW50ZXJmYWNlOiAlZFxuIiwKKwkJCQlyZXQpOwogCQlnb3RvIGVycl9jbGs7CiAJfQogCWRhdGEtPnJlZ19jb25mID0gc2Vuc29yX2NvbmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9jb3JlLmMgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9jb3JlLmMKaW5kZXggODRmZGYwNy4uODdlMGIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuYwpAQCAtOTMwLDcgKzkzMCw3IEBACiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnBvczE7CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKnBvczI7CiAJdW5zaWduZWQgbG9uZyBtYXhfc3RhdGU7Ci0JaW50IHJlc3VsdDsKKwlpbnQgcmVzdWx0LCByZXQ7CiAKIAlpZiAodHJpcCA+PSB0ei0+dHJpcHMgfHwgKHRyaXAgPCAwICYmIHRyaXAgIT0gVEhFUk1BTF9UUklQU19OT05FKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05NDcsNyArOTQ3LDkgQEAKIAlpZiAodHogIT0gcG9zMSB8fCBjZGV2ICE9IHBvczIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY2Rldi0+b3BzLT5nZXRfbWF4X3N0YXRlKGNkZXYsICZtYXhfc3RhdGUpOworCXJldCA9IGNkZXYtPm9wcy0+Z2V0X21heF9zdGF0ZShjZGV2LCAmbWF4X3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyogbG93ZXIgZGVmYXVsdCAwLCB1cHBlciBkZWZhdWx0IG1heF9zdGF0ZSAqLwogCWxvd2VyID0gbG93ZXIgPT0gVEhFUk1BTF9OT19MSU1JVCA/IDAgOiBsb3dlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuaCBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuaAppbmRleCA5MDgzZTc1Li4wNTMxYzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9jb3JlLmgKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfY29yZS5oCkBAIC05MSw3ICs5MSw3IEBACiB2b2lkIG9mX3RoZXJtYWxfZGVzdHJveV96b25lcyh2b2lkKTsKIGludCBvZl90aGVybWFsX2dldF9udHJpcHMoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKik7CiBib29sIG9mX3RoZXJtYWxfaXNfdHJpcF92YWxpZChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBpbnQpOwotY29uc3Qgc3RydWN0IHRoZXJtYWxfdHJpcCAqIGNvbnN0Citjb25zdCBzdHJ1Y3QgdGhlcm1hbF90cmlwICoKIG9mX3RoZXJtYWxfZ2V0X3RyaXBfcG9pbnRzKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICopOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG9mX3BhcnNlX3RoZXJtYWxfem9uZXModm9pZCkgeyByZXR1cm4gMDsgfQpAQCAtMTA1LDcgKzEwNSw3IEBACiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCB0aGVybWFsX3RyaXAgKiBjb25zdAorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgdGhlcm1hbF90cmlwICoKIG9mX3RoZXJtYWxfZ2V0X3RyaXBfcG9pbnRzKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eikKIHsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC90aS1zb2MtdGhlcm1hbC90aS10aGVybWFsLWNvbW1vbi5jIGIvZHJpdmVycy90aGVybWFsL3RpLXNvYy10aGVybWFsL3RpLXRoZXJtYWwtY29tbW9uLmMKaW5kZXggNWZkMDM4Ni4uM2ZiMDU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3RpLXNvYy10aGVybWFsL3RpLXRoZXJtYWwtY29tbW9uLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RpLXNvYy10aGVybWFsL3RpLXRoZXJtYWwtY29tbW9uLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC90aGVybWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHVfY29vbGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CkBAIC00MDcsMTcgKzQwNiwxNyBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWNwdWZyZXFfZ2V0X2N1cnJlbnRfZHJpdmVyKCkpIHsKLQkJZGV2X2RiZyhiZ3AtPmRldiwgIm5vIGNwdWZyZXEgZHJpdmVyIHlldFxuIik7Ci0JCXJldHVybiAtRVBST0JFX0RFRkVSOwotCX0KLQogCS8qIFJlZ2lzdGVyIGNvb2xpbmcgZGV2aWNlICovCiAJZGF0YS0+Y29vbF9kZXYgPSBjcHVmcmVxX2Nvb2xpbmdfcmVnaXN0ZXIoY3B1X3ByZXNlbnRfbWFzayk7CiAJaWYgKElTX0VSUihkYXRhLT5jb29sX2RldikpIHsKLQkJZGV2X2VycihiZ3AtPmRldiwKLQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgY3B1ZnJlcSBjb29saW5nIGRldmljZVxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGRhdGEtPmNvb2xfZGV2KTsKKwkJaW50IHJldCA9IFBUUl9FUlIoZGF0YS0+Y29vbF9kZXYpOworCisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoYmdwLT5kZXYsCisJCQkJIkZhaWxlZCB0byByZWdpc3RlciBjcHUgY29vbGluZyBkZXZpY2UgJWRcbiIsCisJCQkJcmV0KTsKKworCQlyZXR1cm4gcmV0OwogCX0KIAl0aV9iYW5kZ2FwX3NldF9zZW5zb3JfZGF0YShiZ3AsIGlkLCBkYXRhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl90dHkuYyBiL2RyaXZlcnMvdHR5L25fdHR5LmMKaW5kZXggZDJiNDk2Ny4uNGRkZmE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl90dHkuYworKysgYi9kcml2ZXJzL3R0eS9uX3R0eS5jCkBAIC0yMzk5LDE3ICsyMzk5LDEyIEBACiAKIAlwb2xsX3dhaXQoZmlsZSwgJnR0eS0+cmVhZF93YWl0LCB3YWl0KTsKIAlwb2xsX3dhaXQoZmlsZSwgJnR0eS0+d3JpdGVfd2FpdCwgd2FpdCk7Ci0JaWYgKHRlc3RfYml0KFRUWV9PVEhFUl9DTE9TRUQsICZ0dHktPmZsYWdzKSkKLQkJbWFzayB8PSBQT0xMSFVQOwogCWlmIChpbnB1dF9hdmFpbGFibGVfcCh0dHksIDEpKQogCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0JZWxzZSBpZiAobWFzayAmIFBPTExIVVApIHsKLQkJdHR5X2ZsdXNoX3RvX2xkaXNjKHR0eSk7Ci0JCWlmIChpbnB1dF9hdmFpbGFibGVfcCh0dHksIDEpKQotCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCX0KIAlpZiAodHR5LT5wYWNrZXQgJiYgdHR5LT5saW5rLT5jdHJsX3N0YXR1cykKIAkJbWFzayB8PSBQT0xMUFJJIHwgUE9MTElOIHwgUE9MTFJETk9STTsKKwlpZiAodGVzdF9iaXQoVFRZX09USEVSX0NMT1NFRCwgJnR0eS0+ZmxhZ3MpKQorCQltYXNrIHw9IFBPTExIVVA7CiAJaWYgKHR0eV9odW5nX3VwX3AoZmlsZSkpCiAJCW1hc2sgfD0gUE9MTEhVUDsKIAlpZiAoIShtYXNrICYgKFBPTExIVVAgfCBQT0xMSU4gfCBQT0xMUkROT1JNKSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfcGNpLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX3BjaS5jCmluZGV4IDMxZmVlYjIuLmQxZjhkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfcGNpLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9wY2kuYwpAQCAtMTgxNSw3ICsxODE1LDcgQEAKIH0KIAogc3RhdGljIGludAotcGNpX3djaF9jaDM4Ml9zZXR1cChzdHJ1Y3Qgc2VyaWFsX3ByaXZhdGUgKnByaXYsCitwY2lfd2NoX2NoMzh4X3NldHVwKHN0cnVjdCBzZXJpYWxfcHJpdmF0ZSAqcHJpdiwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaXNlcmlhbF9ib2FyZCAqYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqcG9ydCwgaW50IGlkeCkKIHsKQEAgLTE4ODAsNiArMTg4MCw3IEBACiAKICNkZWZpbmUgUENJRV9WRU5ET1JfSURfV0NICQkweDFjMDAKICNkZWZpbmUgUENJRV9ERVZJQ0VfSURfV0NIX0NIMzgyXzJTMVAJMHgzMjUwCisjZGVmaW5lIFBDSUVfREVWSUNFX0lEX1dDSF9DSDM4NF80UwkweDM0NzAKIAogLyogVW5rbm93biB2ZW5kb3JzL2NhcmRzIC0gdGhpcyBzaG91bGQgbm90IGJlIGluIGxpbnV4L3BjaV9pZHMuaCAqLwogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX1VOS05PV05fMHgxNTg0CTB4MTU4NApAQCAtMjU3MSwxMyArMjU3MiwyMSBAQAogCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKIAkJLnNldHVwCQk9IHBjaV93Y2hfY2gzNTNfc2V0dXAsCiAJfSwKLQkvKiBXQ0ggQ0gzODIgMlMxUCBjYXJkICgxNjc1MCBjbG9uZSkgKi8KKwkvKiBXQ0ggQ0gzODIgMlMxUCBjYXJkICgxNjg1MCBjbG9uZSkgKi8KIAl7CiAJCS52ZW5kb3IgICAgICAgICA9IFBDSUVfVkVORE9SX0lEX1dDSCwKIAkJLmRldmljZSAgICAgICAgID0gUENJRV9ERVZJQ0VfSURfV0NIX0NIMzgyXzJTMVAsCiAJCS5zdWJ2ZW5kb3IgICAgICA9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UgICAgICA9IFBDSV9BTllfSUQsCi0JCS5zZXR1cCAgICAgICAgICA9IHBjaV93Y2hfY2gzODJfc2V0dXAsCisJCS5zZXR1cCAgICAgICAgICA9IHBjaV93Y2hfY2gzOHhfc2V0dXAsCisJfSwKKwkvKiBXQ0ggQ0gzODQgNFMgY2FyZCAoMTY4NTAgY2xvbmUpICovCisJeworCQkudmVuZG9yICAgICAgICAgPSBQQ0lFX1ZFTkRPUl9JRF9XQ0gsCisJCS5kZXZpY2UgICAgICAgICA9IFBDSUVfREVWSUNFX0lEX1dDSF9DSDM4NF80UywKKwkJLnN1YnZlbmRvciAgICAgID0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZSAgICAgID0gUENJX0FOWV9JRCwKKwkJLnNldHVwICAgICAgICAgID0gcGNpX3djaF9jaDM4eF9zZXR1cCwKIAl9LAogCS8qCiAJICogQVNJWCBkZXZpY2VzIHdpdGggRklGTyBidWcKQEAgLTI4NzYsNiArMjg4NSw3IEBACiAJcGJuX2ZpbnRla180LAogCXBibl9maW50ZWtfOCwKIAlwYm5fZmludGVrXzEyLAorCXBibl93Y2gzODRfNCwKIH07CiAKIC8qCkBAIC0zNjc1LDYgKzM2ODUsMTQgQEAKIAkJLmJhc2VfYmF1ZAk9IDExNTIwMCwKIAkJLmZpcnN0X29mZnNldAk9IDB4NDAsCiAJfSwKKworCVtwYm5fd2NoMzg0XzRdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSA0LAorCQkuYmFzZV9iYXVkICAgICAgPSAxMTUyMDAsCisJCS51YXJ0X29mZnNldCAgICA9IDgsCisJCS5maXJzdF9vZmZzZXQgICA9IDB4QzAsCisJfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBibGFja2xpc3RbXSA9IHsKQEAgLTM2ODcsNiArMzcwNSw3IEBACiAJeyBQQ0lfREVWSUNFKDB4NDM0OCwgMHg3MDUzKSwgfSwgLyogV0NIIENIMzUzIDJTMVAgKi8KIAl7IFBDSV9ERVZJQ0UoMHg0MzQ4LCAweDUwNTMpLCB9LCAvKiBXQ0ggQ0gzNTMgMVMxUCAqLwogCXsgUENJX0RFVklDRSgweDFjMDAsIDB4MzI1MCksIH0sIC8qIFdDSCBDSDM4MiAyUzFQICovCisJeyBQQ0lfREVWSUNFKDB4MWMwMCwgMHgzNDcwKSwgfSwgLyogV0NIIENIMzg0IDRTICovCiB9OwogCiAvKgpAQCAtNTQwMCw2ICs1NDE5LDEwIEBACiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCTAsIDAsIHBibl9iMF9idF8yXzExNTIwMCB9LAogCisJewlQQ0lFX1ZFTkRPUl9JRF9XQ0gsIFBDSUVfREVWSUNFX0lEX1dDSF9DSDM4NF80UywKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwgcGJuX3djaDM4NF80IH0sCisKIAkvKgogCSAqIENvbW10ZWNoLCBJbmMuIEZhc3Rjb20gYWRhcHRlcnMKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jCmluZGV4IDE5MjczZTMuLjEwN2U4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYwpAQCAtMTc1NywzMiArMTc1Nyw0MyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0VYWU5PUykKKyNkZWZpbmUgRVhZTk9TX0NPTU1PTl9TRVJJQUxfRFJWX0RBVEEJCQkJXAorCS5pbmZvID0gJihzdHJ1Y3QgczNjMjR4eF91YXJ0X2luZm8pIHsJCQlcCisJCS5uYW1lCQk9ICJTYW1zdW5nIEV4eW5vcyBVQVJUIiwJXAorCQkudHlwZQkJPSBQT1JUX1MzQzY0MDAsCQkJXAorCQkuaGFzX2RpdnNsb3QJPSAxLAkJCQlcCisJCS5yeF9maWZvbWFzawk9IFM1UFYyMTBfVUZTVEFUX1JYTUFTSywJXAorCQkucnhfZmlmb3NoaWZ0CT0gUzVQVjIxMF9VRlNUQVRfUlhTSElGVCwJXAorCQkucnhfZmlmb2Z1bGwJPSBTNVBWMjEwX1VGU1RBVF9SWEZVTEwsCVwKKwkJLnR4X2ZpZm9mdWxsCT0gUzVQVjIxMF9VRlNUQVRfVFhGVUxMLAlcCisJCS50eF9maWZvbWFzawk9IFM1UFYyMTBfVUZTVEFUX1RYTUFTSywJXAorCQkudHhfZmlmb3NoaWZ0CT0gUzVQVjIxMF9VRlNUQVRfVFhTSElGVCwJXAorCQkuZGVmX2Nsa19zZWwJPSBTM0MyNDEwX1VDT05fQ0xLU0VMMCwJCVwKKwkJLm51bV9jbGtzCT0gMSwJCQkJXAorCQkuY2xrc2VsX21hc2sJPSAwLAkJCQlcCisJCS5jbGtzZWxfc2hpZnQJPSAwLAkJCQlcCisJfSwJCQkJCQkJXAorCS5kZWZfY2ZnID0gJihzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnKSB7CQkJXAorCQkudWNvbgkJPSBTNVBWMjEwX1VDT05fREVGQVVMVCwJCVwKKwkJLnVmY29uCQk9IFM1UFYyMTBfVUZDT05fREVGQVVMVCwJXAorCQkuaGFzX2ZyYWN2YWwJPSAxLAkJCQlcCisJfQkJCQkJCQlcCisKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9zZXJpYWxfZHJ2X2RhdGEgZXh5bm9zNDIxMF9zZXJpYWxfZHJ2X2RhdGEgPSB7Ci0JLmluZm8gPSAmKHN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbykgewotCQkubmFtZQkJPSAiU2Ftc3VuZyBFeHlub3M0IFVBUlQiLAotCQkudHlwZQkJPSBQT1JUX1MzQzY0MDAsCi0JCS5oYXNfZGl2c2xvdAk9IDEsCi0JCS5yeF9maWZvbWFzawk9IFM1UFYyMTBfVUZTVEFUX1JYTUFTSywKLQkJLnJ4X2ZpZm9zaGlmdAk9IFM1UFYyMTBfVUZTVEFUX1JYU0hJRlQsCi0JCS5yeF9maWZvZnVsbAk9IFM1UFYyMTBfVUZTVEFUX1JYRlVMTCwKLQkJLnR4X2ZpZm9mdWxsCT0gUzVQVjIxMF9VRlNUQVRfVFhGVUxMLAotCQkudHhfZmlmb21hc2sJPSBTNVBWMjEwX1VGU1RBVF9UWE1BU0ssCi0JCS50eF9maWZvc2hpZnQJPSBTNVBWMjEwX1VGU1RBVF9UWFNISUZULAotCQkuZGVmX2Nsa19zZWwJPSBTM0MyNDEwX1VDT05fQ0xLU0VMMCwKLQkJLm51bV9jbGtzCT0gMSwKLQkJLmNsa3NlbF9tYXNrCT0gMCwKLQkJLmNsa3NlbF9zaGlmdAk9IDAsCi0JfSwKLQkuZGVmX2NmZyA9ICYoc3RydWN0IHMzYzI0MTBfdWFydGNmZykgewotCQkudWNvbgkJPSBTNVBWMjEwX1VDT05fREVGQVVMVCwKLQkJLnVmY29uCQk9IFM1UFYyMTBfVUZDT05fREVGQVVMVCwKLQkJLmhhc19mcmFjdmFsCT0gMSwKLQl9LAorCUVYWU5PU19DT01NT05fU0VSSUFMX0RSVl9EQVRBLAogCS5maWZvc2l6ZSA9IHsgMjU2LCA2NCwgMTYsIDE2IH0sCiB9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfc2VyaWFsX2Rydl9kYXRhIGV4eW5vczU0MzNfc2VyaWFsX2Rydl9kYXRhID0geworCUVYWU5PU19DT01NT05fU0VSSUFMX0RSVl9EQVRBLAorCS5maWZvc2l6ZSA9IHsgNjQsIDI1NiwgMTYsIDI1NiB9LAorfTsKKwogI2RlZmluZSBFWFlOT1M0MjEwX1NFUklBTF9EUlZfREFUQSAoKGtlcm5lbF91bG9uZ190KSZleHlub3M0MjEwX3NlcmlhbF9kcnZfZGF0YSkKKyNkZWZpbmUgRVhZTk9TNTQzM19TRVJJQUxfRFJWX0RBVEEgKChrZXJuZWxfdWxvbmdfdCkmZXh5bm9zNTQzM19zZXJpYWxfZHJ2X2RhdGEpCiAjZWxzZQogI2RlZmluZSBFWFlOT1M0MjEwX1NFUklBTF9EUlZfREFUQSAoa2VybmVsX3Vsb25nX3QpTlVMTAorI2RlZmluZSBFWFlOT1M1NDMzX1NFUklBTF9EUlZfREFUQSAoa2VybmVsX3Vsb25nX3QpTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHMzYzI0eHhfc2VyaWFsX2RyaXZlcl9pZHNbXSA9IHsKQEAgLTE4MDQsNiArMTgxNSw5IEBACiAJfSwgewogCQkubmFtZQkJPSAiZXh5bm9zNDIxMC11YXJ0IiwKIAkJLmRyaXZlcl9kYXRhCT0gRVhZTk9TNDIxMF9TRVJJQUxfRFJWX0RBVEEsCisJfSwgeworCQkubmFtZQkJPSAiZXh5bm9zNTQzMy11YXJ0IiwKKwkJLmRyaXZlcl9kYXRhCT0gRVhZTk9TNTQzM19TRVJJQUxfRFJWX0RBVEEsCiAJfSwKIAl7IH0sCiB9OwpAQCAtMTgyMyw2ICsxODM3LDggQEAKIAkJLmRhdGEgPSAodm9pZCAqKVM1UFYyMTBfU0VSSUFMX0RSVl9EQVRBIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtdWFydCIsCiAJCS5kYXRhID0gKHZvaWQgKilFWFlOT1M0MjEwX1NFUklBTF9EUlZfREFUQSB9LAorCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDMzLXVhcnQiLAorCQkuZGF0YSA9ICh2b2lkICopRVhZTk9TNTQzM19TRVJJQUxfRFJWX0RBVEEgfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzM2MyNHh4X3VhcnRfZHRfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCA1N2NhNjFiLi45ODQ2MDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMjE2NCw3ICsyMTY0LDkgQEAKIAkJYnJlYWs7CiAJfQogCi0JZGV2X2luZm8ocG9ydC0+ZGV2LCAiJXMlZCBhdCAlcyAoaXJxID0gJWQsIGJhc2VfYmF1ZCA9ICVkKSBpcyBhICVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzJXMlcyVkIGF0ICVzIChpcnEgPSAlZCwgYmFzZV9iYXVkID0gJWQpIGlzIGEgJXNcbiIsCisJICAgICAgIHBvcnQtPmRldiA/IGRldl9uYW1lKHBvcnQtPmRldikgOiAiIiwKKwkgICAgICAgcG9ydC0+ZGV2ID8gIjogIiA6ICIiLAogCSAgICAgICBkcnYtPmRldl9uYW1lLAogCSAgICAgICBkcnYtPnR0eV9kcml2ZXItPm5hbWVfYmFzZSArIHBvcnQtPmxpbmUsCiAJICAgICAgIGFkZHJlc3MsIHBvcnQtPmlycSwgcG9ydC0+dWFydGNsayAvIDE2LCB1YXJ0X3R5cGUocG9ydCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwppbmRleCA0ZjM1YjQzLi41MWYwNjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uYworKysgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwpAQCAtMTQ2NCw2ICsxNDY0LDkgQEAKIAkgICAgZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX01BU1RFUikKIAkJcmV0dXJuIC1FSU87CiAKKwlpZiAodGVzdF9iaXQoVFRZX0VYQ0xVU0lWRSwgJnR0eS0+ZmxhZ3MpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVCVVNZOworCiAJdHR5LT5jb3VudCsrOwogCiAJV0FSTl9PTighdHR5LT5sZGlzYyk7CkBAIC0yMTA2LDEwICsyMTA5LDYgQEAKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAlmaWxwLT5mX2ZsYWdzID0gc2F2ZWRfZmxhZ3M7CiAKLQlpZiAoIXJldHZhbCAmJiB0ZXN0X2JpdChUVFlfRVhDTFVTSVZFLCAmdHR5LT5mbGFncykgJiYKLQkJCQkJCSFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR2YWwgPSAtRUJVU1k7Ci0KIAlpZiAocmV0dmFsKSB7CiAjaWZkZWYgVFRZX0RFQlVHX0hBTkdVUAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVycm9yICVkIGluIG9wZW5pbmcgJXMuLi5cbiIsIF9fZnVuY19fLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2hpcGlkZWEvY29yZS5jIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvY29yZS5jCmluZGV4IDViOTgyNWEuLmE1N2RjODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9jb3JlLmMKQEAgLTY2OSw3ICs2NjksNiBAQAogCWlmICghY2kpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2kpOwogCWNpLT5kZXYgPSBkZXY7CiAJY2ktPnBsYXRkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShkZXYpOwogCWNpLT5pbXgyOF93cml0ZV9maXggPSAhIShjaS0+cGxhdGRhdGEtPmZsYWdzICYKQEAgLTc4Myw2ICs3ODIsNyBAQAogCQl9CiAJfQogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2kpOwogCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBjaS0+aXJxLCBjaV9pcnEsIElSUUZfU0hBUkVELAogCQkJY2ktPnBsYXRkYXRhLT5uYW1lLCBjaSk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2hvc3QuYyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2hvc3QuYwppbmRleCBjMTY5NGNmLi40ODczMWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9ob3N0LmMKKysrIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvaG9zdC5jCkBAIC05MSw2ICs5MSw3IEBACiAJaWYgKCFoY2QpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZGV2X3NldF9kcnZkYXRhKGNpLT5kZXYsIGNpKTsKIAloY2QtPnJzcmNfc3RhcnQgPSBjaS0+aHdfYmFuay5waHlzOwogCWhjZC0+cnNyY19sZW4gPSBjaS0+aHdfYmFuay5zaXplOwogCWhjZC0+cmVncyA9IGNpLT5od19iYW5rLmFiczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oIGIvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKaW5kZXggZGUwYzljOS4uYTYzMTVhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKKysrIGIvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKQEAgLTU1LDYgKzU1LDExIEBACiAJICAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweGJhZGQpKQogCQlyZXR1cm4gMDsKIAorCS8qIE9URyBQRVQgZGV2aWNlIGlzIGFsd2F5cyB0YXJnZXRlZCAoc2VlIE9URyAyLjAgRUNOIDYuNC4yKSAqLworCWlmICgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDFhMGEgJiYKKwkgICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4MDIwMCkpCisJCXJldHVybiAxOworCiAJLyogTk9URTogY2FuJ3QgdXNlIHVzYl9tYXRjaF9pZCgpIHNpbmNlIGludGVyZmFjZSBjYWNoZXMKIAkgKiBhcmVuJ3Qgc2V0IHVwIHlldC4gdGhpcyBpcyBjdXQvcGFzdGUgZnJvbSB0aGF0IGNvZGUuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwppbmRleCAwZmZiNGVkLi40MWU1MTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKQEAgLTE3OSw2ICsxNzksMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3ZTApLCAuZHJpdmVyX2luZm8gPQogCQkJVVNCX1FVSVJLX0lHTk9SRV9SRU1PVEVfV0FLRVVQIH0sCiAKKwkvKiBQcm90b2NvbCBhbmQgT1RHIEVsZWN0cmljYWwgVGVzdCBEZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxYTBhLCAweDAyMDApLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0xJTkVBUl9VRlJBTUVfSU5UUl9CSU5URVJWQUwgfSwKKwogCXsgfSAgLyogdGVybWluYXRpbmcgZW50cnkgbXVzdCBiZSBsYXN0ICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MyL2NvcmVfaW50ci5jIGIvZHJpdmVycy91c2IvZHdjMi9jb3JlX2ludHIuYwppbmRleCBhZDQzYzViLi4wMmUzZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MyL2NvcmVfaW50ci5jCisrKyBiL2RyaXZlcnMvdXNiL2R3YzIvY29yZV9pbnRyLmMKQEAgLTQ3NiwxMyArNDc2LDEzIEBACiAJdTMyIGdpbnRzdHM7CiAJaXJxcmV0dXJuX3QgcmV0dmFsID0gSVJRX05PTkU7CiAKKwlzcGluX2xvY2soJmhzb3RnLT5sb2NrKTsKKwogCWlmICghZHdjMl9pc19jb250cm9sbGVyX2FsaXZlKGhzb3RnKSkgewogCQlkZXZfd2Fybihoc290Zy0+ZGV2LCAiQ29udHJvbGxlciBpcyBkZWFkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3Bpbl9sb2NrKCZoc290Zy0+bG9jayk7Ci0KIAlnaW50c3RzID0gZHdjMl9yZWFkX2NvbW1vbl9pbnRyKGhzb3RnKTsKIAlpZiAoZ2ludHN0cyAmIH5HSU5UU1RTX1BSVElOVCkKIAkJcmV0dmFsID0gSVJRX0hBTkRMRUQ7CkBAIC01MTUsOCArNTE1LDggQEAKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrKCZoc290Zy0+bG9jayk7CiBvdXQ6CisJc3Bpbl91bmxvY2soJmhzb3RnLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHdjMl9oYW5kbGVfY29tbW9uX2ludHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMi9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL2R3YzIvZ2FkZ2V0LmMKaW5kZXggMjAwMTY4ZS4uNzkyNDIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMi9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jCkBAIC0yNTY3LDcgKzI1NjcsNyBAQAogICogczNjX2hzb3RnX2VwX2Rpc2FibGUgLSBkaXNhYmxlIGdpdmVuIGVuZHBvaW50CiAgKiBAZXA6IFRoZSBlbmRwb2ludCB0byBkaXNhYmxlLgogICovCi1zdGF0aWMgaW50IHMzY19oc290Z19lcF9kaXNhYmxlKHN0cnVjdCB1c2JfZXAgKmVwKQorc3RhdGljIGludCBzM2NfaHNvdGdfZXBfZGlzYWJsZV9mb3JjZShzdHJ1Y3QgdXNiX2VwICplcCwgYm9vbCBmb3JjZSkKIHsKIAlzdHJ1Y3QgczNjX2hzb3RnX2VwICpoc19lcCA9IG91cl9lcChlcCk7CiAJc3RydWN0IGR3YzJfaHNvdGcgKmhzb3RnID0gaHNfZXAtPnBhcmVudDsKQEAgLTI1ODgsNyArMjU4OCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHNvdGctPmxvY2ssIGZsYWdzKTsKIAkvKiB0ZXJtaW5hdGUgYWxsIHJlcXVlc3RzIHdpdGggc2h1dGRvd24gKi8KLQlraWxsX2FsbF9yZXF1ZXN0cyhoc290ZywgaHNfZXAsIC1FU0hVVERPV04sIGZhbHNlKTsKKwlraWxsX2FsbF9yZXF1ZXN0cyhoc290ZywgaHNfZXAsIC1FU0hVVERPV04sIGZvcmNlKTsKIAogCWhzb3RnLT5maWZvX21hcCAmPSB+KDE8PGhzX2VwLT5maWZvX2luZGV4KTsKIAloc19lcC0+Zmlmb19pbmRleCA9IDA7CkBAIC0yNjA5LDYgKzI2MDksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzM2NfaHNvdGdfZXBfZGlzYWJsZShzdHJ1Y3QgdXNiX2VwICplcCkKK3sKKwlyZXR1cm4gczNjX2hzb3RnX2VwX2Rpc2FibGVfZm9yY2UoZXAsIGZhbHNlKTsKK30KIC8qKgogICogb25fbGlzdCAtIGNoZWNrIHJlcXVlc3QgaXMgb24gdGhlIGdpdmVuIGVuZHBvaW50CiAgKiBAZXA6IFRoZSBlbmRwb2ludCB0byBjaGVjay4KQEAgLTI5MjQsNyArMjkyOCw3IEBACiAKIAkvKiBhbGwgZW5kcG9pbnRzIHNob3VsZCBiZSBzaHV0ZG93biAqLwogCWZvciAoZXAgPSAxOyBlcCA8IGhzb3RnLT5udW1fb2ZfZXBzOyBlcCsrKQotCQlzM2NfaHNvdGdfZXBfZGlzYWJsZSgmaHNvdGctPmVwc1tlcF0uZXApOworCQlzM2NfaHNvdGdfZXBfZGlzYWJsZV9mb3JjZSgmaHNvdGctPmVwc1tlcF0uZXAsIHRydWUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhzb3RnLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1wY2kuYyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1wY2kuYwppbmRleCA3YzRmYWY3Li5iNjQyYTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvZHdjMy9kd2MzLXBjaS5jCkBAIC0zMyw2ICszMyw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQllUCQkweDBmMzcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9NUkZMRAkweDExOWUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9CU1cJCTB4MjJCNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVExQCTB4OWQzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVEgJMHhhMTMwCiAKIHN0cnVjdCBkd2MzX3BjaSB7CiAJc3RydWN0IGRldmljZQkJKmRldjsKQEAgLTIxOSw2ICsyMjEsOCBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0JTVyksIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfQllUKSwgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9NUkZMRCksIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfU1BUTFApLCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVEgpLCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfTkxfVVNCKSwgfSwKIAl7ICB9CS8qIFRlcm1pbmF0aW5nIEVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL2R3YzMvZ2FkZ2V0LmMKaW5kZXggZjAzYjEzNi4uOGY2NWFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9kd2MzL2dhZGdldC5jCkBAIC04ODIsOCArODgyLDcgQEAKIAogCQkJCWlmIChpID09IChyZXF1ZXN0LT5udW1fbWFwcGVkX3NncyAtIDEpIHx8CiAJCQkJCQlzZ19pc19sYXN0KHMpKSB7Ci0JCQkJCWlmIChsaXN0X2lzX2xhc3QoJnJlcS0+bGlzdCwKLQkJCQkJCQkmZGVwLT5yZXF1ZXN0X2xpc3QpKQorCQkJCQlpZiAobGlzdF9lbXB0eSgmZGVwLT5yZXF1ZXN0X2xpc3QpKQogCQkJCQkJbGFzdF9vbmUgPSB0cnVlOwogCQkJCQljaGFpbiA9IGZhbHNlOwogCQkJCX0KQEAgLTkwMSw2ICs5MDAsOSBAQAogCQkJCWlmIChsYXN0X29uZSkKIAkJCQkJYnJlYWs7CiAJCQl9CisKKwkJCWlmIChsYXN0X29uZSkKKwkJCQlicmVhazsKIAkJfSBlbHNlIHsKIAkJCWRtYSA9IHJlcS0+cmVxdWVzdC5kbWE7CiAJCQlsZW5ndGggPSByZXEtPnJlcXVlc3QubGVuZ3RoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfaGlkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9oaWQuYwppbmRleCA2ZTA0ZTMwLi5hMWJjM2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9oaWQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9oaWQuYwpAQCAtMzk5LDggKzM5OSw5IEBACiAJdmFsdWUJPSBfX2xlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CiAJbGVuZ3RoCT0gX19sZTE2X3RvX2NwdShjdHJsLT53TGVuZ3RoKTsKIAotCVZEQkcoY2RldiwgImhpZF9zZXR1cCBjcnRsX3JlcXVlc3QgOiBiUmVxdWVzdFR5cGU6MHgleCBiUmVxdWVzdDoweCV4ICIKLQkJIlZhbHVlOjB4JXhcbiIsIGN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsIHZhbHVlKTsKKwlWREJHKGNkZXYsCisJICAgICAiJXMgY3J0bF9yZXF1ZXN0IDogYlJlcXVlc3RUeXBlOjB4JXggYlJlcXVlc3Q6MHgleCBWYWx1ZToweCV4XG4iLAorCSAgICAgX19mdW5jX18sIGN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsIHZhbHVlKTsKIAogCXN3aXRjaCAoKGN0cmwtPmJSZXF1ZXN0VHlwZSA8PCA4KSB8IGN0cmwtPmJSZXF1ZXN0KSB7CiAJY2FzZSAoKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIDw8IDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkuYwppbmRleCBhOTA0NDAzLi4yNTliNjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaS5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAkJcmVxID0gbWlkaV9hbGxvY19lcF9yZXEoZXAsIG1pZGktPmJ1Zmxlbik7CiAKIAlpZiAoIXJlcSkgewotCQlFUlJPUihtaWRpLCAiZ21pZGlfdHJhbnNtaXQ6IGFsbG9jX2VwX3JlcXVlc3QgZmFpbGVkXG4iKTsKKwkJRVJST1IobWlkaSwgIiVzOiBhbGxvY19lcF9yZXF1ZXN0IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCXJlcS0+bGVuZ3RoID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3VhYzEuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3VhYzEuYwppbmRleCBmN2IyMDMyLi5lOTcxNTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91YWMxLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdWFjMS5jCkBAIC04OTcsNyArODk3LDYgQEAKIAlzdHJ1Y3QgZl91YWMxX29wdHMgKm9wdHM7CiAKIAlvcHRzID0gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX3VhYzFfb3B0cywgZnVuY19pbnN0KTsKLQlnYXVkaW9fY2xlYW51cChvcHRzLT5jYXJkKTsKIAlpZiAob3B0cy0+Zm5fcGxheV9hbGxvYykKIAkJa2ZyZWUob3B0cy0+Zm5fcGxheSk7CiAJaWYgKG9wdHMtPmZuX2NhcF9hbGxvYykKQEAgLTkzNSw2ICs5MzQsNyBAQAogCXN0cnVjdCBmX2F1ZGlvICphdWRpbyA9IGZ1bmNfdG9fYXVkaW8oZik7CiAJc3RydWN0IGZfdWFjMV9vcHRzICpvcHRzOwogCisJZ2F1ZGlvX2NsZWFudXAoJmF1ZGlvLT5jYXJkKTsKIAlvcHRzID0gY29udGFpbmVyX29mKGYtPmZpLCBzdHJ1Y3QgZl91YWMxX29wdHMsIGZ1bmNfaW5zdCk7CiAJa2ZyZWUoYXVkaW8pOwogCW11dGV4X2xvY2soJm9wdHMtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCmluZGV4IGM3NDRlNDkuLmRiNDllYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMKQEAgLTQ0MSw2ICs0NDEsNyBAQAogCWtidWYgPSBtZW1kdXBfdXNlcihidWYsIGxlbik7CiAJaWYgKElTX0VSUihrYnVmKSkgewogCQl2YWx1ZSA9IFBUUl9FUlIoa2J1Zik7CisJCWtidWYgPSBOVUxMOwogCQlnb3RvIGZyZWUxOwogCX0KIApAQCAtNDQ5LDYgKzQ1MCw3IEBACiAJCWRhdGEtPm5hbWUsIGxlbiwgKGludCkgdmFsdWUpOwogZnJlZTE6CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlrZnJlZSAoa2J1Zik7CiAJcmV0dXJuIHZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2F0bWVsX3VzYmFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2F0bWVsX3VzYmFfdWRjLmMKaW5kZXggY2U4ODIzNy4uOWY5M2JlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9hdG1lbF91c2JhX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvYXRtZWxfdXNiYV91ZGMuYwpAQCAtNzE2LDEwICs3MTYsMTAgQEAKIAlyZXEtPnVzaW5nX2RtYSA9IDE7CiAJcmVxLT5jdHJsID0gVVNCQV9CRihETUFfQlVGX0xFTiwgcmVxLT5yZXEubGVuZ3RoKQogCQkJfCBVU0JBX0RNQV9DSF9FTiB8IFVTQkFfRE1BX0VORF9CVUZfSUUKLQkJCXwgVVNCQV9ETUFfRU5EX1RSX0VOIHwgVVNCQV9ETUFfRU5EX1RSX0lFOworCQkJfCBVU0JBX0RNQV9FTkRfQlVGX0VOOwogCi0JaWYgKGVwLT5pc19pbikKLQkJcmVxLT5jdHJsIHw9IFVTQkFfRE1BX0VORF9CVUZfRU47CisJaWYgKCFlcC0+aXNfaW4pCisJCXJlcS0+Y3RybCB8PSBVU0JBX0RNQV9FTkRfVFJfRU4gfCBVU0JBX0RNQV9FTkRfVFJfSUU7CiAKIAkvKgogCSAqIEFkZCB0aGlzIHJlcXVlc3QgdG8gdGhlIHF1ZXVlIGFuZCBzdWJtaXQgZm9yIERNQSBpZgpAQCAtODI4LDcgKzgyOCw3IEBACiB7CiAJc3RydWN0IHVzYmFfZXAgKmVwID0gdG9fdXNiYV9lcChfZXApOwogCXN0cnVjdCB1c2JhX3VkYyAqdWRjID0gZXAtPnVkYzsKLQlzdHJ1Y3QgdXNiYV9yZXF1ZXN0ICpyZXEgPSB0b191c2JhX3JlcShfcmVxKTsKKwlzdHJ1Y3QgdXNiYV9yZXF1ZXN0ICpyZXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgc3RhdHVzOwogCkBAIC04MzcsNiArODM3LDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCZyZXEtPnJlcSAhPSBfcmVxKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAocmVxLT51c2luZ19kbWEpIHsKIAkJLyoKIAkJICogSWYgdGhpcyByZXF1ZXN0IGlzIGN1cnJlbnRseSBiZWluZyB0cmFuc2ZlcnJlZCwKQEAgLTE1NjMsNyArMTU3Myw2IEBACiAJaWYgKChlcHN0YXR1cyAmIGVwY3RybCkgJiBVU0JBX1JYX0JLX1JEWSkgewogCQlEQkcoREJHX0JVUywgIiVzOiBSWCBkYXRhIHJlYWR5XG4iLCBlcC0+ZXAubmFtZSk7CiAJCXJlY2VpdmVfZGF0YShlcCk7Ci0JCXVzYmFfZXBfd3JpdGVsKGVwLCBDTFJfU1RBLCBVU0JBX1JYX0JLX1JEWSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2JkYy9iZGNfZXAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvYmRjL2JkY19lcC5jCmluZGV4IGZmNjdjZWEuLmQ0ZmU4ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvYmRjL2JkY19lcC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvYmRjL2JkY19lcC5jCkBAIC03MTgsMTAgKzcxOCwxMSBAQAogCXN0cnVjdCBiZGMgKmJkYzsKIAlpbnQgcmV0ID0gMDsKIAotCWJkYyA9IGVwLT5iZGM7CiAJaWYgKCFyZXEgfHwgIWVwIHx8ICFlcC0+dXNiX2VwLmRlc2MpCiAJCXJldHVybiAtRUlOVkFMOwogCisJYmRjID0gZXAtPmJkYzsKKwogCXJlcS0+dXNiX3JlcS5hY3R1YWwgPSAwOwogCXJlcS0+dXNiX3JlcS5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJcmVxLT5lcG51bSA9IGVwLT5lcF9udW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCmluZGV4IGUxMTNmZDcuLmY5YTMzMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC0xNTgxLDYgKzE1ODEsMTAgQEAKIAllbHNlCiAJCW5leHQgPSAobm93ICsgMiArIDcpICYgfjB4MDc7CS8qIGZ1bGwgZnJhbWUgY2FjaGUgKi8KIAorCS8qIElmIG5lZWRlZCwgaW5pdGlhbGl6ZSBsYXN0X2lzb19mcmFtZSBzbyB0aGF0IHRoaXMgVVJCIHdpbGwgYmUgc2VlbiAqLworCWlmIChlaGNpLT5pc29jX2NvdW50ID09IDApCisJCWVoY2ktPmxhc3RfaXNvX2ZyYW1lID0gbm93ID4+IDM7CisKIAkvKgogCSAqIFVzZSBlaGNpLT5sYXN0X2lzb19mcmFtZSBhcyB0aGUgYmFzZS4gIFRoZXJlIGNhbid0IGJlIGFueQogCSAqIFREcyBzY2hlZHVsZWQgZm9yIGVhcmxpZXIgdGhhbiB0aGF0LgpAQCAtMTYwMCwxMSArMTYwNCwxMSBAQAogCSAqLwogCW5vdzIgPSAobm93IC0gYmFzZSkgJiAobW9kIC0gMSk7CiAKLQkvKiBJcyB0aGUgc2NoZWR1bGUgYWxyZWFkeSBmdWxsPyAqLworCS8qIElzIHRoZSBzY2hlZHVsZSBhYm91dCB0byB3cmFwIGFyb3VuZD8gKi8KIAlpZiAodW5saWtlbHkoIWVtcHR5ICYmIHN0YXJ0IDwgcGVyaW9kKSkgewotCQllaGNpX2RiZyhlaGNpLCAiaXNvIHNjaGVkIGZ1bGwgJXAgKCV1LSV1IDwgJXUgbW9kICV1KVxuIiwKKwkJZWhjaV9kYmcoZWhjaSwgInJlcXVlc3QgJXAgd291bGQgb3ZlcmZsb3cgKCV1LSV1IDwgJXUgbW9kICV1KVxuIiwKIAkJCQl1cmIsIHN0cmVhbS0+bmV4dF91ZnJhbWUsIGJhc2UsIHBlcmlvZCwgbW9kKTsKLQkJc3RhdHVzID0gLUVOT1NQQzsKKwkJc3RhdHVzID0gLUVGQklHOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xNjcxLDEwICsxNjc1LDYgQEAKIAl1cmItPnN0YXJ0X2ZyYW1lID0gc3RhcnQgJiAobW9kIC0gMSk7CiAJaWYgKCFzdHJlYW0tPmhpZ2hzcGVlZCkKIAkJdXJiLT5zdGFydF9mcmFtZSA+Pj0gMzsKLQotCS8qIE1ha2Ugc3VyZSBzY2FuX2lzb2MoKSBzZWVzIHRoZXNlICovCi0JaWYgKGVoY2ktPmlzb2NfY291bnQgPT0gMCkKLQkJZWhjaS0+bGFzdF9pc29fZnJhbWUgPSBub3cgPj4gMzsKIAlyZXR1cm4gc3RhdHVzOwogCiAgZmFpbDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS10ZWdyYS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMKaW5kZXggMTlhOWFmMS4uZmY5YWYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCiAJdV9waHkgPSBkZXZtX3VzYl9nZXRfcGh5X2J5X3BoYW5kbGUoJnBkZXYtPmRldiwgIm52aWRpYSxwaHkiLCAwKTsKIAlpZiAoSVNfRVJSKHVfcGh5KSkgewotCQllcnIgPSBQVFJfRVJSKHVfcGh5KTsKKwkJZXJyID0gLUVQUk9CRV9ERUZFUjsKIAkJZ290byBjbGVhbnVwX2Nsa19lbjsKIAl9CiAJaGNkLT51c2JfcGh5ID0gdV9waHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCmluZGV4IGRkNDgzYzEuLmNlNjM2NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCkBAIC01NjcsNyArNTY3LDggQEAKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJdTMyIGNvbnRyb2w7Ci0JdTMyIGZtaW50ZXJ2YWw7CisJdTMyIGZtaW50ZXJ2YWwgPSAwOworCWJvb2wgbm9fZm1pbnRlcnZhbCA9IGZhbHNlOwogCWludCBjbnQ7CiAKIAlpZiAoIW1taW9fcmVzb3VyY2VfZW5hYmxlZChwZGV2LCAwKSkKQEAgLTU3Nyw2ICs1NzgsMTMgQEAKIAlpZiAoYmFzZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIFVMaSBNNTIzNyBPSENJIGNvbnRyb2xsZXIgbG9ja3MgdGhlIHdob2xlIHN5c3RlbSB3aGVuIGFjY2Vzc2luZworCSAqIHRoZSBPSENJX0ZNSU5URVJWQUwgb2Zmc2V0LgorCSAqLworCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BTCAmJiBwZGV2LT5kZXZpY2UgPT0gMHg1MjM3KQorCQlub19mbWludGVydmFsID0gdHJ1ZTsKKwogCWNvbnRyb2wgPSByZWFkbChiYXNlICsgT0hDSV9DT05UUk9MKTsKIAogLyogT24gUEEtUklTQywgUERDIGNhbiBsZWF2ZSBJUiBzZXQgaW5jb3JyZWN0bHk7IGlnbm9yZSBpdCB0aGVyZS4gKi8KQEAgLTYxNSw3ICs2MjMsOSBAQAogCX0KIAogCS8qIHNvZnR3YXJlIHJlc2V0IG9mIHRoZSBjb250cm9sbGVyLCBwcmVzZXJ2aW5nIEhjRm1JbnRlcnZhbCAqLwotCWZtaW50ZXJ2YWwgPSByZWFkbChiYXNlICsgT0hDSV9GTUlOVEVSVkFMKTsKKwlpZiAoIW5vX2ZtaW50ZXJ2YWwpCisJCWZtaW50ZXJ2YWwgPSByZWFkbChiYXNlICsgT0hDSV9GTUlOVEVSVkFMKTsKKwogCXdyaXRlbChPSENJX0hDUiwgYmFzZSArIE9IQ0lfQ01EU1RBVFVTKTsKIAogCS8qIHJlc2V0IHJlcXVpcmVzIG1heCAxMCB1cyBkZWxheSAqLwpAQCAtNjI0LDcgKzYzNCw5IEBACiAJCQlicmVhazsKIAkJdWRlbGF5KDEpOwogCX0KLQl3cml0ZWwoZm1pbnRlcnZhbCwgYmFzZSArIE9IQ0lfRk1JTlRFUlZBTCk7CisKKwlpZiAoIW5vX2ZtaW50ZXJ2YWwpCisJCXdyaXRlbChmbWludGVydmFsLCBiYXNlICsgT0hDSV9GTUlOVEVSVkFMKTsKIAogCS8qIE5vdyB0aGUgY29udHJvbGxlciBpcyBzYWZlbHkgaW4gU1VTUEVORCBhbmQgbm90aGluZyBjYW4gd2FrZSBpdCB1cCAqLwogCWlvdW5tYXAoYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKaW5kZXggMTQyYjYwMS4uN2Y3NmM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwpAQCAtODIsNiArODIsOCBAQAogCQkJCSJtdXN0IGJlIHN1c3BlbmRlZCBleHRyYSBzbG93bHkiLAogCQkJCXBkZXYtPnJldmlzaW9uKTsKIAkJfQorCQlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRlJFU0NPX0xPR0lDX1BESykKKwkJCXhoY2ktPnF1aXJrcyB8PSBYSENJX0JST0tFTl9TVFJFQU1TOwogCQkvKiBGcmVzY28gTG9naWMgY29uZmlybXM6IGFsbCByZXZpc2lvbnMgb2YgdGhpcyBjaGlwIGRvIG5vdAogCQkgKiBzdXBwb3J0IE1TSSwgZXZlbiB0aG91Z2ggc29tZSBvZiB0aGVtIGNsYWltIHRvIGluIHRoZWlyIFBDSQogCQkgKiBjYXBhYmlsaXRpZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCmluZGV4IDAxZmNiYjUuLmM1MGQ4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCkBAIC0zODAzLDYgKzM4MDMsMTUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKHNldHVwID09IFNFVFVQX0NPTlRFWFRfT05MWSkgeworCQlzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIHZpcnRfZGV2LT5vdXRfY3R4KTsKKwkJaWYgKEdFVF9TTE9UX1NUQVRFKGxlMzJfdG9fY3B1KHNsb3RfY3R4LT5kZXZfc3RhdGUpKSA9PQorCQkgICAgU0xPVF9TVEFURV9ERUZBVUxUKSB7CisJCQl4aGNpX2RiZyh4aGNpLCAiU2xvdCBhbHJlYWR5IGluIGRlZmF1bHQgc3RhdGVcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKIAljb21tYW5kID0geGhjaV9hbGxvY19jb21tYW5kKHhoY2ksIGZhbHNlLCBmYWxzZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjb21tYW5kKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA5ZDY4MzcyLi5iMDA1MDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC03Miw2ICs3Miw4IEBACiAKIGNvbmZpZyBVU0JfTVVTQl9UVVNCNjAxMAogCXRyaXN0YXRlICJUVVNCNjAxMCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDJQTFVTIHx8IENPTVBJTEVfVEVTVAorCWRlcGVuZHMgb24gTk9QX1VTQl9YQ0VJViA9IFVTQl9NVVNCX0hEUkMgIyBib3RoIGJ1aWx0LWluIG9yIGJvdGggbW9kdWxlcwogCiBjb25maWcgVVNCX01VU0JfT01BUDJQTFVTCiAJdHJpc3RhdGUgIk9NQVAyNDMwIGFuZCBvbndhcmRzIgpAQCAtODUsNiArODcsNyBAQAogY29uZmlnIFVTQl9NVVNCX0RTUFMKIAl0cmlzdGF0ZSAiVEkgRFNQUyBwbGF0Zm9ybXMiCiAJc2VsZWN0IFVTQl9NVVNCX0FNMzM1WF9DSElMRAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMgfHwgQ09NUElMRV9URVNUCiAJZGVwZW5kcyBvbiBPRl9JUlEKIAogY29uZmlnIFVTQl9NVVNCX0JMQUNLRklOCkBAIC05Myw2ICs5Niw3IEBACiAKIGNvbmZpZyBVU0JfTVVTQl9VWDUwMAogCXRyaXN0YXRlICJVeDUwMCBwbGF0Zm9ybXMiCisJZGVwZW5kcyBvbiBBUkNIX1U4NTAwIHx8IENPTVBJTEVfVEVTVAogCiBjb25maWcgVVNCX01VU0JfSlo0NzQwCiAJdHJpc3RhdGUgIkpaNDc0MCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCBhNDQxYTJkLi4xNzgyNTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC02Myw3ICs2Myw3IEBACiAJYmZpbl93cml0ZTE2KGFkZHIgKyBvZmZzZXQsIGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBiaW5mX3dyaXRlbCh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCwgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBiZmluX3dyaXRlbCh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCwgdTMyIGRhdGEpCiB7CiAJYmZpbl93cml0ZTE2KGFkZHIgKyBvZmZzZXQsICh1MTYpZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY3BwaTQxLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY3BwaTQxLmMKaW5kZXggZjY0ZmQ5Ni4uYzM5YTE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NwcGk0MS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jcHBpNDEuYwpAQCAtNjI4LDkgKzYyOCw5IEBACiAJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLCAiZG1hLW5hbWVzIiwgaSwgJnN0cik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKLQkJaWYgKCFzdHJuY21wKHN0ciwgInR4IiwgMikpCisJCWlmIChzdHJzdGFydHMoc3RyLCAidHgiKSkKIAkJCWlzX3R4ID0gMTsKLQkJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAicngiLCAyKSkKKwkJZWxzZSBpZiAoc3Ryc3RhcnRzKHN0ciwgInJ4IikpCiAJCQlpc190eCA9IDA7CiAJCWVsc2UgewogCQkJZGV2X2VycihkZXYsICJXcm9uZyBkbWF0eXBlICVzXG4iLCBzdHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RlYnVnZnMuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kZWJ1Z2ZzLmMKaW5kZXggYWQzNzAxYS4uNDgxMzFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZGVidWdmcy5jCkBAIC01OSwyMCArNTksMTIgQEAKIAl7ICJSeE1heFBwIiwJTVVTQl9SWE1BWFAsCTE2IH0sCiAJeyAiUnhDU1IiLAlNVVNCX1JYQ1NSLAkxNiB9LAogCXsgIlJ4Q291bnQiLAlNVVNCX1JYQ09VTlQsCTE2IH0sCi0JeyAiQ29uZmlnRGF0YSIsCU1VU0JfQ09ORklHREFUQSw4IH0sCiAJeyAiSW50clJ4RSIsCU1VU0JfSU5UUlJYRSwJMTYgfSwKIAl7ICJJbnRyVHhFIiwJTVVTQl9JTlRSVFhFLAkxNiB9LAogCXsgIkludHJVc2JFIiwJTVVTQl9JTlRSVVNCRSwJOCB9LAogCXsgIkRldkN0bCIsCU1VU0JfREVWQ1RMLAk4IH0sCi0JeyAiQmFiYmxlQ3RsIiwJTVVTQl9CQUJCTEVfQ1RMLDggfSwKLQl7ICJUeEZJRk9zeiIsCU1VU0JfVFhGSUZPU1osCTggfSwKLQl7ICJSeEZJRk9zeiIsCU1VU0JfUlhGSUZPU1osCTggfSwKLQl7ICJUeEZJRk9hZGQiLAlNVVNCX1RYRklGT0FERCwJMTYgfSwKLQl7ICJSeEZJRk9hZGQiLAlNVVNCX1JYRklGT0FERCwJMTYgfSwKIAl7ICJWQ29udHJvbCIsCTB4NjgsCQkzMiB9LAogCXsgIkhXVmVycyIsCTB4NjksCQkxNiB9LAotCXsgIkVQSW5mbyIsCU1VU0JfRVBJTkZPLAk4IH0sCi0JeyAiUkFNSW5mbyIsCU1VU0JfUkFNSU5GTywJOCB9LAogCXsgIkxpbmtJbmZvIiwJTVVTQl9MSU5LSU5GTywJOCB9LAogCXsgIlZQTGVuIiwJTVVTQl9WUExFTiwJOCB9LAogCXsgIkhTX0VPRjEiLAlNVVNCX0hTX0VPRjEsCTggfSwKQEAgLTEwMyw2ICs5NSwxNiBAQAogCXsgIkRNQV9DTlRMY2g3IiwJMHgyNzQsCTE2IH0sCiAJeyAiRE1BX0FERFJjaDciLAkweDI3OCwJMzIgfSwKIAl7ICJETUFfQ09VTlRjaDciLAkweDI3QywJMzIgfSwKKyNpZm5kZWYgQ09ORklHX0JMQUNLRklOCisJeyAiQ29uZmlnRGF0YSIsCU1VU0JfQ09ORklHREFUQSw4IH0sCisJeyAiQmFiYmxlQ3RsIiwJTVVTQl9CQUJCTEVfQ1RMLDggfSwKKwl7ICJUeEZJRk9zeiIsCU1VU0JfVFhGSUZPU1osCTggfSwKKwl7ICJSeEZJRk9zeiIsCU1VU0JfUlhGSUZPU1osCTggfSwKKwl7ICJUeEZJRk9hZGQiLAlNVVNCX1RYRklGT0FERCwJMTYgfSwKKwl7ICJSeEZJRk9hZGQiLAlNVVNCX1JYRklGT0FERCwJMTYgfSwKKwl7ICJFUEluZm8iLAlNVVNCX0VQSU5GTywJOCB9LAorCXsgIlJBTUluZm8iLAlNVVNCX1JBTUlORk8sCTggfSwKKyNlbmRpZgogCXsgIH0JLyogVGVybWluYXRpbmcgRW50cnkgKi8KIH07CiAKQEAgLTE5NywzMCArMTk5LDMwIEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmICghc3RybmNtcChidWYsICJmb3JjZSBob3N0IiwgOSkpCisJaWYgKHN0cnN0YXJ0cyhidWYsICJmb3JjZSBob3N0IikpCiAJCXRlc3QgPSBNVVNCX1RFU1RfRk9SQ0VfSE9TVDsKIAotCWlmICghc3RybmNtcChidWYsICJmaWZvIGFjY2VzcyIsIDExKSkKKwlpZiAoc3Ryc3RhcnRzKGJ1ZiwgImZpZm8gYWNjZXNzIikpCiAJCXRlc3QgPSBNVVNCX1RFU1RfRklGT19BQ0NFU1M7CiAKLQlpZiAoIXN0cm5jbXAoYnVmLCAiZm9yY2UgZnVsbC1zcGVlZCIsIDE1KSkKKwlpZiAoc3Ryc3RhcnRzKGJ1ZiwgImZvcmNlIGZ1bGwtc3BlZWQiKSkKIAkJdGVzdCA9IE1VU0JfVEVTVF9GT1JDRV9GUzsKIAotCWlmICghc3RybmNtcChidWYsICJmb3JjZSBoaWdoLXNwZWVkIiwgMTUpKQorCWlmIChzdHJzdGFydHMoYnVmLCAiZm9yY2UgaGlnaC1zcGVlZCIpKQogCQl0ZXN0ID0gTVVTQl9URVNUX0ZPUkNFX0hTOwogCi0JaWYgKCFzdHJuY21wKGJ1ZiwgInRlc3QgcGFja2V0IiwgMTApKSB7CisJaWYgKHN0cnN0YXJ0cyhidWYsICJ0ZXN0IHBhY2tldCIpKSB7CiAJCXRlc3QgPSBNVVNCX1RFU1RfUEFDS0VUOwogCQltdXNiX2xvYWRfdGVzdHBhY2tldChtdXNiKTsKIAl9CiAKLQlpZiAoIXN0cm5jbXAoYnVmLCAidGVzdCBLIiwgNikpCisJaWYgKHN0cnN0YXJ0cyhidWYsICJ0ZXN0IEsiKSkKIAkJdGVzdCA9IE1VU0JfVEVTVF9LOwogCi0JaWYgKCFzdHJuY21wKGJ1ZiwgInRlc3QgSiIsIDYpKQorCWlmIChzdHJzdGFydHMoYnVmLCAidGVzdCBKIikpCiAJCXRlc3QgPSBNVVNCX1RFU1RfSjsKIAotCWlmICghc3RybmNtcChidWYsICJ0ZXN0IFNFMCBOQUsiLCAxMikpCisJaWYgKHN0cnN0YXJ0cyhidWYsICJ0ZXN0IFNFMCBOQUsiKSkKIAkJdGVzdCA9IE1VU0JfVEVTVF9TRTBfTkFLOwogCiAJbXVzYl93cml0ZWIobXVzYi0+bXJlZ3MsIE1VU0JfVEVTVE1PREUsIHRlc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKaW5kZXggMjNkNDc0ZC4uODgzYTlhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCkBAIC0yNjYzLDcgKzI2NjMsNiBAQAogCWlmIChtdXNiLT5wb3J0X21vZGUgPT0gTVVTQl9QT1JUX01PREVfR0FER0VUKQogCQlyZXR1cm47CiAJdXNiX3JlbW92ZV9oY2QobXVzYi0+aGNkKTsKLQltdXNiLT5oY2QgPSBOVUxMOwogfQogCiB2b2lkIG11c2JfaG9zdF9mcmVlKHN0cnVjdCBtdXNiICptdXNiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS1tdi11c2IuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHktbXYtdXNiLmMKaW5kZXggNjk5ZTM4Yy4uNjk3YTc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcGh5L3BoeS1tdi11c2IuYworKysgYi9kcml2ZXJzL3VzYi9waHkvcGh5LW12LXVzYi5jCkBAIC0zMzgsNyArMzM4LDYgQEAKIHN0YXRpYyB2b2lkIG12X290Z191cGRhdGVfc3RhdGUoc3RydWN0IG12X290ZyAqbXZvdGcpCiB7CiAJc3RydWN0IG12X290Z19jdHJsICpvdGdfY3RybCA9ICZtdm90Zy0+b3RnX2N0cmw7Ci0Jc3RydWN0IHVzYl9waHkgKnBoeSA9ICZtdm90Zy0+cGh5OwogCWludCBvbGRfc3RhdGUgPSBtdm90Zy0+cGh5Lm90Zy0+c3RhdGU7CiAKIAlzd2l0Y2ggKG9sZF9zdGF0ZSkgewpAQCAtODU4LDEwICs4NTcsMTAgQEAKIHsKIAlzdHJ1Y3QgbXZfb3RnICptdm90ZyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JaWYgKG12b3RnLT5waHkuc3RhdGUgIT0gT1RHX1NUQVRFX0JfSURMRSkgeworCWlmIChtdm90Zy0+cGh5Lm90Zy0+c3RhdGUgIT0gT1RHX1NUQVRFX0JfSURMRSkgewogCQlkZXZfaW5mbygmcGRldi0+ZGV2LAogCQkJICJPVEcgc3RhdGUgaXMgbm90IEJfSURMRSwgaXQgaXMgJWQhXG4iLAotCQkJIG12b3RnLT5waHkuc3RhdGUpOworCQkJIG12b3RnLT5waHkub3RnLT5zdGF0ZSk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS5jIGIvZHJpdmVycy91c2IvcGh5L3BoeS5jCmluZGV4IGI0MDY2YTAuLjJmOTczNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYworKysgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmMKQEAgLTU5LDYgKzU5LDkgQEAKIHsKIAlzdHJ1Y3QgdXNiX3BoeSAgKnBoeTsKIAorCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBoeSwgJnBoeV9saXN0LCBoZWFkKSB7CiAJCWlmIChub2RlICE9IHBoeS0+ZGV2LT5vZl9ub2RlKQogCQkJY29udGludWU7CkBAIC02Niw3ICs2OSw3IEBACiAJCXJldHVybiBwaHk7CiAJfQogCi0JcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRldm1fdXNiX3BoeV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKQpAQCAtMTkwLDEwICsxOTMsMTMgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGh5X2xvY2ssIGZsYWdzKTsKIAogCXBoeSA9IF9fb2ZfdXNiX2ZpbmRfcGh5KG5vZGUpOwotCWlmIChJU19FUlIocGh5KSB8fCAhdHJ5X21vZHVsZV9nZXQocGh5LT5kZXYtPmRyaXZlci0+b3duZXIpKSB7Ci0JCWlmICghSVNfRVJSKHBoeSkpCi0JCQlwaHkgPSBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCWlmIChJU19FUlIocGh5KSkgeworCQlkZXZyZXNfZnJlZShwdHIpOworCQlnb3RvIGVycjE7CisJfQogCisJaWYgKCF0cnlfbW9kdWxlX2dldChwaHktPmRldi0+ZHJpdmVyLT5vd25lcikpIHsKKwkJcGh5ID0gRVJSX1BUUigtRU5PREVWKTsKIAkJZGV2cmVzX2ZyZWUocHRyKTsKIAkJZ290byBlcnIxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCmluZGV4IDhkN2ZjNDguLjI5ZmExYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwpAQCAtNDYsNiArNDYsOCBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyB1c2JfY29uc29sZV9mYWtlX3R0eV9vcHMgPSB7Cit9OwogCiAvKgogICogVGhlIHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQgbGluZSB3b3JrcyBleGFjdGx5IGxpa2UgdGhlCkBAIC0xMzcsMTMgKzEzOSwxNyBAQAogCQkJCWdvdG8gcmVzZXRfb3Blbl9jb3VudDsKIAkJCX0KIAkJCWtyZWZfaW5pdCgmdHR5LT5rcmVmKTsKLQkJCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIHR0eSk7CiAJCQl0dHktPmRyaXZlciA9IHVzYl9zZXJpYWxfdHR5X2RyaXZlcjsKIAkJCXR0eS0+aW5kZXggPSBjby0+aW5kZXg7CisJCQlpbml0X2xkc2VtKCZ0dHktPmxkaXNjX3NlbSk7CisJCQlJTklUX0xJU1RfSEVBRCgmdHR5LT50dHlfZmlsZXMpOworCQkJa3JlZl9nZXQoJnR0eS0+ZHJpdmVyLT5rcmVmKTsKKwkJCXR0eS0+b3BzID0gJnVzYl9jb25zb2xlX2Zha2VfdHR5X29wczsKIAkJCWlmICh0dHlfaW5pdF90ZXJtaW9zKHR0eSkpIHsKIAkJCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJCWdvdG8gZnJlZV90dHk7CisJCQkJZ290byBwdXRfdHR5OwogCQkJfQorCQkJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgdHR5KTsKIAkJfQogCiAJCS8qIG9ubHkgY2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gaWYgdGhpcwpAQCAtMTYxLDcgKzE2Nyw3IEBACiAJCQlzZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKHR0eSwgcG9ydCwgJmR1bW15KTsKIAogCQkJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgTlVMTCk7Ci0JCQlrZnJlZSh0dHkpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0KIAkJc2V0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5wb3J0LmZsYWdzKTsKIAl9CkBAIC0xNzcsOCArMTgzLDggQEAKIAogIGZhaWw6CiAJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgTlVMTCk7Ci0gZnJlZV90dHk6Ci0Ja2ZyZWUodHR5KTsKKyBwdXRfdHR5OgorCXR0eV9rcmVmX3B1dCh0dHkpOwogIHJlc2V0X29wZW5fY291bnQ6CiAJcG9ydC0+cG9ydC5jb3VudCA9IDA7CiAJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwppbmRleCA2YzRlYjNjLi5mNGM1NmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC0xMjAsMTAgKzEyMCwxMiBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODVGOCkgfSwgLyogVmlydGVuaW8gUHJlb24zMiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODY2NCkgfSwgLyogQUMtU2VydmljZXMgQ0FOLUlGICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NjY1KSB9LCAvKiBBQy1TZXJ2aWNlcyBPQkQtSUYgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg4NzUpIH0sIC8qIENFTCBNZXNoQ29ubmVjdCBVU0IgU3RpY2sgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg4NTYpIH0sCS8qIENFTCBFTTM1NyBaaWdCZWUgVVNCIFN0aWNrIC0gTFIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg4NTcpIH0sCS8qIENFTCBFTTM1NyBaaWdCZWUgVVNCIFN0aWNrICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4OEE0KSB9LCAvKiBNTUIgTmV0d29ya3MgWmlnQmVlIFVTQiBEZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg4QTUpIH0sIC8qIFBsYW5ldCBJbm5vdmF0aW9uIEluZ2VuaSBaaWdCZWUgVVNCIERldmljZSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODk0NikgfSwgLyogS2V0cmEgTjEgV2lyZWxlc3MgSW50ZXJmYWNlICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4OTc3KSB9LAkvKiBDRUwgTWVzaFdvcmtzIERldktpdCBEZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjApIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjEpIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNzApIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IDFiZDE5MjIuLmNjZjFkZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAKIAlyZXMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYnNbaW5kZXhdLCBtZW1fZmxhZ3MpOwogCWlmIChyZXMpIHsKLQkJaWYgKHJlcyAhPSAtRVBFUk0pIHsKKwkJaWYgKHJlcyAhPSAtRVBFUk0gJiYgcmVzICE9IC1FTk9ERVYpIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiAlZFxuIiwKIAkJCQkJX19mdW5jX18sIHJlcyk7CkBAIC0zNzMsNyArMzczLDcgQEAKIAkJCQkJCQlfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBub256ZXJvIHVyYiBzdGF0dXM6ICVkXG4iLAorCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIG5vbnplcm8gdXJiIHN0YXR1czogJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJZ290byByZXN1Ym1pdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCAwNzdjNzE0Li5lMDdiMTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTQxMCw2ICs0MTAsOCBAQAogCX0KIAlwb3J0ID0gc2VyaWFsLT5wb3J0W21zZy0+cG9ydF07CiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICghcF9wcml2KQorCQlnb3RvIHJlc3VibWl0OwogCiAJLyogVXBkYXRlIGhhbmRzaGFraW5nIHBpbiBzdGF0ZSBpbmZvcm1hdGlvbiAqLwogCW9sZF9kY2Rfc3RhdGUgPSBwX3ByaXYtPmRjZF9zdGF0ZTsKQEAgLTQyMCw3ICs0MjIsNyBAQAogCiAJaWYgKG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUpCiAJCXR0eV9wb3J0X3R0eV9oYW5ndXAoJnBvcnQtPnBvcnQsIHRydWUpOwotCityZXN1Ym1pdDoKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyICE9IDApCkBAIC01MjcsNiArNTI5LDggQEAKIAl9CiAJcG9ydCA9IHNlcmlhbC0+cG9ydFttc2ctPnBvcnRdOwogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIXBfcHJpdikKKwkJZ290byByZXN1Ym1pdDsKIAogCS8qIFVwZGF0ZSBoYW5kc2hha2luZyBwaW4gc3RhdGUgaW5mb3JtYXRpb24gKi8KIAlvbGRfZGNkX3N0YXRlID0gcF9wcml2LT5kY2Rfc3RhdGU7CkBAIC01MzcsNyArNTQxLDcgQEAKIAogCWlmIChvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlICYmIG9sZF9kY2Rfc3RhdGUpCiAJCXR0eV9wb3J0X3R0eV9oYW5ndXAoJnBvcnQtPnBvcnQsIHRydWUpOwotCityZXN1Ym1pdDoKIAkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciAhPSAwKQpAQCAtNjA3LDYgKzYxMSw4IEBACiAJfQogCXBvcnQgPSBzZXJpYWwtPnBvcnRbbXNnLT5wb3J0TnVtYmVyXTsKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKCFwX3ByaXYpCisJCWdvdG8gcmVzdWJtaXQ7CiAKIAkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCiAJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOwpAQCAtNjE3LDcgKzYyMyw3IEBACiAKIAlpZiAob2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSAmJiBvbGRfZGNkX3N0YXRlKQogCQl0dHlfcG9ydF90dHlfaGFuZ3VwKCZwb3J0LT5wb3J0LCB0cnVlKTsKLQorcmVzdWJtaXQ6CiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciAhPSAwKQpAQCAtODU1LDYgKzg2MSw4IEBACiAKIAlwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOwogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIXBfcHJpdikKKwkJZ290byByZXN1Ym1pdDsKIAogCS8qIFVwZGF0ZSBoYW5kc2hha2luZyBwaW4gc3RhdGUgaW5mb3JtYXRpb24gKi8KIAlvbGRfZGNkX3N0YXRlID0gcF9wcml2LT5kY2Rfc3RhdGU7CkBAIC04NjUsNyArODczLDcgQEAKIAogCWlmIChvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlICYmIG9sZF9kY2Rfc3RhdGUpCiAJCXR0eV9wb3J0X3R0eV9oYW5ndXAoJnBvcnQtPnBvcnQsIHRydWUpOwotCityZXN1Ym1pdDoKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyICE9IDApCkBAIC05MjYsNiArOTM0LDggQEAKIAogCXBvcnQgPSBzZXJpYWwtPnBvcnRbbXNnLT5wb3J0XTsKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKCFwX3ByaXYpCisJCWdvdG8gcmVzdWJtaXQ7CiAKIAkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCiAJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOwpAQCAtOTM0LDcgKzk0NCw3IEBACiAKIAlpZiAob2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSAmJiBvbGRfZGNkX3N0YXRlKQogCQl0dHlfcG9ydF90dHlfaGFuZ3VwKCZwb3J0LT5wb3J0LCB0cnVlKTsKLQorcmVzdWJtaXQ6CiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDdhNGMyMWIuLmVmZGNlZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTIzNCw2ICsyMzQsOCBAQAogCiAjZGVmaW5lIFFVQUxDT01NX1ZFTkRPUl9JRAkJCTB4MDVDNgogCisjZGVmaW5lIFNJRVJSQV9WRU5ET1JfSUQJCQkweDExOTkKKwogI2RlZmluZSBDTU9URUNIX1ZFTkRPUl9JRAkJCTB4MTZkOAogI2RlZmluZSBDTU9URUNIX1BST0RVQ1RfNjAwMQkJCTB4NjAwMQogI2RlZmluZSBDTU9URUNIX1BST0RVQ1RfQ01VXzMwMAkJCTB4NjAwMgpAQCAtNTEyLDcgKzUxNCw3IEBACiAJCU9QVElPTl9CTEFDS0xJU1RfUkVTRVJWRURfSUYgPSAyCiB9OwogCi0jZGVmaW5lIE1BWF9CTF9OVU0gIDgKKyNkZWZpbmUgTUFYX0JMX05VTSAgMTEKIHN0cnVjdCBvcHRpb25fYmxhY2tsaXN0X2luZm8gewogCS8qIGJpdGZpZWxkIG9mIGludGVyZmFjZSBudW1iZXJzIGZvciBPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUCAqLwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2VuZHNldHVwOwpAQCAtNjAxLDYgKzYwMywxMSBAQAogCS5yZXNlcnZlZCA9IEJJVCgxKSB8IEJJVCg1KSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvIHNpZXJyYV9tYzczeHhfYmxhY2tsaXN0ID0geworCS5zZW5kc2V0dXAgPSBCSVQoMCkgfCBCSVQoMiksCisJLnJlc2VydmVkID0gQklUKDgpIHwgQklUKDEwKSB8IEJJVCgxMSksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3B0aW9uX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0xUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9SSUNPTEEpIH0sCkBAIC0xMDk4LDYgKzExMDUsOCBAQAogCXsgVVNCX0RFVklDRShRVUFMQ09NTV9WRU5ET1JfSUQsIDB4NjYxMyl9LCAvKiBPbmRhIEg2MDAvWlRFIE1GMzMwICovCiAJeyBVU0JfREVWSUNFKFFVQUxDT01NX1ZFTkRPUl9JRCwgMHgwMDIzKX0sIC8qIE9OWVggM0cgZGV2aWNlICovCiAJeyBVU0JfREVWSUNFKFFVQUxDT01NX1ZFTkRPUl9JRCwgMHg5MDAwKX0sIC8qIFNJTUNvbSBTSU01MjE4ICovCisJeyBVU0JfREVWSUNFX0lOVEVSRkFDRV9DTEFTUyhTSUVSUkFfVkVORE9SX0lELCAweDY4YzAsIDB4ZmYpLAorCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZzaWVycmFfbWM3M3h4X2JsYWNrbGlzdCB9LCAvKiBNQzczeHggKi8KIAl7IFVTQl9ERVZJQ0UoQ01PVEVDSF9WRU5ET1JfSUQsIENNT1RFQ0hfUFJPRFVDVF82MDAxKSB9LAogCXsgVVNCX0RFVklDRShDTU9URUNIX1ZFTkRPUl9JRCwgQ01PVEVDSF9QUk9EVUNUX0NNVV8zMDApIH0sCiAJeyBVU0JfREVWSUNFKENNT1RFQ0hfVkVORE9SX0lELCBDTU9URUNIX1BST0RVQ1RfNjAwMyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCmluZGV4IGNiM2UxNDcuLjljNjM4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCkBAIC0xNDIsNyArMTQyLDYgQEAKIAl7REVWSUNFX1NXSSgweDBmM2QsIDB4NjhhMil9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3NzAwICovCiAJe0RFVklDRV9TV0koMHgxMTRmLCAweDY4YTIpfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNzc1MCAqLwogCXtERVZJQ0VfU1dJKDB4MTE5OSwgMHg2OGEyKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzc3MTAgKi8KLQl7REVWSUNFX1NXSSgweDExOTksIDB4NjhjMCl9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3M3h4ICovCiAJe0RFVklDRV9TV0koMHgxMTk5LCAweDkwMWMpfSwJLyogU2llcnJhIFdpcmVsZXNzIEVNNzcwMCAqLwogCXtERVZJQ0VfU1dJKDB4MTE5OSwgMHg5MDFmKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBFTTczNTUgKi8KIAl7REVWSUNFX1NXSSgweDExOTksIDB4OTA0MCl9LAkvKiBTaWVycmEgV2lyZWxlc3MgTW9kZW0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLWRldGVjdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMtZGV0ZWN0LmgKaW5kZXggOGE2ZjM3MS4uOTg5M2Q2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMtZGV0ZWN0LmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMtZGV0ZWN0LmgKQEAgLTY5LDE2ICs2OSwzOSBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogQVNNMTA1MSBhbmQgb2xkZXIgQVNNMTA1MyBkZXZpY2VzIGhhdmUgdGhlIHNhbWUgdXNiLWlkLCBhbmQgVUFTIGlzCi0JICogYnJva2VuIG9uIHRoZSBBU00xMDUxLCB1c2UgdGhlIG51bWJlciBvZiBzdHJlYW1zIHRvIGRpZmZlcmVudGlhdGUuCi0JICogTmV3IEFTTTEwNTMtcyBhbHNvIHN1cHBvcnQgMzIgc3RyZWFtcywgYnV0IGhhdmUgYSBkaWZmZXJlbnQgcHJvZC1pZC4KKwkgKiBBU01lZGlhIGhhcyBhIG51bWJlciBvZiB1c2IzIHRvIHNhdGEgYnJpZGdlIGNoaXBzLCBhdCB0aGUgdGltZSBvZgorCSAqIHRoaXMgd3JpdGluZyB0aGUgZm9sbG93aW5nIHZlcnNpb25zIGV4aXN0OgorCSAqIEFTTTEwNTEgLSBubyB1YXMgc3VwcG9ydCB2ZXJzaW9uCisJICogQVNNMTA1MSAtIHdpdGggYnJva2VuICgqKSB1YXMgc3VwcG9ydAorCSAqIEFTTTEwNTMgLSB3aXRoIHdvcmtpbmcgdWFzIHN1cHBvcnQKKwkgKiBBU00xMTUzIC0gd2l0aCB3b3JraW5nIHVhcyBzdXBwb3J0CisJICoKKwkgKiBEZXZpY2VzIHdpdGggdGhlc2UgY2hpcHMgcmUtdXNlIGEgbnVtYmVyIG9mIGRldmljZS1pZHMgb3ZlciB0aGUKKwkgKiBlbnRpcmUgbGluZSwgc28gdGhlIGRldmljZS1pZCBpcyB1c2VsZXNzIHRvIGRldGVybWluZSBpZiB3ZSdyZQorCSAqIGRlYWxpbmcgd2l0aCBhbiBBU00xMDUxICh3aGljaCB3ZSB3YW50IHRvIGF2b2lkKS4KKwkgKgorCSAqIFRoZSBBU00xMTUzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IGNvbmZpZy5NYXhQb3dlciA9PSAwLAorCSAqIHdoZXJlIGFzIHRoZSBBU00xMDV4IG1vZGVscyBoYXZlIGNvbmZpZy5NYXhQb3dlciA9PSAzNi4KKwkgKgorCSAqIERpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHRoZSBBU00xMDUzIGFuZCBBU00xMDUxIGlzIHRyaWNraWVyLCB3aGVuCisJICogY29ubmVjdGVkIG92ZXIgVVNCLTMgd2UgY2FuIGxvb2sgYXQgdGhlIG51bWJlciBvZiBzdHJlYW1zIHN1cHBvcnRlZCwKKwkgKiBBU00xMDUxIHN1cHBvcnRzIDMyIHN0cmVhbXMsIHdoZXJlIGFzIGVhcmx5IEFTTTEwNTMgdmVyc2lvbnMgc3VwcG9ydAorCSAqIDE2IHN0cmVhbXMsIG5ld2VyIEFTTTEwNTMtcyBhbHNvIHN1cHBvcnQgMzIgc3RyZWFtcywgYnV0IGhhdmUgYQorCSAqIGRpZmZlcmVudCBwcm9kLWlkLgorCSAqCisJICogKCopIEFTTTEwNTEgY2hpcHMgZG8gd29yayB3aXRoIFVBUyB3aXRoIHNvbWUgZGlza3MgKHdpdGggdGhlCisJICogICAgIFVTX0ZMX05PX1JFUE9SVF9PUENPREVTIHF1aXJrKSwgYnV0IGFyZSBicm9rZW4gd2l0aCBvdGhlciBkaXNrcwogCSAqLwogCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDE3NGMgJiYKLQkJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDU1YWEpIHsKLQkJaWYgKHVkZXYtPnNwZWVkIDwgVVNCX1NQRUVEX1NVUEVSKSB7CisJCQkobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NTEwNiB8fAorCQkJIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDU1YWEpKSB7CisJCWlmICh1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk1heFBvd2VyID09IDApIHsKKwkJCS8qIEFTTTExNTMsIGRvIG5vdGhpbmcgKi8KKwkJfSBlbHNlIGlmICh1ZGV2LT5zcGVlZCA8IFVTQl9TUEVFRF9TVVBFUikgewogCQkJLyogTm8gc3RyZWFtcyBpbmZvLCBhc3N1bWUgQVNNMTA1MSAqLwogCQkJZmxhZ3MgfD0gVVNfRkxfSUdOT1JFX1VBUzsKIAkJfSBlbHNlIGlmICh1c2Jfc3NfbWF4X3N0cmVhbXMoJmVwc1sxXS0+c3NfZXBfY29tcCkgPT0gMzIpIHsKKwkJCS8qIFBvc3NpYmx5IGFuIEFTTTEwNTEsIGRpc2FibGUgdWFzICovCiAJCQlmbGFncyB8PSBVU19GTF9JR05PUkVfVUFTOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggMTFjN2E5Ni4uZDY4NGI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC01MDcsNyArNTA3LDcgQEAKIFVOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMGYsIDB4MDAwMCwgMHg5OTk5LAogCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCiAJCSJlVVNCIFNDU0kgQWRhcHRlciAoQnVzIFBvd2VyZWQpIiwKLQkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsCisJCVVTQl9TQ19TQ1NJLCBVU0JfUFJfQlVMSywgdXNiX3N0b3JfZXVzY3NpX2luaXQsCiAJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwKIAogVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDEwMSwgMHgwMjAwLCAweDAyMDAsCkBAIC0xOTk1LDYgKzE5OTUsMTMgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgfCBVU19GTF9TQU5FX1NFTlNFICksCiAKKy8qIFJlcG9ydGVkIGJ5IERtaXRyeSBOZXpoZXZlbmtvIDxkaW9uQGRpb24ub3JnLnVhPiAqLworVU5VU1VBTF9ERVYoICAweDE1MmQsIDB4MjU2NiwgMHgwMTE0LCAweDAxMTQsCisJCSJKTWljcm9uIiwKKwkJIlVTQiB0byBBVEEvQVRBUEkgQnJpZGdlIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfQlJPS0VOX0ZVQSApLAorCiAvKiBFbnRyZWdhIFRlY2hub2xvZ2llcyBVMS1TQzI1IChsYXRlciBYaXJjb20gUG9ydEdlYXIgUEdTQ1NJKQogICogYW5kIE1hYyBVU0IgRG9jayBVU0ItU0NTSSAqLwogVU5VU1VBTF9ERVYoICAweDE2NDUsIDB4MDAwNywgMHgwMTAwLCAweDAxMzMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdWFzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdWFzLmgKaW5kZXggMThhMjgzZC4uZGJjMDBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3Vhcy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91YXMuaApAQCAtNDAsNiArNDAsMTYgQEAKICAqIGFuZCBkb24ndCBmb3JnZXQgdG8gQ0M6IHRoZSBVU0IgZGV2ZWxvcG1lbnQgbGlzdCA8bGludXgtdXNiQHZnZXIua2VybmVsLm9yZz4KICAqLwogCisvKgorICogQXByaWNvcm4gVVNCMyBkb25nbGUgc29tZXRpbWVzIHJldHVybnMgIlVTQlNVU0JTVVNCUyIgaW4gcmVzcG9uc2UgdG8gU0NTSQorICogY29tbWFuZHMgaW4gVUFTIG1vZGUuICBPYnNlcnZlZCB3aXRoIHRoZSAxLjI4IGZpcm13YXJlOyBhcmUgdGhlcmUgb3RoZXJzPworICovCitVTlVTVUFMX0RFVigweDA5ODQsIDB4MDMwMSwgMHgwMTI4LCAweDAxMjgsCisJCSJBcHJpY29ybiIsCisJCSIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfVUFTKSwKKwogLyogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD03OTUxMSAqLwogVU5VU1VBTF9ERVYoMHgwYmMyLCAweDIzMTIsIDB4MDAwMCwgMHg5OTk5LAogCQkiU2VhZ2F0ZSIsCkBAIC02OCw2ICs3OCwyMCBAQAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9OT19BVEFfMVgpLAogCisvKiBSZXBvcnRlZC1ieTogTWFyY2luIFphasSFY3prb3dza2kgPG1zenBha0B3cC5wbD4gKi8KK1VOVVNVQUxfREVWKDB4MGJjMiwgMHhhMDEzLCAweDAwMDAsIDB4OTk5OSwKKwkJIlNlYWdhdGUiLAorCQkiQmFja3VwIFBsdXMiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9OT19BVEFfMVgpLAorCisvKiBSZXBvcnRlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4gKi8KK1VOVVNVQUxfREVWKDB4MGJjMiwgMHhhMGE0LCAweDAwMDAsIDB4OTk5OSwKKwkJIlNlYWdhdGUiLAorCQkiQmFja3VwIFBsdXMgRGVzayIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX0FUQV8xWCksCisKIC8qIGh0dHBzOi8vYmJzLmFyY2hsaW51eC5vcmcvdmlld3RvcGljLnBocD9pZD0xODMxOTAgKi8KIFVOVVNVQUxfREVWKDB4MGJjMiwgMHhhYjIwLCAweDAwMDAsIDB4OTk5OSwKIAkJIlNlYWdhdGUiLApAQCAtODIsNiArMTA2LDEzIEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PX0FUQV8xWCksCiAKKy8qIFJlcG9ydGVkLWJ5OiBHLiBSaWNoYXJkIEJlbGxhbXkgPHJiZWxsYW15QHB0ZXJhZGlnbS5jb20+ICovCitVTlVTVUFMX0RFVigweDBiYzIsIDB4YWIyYSwgMHgwMDAwLCAweDk5OTksCisJCSJTZWFnYXRlIiwKKwkJIkJVUCBGYXN0IEhERCIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX0FUQV8xWCksCisKIC8qIFJlcG9ydGVkLWJ5OiBDbGF1ZGlvIEJpenphcnJpIDxjbGF1ZGlvLmJpenphcnJpQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKDB4MTUyZCwgMHgwNTY3LCAweDAwMDAsIDB4OTk5OSwKIAkJIkpNaWNyb24iLApAQCAtODksMTQgKzEyMCw2IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PX1JFUE9SVF9PUENPREVTKSwKIAotLyogTW9zdCBBU00xMDUxIGJhc2VkIGRldmljZXMgaGF2ZSBpc3N1ZXMgd2l0aCB1YXMsIGJsYWNrbGlzdCB0aGVtIGFsbCAqLwotLyogUmVwb3J0ZWQtYnk6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+ICovCi1VTlVTVUFMX0RFVigweDE3NGMsIDB4NTEwNiwgMHgwMDAwLCAweDk5OTksCi0JCSJBU01lZGlhIiwKLQkJIkFTTTEwNTEiLAotCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAotCQlVU19GTF9JR05PUkVfVUFTKSwKLQogLyogUmVwb3J0ZWQtYnk6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+ICovCiBVTlVTVUFMX0RFVigweDIxMDksIDB4MDcxMSwgMHgwMDAwLCAweDk5OTksCiAJCSJWSUEiLApAQCAtMTA0LDkgKzEyNywyMyBAQAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9OT19BVEFfMVgpLAogCisvKiBSZXBvcnRlZC1ieTogVGFrZW8gTmFrYXlhbWEgPGphdmhlcmFAZ214LmNvbT4gKi8KK1VOVVNVQUxfREVWKDB4MzU3ZCwgMHg3Nzg4LCAweDAwMDAsIDB4OTk5OSwKKwkJIkpNaWNyb24iLAorCQkiSk1TNTY2IiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfTk9fUkVQT1JUX09QQ09ERVMpLAorCiAvKiBSZXBvcnRlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4gKi8KIFVOVVNVQUxfREVWKDB4NDk3MSwgMHgxMDEyLCAweDAwMDAsIDB4OTk5OSwKIAkJIkhpdGFjaGkiLAogCQkiRXh0ZXJuYWwgSEREIiwKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1VBUyksCisKKy8qIFJlcG9ydGVkLWJ5OiBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQHJlZGhhdC5jb20+ICovCitVTlVTVUFMX0RFVigweDQ5NzEsIDB4ODAxNywgMHgwMDAwLCAweDk5OTksCisJCSJTaW1wbGVUZWNoIiwKKwkJIkV4dGVybmFsIEhERCIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX1JFUE9SVF9PUENPREVTKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYwppbmRleCAyNTUyMDFmLi43Y2MwMTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jCkBAIC04NDAsMTMgKzg0MCwxMSBAQAogCiBzdGF0aWMgaW50IHZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JdTggdHlwZTsKIAlzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICp2ZGV2OwogCXN0cnVjdCBpb21tdV9ncm91cCAqZ3JvdXA7CiAJaW50IHJldDsKIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9IRUFERVJfVFlQRSwgJnR5cGUpOwotCWlmICgodHlwZSAmIFBDSV9IRUFERVJfVFlQRSkgIT0gUENJX0hFQURFUl9UWVBFX05PUk1BTCkKKwlpZiAocGRldi0+aGRyX3R5cGUgIT0gUENJX0hFQURFUl9UWVBFX05PUk1BTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlncm91cCA9IGlvbW11X2dyb3VwX2dldCgmcGRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jCmluZGV4IDE0NDE5YTguLmQ0MTVkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmMKKysrIGIvZHJpdmVycy92aG9zdC9uZXQuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAJCSsraGVhZGNvdW50OwogCQlzZWcgKz0gaW47CiAJfQotCWhlYWRzW2hlYWRjb3VudCAtIDFdLmxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4gLSBkYXRhbGVuKTsKKwloZWFkc1toZWFkY291bnQgLSAxXS5sZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuICsgZGF0YWxlbik7CiAJKmlvdmNvdW50ID0gc2VnOwogCWlmICh1bmxpa2VseShsb2cpKQogCQkqbG9nX251bSA9IG5sb2dzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwppbmRleCAwMWMwMWNiLi5kNjk1YjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYworKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtOTExLDYgKzkxMSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZob3N0X3Njc2lfdG9fdGNtX2F0dHIoaW50IGF0dHIpCit7CisJc3dpdGNoIChhdHRyKSB7CisJY2FzZSBWSVJUSU9fU0NTSV9TX1NJTVBMRToKKwkJcmV0dXJuIFRDTV9TSU1QTEVfVEFHOworCWNhc2UgVklSVElPX1NDU0lfU19PUkRFUkVEOgorCQlyZXR1cm4gVENNX09SREVSRURfVEFHOworCWNhc2UgVklSVElPX1NDU0lfU19IRUFEOgorCQlyZXR1cm4gVENNX0hFQURfVEFHOworCWNhc2UgVklSVElPX1NDU0lfU19BQ0E6CisJCXJldHVybiBUQ01fQUNBX1RBRzsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIFRDTV9TSU1QTEVfVEFHOworfQorCiBzdGF0aWMgdm9pZCB0Y21fdmhvc3Rfc3VibWlzc2lvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdGNtX3Zob3N0X2NtZCAqY21kID0KQEAgLTkzNiw5ICs5NTMsMTAgQEAKIAlyYyA9IHRhcmdldF9zdWJtaXRfY21kX21hcF9zZ2xzKHNlX2NtZCwgdHZfbmV4dXMtPnR2bl9zZV9zZXNzLAogCQkJY21kLT50dmNfY2RiLCAmY21kLT50dmNfc2Vuc2VfYnVmWzBdLAogCQkJY21kLT50dmNfbHVuLCBjbWQtPnR2Y19leHBfZGF0YV9sZW4sCi0JCQljbWQtPnR2Y190YXNrX2F0dHIsIGNtZC0+dHZjX2RhdGFfZGlyZWN0aW9uLAotCQkJVEFSR0VUX1NDRl9BQ0tfS1JFRiwgc2dfcHRyLCBjbWQtPnR2Y19zZ2xfY291bnQsCi0JCQlOVUxMLCAwLCBzZ19wcm90X3B0ciwgY21kLT50dmNfcHJvdF9zZ2xfY291bnQpOworCQkJdmhvc3Rfc2NzaV90b190Y21fYXR0cihjbWQtPnR2Y190YXNrX2F0dHIpLAorCQkJY21kLT50dmNfZGF0YV9kaXJlY3Rpb24sIFRBUkdFVF9TQ0ZfQUNLX0tSRUYsCisJCQlzZ19wdHIsIGNtZC0+dHZjX3NnbF9jb3VudCwgTlVMTCwgMCwgc2dfcHJvdF9wdHIsCisJCQljbWQtPnR2Y19wcm90X3NnbF9jb3VudCk7CiAJaWYgKHJjIDwgMCkgewogCQl0cmFuc3BvcnRfc2VuZF9jaGVja19jb25kaXRpb25fYW5kX3NlbnNlKHNlX2NtZCwKIAkJCQlUQ01fTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKaW5kZXggZWQ3MWI1My4uY2I4MDdkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtNzEzLDkgKzcxMywxMyBAQAogCQkJciA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoKGEuYXZhaWxfdXNlcl9hZGRyICYgKHNpemVvZiAqdnEtPmF2YWlsLT5yaW5nIC0gMSkpIHx8Ci0JCSAgICAoYS51c2VkX3VzZXJfYWRkciAmIChzaXplb2YgKnZxLT51c2VkLT5yaW5nIC0gMSkpIHx8Ci0JCSAgICAoYS5sb2dfZ3Vlc3RfYWRkciAmIChzaXplb2YgKnZxLT51c2VkLT5yaW5nIC0gMSkpKSB7CisKKwkJLyogTWFrZSBzdXJlIGl0J3Mgc2FmZSB0byBjYXN0IHBvaW50ZXJzIHRvIHZyaW5nIHR5cGVzLiAqLworCQlCVUlMRF9CVUdfT04oX19hbGlnbm9mX18gKnZxLT5hdmFpbCA+IFZSSU5HX0FWQUlMX0FMSUdOX1NJWkUpOworCQlCVUlMRF9CVUdfT04oX19hbGlnbm9mX18gKnZxLT51c2VkID4gVlJJTkdfVVNFRF9BTElHTl9TSVpFKTsKKwkJaWYgKChhLmF2YWlsX3VzZXJfYWRkciAmIChWUklOR19BVkFJTF9BTElHTl9TSVpFIC0gMSkpIHx8CisJCSAgICAoYS51c2VkX3VzZXJfYWRkciAmIChWUklOR19VU0VEX0FMSUdOX1NJWkUgLSAxKSkgfHwKKwkJICAgIChhLmxvZ19ndWVzdF9hZGRyICYgKHNpemVvZih1NjQpIC0gMSkpKSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2Jyb2Fkc2hlZXRmYi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9icm9hZHNoZWV0ZmIuYwppbmRleCAxYzI5YmQxLi4wZTVmZGUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9icm9hZHNoZWV0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2Jyb2Fkc2hlZXRmYi5jCkBAIC02MzYsNyArNjM2LDcgQEAKIAkJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9yZWFkX3JhbmdlKHBhciwgc3RhcnRfc2VjdG9yX2FkZHIsCiAJCQkJCQlkYXRhX3N0YXJ0X2FkZHIsIHNlY3Rvcl9idWZmZXIpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gb3V0OwogCX0KIAogCS8qIG5vdyB3ZSBjb3B5IG91ciBkYXRhIGludG8gdGhlIHJpZ2h0IHBsYWNlIGluIHRoZSBzZWN0b3IgYnVmZmVyICovCkBAIC02NTcsNyArNjU3LDcgQEAKIAkJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9yZWFkX3JhbmdlKHBhciwgdGFpbF9zdGFydF9hZGRyLAogCQkJdGFpbF9sZW4sIHNlY3Rvcl9idWZmZXIgKyB0YWlsX3N0YXJ0X2FkZHIpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gb3V0OwogCX0KIAogCS8qIGlmIHdlIGdvdCBoZXJlIHdlIGhhdmUgdGhlIGZ1bGwgc2VjdG9yIHRoYXQgd2Ugd2FudCB0byByZXdyaXRlLiAqLwpAQCAtNjY1LDExICs2NjUsMTMgQEAKIAkvKiBmaXJzdCBlcmFzZSB0aGUgc2VjdG9yICovCiAJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9lcmFzZV9zZWN0b3IocGFyLCBzdGFydF9zZWN0b3JfYWRkcik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKIAkvKiBub3cgd3JpdGUgaXQgKi8KIAllcnIgPSBicm9hZHNoZWV0X3NwaWZsYXNoX3dyaXRlX3NlY3RvcihwYXIsIHN0YXJ0X3NlY3Rvcl9hZGRyLAogCQkJCQlzZWN0b3JfYnVmZmVyLCBzZWN0b3Jfc2l6ZSk7CitvdXQ6CisJa2ZyZWUoc2VjdG9yX2J1ZmZlcik7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2RlZmlvLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfZGVmaW8uYwppbmRleCA5MDBhYTRlLi5kNmNhYjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfZGVmaW8uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfZGVmaW8uYwpAQCAtODMsOSArODMsMTAgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmluZm8tPmRlZmVycmVkX3dvcmspOwogCiAJLyogUnVuIGl0IGltbWVkaWF0ZWx5ICovCi0JZXJyID0gc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpbmZvLT5kZWZlcnJlZF93b3JrLCAwKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmluZm8tPmRlZmVycmVkX3dvcmssIDApOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZiX2RlZmVycmVkX2lvX2ZzeW5jKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvaGRtaV9wbGwuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2hkbWlfcGxsLmMKaW5kZXggODdhY2NkYi4uYWM4M2VmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvaGRtaV9wbGwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9oZG1pX3BsbC5jCkBAIC0xMzIsNyArMTMyLDYgQEAKIAkubVhfbWF4ID0gMTI3LAogCS5maW50X21pbiA9IDUwMDAwMCwKIAkuZmludF9tYXggPSAyNTAwMDAwLAotCS5jbGtkY29fbWF4ID0gMTgwMDAwMDAwMCwKIAogCS5jbGtkY29fbWluID0gNTAwMDAwMDAwLAogCS5jbGtkY29fbG93ID0gMTAwMDAwMDAwMCwKQEAgLTE1Niw3ICsxNTUsNiBAQAogCS5tWF9tYXggPSAxMjcsCiAJLmZpbnRfbWluID0gNjIwMDAwLAogCS5maW50X21heCA9IDI1MDAwMDAsCi0JLmNsa2Rjb19tYXggPSAxODAwMDAwMDAwLAogCiAJLmNsa2Rjb19taW4gPSA3NTAwMDAwMDAsCiAJLmNsa2Rjb19sb3cgPSAxNTAwMDAwMDAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvcGxsLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9wbGwuYwppbmRleCA1MGJjNjJjNS4uMzM1ZmZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvcGxsLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvcGxsLmMKQEAgLTk3LDcgKzk3LDggQEAKIAlyZXR1cm4gMDsKIAogZXJyX2VuYWJsZToKLQlyZWd1bGF0b3JfZGlzYWJsZShwbGwtPnJlZ3VsYXRvcik7CisJaWYgKHBsbC0+cmVndWxhdG9yKQorCQlyZWd1bGF0b3JfZGlzYWJsZShwbGwtPnJlZ3VsYXRvcik7CiBlcnJfcmVnOgogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwbGwtPmNsa2luKTsKIAlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3NkaS5jIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3Mvc2RpLmMKaW5kZXggZDUxYTk4MzAuLjVjMmNjYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3NkaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3NkaS5jCkBAIC0zNDIsNiArMzQyLDggQEAKIAlvdXQtPm91dHB1dF90eXBlID0gT01BUF9ESVNQTEFZX1RZUEVfU0RJOwogCW91dC0+bmFtZSA9ICJzZGkuMCI7CiAJb3V0LT5kaXNwY19jaGFubmVsID0gT01BUF9EU1NfQ0hBTk5FTF9MQ0Q7CisJLyogV2UgaGF2ZSBTREkgb25seSBvbiBPTUFQMywgd2hlcmUgaXQncyBvbiBwb3J0IDEgKi8KKwlvdXQtPnBvcnRfbnVtID0gMTsKIAlvdXQtPm9wcy5zZGkgPSAmc2RpX29wczsKIAlvdXQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvc2ltcGxlZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvc2ltcGxlZmIuYwppbmRleCA5MmNhYzgwLi4xMDg1YzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3NpbXBsZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9zaW1wbGVmYi5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBvZl9jaG9zZW4pIHsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0ZfQUREUkVTUykgJiYgb2ZfY2hvc2VuKSB7CiAJCWZvcl9lYWNoX2NoaWxkX29mX25vZGUob2ZfY2hvc2VuLCBucCkgewogCQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAic2ltcGxlLWZyYW1lYnVmZmVyIikpCiAJCQkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nby5jIGIvZHJpdmVycy92aWRlby9sb2dvL2xvZ28uYwppbmRleCA5NDBjZDE5Li4xMGZiZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nby5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvLmMKQEAgLTIxLDYgKzIxLDIxIEBACiBtb2R1bGVfcGFyYW0obm9sb2dvLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9sb2dvLCAiRGlzYWJsZXMgc3RhcnR1cCBsb2dvIik7CiAKKy8qCisgKiBMb2dvcyBhcmUgbG9jYXRlZCBpbiB0aGUgaW5pdGRhdGEsIGFuZCB3aWxsIGJlIGZyZWVkIGluIGtlcm5lbF9pbml0LgorICogVXNlIGxhdGVfaW5pdCB0byBtYXJrIHRoZSBsb2dvcyBhcyBmcmVlZCB0byBwcmV2ZW50IGFueSBmdXJ0aGVyIHVzZS4KKyAqLworCitzdGF0aWMgYm9vbCBsb2dvc19mcmVlZDsKKworc3RhdGljIGludCBfX2luaXQgZmJfbG9nb19sYXRlX2luaXQodm9pZCkKK3sKKwlsb2dvc19mcmVlZCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoZmJfbG9nb19sYXRlX2luaXQpOworCiAvKiBsb2dvJ3MgYXJlIG1hcmtlZCBfX2luaXRkYXRhLiBVc2UgX19pbml0X3JlZm9rIHRvIHRlbGwKICAqIG1vZHBvc3QgdGhhdCBpdCBpcyBpbnRlbmRlZCB0aGF0IHRoaXMgZnVuY3Rpb24gdXNlcyBkYXRhCiAgKiBtYXJrZWQgX19pbml0ZGF0YS4KQEAgLTI5LDcgKzQ0LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgbGludXhfbG9nbyAqbG9nbyA9IE5VTEw7CiAKLQlpZiAobm9sb2dvKQorCWlmIChub2xvZ28gfHwgbG9nb3NfZnJlZWQpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKGRlcHRoID49IDEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jCmluZGV4IDJlZjk1MjkuLjk3NTZmMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYwpAQCAtMjgyLDYgKzI4Miw3IEBACiAKIAl2cF9mcmVlX3ZlY3RvcnModmRldik7CiAJa2ZyZWUodnBfZGV2LT52cXMpOworCXZwX2Rldi0+dnFzID0gTlVMTDsKIH0KIAogc3RhdGljIGludCB2cF90cnlfdG9fZmluZF92cXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHVuc2lnbmVkIG52cXMsCkBAIC00MjEsMTUgKzQyMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgdmlydGlvX3BjaV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpfZCkKLXsKLQkvKgotCSAqIE5vIG5lZWQgZm9yIGEgcmVsZWFzZSBtZXRob2QgYXMgd2UgYWxsb2NhdGUvZnJlZQotCSAqIGFsbCBkZXZpY2VzIHRvZ2V0aGVyIHdpdGggdGhlIHBjaSBkZXZpY2VzLgotCSAqIFByb3ZpZGUgYW4gZW1wdHkgb25lIHRvIGF2b2lkIGdldHRpbmcgYSB3YXJuaW5nIGZyb20gY29yZS4KLQkgKi8KLX0KLQogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCB2aXJ0aW9fcGNpX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5oIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uaAppbmRleCBhZGRkYjY0Li41YTQ5NzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmgKQEAgLTEyNiw3ICsxMjYsNiBAQAogICogLSBpZ25vcmUgdGhlIGFmZmluaXR5IHJlcXVlc3QgaWYgd2UncmUgdXNpbmcgSU5UWAogICovCiBpbnQgdnBfc2V0X3ZxX2FmZmluaXR5KHN0cnVjdCB2aXJ0cXVldWUgKnZxLCBpbnQgY3B1KTsKLXZvaWQgdmlydGlvX3BjaV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICopOwogCiBpbnQgdmlydGlvX3BjaV9sZWdhY3lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCiAJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jCmluZGV4IDZjNzZmMGYuLmE1NDg2ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYwpAQCAtMjExLDYgKzIxMSwxNyBAQAogCS5zZXRfdnFfYWZmaW5pdHkgPSB2cF9zZXRfdnFfYWZmaW5pdHksCiB9OwogCitzdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKl9kKQoreworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2ID0gZGV2X3RvX3ZpcnRpbyhfZCk7CisJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UodmRldik7CisKKwkvKiBBcyBzdHJ1Y3QgZGV2aWNlIGlzIGEga29iamVjdCwgaXQncyBub3Qgc2FmZSB0bworCSAqIGZyZWUgdGhlIG1lbW9yeSAoaW5jbHVkaW5nIHRoZSByZWZlcmVuY2UgY291bnRlciBpdHNlbGYpCisJICogdW50aWwgaXQncyByZWxlYXNlIGNhbGxiYWNrLiAqLworCWtmcmVlKHZwX2Rldik7Cit9CisKIC8qIHRoZSBQQ0kgcHJvYmluZyBmdW5jdGlvbiAqLwogaW50IHZpcnRpb19wY2lfbGVnYWN5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAogCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKQEAgLTMwMiw1ICszMTMsNCBAQAogCXBjaV9pb3VubWFwKHBjaV9kZXYsIHZwX2Rldi0+aW9hZGRyKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaV9kZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKLQlrZnJlZSh2cF9kZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9jYWRlbmNlX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9jYWRlbmNlX3dkdC5jCmluZGV4IDU5MjdjMGEuLmJjZmQyYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvY2FkZW5jZV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2NhZGVuY2Vfd2R0LmMKQEAgLTUwMyw3ICs1MDMsNiBAQAogCS5zaHV0ZG93bgk9IGNkbnNfd2R0X3NodXRkb3duLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJjZG5zLXdkdCIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBjZG5zX3dkdF9vZl9tYXRjaCwKIAkJLnBtCT0gJmNkbnNfd2R0X3BtX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pbXgyX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pbXgyX3dkdC5jCmluZGV4IGQ2YWRkNTEuLjUxNDJiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaW14Ml93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2lteDJfd2R0LmMKQEAgLTUyLDYgKzUyLDggQEAKICNkZWZpbmUgSU1YMl9XRFRfV1JTUgkJMHgwNAkJLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lIElNWDJfV0RUX1dSU1JfVE9VVAkoMSA8PCAxKQkvKiAtPiBSZXNldCBkdWUgdG8gVGltZW91dCAqLwogCisjZGVmaW5lIElNWDJfV0RUX1dNQ1IJCTB4MDgJCS8qIE1pc2MgUmVnaXN0ZXIgKi8KKwogI2RlZmluZSBJTVgyX1dEVF9NQVhfVElNRQkxMjgKICNkZWZpbmUgSU1YMl9XRFRfREVGQVVMVF9USU1FCTYwCQkvKiBpbiBzZWNvbmRzICovCiAKQEAgLTI3NCw2ICsyNzYsMTMgQEAKIAogCWlteDJfd2R0X3BpbmdfaWZfYWN0aXZlKHdkb2cpOwogCisJLyoKKwkgKiBEaXNhYmxlIHRoZSB3YXRjaGRvZyBwb3dlciBkb3duIGNvdW50ZXIgYXQgYm9vdC4gT3RoZXJ3aXNlIHRoZSBwb3dlcgorCSAqIGRvd24gY291bnRlciB3aWxsIHB1bGwgZG93biB0aGUgI1dET0cgaW50ZXJydXB0IGxpbmUgZm9yIG9uZSBjbG9jaworCSAqIGN5Y2xlLgorCSAqLworCXJlZ21hcF93cml0ZSh3ZGV2LT5yZWdtYXAsIElNWDJfV0RUX1dNQ1IsIDApOworCiAJcmV0ID0gd2F0Y2hkb2dfcmVnaXN0ZXJfZGV2aWNlKHdkb2cpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlZ2lzdGVyIHdhdGNoZG9nIGRldmljZVxuIik7CkBAIC0zMjcsMTggKzMzNiwyMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCi0vKiBEaXNhYmxlIHdhdGNoZG9nIGlmIGl0IGlzIGFjdGl2ZSBkdXJpbmcgc3VzcGVuZCAqLworLyogRGlzYWJsZSB3YXRjaGRvZyBpZiBpdCBpcyBhY3RpdmUgb3Igbm9uLWFjdGl2ZSBidXQgc3RpbGwgcnVubmluZyAqLwogc3RhdGljIGludCBpbXgyX3dkdF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICp3ZG9nID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGlteDJfd2R0X2RldmljZSAqd2RldiA9IHdhdGNoZG9nX2dldF9kcnZkYXRhKHdkb2cpOwogCi0JaW14Ml93ZHRfc2V0X3RpbWVvdXQod2RvZywgSU1YMl9XRFRfTUFYX1RJTUUpOwotCWlteDJfd2R0X3Bpbmcod2RvZyk7CisJLyogVGhlIHdhdGNoZG9nIElQIGJsb2NrIGlzIHJ1bm5pbmcgKi8KKwlpZiAoaW14Ml93ZHRfaXNfcnVubmluZyh3ZGV2KSkgeworCQlpbXgyX3dkdF9zZXRfdGltZW91dCh3ZG9nLCBJTVgyX1dEVF9NQVhfVElNRSk7CisJCWlteDJfd2R0X3Bpbmcod2RvZyk7CiAKLQkvKiBXYXRjaGRvZyBoYXMgYmVlbiBzdG9wcGVkIGJ1dCBJUCBibG9jayBpcyBzdGlsbCBydW5uaW5nICovCi0JaWYgKCF3YXRjaGRvZ19hY3RpdmUod2RvZykgJiYgaW14Ml93ZHRfaXNfcnVubmluZyh3ZGV2KSkKLQkJZGVsX3RpbWVyX3N5bmMoJndkZXYtPnRpbWVyKTsKKwkJLyogVGhlIHdhdGNoZG9nIGlzIG5vdCBhY3RpdmUgKi8KKwkJaWYgKCF3YXRjaGRvZ19hY3RpdmUod2RvZykpCisJCQlkZWxfdGltZXJfc3luYygmd2Rldi0+dGltZXIpOworCX0KIAogCWNsa19kaXNhYmxlX3VucHJlcGFyZSh3ZGV2LT5jbGspOwogCkBAIC0zNTQsMTUgKzM2NiwyNSBAQAogCWNsa19wcmVwYXJlX2VuYWJsZSh3ZGV2LT5jbGspOwogCiAJaWYgKHdhdGNoZG9nX2FjdGl2ZSh3ZG9nKSAmJiAhaW14Ml93ZHRfaXNfcnVubmluZyh3ZGV2KSkgewotCQkvKiBSZXN1bWVzIGZyb20gZGVlcCBzbGVlcCB3ZSBuZWVkIHJlc3RhcnQKLQkJICogdGhlIHdhdGNoZG9nIGFnYWluLgorCQkvKgorCQkgKiBJZiB0aGUgd2F0Y2hkb2cgaXMgc3RpbGwgYWN0aXZlIGFuZCByZXN1bWVzCisJCSAqIGZyb20gZGVlcCBzbGVlcCBzdGF0ZSwgbmVlZCB0byByZXN0YXJ0IHRoZQorCQkgKiB3YXRjaGRvZyBhZ2Fpbi4KIAkJICovCiAJCWlteDJfd2R0X3NldHVwKHdkb2cpOwogCQlpbXgyX3dkdF9zZXRfdGltZW91dCh3ZG9nLCB3ZG9nLT50aW1lb3V0KTsKIAkJaW14Ml93ZHRfcGluZyh3ZG9nKTsKIAl9IGVsc2UgaWYgKGlteDJfd2R0X2lzX3J1bm5pbmcod2RldikpIHsKKwkJLyogUmVzdW1pbmcgZnJvbSBub24tZGVlcCBzbGVlcCBzdGF0ZS4gKi8KKwkJaW14Ml93ZHRfc2V0X3RpbWVvdXQod2RvZywgd2RvZy0+dGltZW91dCk7CiAJCWlteDJfd2R0X3Bpbmcod2RvZyk7Ci0JCW1vZF90aW1lcigmd2Rldi0+dGltZXIsIGppZmZpZXMgKyB3ZG9nLT50aW1lb3V0ICogSFogLyAyKTsKKwkJLyoKKwkJICogQnV0IHRoZSB3YXRjaGRvZyBpcyBub3QgYWN0aXZlLCB0aGVuIHN0YXJ0CisJCSAqIHRoZSB0aW1lciBhZ2Fpbi4KKwkJICovCisJCWlmICghd2F0Y2hkb2dfYWN0aXZlKHdkb2cpKQorCQkJbW9kX3RpbWVyKCZ3ZGV2LT50aW1lciwKKwkJCQkgIGppZmZpZXMgKyB3ZG9nLT50aW1lb3V0ICogSFogLyAyKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbWVzb25fd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21lc29uX3dkdC5jCmluZGV4IGVmNmEyOTguLjFmNDE1NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbWVzb25fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tZXNvbl93ZHQuYwpAQCAtMjE1LDcgKzIxNSw2IEBACiAJLnJlbW92ZQkJPSBtZXNvbl93ZHRfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IG1lc29uX3dkdF9zaHV0ZG93biwKIAkuZHJpdmVyCQk9IHsKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLm9mX21hdGNoX3RhYmxlCT0gbWVzb25fd2R0X2R0X2lkcywKIAl9LApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYmFja3JlZi5jIGIvZnMvYnRyZnMvYmFja3JlZi5jCmluZGV4IDJkM2UzMmUuLjg3MjljZjYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2JhY2tyZWYuYworKysgYi9mcy9idHJmcy9iYWNrcmVmLmMKQEAgLTE1NTIsNyArMTU1Miw2IEBACiB7CiAJaW50IHJldDsKIAlpbnQgdHlwZTsKLQlzdHJ1Y3QgYnRyZnNfdHJlZV9ibG9ja19pbmZvICppbmZvOwogCXN0cnVjdCBidHJmc19leHRlbnRfaW5saW5lX3JlZiAqZWlyZWY7CiAKIAlpZiAoKnB0ciA9PSAodW5zaWduZWQgbG9uZyktMSkKQEAgLTE1NzMsOSArMTU3MiwxNyBAQAogCX0KIAogCS8qIHdlIGNhbiB0cmVhdCBib3RoIHJlZiB0eXBlcyBlcXVhbGx5IGhlcmUgKi8KLQlpbmZvID0gKHN0cnVjdCBidHJmc190cmVlX2Jsb2NrX2luZm8gKikoZWkgKyAxKTsKIAkqb3V0X3Jvb3QgPSBidHJmc19leHRlbnRfaW5saW5lX3JlZl9vZmZzZXQoZWIsIGVpcmVmKTsKLQkqb3V0X2xldmVsID0gYnRyZnNfdHJlZV9ibG9ja19sZXZlbChlYiwgaW5mbyk7CisKKwlpZiAoa2V5LT50eXBlID09IEJUUkZTX0VYVEVOVF9JVEVNX0tFWSkgeworCQlzdHJ1Y3QgYnRyZnNfdHJlZV9ibG9ja19pbmZvICppbmZvOworCisJCWluZm8gPSAoc3RydWN0IGJ0cmZzX3RyZWVfYmxvY2tfaW5mbyAqKShlaSArIDEpOworCQkqb3V0X2xldmVsID0gYnRyZnNfdHJlZV9ibG9ja19sZXZlbChlYiwgaW5mbyk7CisJfSBlbHNlIHsKKwkJQVNTRVJUKGtleS0+dHlwZSA9PSBCVFJGU19NRVRBREFUQV9JVEVNX0tFWSk7CisJCSpvdXRfbGV2ZWwgPSAodTgpa2V5LT5vZmZzZXQ7CisJfQogCiAJaWYgKHJldCA9PSAxKQogCQkqcHRyID0gKHVuc2lnbmVkIGxvbmcpLTE7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCA3ZTYwNzQxLi4wYjE4MDcwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTExNzEsNiArMTE3MSw3IEBACiAJc3RydWN0IHBlcmNwdV9jb3VudGVyIHRvdGFsX2J5dGVzX3Bpbm5lZDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkvKiBQcm90ZWN0ZWQgYnkgdGhlIHNwaW5sb2NrICdsb2NrJy4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHJvX2JnczsKIAogCXN0cnVjdCByd19zZW1hcGhvcmUgZ3JvdXBzX3NlbTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2RlbGF5ZWQtaW5vZGUuYyBiL2ZzL2J0cmZzL2RlbGF5ZWQtaW5vZGUuYwppbmRleCAwNTQ1NzdiLi5kZTRlNzBmIDEwMDY0NAotLS0gYS9mcy9idHJmcy9kZWxheWVkLWlub2RlLmMKKysrIGIvZnMvYnRyZnMvZGVsYXllZC1pbm9kZS5jCkBAIC0xODU3LDYgKzE4NTcsMTQgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9ub2RlICpkZWxheWVkX25vZGU7CiAKKwkvKgorCSAqIHdlIGRvbid0IGRvIGRlbGF5ZWQgaW5vZGUgdXBkYXRlcyBkdXJpbmcgbG9nIHJlY292ZXJ5IGJlY2F1c2UgaXQKKwkgKiBsZWFkcyB0byBlbm9zcGMgcHJvYmxlbXMuICBUaGlzIG1lYW5zIHdlIGFsc28gY2FuJ3QgZG8KKwkgKiBkZWxheWVkIGlub2RlIHJlZnMKKwkgKi8KKwlpZiAoQlRSRlNfSShpbm9kZSktPnJvb3QtPmZzX2luZm8tPmxvZ19yb290X3JlY292ZXJpbmcpCisJCXJldHVybiAtRUFHQUlOOworCiAJZGVsYXllZF9ub2RlID0gYnRyZnNfZ2V0X29yX2NyZWF0ZV9kZWxheWVkX25vZGUoaW5vZGUpOwogCWlmIChJU19FUlIoZGVsYXllZF9ub2RlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGVsYXllZF9ub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCmluZGV4IGE4MGI5NzEuLmE2ODQwODYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwpAQCAtMzEzOSw5ICszMTM5LDExIEBACiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgZXh0ZW50X3Jvb3QsICZjYWNoZS0+a2V5LCBwYXRoLCAwLCAxKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgPiAwKQorCQkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBmYWlsOwotCUJVR19PTihyZXQpOyAvKiBDb3JydXB0aW9uICovCisJfQogCiAJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwogCWJpID0gYnRyZnNfaXRlbV9wdHJfb2Zmc2V0KGxlYWYsIHBhdGgtPnNsb3RzWzBdKTsKQEAgLTMxNDksMTEgKzMxNTEsOSBAQAogCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOwogCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKIGZhaWw6Ci0JaWYgKHJldCkgeworCWlmIChyZXQpCiAJCWJ0cmZzX2Fib3J0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290LCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogCiB9CiAKQEAgLTk0MjIsNyArOTQyMiw2IEBACiAJICogYXJlIHN0aWxsIG9uIHRoZSBsaXN0IGFmdGVyIHRha2luZyB0aGUgc2VtYXBob3JlCiAJICovCiAJbGlzdF9kZWxfaW5pdCgmYmxvY2tfZ3JvdXAtPmxpc3QpOwotCWxpc3RfZGVsX2luaXQoJmJsb2NrX2dyb3VwLT5yb19saXN0KTsKIAlpZiAobGlzdF9lbXB0eSgmYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmJsb2NrX2dyb3Vwc1tpbmRleF0pKSB7CiAJCWtvYmogPSBibG9ja19ncm91cC0+c3BhY2VfaW5mby0+YmxvY2tfZ3JvdXBfa29ianNbaW5kZXhdOwogCQlibG9ja19ncm91cC0+c3BhY2VfaW5mby0+YmxvY2tfZ3JvdXBfa29ianNbaW5kZXhdID0gTlVMTDsKQEAgLTk0NjQsNiArOTQ2Myw3IEBACiAJYnRyZnNfcmVtb3ZlX2ZyZWVfc3BhY2VfY2FjaGUoYmxvY2tfZ3JvdXApOwogCiAJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+c3BhY2VfaW5mby0+bG9jayk7CisJbGlzdF9kZWxfaW5pdCgmYmxvY2tfZ3JvdXAtPnJvX2xpc3QpOwogCWJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT50b3RhbF9ieXRlcyAtPSBibG9ja19ncm91cC0+a2V5Lm9mZnNldDsKIAlibG9ja19ncm91cC0+c3BhY2VfaW5mby0+Ynl0ZXNfcmVhZG9ubHkgLT0gYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQ7CiAJYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmRpc2tfdG90YWwgLT0gYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQgKiBmYWN0b3I7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uYyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCmluZGV4IDRlYmFiZDIuLjc5MGRiYWUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCkBAIC0yMTkwLDcgKzIxOTAsNyBAQAogCiAJCW5leHQgPSBuZXh0X3N0YXRlKHN0YXRlKTsKIAotCQlmYWlscmVjID0gKHN0cnVjdCBpb19mYWlsdXJlX3JlY29yZCAqKXN0YXRlLT5wcml2YXRlOworCQlmYWlscmVjID0gKHN0cnVjdCBpb19mYWlsdXJlX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKXN0YXRlLT5wcml2YXRlOwogCQlmcmVlX2V4dGVudF9zdGF0ZShzdGF0ZSk7CiAJCWtmcmVlKGZhaWxyZWMpOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCBlNjg3YmIwLi44YmYzMjZhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTYyNTUsOCArNjI1NSwxMCBAQAogCiBvdXRfZmFpbDoKIAlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCWlmIChkcm9wX29uX2VycikKKwlpZiAoZHJvcF9vbl9lcnIpIHsKKwkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKKwl9CiAJYnRyZnNfYmFsYW5jZV9kZWxheWVkX2l0ZW1zKHJvb3QpOwogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3NjcnViLmMgYi9mcy9idHJmcy9zY3J1Yi5jCmluZGV4IGYyYmIxM2EuLmU0MjdjYjdlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9zY3J1Yi5jCisrKyBiL2ZzL2J0cmZzL3NjcnViLmMKQEAgLTI2MDcsOSArMjYwNyw5IEBACiAJCXJldCA9IHNjcnViX3BhZ2VzX2Zvcl9wYXJpdHkoc3Bhcml0eSwgbG9naWNhbCwgbCwgcGh5c2ljYWwsIGRldiwKIAkJCQkJICAgICBmbGFncywgZ2VuLCBtaXJyb3JfbnVtLAogCQkJCQkgICAgIGhhdmVfY3N1bSA/IGNzdW0gOiBOVUxMKTsKLXNraXA6CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0Oworc2tpcDoKIAkJbGVuIC09IGw7CiAJCWxvZ2ljYWwgKz0gbDsKIAkJcGh5c2ljYWwgKz0gbDsKQEAgLTMwNTMsNyArMzA1Myw3IEBACiAKIAlwcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBwYXRoKSB7Ci0JCWJ0cmZzX2ZyZWVfcGF0aChwcGF0aCk7CisJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0zMDY1LDYgKzMwNjUsOCBAQAogCXBhdGgtPnNlYXJjaF9jb21taXRfcm9vdCA9IDE7CiAJcGF0aC0+c2tpcF9sb2NraW5nID0gMTsKIAorCXBwYXRoLT5zZWFyY2hfY29tbWl0X3Jvb3QgPSAxOworCXBwYXRoLT5za2lwX2xvY2tpbmcgPSAxOwogCS8qCiAJICogdHJpZ2dlciB0aGUgcmVhZGFoZWFkIGZvciBleHRlbnQgdHJlZSBjc3VtIHRyZWUgYW5kIHdhaXQgZm9yCiAJICogY29tcGxldGlvbi4gRHVyaW5nIHJlYWRhaGVhZCwgdGhlIHNjcnViIGlzIG9mZmljaWFsbHkgcGF1c2VkCmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuYwppbmRleCA2MGY3Y2JlLi42ZjQ5YjI4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTEwMDAsMTAgKzEwMDAsMjAgQEAKIAkJCSAqLwogCQkJaWYgKGZzX2luZm8tPnBlbmRpbmdfY2hhbmdlcyA9PSAwKQogCQkJCXJldHVybiAwOworCQkJLyoKKwkJCSAqIEEgbm9uLWJsb2NraW5nIHRlc3QgaWYgdGhlIGZzIGlzIGZyb3plbi4gV2UgbXVzdCBub3QKKwkJCSAqIHN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uIGhlcmUgb3RoZXJ3aXNlIGEgZGVhZGxvY2sKKwkJCSAqIGhhcHBlbnMuIFRoZSBwZW5kaW5nIG9wZXJhdGlvbnMgYXJlIGRlbGF5ZWQgdG8gdGhlCisJCQkgKiBuZXh0IGNvbW1pdCBhZnRlciB0aGF3aW5nLgorCQkJICovCisJCQlpZiAoX19zYl9zdGFydF93cml0ZShzYiwgU0JfRlJFRVpFX1dSSVRFLCBmYWxzZSkpCisJCQkJX19zYl9lbmRfd3JpdGUoc2IsIFNCX0ZSRUVaRV9XUklURSk7CisJCQllbHNlCisJCQkJcmV0dXJuIDA7CiAJCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCQl9CisJCWlmIChJU19FUlIodHJhbnMpKQorCQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCX0KIAlyZXR1cm4gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IGE2MDVkNGUuLmU4OGI1OWQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMjExOCw3ICsyMTE4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHByZXY7CiAJdW5zaWduZWQgbG9uZyBiaXQ7CiAKLQlwcmV2ID0gY21weGNoZygmZnNfaW5mby0+cGVuZGluZ19jaGFuZ2VzLCAwLCAwKTsKKwlwcmV2ID0geGNoZygmZnNfaW5mby0+cGVuZGluZ19jaGFuZ2VzLCAwKTsKIAlpZiAoIXByZXYpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9hZGRyLmMgYi9mcy9jZXBoL2FkZHIuYwppbmRleCBmNTAxM2Q5Li5jODFjMGUwMCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9hZGRyLmMKKysrIGIvZnMvY2VwaC9hZGRyLmMKQEAgLTE0MTYsNyArMTQxNiw3IEBACiAJCX0KIAl9CiAKLQlkb3V0KCJmaWxsX2lubGluZV9kYXRhICVwICVsbHguJWxseCBsZW4gJWx1IGxvY2tlZF9wYWdlICVwXG4iLAorCWRvdXQoImZpbGxfaW5saW5lX2RhdGEgJXAgJWxseC4lbGx4IGxlbiAlenUgbG9ja2VkX3BhZ2UgJXBcbiIsCiAJICAgICBpbm9kZSwgY2VwaF92aW5vcChpbm9kZSksIGxlbiwgbG9ja2VkX3BhZ2UpOwogCiAJaWYgKGxlbiA+IDApIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCA2ZTEzOTExLi4yMmIyODlhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC02NjEsMTYgKzY2MSwxNiBAQAogCXNlcnZlci0+b3BzLT5zZXRfY3JlZGl0cyhzZXJ2ZXIsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191NjQKK3N0YXRpYyBpbmxpbmUgX19sZTY0CiBnZXRfbmV4dF9taWQ2NChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCiB7Ci0JcmV0dXJuIHNlcnZlci0+b3BzLT5nZXRfbmV4dF9taWQoc2VydmVyKTsKKwlyZXR1cm4gY3B1X3RvX2xlNjQoc2VydmVyLT5vcHMtPmdldF9uZXh0X21pZChzZXJ2ZXIpKTsKIH0KIAogc3RhdGljIGlubGluZSBfX2xlMTYKIGdldF9uZXh0X21pZChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCiB7Ci0JX191MTYgbWlkID0gZ2V0X25leHRfbWlkNjQoc2VydmVyKTsKKwlfX3UxNiBtaWQgPSBzZXJ2ZXItPm9wcy0+Z2V0X25leHRfbWlkKHNlcnZlcik7CiAJLyoKIAkgKiBUaGUgdmFsdWUgaW4gdGhlIFNNQiBoZWFkZXIgc2hvdWxkIGJlIGxpdHRsZSBlbmRpYW4gZm9yIGVhc3kKIAkgKiBvbi10aGUtd2lyZSBkZWNvZGluZy4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW9jdGwuYyBiL2ZzL2NpZnMvaW9jdGwuYwppbmRleCA0NWNiNTliLi44Yjc4OThiIDEwMDY0NAotLS0gYS9mcy9jaWZzL2lvY3RsLmMKKysrIGIvZnMvY2lmcy9pb2N0bC5jCkBAIC04NiwyMSArODYsMTYgQEAKIAl9CiAKIAlzcmNfaW5vZGUgPSBmaWxlX2lub2RlKHNyY19maWxlLmZpbGUpOworCXJjID0gLUVJTlZBTDsKKwlpZiAoU19JU0RJUihzcmNfaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gb3V0X2ZwdXQ7CiAKIAkvKgogCSAqIE5vdGU6IGNpZnMgY2FzZSBpcyBlYXNpZXIgdGhhbiBidHJmcyBzaW5jZSBzZXJ2ZXIgcmVzcG9uc2libGUgZm9yCiAJICogY2hlY2tzIGZvciBwcm9wZXIgb3BlbiBtb2RlcyBhbmQgZmlsZSB0eXBlIGFuZCBpZiBpdCB3YW50cwogCSAqIHNlcnZlciBjb3VsZCBldmVuIHN1cHBvcnQgY29weSBvZiByYW5nZSB3aGVyZSBzb3VyY2UgPSB0YXJnZXQKIAkgKi8KLQotCS8qIHNvIHdlIGRvIG5vdCBkZWFkbG9jayByYWNpbmcgdHdvIGlvY3RscyBvbiBzYW1lIGZpbGVzICovCi0JaWYgKHRhcmdldF9pbm9kZSA8IHNyY19pbm9kZSkgewotCQltdXRleF9sb2NrX25lc3RlZCgmdGFyZ2V0X2lub2RlLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7Ci0JCW11dGV4X2xvY2tfbmVzdGVkKCZzcmNfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfQ0hJTEQpOwotCX0gZWxzZSB7Ci0JCW11dGV4X2xvY2tfbmVzdGVkKCZzcmNfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKLQkJbXV0ZXhfbG9ja19uZXN0ZWQoJnRhcmdldF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7Ci0JfQorCWxvY2tfdHdvX25vbmRpcmVjdG9yaWVzKHRhcmdldF9pbm9kZSwgc3JjX2lub2RlKTsKIAogCS8qIGRldGVybWluZSByYW5nZSB0byBjbG9uZSAqLwogCXJjID0gLUVJTlZBTDsKQEAgLTEyNCwxMyArMTE5LDcgQEAKIG91dF91bmxvY2s6CiAJLyogYWx0aG91Z2ggdW5sb2NraW5nIGluIHRoZSByZXZlcnNlIG9yZGVyIGZyb20gbG9ja2luZyBpcyBub3QKIAkgICBzdHJpY3RseSBuZWNlc3NhcnkgaGVyZSBpdCBpcyBhIGxpdHRsZSBjbGVhbmVyIHRvIGJlIGNvbnNpc3RlbnQgKi8KLQlpZiAodGFyZ2V0X2lub2RlIDwgc3JjX2lub2RlKSB7Ci0JCW11dGV4X3VubG9jaygmc3JjX2lub2RlLT5pX211dGV4KTsKLQkJbXV0ZXhfdW5sb2NrKCZ0YXJnZXRfaW5vZGUtPmlfbXV0ZXgpOwotCX0gZWxzZSB7Ci0JCW11dGV4X3VubG9jaygmdGFyZ2V0X2lub2RlLT5pX211dGV4KTsKLQkJbXV0ZXhfdW5sb2NrKCZzcmNfaW5vZGUtPmlfbXV0ZXgpOwotCX0KKwl1bmxvY2tfdHdvX25vbmRpcmVjdG9yaWVzKHNyY19pbm9kZSwgdGFyZ2V0X2lub2RlKTsKIG91dF9mcHV0OgogCWZkcHV0KHNyY19maWxlKTsKIG91dF9kcm9wX3dyaXRlOgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9uZXRtaXNjLmMgYi9mcy9jaWZzL25ldG1pc2MuYwppbmRleCBiMzMzZmY2Li5hYmFlNmRkIDEwMDY0NAotLS0gYS9mcy9jaWZzL25ldG1pc2MuYworKysgYi9mcy9jaWZzL25ldG1pc2MuYwpAQCAtOTI2LDYgKzkyNiw3IEBACiAKIAkvKiBTdWJ0cmFjdCB0aGUgTlRGUyB0aW1lIG9mZnNldCwgdGhlbiBjb252ZXJ0IHRvIDFzIGludGVydmFscy4gKi8KIAlzNjQgdCA9IGxlNjRfdG9fY3B1KG50dXRjKSAtIE5URlNfVElNRV9PRkZTRVQ7CisJdTY0IGFic190OwogCiAJLyoKIAkgKiBVbmZvcnR1bmF0ZWx5IGNhbiBub3QgdXNlIG5vcm1hbCA2NCBiaXQgZGl2aXNpb24gb24gMzIgYml0IGFyY2gsIGJ1dApAQCAtOTMzLDEzICs5MzQsMTQgQEAKIAkgKiB0byBzcGVjaWFsIGNhc2UgdGhlbQogCSAqLwogCWlmICh0IDwgMCkgewotCQl0ID0gLXQ7Ci0JCXRzLnR2X25zZWMgPSAobG9uZykoZG9fZGl2KHQsIDEwMDAwMDAwKSAqIDEwMCk7CisJCWFic190ID0gLXQ7CisJCXRzLnR2X25zZWMgPSAobG9uZykoZG9fZGl2KGFic190LCAxMDAwMDAwMCkgKiAxMDApOwogCQl0cy50dl9uc2VjID0gLXRzLnR2X25zZWM7Ci0JCXRzLnR2X3NlYyA9IC10OworCQl0cy50dl9zZWMgPSAtYWJzX3Q7CiAJfSBlbHNlIHsKLQkJdHMudHZfbnNlYyA9IChsb25nKWRvX2Rpdih0LCAxMDAwMDAwMCkgKiAxMDA7Ci0JCXRzLnR2X3NlYyA9IHQ7CisJCWFic190ID0gdDsKKwkJdHMudHZfbnNlYyA9IChsb25nKWRvX2RpdihhYnNfdCwgMTAwMDAwMDApICogMTAwOworCQl0cy50dl9zZWMgPSBhYnNfdDsKIAl9CiAKIAlyZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3JlYWRkaXIuYyBiL2ZzL2NpZnMvcmVhZGRpci5jCmluZGV4IDhlYWYyMGE4Li5jMjk1MzM4IDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNjksNyArNjksOCBAQAogICogQXR0ZW1wdCB0byBwcmVsb2FkIHRoZSBkY2FjaGUgd2l0aCB0aGUgcmVzdWx0cyBmcm9tIHRoZSBGSU5EX0ZJUlNUL05FWFQKICAqCiAgKiBGaW5kIHRoZSBkZW50cnkgdGhhdCBtYXRjaGVzICJuYW1lIi4gSWYgdGhlcmUgaXNuJ3Qgb25lLCBjcmVhdGUgb25lLiBJZiBpdCdzCi0gKiBhIG5lZ2F0aXZlIGRlbnRyeSBvciB0aGUgdW5pcXVlaWQgY2hhbmdlZCwgdGhlbiBkcm9wIGl0IGFuZCByZWNyZWF0ZSBpdC4KKyAqIGEgbmVnYXRpdmUgZGVudHJ5IG9yIHRoZSB1bmlxdWVpZCBvciBmaWxldHlwZShtb2RlKSBjaGFuZ2VkLAorICogdGhlbiBkcm9wIGl0IGFuZCByZWNyZWF0ZSBpdC4KICAqLwogc3RhdGljIHZvaWQKIGNpZnNfcHJpbWVfZGNhY2hlKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IHFzdHIgKm5hbWUsCkBAIC05Nyw4ICs5OCwxMSBAQAogCQkJaWYgKCEoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1NFUlZFUl9JTlVNKSkKIAkJCQlmYXR0ci0+Y2ZfdW5pcXVlaWQgPSBDSUZTX0koaW5vZGUpLT51bmlxdWVpZDsKIAotCQkJLyogdXBkYXRlIGlub2RlIGluIHBsYWNlIGlmIGlfaW5vIGRpZG4ndCBjaGFuZ2UgKi8KLQkJCWlmIChDSUZTX0koaW5vZGUpLT51bmlxdWVpZCA9PSBmYXR0ci0+Y2ZfdW5pcXVlaWQpIHsKKwkJCS8qIHVwZGF0ZSBpbm9kZSBpbiBwbGFjZQorCQkJICogaWYgYm90aCBpX2lubyBhbmQgaV9tb2RlIGRpZG4ndCBjaGFuZ2UgKi8KKwkJCWlmIChDSUZTX0koaW5vZGUpLT51bmlxdWVpZCA9PSBmYXR0ci0+Y2ZfdW5pcXVlaWQgJiYKKwkJCSAgICAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgPT0KKwkJCSAgICAoZmF0dHItPmNmX21vZGUgJiBTX0lGTVQpKSB7CiAJCQkJY2lmc19mYXR0cl90b19pbm9kZShpbm9kZSwgZmF0dHIpOwogCQkJCWdvdG8gb3V0OwogCQkJfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWIybWlzYy5jIGIvZnMvY2lmcy9zbWIybWlzYy5jCmluZGV4IGYxY2VmYzkuLjY4OWYwMzUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iMm1pc2MuYworKysgYi9mcy9jaWZzL3NtYjJtaXNjLmMKQEAgLTMyLDEyICszMiwxNCBAQAogc3RhdGljIGludAogY2hlY2tfc21iMl9oZHIoc3RydWN0IHNtYjJfaGRyICpoZHIsIF9fdTY0IG1pZCkKIHsKKwlfX3U2NCB3aXJlX21pZCA9IGxlNjRfdG9fY3B1KGhkci0+TWVzc2FnZUlkKTsKKwogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgdGhpcyByZWFsbHkgaXMgYW4gU01CLCB0aGF0IGl0IGlzIGEgcmVzcG9uc2UsCiAJICogYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaWRzIG1hdGNoLgogCSAqLwogCWlmICgoKihfX2xlMzIgKiloZHItPlByb3RvY29sSWQgPT0gU01CMl9QUk9UT19OVU1CRVIpICYmCi0JICAgIChtaWQgPT0gaGRyLT5NZXNzYWdlSWQpKSB7CisJICAgIChtaWQgPT0gd2lyZV9taWQpKSB7CiAJCWlmIChoZHItPkZsYWdzICYgU01CMl9GTEFHU19TRVJWRVJfVE9fUkVESVIpCiAJCQlyZXR1cm4gMDsKIAkJZWxzZSB7CkBAIC01MSwxMSArNTMsMTEgQEAKIAkJaWYgKCooX19sZTMyICopaGRyLT5Qcm90b2NvbElkICE9IFNNQjJfUFJPVE9fTlVNQkVSKQogCQkJY2lmc19kYmcoVkZTLCAiQmFkIHByb3RvY29sIHN0cmluZyBzaWduYXR1cmUgaGVhZGVyICV4XG4iLAogCQkJCSAqKHVuc2lnbmVkIGludCAqKSBoZHItPlByb3RvY29sSWQpOwotCQlpZiAobWlkICE9IGhkci0+TWVzc2FnZUlkKQorCQlpZiAobWlkICE9IHdpcmVfbWlkKQogCQkJY2lmc19kYmcoVkZTLCAiTWlkcyBkbyBub3QgbWF0Y2g6ICVsbHUgYW5kICVsbHVcbiIsCi0JCQkJIG1pZCwgaGRyLT5NZXNzYWdlSWQpOworCQkJCSBtaWQsIHdpcmVfbWlkKTsKIAl9Ci0JY2lmc19kYmcoVkZTLCAiQmFkIFNNQiBkZXRlY3RlZC4gVGhlIE1pZD0lbGx1XG4iLCBoZHItPk1lc3NhZ2VJZCk7CisJY2lmc19kYmcoVkZTLCAiQmFkIFNNQiBkZXRlY3RlZC4gVGhlIE1pZD0lbGx1XG4iLCB3aXJlX21pZCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTk1LDcgKzk3LDcgQEAKIHsKIAlzdHJ1Y3Qgc21iMl9oZHIgKmhkciA9IChzdHJ1Y3Qgc21iMl9oZHIgKilidWY7CiAJc3RydWN0IHNtYjJfcGR1ICpwZHUgPSAoc3RydWN0IHNtYjJfcGR1ICopaGRyOwotCV9fdTY0IG1pZCA9IGhkci0+TWVzc2FnZUlkOworCV9fdTY0IG1pZCA9IGxlNjRfdG9fY3B1KGhkci0+TWVzc2FnZUlkKTsKIAlfX3UzMiBsZW4gPSBnZXRfcmZjMTAwMl9sZW5ndGgoYnVmKTsKIAlfX3UzMiBjbGNfbGVuOyAgLyogY2FsY3VsYXRlZCBsZW5ndGggKi8KIAlpbnQgY29tbWFuZDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iMm9wcy5jIGIvZnMvY2lmcy9zbWIyb3BzLmMKaW5kZXggOTNmZDA1OC4uOTZiNWQ0MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWIyb3BzLmMKKysrIGIvZnMvY2lmcy9zbWIyb3BzLmMKQEAgLTE3NiwxMCArMTc2LDExIEBACiB7CiAJc3RydWN0IG1pZF9xX2VudHJ5ICptaWQ7CiAJc3RydWN0IHNtYjJfaGRyICpoZHIgPSAoc3RydWN0IHNtYjJfaGRyICopYnVmOworCV9fdTY0IHdpcmVfbWlkID0gbGU2NF90b19jcHUoaGRyLT5NZXNzYWdlSWQpOwogCiAJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtaWQsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EsIHFoZWFkKSB7Ci0JCWlmICgobWlkLT5taWQgPT0gaGRyLT5NZXNzYWdlSWQpICYmCisJCWlmICgobWlkLT5taWQgPT0gd2lyZV9taWQpICYmCiAJCSAgICAobWlkLT5taWRfc3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSAmJgogCQkgICAgKG1pZC0+Y29tbWFuZCA9PSBoZHItPkNvbW1hbmQpKSB7CiAJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWIycGR1LmggYi9mcy9jaWZzL3NtYjJwZHUuaAppbmRleCBjZTg1ODQ3Li43MDg2N2Q1IDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYjJwZHUuaAorKysgYi9mcy9jaWZzL3NtYjJwZHUuaApAQCAtMTEwLDcgKzExMCw3IEBACiAJX19sZTE2IENyZWRpdFJlcXVlc3Q7ICAvKiBDcmVkaXRSZXNwb25zZSAqLwogCV9fbGUzMiBGbGFnczsKIAlfX2xlMzIgTmV4dENvbW1hbmQ7Ci0JX191NjQgIE1lc3NhZ2VJZDsJLyogb3BhcXVlIC0gc28gY2FuIHN0YXkgbGl0dGxlIGVuZGlhbiAqLworCV9fbGU2NCBNZXNzYWdlSWQ7CiAJX19sZTMyIFByb2Nlc3NJZDsKIAlfX3UzMiAgVHJlZUlkOwkJLyogb3BhcXVlIC0gc28gZG8gbm90IG1ha2UgbGl0dGxlIGVuZGlhbiAqLwogCV9fdTY0ICBTZXNzaW9uSWQ7CS8qIG9wYXF1ZSAtIHNvIGRvIG5vdCBtYWtlIGxpdHRsZSBlbmRpYW4gKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iMnRyYW5zcG9ydC5jIGIvZnMvY2lmcy9zbWIydHJhbnNwb3J0LmMKaW5kZXggNTExMWU3Mi4uZDRjNWI2ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWIydHJhbnNwb3J0LmMKKysrIGIvZnMvY2lmcy9zbWIydHJhbnNwb3J0LmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQlyZXR1cm4gdGVtcDsKIAllbHNlIHsKIAkJbWVtc2V0KHRlbXAsIDAsIHNpemVvZihzdHJ1Y3QgbWlkX3FfZW50cnkpKTsKLQkJdGVtcC0+bWlkID0gc21iX2J1ZmZlci0+TWVzc2FnZUlkOwkvKiBhbHdheXMgTEUgKi8KKwkJdGVtcC0+bWlkID0gbGU2NF90b19jcHUoc21iX2J1ZmZlci0+TWVzc2FnZUlkKTsKIAkJdGVtcC0+cGlkID0gY3VycmVudC0+cGlkOwogCQl0ZW1wLT5jb21tYW5kID0gc21iX2J1ZmZlci0+Q29tbWFuZDsJLyogQWx3YXlzIExFICovCiAJCXRlbXAtPndoZW5fYWxsb2MgPSBqaWZmaWVzOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCBlNWQzZWFkLi5iZWQ0MzA4IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtNTE2Niw4ICs1MTY2LDggQEAKIAogCS8qIGZhbGxiYWNrIHRvIGdlbmVyaWMgaGVyZSBpZiBub3QgaW4gZXh0ZW50cyBmbXQgKi8KIAlpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpCi0JCXJldHVybiBfX2dlbmVyaWNfYmxvY2tfZmllbWFwKGlub2RlLCBmaWVpbmZvLCBzdGFydCwgbGVuLAotCQkJCQkgICAgICBleHQ0X2dldF9ibG9jayk7CisJCXJldHVybiBnZW5lcmljX2Jsb2NrX2ZpZW1hcChpbm9kZSwgZmllaW5mbywgc3RhcnQsIGxlbiwKKwkJCWV4dDRfZ2V0X2Jsb2NrKTsKIAogCWlmIChmaWVtYXBfY2hlY2tfZmxhZ3MoZmllaW5mbywgRVhUNF9GSUVNQVBfRkxBR1MpKQogCQlyZXR1cm4gLUVCQURSOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCA1MTNjMTJjLi44MTMxYmU4IDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYworKysgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtMjczLDE5ICsyNzMsMjQgQEAKICAqIHdlIGRldGVybWluZSB0aGlzIGV4dGVudCBhcyBhIGRhdGEgb3IgYSBob2xlIGFjY29yZGluZyB0byB3aGV0aGVyIHRoZQogICogcGFnZSBjYWNoZSBoYXMgZGF0YSBvciBub3QuCiAgKi8KLXN0YXRpYyBpbnQgZXh0NF9maW5kX3Vud3JpdHRlbl9wZ29mZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2hlbmNlLAotCQkJCSAgICAgbG9mZl90IGVuZG9mZiwgbG9mZl90ICpvZmZzZXQpCitzdGF0aWMgaW50IGV4dDRfZmluZF91bndyaXR0ZW5fcGdvZmYoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIGludCB3aGVuY2UsCisJCQkJICAgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsCisJCQkJICAgICBsb2ZmX3QgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXVuc2lnbmVkIGludCBibGtiaXRzOwogCXBnb2ZmX3QgaW5kZXg7CiAJcGdvZmZfdCBlbmQ7CisJbG9mZl90IGVuZG9mZjsKIAlsb2ZmX3Qgc3RhcnRvZmY7CiAJbG9mZl90IGxhc3RvZmY7CiAJaW50IGZvdW5kID0gMDsKIAorCWJsa2JpdHMgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKIAlzdGFydG9mZiA9ICpvZmZzZXQ7CiAJbGFzdG9mZiA9IHN0YXJ0b2ZmOwotCisJZW5kb2ZmID0gKGxvZmZfdCkobWFwLT5tX2xibGsgKyBtYXAtPm1fbGVuKSA8PCBibGtiaXRzOwogCiAJaW5kZXggPSBzdGFydG9mZiA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCWVuZCA9IGVuZG9mZiA+PiBQQUdFX0NBQ0hFX1NISUZUOwpAQCAtNDAzLDE0NCArNDA4LDE0NyBAQAogc3RhdGljIGxvZmZfdCBleHQ0X3NlZWtfZGF0YShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IG1heHNpemUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKLQlzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvIGZpZTsKLQlzdHJ1Y3QgZmllbWFwX2V4dGVudCBleHRbMl07Ci0JbG9mZl90IG5leHQ7Ci0JaW50IGksIHJldCA9IDA7CisJc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7CisJc3RydWN0IGV4dGVudF9zdGF0dXMgZXM7CisJZXh0NF9sYmxrX3Qgc3RhcnQsIGxhc3QsIGVuZDsKKwlsb2ZmX3QgZGF0YW9mZiwgaXNpemU7CisJaW50IGJsa2JpdHM7CisJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaWYgKG9mZnNldCA+PSBpbm9kZS0+aV9zaXplKSB7CisKKwlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlpZiAob2Zmc2V0ID49IGlzaXplKSB7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KLQlmaWUuZmlfZmxhZ3MgPSAwOwotCWZpZS5maV9leHRlbnRzX21heCA9IDI7Ci0JZmllLmZpX2V4dGVudHNfc3RhcnQgPSAoc3RydWN0IGZpZW1hcF9leHRlbnQgX191c2VyICopICZleHQ7Ci0Jd2hpbGUgKDEpIHsKLQkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwogCi0JCWZpZS5maV9leHRlbnRzX21hcHBlZCA9IDA7Ci0JCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSAqIGZpZS5maV9leHRlbnRzX21heCk7CisJYmxrYml0cyA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXN0YXJ0ID0gb2Zmc2V0ID4+IGJsa2JpdHM7CisJbGFzdCA9IHN0YXJ0OworCWVuZCA9IGlzaXplID4+IGJsa2JpdHM7CisJZGF0YW9mZiA9IG9mZnNldDsKIAotCQlzZXRfZnMoZ2V0X2RzKCkpOwotCQlyZXQgPSBleHQ0X2ZpZW1hcChpbm9kZSwgJmZpZSwgb2Zmc2V0LCBtYXhzaXplIC0gb2Zmc2V0KTsKLQkJc2V0X2ZzKG9sZF9mcyk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQotCQkvKiBObyBleHRlbnRzIGZvdW5kLCBFT0YgKi8KLQkJaWYgKCFmaWUuZmlfZXh0ZW50c19tYXBwZWQpIHsKLQkJCXJldCA9IC1FTlhJTzsKKwlkbyB7CisJCW1hcC5tX2xibGsgPSBsYXN0OworCQltYXAubV9sZW4gPSBlbmQgLSBsYXN0ICsgMTsKKwkJcmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmbWFwLCAwKTsKKwkJaWYgKHJldCA+IDAgJiYgIShtYXAubV9mbGFncyAmIEVYVDRfTUFQX1VOV1JJVFRFTikpIHsKKwkJCWlmIChsYXN0ICE9IHN0YXJ0KQorCQkJCWRhdGFvZmYgPSAobG9mZl90KWxhc3QgPDwgYmxrYml0czsKIAkJCWJyZWFrOwogCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBmaWUuZmlfZXh0ZW50c19tYXBwZWQ7IGkrKykgewotCQkJbmV4dCA9IChsb2ZmX3QpKGV4dFtpXS5mZV9sZW5ndGggKyBleHRbaV0uZmVfbG9naWNhbCk7CiAKLQkJCWlmIChvZmZzZXQgPCAobG9mZl90KWV4dFtpXS5mZV9sb2dpY2FsKQotCQkJCW9mZnNldCA9IChsb2ZmX3QpZXh0W2ldLmZlX2xvZ2ljYWw7Ci0JCQkvKgotCQkJICogSWYgZXh0ZW50IGlzIG5vdCB1bndyaXR0ZW4sIHRoZW4gaXQgY29udGFpbnMgdmFsaWQKLQkJCSAqIGRhdGEsIG1hcHBlZCBvciBkZWxheWVkLgotCQkJICovCi0JCQlpZiAoIShleHRbaV0uZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5UX1VOV1JJVFRFTikpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGVyZSBpcyBhIHVud3JpdHRlbiBleHRlbnQgYXQgdGhpcyBvZmZzZXQsCi0JCQkgKiBpdCB3aWxsIGJlIGFzIGEgZGF0YSBvciBhIGhvbGUgYWNjb3JkaW5nIHRvIHBhZ2UKLQkJCSAqIGNhY2hlIHRoYXQgaGFzIGRhdGEgb3Igbm90LgotCQkJICovCi0JCQlpZiAoZXh0NF9maW5kX3Vud3JpdHRlbl9wZ29mZihpbm9kZSwgU0VFS19EQVRBLAotCQkJCQkJICAgICAgbmV4dCwgJm9mZnNldCkpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCWlmIChleHRbaV0uZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5UX0xBU1QpIHsKLQkJCQlyZXQgPSAtRU5YSU87Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlvZmZzZXQgPSBuZXh0OworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBhIGRlbGF5IGV4dGVudCBhdCB0aGlzIG9mZnNldCwKKwkJICogaXQgd2lsbCBiZSBhcyBhIGRhdGEuCisJCSAqLworCQlleHQ0X2VzX2ZpbmRfZGVsYXllZF9leHRlbnRfcmFuZ2UoaW5vZGUsIGxhc3QsIGxhc3QsICZlcyk7CisJCWlmIChlcy5lc19sZW4gIT0gMCAmJiBpbl9yYW5nZShsYXN0LCBlcy5lc19sYmxrLCBlcy5lc19sZW4pKSB7CisJCQlpZiAobGFzdCAhPSBzdGFydCkKKwkJCQlkYXRhb2ZmID0gKGxvZmZfdClsYXN0IDw8IGJsa2JpdHM7CisJCQlicmVhazsKIAkJfQotCX0KLQlpZiAob2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkKLQkJb2Zmc2V0ID0gaW5vZGUtPmlfc2l6ZTsKLW91dDoKKworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBhIHVud3JpdHRlbiBleHRlbnQgYXQgdGhpcyBvZmZzZXQsCisJCSAqIGl0IHdpbGwgYmUgYXMgYSBkYXRhIG9yIGEgaG9sZSBhY2NvcmRpbmcgdG8gcGFnZQorCQkgKiBjYWNoZSB0aGF0IGhhcyBkYXRhIG9yIG5vdC4KKwkJICovCisJCWlmIChtYXAubV9mbGFncyAmIEVYVDRfTUFQX1VOV1JJVFRFTikgeworCQkJaW50IHVud3JpdHRlbjsKKwkJCXVud3JpdHRlbiA9IGV4dDRfZmluZF91bndyaXR0ZW5fcGdvZmYoaW5vZGUsIFNFRUtfREFUQSwKKwkJCQkJCQkgICAgICAmbWFwLCAmZGF0YW9mZik7CisJCQlpZiAodW53cml0dGVuKQorCQkJCWJyZWFrOworCQl9CisKKwkJbGFzdCsrOworCQlkYXRhb2ZmID0gKGxvZmZfdClsYXN0IDw8IGJsa2JpdHM7CisJfSB3aGlsZSAobGFzdCA8PSBlbmQpOworCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKIAotCXJldHVybiB2ZnNfc2V0cG9zKGZpbGUsIG9mZnNldCwgbWF4c2l6ZSk7CisJaWYgKGRhdGFvZmYgPiBpc2l6ZSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCXJldHVybiB2ZnNfc2V0cG9zKGZpbGUsIGRhdGFvZmYsIG1heHNpemUpOwogfQogCiAvKgotICogZXh0NF9zZWVrX2hvbGUoKSByZXRyaWV2ZXMgdGhlIG9mZnNldCBmb3IgU0VFS19IT0xFCisgKiBleHQ0X3NlZWtfaG9sZSgpIHJldHJpZXZlcyB0aGUgb2Zmc2V0IGZvciBTRUVLX0hPTEUuCiAgKi8KIHN0YXRpYyBsb2ZmX3QgZXh0NF9zZWVrX2hvbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBtYXhzaXplKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0Jc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyBmaWU7Ci0Jc3RydWN0IGZpZW1hcF9leHRlbnQgZXh0WzJdOwotCWxvZmZfdCBuZXh0OwotCWludCBpLCByZXQgPSAwOworCXN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwOworCXN0cnVjdCBleHRlbnRfc3RhdHVzIGVzOworCWV4dDRfbGJsa190IHN0YXJ0LCBsYXN0LCBlbmQ7CisJbG9mZl90IGhvbGVvZmYsIGlzaXplOworCWludCBibGtiaXRzOworCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChvZmZzZXQgPj0gaW5vZGUtPmlfc2l6ZSkgeworCisJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJaWYgKG9mZnNldCA+PSBpc2l6ZSkgewogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQlmaWUuZmlfZmxhZ3MgPSAwOwotCWZpZS5maV9leHRlbnRzX21heCA9IDI7Ci0JZmllLmZpX2V4dGVudHNfc3RhcnQgPSAoc3RydWN0IGZpZW1hcF9leHRlbnQgX191c2VyICopJmV4dDsKLQl3aGlsZSAoMSkgewotCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisJYmxrYml0cyA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXN0YXJ0ID0gb2Zmc2V0ID4+IGJsa2JpdHM7CisJbGFzdCA9IHN0YXJ0OworCWVuZCA9IGlzaXplID4+IGJsa2JpdHM7CisJaG9sZW9mZiA9IG9mZnNldDsKIAotCQlmaWUuZmlfZXh0ZW50c19tYXBwZWQgPSAwOwotCQltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOworCWRvIHsKKwkJbWFwLm1fbGJsayA9IGxhc3Q7CisJCW1hcC5tX2xlbiA9IGVuZCAtIGxhc3QgKyAxOworCQlyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsICZtYXAsIDApOworCQlpZiAocmV0ID4gMCAmJiAhKG1hcC5tX2ZsYWdzICYgRVhUNF9NQVBfVU5XUklUVEVOKSkgeworCQkJbGFzdCArPSByZXQ7CisJCQlob2xlb2ZmID0gKGxvZmZfdClsYXN0IDw8IGJsa2JpdHM7CisJCQljb250aW51ZTsKKwkJfQogCi0JCXNldF9mcyhnZXRfZHMoKSk7Ci0JCXJldCA9IGV4dDRfZmllbWFwKGlub2RlLCAmZmllLCBvZmZzZXQsIG1heHNpemUgLSBvZmZzZXQpOwotCQlzZXRfZnMob2xkX2ZzKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBhIGRlbGF5IGV4dGVudCBhdCB0aGlzIG9mZnNldCwKKwkJICogd2Ugd2lsbCBza2lwIHRoaXMgZXh0ZW50LgorCQkgKi8KKwkJZXh0NF9lc19maW5kX2RlbGF5ZWRfZXh0ZW50X3JhbmdlKGlub2RlLCBsYXN0LCBsYXN0LCAmZXMpOworCQlpZiAoZXMuZXNfbGVuICE9IDAgJiYgaW5fcmFuZ2UobGFzdCwgZXMuZXNfbGJsaywgZXMuZXNfbGVuKSkgeworCQkJbGFzdCA9IGVzLmVzX2xibGsgKyBlcy5lc19sZW47CisJCQlob2xlb2ZmID0gKGxvZmZfdClsYXN0IDw8IGJsa2JpdHM7CisJCQljb250aW51ZTsKKwkJfQogCi0JCS8qIE5vIGV4dGVudHMgZm91bmQgKi8KLQkJaWYgKCFmaWUuZmlfZXh0ZW50c19tYXBwZWQpCi0JCQlicmVhazsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZmllLmZpX2V4dGVudHNfbWFwcGVkOyBpKyspIHsKLQkJCW5leHQgPSAobG9mZl90KShleHRbaV0uZmVfbG9naWNhbCArIGV4dFtpXS5mZV9sZW5ndGgpOwotCQkJLyoKLQkJCSAqIElmIGV4dGVudCBpcyBub3QgdW53cml0dGVuLCB0aGVuIGl0IGNvbnRhaW5zIHZhbGlkCi0JCQkgKiBkYXRhLCBtYXBwZWQgb3IgZGVsYXllZC4KLQkJCSAqLwotCQkJaWYgKCEoZXh0W2ldLmZlX2ZsYWdzICYgRklFTUFQX0VYVEVOVF9VTldSSVRURU4pKSB7Ci0JCQkJaWYgKG9mZnNldCA8IChsb2ZmX3QpZXh0W2ldLmZlX2xvZ2ljYWwpCi0JCQkJCWdvdG8gb3V0OwotCQkJCW9mZnNldCA9IG5leHQ7CisJCS8qCisJCSAqIElmIHRoZXJlIGlzIGEgdW53cml0dGVuIGV4dGVudCBhdCB0aGlzIG9mZnNldCwKKwkJICogaXQgd2lsbCBiZSBhcyBhIGRhdGEgb3IgYSBob2xlIGFjY29yZGluZyB0byBwYWdlCisJCSAqIGNhY2hlIHRoYXQgaGFzIGRhdGEgb3Igbm90LgorCQkgKi8KKwkJaWYgKG1hcC5tX2ZsYWdzICYgRVhUNF9NQVBfVU5XUklUVEVOKSB7CisJCQlpbnQgdW53cml0dGVuOworCQkJdW53cml0dGVuID0gZXh0NF9maW5kX3Vud3JpdHRlbl9wZ29mZihpbm9kZSwgU0VFS19IT0xFLAorCQkJCQkJCSAgICAgICZtYXAsICZob2xlb2ZmKTsKKwkJCWlmICghdW53cml0dGVuKSB7CisJCQkJbGFzdCArPSByZXQ7CisJCQkJaG9sZW9mZiA9IChsb2ZmX3QpbGFzdCA8PCBibGtiaXRzOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJLyoKLQkJCSAqIElmIHRoZXJlIGlzIGEgdW53cml0dGVuIGV4dGVudCBhdCB0aGlzIG9mZnNldCwKLQkJCSAqIGl0IHdpbGwgYmUgYXMgYSBkYXRhIG9yIGEgaG9sZSBhY2NvcmRpbmcgdG8gcGFnZQotCQkJICogY2FjaGUgdGhhdCBoYXMgZGF0YSBvciBub3QuCi0JCQkgKi8KLQkJCWlmIChleHQ0X2ZpbmRfdW53cml0dGVuX3Bnb2ZmKGlub2RlLCBTRUVLX0hPTEUsCi0JCQkJCQkgICAgICBuZXh0LCAmb2Zmc2V0KSkKLQkJCQlnb3RvIG91dDsKLQotCQkJb2Zmc2V0ID0gbmV4dDsKLQkJCWlmIChleHRbaV0uZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5UX0xBU1QpCi0JCQkJZ290byBvdXQ7CiAJCX0KLQl9Ci0JaWYgKG9mZnNldCA+IGlub2RlLT5pX3NpemUpCi0JCW9mZnNldCA9IGlub2RlLT5pX3NpemU7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKIAotCXJldHVybiB2ZnNfc2V0cG9zKGZpbGUsIG9mZnNldCwgbWF4c2l6ZSk7CisJCS8qIGZpbmQgYSBob2xlICovCisJCWJyZWFrOworCX0gd2hpbGUgKGxhc3QgPD0gZW5kKTsKKworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCisJaWYgKGhvbGVvZmYgPiBpc2l6ZSkKKwkJaG9sZW9mZiA9IGlzaXplOworCisJcmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgaG9sZW9mZiwgbWF4c2l6ZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuYwppbmRleCBiZjc2ZjQwLi44YThlYzYyIDEwMDY0NAotLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDQvcmVzaXplLmMKQEAgLTI0LDYgKzI0LDE4IEBACiAJCXJldHVybiAtRVBFUk07CiAKIAkvKgorCSAqIElmIHdlIGFyZSBub3QgdXNpbmcgdGhlIHByaW1hcnkgc3VwZXJibG9jay9HRFQgY29weSBkb24ndCByZXNpemUsCisgICAgICAgICAqIGJlY2F1c2UgdGhlIHVzZXIgdG9vbHMgaGF2ZSBubyB3YXkgb2YgaGFuZGxpbmcgdGhpcy4gIFByb2JhYmx5IGEKKyAgICAgICAgICogYmFkIHRpbWUgdG8gZG8gaXQgYW55d2F5cy4KKyAgICAgICAgICovCisJaWYgKEVYVDRfU0Ioc2IpLT5zX3NiaC0+Yl9ibG9ja25yICE9CisJICAgIGxlMzJfdG9fY3B1KEVYVDRfU0Ioc2IpLT5zX2VzLT5zX2ZpcnN0X2RhdGFfYmxvY2spKSB7CisJCWV4dDRfd2FybmluZyhzYiwgIndvbid0IHJlc2l6ZSB1c2luZyBiYWNrdXAgc3VwZXJibG9jayBhdCAlbGx1IiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpRVhUNF9TQihzYiktPnNfc2JoLT5iX2Jsb2NrbnIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCS8qCiAJICogV2UgYXJlIG5vdCBhbGxvd2VkIHRvIGRvIG9ubGluZS1yZXNpemluZyBvbiBhIGZpbGVzeXN0ZW0gbW91bnRlZAogCSAqIHdpdGggZXJyb3IsIGJlY2F1c2UgaXQgY2FuIGRlc3Ryb3kgdGhlIGZpbGVzeXN0ZW0gZWFzaWx5LgogCSAqLwpAQCAtNzU4LDE4ICs3NzAsNiBAQAogCQkgICAgICAgIkVYVDQtZnM6IGV4dDRfYWRkX25ld19nZGI6IGFkZGluZyBncm91cCBibG9jayAlbHVcbiIsCiAJCSAgICAgICBnZGJfbnVtKTsKIAotCS8qCi0JICogSWYgd2UgYXJlIG5vdCB1c2luZyB0aGUgcHJpbWFyeSBzdXBlcmJsb2NrL0dEVCBjb3B5IGRvbid0IHJlc2l6ZSwKLSAgICAgICAgICogYmVjYXVzZSB0aGUgdXNlciB0b29scyBoYXZlIG5vIHdheSBvZiBoYW5kbGluZyB0aGlzLiAgUHJvYmFibHkgYQotICAgICAgICAgKiBiYWQgdGltZSB0byBkbyBpdCBhbnl3YXlzLgotICAgICAgICAgKi8KLQlpZiAoRVhUNF9TQihzYiktPnNfc2JoLT5iX2Jsb2NrbnIgIT0KLQkgICAgbGUzMl90b19jcHUoRVhUNF9TQihzYiktPnNfZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykpIHsKLQkJZXh0NF93YXJuaW5nKHNiLCAid29uJ3QgcmVzaXplIHVzaW5nIGJhY2t1cCBzdXBlcmJsb2NrIGF0ICVsbHUiLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylFWFQ0X1NCKHNiKS0+c19zYmgtPmJfYmxvY2tucik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCiAJZ2RiX2JoID0gc2JfYnJlYWQoc2IsIGdkYmxvY2spOwogCWlmICghZ2RiX2JoKQogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCA0M2M5MmIxLi43NGM1ZjUzIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC0zNDgyLDcgKzM0ODIsNyBAQAogCWlmIChFWFQ0X0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKIAkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9NRVRBREFUQV9DU1VNKSAmJgogCSAgICBFWFQ0X0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpCi0JCWV4dDRfd2FybmluZyhzYiwgS0VSTl9JTkZPICJtZXRhZGF0YV9jc3VtIGFuZCB1bmluaXRfYmcgYXJlICIKKwkJZXh0NF93YXJuaW5nKHNiLCAibWV0YWRhdGFfY3N1bSBhbmQgdW5pbml0X2JnIGFyZSAiCiAJCQkgICAgICJyZWR1bmRhbnQgZmxhZ3M7IHBsZWFzZSBydW4gZnNjay4iKTsKIAogCS8qIENoZWNrIGZvciBhIGtub3duIGNoZWNrc3VtIGFsZ29yaXRobSAqLwpkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggOTlkNDQwYS4uZWU4NWNkNCAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC03NDAsMTQgKzc0MCwxNSBAQAogCSAqIEV4Y2VwdGlvbnM6IE9fTk9OQkxPQ0sgaXMgYSB0d28gYml0IGRlZmluZSBvbiBwYXJpc2M7IE9fTkRFTEFZCiAJICogaXMgZGVmaW5lZCBhcyBPX05PTkJMT0NLIG9uIHNvbWUgcGxhdGZvcm1zIGFuZCBub3Qgb24gb3RoZXJzLgogCSAqLwotCUJVSUxEX0JVR19PTigyMCAtIDEgLyogZm9yIE9fUkRPTkxZIGJlaW5nIDAgKi8gIT0gSFdFSUdIVDMyKAorCUJVSUxEX0JVR19PTigyMSAtIDEgLyogZm9yIE9fUkRPTkxZIGJlaW5nIDAgKi8gIT0gSFdFSUdIVDMyKAogCQlPX1JET05MWQl8IE9fV1JPTkxZCXwgT19SRFdSCXwKIAkJT19DUkVBVAkJfCBPX0VYQ0wJfCBPX05PQ1RUWQl8CiAJCU9fVFJVTkMJCXwgT19BUFBFTkQJfCAvKiBPX05PTkJMT0NLCXwgKi8KIAkJX19PX1NZTkMJfCBPX0RTWU5DCXwgRkFTWU5DCXwKIAkJT19ESVJFQ1QJfCBPX0xBUkdFRklMRQl8IE9fRElSRUNUT1JZCXwKIAkJT19OT0ZPTExPVwl8IE9fTk9BVElNRQl8IE9fQ0xPRVhFQwl8Ci0JCV9fRk1PREVfRVhFQwl8IE9fUEFUSAl8IF9fT19UTVBGSUxFCisJCV9fRk1PREVfRVhFQwl8IE9fUEFUSAl8IF9fT19UTVBGSUxFCXwKKwkJX19GTU9ERV9OT05PVElGWQogCQkpKTsKIAogCWZhc3luY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJmYXN5bmNfY2FjaGUiLApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXYuYyBiL2ZzL2Z1c2UvZGV2LmMKaW5kZXggYmExMTA3OS4uZWQxOWE3ZCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kZXYuYworKysgYi9mcy9mdXNlL2Rldi5jCkBAIC0xMzEsNiArMTMxLDEzIEBACiAJcmVxLT5pbi5oLnBpZCA9IGN1cnJlbnQtPnBpZDsKIH0KIAordm9pZCBmdXNlX3NldF9pbml0aWFsaXplZChzdHJ1Y3QgZnVzZV9jb25uICpmYykKK3sKKwkvKiBNYWtlIHN1cmUgc3RvcmVzIGJlZm9yZSB0aGlzIGFyZSBzZWVuIG9uIGFub3RoZXIgQ1BVICovCisJc21wX3dtYigpOworCWZjLT5pbml0aWFsaXplZCA9IDE7Cit9CisKIHN0YXRpYyBib29sIGZ1c2VfYmxvY2tfYWxsb2Moc3RydWN0IGZ1c2VfY29ubiAqZmMsIGJvb2wgZm9yX2JhY2tncm91bmQpCiB7CiAJcmV0dXJuICFmYy0+aW5pdGlhbGl6ZWQgfHwgKGZvcl9iYWNrZ3JvdW5kICYmIGZjLT5ibG9ja2VkKTsKQEAgLTE1NSw2ICsxNjIsOCBAQAogCQlpZiAoaW50cikKIAkJCWdvdG8gb3V0OwogCX0KKwkvKiBNYXRjaGVzIHNtcF93bWIoKSBpbiBmdXNlX3NldF9pbml0aWFsaXplZCgpICovCisJc21wX3JtYigpOwogCiAJZXJyID0gLUVOT1RDT05OOwogCWlmICghZmMtPmNvbm5lY3RlZCkKQEAgLTI1Myw2ICsyNjIsOCBAQAogCiAJYXRvbWljX2luYygmZmMtPm51bV93YWl0aW5nKTsKIAl3YWl0X2V2ZW50KGZjLT5ibG9ja2VkX3dhaXRxLCBmYy0+aW5pdGlhbGl6ZWQpOworCS8qIE1hdGNoZXMgc21wX3dtYigpIGluIGZ1c2Vfc2V0X2luaXRpYWxpemVkKCkgKi8KKwlzbXBfcm1iKCk7CiAJcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKDApOwogCWlmICghcmVxKQogCQlyZXEgPSBnZXRfcmVzZXJ2ZWRfcmVxKGZjLCBmaWxlKTsKQEAgLTUxMSw2ICs1MjIsMzkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZ1c2VfcmVxdWVzdF9zZW5kKTsKIAorc3RhdGljIHZvaWQgZnVzZV9hZGp1c3RfY29tcGF0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzKQoreworCWlmIChmYy0+bWlub3IgPCA0ICYmIGFyZ3MtPmluLmgub3Bjb2RlID09IEZVU0VfU1RBVEZTKQorCQlhcmdzLT5vdXQuYXJnc1swXS5zaXplID0gRlVTRV9DT01QQVRfU1RBVEZTX1NJWkU7CisKKwlpZiAoZmMtPm1pbm9yIDwgOSkgeworCQlzd2l0Y2ggKGFyZ3MtPmluLmgub3Bjb2RlKSB7CisJCWNhc2UgRlVTRV9MT09LVVA6CisJCWNhc2UgRlVTRV9DUkVBVEU6CisJCWNhc2UgRlVTRV9NS05PRDoKKwkJY2FzZSBGVVNFX01LRElSOgorCQljYXNlIEZVU0VfU1lNTElOSzoKKwkJY2FzZSBGVVNFX0xJTks6CisJCQlhcmdzLT5vdXQuYXJnc1swXS5zaXplID0gRlVTRV9DT01QQVRfRU5UUllfT1VUX1NJWkU7CisJCQlicmVhazsKKwkJY2FzZSBGVVNFX0dFVEFUVFI6CisJCWNhc2UgRlVTRV9TRVRBVFRSOgorCQkJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX0FUVFJfT1VUX1NJWkU7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZmMtPm1pbm9yIDwgMTIpIHsKKwkJc3dpdGNoIChhcmdzLT5pbi5oLm9wY29kZSkgeworCQljYXNlIEZVU0VfQ1JFQVRFOgorCQkJYXJncy0+aW4uYXJnc1swXS5zaXplID0gc2l6ZW9mKHN0cnVjdCBmdXNlX29wZW5faW4pOworCQkJYnJlYWs7CisJCWNhc2UgRlVTRV9NS05PRDoKKwkJCWFyZ3MtPmluLmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX01LTk9EX0lOX1NJWkU7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwogc3NpemVfdCBmdXNlX3NpbXBsZV9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzKQogewogCXN0cnVjdCBmdXNlX3JlcSAqcmVxOwpAQCAtNTIwLDYgKzU2NCw5IEBACiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCisJLyogTmVlZHMgdG8gYmUgZG9uZSBhZnRlciBmdXNlX2dldF9yZXEoKSBzbyB0aGF0IGZjLT5taW5vciBpcyB2YWxpZCAqLworCWZ1c2VfYWRqdXN0X2NvbXBhdChmYywgYXJncyk7CisKIAlyZXEtPmluLmgub3Bjb2RlID0gYXJncy0+aW4uaC5vcGNvZGU7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGFyZ3MtPmluLmgubm9kZWlkOwogCXJlcS0+aW4ubnVtYXJncyA9IGFyZ3MtPmluLm51bWFyZ3M7CkBAIC0yMTI3LDcgKzIxNzQsNyBAQAogCWlmIChmYy0+Y29ubmVjdGVkKSB7CiAJCWZjLT5jb25uZWN0ZWQgPSAwOwogCQlmYy0+YmxvY2tlZCA9IDA7Ci0JCWZjLT5pbml0aWFsaXplZCA9IDE7CisJCWZ1c2Vfc2V0X2luaXRpYWxpemVkKGZjKTsKIAkJZW5kX2lvX3JlcXVlc3RzKGZjKTsKIAkJZW5kX3F1ZXVlZF9yZXF1ZXN0cyhmYyk7CiAJCWVuZF9wb2xscyhmYyk7CkBAIC0yMTQ2LDcgKzIxOTMsNyBAQAogCQlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAkJZmMtPmNvbm5lY3RlZCA9IDA7CiAJCWZjLT5ibG9ja2VkID0gMDsKLQkJZmMtPmluaXRpYWxpemVkID0gMTsKKwkJZnVzZV9zZXRfaW5pdGlhbGl6ZWQoZmMpOwogCQllbmRfcXVldWVkX3JlcXVlc3RzKGZjKTsKIAkJZW5kX3BvbGxzKGZjKTsKIAkJd2FrZV91cF9hbGwoJmZjLT5ibG9ja2VkX3dhaXRxKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IDI1MmI4YTUuLjA4ZTdiMWEgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKKysrIGIvZnMvZnVzZS9kaXIuYwpAQCAtMTU2LDEwICsxNTYsNyBAQAogCWFyZ3MtPmluLmFyZ3NbMF0uc2l6ZSA9IG5hbWUtPmxlbiArIDE7CiAJYXJncy0+aW4uYXJnc1swXS52YWx1ZSA9IG5hbWUtPm5hbWU7CiAJYXJncy0+b3V0Lm51bWFyZ3MgPSAxOwotCWlmIChmYy0+bWlub3IgPCA5KQotCQlhcmdzLT5vdXQuYXJnc1swXS5zaXplID0gRlVTRV9DT01QQVRfRU5UUllfT1VUX1NJWkU7Ci0JZWxzZQotCQlhcmdzLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKHN0cnVjdCBmdXNlX2VudHJ5X291dCk7CisJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnVzZV9lbnRyeV9vdXQpOwogCWFyZ3MtPm91dC5hcmdzWzBdLnZhbHVlID0gb3V0YXJnOwogfQogCkBAIC00MjIsMTYgKzQxOSwxMiBAQAogCWFyZ3MuaW4uaC5vcGNvZGUgPSBGVVNFX0NSRUFURTsKIAlhcmdzLmluLmgubm9kZWlkID0gZ2V0X25vZGVfaWQoZGlyKTsKIAlhcmdzLmluLm51bWFyZ3MgPSAyOwotCWFyZ3MuaW4uYXJnc1swXS5zaXplID0gZmMtPm1pbm9yIDwgMTIgPyBzaXplb2Yoc3RydWN0IGZ1c2Vfb3Blbl9pbikgOgotCQkJCQkJc2l6ZW9mKGluYXJnKTsKKwlhcmdzLmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihpbmFyZyk7CiAJYXJncy5pbi5hcmdzWzBdLnZhbHVlID0gJmluYXJnOwogCWFyZ3MuaW4uYXJnc1sxXS5zaXplID0gZW50cnktPmRfbmFtZS5sZW4gKyAxOwogCWFyZ3MuaW4uYXJnc1sxXS52YWx1ZSA9IGVudHJ5LT5kX25hbWUubmFtZTsKIAlhcmdzLm91dC5udW1hcmdzID0gMjsKLQlpZiAoZmMtPm1pbm9yIDwgOSkKLQkJYXJncy5vdXQuYXJnc1swXS5zaXplID0gRlVTRV9DT01QQVRfRU5UUllfT1VUX1NJWkU7Ci0JZWxzZQotCQlhcmdzLm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yob3V0ZW50cnkpOworCWFyZ3Mub3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihvdXRlbnRyeSk7CiAJYXJncy5vdXQuYXJnc1swXS52YWx1ZSA9ICZvdXRlbnRyeTsKIAlhcmdzLm91dC5hcmdzWzFdLnNpemUgPSBzaXplb2Yob3V0b3Blbik7CiAJYXJncy5vdXQuYXJnc1sxXS52YWx1ZSA9ICZvdXRvcGVuOwpAQCAtNTM5LDEwICs1MzIsNyBAQAogCW1lbXNldCgmb3V0YXJnLCAwLCBzaXplb2Yob3V0YXJnKSk7CiAJYXJncy0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChkaXIpOwogCWFyZ3MtPm91dC5udW1hcmdzID0gMTsKLQlpZiAoZmMtPm1pbm9yIDwgOSkKLQkJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX0VOVFJZX09VVF9TSVpFOwotCWVsc2UKLQkJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihvdXRhcmcpOworCWFyZ3MtPm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yob3V0YXJnKTsKIAlhcmdzLT5vdXQuYXJnc1swXS52YWx1ZSA9ICZvdXRhcmc7CiAJZXJyID0gZnVzZV9zaW1wbGVfcmVxdWVzdChmYywgYXJncyk7CiAJaWYgKGVycikKQEAgLTU5Miw4ICs1ODIsNyBAQAogCWluYXJnLnVtYXNrID0gY3VycmVudF91bWFzaygpOwogCWFyZ3MuaW4uaC5vcGNvZGUgPSBGVVNFX01LTk9EOwogCWFyZ3MuaW4ubnVtYXJncyA9IDI7Ci0JYXJncy5pbi5hcmdzWzBdLnNpemUgPSBmYy0+bWlub3IgPCAxMiA/IEZVU0VfQ09NUEFUX01LTk9EX0lOX1NJWkUgOgotCQkJCQkJc2l6ZW9mKGluYXJnKTsKKwlhcmdzLmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihpbmFyZyk7CiAJYXJncy5pbi5hcmdzWzBdLnZhbHVlID0gJmluYXJnOwogCWFyZ3MuaW4uYXJnc1sxXS5zaXplID0gZW50cnktPmRfbmFtZS5sZW4gKyAxOwogCWFyZ3MuaW4uYXJnc1sxXS52YWx1ZSA9IGVudHJ5LT5kX25hbWUubmFtZTsKQEAgLTg5OSwxMCArODg4LDcgQEAKIAlhcmdzLmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihpbmFyZyk7CiAJYXJncy5pbi5hcmdzWzBdLnZhbHVlID0gJmluYXJnOwogCWFyZ3Mub3V0Lm51bWFyZ3MgPSAxOwotCWlmIChmYy0+bWlub3IgPCA5KQotCQlhcmdzLm91dC5hcmdzWzBdLnNpemUgPSBGVVNFX0NPTVBBVF9BVFRSX09VVF9TSVpFOwotCWVsc2UKLQkJYXJncy5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKG91dGFyZyk7CisJYXJncy5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKG91dGFyZyk7CiAJYXJncy5vdXQuYXJnc1swXS52YWx1ZSA9ICZvdXRhcmc7CiAJZXJyID0gZnVzZV9zaW1wbGVfcmVxdWVzdChmYywgJmFyZ3MpOwogCWlmICghZXJyKSB7CkBAIC0xNTc0LDEwICsxNTYwLDcgQEAKIAlhcmdzLT5pbi5hcmdzWzBdLnNpemUgPSBzaXplb2YoKmluYXJnX3ApOwogCWFyZ3MtPmluLmFyZ3NbMF0udmFsdWUgPSBpbmFyZ19wOwogCWFyZ3MtPm91dC5udW1hcmdzID0gMTsKLQlpZiAoZmMtPm1pbm9yIDwgOSkKLQkJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX0FUVFJfT1VUX1NJWkU7Ci0JZWxzZQotCQlhcmdzLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKCpvdXRhcmdfcCk7CisJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZigqb3V0YXJnX3ApOwogCWFyZ3MtPm91dC5hcmdzWzBdLnZhbHVlID0gb3V0YXJnX3A7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZnVzZV9pLmggYi9mcy9mdXNlL2Z1c2VfaS5oCmluZGV4IGUwZmM2NzIuLjFjZGZiMDcgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZnVzZV9pLmgKKysrIGIvZnMvZnVzZS9mdXNlX2kuaApAQCAtOTA2LDQgKzkwNiw2IEBACiBpbnQgZnVzZV9kb19zZXRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0ciwKIAkJICAgIHN0cnVjdCBmaWxlICpmaWxlKTsKIAordm9pZCBmdXNlX3NldF9pbml0aWFsaXplZChzdHJ1Y3QgZnVzZV9jb25uICpmYyk7CisKICNlbmRpZiAvKiBfRlNfRlVTRV9JX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCA2NzQ5MTA5Li5mMzgyNTZlIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC00MjQsOCArNDI0LDcgQEAKIAlhcmdzLmluLmgub3Bjb2RlID0gRlVTRV9TVEFURlM7CiAJYXJncy5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGRlbnRyeS0+ZF9pbm9kZSk7CiAJYXJncy5vdXQubnVtYXJncyA9IDE7Ci0JYXJncy5vdXQuYXJnc1swXS5zaXplID0KLQkJZmMtPm1pbm9yIDwgNCA/IEZVU0VfQ09NUEFUX1NUQVRGU19TSVpFIDogc2l6ZW9mKG91dGFyZyk7CisJYXJncy5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKG91dGFyZyk7CiAJYXJncy5vdXQuYXJnc1swXS52YWx1ZSA9ICZvdXRhcmc7CiAJZXJyID0gZnVzZV9zaW1wbGVfcmVxdWVzdChmYywgJmFyZ3MpOwogCWlmICghZXJyKQpAQCAtODk4LDcgKzg5Nyw3IEBACiAJCWZjLT5tYXhfd3JpdGUgPSBtYXhfdCh1bnNpZ25lZCwgNDA5NiwgZmMtPm1heF93cml0ZSk7CiAJCWZjLT5jb25uX2luaXQgPSAxOwogCX0KLQlmYy0+aW5pdGlhbGl6ZWQgPSAxOworCWZ1c2Vfc2V0X2luaXRpYWxpemVkKGZjKTsKIAl3YWtlX3VwX2FsbCgmZmMtPmJsb2NrZWRfd2FpdHEpOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmMgYi9mcy9nZnMyL3F1b3RhLmMKaW5kZXggYzhiMTQ4Yi4uM2UxOTNjYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5jCisrKyBiL2ZzL2dmczIvcXVvdGEuYwpAQCAtNjY3LDcgKzY2Nyw3IEBACiAKIHN0YXRpYyBpbnQgZ2ZzMl9hZGp1c3RfcXVvdGEoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBsb2ZmX3QgbG9jLAogCQkJICAgICBzNjQgY2hhbmdlLCBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCwKLQkJCSAgICAgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmZkcSkKKwkJCSAgICAgc3RydWN0IHFjX2RxYmxrICpmZHEpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9ICZpcC0+aV9pbm9kZTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOwpAQCAtNjk3LDE2ICs2OTcsMTYgQEAKIAliZTY0X2FkZF9jcHUoJnEucXVfdmFsdWUsIGNoYW5nZSk7CiAJcWQtPnFkX3FiLnFiX3ZhbHVlID0gcS5xdV92YWx1ZTsKIAlpZiAoZmRxKSB7Ci0JCWlmIChmZHEtPmRfZmllbGRtYXNrICYgRlNfRFFfQlNPRlQpIHsKLQkJCXEucXVfd2FybiA9IGNwdV90b19iZTY0KGZkcS0+ZF9ibGtfc29mdGxpbWl0ID4+IHNkcC0+c2RfZnNiMmJiX3NoaWZ0KTsKKwkJaWYgKGZkcS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfU09GVCkgeworCQkJcS5xdV93YXJuID0gY3B1X3RvX2JlNjQoZmRxLT5kX3NwY19zb2Z0bGltaXQgPj4gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdCk7CiAJCQlxZC0+cWRfcWIucWJfd2FybiA9IHEucXVfd2FybjsKIAkJfQotCQlpZiAoZmRxLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JIQVJEKSB7Ci0JCQlxLnF1X2xpbWl0ID0gY3B1X3RvX2JlNjQoZmRxLT5kX2Jsa19oYXJkbGltaXQgPj4gc2RwLT5zZF9mc2IyYmJfc2hpZnQpOworCQlpZiAoZmRxLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19IQVJEKSB7CisJCQlxLnF1X2xpbWl0ID0gY3B1X3RvX2JlNjQoZmRxLT5kX3NwY19oYXJkbGltaXQgPj4gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdCk7CiAJCQlxZC0+cWRfcWIucWJfbGltaXQgPSBxLnF1X2xpbWl0OwogCQl9Ci0JCWlmIChmZHEtPmRfZmllbGRtYXNrICYgRlNfRFFfQkNPVU5UKSB7Ci0JCQlxLnF1X3ZhbHVlID0gY3B1X3RvX2JlNjQoZmRxLT5kX2Jjb3VudCA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCk7CisJCWlmIChmZHEtPmRfZmllbGRtYXNrICYgUUNfU1BBQ0UpIHsKKwkJCXEucXVfdmFsdWUgPSBjcHVfdG9fYmU2NChmZHEtPmRfc3BhY2UgPj4gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdCk7CiAJCQlxZC0+cWRfcWIucWJfdmFsdWUgPSBxLnF1X3ZhbHVlOwogCQl9CiAJfQpAQCAtMTQ5Nyw3ICsxNDk3LDcgQEAKIH0KIAogc3RhdGljIGludCBnZnMyX2dldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga3FpZCBxaWQsCi0JCQkgIHN0cnVjdCBmc19kaXNrX3F1b3RhICpmZHEpCisJCQkgIHN0cnVjdCBxY19kcWJsayAqZmRxKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gc2ItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgZ2ZzMl9xdW90YV9sdmIgKnFsdmI7CkBAIC0xNTA1LDcgKzE1MDUsNyBAQAogCXN0cnVjdCBnZnMyX2hvbGRlciBxX2doOwogCWludCBlcnJvcjsKIAotCW1lbXNldChmZHEsIDAsIHNpemVvZihzdHJ1Y3QgZnNfZGlza19xdW90YSkpOworCW1lbXNldChmZHEsIDAsIHNpemVvZigqZmRxKSk7CiAKIAlpZiAoc2RwLT5zZF9hcmdzLmFyX3F1b3RhID09IEdGUzJfUVVPVEFfT0ZGKQogCQlyZXR1cm4gLUVTUkNIOyAvKiBDcmF6eSBYRlMgZXJyb3IgY29kZSAqLwpAQCAtMTUyMiwxMiArMTUyMiw5IEBACiAJCWdvdG8gb3V0OwogCiAJcWx2YiA9IChzdHJ1Y3QgZ2ZzMl9xdW90YV9sdmIgKilxZC0+cWRfZ2wtPmdsX2xrc2Iuc2JfbHZicHRyOwotCWZkcS0+ZF92ZXJzaW9uID0gRlNfRFFVT1RfVkVSU0lPTjsKLQlmZHEtPmRfZmxhZ3MgPSAocWlkLnR5cGUgPT0gVVNSUVVPVEEpID8gRlNfVVNFUl9RVU9UQSA6IEZTX0dST1VQX1FVT1RBOwotCWZkcS0+ZF9pZCA9IGZyb21fa3FpZF9tdW5nZWQoY3VycmVudF91c2VyX25zKCksIHFpZCk7Ci0JZmRxLT5kX2Jsa19oYXJkbGltaXQgPSBiZTY0X3RvX2NwdShxbHZiLT5xYl9saW1pdCkgPDwgc2RwLT5zZF9mc2IyYmJfc2hpZnQ7Ci0JZmRxLT5kX2Jsa19zb2Z0bGltaXQgPSBiZTY0X3RvX2NwdShxbHZiLT5xYl93YXJuKSA8PCBzZHAtPnNkX2ZzYjJiYl9zaGlmdDsKLQlmZHEtPmRfYmNvdW50ID0gYmU2NF90b19jcHUocWx2Yi0+cWJfdmFsdWUpIDw8IHNkcC0+c2RfZnNiMmJiX3NoaWZ0OworCWZkcS0+ZF9zcGNfaGFyZGxpbWl0ID0gYmU2NF90b19jcHUocWx2Yi0+cWJfbGltaXQpIDw8IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CisJZmRxLT5kX3NwY19zb2Z0bGltaXQgPSBiZTY0X3RvX2NwdShxbHZiLT5xYl93YXJuKSA8PCBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0OworCWZkcS0+ZF9zcGFjZSA9IGJlNjRfdG9fY3B1KHFsdmItPnFiX3ZhbHVlKSA8PCBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0OwogCiAJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnFfZ2gpOwogb3V0OgpAQCAtMTUzNiwxMCArMTUzMywxMCBAQAogfQogCiAvKiBHRlMyIG9ubHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdGhlIFhGUyBmaWVsZHMgKi8KLSNkZWZpbmUgR0ZTMl9GSUVMRE1BU0sgKEZTX0RRX0JTT0ZUfEZTX0RRX0JIQVJEfEZTX0RRX0JDT1VOVCkKKyNkZWZpbmUgR0ZTMl9GSUVMRE1BU0sgKFFDX1NQQ19TT0ZUfFFDX1NQQ19IQVJEfFFDX1NQQUNFKQogCiBzdGF0aWMgaW50IGdmczJfc2V0X2RxYmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrcWlkIHFpZCwKLQkJCSAgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmZkcSkKKwkJCSAgc3RydWN0IHFjX2RxYmxrICpmZHEpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShzZHAtPnNkX3F1b3RhX2lub2RlKTsKQEAgLTE1ODMsMTcgKzE1ODAsMTcgQEAKIAkJZ290byBvdXRfaTsKIAogCS8qIElmIG5vdGhpbmcgaGFzIGNoYW5nZWQsIHRoaXMgaXMgYSBuby1vcCAqLwotCWlmICgoZmRxLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JTT0ZUKSAmJgotCSAgICAoKGZkcS0+ZF9ibGtfc29mdGxpbWl0ID4+IHNkcC0+c2RfZnNiMmJiX3NoaWZ0KSA9PSBiZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfd2FybikpKQotCQlmZHEtPmRfZmllbGRtYXNrIF49IEZTX0RRX0JTT0ZUOworCWlmICgoZmRxLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19TT0ZUKSAmJgorCSAgICAoKGZkcS0+ZF9zcGNfc29mdGxpbWl0ID4+IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQpID09IGJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl93YXJuKSkpCisJCWZkcS0+ZF9maWVsZG1hc2sgXj0gUUNfU1BDX1NPRlQ7CiAKLQlpZiAoKGZkcS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CSEFSRCkgJiYKLQkgICAgKChmZHEtPmRfYmxrX2hhcmRsaW1pdCA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCkgPT0gYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSkpCi0JCWZkcS0+ZF9maWVsZG1hc2sgXj0gRlNfRFFfQkhBUkQ7CisJaWYgKChmZHEtPmRfZmllbGRtYXNrICYgUUNfU1BDX0hBUkQpICYmCisJICAgICgoZmRxLT5kX3NwY19oYXJkbGltaXQgPj4gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdCkgPT0gYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSkpCisJCWZkcS0+ZF9maWVsZG1hc2sgXj0gUUNfU1BDX0hBUkQ7CiAKLQlpZiAoKGZkcS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CQ09VTlQpICYmCi0JICAgICgoZmRxLT5kX2Jjb3VudCA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCkgPT0gYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX3ZhbHVlKSkpCi0JCWZkcS0+ZF9maWVsZG1hc2sgXj0gRlNfRFFfQkNPVU5UOworCWlmICgoZmRxLT5kX2ZpZWxkbWFzayAmIFFDX1NQQUNFKSAmJgorCSAgICAoKGZkcS0+ZF9zcGFjZSA+PiBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0KSA9PSBiZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfdmFsdWUpKSkKKwkJZmRxLT5kX2ZpZWxkbWFzayBePSBRQ19TUEFDRTsKIAogCWlmIChmZHEtPmRfZmllbGRtYXNrID09IDApCiAJCWdvdG8gb3V0X2k7CmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmMKaW5kZXggYmI2MzI1NC4uNzM1ZDc1MiAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvcm9jay5jCisrKyBiL2ZzL2lzb2ZzL3JvY2suYwpAQCAtMzYyLDYgKzM2Miw5IEBACiAJCQlycy5jb250X3NpemUgPSBpc29udW1fNzMzKHJyLT51LkNFLnNpemUpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0lHKCdFJywgJ1InKToKKwkJCS8qIEludmFsaWQgbGVuZ3RoIG9mIEVSIHRhZyBpZD8gKi8KKwkJCWlmIChyci0+dS5FUi5sZW5faWQgKyBvZmZzZXRvZihzdHJ1Y3Qgcm9ja19yaWRnZSwgdS5FUi5kYXRhKSA+IHJyLT5sZW4pCisJCQkJZ290byBvdXQ7CiAJCQlJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9jayA9IDE7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiSVNPIDk2NjAgRXh0ZW5zaW9uczogIik7CiAJCQl7CmRpZmYgLS1naXQgYS9mcy9rZXJuZnMvZGlyLmMgYi9mcy9rZXJuZnMvZGlyLmMKaW5kZXggMzc5ODlmMC4uMmQ4ODFiMyAxMDA2NDQKLS0tIGEvZnMva2VybmZzL2Rpci5jCisrKyBiL2ZzL2tlcm5mcy9kaXIuYwpAQCAtMjAxLDEwICsyMDEsMTQgQEAKIHN0YXRpYyBpbnQga2VybmZzX25hbWVfY29tcGFyZSh1bnNpZ25lZCBpbnQgaGFzaCwgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgICBjb25zdCB2b2lkICpucywgY29uc3Qgc3RydWN0IGtlcm5mc19ub2RlICprbikKIHsKLQlpZiAoaGFzaCAhPSBrbi0+aGFzaCkKLQkJcmV0dXJuIGhhc2ggLSBrbi0+aGFzaDsKLQlpZiAobnMgIT0ga24tPm5zKQotCQlyZXR1cm4gbnMgLSBrbi0+bnM7CisJaWYgKGhhc2ggPCBrbi0+aGFzaCkKKwkJcmV0dXJuIC0xOworCWlmIChoYXNoID4ga24tPmhhc2gpCisJCXJldHVybiAxOworCWlmIChucyA8IGtuLT5ucykKKwkJcmV0dXJuIC0xOworCWlmIChucyA+IGtuLT5ucykKKwkJcmV0dXJuIDE7CiAJcmV0dXJuIHN0cmNtcChuYW1lLCBrbi0+bmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Yy5jIGIvZnMvbG9ja2Qvc3ZjLmMKaW5kZXggZTk0Yzg4Ny4uNTU1MDVjYiAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjLmMKKysrIGIvZnMvbG9ja2Qvc3ZjLmMKQEAgLTEzOCwxMCArMTM4LDYgQEAKIAogCWRwcmludGsoIk5GUyBsb2NraW5nIHNlcnZpY2Ugc3RhcnRlZCAodmVyICIgTE9DS0RfVkVSU0lPTiAiKS5cbiIpOwogCi0JaWYgKCFubG1fdGltZW91dCkKLQkJbmxtX3RpbWVvdXQgPSBMT0NLRF9ERkxUX1RJTUVPOwotCW5sbXN2Y190aW1lb3V0ID0gbmxtX3RpbWVvdXQgKiBIWjsKLQogCS8qCiAJICogVGhlIG1haW4gcmVxdWVzdCBsb29wLiBXZSBkb24ndCB0ZXJtaW5hdGUgdW50aWwgdGhlIGxhc3QKIAkgKiBORlMgbW91bnQgb3IgTkZTIGRhZW1vbiBoYXMgZ29uZSBhd2F5LgpAQCAtMzUwLDYgKzM0NiwxMCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkibG9ja2RfdXA6IG5vIHBpZCwgJWQgdXNlcnM/P1xuIiwgbmxtc3ZjX3VzZXJzKTsKIAorCWlmICghbmxtX3RpbWVvdXQpCisJCW5sbV90aW1lb3V0ID0gTE9DS0RfREZMVF9USU1FTzsKKwlubG1zdmNfdGltZW91dCA9IG5sbV90aW1lb3V0ICogSFo7CisKIAlzZXJ2ID0gc3ZjX2NyZWF0ZSgmbmxtc3ZjX3Byb2dyYW0sIExPQ0tEX0JVRlNJWkUsIHN2Y19ycGNiX2NsZWFudXApOwogCWlmICghc2VydikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJsb2NrZF91cDogY3JlYXRlIHNlcnZpY2UgZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IDczNWI4ZDMuLjU5ZTJmOTAgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKKysrIGIvZnMvbG9ja3MuYwpAQCAtMTcwMiw3ICsxNzAyLDcgQEAKIAkJCWJyZWFrOwogCX0KIAl0cmFjZV9nZW5lcmljX2RlbGV0ZV9sZWFzZShpbm9kZSwgZmwpOwotCWlmIChmbCkKKwlpZiAoZmwgJiYgSVNfTEVBU0UoZmwpKQogCQllcnJvciA9IGZsLT5mbF9sbW9wcy0+bG1fY2hhbmdlKGJlZm9yZSwgRl9VTkxDSywgJmRpc3Bvc2UpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlsb2Nrc19kaXNwb3NlX2xpc3QoJmRpc3Bvc2UpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IDEwYmYwNzIuLjI5NDY5MmYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTIxMiw2ICsyMTIsMTIgQEAKICAqLwogc3NpemVfdCBuZnNfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGxvZmZfdCBwb3MpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfbWFwcGluZy0+aG9zdDsKKworCS8qIHdlIG9ubHkgc3VwcG9ydCBzd2FwIGZpbGUgY2FsbGluZyBuZnNfZGlyZWN0X0lPICovCisJaWYgKCFJU19TV0FQRklMRShpbm9kZSkpCisJCXJldHVybiAwOworCiAjaWZuZGVmIENPTkZJR19ORlNfU1dBUAogCWRwcmludGsoIk5GUzogbmZzX2RpcmVjdF9JTyAoJXBEKSBvZmYvbm8oJUxkLyVsdSkgRUlOVkFMXG4iLAogCQkJaW9jYi0+a2lfZmlscCwgKGxvbmcgbG9uZykgcG9zLCBpdGVyLT5ucl9zZWdzKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggNGJmZmU2My4uMjIxMWY2YiAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTM1Miw4ICszNTIsOSBAQAogCiAJbmZzX2F0dHJfY2hlY2tfbW91bnRwb2ludChzYiwgZmF0dHIpOwogCi0JaWYgKCgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRklMRUlEKSA9PSAwKSAmJgotCSAgICAhbmZzX2F0dHJfdXNlX21vdW50ZWRfb25fZmlsZWlkKGZhdHRyKSkKKwlpZiAobmZzX2F0dHJfdXNlX21vdW50ZWRfb25fZmlsZWlkKGZhdHRyKSkKKwkJZmF0dHItPmZpbGVpZCA9IGZhdHRyLT5tb3VudGVkX29uX2ZpbGVpZDsKKwllbHNlIGlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRklMRUlEKSA9PSAwKQogCQlnb3RvIG91dF9ub19pbm9kZTsKIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1RZUEUpID09IDApCiAJCWdvdG8gb3V0X25vX2lub2RlOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaAppbmRleCBlZmFhMzFjLi5iNmYzNGJmIDEwMDY0NAotLS0gYS9mcy9uZnMvaW50ZXJuYWwuaAorKysgYi9mcy9uZnMvaW50ZXJuYWwuaApAQCAtMzEsOCArMzEsNiBAQAogCSAgICAoKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NT1VOVFBPSU5UKSA9PSAwKSAmJgogCSAgICAgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJBTCkgPT0gMCkpKQogCQlyZXR1cm4gMDsKLQotCWZhdHRyLT5maWxlaWQgPSBmYXR0ci0+bW91bnRlZF9vbl9maWxlaWQ7CiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0Y2xpZW50LmMgYi9mcy9uZnMvbmZzNGNsaWVudC5jCmluZGV4IDAzMzExMjUuLjcwNmFkMTAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0Y2xpZW50LmMKKysrIGIvZnMvbmZzL25mczRjbGllbnQuYwpAQCAtMjI4LDYgKzIyOCw3IEBACiAJa2ZyZWUoY2xwLT5jbF9zZXJ2ZXJvd25lcik7CiAJa2ZyZWUoY2xwLT5jbF9zZXJ2ZXJzY29wZSk7CiAJa2ZyZWUoY2xwLT5jbF9pbXBsaWQpOworCWtmcmVlKGNscC0+Y2xfb3duZXJfaWQpOwogfQogCiB2b2lkIG5mczRfZnJlZV9jbGllbnQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKQEAgLTQ1Miw2ICs0NTMsMTQgQEAKIAlzcGluX3VubG9jaygmbm4tPm5mc19jbGllbnRfbG9jayk7CiB9CiAKK3N0YXRpYyBib29sIG5mczRfbWF0Y2hfY2xpZW50X293bmVyX2lkKGNvbnN0IHN0cnVjdCBuZnNfY2xpZW50ICpjbHAxLAorCQljb25zdCBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwMikKK3sKKwlpZiAoY2xwMS0+Y2xfb3duZXJfaWQgPT0gTlVMTCB8fCBjbHAyLT5jbF9vd25lcl9pZCA9PSBOVUxMKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gc3RyY21wKGNscDEtPmNsX293bmVyX2lkLCBjbHAyLT5jbF9vd25lcl9pZCkgPT0gMDsKK30KKwogLyoqCiAgKiBuZnM0MF93YWxrX2NsaWVudF9saXN0IC0gRmluZCBzZXJ2ZXIgdGhhdCByZWNvZ25pemVzIGEgY2xpZW50IElECiAgKgpAQCAtNDgzLDkgKzQ5Miw2IEBACiAJCWlmIChwb3MtPnJwY19vcHMgIT0gbmV3LT5ycGNfb3BzKQogCQkJY29udGludWU7CiAKLQkJaWYgKHBvcy0+Y2xfcHJvdG8gIT0gbmV3LT5jbF9wcm90bykKLQkJCWNvbnRpbnVlOwotCiAJCWlmIChwb3MtPmNsX21pbm9ydmVyc2lvbiAhPSBuZXctPmNsX21pbm9ydmVyc2lvbikKIAkJCWNvbnRpbnVlOwogCkBAIC01MTAsNiArNTE2LDkgQEAKIAkJaWYgKHBvcy0+Y2xfY2xpZW50aWQgIT0gbmV3LT5jbF9jbGllbnRpZCkKIAkJCWNvbnRpbnVlOwogCisJCWlmICghbmZzNF9tYXRjaF9jbGllbnRfb3duZXJfaWQocG9zLCBuZXcpKQorCQkJY29udGludWU7CisKIAkJYXRvbWljX2luYygmcG9zLT5jbF9jb3VudCk7CiAJCXNwaW5fdW5sb2NrKCZubi0+bmZzX2NsaWVudF9sb2NrKTsKIApAQCAtNTY2LDIwICs1NzUsMTQgQEAKIH0KIAogLyoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VydmVyIG93bmVycyBtYXRjaAorICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZXJ2ZXIgbWFqb3IgaWRzIG1hdGNoCiAgKi8KIHN0YXRpYyBib29sCi1uZnM0X21hdGNoX3NlcnZlcm93bmVycyhzdHJ1Y3QgbmZzX2NsaWVudCAqYSwgc3RydWN0IG5mc19jbGllbnQgKmIpCituZnM0X2NoZWNrX2NsaWVudGlkX3RydW5raW5nKHN0cnVjdCBuZnNfY2xpZW50ICphLCBzdHJ1Y3QgbmZzX2NsaWVudCAqYikKIHsKIAlzdHJ1Y3QgbmZzNDFfc2VydmVyX293bmVyICpvMSA9IGEtPmNsX3NlcnZlcm93bmVyOwogCXN0cnVjdCBuZnM0MV9zZXJ2ZXJfb3duZXIgKm8yID0gYi0+Y2xfc2VydmVyb3duZXI7CiAKLQlpZiAobzEtPm1pbm9yX2lkICE9IG8yLT5taW5vcl9pZCkgewotCQlkcHJpbnRrKCJORlM6IC0tPiAlcyBzZXJ2ZXIgb3duZXIgbWlub3IgSURzIGRvIG5vdCBtYXRjaFxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQogCWlmIChvMS0+bWFqb3JfaWRfc3ogIT0gbzItPm1ham9yX2lkX3N6KQogCQlnb3RvIG91dF9tYWpvcl9taXNtYXRjaDsKIAlpZiAobWVtY21wKG8xLT5tYWpvcl9pZCwgbzItPm1ham9yX2lkLCBvMS0+bWFqb3JfaWRfc3opICE9IDApCkBAIC02MjEsOSArNjI0LDYgQEAKIAkJaWYgKHBvcy0+cnBjX29wcyAhPSBuZXctPnJwY19vcHMpCiAJCQljb250aW51ZTsKIAotCQlpZiAocG9zLT5jbF9wcm90byAhPSBuZXctPmNsX3Byb3RvKQotCQkJY29udGludWU7Ci0KIAkJaWYgKHBvcy0+Y2xfbWlub3J2ZXJzaW9uICE9IG5ldy0+Y2xfbWlub3J2ZXJzaW9uKQogCQkJY29udGludWU7CiAKQEAgLTYzOSw3ICs2MzksNyBAQAogCQkJcHJldiA9IHBvczsKIAogCQkJc3RhdHVzID0gbmZzX3dhaXRfY2xpZW50X2luaXRfY29tcGxldGUocG9zKTsKLQkJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJaWYgKHBvcy0+Y2xfY29uc19zdGF0ZSA9PSBORlNfQ1NfU0VTU0lPTl9JTklUSU5HKSB7CiAJCQkJbmZzNF9zY2hlZHVsZV9sZWFzZV9yZWNvdmVyeShwb3MpOwogCQkJCXN0YXR1cyA9IG5mczRfd2FpdF9jbG50X3JlY292ZXIocG9zKTsKIAkJCX0KQEAgLTY1NCw3ICs2NTQsMTkgQEAKIAkJaWYgKCFuZnM0X21hdGNoX2NsaWVudGlkcyhwb3MsIG5ldykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIW5mczRfbWF0Y2hfc2VydmVyb3duZXJzKHBvcywgbmV3KSkKKwkJLyoKKwkJICogTm90ZSB0aGF0IHNlc3Npb24gdHJ1bmtpbmcgaXMganVzdCBhIHNwZWNpYWwgc3ViY2FzZSBvZgorCQkgKiBjbGllbnQgaWQgdHJ1bmtpbmcuIEluIGVpdGhlciBjYXNlLCB3ZSB3YW50IHRvIGZhbGwgYmFjaworCQkgKiB0byB1c2luZyB0aGUgZXhpc3RpbmcgbmZzX2NsaWVudC4KKwkJICovCisJCWlmICghbmZzNF9jaGVja19jbGllbnRpZF90cnVua2luZyhwb3MsIG5ldykpCisJCQljb250aW51ZTsKKworCQkvKiBVbmxpa2UgTkZTdjQuMCwgd2Uga25vdyB0aGF0IE5GU3Y0LjEgYWx3YXlzIHVzZXMgdGhlCisJCSAqIHVuaWZvcm0gc3RyaW5nLCBob3dldmVyIHNvbWVvbmUgbWlnaHQgc3dpdGNoIHRoZQorCQkgKiB1bmlxdWlmaWVyIHN0cmluZyBvbiB1cy4KKwkJICovCisJCWlmICghbmZzNF9tYXRjaF9jbGllbnRfb3duZXJfaWQocG9zLCBuZXcpKQogCQkJY29udGludWU7CiAKIAkJYXRvbWljX2luYygmcG9zLT5jbF9jb3VudCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IGU3ZjhkNWYuLmMzNDc3MDUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC0xMTE3LDggKzExMTcsNiBAQAogCQlyZXR1cm4gMDsKIAlpZiAoKGRlbGVnYXRpb24tPnR5cGUgJiBmbW9kZSkgIT0gZm1vZGUpCiAJCXJldHVybiAwOwotCWlmICh0ZXN0X2JpdChORlNfREVMRUdBVElPTl9ORUVEX1JFQ0xBSU0sICZkZWxlZ2F0aW9uLT5mbGFncykpCi0JCXJldHVybiAwOwogCWlmICh0ZXN0X2JpdChORlNfREVMRUdBVElPTl9SRVRVUk5JTkcsICZkZWxlZ2F0aW9uLT5mbGFncykpCiAJCXJldHVybiAwOwogCW5mc19tYXJrX2RlbGVnYXRpb25fcmVmZXJlbmNlZChkZWxlZ2F0aW9uKTsKQEAgLTQ5MTcsMTEgKzQ5MTUsMTQgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludAotbmZzNF9pbml0X25vbnVuaWZvcm1fY2xpZW50X3N0cmluZyhjb25zdCBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAorbmZzNF9pbml0X25vbnVuaWZvcm1fY2xpZW50X3N0cmluZyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAogCQkJCSAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0OwogCisJaWYgKGNscC0+Y2xfb3duZXJfaWQgIT0gTlVMTCkKKwkJcmV0dXJuIHN0cmxjcHkoYnVmLCBjbHAtPmNsX293bmVyX2lkLCBsZW4pOworCiAJcmN1X3JlYWRfbG9jaygpOwogCXJlc3VsdCA9IHNjbnByaW50ZihidWYsIGxlbiwgIkxpbnV4IE5GU3Y0LjAgJXMvJXMgJXMiLAogCQkJCWNscC0+Y2xfaXBhZGRyLApAQCAtNDkzMCwyNCArNDkzMSwzMiBAQAogCQkJCXJwY19wZWVyYWRkcjJzdHIoY2xwLT5jbF9ycGNjbGllbnQsCiAJCQkJCQkJUlBDX0RJU1BMQVlfUFJPVE8pKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKKwljbHAtPmNsX293bmVyX2lkID0ga3N0cmR1cChidWYsIEdGUF9LRVJORUwpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLW5mczRfaW5pdF91bmlmb3JtX2NsaWVudF9zdHJpbmcoY29uc3Qgc3RydWN0IG5mc19jbGllbnQgKmNscCwKK25mczRfaW5pdF91bmlmb3JtX2NsaWVudF9zdHJpbmcoc3RydWN0IG5mc19jbGllbnQgKmNscCwKIAkJCQljaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiAJY29uc3QgY2hhciAqbm9kZW5hbWUgPSBjbHAtPmNsX3JwY2NsaWVudC0+Y2xfbm9kZW5hbWU7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCWlmIChjbHAtPmNsX293bmVyX2lkICE9IE5VTEwpCisJCXJldHVybiBzdHJsY3B5KGJ1ZiwgY2xwLT5jbF9vd25lcl9pZCwgbGVuKTsKIAogCWlmIChuZnM0X2NsaWVudF9pZF91bmlxdWlmaWVyWzBdICE9ICdcMCcpCi0JCXJldHVybiBzY25wcmludGYoYnVmLCBsZW4sICJMaW51eCBORlN2JXUuJXUgJXMvJXMiLAorCQlyZXN1bHQgPSBzY25wcmludGYoYnVmLCBsZW4sICJMaW51eCBORlN2JXUuJXUgJXMvJXMiLAogCQkJCWNscC0+cnBjX29wcy0+dmVyc2lvbiwKIAkJCQljbHAtPmNsX21pbm9ydmVyc2lvbiwKIAkJCQluZnM0X2NsaWVudF9pZF91bmlxdWlmaWVyLAogCQkJCW5vZGVuYW1lKTsKLQlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgbGVuLCAiTGludXggTkZTdiV1LiV1ICVzIiwKKwllbHNlCisJCXJlc3VsdCA9IHNjbnByaW50ZihidWYsIGxlbiwgIkxpbnV4IE5GU3YldS4ldSAlcyIsCiAJCQkJY2xwLT5ycGNfb3BzLT52ZXJzaW9uLCBjbHAtPmNsX21pbm9ydmVyc2lvbiwKIAkJCQlub2RlbmFtZSk7CisJY2xwLT5jbF9vd25lcl9pZCA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggMzU1MGE5Yy4uYzA2YTFiYSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC0zODk3LDExICszODk3LDExIEBACiAJCXN0YXR1cyA9IG5mczRfc2V0bGVhc2UoZHApOwogCQlnb3RvIG91dDsKIAl9Ci0JYXRvbWljX2luYygmZnAtPmZpX2RlbGVnZWVzKTsKIAlpZiAoZnAtPmZpX2hhZF9jb25mbGljdCkgewogCQlzdGF0dXMgPSAtRUFHQUlOOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQorCWF0b21pY19pbmMoJmZwLT5maV9kZWxlZ2Vlcyk7CiAJaGFzaF9kZWxlZ2F0aW9uX2xvY2tlZChkcCwgZnApOwogCXN0YXR1cyA9IDA7CiBvdXRfdW5sb2NrOgpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMKaW5kZXggYzk5MTYxNi4uYmZmODU2NyAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYworKysgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCkBAIC0yNTksMTYgKzI1OSwxNSBAQAogCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqa2V2ZW50OwogCWNoYXIgX191c2VyICpzdGFydDsKIAlpbnQgcmV0OwotCURFRklORV9XQUlUKHdhaXQpOworCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CiAKIAlzdGFydCA9IGJ1ZjsKIAlncm91cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCXByX2RlYnVnKCIlczogZ3JvdXA9JXBcbiIsIF9fZnVuY19fLCBncm91cCk7CiAKKwlhZGRfd2FpdF9xdWV1ZSgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQpOwogCXdoaWxlICgxKSB7Ci0JCXByZXBhcmVfdG9fd2FpdCgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KIAkJbXV0ZXhfbG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CiAJCWtldmVudCA9IGdldF9vbmVfZXZlbnQoZ3JvdXAsIGNvdW50KTsKIAkJbXV0ZXhfdW5sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKQEAgLTI4OSw3ICsyODgsOCBAQAogCiAJCQlpZiAoc3RhcnQgIT0gYnVmKQogCQkJCWJyZWFrOwotCQkJc2NoZWR1bGUoKTsKKworCQkJd2FpdF93b2tlbigmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zMTgsOCArMzE4LDggQEAKIAkJYnVmICs9IHJldDsKIAkJY291bnQgLT0gcmV0OwogCX0KKwlyZW1vdmVfd2FpdF9xdWV1ZSgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQpOwogCi0JZmluaXNoX3dhaXQoJmdyb3VwLT5ub3RpZmljYXRpb25fd2FpdHEsICZ3YWl0KTsKIAlpZiAoc3RhcnQgIT0gYnVmICYmIHJldCAhPSAtRUZBVUxUKQogCQlyZXQgPSBidWYgLSBzdGFydDsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwppbmRleCA3OWI1YWY1Li5jZWNkODc1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwpAQCAtMjAyMywxMSArMjAyMyw4IEBACiAJZGxtX2xvY2tyZXNfZHJvcF9pbmZsaWdodF9yZWYoZGxtLCByZXMpOwogCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAotCWlmIChyZXQgPCAwKSB7CisJaWYgKHJldCA8IDApCiAJCW1sb2dfZXJybm8ocmV0KTsKLQkJaWYgKG5ld2xvY2spCi0JCQlkbG1fbG9ja19wdXQobmV3bG9jayk7Ci0JfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IGI5MzFlMDQuLjkxNGMxMjEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtOTQsNiArOTQsMTQgQEAKIAkJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICBjb25zdCBjaGFyICpzeW1uYW1lKTsKIAorc3RhdGljIGludCBvY2ZzMl9kb3VibGVfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgxLAorCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMSwKKwkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgyLAorCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMiwKKwkJCSAgICAgaW50IHJlbmFtZSk7CisKK3N0YXRpYyB2b2lkIG9jZnMyX2RvdWJsZV91bmxvY2soc3RydWN0IGlub2RlICppbm9kZTEsIHN0cnVjdCBpbm9kZSAqaW5vZGUyKTsKIC8qIEFuIG9ycGhhbiBkaXIgbmFtZSBpcyBhbiA4IGJ5dGUgdmFsdWUsIHByaW50ZWQgYXMgYSBoZXggc3RyaW5nICovCiAjZGVmaW5lIE9DRlMyX09SUEhBTl9OQU1FTEVOICgoaW50KSgyICogc2l6ZW9mKHU2NCkpKQogCkBAIC02NzgsOCArNjg2LDEwIEBACiB7CiAJaGFuZGxlX3QgKmhhbmRsZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIgPSBvbGRfZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKIAlpbnQgZXJyOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2Rpcl9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CkBAIC02OTYsMTkgKzcwNiwzMyBAQAogCiAJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOwogCi0JZXJyID0gb2NmczJfaW5vZGVfbG9ja19uZXN0ZWQoZGlyLCAmcGFyZW50X2ZlX2JoLCAxLCBPSV9MU19QQVJFTlQpOworCWVyciA9IG9jZnMyX2RvdWJsZV9sb2NrKG9zYiwgJm9sZF9kaXJfYmgsIG9sZF9kaXIsCisJCQkmcGFyZW50X2ZlX2JoLCBkaXIsIDApOwogCWlmIChlcnIgPCAwKSB7CiAJCWlmIChlcnIgIT0gLUVOT0VOVCkKIAkJCW1sb2dfZXJybm8oZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBtYWtlIHN1cmUgYm90aCBkaXJzIGhhdmUgYmhzCisJICogZ2V0IGFuIGV4dHJhIHJlZiBvbiBvbGRfZGlyX2JoIGlmIG9sZD09bmV3ICovCisJaWYgKCFwYXJlbnRfZmVfYmgpIHsKKwkJaWYgKG9sZF9kaXJfYmgpIHsKKwkJCXBhcmVudF9mZV9iaCA9IG9sZF9kaXJfYmg7CisJCQlnZXRfYmgocGFyZW50X2ZlX2JoKTsKKwkJfSBlbHNlIHsKKwkJCW1sb2coTUxfRVJST1IsICIlczogbm8gb2xkX2Rpcl9iaCFcbiIsIG9zYi0+dXVpZF9zdHIpOworCQkJZXJyID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCiAJaWYgKCFkaXItPmlfbmxpbmspIHsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gb2NmczJfbG9va3VwX2lub19mcm9tX25hbWUoZGlyLCBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKKwllcnIgPSBvY2ZzMl9sb29rdXBfaW5vX2Zyb21fbmFtZShvbGRfZGlyLCBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCW9sZF9kZW50cnktPmRfbmFtZS5sZW4sICZvbGRfZGVfaW5vKTsKIAlpZiAoZXJyKSB7CiAJCWVyciA9IC1FTk9FTlQ7CkBAIC04MDEsMTAgKzgyNSwxMSBAQAogCW9jZnMyX2lub2RlX3VubG9jayhpbm9kZSwgMSk7CiAKIG91dDoKLQlvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAxKTsKKwlvY2ZzMl9kb3VibGVfdW5sb2NrKG9sZF9kaXIsIGRpcik7CiAKIAlicmVsc2UoZmVfYmgpOwogCWJyZWxzZShwYXJlbnRfZmVfYmgpOworCWJyZWxzZShvbGRfZGlyX2JoKTsKIAogCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CiAKQEAgLTEwNzIsMTQgKzEwOTcsMTUgQEAKIH0KIAogLyoKLSAqIFRoZSBvbmx5IHBsYWNlIHRoaXMgc2hvdWxkIGJlIHVzZWQgaXMgcmVuYW1lIQorICogVGhlIG9ubHkgcGxhY2UgdGhpcyBzaG91bGQgYmUgdXNlZCBpcyByZW5hbWUgYW5kIGxpbmshCiAgKiBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgaWQsIHRoZW4gdGhlIDFzdCBvbmUgaXMgdGhlIG9ubHkgb25lIGxvY2tlZC4KICAqLwogc3RhdGljIGludCBvY2ZzMl9kb3VibGVfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgxLAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMSwKIAkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgyLAotCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMikKKwkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZTIsCisJCQkgICAgIGludCByZW5hbWUpCiB7CiAJaW50IHN0YXR1czsKIAlpbnQgaW5vZGUxX2lzX2FuY2VzdG9yLCBpbm9kZTJfaXNfYW5jZXN0b3I7CkBAIC0xMTI3LDcgKzExNTMsNyBAQAogCQl9CiAJCS8qIGxvY2sgaWQyICovCiAJCXN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2tfbmVzdGVkKGlub2RlMiwgYmgyLCAxLAotCQkJCQkJIE9JX0xTX1JFTkFNRTEpOworCQkJCXJlbmFtZSA9PSAxID8gT0lfTFNfUkVOQU1FMSA6IE9JX0xTX1BBUkVOVCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlpZiAoc3RhdHVzICE9IC1FTk9FTlQpCiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTEzNiw3ICsxMTYyLDggQEAKIAl9CiAKIAkvKiBsb2NrIGlkMSAqLwotCXN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2tfbmVzdGVkKGlub2RlMSwgYmgxLCAxLCBPSV9MU19SRU5BTUUyKTsKKwlzdGF0dXMgPSBvY2ZzMl9pbm9kZV9sb2NrX25lc3RlZChpbm9kZTEsIGJoMSwgMSwKKwkJCXJlbmFtZSA9PSAxID8gIE9JX0xTX1JFTkFNRTIgOiBPSV9MU19QQVJFTlQpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCS8qCiAJCSAqIEFuIGVycm9yIHJldHVybiBtdXN0IG1lYW4gdGhhdCBubyBjbHVzdGVyIGxvY2tzCkBAIC0xMjUyLDcgKzEyNzksNyBAQAogCiAJLyogaWYgb2xkIGFuZCBuZXcgYXJlIHRoZSBzYW1lLCB0aGlzJ2xsIGp1c3QgZG8gb25lIGxvY2suICovCiAJc3RhdHVzID0gb2NmczJfZG91YmxlX2xvY2sob3NiLCAmb2xkX2Rpcl9iaCwgb2xkX2RpciwKLQkJCQkgICAmbmV3X2Rpcl9iaCwgbmV3X2Rpcik7CisJCQkJICAgJm5ld19kaXJfYmgsIG5ld19kaXIsIDEpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggOGYwYWNlZi4uNjlkZjViMiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC0yMzk2LDMwICsyMzk2LDI1IEBACiB9CiAKIC8qIEdlbmVyaWMgcm91dGluZSBmb3IgZ2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBzdHJ1Y3R1cmUgKi8KLXN0YXRpYyB2b2lkIGRvX2dldF9kcWJsayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqZGkpCitzdGF0aWMgdm9pZCBkb19nZXRfZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCwgc3RydWN0IHFjX2RxYmxrICpkaSkKIHsKIAlzdHJ1Y3QgbWVtX2RxYmxrICpkbSA9ICZkcXVvdC0+ZHFfZHFiOwogCiAJbWVtc2V0KGRpLCAwLCBzaXplb2YoKmRpKSk7Ci0JZGktPmRfdmVyc2lvbiA9IEZTX0RRVU9UX1ZFUlNJT047Ci0JZGktPmRfZmxhZ3MgPSBkcXVvdC0+ZHFfaWQudHlwZSA9PSBVU1JRVU9UQSA/Ci0JCQlGU19VU0VSX1FVT1RBIDogRlNfR1JPVVBfUVVPVEE7Ci0JZGktPmRfaWQgPSBmcm9tX2txaWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBkcXVvdC0+ZHFfaWQpOwotCiAJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwotCWRpLT5kX2Jsa19oYXJkbGltaXQgPSBzdG9xYihkbS0+ZHFiX2JoYXJkbGltaXQpOwotCWRpLT5kX2Jsa19zb2Z0bGltaXQgPSBzdG9xYihkbS0+ZHFiX2Jzb2Z0bGltaXQpOworCWRpLT5kX3NwY19oYXJkbGltaXQgPSBkbS0+ZHFiX2JoYXJkbGltaXQ7CisJZGktPmRfc3BjX3NvZnRsaW1pdCA9IGRtLT5kcWJfYnNvZnRsaW1pdDsKIAlkaS0+ZF9pbm9faGFyZGxpbWl0ID0gZG0tPmRxYl9paGFyZGxpbWl0OwogCWRpLT5kX2lub19zb2Z0bGltaXQgPSBkbS0+ZHFiX2lzb2Z0bGltaXQ7Ci0JZGktPmRfYmNvdW50ID0gZG0tPmRxYl9jdXJzcGFjZSArIGRtLT5kcWJfcnN2c3BhY2U7Ci0JZGktPmRfaWNvdW50ID0gZG0tPmRxYl9jdXJpbm9kZXM7Ci0JZGktPmRfYnRpbWVyID0gZG0tPmRxYl9idGltZTsKLQlkaS0+ZF9pdGltZXIgPSBkbS0+ZHFiX2l0aW1lOworCWRpLT5kX3NwYWNlID0gZG0tPmRxYl9jdXJzcGFjZSArIGRtLT5kcWJfcnN2c3BhY2U7CisJZGktPmRfaW5vX2NvdW50ID0gZG0tPmRxYl9jdXJpbm9kZXM7CisJZGktPmRfc3BjX3RpbWVyID0gZG0tPmRxYl9idGltZTsKKwlkaS0+ZF9pbm9fdGltZXIgPSBkbS0+ZHFiX2l0aW1lOwogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwogfQogCiBpbnQgZHF1b3RfZ2V0X2RxYmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrcWlkIHFpZCwKLQkJICAgIHN0cnVjdCBmc19kaXNrX3F1b3RhICpkaSkKKwkJICAgIHN0cnVjdCBxY19kcWJsayAqZGkpCiB7CiAJc3RydWN0IGRxdW90ICpkcXVvdDsKIApAQCAtMjQzMyw3MCArMjQyOCw3MCBAQAogfQogRVhQT1JUX1NZTUJPTChkcXVvdF9nZXRfZHFibGspOwogCi0jZGVmaW5lIFZGU19GU19EUV9NQVNLIFwKLQkoRlNfRFFfQkNPVU5UIHwgRlNfRFFfQlNPRlQgfCBGU19EUV9CSEFSRCB8IFwKLQkgRlNfRFFfSUNPVU5UIHwgRlNfRFFfSVNPRlQgfCBGU19EUV9JSEFSRCB8IFwKLQkgRlNfRFFfQlRJTUVSIHwgRlNfRFFfSVRJTUVSKQorI2RlZmluZSBWRlNfUUNfTUFTSyBcCisJKFFDX1NQQUNFIHwgUUNfU1BDX1NPRlQgfCBRQ19TUENfSEFSRCB8IFwKKwkgUUNfSU5PX0NPVU5UIHwgUUNfSU5PX1NPRlQgfCBRQ19JTk9fSEFSRCB8IFwKKwkgUUNfU1BDX1RJTUVSIHwgUUNfSU5PX1RJTUVSKQogCiAvKiBHZW5lcmljIHJvdXRpbmUgZm9yIHNldHRpbmcgY29tbW9uIHBhcnQgb2YgcXVvdGEgc3RydWN0dXJlICovCi1zdGF0aWMgaW50IGRvX3NldF9kcWJsayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqZGkpCitzdGF0aWMgaW50IGRvX3NldF9kcWJsayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBzdHJ1Y3QgcWNfZHFibGsgKmRpKQogewogCXN0cnVjdCBtZW1fZHFibGsgKmRtID0gJmRxdW90LT5kcV9kcWI7CiAJaW50IGNoZWNrX2JsaW0gPSAwLCBjaGVja19pbGltID0gMDsKIAlzdHJ1Y3QgbWVtX2RxaW5mbyAqZHFpID0gJnNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bZHF1b3QtPmRxX2lkLnR5cGVdOwogCi0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIH5WRlNfRlNfRFFfTUFTSykKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgflZGU19RQ19NQVNLKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICgoKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JTT0ZUKSAmJgotCSAgICAgKGRpLT5kX2Jsa19zb2Z0bGltaXQgPiBkcWktPmRxaV9tYXhibGltaXQpKSB8fAotCSAgICAoKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JIQVJEKSAmJgotCSAgICAgKGRpLT5kX2Jsa19oYXJkbGltaXQgPiBkcWktPmRxaV9tYXhibGltaXQpKSB8fAotCSAgICAoKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lTT0ZUKSAmJgorCWlmICgoKGRpLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19TT0ZUKSAmJgorCSAgICAgc3RvcWIoZGktPmRfc3BjX3NvZnRsaW1pdCkgPiBkcWktPmRxaV9tYXhibGltaXQpIHx8CisJICAgICgoZGktPmRfZmllbGRtYXNrICYgUUNfU1BDX0hBUkQpICYmCisJICAgICBzdG9xYihkaS0+ZF9zcGNfaGFyZGxpbWl0KSA+IGRxaS0+ZHFpX21heGJsaW1pdCkgfHwKKwkgICAgKChkaS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fU09GVCkgJiYKIAkgICAgIChkaS0+ZF9pbm9fc29mdGxpbWl0ID4gZHFpLT5kcWlfbWF4aWxpbWl0KSkgfHwKLQkgICAgKChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JSEFSRCkgJiYKKwkgICAgKChkaS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fSEFSRCkgJiYKIAkgICAgIChkaS0+ZF9pbm9faGFyZGxpbWl0ID4gZHFpLT5kcWlfbWF4aWxpbWl0KSkpCiAJCXJldHVybiAtRVJBTkdFOwogCiAJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CQ09VTlQpIHsKLQkJZG0tPmRxYl9jdXJzcGFjZSA9IGRpLT5kX2Jjb3VudCAtIGRtLT5kcWJfcnN2c3BhY2U7CisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIFFDX1NQQUNFKSB7CisJCWRtLT5kcWJfY3Vyc3BhY2UgPSBkaS0+ZF9zcGFjZSAtIGRtLT5kcWJfcnN2c3BhY2U7CiAJCWNoZWNrX2JsaW0gPSAxOwogCQlzZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9TUEFDRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKIAl9CiAKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfQlNPRlQpCi0JCWRtLT5kcWJfYnNvZnRsaW1pdCA9IHFidG9zKGRpLT5kX2Jsa19zb2Z0bGltaXQpOwotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CSEFSRCkKLQkJZG0tPmRxYl9iaGFyZGxpbWl0ID0gcWJ0b3MoZGktPmRfYmxrX2hhcmRsaW1pdCk7Ci0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIChGU19EUV9CU09GVCB8IEZTX0RRX0JIQVJEKSkgeworCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfU09GVCkKKwkJZG0tPmRxYl9ic29mdGxpbWl0ID0gZGktPmRfc3BjX3NvZnRsaW1pdDsKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgUUNfU1BDX0hBUkQpCisJCWRtLT5kcWJfYmhhcmRsaW1pdCA9IGRpLT5kX3NwY19oYXJkbGltaXQ7CisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIChRQ19TUENfU09GVCB8IFFDX1NQQ19IQVJEKSkgewogCQljaGVja19ibGltID0gMTsKIAkJc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfQkxJTUlUU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKIAl9CiAKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfSUNPVU5UKSB7Ci0JCWRtLT5kcWJfY3VyaW5vZGVzID0gZGktPmRfaWNvdW50OworCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fQ09VTlQpIHsKKwkJZG0tPmRxYl9jdXJpbm9kZXMgPSBkaS0+ZF9pbm9fY291bnQ7CiAJCWNoZWNrX2lsaW0gPSAxOwogCQlzZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9JTk9ERVNfQiwgJmRxdW90LT5kcV9mbGFncyk7CiAJfQogCi0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lTT0ZUKQorCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fU09GVCkKIAkJZG0tPmRxYl9pc29mdGxpbWl0ID0gZGktPmRfaW5vX3NvZnRsaW1pdDsKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfSUhBUkQpCisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19IQVJEKQogCQlkbS0+ZHFiX2loYXJkbGltaXQgPSBkaS0+ZF9pbm9faGFyZGxpbWl0OwotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiAoRlNfRFFfSVNPRlQgfCBGU19EUV9JSEFSRCkpIHsKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgKFFDX0lOT19TT0ZUIHwgUUNfSU5PX0hBUkQpKSB7CiAJCWNoZWNrX2lsaW0gPSAxOwogCQlzZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9JTElNSVRTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCX0KIAotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CVElNRVIpIHsKLQkJZG0tPmRxYl9idGltZSA9IGRpLT5kX2J0aW1lcjsKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgUUNfU1BDX1RJTUVSKSB7CisJCWRtLT5kcWJfYnRpbWUgPSBkaS0+ZF9zcGNfdGltZXI7CiAJCWNoZWNrX2JsaW0gPSAxOwogCQlzZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9CVElNRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKIAl9CiAKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfSVRJTUVSKSB7Ci0JCWRtLT5kcWJfaXRpbWUgPSBkaS0+ZF9pdGltZXI7CisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19USU1FUikgeworCQlkbS0+ZHFiX2l0aW1lID0gZGktPmRfaW5vX3RpbWVyOwogCQljaGVja19pbGltID0gMTsKIAkJc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfSVRJTUVfQiwgJmRxdW90LT5kcV9mbGFncyk7CiAJfQpAQCAtMjUwNiw3ICsyNTAxLDcgQEAKIAkJICAgIGRtLT5kcWJfY3Vyc3BhY2UgPCBkbS0+ZHFiX2Jzb2Z0bGltaXQpIHsKIAkJCWRtLT5kcWJfYnRpbWUgPSAwOwogCQkJY2xlYXJfYml0KERRX0JMS1NfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JCX0gZWxzZSBpZiAoIShkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CVElNRVIpKQorCQl9IGVsc2UgaWYgKCEoZGktPmRfZmllbGRtYXNrICYgUUNfU1BDX1RJTUVSKSkKIAkJCS8qIFNldCBncmFjZSBvbmx5IGlmIHVzZXIgaGFzbid0IHByb3ZpZGVkIGhpcyBvd24uLi4gKi8KIAkJCWRtLT5kcWJfYnRpbWUgPSBnZXRfc2Vjb25kcygpICsgZHFpLT5kcWlfYmdyYWNlOwogCX0KQEAgLTI1MTUsNyArMjUxMCw3IEBACiAJCSAgICBkbS0+ZHFiX2N1cmlub2RlcyA8IGRtLT5kcWJfaXNvZnRsaW1pdCkgewogCQkJZG0tPmRxYl9pdGltZSA9IDA7CiAJCQljbGVhcl9iaXQoRFFfSU5PREVTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotCQl9IGVsc2UgaWYgKCEoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfSVRJTUVSKSkKKwkJfSBlbHNlIGlmICghKGRpLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19USU1FUikpCiAJCQkvKiBTZXQgZ3JhY2Ugb25seSBpZiB1c2VyIGhhc24ndCBwcm92aWRlZCBoaXMgb3duLi4uICovCiAJCQlkbS0+ZHFiX2l0aW1lID0gZ2V0X3NlY29uZHMoKSArIGRxaS0+ZHFpX2lncmFjZTsKIAl9CkBAIC0yNTMxLDcgKzI1MjYsNyBAQAogfQogCiBpbnQgZHF1b3Rfc2V0X2RxYmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrcWlkIHFpZCwKLQkJICBzdHJ1Y3QgZnNfZGlza19xdW90YSAqZGkpCisJCSAgc3RydWN0IHFjX2RxYmxrICpkaSkKIHsKIAlzdHJ1Y3QgZHF1b3QgKmRxdW90OwogCWludCByYzsKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhLmMgYi9mcy9xdW90YS9xdW90YS5jCmluZGV4IDJhYTQxNTEuLjZmMzg1NjMgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL3F1b3RhLmMKKysrIGIvZnMvcXVvdGEvcXVvdGEuYwpAQCAtMTE4LDE3ICsxMTgsMjcgQEAKIAlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X2luZm8oc2IsIHR5cGUsICZpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgY29weV90b19pZl9kcWJsayhzdHJ1Y3QgaWZfZHFibGsgKmRzdCwgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKnNyYykKK3N0YXRpYyBpbmxpbmUgcXNpemVfdCBxYnRvcyhxc2l6ZV90IGJsb2NrcykKK3sKKwlyZXR1cm4gYmxvY2tzIDw8IFFJRl9EUUJMS1NJWkVfQklUUzsKK30KKworc3RhdGljIGlubGluZSBxc2l6ZV90IHN0b3FiKHFzaXplX3Qgc3BhY2UpCit7CisJcmV0dXJuIChzcGFjZSArIFFJRl9EUUJMS1NJWkUgLSAxKSA+PiBRSUZfRFFCTEtTSVpFX0JJVFM7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfdG9faWZfZHFibGsoc3RydWN0IGlmX2RxYmxrICpkc3QsIHN0cnVjdCBxY19kcWJsayAqc3JjKQogewogCW1lbXNldChkc3QsIDAsIHNpemVvZigqZHN0KSk7Ci0JZHN0LT5kcWJfYmhhcmRsaW1pdCA9IHNyYy0+ZF9ibGtfaGFyZGxpbWl0OwotCWRzdC0+ZHFiX2Jzb2Z0bGltaXQgPSBzcmMtPmRfYmxrX3NvZnRsaW1pdDsKLQlkc3QtPmRxYl9jdXJzcGFjZSA9IHNyYy0+ZF9iY291bnQ7CisJZHN0LT5kcWJfYmhhcmRsaW1pdCA9IHN0b3FiKHNyYy0+ZF9zcGNfaGFyZGxpbWl0KTsKKwlkc3QtPmRxYl9ic29mdGxpbWl0ID0gc3RvcWIoc3JjLT5kX3NwY19zb2Z0bGltaXQpOworCWRzdC0+ZHFiX2N1cnNwYWNlID0gc3JjLT5kX3NwYWNlOwogCWRzdC0+ZHFiX2loYXJkbGltaXQgPSBzcmMtPmRfaW5vX2hhcmRsaW1pdDsKIAlkc3QtPmRxYl9pc29mdGxpbWl0ID0gc3JjLT5kX2lub19zb2Z0bGltaXQ7Ci0JZHN0LT5kcWJfY3VyaW5vZGVzID0gc3JjLT5kX2ljb3VudDsKLQlkc3QtPmRxYl9idGltZSA9IHNyYy0+ZF9idGltZXI7Ci0JZHN0LT5kcWJfaXRpbWUgPSBzcmMtPmRfaXRpbWVyOworCWRzdC0+ZHFiX2N1cmlub2RlcyA9IHNyYy0+ZF9pbm9fY291bnQ7CisJZHN0LT5kcWJfYnRpbWUgPSBzcmMtPmRfc3BjX3RpbWVyOworCWRzdC0+ZHFiX2l0aW1lID0gc3JjLT5kX2lub190aW1lcjsKIAlkc3QtPmRxYl92YWxpZCA9IFFJRl9BTEw7CiB9CiAKQEAgLTEzNiw3ICsxNDYsNyBAQAogCQkJICB2b2lkIF9fdXNlciAqYWRkcikKIHsKIAlzdHJ1Y3Qga3FpZCBxaWQ7Ci0Jc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOworCXN0cnVjdCBxY19kcWJsayBmZHE7CiAJc3RydWN0IGlmX2RxYmxrIGlkcTsKIAlpbnQgcmV0OwogCkBAIC0xNTQsMzYgKzE2NCwzNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5X2Zyb21faWZfZHFibGsoc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmRzdCwgc3RydWN0IGlmX2RxYmxrICpzcmMpCitzdGF0aWMgdm9pZCBjb3B5X2Zyb21faWZfZHFibGsoc3RydWN0IHFjX2RxYmxrICpkc3QsIHN0cnVjdCBpZl9kcWJsayAqc3JjKQogewotCWRzdC0+ZF9ibGtfaGFyZGxpbWl0ID0gc3JjLT5kcWJfYmhhcmRsaW1pdDsKLQlkc3QtPmRfYmxrX3NvZnRsaW1pdCAgPSBzcmMtPmRxYl9ic29mdGxpbWl0OwotCWRzdC0+ZF9iY291bnQgPSBzcmMtPmRxYl9jdXJzcGFjZTsKKwlkc3QtPmRfc3BjX2hhcmRsaW1pdCA9IHFidG9zKHNyYy0+ZHFiX2JoYXJkbGltaXQpOworCWRzdC0+ZF9zcGNfc29mdGxpbWl0ID0gcWJ0b3Moc3JjLT5kcWJfYnNvZnRsaW1pdCk7CisJZHN0LT5kX3NwYWNlID0gc3JjLT5kcWJfY3Vyc3BhY2U7CiAJZHN0LT5kX2lub19oYXJkbGltaXQgPSBzcmMtPmRxYl9paGFyZGxpbWl0OwogCWRzdC0+ZF9pbm9fc29mdGxpbWl0ID0gc3JjLT5kcWJfaXNvZnRsaW1pdDsKLQlkc3QtPmRfaWNvdW50ID0gc3JjLT5kcWJfY3VyaW5vZGVzOwotCWRzdC0+ZF9idGltZXIgPSBzcmMtPmRxYl9idGltZTsKLQlkc3QtPmRfaXRpbWVyID0gc3JjLT5kcWJfaXRpbWU7CisJZHN0LT5kX2lub19jb3VudCA9IHNyYy0+ZHFiX2N1cmlub2RlczsKKwlkc3QtPmRfc3BjX3RpbWVyID0gc3JjLT5kcWJfYnRpbWU7CisJZHN0LT5kX2lub190aW1lciA9IHNyYy0+ZHFiX2l0aW1lOwogCiAJZHN0LT5kX2ZpZWxkbWFzayA9IDA7CiAJaWYgKHNyYy0+ZHFiX3ZhbGlkICYgUUlGX0JMSU1JVFMpCi0JCWRzdC0+ZF9maWVsZG1hc2sgfD0gRlNfRFFfQlNPRlQgfCBGU19EUV9CSEFSRDsKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19TUENfU09GVCB8IFFDX1NQQ19IQVJEOwogCWlmIChzcmMtPmRxYl92YWxpZCAmIFFJRl9TUEFDRSkKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9CQ09VTlQ7CisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfU1BBQ0U7CiAJaWYgKHNyYy0+ZHFiX3ZhbGlkICYgUUlGX0lMSU1JVFMpCi0JCWRzdC0+ZF9maWVsZG1hc2sgfD0gRlNfRFFfSVNPRlQgfCBGU19EUV9JSEFSRDsKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19JTk9fU09GVCB8IFFDX0lOT19IQVJEOwogCWlmIChzcmMtPmRxYl92YWxpZCAmIFFJRl9JTk9ERVMpCi0JCWRzdC0+ZF9maWVsZG1hc2sgfD0gRlNfRFFfSUNPVU5UOworCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX0lOT19DT1VOVDsKIAlpZiAoc3JjLT5kcWJfdmFsaWQgJiBRSUZfQlRJTUUpCi0JCWRzdC0+ZF9maWVsZG1hc2sgfD0gRlNfRFFfQlRJTUVSOworCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1NQQ19USU1FUjsKIAlpZiAoc3JjLT5kcWJfdmFsaWQgJiBRSUZfSVRJTUUpCi0JCWRzdC0+ZF9maWVsZG1hc2sgfD0gRlNfRFFfSVRJTUVSOworCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX0lOT19USU1FUjsKIH0KIAogc3RhdGljIGludCBxdW90YV9zZXRxdW90YShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsCiAJCQkgIHZvaWQgX191c2VyICphZGRyKQogewotCXN0cnVjdCBmc19kaXNrX3F1b3RhIGZkcTsKKwlzdHJ1Y3QgcWNfZHFibGsgZmRxOwogCXN0cnVjdCBpZl9kcWJsayBpZHE7CiAJc3RydWN0IGtxaWQgcWlkOwogCkBAIC0yNDcsMTAgKzI1Nyw3OCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBYRlMgZGVmaW5lcyBCQlRPQiBhbmQgQlRPQkIgbWFjcm9zIGluc2lkZSBmcy94ZnMvIGFuZCB3ZSBjYW5ub3QgbW92ZSB0aGVtCisgKiBvdXQgb2YgdGhlcmUgYXMgeGZzcHJvZ3MgcmVseSBvbiBkZWZpbml0aW9ucyBiZWluZyBpbiB0aGF0IGhlYWRlciBmaWxlLiBTbworICoganVzdCBkZWZpbmUgc2FtZSBmdW5jdGlvbnMgaGVyZSBmb3IgcXVvdGEgcHVycG9zZXMuCisgKi8KKyNkZWZpbmUgWEZTX0JCX1NISUZUIDkKKworc3RhdGljIGlubGluZSB1NjQgcXVvdGFfYmJ0b2IodTY0IGJsb2NrcykKK3sKKwlyZXR1cm4gYmxvY2tzIDw8IFhGU19CQl9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1NjQgcXVvdGFfYnRvYmIodTY0IGJ5dGVzKQoreworCXJldHVybiAoYnl0ZXMgKyAoMSA8PCBYRlNfQkJfU0hJRlQpIC0gMSkgPj4gWEZTX0JCX1NISUZUOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2Zyb21feGZzX2RxYmxrKHN0cnVjdCBxY19kcWJsayAqZHN0LCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqc3JjKQoreworCWRzdC0+ZF9zcGNfaGFyZGxpbWl0ID0gcXVvdGFfYmJ0b2Ioc3JjLT5kX2Jsa19oYXJkbGltaXQpOworCWRzdC0+ZF9zcGNfc29mdGxpbWl0ID0gcXVvdGFfYmJ0b2Ioc3JjLT5kX2Jsa19zb2Z0bGltaXQpOworCWRzdC0+ZF9pbm9faGFyZGxpbWl0ID0gc3JjLT5kX2lub19oYXJkbGltaXQ7CisJZHN0LT5kX2lub19zb2Z0bGltaXQgPSBzcmMtPmRfaW5vX3NvZnRsaW1pdDsKKwlkc3QtPmRfc3BhY2UgPSBxdW90YV9iYnRvYihzcmMtPmRfYmNvdW50KTsKKwlkc3QtPmRfaW5vX2NvdW50ID0gc3JjLT5kX2ljb3VudDsKKwlkc3QtPmRfaW5vX3RpbWVyID0gc3JjLT5kX2l0aW1lcjsKKwlkc3QtPmRfc3BjX3RpbWVyID0gc3JjLT5kX2J0aW1lcjsKKwlkc3QtPmRfaW5vX3dhcm5zID0gc3JjLT5kX2l3YXJuczsKKwlkc3QtPmRfc3BjX3dhcm5zID0gc3JjLT5kX2J3YXJuczsKKwlkc3QtPmRfcnRfc3BjX2hhcmRsaW1pdCA9IHF1b3RhX2JidG9iKHNyYy0+ZF9ydGJfaGFyZGxpbWl0KTsKKwlkc3QtPmRfcnRfc3BjX3NvZnRsaW1pdCA9IHF1b3RhX2JidG9iKHNyYy0+ZF9ydGJfc29mdGxpbWl0KTsKKwlkc3QtPmRfcnRfc3BhY2UgPSBxdW90YV9iYnRvYihzcmMtPmRfcnRiY291bnQpOworCWRzdC0+ZF9ydF9zcGNfdGltZXIgPSBzcmMtPmRfcnRidGltZXI7CisJZHN0LT5kX3J0X3NwY193YXJucyA9IHNyYy0+ZF9ydGJ3YXJuczsKKwlkc3QtPmRfZmllbGRtYXNrID0gMDsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lTT0ZUKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX0lOT19TT0ZUOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfSUhBUkQpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfSU5PX0hBUkQ7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9CU09GVCkKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19TUENfU09GVDsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JIQVJEKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1NQQ19IQVJEOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCU09GVCkKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19SVF9TUENfU09GVDsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX1JUQkhBUkQpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfUlRfU1BDX0hBUkQ7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9CVElNRVIpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfU1BDX1RJTUVSOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfSVRJTUVSKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX0lOT19USU1FUjsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX1JUQlRJTUVSKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1JUX1NQQ19USU1FUjsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JXQVJOUykKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19TUENfV0FSTlM7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9JV0FSTlMpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfSU5PX1dBUk5TOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCV0FSTlMpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfUlRfU1BDX1dBUk5TOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfQkNPVU5UKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1NQQUNFOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfSUNPVU5UKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX0lOT19DT1VOVDsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX1JUQkNPVU5UKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1JUX1NQQUNFOworfQorCiBzdGF0aWMgaW50IHF1b3RhX3NldHhxdW90YShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsCiAJCQkgICB2b2lkIF9fdXNlciAqYWRkcikKIHsKIAlzdHJ1Y3QgZnNfZGlza19xdW90YSBmZHE7CisJc3RydWN0IHFjX2RxYmxrIHFkcTsKIAlzdHJ1Y3Qga3FpZCBxaWQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZkcSwgYWRkciwgc2l6ZW9mKGZkcSkpKQpAQCAtMjYwLDEzICszMzgsNDQgQEAKIAlxaWQgPSBtYWtlX2txaWQoY3VycmVudF91c2VyX25zKCksIHR5cGUsIGlkKTsKIAlpZiAoIXFpZF92YWxpZChxaWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X2RxYmxrKHNiLCBxaWQsICZmZHEpOworCWNvcHlfZnJvbV94ZnNfZHFibGsoJnFkcSwgJmZkcSk7CisJcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF9kcWJsayhzYiwgcWlkLCAmcWRxKTsKK30KKworc3RhdGljIHZvaWQgY29weV90b194ZnNfZHFibGsoc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmRzdCwgc3RydWN0IHFjX2RxYmxrICpzcmMsCisJCQkgICAgICBpbnQgdHlwZSwgcWlkX3QgaWQpCit7CisJbWVtc2V0KGRzdCwgMCwgc2l6ZW9mKCpkc3QpKTsKKwlkc3QtPmRfdmVyc2lvbiA9IEZTX0RRVU9UX1ZFUlNJT047CisJZHN0LT5kX2lkID0gaWQ7CisJaWYgKHR5cGUgPT0gVVNSUVVPVEEpCisJCWRzdC0+ZF9mbGFncyA9IEZTX1VTRVJfUVVPVEE7CisJZWxzZSBpZiAodHlwZSA9PSBQUkpRVU9UQSkKKwkJZHN0LT5kX2ZsYWdzID0gRlNfUFJPSl9RVU9UQTsKKwllbHNlCisJCWRzdC0+ZF9mbGFncyA9IEZTX0dST1VQX1FVT1RBOworCWRzdC0+ZF9ibGtfaGFyZGxpbWl0ID0gcXVvdGFfYnRvYmIoc3JjLT5kX3NwY19oYXJkbGltaXQpOworCWRzdC0+ZF9ibGtfc29mdGxpbWl0ID0gcXVvdGFfYnRvYmIoc3JjLT5kX3NwY19zb2Z0bGltaXQpOworCWRzdC0+ZF9pbm9faGFyZGxpbWl0ID0gc3JjLT5kX2lub19oYXJkbGltaXQ7CisJZHN0LT5kX2lub19zb2Z0bGltaXQgPSBzcmMtPmRfaW5vX3NvZnRsaW1pdDsKKwlkc3QtPmRfYmNvdW50ID0gcXVvdGFfYnRvYmIoc3JjLT5kX3NwYWNlKTsKKwlkc3QtPmRfaWNvdW50ID0gc3JjLT5kX2lub19jb3VudDsKKwlkc3QtPmRfaXRpbWVyID0gc3JjLT5kX2lub190aW1lcjsKKwlkc3QtPmRfYnRpbWVyID0gc3JjLT5kX3NwY190aW1lcjsKKwlkc3QtPmRfaXdhcm5zID0gc3JjLT5kX2lub193YXJuczsKKwlkc3QtPmRfYndhcm5zID0gc3JjLT5kX3NwY193YXJuczsKKwlkc3QtPmRfcnRiX2hhcmRsaW1pdCA9IHF1b3RhX2J0b2JiKHNyYy0+ZF9ydF9zcGNfaGFyZGxpbWl0KTsKKwlkc3QtPmRfcnRiX3NvZnRsaW1pdCA9IHF1b3RhX2J0b2JiKHNyYy0+ZF9ydF9zcGNfc29mdGxpbWl0KTsKKwlkc3QtPmRfcnRiY291bnQgPSBxdW90YV9idG9iYihzcmMtPmRfcnRfc3BhY2UpOworCWRzdC0+ZF9ydGJ0aW1lciA9IHNyYy0+ZF9ydF9zcGNfdGltZXI7CisJZHN0LT5kX3J0Yndhcm5zID0gc3JjLT5kX3J0X3NwY193YXJuczsKIH0KIAogc3RhdGljIGludCBxdW90YV9nZXR4cXVvdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLAogCQkJICAgdm9pZCBfX3VzZXIgKmFkZHIpCiB7CiAJc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOworCXN0cnVjdCBxY19kcWJsayBxZHE7CiAJc3RydWN0IGtxaWQgcWlkOwogCWludCByZXQ7CiAKQEAgLTI3NSw4ICszODQsMTEgQEAKIAlxaWQgPSBtYWtlX2txaWQoY3VycmVudF91c2VyX25zKCksIHR5cGUsIGlkKTsKIAlpZiAoIXFpZF92YWxpZChxaWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXQgPSBzYi0+c19xY29wLT5nZXRfZHFibGsoc2IsIHFpZCwgJmZkcSk7Ci0JaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFkZHIsICZmZHEsIHNpemVvZihmZHEpKSkKKwlyZXQgPSBzYi0+c19xY29wLT5nZXRfZHFibGsoc2IsIHFpZCwgJnFkcSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwljb3B5X3RvX3hmc19kcWJsaygmZmRxLCAmcWRxLCB0eXBlLCBpZCk7CisJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmZmRxLCBzaXplb2YoZmRxKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyLmMgYi9mcy91ZGYvZGlyLmMKaW5kZXggYTAxMmM1MS4uMDVlOTBlZCAxMDA2NDQKLS0tIGEvZnMvdWRmL2Rpci5jCisrKyBiL2ZzL3VkZi9kaXIuYwpAQCAtNTcsNiArNTcsNyBAQAogCXNlY3Rvcl90IG9mZnNldDsKIAlpbnQgaSwgbnVtLCByZXQgPSAwOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHsgTlVMTCwgMCwgezAsIDB9IH07CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKIAogCWlmIChjdHgtPnBvcyA9PSAwKSB7CiAJCWlmICghZGlyX2VtaXRfZG90KGZpbGUsIGN0eCkpCkBAIC03NiwxNiArNzcsMTYgQEAKIAlpZiAobmZfcG9zID09IDApCiAJCW5mX3BvcyA9IHVkZl9leHQwX29mZnNldChkaXIpOwogCi0JZmliaC5zb2Zmc2V0ID0gZmliaC5lb2Zmc2V0ID0gbmZfcG9zICYgKGRpci0+aV9zYi0+c19ibG9ja3NpemUgLSAxKTsKKwlmaWJoLnNvZmZzZXQgPSBmaWJoLmVvZmZzZXQgPSBuZl9wb3MgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSk7CiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKSB7Ci0JCWlmIChpbm9kZV9ibWFwKGRpciwgbmZfcG9zID4+IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cywKKwkJaWYgKGlub2RlX2JtYXAoZGlyLCBuZl9wb3MgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHMsCiAJCSAgICAmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KQogCQkgICAgIT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKSB7CiAJCQlyZXQgPSAtRU5PRU5UOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICZlbG9jLCBvZmZzZXQpOwotCQlpZiAoKCsrb2Zmc2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPCBlbGVuKSB7CisJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soc2IsICZlbG9jLCBvZmZzZXQpOworCQlpZiAoKCsrb2Zmc2V0IDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pIHsKIAkJCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQogCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCQkJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PQpAQCAtOTUsMTggKzk2LDE4IEBACiAJCQlvZmZzZXQgPSAwOwogCQl9CiAKLQkJaWYgKCEoZmliaC5zYmggPSBmaWJoLmViaCA9IHVkZl90cmVhZChkaXItPmlfc2IsIGJsb2NrKSkpIHsKKwkJaWYgKCEoZmliaC5zYmggPSBmaWJoLmViaCA9IHVkZl90cmVhZChzYiwgYmxvY2spKSkgewogCQkJcmV0ID0gLUVJTzsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYgKCEob2Zmc2V0ICYgKCgxNiA+PiAoZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSkpIC0gMSkpKSB7Ci0JCQlpID0gMTYgPj4gKGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cyAtIDkpOwotCQkJaWYgKGkgKyBvZmZzZXQgPiAoZWxlbiA+PiBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpKQotCQkJCWkgPSAoZWxlbiA+PiBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIC0gb2Zmc2V0OworCQlpZiAoIShvZmZzZXQgJiAoKDE2ID4+IChzYi0+c19ibG9ja3NpemVfYml0cyAtIDkpKSAtIDEpKSkgeworCQkJaSA9IDE2ID4+IChzYi0+c19ibG9ja3NpemVfYml0cyAtIDkpOworCQkJaWYgKGkgKyBvZmZzZXQgPiAoZWxlbiA+PiBzYi0+c19ibG9ja3NpemVfYml0cykpCisJCQkJaSA9IChlbGVuID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSAtIG9mZnNldDsKIAkJCWZvciAobnVtID0gMDsgaSA+IDA7IGktLSkgewotCQkJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmZWxvYywgb2Zmc2V0ICsgaSk7Ci0JCQkJdG1wID0gdWRmX3RnZXRibGsoZGlyLT5pX3NiLCBibG9jayk7CisJCQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgJmVsb2MsIG9mZnNldCArIGkpOworCQkJCXRtcCA9IHVkZl90Z2V0YmxrKHNiLCBibG9jayk7CiAJCQkJaWYgKHRtcCAmJiAhYnVmZmVyX3VwdG9kYXRlKHRtcCkgJiYgIWJ1ZmZlcl9sb2NrZWQodG1wKSkKIAkJCQkJYmhhW251bSsrXSA9IHRtcDsKIAkJCQllbHNlCkBAIC0xNTIsMTIgKzE1MywxMiBAQAogCQl9CiAKIAkJaWYgKChjZmkuZmlsZUNoYXJhY3RlcmlzdGljcyAmIEZJRF9GSUxFX0NIQVJfREVMRVRFRCkgIT0gMCkgewotCQkJaWYgKCFVREZfUVVFUllfRkxBRyhkaXItPmlfc2IsIFVERl9GTEFHX1VOREVMRVRFKSkKKwkJCWlmICghVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1VOREVMRVRFKSkKIAkJCQljb250aW51ZTsKIAkJfQogCiAJCWlmICgoY2ZpLmZpbGVDaGFyYWN0ZXJpc3RpY3MgJiBGSURfRklMRV9DSEFSX0hJRERFTikgIT0gMCkgewotCQkJaWYgKCFVREZfUVVFUllfRkxBRyhkaXItPmlfc2IsIFVERl9GTEFHX1VOSElERSkpCisJCQlpZiAoIVVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19VTkhJREUpKQogCQkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTE2NywxMiArMTY4LDEyIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWZsZW4gPSB1ZGZfZ2V0X2ZpbGVuYW1lKGRpci0+aV9zYiwgbmFtZXB0ciwgZm5hbWUsIGxmaSk7CisJCWZsZW4gPSB1ZGZfZ2V0X2ZpbGVuYW1lKHNiLCBuYW1lcHRyLCBsZmksIGZuYW1lLCBVREZfTkFNRV9MRU4pOwogCQlpZiAoIWZsZW4pCiAJCQljb250aW51ZTsKIAogCQl0bG9jID0gbGVsYl90b19jcHUoY2ZpLmljYi5leHRMb2NhdGlvbik7Ci0JCWlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJnRsb2MsIDApOworCQlpYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgJnRsb2MsIDApOwogCQlpZiAoIWRpcl9lbWl0KGN0eCwgZm5hbWUsIGZsZW4sIGlibG9jaywgRFRfVU5LTk9XTikpCiAJCQlnb3RvIG91dDsKIAl9IC8qIGVuZCB3aGlsZSAqLwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmMKaW5kZXggYmIxNTc3MS4uMDhmMzU1NSAxMDA2NDQKLS0tIGEvZnMvdWRmL2ZpbGUuYworKysgYi9mcy91ZGYvZmlsZS5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIHN0YXRpYyBpbnQgdWRmX3JlbGVhc2VfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUgJiYKLQkgICAgYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpID4gMSkgeworCSAgICBhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPT0gMSkgewogCQkvKgogCQkgKiBHcmFiIGlfbXV0ZXggdG8gYXZvaWQgcmFjZXMgd2l0aCB3cml0ZXMgY2hhbmdpbmcgaV9zaXplCiAJCSAqIHdoaWxlIHdlIGFyZSBydW5uaW5nLgpkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCBjOWI0ZGY1Li41YmM3MWQ5IDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYworKysgYi9mcy91ZGYvaW5vZGUuYwpAQCAtMTQ4OSw2ICsxNDg5LDIwIEBACiAJfQogCWlub2RlLT5pX2dlbmVyYXRpb24gPSBpaW5mby0+aV91bmlxdWU7CiAKKwkvKiBTYW5pdHkgY2hlY2tzIGZvciBmaWxlcyBpbiBJQ0Igc28gdGhhdCB3ZSBkb24ndCBnZXQgY29uZnVzZWQgbGF0ZXIgKi8KKwlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpIHsKKwkJLyoKKwkJICogRm9yIGZpbGUgaW4gSUNCIGRhdGEgaXMgc3RvcmVkIGluIGFsbG9jYXRpb24gZGVzY3JpcHRvcgorCQkgKiBzbyBzaXplcyBzaG91bGQgbWF0Y2gKKwkJICovCisJCWlmIChpaW5mby0+aV9sZW5BbGxvYyAhPSBpbm9kZS0+aV9zaXplKQorCQkJZ290byBvdXQ7CisJCS8qIEZpbGUgaW4gSUNCIGhhcyB0byBmaXQgaW4gdGhlcmUuLi4gKi8KKwkJaWYgKGlub2RlLT5pX3NpemUgPiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQorCQkJCQl1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpKQorCQkJZ290byBvdXQ7CisJfQorCiAJc3dpdGNoIChmZS0+aWNiVGFnLmZpbGVUeXBlKSB7CiAJY2FzZSBJQ0JUQUdfRklMRV9UWVBFX0RJUkVDVE9SWToKIAkJaW5vZGUtPmlfb3AgPSAmdWRmX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL25hbWVpLmMgYi9mcy91ZGYvbmFtZWkuYwppbmRleCBjMTJlMjYwLi4zM2IyNDZiIDEwMDY0NAotLS0gYS9mcy91ZGYvbmFtZWkuYworKysgYi9mcy91ZGYvbmFtZWkuYwpAQCAtMTU5LDE4ICsxNTksMTkgQEAKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmRpbmZvID0gVURGX0koZGlyKTsKIAlpbnQgaXNkb3Rkb3QgPSBjaGlsZC0+bGVuID09IDIgJiYKIAkJY2hpbGQtPm5hbWVbMF0gPT0gJy4nICYmIGNoaWxkLT5uYW1lWzFdID09ICcuJzsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwogCiAJc2l6ZSA9IHVkZl9leHQwX29mZnNldChkaXIpICsgZGlyLT5pX3NpemU7CiAJZl9wb3MgPSB1ZGZfZXh0MF9vZmZzZXQoZGlyKTsKIAogCWZpYmgtPnNiaCA9IGZpYmgtPmViaCA9IE5VTEw7Ci0JZmliaC0+c29mZnNldCA9IGZpYmgtPmVvZmZzZXQgPSBmX3BvcyAmIChkaXItPmlfc2ItPnNfYmxvY2tzaXplIC0gMSk7CisJZmliaC0+c29mZnNldCA9IGZpYmgtPmVvZmZzZXQgPSBmX3BvcyAmIChzYi0+c19ibG9ja3NpemUgLSAxKTsKIAlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSAhPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpIHsKLQkJaWYgKGlub2RlX2JtYXAoZGlyLCBmX3BvcyA+PiBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMsICZlcG9zLAorCQlpZiAoaW5vZGVfYm1hcChkaXIsIGZfcG9zID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzLCAmZXBvcywKIAkJICAgICZlbG9jLCAmZWxlbiwgJm9mZnNldCkgIT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQogCQkJZ290byBvdXRfZXJyOwotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJmVsb2MsIG9mZnNldCk7Ci0JCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pIHsKKwkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgJmVsb2MsIG9mZnNldCk7CisJCWlmICgoKytvZmZzZXQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpIDwgZWxlbikgewogCQkJaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCiAJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJCQllbHNlIGlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCkBAIC0xNzgsNyArMTc5LDcgQEAKIAkJfSBlbHNlCiAJCQlvZmZzZXQgPSAwOwogCi0JCWZpYmgtPnNiaCA9IGZpYmgtPmViaCA9IHVkZl90cmVhZChkaXItPmlfc2IsIGJsb2NrKTsKKwkJZmliaC0+c2JoID0gZmliaC0+ZWJoID0gdWRmX3RyZWFkKHNiLCBibG9jayk7CiAJCWlmICghZmliaC0+c2JoKQogCQkJZ290byBvdXRfZXJyOwogCX0KQEAgLTIxNywxMiArMjE4LDEyIEBACiAJCX0KIAogCQlpZiAoKGNmaS0+ZmlsZUNoYXJhY3RlcmlzdGljcyAmIEZJRF9GSUxFX0NIQVJfREVMRVRFRCkgIT0gMCkgewotCQkJaWYgKCFVREZfUVVFUllfRkxBRyhkaXItPmlfc2IsIFVERl9GTEFHX1VOREVMRVRFKSkKKwkJCWlmICghVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1VOREVMRVRFKSkKIAkJCQljb250aW51ZTsKIAkJfQogCiAJCWlmICgoY2ZpLT5maWxlQ2hhcmFjdGVyaXN0aWNzICYgRklEX0ZJTEVfQ0hBUl9ISURERU4pICE9IDApIHsKLQkJCWlmICghVURGX1FVRVJZX0ZMQUcoZGlyLT5pX3NiLCBVREZfRkxBR19VTkhJREUpKQorCQkJaWYgKCFVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfVU5ISURFKSkKIAkJCQljb250aW51ZTsKIAkJfQogCkBAIC0yMzMsNyArMjM0LDcgQEAKIAkJaWYgKCFsZmkpCiAJCQljb250aW51ZTsKIAotCQlmbGVuID0gdWRmX2dldF9maWxlbmFtZShkaXItPmlfc2IsIG5hbWVwdHIsIGZuYW1lLCBsZmkpOworCQlmbGVuID0gdWRmX2dldF9maWxlbmFtZShzYiwgbmFtZXB0ciwgbGZpLCBmbmFtZSwgVURGX05BTUVfTEVOKTsKIAkJaWYgKGZsZW4gJiYgdWRmX21hdGNoKGZsZW4sIGZuYW1lLCBjaGlsZC0+bGVuLCBjaGlsZC0+bmFtZSkpCiAJCQlnb3RvIG91dF9vazsKIAl9CmRpZmYgLS1naXQgYS9mcy91ZGYvc3ltbGluay5jIGIvZnMvdWRmL3N5bWxpbmsuYwppbmRleCA2ZmI3OTQ1Li5hYzEwY2E5IDEwMDY0NAotLS0gYS9mcy91ZGYvc3ltbGluay5jCisrKyBiL2ZzL3VkZi9zeW1saW5rLmMKQEAgLTMwLDQ5ICszMCw3MyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSAidWRmX2kuaCIKIAotc3RhdGljIHZvaWQgdWRmX3BjX3RvX2NoYXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgY2hhciAqZnJvbSwKLQkJCSAgIGludCBmcm9tbGVuLCB1bnNpZ25lZCBjaGFyICp0bykKK3N0YXRpYyBpbnQgdWRmX3BjX3RvX2NoYXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgY2hhciAqZnJvbSwKKwkJCSAgaW50IGZyb21sZW4sIHVuc2lnbmVkIGNoYXIgKnRvLCBpbnQgdG9sZW4pCiB7CiAJc3RydWN0IHBhdGhDb21wb25lbnQgKnBjOwogCWludCBlbGVuID0gMDsKKwlpbnQgY29tcF9sZW47CiAJdW5zaWduZWQgY2hhciAqcCA9IHRvOwogCisJLyogUmVzZXJ2ZSBvbmUgYnl0ZSBmb3IgdGVybWluYXRpbmcgXDAgKi8KKwl0b2xlbi0tOwogCXdoaWxlIChlbGVuIDwgZnJvbWxlbikgewogCQlwYyA9IChzdHJ1Y3QgcGF0aENvbXBvbmVudCAqKShmcm9tICsgZWxlbik7CisJCWVsZW4gKz0gc2l6ZW9mKHN0cnVjdCBwYXRoQ29tcG9uZW50KTsKIAkJc3dpdGNoIChwYy0+Y29tcG9uZW50VHlwZSkgewogCQljYXNlIDE6CiAJCQkvKgogCQkJICogU3ltbGluayBwb2ludHMgdG8gc29tZSBwbGFjZSB3aGljaCBzaG91bGQgYmUgYWdyZWVkCiAgCQkJICogdXBvbiBiZXR3ZWVuIG9yaWdpbmF0b3IgYW5kIHJlY2VpdmVyIG9mIHRoZSBtZWRpYS4gSWdub3JlLgogCQkJICovCi0JCQlpZiAocGMtPmxlbmd0aENvbXBvbmVudElkZW50ID4gMCkKKwkJCWlmIChwYy0+bGVuZ3RoQ29tcG9uZW50SWRlbnQgPiAwKSB7CisJCQkJZWxlbiArPSBwYy0+bGVuZ3RoQ29tcG9uZW50SWRlbnQ7CiAJCQkJYnJlYWs7CisJCQl9CiAJCQkvKiBGYWxsIHRocm91Z2ggKi8KIAkJY2FzZSAyOgorCQkJaWYgKHRvbGVuID09IDApCisJCQkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAJCQlwID0gdG87CiAJCQkqcCsrID0gJy8nOworCQkJdG9sZW4tLTsKIAkJCWJyZWFrOwogCQljYXNlIDM6CisJCQlpZiAodG9sZW4gPCAzKQorCQkJCXJldHVybiAtRU5BTUVUT09MT05HOwogCQkJbWVtY3B5KHAsICIuLi8iLCAzKTsKIAkJCXAgKz0gMzsKKwkJCXRvbGVuIC09IDM7CiAJCQlicmVhazsKIAkJY2FzZSA0OgorCQkJaWYgKHRvbGVuIDwgMikKKwkJCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAkJCW1lbWNweShwLCAiLi8iLCAyKTsKIAkJCXAgKz0gMjsKKwkJCXRvbGVuIC09IDI7CiAJCQkvKiB0aGF0IHdvdWxkIGJlIC4gLSBqdXN0IGlnbm9yZSAqLwogCQkJYnJlYWs7CiAJCWNhc2UgNToKLQkJCXAgKz0gdWRmX2dldF9maWxlbmFtZShzYiwgcGMtPmNvbXBvbmVudElkZW50LCBwLAotCQkJCQkgICAgICBwYy0+bGVuZ3RoQ29tcG9uZW50SWRlbnQpOworCQkJZWxlbiArPSBwYy0+bGVuZ3RoQ29tcG9uZW50SWRlbnQ7CisJCQlpZiAoZWxlbiA+IGZyb21sZW4pCisJCQkJcmV0dXJuIC1FSU87CisJCQljb21wX2xlbiA9IHVkZl9nZXRfZmlsZW5hbWUoc2IsIHBjLT5jb21wb25lbnRJZGVudCwKKwkJCQkJCSAgICBwYy0+bGVuZ3RoQ29tcG9uZW50SWRlbnQsCisJCQkJCQkgICAgcCwgdG9sZW4pOworCQkJcCArPSBjb21wX2xlbjsKKwkJCXRvbGVuIC09IGNvbXBfbGVuOworCQkJaWYgKHRvbGVuID09IDApCisJCQkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAJCQkqcCsrID0gJy8nOworCQkJdG9sZW4tLTsKIAkJCWJyZWFrOwogCQl9Ci0JCWVsZW4gKz0gc2l6ZW9mKHN0cnVjdCBwYXRoQ29tcG9uZW50KSArIHBjLT5sZW5ndGhDb21wb25lbnRJZGVudDsKIAl9CiAJaWYgKHAgPiB0byArIDEpCiAJCXBbLTFdID0gJ1wwJzsKIAllbHNlCiAJCXBbMF0gPSAnXDAnOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHVkZl9zeW1saW5rX2ZpbGxlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCkBAIC04MCwxMSArMTA0LDE3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqc3ltbGluazsKLQlpbnQgZXJyID0gLUVJTzsKKwlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgKnAgPSBrbWFwKHBhZ2UpOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm87CiAJdWludDMyX3QgcG9zOwogCisJLyogV2UgZG9uJ3Qgc3VwcG9ydCBzeW1saW5rcyBsb25nZXIgdGhhbiBvbmUgYmxvY2sgKi8KKwlpZiAoaW5vZGUtPmlfc2l6ZSA+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkgeworCQllcnIgPSAtRU5BTUVUT09MT05HOworCQlnb3RvIG91dF91bm1hcDsKKwl9CisKIAlpaW5mbyA9IFVERl9JKGlub2RlKTsKIAlwb3MgPSB1ZGZfYmxvY2tfbWFwKGlub2RlLCAwKTsKIApAQCAtOTQsMTQgKzEyNCwxOCBAQAogCX0gZWxzZSB7CiAJCWJoID0gc2JfYnJlYWQoaW5vZGUtPmlfc2IsIHBvcyk7CiAKLQkJaWYgKCFiaCkKLQkJCWdvdG8gb3V0OworCQlpZiAoIWJoKSB7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBvdXRfdW5sb2NrX2lub2RlOworCQl9CiAKIAkJc3ltbGluayA9IGJoLT5iX2RhdGE7CiAJfQogCi0JdWRmX3BjX3RvX2NoYXIoaW5vZGUtPmlfc2IsIHN5bWxpbmssIGlub2RlLT5pX3NpemUsIHApOworCWVyciA9IHVkZl9wY190b19jaGFyKGlub2RlLT5pX3NiLCBzeW1saW5rLCBpbm9kZS0+aV9zaXplLCBwLCBQQUdFX1NJWkUpOwogCWJyZWxzZShiaCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5sb2NrX2lub2RlOwogCiAJdXBfcmVhZCgmaWluZm8tPmlfZGF0YV9zZW0pOwogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKQEAgLTEwOSw5ICsxNDMsMTAgQEAKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlyZXR1cm4gMDsKIAotb3V0Ogorb3V0X3VubG9ja19pbm9kZToKIAl1cF9yZWFkKCZpaW5mby0+aV9kYXRhX3NlbSk7CiAJU2V0UGFnZUVycm9yKHBhZ2UpOworb3V0X3VubWFwOgogCWt1bm1hcChwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmgKaW5kZXggMWNjM2M5OS4uNDdiYjNmNSAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZmRlY2wuaAorKysgYi9mcy91ZGYvdWRmZGVjbC5oCkBAIC0yMTEsNyArMjExLDggQEAKIH0KIAogLyogdW5pY29kZS5jICovCi1leHRlcm4gaW50IHVkZl9nZXRfZmlsZW5hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVpbnQ4X3QgKiwgdWludDhfdCAqLCBpbnQpOworZXh0ZXJuIGludCB1ZGZfZ2V0X2ZpbGVuYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1aW50OF90ICosIGludCwgdWludDhfdCAqLAorCQkJICAgIGludCk7CiBleHRlcm4gaW50IHVkZl9wdXRfZmlsZW5hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IHVpbnQ4X3QgKiwgdWludDhfdCAqLAogCQkJICAgIGludCk7CiBleHRlcm4gaW50IHVkZl9idWlsZF91c3RyKHN0cnVjdCB1c3RyICosIGRzdHJpbmcgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi91bmljb2RlLmMgYi9mcy91ZGYvdW5pY29kZS5jCmluZGV4IGFmZDQ3MGUuLmI4NGZlZTMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91bmljb2RlLmMKKysrIGIvZnMvdWRmL3VuaWNvZGUuYwpAQCAtMjgsNyArMjgsOCBAQAogCiAjaW5jbHVkZSAidWRmX3NiLmgiCiAKLXN0YXRpYyBpbnQgdWRmX3RyYW5zbGF0ZV90b19saW51eCh1aW50OF90ICosIHVpbnQ4X3QgKiwgaW50LCB1aW50OF90ICosIGludCk7CitzdGF0aWMgaW50IHVkZl90cmFuc2xhdGVfdG9fbGludXgodWludDhfdCAqLCBpbnQsIHVpbnQ4X3QgKiwgaW50LCB1aW50OF90ICosCisJCQkJICBpbnQpOwogCiBzdGF0aWMgaW50IHVkZl9jaGFyX3RvX3VzdHIoc3RydWN0IHVzdHIgKmRlc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywgaW50IHN0cmxlbikKIHsKQEAgLTMzMyw4ICszMzQsOCBAQAogCXJldHVybiB1X2xlbiArIDE7CiB9CiAKLWludCB1ZGZfZ2V0X2ZpbGVuYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVpbnQ4X3QgKnNuYW1lLCB1aW50OF90ICpkbmFtZSwKLQkJICAgICBpbnQgZmxlbikKK2ludCB1ZGZfZ2V0X2ZpbGVuYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVpbnQ4X3QgKnNuYW1lLCBpbnQgc2xlbiwKKwkJICAgICB1aW50OF90ICpkbmFtZSwgaW50IGRsZW4pCiB7CiAJc3RydWN0IHVzdHIgKmZpbGVuYW1lLCAqdW5pZmlsZW5hbWU7CiAJaW50IGxlbiA9IDA7CkBAIC0zNDcsNyArMzQ4LDcgQEAKIAlpZiAoIXVuaWZpbGVuYW1lKQogCQlnb3RvIG91dDE7CiAKLQlpZiAodWRmX2J1aWxkX3VzdHJfZXhhY3QodW5pZmlsZW5hbWUsIHNuYW1lLCBmbGVuKSkKKwlpZiAodWRmX2J1aWxkX3VzdHJfZXhhY3QodW5pZmlsZW5hbWUsIHNuYW1lLCBzbGVuKSkKIAkJZ290byBvdXQyOwogCiAJaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19VVEY4KSkgewpAQCAtMzY2LDcgKzM2Nyw4IEBACiAJfSBlbHNlCiAJCWdvdG8gb3V0MjsKIAotCWxlbiA9IHVkZl90cmFuc2xhdGVfdG9fbGludXgoZG5hbWUsIGZpbGVuYW1lLT51X25hbWUsIGZpbGVuYW1lLT51X2xlbiwKKwlsZW4gPSB1ZGZfdHJhbnNsYXRlX3RvX2xpbnV4KGRuYW1lLCBkbGVuLAorCQkJCSAgICAgZmlsZW5hbWUtPnVfbmFtZSwgZmlsZW5hbWUtPnVfbGVuLAogCQkJCSAgICAgdW5pZmlsZW5hbWUtPnVfbmFtZSwgdW5pZmlsZW5hbWUtPnVfbGVuKTsKIG91dDI6CiAJa2ZyZWUodW5pZmlsZW5hbWUpOwpAQCAtNDAzLDEwICs0MDUsMTIgQEAKICNkZWZpbmUgRVhUX01BUksJCScuJwogI2RlZmluZSBDUkNfTUFSSwkJJyMnCiAjZGVmaW5lIEVYVF9TSVpFIAkJNQorLyogTnVtYmVyIG9mIGNoYXJzIHdlIG5lZWQgdG8gc3RvcmUgZ2VuZXJhdGVkIENSQyB0byBtYWtlIGZpbGVuYW1lIHVuaXF1ZSAqLworI2RlZmluZSBDUkNfTEVOCQkJNQogCi1zdGF0aWMgaW50IHVkZl90cmFuc2xhdGVfdG9fbGludXgodWludDhfdCAqbmV3TmFtZSwgdWludDhfdCAqdWRmTmFtZSwKLQkJCQkgIGludCB1ZGZMZW4sIHVpbnQ4X3QgKmZpZE5hbWUsCi0JCQkJICBpbnQgZmlkTmFtZUxlbikKK3N0YXRpYyBpbnQgdWRmX3RyYW5zbGF0ZV90b19saW51eCh1aW50OF90ICpuZXdOYW1lLCBpbnQgbmV3TGVuLAorCQkJCSAgdWludDhfdCAqdWRmTmFtZSwgaW50IHVkZkxlbiwKKwkJCQkgIHVpbnQ4X3QgKmZpZE5hbWUsIGludCBmaWROYW1lTGVuKQogewogCWludCBpbmRleCwgbmV3SW5kZXggPSAwLCBuZWVkc0NSQyA9IDA7CiAJaW50IGV4dEluZGV4ID0gMCwgbmV3RXh0SW5kZXggPSAwLCBoYXNFeHQgPSAwOwpAQCAtNDM5LDcgKzQ0Myw3IEBACiAJCQkJCW5ld0V4dEluZGV4ID0gbmV3SW5kZXg7CiAJCQkJfQogCQkJfQotCQkJaWYgKG5ld0luZGV4IDwgMjU2KQorCQkJaWYgKG5ld0luZGV4IDwgbmV3TGVuKQogCQkJCW5ld05hbWVbbmV3SW5kZXgrK10gPSBjdXJyOwogCQkJZWxzZQogCQkJCW5lZWRzQ1JDID0gMTsKQEAgLTQ2NywxMyArNDcxLDEzIEBACiAJCQkJfQogCQkJCWV4dFtsb2NhbEV4dEluZGV4KytdID0gY3VycjsKIAkJCX0KLQkJCW1heEZpbGVuYW1lTGVuID0gMjUwIC0gbG9jYWxFeHRJbmRleDsKKwkJCW1heEZpbGVuYW1lTGVuID0gbmV3TGVuIC0gQ1JDX0xFTiAtIGxvY2FsRXh0SW5kZXg7CiAJCQlpZiAobmV3SW5kZXggPiBtYXhGaWxlbmFtZUxlbikKIAkJCQluZXdJbmRleCA9IG1heEZpbGVuYW1lTGVuOwogCQkJZWxzZQogCQkJCW5ld0luZGV4ID0gbmV3RXh0SW5kZXg7Ci0JCX0gZWxzZSBpZiAobmV3SW5kZXggPiAyNTApCi0JCQluZXdJbmRleCA9IDI1MDsKKwkJfSBlbHNlIGlmIChuZXdJbmRleCA+IG5ld0xlbiAtIENSQ19MRU4pCisJCQluZXdJbmRleCA9IG5ld0xlbiAtIENSQ19MRU47CiAJCW5ld05hbWVbbmV3SW5kZXgrK10gPSBDUkNfTUFSSzsKIAkJdmFsdWVDUkMgPSBjcmNfaXR1X3QoMCwgZmlkTmFtZSwgZmlkTmFtZUxlbik7CiAJCW5ld05hbWVbbmV3SW5kZXgrK10gPSBoZXhfYXNjX3VwcGVyX2hpKHZhbHVlQ1JDID4+IDgpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19xbS5oIGIvZnMveGZzL3hmc19xbS5oCmluZGV4IDNhMDdhOTMuLjQxZjZjMGIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcW0uaAorKysgYi9mcy94ZnMveGZzX3FtLmgKQEAgLTE2Niw5ICsxNjYsOSBAQAogLyogcXVvdGEgb3BzICovCiBleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfdHJ1bmNfcWZpbGVzKHN0cnVjdCB4ZnNfbW91bnQgKiwgdWludCk7CiBleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEoc3RydWN0IHhmc19tb3VudCAqLCB4ZnNfZHFpZF90LAotCQkJCQl1aW50LCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqKTsKKwkJCQkJdWludCwgc3RydWN0IHFjX2RxYmxrICopOwogZXh0ZXJuIGludAkJeGZzX3FtX3NjYWxsX3NldHFsaW0oc3RydWN0IHhmc19tb3VudCAqLCB4ZnNfZHFpZF90LCB1aW50LAotCQkJCQlzdHJ1Y3QgZnNfZGlza19xdW90YSAqKTsKKwkJCQkJc3RydWN0IHFjX2RxYmxrICopOwogZXh0ZXJuIGludAkJeGZzX3FtX3NjYWxsX2dldHFzdGF0KHN0cnVjdCB4ZnNfbW91bnQgKiwKIAkJCQkJc3RydWN0IGZzX3F1b3RhX3N0YXQgKik7CiBleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfZ2V0cXN0YXR2KHN0cnVjdCB4ZnNfbW91bnQgKiwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcW1fc3lzY2FsbHMuYyBiL2ZzL3hmcy94ZnNfcW1fc3lzY2FsbHMuYwppbmRleCA3NGZjYTY4Li5jYjYxNjhlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3hmc19xbV9zeXNjYWxscy5jCkBAIC0zOSw3ICszOSw2IEBACiBTVEFUSUMgaW50CXhmc19xbV9sb2dfcXVvdGFvZmZfZW5kKHhmc19tb3VudF90ICosIHhmc19xb2ZmX2xvZ2l0ZW1fdCAqLAogCQkJCQl1aW50KTsKIFNUQVRJQyB1aW50CXhmc19xbV9leHBvcnRfZmxhZ3ModWludCk7Ci1TVEFUSUMgdWludAl4ZnNfcW1fZXhwb3J0X3F0eXBlX2ZsYWdzKHVpbnQpOwogCiAvKgogICogVHVybiBvZmYgcXVvdGEgYWNjb3VudGluZyBhbmQvb3IgZW5mb3JjZW1lbnQgZm9yIGFsbCB1ZHF1b3RzIGFuZC9vcgpAQCAtNTczLDggKzU3Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgWEZTX0RRX01BU0sgXAotCShGU19EUV9MSU1JVF9NQVNLIHwgRlNfRFFfVElNRVJfTUFTSyB8IEZTX0RRX1dBUk5TX01BU0spCisjZGVmaW5lIFhGU19RQ19NQVNLIFwKKwkoUUNfTElNSVRfTUFTSyB8IFFDX1RJTUVSX01BU0sgfCBRQ19XQVJOU19NQVNLKQogCiAvKgogICogQWRqdXN0IHF1b3RhIGxpbWl0cywgYW5kIHN0YXJ0L3N0b3AgdGltZXJzIGFjY29yZGluZ2x5LgpAQCAtNTg0LDcgKzU4Myw3IEBACiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJeGZzX2RxaWRfdAkJaWQsCiAJdWludAkJCXR5cGUsCi0JZnNfZGlza19xdW90YV90CQkqbmV3bGltKQorCXN0cnVjdCBxY19kcWJsawkJKm5ld2xpbSkKIHsKIAlzdHJ1Y3QgeGZzX3F1b3RhaW5mbwkqcSA9IG1wLT5tX3F1b3RhaW5mbzsKIAlzdHJ1Y3QgeGZzX2Rpc2tfZHF1b3QJKmRkcTsKQEAgLTU5Myw5ICs1OTIsOSBAQAogCWludAkJCWVycm9yOwogCXhmc19xY250X3QJCWhhcmQsIHNvZnQ7CiAKLQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIH5YRlNfRFFfTUFTSykKKwlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIH5YRlNfUUNfTUFTSykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKChuZXdsaW0tPmRfZmllbGRtYXNrICYgWEZTX0RRX01BU0spID09IDApCisJaWYgKChuZXdsaW0tPmRfZmllbGRtYXNrICYgWEZTX1FDX01BU0spID09IDApCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTYzMywxMSArNjMyLDExIEBACiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCBoYXJkbGltaXRzIGFyZSA+PSBzb2Z0IGxpbWl0cyBiZWZvcmUgY2hhbmdpbmcuCiAJICovCi0JaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfQkhBUkQpID8KLQkJKHhmc19xY250X3QpIFhGU19CQl9UT19GU0IobXAsIG5ld2xpbS0+ZF9ibGtfaGFyZGxpbWl0KSA6CisJaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfU1BDX0hBUkQpID8KKwkJKHhmc19xY250X3QpIFhGU19CX1RPX0ZTQihtcCwgbmV3bGltLT5kX3NwY19oYXJkbGltaXQpIDoKIAkJCWJlNjRfdG9fY3B1KGRkcS0+ZF9ibGtfaGFyZGxpbWl0KTsKLQlzb2Z0ID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CU09GVCkgPwotCQkoeGZzX3FjbnRfdCkgWEZTX0JCX1RPX0ZTQihtcCwgbmV3bGltLT5kX2Jsa19zb2Z0bGltaXQpIDoKKwlzb2Z0ID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfU09GVCkgPworCQkoeGZzX3FjbnRfdCkgWEZTX0JfVE9fRlNCKG1wLCBuZXdsaW0tPmRfc3BjX3NvZnRsaW1pdCkgOgogCQkJYmU2NF90b19jcHUoZGRxLT5kX2Jsa19zb2Z0bGltaXQpOwogCWlmIChoYXJkID09IDAgfHwgaGFyZCA+PSBzb2Z0KSB7CiAJCWRkcS0+ZF9ibGtfaGFyZGxpbWl0ID0gY3B1X3RvX2JlNjQoaGFyZCk7CkBAIC02NTAsMTEgKzY0OSwxMSBAQAogCX0gZWxzZSB7CiAJCXhmc19kZWJ1ZyhtcCwgImJsa2hhcmQgJUxkIDwgYmxrc29mdCAlTGQiLCBoYXJkLCBzb2Z0KTsKIAl9Ci0JaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCSEFSRCkgPwotCQkoeGZzX3FjbnRfdCkgWEZTX0JCX1RPX0ZTQihtcCwgbmV3bGltLT5kX3J0Yl9oYXJkbGltaXQpIDoKKwloYXJkID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19SVF9TUENfSEFSRCkgPworCQkoeGZzX3FjbnRfdCkgWEZTX0JfVE9fRlNCKG1wLCBuZXdsaW0tPmRfcnRfc3BjX2hhcmRsaW1pdCkgOgogCQkJYmU2NF90b19jcHUoZGRxLT5kX3J0Yl9oYXJkbGltaXQpOwotCXNvZnQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX1JUQlNPRlQpID8KLQkJKHhmc19xY250X3QpIFhGU19CQl9UT19GU0IobXAsIG5ld2xpbS0+ZF9ydGJfc29mdGxpbWl0KSA6CisJc29mdCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfUlRfU1BDX1NPRlQpID8KKwkJKHhmc19xY250X3QpIFhGU19CX1RPX0ZTQihtcCwgbmV3bGltLT5kX3J0X3NwY19zb2Z0bGltaXQpIDoKIAkJCWJlNjRfdG9fY3B1KGRkcS0+ZF9ydGJfc29mdGxpbWl0KTsKIAlpZiAoaGFyZCA9PSAwIHx8IGhhcmQgPj0gc29mdCkgewogCQlkZHEtPmRfcnRiX2hhcmRsaW1pdCA9IGNwdV90b19iZTY0KGhhcmQpOwpAQCAtNjY3LDEwICs2NjYsMTAgQEAKIAkJeGZzX2RlYnVnKG1wLCAicnRiaGFyZCAlTGQgPCBydGJzb2Z0ICVMZCIsIGhhcmQsIHNvZnQpOwogCX0KIAotCWhhcmQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lIQVJEKSA/CisJaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfSU5PX0hBUkQpID8KIAkJKHhmc19xY250X3QpIG5ld2xpbS0+ZF9pbm9faGFyZGxpbWl0IDoKIAkJCWJlNjRfdG9fY3B1KGRkcS0+ZF9pbm9faGFyZGxpbWl0KTsKLQlzb2Z0ID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JU09GVCkgPworCXNvZnQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19TT0ZUKSA/CiAJCSh4ZnNfcWNudF90KSBuZXdsaW0tPmRfaW5vX3NvZnRsaW1pdCA6CiAJCQliZTY0X3RvX2NwdShkZHEtPmRfaW5vX3NvZnRsaW1pdCk7CiAJaWYgKGhhcmQgPT0gMCB8fCBoYXJkID49IHNvZnQpIHsKQEAgLTY4NywxMiArNjg2LDEyIEBACiAJLyoKIAkgKiBVcGRhdGUgd2FybmluZ3MgY291bnRlcihzKSBpZiByZXF1ZXN0ZWQKIAkgKi8KLQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JXQVJOUykKLQkJZGRxLT5kX2J3YXJucyA9IGNwdV90b19iZTE2KG5ld2xpbS0+ZF9id2FybnMpOwotCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfSVdBUk5TKQotCQlkZHEtPmRfaXdhcm5zID0gY3B1X3RvX2JlMTYobmV3bGltLT5kX2l3YXJucyk7Ci0JaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJXQVJOUykKLQkJZGRxLT5kX3J0Yndhcm5zID0gY3B1X3RvX2JlMTYobmV3bGltLT5kX3J0Yndhcm5zKTsKKwlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19XQVJOUykKKwkJZGRxLT5kX2J3YXJucyA9IGNwdV90b19iZTE2KG5ld2xpbS0+ZF9zcGNfd2FybnMpOworCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfSU5PX1dBUk5TKQorCQlkZHEtPmRfaXdhcm5zID0gY3B1X3RvX2JlMTYobmV3bGltLT5kX2lub193YXJucyk7CisJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19SVF9TUENfV0FSTlMpCisJCWRkcS0+ZF9ydGJ3YXJucyA9IGNwdV90b19iZTE2KG5ld2xpbS0+ZF9ydF9zcGNfd2FybnMpOwogCiAJaWYgKGlkID09IDApIHsKIAkJLyoKQEAgLTcwMiwyNCArNzAxLDI0IEBACiAJCSAqIHNvZnQgYW5kIGhhcmQgbGltaXQgdmFsdWVzIChhbHJlYWR5IGRvbmUsIGFib3ZlKSwgYW5kCiAJCSAqIGZvciB3YXJuaW5ncy4KIAkJICovCi0JCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfQlRJTUVSKSB7Ci0JCQlxLT5xaV9idGltZWxpbWl0ID0gbmV3bGltLT5kX2J0aW1lcjsKLQkJCWRkcS0+ZF9idGltZXIgPSBjcHVfdG9fYmUzMihuZXdsaW0tPmRfYnRpbWVyKTsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfVElNRVIpIHsKKwkJCXEtPnFpX2J0aW1lbGltaXQgPSBuZXdsaW0tPmRfc3BjX3RpbWVyOworCQkJZGRxLT5kX2J0aW1lciA9IGNwdV90b19iZTMyKG5ld2xpbS0+ZF9zcGNfdGltZXIpOwogCQl9Ci0JCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfSVRJTUVSKSB7Ci0JCQlxLT5xaV9pdGltZWxpbWl0ID0gbmV3bGltLT5kX2l0aW1lcjsKLQkJCWRkcS0+ZF9pdGltZXIgPSBjcHVfdG9fYmUzMihuZXdsaW0tPmRfaXRpbWVyKTsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fVElNRVIpIHsKKwkJCXEtPnFpX2l0aW1lbGltaXQgPSBuZXdsaW0tPmRfaW5vX3RpbWVyOworCQkJZGRxLT5kX2l0aW1lciA9IGNwdV90b19iZTMyKG5ld2xpbS0+ZF9pbm9fdGltZXIpOwogCQl9Ci0JCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCVElNRVIpIHsKLQkJCXEtPnFpX3J0YnRpbWVsaW1pdCA9IG5ld2xpbS0+ZF9ydGJ0aW1lcjsKLQkJCWRkcS0+ZF9ydGJ0aW1lciA9IGNwdV90b19iZTMyKG5ld2xpbS0+ZF9ydGJ0aW1lcik7CisJCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfUlRfU1BDX1RJTUVSKSB7CisJCQlxLT5xaV9ydGJ0aW1lbGltaXQgPSBuZXdsaW0tPmRfcnRfc3BjX3RpbWVyOworCQkJZGRxLT5kX3J0YnRpbWVyID0gY3B1X3RvX2JlMzIobmV3bGltLT5kX3J0X3NwY190aW1lcik7CiAJCX0KLQkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CV0FSTlMpCi0JCQlxLT5xaV9id2FybmxpbWl0ID0gbmV3bGltLT5kX2J3YXJuczsKLQkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JV0FSTlMpCi0JCQlxLT5xaV9pd2FybmxpbWl0ID0gbmV3bGltLT5kX2l3YXJuczsKLQkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJXQVJOUykKLQkJCXEtPnFpX3J0Yndhcm5saW1pdCA9IG5ld2xpbS0+ZF9ydGJ3YXJuczsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfV0FSTlMpCisJCQlxLT5xaV9id2FybmxpbWl0ID0gbmV3bGltLT5kX3NwY193YXJuczsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fV0FSTlMpCisJCQlxLT5xaV9pd2FybmxpbWl0ID0gbmV3bGltLT5kX2lub193YXJuczsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19SVF9TUENfV0FSTlMpCisJCQlxLT5xaV9ydGJ3YXJubGltaXQgPSBuZXdsaW0tPmRfcnRfc3BjX3dhcm5zOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIElmIHRoZSB1c2VyIGlzIG5vdyBvdmVyIHF1b3RhLCBzdGFydCB0aGUgdGltZWxpbWl0LgpAQCAtODI0LDcgKzgyMyw3IEBACiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJeGZzX2RxaWRfdAkJaWQsCiAJdWludAkJCXR5cGUsCi0Jc3RydWN0IGZzX2Rpc2tfcXVvdGEJKmRzdCkKKwlzdHJ1Y3QgcWNfZHFibGsJCSpkc3QpCiB7CiAJc3RydWN0IHhmc19kcXVvdAkqZHFwOwogCWludAkJCWVycm9yOwpAQCAtODQ4LDI4ICs4NDcsMjUgQEAKIAl9CiAKIAltZW1zZXQoZHN0LCAwLCBzaXplb2YoKmRzdCkpOwotCWRzdC0+ZF92ZXJzaW9uID0gRlNfRFFVT1RfVkVSU0lPTjsKLQlkc3QtPmRfZmxhZ3MgPSB4ZnNfcW1fZXhwb3J0X3F0eXBlX2ZsYWdzKGRxcC0+cV9jb3JlLmRfZmxhZ3MpOwotCWRzdC0+ZF9pZCA9IGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWQpOwotCWRzdC0+ZF9ibGtfaGFyZGxpbWl0ID0KLQkJWEZTX0ZTQl9UT19CQihtcCwgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ibGtfaGFyZGxpbWl0KSk7Ci0JZHN0LT5kX2Jsa19zb2Z0bGltaXQgPQotCQlYRlNfRlNCX1RPX0JCKG1wLCBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19zb2Z0bGltaXQpKTsKKwlkc3QtPmRfc3BjX2hhcmRsaW1pdCA9CisJCVhGU19GU0JfVE9fQihtcCwgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ibGtfaGFyZGxpbWl0KSk7CisJZHN0LT5kX3NwY19zb2Z0bGltaXQgPQorCQlYRlNfRlNCX1RPX0IobXAsIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmxrX3NvZnRsaW1pdCkpOwogCWRzdC0+ZF9pbm9faGFyZGxpbWl0ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9faGFyZGxpbWl0KTsKIAlkc3QtPmRfaW5vX3NvZnRsaW1pdCA9IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaW5vX3NvZnRsaW1pdCk7Ci0JZHN0LT5kX2Jjb3VudCA9IFhGU19GU0JfVE9fQkIobXAsIGRxcC0+cV9yZXNfYmNvdW50KTsKLQlkc3QtPmRfaWNvdW50ID0gZHFwLT5xX3Jlc19pY291bnQ7Ci0JZHN0LT5kX2J0aW1lciA9IGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYnRpbWVyKTsKLQlkc3QtPmRfaXRpbWVyID0gYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pdGltZXIpOwotCWRzdC0+ZF9pd2FybnMgPSBiZTE2X3RvX2NwdShkcXAtPnFfY29yZS5kX2l3YXJucyk7Ci0JZHN0LT5kX2J3YXJucyA9IGJlMTZfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYndhcm5zKTsKLQlkc3QtPmRfcnRiX2hhcmRsaW1pdCA9Ci0JCVhGU19GU0JfVE9fQkIobXAsIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfcnRiX2hhcmRsaW1pdCkpOwotCWRzdC0+ZF9ydGJfc29mdGxpbWl0ID0KLQkJWEZTX0ZTQl9UT19CQihtcCwgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJfc29mdGxpbWl0KSk7Ci0JZHN0LT5kX3J0YmNvdW50ID0gWEZTX0ZTQl9UT19CQihtcCwgZHFwLT5xX3Jlc19ydGJjb3VudCk7Ci0JZHN0LT5kX3J0YnRpbWVyID0gYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJ0aW1lcik7Ci0JZHN0LT5kX3J0Yndhcm5zID0gYmUxNl90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJ3YXJucyk7CisJZHN0LT5kX3NwYWNlID0gWEZTX0ZTQl9UT19CKG1wLCBkcXAtPnFfcmVzX2Jjb3VudCk7CisJZHN0LT5kX2lub19jb3VudCA9IGRxcC0+cV9yZXNfaWNvdW50OworCWRzdC0+ZF9zcGNfdGltZXIgPSBiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX2J0aW1lcik7CisJZHN0LT5kX2lub190aW1lciA9IGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaXRpbWVyKTsKKwlkc3QtPmRfaW5vX3dhcm5zID0gYmUxNl90b19jcHUoZHFwLT5xX2NvcmUuZF9pd2FybnMpOworCWRzdC0+ZF9zcGNfd2FybnMgPSBiZTE2X3RvX2NwdShkcXAtPnFfY29yZS5kX2J3YXJucyk7CisJZHN0LT5kX3J0X3NwY19oYXJkbGltaXQgPQorCQlYRlNfRlNCX1RPX0IobXAsIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfcnRiX2hhcmRsaW1pdCkpOworCWRzdC0+ZF9ydF9zcGNfc29mdGxpbWl0ID0KKwkJWEZTX0ZTQl9UT19CKG1wLCBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX3J0Yl9zb2Z0bGltaXQpKTsKKwlkc3QtPmRfcnRfc3BhY2UgPSBYRlNfRlNCX1RPX0IobXAsIGRxcC0+cV9yZXNfcnRiY291bnQpOworCWRzdC0+ZF9ydF9zcGNfdGltZXIgPSBiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX3J0YnRpbWVyKTsKKwlkc3QtPmRfcnRfc3BjX3dhcm5zID0gYmUxNl90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJ3YXJucyk7CiAKIAkvKgogCSAqIEludGVybmFsbHksIHdlIGRvbid0IHJlc2V0IGFsbCB0aGUgdGltZXJzIHdoZW4gcXVvdGEgZW5mb3JjZW1lbnQKQEAgLTg4MiwyMyArODc4LDIzIEBACiAJICAgICBkcXAtPnFfY29yZS5kX2ZsYWdzID09IFhGU19EUV9HUk9VUCkgfHwKIAkgICAgKCFYRlNfSVNfUFFVT1RBX0VORk9SQ0VEKG1wKSAmJgogCSAgICAgZHFwLT5xX2NvcmUuZF9mbGFncyA9PSBYRlNfRFFfUFJPSikpIHsKLQkJZHN0LT5kX2J0aW1lciA9IDA7Ci0JCWRzdC0+ZF9pdGltZXIgPSAwOwotCQlkc3QtPmRfcnRidGltZXIgPSAwOworCQlkc3QtPmRfc3BjX3RpbWVyID0gMDsKKwkJZHN0LT5kX2lub190aW1lciA9IDA7CisJCWRzdC0+ZF9ydF9zcGNfdGltZXIgPSAwOwogCX0KIAogI2lmZGVmIERFQlVHCi0JaWYgKCgoWEZTX0lTX1VRVU9UQV9FTkZPUkNFRChtcCkgJiYgZHN0LT5kX2ZsYWdzID09IEZTX1VTRVJfUVVPVEEpIHx8Ci0JICAgICAoWEZTX0lTX0dRVU9UQV9FTkZPUkNFRChtcCkgJiYgZHN0LT5kX2ZsYWdzID09IEZTX0dST1VQX1FVT1RBKSB8fAotCSAgICAgKFhGU19JU19QUVVPVEFfRU5GT1JDRUQobXApICYmIGRzdC0+ZF9mbGFncyA9PSBGU19QUk9KX1FVT1RBKSkgJiYKLQkgICAgZHN0LT5kX2lkICE9IDApIHsKLQkJaWYgKChkc3QtPmRfYmNvdW50ID4gZHN0LT5kX2Jsa19zb2Z0bGltaXQpICYmCi0JCSAgICAoZHN0LT5kX2Jsa19zb2Z0bGltaXQgPiAwKSkgewotCQkJQVNTRVJUKGRzdC0+ZF9idGltZXIgIT0gMCk7CisJaWYgKCgoWEZTX0lTX1VRVU9UQV9FTkZPUkNFRChtcCkgJiYgdHlwZSA9PSBYRlNfRFFfVVNFUikgfHwKKwkgICAgIChYRlNfSVNfR1FVT1RBX0VORk9SQ0VEKG1wKSAmJiB0eXBlID09IFhGU19EUV9HUk9VUCkgfHwKKwkgICAgIChYRlNfSVNfUFFVT1RBX0VORk9SQ0VEKG1wKSAmJiB0eXBlID09IFhGU19EUV9QUk9KKSkgJiYKKwkgICAgaWQgIT0gMCkgeworCQlpZiAoKGRzdC0+ZF9zcGFjZSA+IGRzdC0+ZF9zcGNfc29mdGxpbWl0KSAmJgorCQkgICAgKGRzdC0+ZF9zcGNfc29mdGxpbWl0ID4gMCkpIHsKKwkJCUFTU0VSVChkc3QtPmRfc3BjX3RpbWVyICE9IDApOwogCQl9Ci0JCWlmICgoZHN0LT5kX2ljb3VudCA+IGRzdC0+ZF9pbm9fc29mdGxpbWl0KSAmJgorCQlpZiAoKGRzdC0+ZF9pbm9fY291bnQgPiBkc3QtPmRfaW5vX3NvZnRsaW1pdCkgJiYKIAkJICAgIChkc3QtPmRfaW5vX3NvZnRsaW1pdCA+IDApKSB7Ci0JCQlBU1NFUlQoZHN0LT5kX2l0aW1lciAhPSAwKTsKKwkJCUFTU0VSVChkc3QtPmRfaW5vX3RpbWVyICE9IDApOwogCQl9CiAJfQogI2VuZGlmCkBAIC05MDgsMjYgKzkwNCw2IEBACiB9CiAKIFNUQVRJQyB1aW50Ci14ZnNfcW1fZXhwb3J0X3F0eXBlX2ZsYWdzKAotCXVpbnQgZmxhZ3MpCi17Ci0JLyoKLQkgKiBDYW4ndCBiZSBtb3JlIHRoYW4gb25lLCBvciBub25lLgotCSAqLwotCUFTU0VSVCgoZmxhZ3MgJiAoRlNfUFJPSl9RVU9UQSB8IEZTX1VTRVJfUVVPVEEpKSAhPQotCQkoRlNfUFJPSl9RVU9UQSB8IEZTX1VTRVJfUVVPVEEpKTsKLQlBU1NFUlQoKGZsYWdzICYgKEZTX1BST0pfUVVPVEEgfCBGU19HUk9VUF9RVU9UQSkpICE9Ci0JCShGU19QUk9KX1FVT1RBIHwgRlNfR1JPVVBfUVVPVEEpKTsKLQlBU1NFUlQoKGZsYWdzICYgKEZTX1VTRVJfUVVPVEEgfCBGU19HUk9VUF9RVU9UQSkpICE9Ci0JCShGU19VU0VSX1FVT1RBIHwgRlNfR1JPVVBfUVVPVEEpKTsKLQlBU1NFUlQoKGZsYWdzICYgKEZTX1BST0pfUVVPVEF8RlNfVVNFUl9RVU9UQXxGU19HUk9VUF9RVU9UQSkpICE9IDApOwotCi0JcmV0dXJuIChmbGFncyAmIFhGU19EUV9VU0VSKSA/Ci0JCUZTX1VTRVJfUVVPVEEgOiAoZmxhZ3MgJiBYRlNfRFFfUFJPSikgPwotCQkJRlNfUFJPSl9RVU9UQSA6IEZTX0dST1VQX1FVT1RBOwotfQotCi1TVEFUSUMgdWludAogeGZzX3FtX2V4cG9ydF9mbGFncygKIAl1aW50IGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19xdW90YW9wcy5jIGIvZnMveGZzL3hmc19xdW90YW9wcy5jCmluZGV4IDc1NDJiYmUuLjgwMWE4NGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcXVvdGFvcHMuYworKysgYi9mcy94ZnMveGZzX3F1b3Rhb3BzLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogeGZzX2ZzX2dldF9kcWJsaygKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAogCXN0cnVjdCBrcWlkCQlxaWQsCi0Jc3RydWN0IGZzX2Rpc2tfcXVvdGEJKmZkcSkKKwlzdHJ1Y3QgcWNfZHFibGsJCSpxZHEpCiB7CiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBYRlNfTShzYik7CiAKQEAgLTE0MSwxNCArMTQxLDE0IEBACiAJCXJldHVybiAtRVNSQ0g7CiAKIAlyZXR1cm4geGZzX3FtX3NjYWxsX2dldHF1b3RhKG1wLCBmcm9tX2txaWQoJmluaXRfdXNlcl9ucywgcWlkKSwKLQkJCQkgICAgICB4ZnNfcXVvdGFfdHlwZShxaWQudHlwZSksIGZkcSk7CisJCQkJICAgICAgeGZzX3F1b3RhX3R5cGUocWlkLnR5cGUpLCBxZHEpOwogfQogCiBTVEFUSUMgaW50CiB4ZnNfZnNfc2V0X2RxYmxrKAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCiAJc3RydWN0IGtxaWQJCXFpZCwKLQlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZmRxKQorCXN0cnVjdCBxY19kcWJsawkJKnFkcSkKIHsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKIApAQCAtMTYwLDcgKzE2MCw3IEBACiAJCXJldHVybiAtRVNSQ0g7CiAKIAlyZXR1cm4geGZzX3FtX3NjYWxsX3NldHFsaW0obXAsIGZyb21fa3FpZCgmaW5pdF91c2VyX25zLCBxaWQpLAotCQkJCSAgICAgeGZzX3F1b3RhX3R5cGUocWlkLnR5cGUpLCBmZHEpOworCQkJCSAgICAgeGZzX3F1b3RhX3R5cGUocWlkLnR5cGUpLCBxZHEpOwogfQogCiBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zID0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCmluZGV4IDNjYTliNzUuLmI5NWRjMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKQEAgLTE5Niw4ICsxOTYsOCBAQAogc3RydWN0IGFjcGlfcHJvY2Vzc29yIHsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CiAJdTMyIGFjcGlfaWQ7Ci0JdTMyIGFwaWNfaWQ7Ci0JdTMyIGlkOworCXUzMiBwaHlzX2lkOwkvKiBDUFUgaGFyZHdhcmUgSUQgc3VjaCBhcyBBUElDIElEIGZvciB4ODYgKi8KKwl1MzIgaWQ7CQkvKiBDUFUgbG9naWNhbCBJRCBhbGxvY2F0ZWQgYnkgT1MgKi8KIAl1MzIgcGJsazsKIAlpbnQgcGVyZm9ybWFuY2VfcGxhdGZvcm1fbGltaXQ7CiAJaW50IHRocm90dGxpbmdfcGxhdGZvcm1fbGltaXQ7CkBAIC0zMTAsOCArMzEwLDggQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfQ1BVX0ZSRVEgKi8KIAogLyogaW4gcHJvY2Vzc29yX2NvcmUuYyAqLwotaW50IGFjcGlfZ2V0X2FwaWNpZChhY3BpX2hhbmRsZSwgaW50IHR5cGUsIHUzMiBhY3BpX2lkKTsKLWludCBhY3BpX21hcF9jcHVpZChpbnQgYXBpY19pZCwgdTMyIGFjcGlfaWQpOworaW50IGFjcGlfZ2V0X3BoeXNfaWQoYWNwaV9oYW5kbGUsIGludCB0eXBlLCB1MzIgYWNwaV9pZCk7CitpbnQgYWNwaV9tYXBfY3B1aWQoaW50IHBoeXNfaWQsIHUzMiBhY3BpX2lkKTsKIGludCBhY3BpX2dldF9jcHVpZChhY3BpX2hhbmRsZSwgaW50IHR5cGUsIHUzMiBhY3BpX2lkKTsKIAogLyogaW4gcHJvY2Vzc29yX3BkYy5jICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAppbmRleCAwODg0ODA1Li5kYjI4NGJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKQEAgLTEzNiw4ICsxMzYsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3Jlc2V0X3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCiB7Ci0JdGxiLT5zdGFydCA9IFRBU0tfU0laRTsKLQl0bGItPmVuZCA9IDA7CisJaWYgKHRsYi0+ZnVsbG1tKSB7CisJCXRsYi0+c3RhcnQgPSB0bGItPmVuZCA9IH4wOworCX0gZWxzZSB7CisJCXRsYi0+c3RhcnQgPSBUQVNLX1NJWkU7CisJCXRsYi0+ZW5kID0gMDsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggOGJhMzVjNi4uZTFiMmU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtOTAxLDExICs5MDEsMTUgQEAKIGV4dGVybiBpbnQgZHJtX3dhaXRfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApOwogZXh0ZXJuIHUzMiBkcm1fdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgZHJtX2NydGNfdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiBleHRlcm4gdTMyIGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCiAJCQkJICAgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rdGltZSk7CiBleHRlcm4gdm9pZCBkcm1fc2VuZF92YmxhbmtfZXZlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCiAJCQkJICAgICBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplKTsKK2V4dGVybiB2b2lkIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgICAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSk7CiBleHRlcm4gYm9vbCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gYm9vbCBkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiBleHRlcm4gaW50IGRybV92YmxhbmtfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiB2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiBpbnQgZHJtX2NydGNfdmJsYW5rX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2dlbS5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbS5oCmluZGV4IDc4MDUxMWEuLjFlNmFlMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9nZW0uaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKQEAgLTExOSwxMyArMTE5LDYgQEAKIAkgKiBzaW1wbHkgbGVhdmUgaXQgYXMgTlVMTC4KIAkgKi8KIAlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICppbXBvcnRfYXR0YWNoOwotCi0JLyoqCi0JICogZHVtYiAtIGNyZWF0ZWQgYXMgZHVtYiBidWZmZXIKLQkgKiBXaGV0aGVyIHRoZSBnZW0gb2JqZWN0IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBkdW1iIGJ1ZmZlciBpbnRlcmZhY2UKLQkgKiBhcyBzdWNoIGl0IG1heSBub3QgYmUgdXNlZCBmb3IgR1BVIHJlbmRlcmluZy4KLQkgKi8KLQlib29sIGR1bWI7CiB9OwogCiB2b2lkIGRybV9nZW1fb2JqZWN0X3JlbGVhc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaAppbmRleCAxZWExYjcwLi5kNDExMGQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaApAQCAtNywxNCArNywxNCBAQAogCiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CiAKLS8qIGludGVycnVwdCBzcGVjaWZpYyBjZWxsIDAgKi8KKy8qIGludGVycnVwdCBzcGVjaWZpZXIgY2VsbCAwICovCiAKICNkZWZpbmUgR0lDX1NQSSAwCiAjZGVmaW5lIEdJQ19QUEkgMQogCiAvKgogICogSW50ZXJydXB0IHNwZWNpZmllciBjZWxsIDIuCi0gKiBUaGUgZmxhZ2dzIGluIGlycS5oIGFyZSB2YWxpZCwgcGx1cyB0aG9zZSBiZWxvdy4KKyAqIFRoZSBmbGFncyBpbiBpcnEuaCBhcmUgdmFsaWQsIHBsdXMgdGhvc2UgYmVsb3cuCiAgKi8KICNkZWZpbmUgR0lDX0NQVV9NQVNLX1JBVyh4KSAoKHgpIDw8IDgpCiAjZGVmaW5lIEdJQ19DUFVfTUFTS19TSU1QTEUobnVtKSBHSUNfQ1BVX01BU0tfUkFXKCgxIDw8IChudW0pKSAtIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL3RoZXJtYWwvdGhlcm1hbC5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy90aGVybWFsL3RoZXJtYWwuaAppbmRleCA1OTgyMmE5Li5iNWU2YjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL3RoZXJtYWwvdGhlcm1hbC5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvdGhlcm1hbC90aGVybWFsLmgKQEAgLTExLDcgKzExLDcgQEAKICNkZWZpbmUgX0RUX0JJTkRJTkdTX1RIRVJNQUxfVEhFUk1BTF9ICiAKIC8qIE9uIGNvb2xpbmcgZGV2aWNlcyB1cHBlciBhbmQgbG93ZXIgbGltaXRzICovCi0jZGVmaW5lIFRIRVJNQUxfTk9fTElNSVQJCSgtMVVMKQorI2RlZmluZSBUSEVSTUFMX05PX0xJTUlUCQkofjApCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IDg1NmQzODEuLmQ0NTljZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC0xNDcsOCArMTQ3LDggQEAKIAogI2lmZGVmIENPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVCiAvKiBBcmNoIGRlcGVuZGVudCBmdW5jdGlvbnMgZm9yIGNwdSBob3RwbHVnIHN1cHBvcnQgKi8KLWludCBhY3BpX21hcF9sc2FwaWMoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgcGh5c2lkLCBpbnQgKnBjcHUpOwotaW50IGFjcGlfdW5tYXBfbHNhcGljKGludCBjcHUpOworaW50IGFjcGlfbWFwX2NwdShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBwaHlzaWQsIGludCAqcGNwdSk7CitpbnQgYWNwaV91bm1hcF9jcHUoaW50IGNwdSk7CiAjZW5kaWYgLyogQ09ORklHX0FDUElfSE9UUExVR19DUFUgKi8KIAogaW50IGFjcGlfcmVnaXN0ZXJfaW9hcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTY0IHBoeXNfYWRkciwgdTMyIGdzaV9iYXNlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCAwYzA0OTE3Li5hZjg0MjM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC00Nyw2ICs0Nyw3IEBACiAKIHN0cnVjdCBhdWRpdF9rcnVsZSB7CiAJaW50CQkJdmVyc19vcHM7CisJdTMyCQkJcGZsYWdzOwogCXUzMgkJCWZsYWdzOwogCXUzMgkJCWxpc3RucjsKIAl1MzIJCQlhY3Rpb247CkBAIC02NCw2ICs2NSw5IEBACiAJdTY0CQkJcHJpbzsKIH07CiAKKy8qIEZsYWcgdG8gaW5kaWNhdGUgbGVnYWN5IEFVRElUX0xPR0lOVUlEIHVuc2V0IHVzYWdlICovCisjZGVmaW5lIEFVRElUX0xPR0lOVUlEX0xFR0FDWQkJMHgxCisKIHN0cnVjdCBhdWRpdF9maWVsZCB7CiAJdTMyCQkJCXR5cGU7CiAJdW5pb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstbXEuaCBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmgKaW5kZXggOGFkZWQ5YS4uNTczNWU3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGstbXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oCkBAIC0zNCw3ICszNCw2IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBCTEtfTVFfRl8qIGZsYWdzICovCiAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQkqcXVldWU7Ci0JdW5zaWduZWQgaW50CQlxdWV1ZV9udW07CiAJc3RydWN0IGJsa19mbHVzaF9xdWV1ZQkqZnE7CiAKIAl2b2lkCQkJKmRyaXZlcl9kYXRhOwpAQCAtNTQsNyArNTMsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWRpc3BhdGNoZWRbQkxLX01RX01BWF9ESVNQQVRDSF9PUkRFUl07CiAKIAl1bnNpZ25lZCBpbnQJCW51bWFfbm9kZTsKLQl1bnNpZ25lZCBpbnQJCWNtZF9zaXplOwkvKiBwZXItcmVxdWVzdCBleHRyYSBkYXRhICovCisJdW5zaWduZWQgaW50CQlxdWV1ZV9udW07CiAKIAlhdG9taWNfdAkJbnJfYWN0aXZlOwogCkBAIC0xOTUsMTMgKzE5NCwxNiBAQAogc3RydWN0IGJsa19tcV9od19jdHggKmJsa19tcV9tYXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgY29uc3QgaW50IGN0eF9pbmRleCk7CiBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqYmxrX21xX2FsbG9jX3NpbmdsZV9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKiwgdW5zaWduZWQgaW50LCBpbnQpOwogCitpbnQgYmxrX21xX3JlcXVlc3Rfc3RhcnRlZChzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogdm9pZCBibGtfbXFfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogdm9pZCBibGtfbXFfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpOwogdm9pZCBfX2Jsa19tcV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcik7CiAKIHZvaWQgYmxrX21xX3JlcXVldWVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogdm9pZCBibGtfbXFfYWRkX3RvX3JlcXVldWVfbGlzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJvb2wgYXRfaGVhZCk7Cit2b2lkIGJsa19tcV9jYW5jZWxfcmVxdWV1ZV93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIHZvaWQgYmxrX21xX2tpY2tfcmVxdWV1ZV9saXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKK3ZvaWQgYmxrX21xX2Fib3J0X3JlcXVldWVfbGlzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiB2b2lkIGJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSk7CiAKIHZvaWQgYmxrX21xX3N0b3BfaHdfcXVldWUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpOwpAQCAtMjEyLDYgKzIxNCw4IEBACiB2b2lkIGJsa19tcV9kZWxheV9xdWV1ZShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgdW5zaWduZWQgbG9uZyBtc2Vjcyk7CiB2b2lkIGJsa19tcV90YWdfYnVzeV9pdGVyKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBidXN5X2l0ZXJfZm4gKmZuLAogCQl2b2lkICpwcml2KTsKK3ZvaWQgYmxrX21xX3VuZnJlZXplX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKK3ZvaWQgYmxrX21xX2ZyZWV6ZV9xdWV1ZV9zdGFydChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiAKIC8qCiAgKiBEcml2ZXIgY29tbWFuZCBkYXRhIGlzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZXF1ZXN0LiBTbyBzdWJ0cmFjdCByZXF1ZXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAppbmRleCA0NDVkNTkyLi5jMjk0ZTNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKQEAgLTE5MCw2ICsxOTAsNyBAQAogCV9fUkVRX1BNLAkJLyogcnVudGltZSBwbSByZXF1ZXN0ICovCiAJX19SRVFfSEFTSEVELAkJLyogb24gSU8gc2NoZWR1bGVyIG1lcmdlIGhhc2ggKi8KIAlfX1JFUV9NUV9JTkZMSUdIVCwJLyogdHJhY2sgaW5mbGlnaHQgZm9yIE1RICovCisJX19SRVFfTk9fVElNRU9VVCwJLyogcmVxdWVzdHMgbWF5IG5ldmVyIGV4cGlyZSAqLwogCV9fUkVRX05SX0JJVFMsCQkvKiBzdG9wcyBoZXJlICovCiB9OwogCkBAIC0yNDMsNSArMjQ0LDYgQEAKICNkZWZpbmUgUkVRX1BNCQkJKDFVTEwgPDwgX19SRVFfUE0pCiAjZGVmaW5lIFJFUV9IQVNIRUQJCSgxVUxMIDw8IF9fUkVRX0hBU0hFRCkKICNkZWZpbmUgUkVRX01RX0lORkxJR0hUCQkoMVVMTCA8PCBfX1JFUV9NUV9JTkZMSUdIVCkKKyNkZWZpbmUgUkVRX05PX1RJTUVPVVQJCSgxVUxMIDw8IF9fUkVRX05PX1RJTUVPVVQpCiAKICNlbmRpZiAvKiBfX0xJTlVYX0JMS19UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NlcGgvb3NkX2NsaWVudC5oIGIvaW5jbHVkZS9saW51eC9jZXBoL29zZF9jbGllbnQuaAppbmRleCA1ZDg2NDE2Li42MWIxOWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NlcGgvb3NkX2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvY2VwaC9vc2RfY2xpZW50LmgKQEAgLTg3LDggKzg3LDggQEAKIAkJCXN0cnVjdCBjZXBoX29zZF9kYXRhIG9zZF9kYXRhOwogCQl9IGV4dGVudDsKIAkJc3RydWN0IHsKLQkJCV9fbGUzMiBuYW1lX2xlbjsKLQkJCV9fbGUzMiB2YWx1ZV9sZW47CisJCQl1MzIgbmFtZV9sZW47CisJCQl1MzIgdmFsdWVfbGVuOwogCQkJX191OCBjbXBfb3A7ICAgICAgIC8qIENFUEhfT1NEX0NNUFhBVFRSX09QXyogKi8KIAkJCV9fdTggY21wX21vZGU7ICAgICAvKiBDRVBIX09TRF9DTVBYQVRUUl9NT0RFXyogKi8KIAkJCXN0cnVjdCBjZXBoX29zZF9kYXRhIG9zZF9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCmluZGV4IGExYzgxZjguLjMzMDYzZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTIxNSw3ICsyMTUsNyBAQAogCX0KIH0KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fYXNzaWduX29uY2Vfc2l6ZSh2b2xhdGlsZSB2b2lkICpwLCB2b2lkICpyZXMsIGludCBzaXplKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fd3JpdGVfb25jZV9zaXplKHZvbGF0aWxlIHZvaWQgKnAsIHZvaWQgKnJlcywgaW50IHNpemUpCiB7CiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSAxOiAqKHZvbGF0aWxlIF9fdTggKilwID0gKihfX3U4ICopcmVzOyBicmVhazsKQEAgLTIzNSwxNSArMjM1LDE1IEBACiAvKgogICogUHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBtZXJnaW5nIG9yIHJlZmV0Y2hpbmcgcmVhZHMgb3Igd3JpdGVzLiBUaGUKICAqIGNvbXBpbGVyIGlzIGFsc28gZm9yYmlkZGVuIGZyb20gcmVvcmRlcmluZyBzdWNjZXNzaXZlIGluc3RhbmNlcyBvZgotICogUkVBRF9PTkNFLCBBU1NJR05fT05DRSBhbmQgQUNDRVNTX09OQ0UgKHNlZSBiZWxvdyksIGJ1dCBvbmx5IHdoZW4gdGhlCisgKiBSRUFEX09OQ0UsIFdSSVRFX09OQ0UgYW5kIEFDQ0VTU19PTkNFIChzZWUgYmVsb3cpLCBidXQgb25seSB3aGVuIHRoZQogICogY29tcGlsZXIgaXMgYXdhcmUgb2Ygc29tZSBwYXJ0aWN1bGFyIG9yZGVyaW5nLiAgT25lIHdheSB0byBtYWtlIHRoZQogICogY29tcGlsZXIgYXdhcmUgb2Ygb3JkZXJpbmcgaXMgdG8gcHV0IHRoZSB0d28gaW52b2NhdGlvbnMgb2YgUkVBRF9PTkNFLAotICogQVNTSUdOX09OQ0Ugb3IgQUNDRVNTX09OQ0UoKSBpbiBkaWZmZXJlbnQgQyBzdGF0ZW1lbnRzLgorICogV1JJVEVfT05DRSBvciBBQ0NFU1NfT05DRSgpIGluIGRpZmZlcmVudCBDIHN0YXRlbWVudHMuCiAgKgogICogSW4gY29udHJhc3QgdG8gQUNDRVNTX09OQ0UgdGhlc2UgdHdvIG1hY3JvcyB3aWxsIGFsc28gd29yayBvbiBhZ2dyZWdhdGUKICAqIGRhdGEgdHlwZXMgbGlrZSBzdHJ1Y3RzIG9yIHVuaW9ucy4gSWYgdGhlIHNpemUgb2YgdGhlIGFjY2Vzc2VkIGRhdGEKICAqIHR5cGUgZXhjZWVkcyB0aGUgd29yZCBzaXplIG9mIHRoZSBtYWNoaW5lIChlLmcuLCAzMiBiaXRzIG9yIDY0IGJpdHMpCi0gKiBSRUFEX09OQ0UoKSBhbmQgQVNTSUdOX09OQ0UoKSAgd2lsbCBmYWxsIGJhY2sgdG8gbWVtY3B5IGFuZCBwcmludCBhCisgKiBSRUFEX09OQ0UoKSBhbmQgV1JJVEVfT05DRSgpICB3aWxsIGZhbGwgYmFjayB0byBtZW1jcHkgYW5kIHByaW50IGEKICAqIGNvbXBpbGUtdGltZSB3YXJuaW5nLgogICoKICAqIFRoZWlyIHR3byBtYWpvciB1c2UgY2FzZXMgYXJlOiAoMSkgTWVkaWF0aW5nIGNvbW11bmljYXRpb24gYmV0d2VlbgpAQCAtMjU3LDggKzI1Nyw4IEBACiAjZGVmaW5lIFJFQURfT05DRSh4KSBcCiAJKHsgdHlwZW9mKHgpIF9fdmFsOyBfX3JlYWRfb25jZV9zaXplKCZ4LCAmX192YWwsIHNpemVvZihfX3ZhbCkpOyBfX3ZhbDsgfSkKIAotI2RlZmluZSBBU1NJR05fT05DRSh2YWwsIHgpIFwKLQkoeyB0eXBlb2YoeCkgX192YWw7IF9fdmFsID0gdmFsOyBfX2Fzc2lnbl9vbmNlX3NpemUoJngsICZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7IF9fdmFsOyB9KQorI2RlZmluZSBXUklURV9PTkNFKHgsIHZhbCkgXAorCSh7IHR5cGVvZih4KSBfX3ZhbDsgX192YWwgPSB2YWw7IF9fd3JpdGVfb25jZV9zaXplKCZ4LCAmX192YWwsIHNpemVvZihfX3ZhbCkpOyBfX3ZhbDsgfSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVfY29vbGluZy5oIGIvaW5jbHVkZS9saW51eC9jcHVfY29vbGluZy5oCmluZGV4IGMzMDNkMzguLmJkOTU1MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1X2Nvb2xpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdV9jb29saW5nLmgKQEAgLTUwLDcgKzUwLDcgQEAKIG9mX2NwdWZyZXFfY29vbGluZ19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjbGlwX2NwdXMpCiB7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CiB9CiAjZW5kaWYKIApAQCAtNjUsMTMgKzY1LDEzIEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICoKIGNwdWZyZXFfY29vbGluZ19yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY2xpcF9jcHVzKQogewotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqCiBvZl9jcHVmcmVxX2Nvb2xpbmdfcmVnaXN0ZXIoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY2xpcF9jcHVzKQogewotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogfQogc3RhdGljIGlubGluZQogdm9pZCBjcHVmcmVxX2Nvb2xpbmdfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1aWRsZS5oIGIvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKaW5kZXggYTA3ZTA4Ny4uYWI3MGYzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKQEAgLTUzLDcgKzUzLDYgQEAKIH07CiAKIC8qIElkbGUgU3RhdGUgRmxhZ3MgKi8KLSNkZWZpbmUgQ1BVSURMRV9GTEFHX1RJTUVfSU5WQUxJRAkoMHgwMSkgLyogaXMgcmVzaWRlbmN5IHRpbWUgbWVhc3VyYWJsZT8gKi8KICNkZWZpbmUgQ1BVSURMRV9GTEFHX0NPVVBMRUQJKDB4MDIpIC8qIHN0YXRlIGFwcGxpZXMgdG8gbXVsdGlwbGUgY3B1cyAqLwogI2RlZmluZSBDUFVJRExFX0ZMQUdfVElNRVJfU1RPUCAoMHgwNCkgIC8qIHRpbWVyIGlzIHN0b3BwZWQgb24gdGhpcyBzdGF0ZSAqLwogCkBAIC04OSw4ICs4OCw2IEBACiAvKioKICAqIGNwdWlkbGVfZ2V0X2xhc3RfcmVzaWRlbmN5IC0gcmV0cmlldmVzIHRoZSBsYXN0IHN0YXRlJ3MgcmVzaWRlbmN5IHRpbWUKICAqIEBkZXY6IHRoZSB0YXJnZXQgQ1BVCi0gKgotICogTk9URTogdGhpcyB2YWx1ZSBpcyBpbnZhbGlkIGlmIENQVUlETEVfRkxBR19USU1FX0lOVkFMSUQgaXMgc2V0CiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNwdWlkbGVfZ2V0X2xhc3RfcmVzaWRlbmN5KHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGY5MGMwMjguLjQyZWZlMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTEzNSw3ICsxMzUsNyBAQAogI2RlZmluZSBGTU9ERV9DQU5fV1JJVEUgICAgICAgICAoKF9fZm9yY2UgZm1vZGVfdCkweDQwMDAwKQogCiAvKiBGaWxlIHdhcyBvcGVuZWQgYnkgZmFub3RpZnkgYW5kIHNob3VsZG4ndCBnZW5lcmF0ZSBmYW5vdGlmeSBldmVudHMgKi8KLSNkZWZpbmUgRk1PREVfTk9OT1RJRlkJCSgoX19mb3JjZSBmbW9kZV90KTB4MTAwMDAwMCkKKyNkZWZpbmUgRk1PREVfTk9OT1RJRlkJCSgoX19mb3JjZSBmbW9kZV90KTB4NDAwMDAwMCkKIAogLyoKICAqIEZsYWcgZm9yIHJ3X2NvcHlfY2hlY2tfdXZlY3RvciBhbmQgY29tcGF0X3J3X2NvcHlfY2hlY2tfdXZlY3RvcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvZ2VuZXRsaW5rLmgKaW5kZXggNTViNjg1Ny4uMDk0NjBkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmV0bGluay5oCkBAIC0xMSw2ICsxMSwxMCBAQAogZXh0ZXJuIGludCBsb2NrZGVwX2dlbmxfaXNfaGVsZCh2b2lkKTsKICNlbmRpZgogCisvKiBmb3Igc3luY2hyb25pc2F0aW9uIGJldHdlZW4gYWZfbmV0bGluayBhbmQgZ2VuZXRsaW5rICovCitleHRlcm4gYXRvbWljX3QgZ2VubF9za19kZXN0cnVjdGluZ19jbnQ7CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgZ2VubF9za19kZXN0cnVjdGluZ193YWl0cTsKKwogLyoqCiAgKiByY3VfZGVyZWZlcmVuY2VfZ2VubCAtIHJjdV9kZXJlZmVyZW5jZSB3aXRoIGRlYnVnIGNoZWNraW5nCiAgKiBAcDogVGhlIHBvaW50ZXIgdG8gcmVhZCwgcHJpb3IgdG8gZGVyZWZlcmVuY2luZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggZTNhMTcyMS4uN2M3Njk1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0yMjgsNyArMjI4LDkgQEAKIAlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIHRoZSBkZXZpY2Ugc3RydWN0dXJlCQkqLwogCWludCBpcnE7CQkJLyogaXJxIGlzc3VlZCBieSBkZXZpY2UJCSovCiAJc3RydWN0IGxpc3RfaGVhZCBkZXRlY3RlZDsKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JMkNfU0xBVkUpCiAJaTJjX3NsYXZlX2NiX3Qgc2xhdmVfY2I7CS8qIGNhbGxiYWNrIGZvciBzbGF2ZSBtb2RlCSovCisjZW5kaWYKIH07CiAjZGVmaW5lIHRvX2kyY19jbGllbnQoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBpMmNfY2xpZW50LCBkZXYpCiAKQEAgLTI1Myw2ICsyNTUsNyBAQAogCiAvKiBJMkMgc2xhdmUgc3VwcG9ydCAqLwogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSTJDX1NMQVZFKQogZW51bSBpMmNfc2xhdmVfZXZlbnQgewogCUkyQ19TTEFWRV9SRVFfUkVBRF9TVEFSVCwKIAlJMkNfU0xBVkVfUkVRX1JFQURfRU5ELApAQCAtMjY5LDYgKzI3Miw3IEBACiB7CiAJcmV0dXJuIGNsaWVudC0+c2xhdmVfY2IoY2xpZW50LCBldmVudCwgdmFsKTsKIH0KKyNlbmRpZgogCiAvKioKICAqIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAtIHRlbXBsYXRlIGZvciBkZXZpY2UgY3JlYXRpb24KQEAgLTQwNCw4ICs0MDgsMTAgQEAKIAkvKiBUbyBkZXRlcm1pbmUgd2hhdCB0aGUgYWRhcHRlciBzdXBwb3J0cyAqLwogCXUzMiAoKmZ1bmN0aW9uYWxpdHkpIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JMkNfU0xBVkUpCiAJaW50ICgqcmVnX3NsYXZlKShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAlpbnQgKCp1bnJlZ19zbGF2ZSkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CisjZW5kaWYKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZGIuaCBiL2luY2x1ZGUvbGludXgva2RiLmgKaW5kZXggMjkwZGIxMi4uNzVhZTJlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tkYi5oCkBAIC0xMywxMSArMTMsNTQgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgogICovCiAKKy8qIFNoaWZ0ZWQgdmVyc2lvbnMgb2YgdGhlIGNvbW1hbmQgZW5hYmxlIGJpdHMgYXJlIGJlIHVzZWQgaWYgdGhlIGNvbW1hbmQKKyAqIGhhcyBubyBhcmd1bWVudHMgKHNlZSBrZGJfY2hlY2tfZmxhZ3MpLiBUaGlzIGFsbG93cyBjb21tYW5kcywgc3VjaCBhcworICogZ28sIHRvIGhhdmUgZGlmZmVyZW50IHBlcm1pc3Npb25zIGRlcGVuZGluZyB1cG9uIHdoZXRoZXIgaXQgaXMgY2FsbGVkCisgKiB3aXRoIGFuIGFyZ3VtZW50LgorICovCisjZGVmaW5lIEtEQl9FTkFCTEVfTk9fQVJHU19TSElGVCAxMAorCiB0eXBlZGVmIGVudW0gewotCUtEQl9SRVBFQVRfTk9ORSA9IDAsCS8qIERvIG5vdCByZXBlYXQgdGhpcyBjb21tYW5kICovCi0JS0RCX1JFUEVBVF9OT19BUkdTLAkvKiBSZXBlYXQgdGhlIGNvbW1hbmQgd2l0aG91dCBhcmd1bWVudHMgKi8KLQlLREJfUkVQRUFUX1dJVEhfQVJHUywJLyogUmVwZWF0IHRoZSBjb21tYW5kIGluY2x1ZGluZyBpdHMgYXJndW1lbnRzICovCi19IGtkYl9yZXBlYXRfdDsKKwlLREJfRU5BQkxFX0FMTCA9ICgxIDw8IDApLCAvKiBFbmFibGUgZXZlcnl0aGluZyAqLworCUtEQl9FTkFCTEVfTUVNX1JFQUQgPSAoMSA8PCAxKSwKKwlLREJfRU5BQkxFX01FTV9XUklURSA9ICgxIDw8IDIpLAorCUtEQl9FTkFCTEVfUkVHX1JFQUQgPSAoMSA8PCAzKSwKKwlLREJfRU5BQkxFX1JFR19XUklURSA9ICgxIDw8IDQpLAorCUtEQl9FTkFCTEVfSU5TUEVDVCA9ICgxIDw8IDUpLAorCUtEQl9FTkFCTEVfRkxPV19DVFJMID0gKDEgPDwgNiksCisJS0RCX0VOQUJMRV9TSUdOQUwgPSAoMSA8PCA3KSwKKwlLREJfRU5BQkxFX1JFQk9PVCA9ICgxIDw8IDgpLAorCS8qIFVzZXIgZXhwb3NlZCB2YWx1ZXMgc3RvcCBoZXJlLCBhbGwgcmVtYWluaW5nIGZsYWdzIGFyZQorCSAqIGV4Y2x1c2l2ZWx5IHVzZWQgdG8gZGVzY3JpYmUgYSBjb21tYW5kcyBiZWhhdmlvdXIuCisJICovCisKKwlLREJfRU5BQkxFX0FMV0FZU19TQUZFID0gKDEgPDwgOSksCisJS0RCX0VOQUJMRV9NQVNLID0gKDEgPDwgS0RCX0VOQUJMRV9OT19BUkdTX1NISUZUKSAtIDEsCisKKwlLREJfRU5BQkxFX0FMTF9OT19BUkdTID0gS0RCX0VOQUJMRV9BTEwgPDwgS0RCX0VOQUJMRV9OT19BUkdTX1NISUZULAorCUtEQl9FTkFCTEVfTUVNX1JFQURfTk9fQVJHUyA9IEtEQl9FTkFCTEVfTUVNX1JFQUQKKwkJCQkgICAgICA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQsCisJS0RCX0VOQUJMRV9NRU1fV1JJVEVfTk9fQVJHUyA9IEtEQl9FTkFCTEVfTUVNX1dSSVRFCisJCQkJICAgICAgIDw8IEtEQl9FTkFCTEVfTk9fQVJHU19TSElGVCwKKwlLREJfRU5BQkxFX1JFR19SRUFEX05PX0FSR1MgPSBLREJfRU5BQkxFX1JFR19SRUFECisJCQkJICAgICAgPDwgS0RCX0VOQUJMRV9OT19BUkdTX1NISUZULAorCUtEQl9FTkFCTEVfUkVHX1dSSVRFX05PX0FSR1MgPSBLREJfRU5BQkxFX1JFR19XUklURQorCQkJCSAgICAgICA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQsCisJS0RCX0VOQUJMRV9JTlNQRUNUX05PX0FSR1MgPSBLREJfRU5BQkxFX0lOU1BFQ1QKKwkJCQkgICAgIDw8IEtEQl9FTkFCTEVfTk9fQVJHU19TSElGVCwKKwlLREJfRU5BQkxFX0ZMT1dfQ1RSTF9OT19BUkdTID0gS0RCX0VOQUJMRV9GTE9XX0NUUkwKKwkJCQkgICAgICAgPDwgS0RCX0VOQUJMRV9OT19BUkdTX1NISUZULAorCUtEQl9FTkFCTEVfU0lHTkFMX05PX0FSR1MgPSBLREJfRU5BQkxFX1NJR05BTAorCQkJCSAgICA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQsCisJS0RCX0VOQUJMRV9SRUJPT1RfTk9fQVJHUyA9IEtEQl9FTkFCTEVfUkVCT09UCisJCQkJICAgIDw8IEtEQl9FTkFCTEVfTk9fQVJHU19TSElGVCwKKwlLREJfRU5BQkxFX0FMV0FZU19TQUZFX05PX0FSR1MgPSBLREJfRU5BQkxFX0FMV0FZU19TQUZFCisJCQkJCSA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQsCisJS0RCX0VOQUJMRV9NQVNLX05PX0FSR1MgPSBLREJfRU5BQkxFX01BU0sgPDwgS0RCX0VOQUJMRV9OT19BUkdTX1NISUZULAorCisJS0RCX1JFUEVBVF9OT19BUkdTID0gMHg0MDAwMDAwMCwgLyogUmVwZWF0IHRoZSBjb21tYW5kIHcvbyBhcmd1bWVudHMgKi8KKwlLREJfUkVQRUFUX1dJVEhfQVJHUyA9IDB4ODAwMDAwMDAsIC8qIFJlcGVhdCB0aGUgY29tbWFuZCB3aXRoIGFyZ3MgKi8KK30ga2RiX2NtZGZsYWdzX3Q7CiAKIHR5cGVkZWYgaW50ICgqa2RiX2Z1bmNfdCkoaW50LCBjb25zdCBjaGFyICoqKTsKIApAQCAtNjIsNiArMTA1LDcgQEAKICNkZWZpbmUgS0RCX0JBRExFTkdUSAkoLTE5KQogI2RlZmluZSBLREJfTk9CUAkoLTIwKQogI2RlZmluZSBLREJfQkFEQUREUgkoLTIxKQorI2RlZmluZSBLREJfTk9QRVJNCSgtMjIpCiAKIC8qCiAgKiBrZGJfZGllbXNnCkBAIC0xNDYsMTcgKzE5MCwxNyBAQAogCiAvKiBEeW5hbWljIGtkYiBzaGVsbCBjb21tYW5kIHJlZ2lzdHJhdGlvbiAqLwogZXh0ZXJuIGludCBrZGJfcmVnaXN0ZXIoY2hhciAqLCBrZGJfZnVuY190LCBjaGFyICosIGNoYXIgKiwgc2hvcnQpOwotZXh0ZXJuIGludCBrZGJfcmVnaXN0ZXJfcmVwZWF0KGNoYXIgKiwga2RiX2Z1bmNfdCwgY2hhciAqLCBjaGFyICosCi0JCQkgICAgICAgc2hvcnQsIGtkYl9yZXBlYXRfdCk7CitleHRlcm4gaW50IGtkYl9yZWdpc3Rlcl9mbGFncyhjaGFyICosIGtkYl9mdW5jX3QsIGNoYXIgKiwgY2hhciAqLAorCQkJICAgICAgc2hvcnQsIGtkYl9jbWRmbGFnc190KTsKIGV4dGVybiBpbnQga2RiX3VucmVnaXN0ZXIoY2hhciAqKTsKICNlbHNlIC8qICEgQ09ORklHX0tHREJfS0RCICovCiBzdGF0aWMgaW5saW5lIF9fcHJpbnRmKDEsIDIpIGludCBrZGJfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQga2RiX2luaXQoaW50IGxldmVsKSB7fQogc3RhdGljIGlubGluZSBpbnQga2RiX3JlZ2lzdGVyKGNoYXIgKmNtZCwga2RiX2Z1bmNfdCBmdW5jLCBjaGFyICp1c2FnZSwKIAkJCSAgICAgICBjaGFyICpoZWxwLCBzaG9ydCBtaW5sZW4pIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGtkYl9yZWdpc3Rlcl9yZXBlYXQoY2hhciAqY21kLCBrZGJfZnVuY190IGZ1bmMsIGNoYXIgKnVzYWdlLAotCQkJCSAgICAgIGNoYXIgKmhlbHAsIHNob3J0IG1pbmxlbiwKLQkJCQkgICAgICBrZGJfcmVwZWF0X3QgcmVwZWF0KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBrZGJfcmVnaXN0ZXJfZmxhZ3MoY2hhciAqY21kLCBrZGJfZnVuY190IGZ1bmMsIGNoYXIgKnVzYWdlLAorCQkJCSAgICAgY2hhciAqaGVscCwgc2hvcnQgbWlubGVuLAorCQkJCSAgICAga2RiX2NtZGZsYWdzX3QgZmxhZ3MpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGtkYl91bnJlZ2lzdGVyKGNoYXIgKmNtZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCS8qIENPTkZJR19LR0RCX0tEQiAqLwogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCA1NDQ5ZDJmLi42NGNlNThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTE3Niw3ICsxNzYsNyBAQAogICovCiAjIGRlZmluZSBtaWdodF9zbGVlcCgpIFwKIAlkbyB7IF9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCAwKTsgbWlnaHRfcmVzY2hlZCgpOyB9IHdoaWxlICgwKQotIyBkZWZpbmUgc2NoZWRfYW5ub3RhdGVfc2xlZXAoKQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORykKKyMgZGVmaW5lIHNjaGVkX2Fubm90YXRlX3NsZWVwKCkJKGN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlID0gMCkKICNlbHNlCiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBfX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKIAkJCQkgICBpbnQgcHJlZW1wdF9vZmZzZXQpIHsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggMmQxODI0MS4uOTFmNzA1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC0yMzEsNiArMjMxLDcgQEAKIAlBVEFfRkxBR19TV19BQ1RJVklUWQk9ICgxIDw8IDIyKSwgLyogZHJpdmVyIHN1cHBvcnRzIHN3IGFjdGl2aXR5CiAJCQkJCSAgICAgICogbGVkICovCiAJQVRBX0ZMQUdfTk9fRElQTQk9ICgxIDw8IDIzKSwgLyogaG9zdCBub3QgaGFwcHkgd2l0aCBESVBNICovCisJQVRBX0ZMQUdfTE9XVEFHCQk9ICgxIDw8IDI0KSwgLyogaG9zdCB3YW50cyBsb3dlc3QgYXZhaWxhYmxlIHRhZyAqLwogCiAJLyogYml0cyAyNDozMSBvZiBhcC0+ZmxhZ3MgYXJlIHJlc2VydmVkIGZvciBMTEQgc3BlY2lmaWMgZmxhZ3MgKi8KIApAQCAtNDIyLDYgKzQyMyw3IEBACiAJQVRBX0hPUktBR0VfTk9fTkNRX1RSSU0JPSAoMSA8PCAxOSksCS8qIGRvbid0IHVzZSBxdWV1ZWQgVFJJTSAqLwogCUFUQV9IT1JLQUdFX05PTFBNCT0gKDEgPDwgMjApLAkvKiBkb24ndCB1c2UgTFBNICovCiAJQVRBX0hPUktBR0VfV0RfQlJPS0VOX0xQTSA9ICgxIDw8IDIxKSwJLyogc29tZSBXRHMgaGF2ZSBicm9rZW4gTFBNICovCisJQVRBX0hPUktBR0VfWkVST19BRlRFUl9UUklNID0gKDEgPDwgMjIpLC8qIGd1YXJhbnRlZXMgemVybyBhZnRlciB0cmltICovCiAKIAkgLyogRE1BIG1hc2sgZm9yIHVzZXIgRE1BIGNvbnRyb2w6IFVzZXIgdmlzaWJsZSB2YWx1ZXM7IERPIE5PVAogCSAgICByZW51bWJlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvc2Ftc3VuZy9zMm1wczEzLmggYi9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaAppbmRleCBjZTVkZGE4Li5iMWZkNjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaApAQCAtNTksNiArNTksNyBAQAogCVMyTVBTMTNfUkVHX0I2Q1RSTCwKIAlTMk1QUzEzX1JFR19CNk9VVCwKIAlTMk1QUzEzX1JFR19CN0NUUkwsCisJUzJNUFMxM19SRUdfQjdTVywKIAlTMk1QUzEzX1JFR19CN09VVCwKIAlTMk1QUzEzX1JFR19COENUUkwsCiAJUzJNUFMxM19SRUdfQjhPVVQsCkBAIC0xMDIsNiArMTAzLDcgQEAKIAlTMk1QUzEzX1JFR19MMjZDVFJMLAogCVMyTVBTMTNfUkVHX0wyN0NUUkwsCiAJUzJNUFMxM19SRUdfTDI4Q1RSTCwKKwlTMk1QUzEzX1JFR19MMjlDVFJMLAogCVMyTVBTMTNfUkVHX0wzMENUUkwsCiAJUzJNUFMxM19SRUdfTDMxQ1RSTCwKIAlTMk1QUzEzX1JFR19MMzJDVFJMLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvc3RtcGUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3N0bXBlLmgKaW5kZXggNTc1YTg2Yy4uZjc0MmI2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc3RtcGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9zdG1wZS5oCkBAIC01MCw2ICs1MCw4IEBACiAJU1RNUEVfSURYX0dQRURSX01TQiwKIAlTVE1QRV9JRFhfR1BSRVJfTFNCLAogCVNUTVBFX0lEWF9HUEZFUl9MU0IsCisJU1RNUEVfSURYX0dQUFVSX0xTQiwKKwlTVE1QRV9JRFhfR1BQRFJfTFNCLAogCVNUTVBFX0lEWF9HUEFGUl9VX01TQiwKIAlTVE1QRV9JRFhfSUVHUElPUl9MU0IsCiAJU1RNUEVfSURYX0lTR1BJT1JfTFNCLApAQCAtMTEzLDI0ICsxMTUsNiBAQAogZXh0ZXJuIGludCBzdG1wZV9lbmFibGUoc3RydWN0IHN0bXBlICpzdG1wZSwgdW5zaWduZWQgaW50IGJsb2Nrcyk7CiBleHRlcm4gaW50IHN0bXBlX2Rpc2FibGUoc3RydWN0IHN0bXBlICpzdG1wZSwgdW5zaWduZWQgaW50IGJsb2Nrcyk7CiAKLXN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGE7Ci0KLS8qKgotICogc3RydWN0IHN0bXBlX2tleXBhZF9wbGF0Zm9ybV9kYXRhIC0gU1RNUEUga2V5cGFkIHBsYXRmb3JtIGRhdGEKLSAqIEBrZXltYXBfZGF0YToga2V5IG1hcCB0YWJsZSBhbmQgc2l6ZQotICogQGRlYm91bmNlX21zOiBkZWJvdW5jZSBpbnRlcnZhbCwgaW4gbXMuICBNYXhpbXVtIGlzCi0gKgkJICVTVE1QRV9LRVlQQURfTUFYX0RFQk9VTkNFLgotICogQHNjYW5fY291bnQ6IG51bWJlciBvZiBrZXkgc2Nhbm5pbmcgY3ljbGVzIHRvIGNvbmZpcm0ga2V5IGRhdGEuCi0gKgkJTWF4aW11bSBpcyAlU1RNUEVfS0VZUEFEX01BWF9TQ0FOX0NPVU5ULgotICogQG5vX2F1dG9yZXBlYXQ6IGRpc2FibGUga2V5IGF1dG9yZXBlYXQKLSAqLwotc3RydWN0IHN0bXBlX2tleXBhZF9wbGF0Zm9ybV9kYXRhIHsKLQljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKLQl1bnNpZ25lZCBpbnQgZGVib3VuY2VfbXM7Ci0JdW5zaWduZWQgaW50IHNjYW5fY291bnQ7Ci0JYm9vbCBub19hdXRvcmVwZWF0OwotfTsKLQogI2RlZmluZSBTVE1QRV9HUElPX05PUkVRXzgxMV9UT1VDSAkoMHhmMCkKIAogLyoqCkBAIC0xOTksNyArMTgzLDYgQEAKICAqIEBpcnFfZ3BpbzogZ3BpbyBudW1iZXIgb3ZlciB3aGljaCBpcnEgd2lsbCBiZSByZXF1ZXN0ZWQgKHNpZ25pZmljYW50IG9ubHkgaWYKICAqCSAgICAgIGlycV9vdmVyX2dwaW8gaXMgdHJ1ZSkKICAqIEBncGlvOiBHUElPLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEKLSAqIEBrZXlwYWQ6IGtleXBhZC1zcGVjaWZpYyBwbGF0Zm9ybSBkYXRhCiAgKiBAdHM6IHRvdWNoc2NyZWVuLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEKICAqLwogc3RydWN0IHN0bXBlX3BsYXRmb3JtX2RhdGEgewpAQCAtMjEyLDcgKzE5NSw2IEBACiAJaW50IGF1dG9zbGVlcF90aW1lb3V0OwogCiAJc3RydWN0IHN0bXBlX2dwaW9fcGxhdGZvcm1fZGF0YSAqZ3BpbzsKLQlzdHJ1Y3Qgc3RtcGVfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKmtleXBhZDsKIAlzdHJ1Y3Qgc3RtcGVfdHNfcGxhdGZvcm1fZGF0YSAqdHM7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZjgwZDAxOS4uZGQ1ZWEzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTA3MCw2ICsxMDcwLDcgQEAKICNkZWZpbmUgVk1fRkFVTFRfV1JJVEUJMHgwMDA4CS8qIFNwZWNpYWwgY2FzZSBmb3IgZ2V0X3VzZXJfcGFnZXMgKi8KICNkZWZpbmUgVk1fRkFVTFRfSFdQT0lTT04gMHgwMDEwCS8qIEhpdCBwb2lzb25lZCBzbWFsbCBwYWdlICovCiAjZGVmaW5lIFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIDB4MDAyMCAgLyogSGl0IHBvaXNvbmVkIGxhcmdlIHBhZ2UuIEluZGV4IGVuY29kZWQgaW4gdXBwZXIgYml0cyAqLworI2RlZmluZSBWTV9GQVVMVF9TSUdTRUdWIDB4MDA0MAogCiAjZGVmaW5lIFZNX0ZBVUxUX05PUEFHRQkweDAxMDAJLyogLT5mYXVsdCBpbnN0YWxsZWQgdGhlIHB0ZSwgbm90IHJldHVybiBwYWdlICovCiAjZGVmaW5lIFZNX0ZBVUxUX0xPQ0tFRAkweDAyMDAJLyogLT5mYXVsdCBsb2NrZWQgdGhlIHJldHVybmVkIHBhZ2UgKi8KQEAgLTEwNzgsOCArMTA3OSw5IEBACiAKICNkZWZpbmUgVk1fRkFVTFRfSFdQT0lTT05fTEFSR0VfTUFTSyAweGYwMDAgLyogZW5jb2RlcyBocGFnZSBpbmRleCBmb3IgbGFyZ2UgaHdwb2lzb24gKi8KIAotI2RlZmluZSBWTV9GQVVMVF9FUlJPUgkoVk1fRkFVTFRfT09NIHwgVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfSFdQT0lTT04gfCBcCi0JCQkgVk1fRkFVTFRfRkFMTEJBQ0sgfCBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSkKKyNkZWZpbmUgVk1fRkFVTFRfRVJST1IJKFZNX0ZBVUxUX09PTSB8IFZNX0ZBVUxUX1NJR0JVUyB8IFZNX0ZBVUxUX1NJR1NFR1YgfCBcCisJCQkgVk1fRkFVTFRfSFdQT0lTT04gfCBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSB8IFwKKwkJCSBWTV9GQVVMVF9GQUxMQkFDSykKIAogLyogRW5jb2RlIGhzdGF0ZSBpbmRleCBmb3IgYSBod3BvaXNvbmVkIGxhcmdlIHBhZ2UgKi8KICNkZWZpbmUgVk1fRkFVTFRfU0VUX0hJTkRFWCh4KSAoKHgpIDw8IDEyKQpAQCAtMTk1Miw3ICsxOTU0LDcgQEAKICNpZiBWTV9HUk9XU1VQCiBleHRlcm4gaW50IGV4cGFuZF91cHdhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogI2Vsc2UKLSAgI2RlZmluZSBleHBhbmRfdXB3YXJkcyh2bWEsIGFkZHJlc3MpIGRvIHsgfSB3aGlsZSAoMCkKKyAgI2RlZmluZSBleHBhbmRfdXB3YXJkcyh2bWEsIGFkZHJlc3MpICgwKQogI2VuZGlmCiAKIC8qIExvb2sgdXAgdGhlIGZpcnN0IFZNQSB3aGljaCBzYXRpc2ZpZXMgIGFkZHIgPCB2bV9lbmQsICBOVUxMIGlmIG5vbmUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2RoY2kuaAppbmRleCAzNzVhZjgwLi5mNzY3YTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL3NkaGNpLmgKQEAgLTEzNyw2ICsxMzcsNyBAQAogI2RlZmluZSBTREhDSV9TRFIxMDRfTkVFRFNfVFVOSU5HICgxPDwxMCkJLyogU0RSMTA0L0hTMjAwIG5lZWRzIHR1bmluZyAqLwogI2RlZmluZSBTREhDSV9VU0lOR19SRVRVTklOR19USU1FUiAoMTw8MTEpCS8qIEhvc3QgaXMgdXNpbmcgYSByZXR1bmluZyB0aW1lciBmb3IgdGhlIGNhcmQgKi8KICNkZWZpbmUgU0RIQ0lfVVNFXzY0X0JJVF9ETUEJKDE8PDEyKQkvKiBVc2UgNjQtYml0IERNQSAqLworI2RlZmluZSBTREhDSV9IUzQwMF9UVU5JTkcJKDE8PDEzKQkvKiBUdW5pbmcgZm9yIEhTNDAwICovCiAKIAl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJLyogU0RIQ0kgc3BlYy4gdmVyc2lvbiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCBlYmZiMGUxLi5iNjUzZDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTQ0NCw3ICs0NDQsNyBAQAogI2RlZmluZSBtb2R1bGVfcHV0X2FuZF9leGl0KGNvZGUpIF9fbW9kdWxlX3B1dF9hbmRfZXhpdChUSElTX01PRFVMRSwgY29kZSkKIAogI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECi11bnNpZ25lZCBsb25nIG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpOworaW50IG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpOwogdm9pZCBfX3N5bWJvbF9wdXQoY29uc3QgY2hhciAqc3ltYm9sKTsKICNkZWZpbmUgc3ltYm9sX3B1dCh4KSBfX3N5bWJvbF9wdXQoVk1MSU5VWF9TWU1CT0xfU1RSKHgpKQogdm9pZCBzeW1ib2xfcHV0X2FkZHIodm9pZCAqYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZWxvYWRlci5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVsb2FkZXIuaAppbmRleCA3ZWViOWJiLi5mNzU1NjI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZWxvYWRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmgKQEAgLTI2LDcgKzI2LDcgQEAKIHZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpOwogCiAvKiBGcmVlIG1lbW9yeSByZXR1cm5lZCBmcm9tIG1vZHVsZV9hbGxvYy4gKi8KLXZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKTsKK3ZvaWQgbW9kdWxlX21lbWZyZWUodm9pZCAqbW9kdWxlX3JlZ2lvbik7CiAKIC8qCiAgKiBBcHBseSB0aGUgZ2l2ZW4gcmVsb2NhdGlvbiB0byB0aGUgKHNpbXBsaWZpZWQpIEVMRi4gIFJldHVybiAtZXJyb3IKQEAgLTgyLDQgKzgyLDYgQEAKIC8qIEFueSBjbGVhbnVwIG5lZWRlZCB3aGVuIG1vZHVsZSBsZWF2ZXMuICovCiB2b2lkIG1vZHVsZV9hcmNoX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqbW9kKTsKIAorLyogQW55IGNsZWFudXAgYmVmb3JlIGZyZWVpbmcgbW9kLT5tb2R1bGVfaW5pdCAqLwordm9pZCBtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggYzMxZjc0ZC4uNTJmZDhlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC04NTIsMTEgKzg1MiwxMSBAQAogICoJMy4gVXBkYXRlIGRldi0+c3RhdHMgYXN5bmNocm9ub3VzbHkgYW5kIGF0b21pY2FsbHksIGFuZCBkZWZpbmUKICAqCSAgIG5laXRoZXIgb3BlcmF0aW9uLgogICoKLSAqIGludCAoKm5kb192bGFuX3J4X2FkZF92aWQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90bywgdTE2dCB2aWQpOworICogaW50ICgqbmRvX3ZsYW5fcnhfYWRkX3ZpZCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKTsKICAqCUlmIGRldmljZSBzdXBwb3J0IFZMQU4gZmlsdGVyaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYQogICoJVkxBTiBpZCBpcyByZWdpc3RlcmVkLgogICoKLSAqIGludCAoKm5kb192bGFuX3J4X2tpbGxfdmlkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpOworICogaW50ICgqbmRvX3ZsYW5fcnhfa2lsbF92aWQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZCk7CiAgKglJZiBkZXZpY2Ugc3VwcG9ydCBWTEFOIGZpbHRlcmluZyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEKICAqCVZMQU4gaWQgaXMgdW5yZWdpc3RlcmVkLgogICoKQEAgLTEwMTIsMTIgKzEwMTIsMTUgQEAKICAqCUNhbGxiYWNrIHRvIHVzZSBmb3IgeG1pdCBvdmVyIHRoZSBhY2NlbGVyYXRlZCBzdGF0aW9uLiBUaGlzCiAgKglpcyB1c2VkIGluIHBsYWNlIG9mIG5kb19zdGFydF94bWl0IG9uIGFjY2VsZXJhdGVkIG5ldAogICoJZGV2aWNlcy4KLSAqIGJvb2wJKCpuZG9fZ3NvX2NoZWNrKSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAqCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyAqIG5ldGRldl9mZWF0dXJlc190ICgqbmRvX2ZlYXR1cmVzX2NoZWNrKSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKyAqCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldgorICoJCQkJCSAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7CiAgKglDYWxsZWQgYnkgY29yZSB0cmFuc21pdCBwYXRoIHRvIGRldGVybWluZSBpZiBkZXZpY2UgaXMgY2FwYWJsZSBvZgotICoJcGVyZm9ybWluZyBHU08gb24gYSBwYWNrZXQuIFRoZSBkZXZpY2UgcmV0dXJucyB0cnVlIGlmIGl0IGlzCi0gKglhYmxlIHRvIEdTTyB0aGUgcGFja2V0LCBmYWxzZSBvdGhlcndpc2UuIElmIHRoZSByZXR1cm4gdmFsdWUgaXMKLSAqCWZhbHNlIHRoZSBzdGFjayB3aWxsIGRvIHNvZnR3YXJlIEdTTy4KKyAqCXBlcmZvcm1pbmcgb2ZmbG9hZCBvcGVyYXRpb25zIG9uIGEgZ2l2ZW4gcGFja2V0LiBUaGlzIGlzIHRvIGdpdmUKKyAqCXRoZSBkZXZpY2UgYW4gb3Bwb3J0dW5pdHkgdG8gaW1wbGVtZW50IGFueSByZXN0cmljdGlvbnMgdGhhdCBjYW5ub3QKKyAqCWJlIG90aGVyd2lzZSBleHByZXNzZWQgYnkgZmVhdHVyZSBmbGFncy4gVGhlIGNoZWNrIGlzIGNhbGxlZCB3aXRoCisgKgl0aGUgc2V0IG9mIGZlYXR1cmVzIHRoYXQgdGhlIHN0YWNrIGhhcyBjYWxjdWxhdGVkIGFuZCBpdCByZXR1cm5zCisgKgl0aG9zZSB0aGUgZHJpdmVyIGJlbGlldmVzIHRvIGJlIGFwcHJvcHJpYXRlLgogICoKICAqIGludCAoKm5kb19zd2l0Y2hfcGFyZW50X2lkX2dldCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAqCQkJCSAgIHN0cnVjdCBuZXRkZXZfcGh5c19pdGVtX2lkICpwc2lkKTsKQEAgLTExNzgsOCArMTE4MSw5IEBACiAJCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCQl2b2lkICpwcml2KTsKIAlpbnQJCQkoKm5kb19nZXRfbG9ja19zdWJjbGFzcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0JYm9vbAkJCSgqbmRvX2dzb19jaGVjaykgKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCW5ldGRldl9mZWF0dXJlc190CSgqbmRvX2ZlYXR1cmVzX2NoZWNrKSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTsKICNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVgogCWludAkJCSgqbmRvX3N3aXRjaF9wYXJlbnRfaWRfZ2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJCSAgICBzdHJ1Y3QgbmV0ZGV2X3BoeXNfaXRlbV9pZCAqcHNpZCk7CkBAIC0yMDgxLDcgKzIwODUsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGQsICYobmV0KS0+ZGV2X2Jhc2VfaGVhZCwgZGV2X2xpc3QpCiAjZGVmaW5lIGZvcl9lYWNoX25ldGRldl9pbl9ib25kX3JjdShib25kLCBzbGF2ZSkJXAogCQlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgc2xhdmUpCVwKLQkJCWlmIChuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KHNsYXZlKSA9PSBib25kKQorCQkJaWYgKG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldF9yY3Uoc2xhdmUpID09IChib25kKSkKICNkZWZpbmUgbmV0X2RldmljZV9lbnRyeShsaCkJbGlzdF9lbnRyeShsaCwgc3RydWN0IG5ldF9kZXZpY2UsIGRldl9saXN0KQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpuZXh0X25ldF9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTM2MTEsOCArMzYxNSw2IEBACiAJCQkJICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiB7CiAJcmV0dXJuIHNrYl9pc19nc28oc2tiKSAmJiAoIXNrYl9nc29fb2soc2tiLCBmZWF0dXJlcykgfHwKLQkJKGRldi0+bmV0ZGV2X29wcy0+bmRvX2dzb19jaGVjayAmJgotCQkgIWRldi0+bmV0ZGV2X29wcy0+bmRvX2dzb19jaGVjayhza2IsIGRldikpIHx8CiAJCXVubGlrZWx5KChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSAmJgogCQkJIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkpKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKaW5kZXggOWU1NzJkYS4uMDJmYzg2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKQEAgLTQ2LDggKzQ2LDggQEAKIAl1bnNpZ25lZCBpbnQJZmxhZ3M7CiAJdm9pZAkJKCppbnB1dCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJc3RydWN0IG11dGV4CSpjYl9tdXRleDsKLQlpbnQJCSgqYmluZCkoaW50IGdyb3VwKTsKLQl2b2lkCQkoKnVuYmluZCkoaW50IGdyb3VwKTsKKwlpbnQJCSgqYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOworCXZvaWQJCSgqdW5iaW5kKShzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cCk7CiAJYm9vbAkJKCpjb21wYXJlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayk7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAppbmRleCAxZTM3ZmJiLi5kZGVhOTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKQEAgLTc0LDYgKzc0LDkgQEAKIAkvKiBpZG1hcHBlciAqLwogCXN0cnVjdCBpZG1hcCAqCQljbF9pZG1hcDsKIAorCS8qIENsaWVudCBvd25lciBpZGVudGlmaWVyICovCisJY29uc3QgY2hhciAqCQljbF9vd25lcl9pZDsKKwogCS8qIE91ciBvd24gSVAgYWRkcmVzcywgYXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgogCSAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbXYwIGNhbGxiYWNrIGFkZHJlc3MuCiAJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29vbS5oIGIvaW5jbHVkZS9saW51eC9vb20uaAppbmRleCA4NTM2OThjLi43NjIwMDk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29vbS5oCisrKyBiL2luY2x1ZGUvbGludXgvb29tLmgKQEAgLTg1LDExICs4NSw2IEBACiAJb29tX2tpbGxlcl9kaXNhYmxlZCA9IGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgb29tX2dmcF9hbGxvd2VkKGdmcF90IGdmcF9tYXNrKQotewotCXJldHVybiAoZ2ZwX21hc2sgJiBfX0dGUF9GUykgJiYgIShnZnBfbWFzayAmIF9fR0ZQX05PUkVUUlkpOwotfQotCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX2xvY2tfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggN2VhMDY5Yy4uNGIzNzM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTI1MSw3ICsyNTEsNyBAQAogI2RlZmluZSBGR1BfTk9XQUlUCQkweDAwMDAwMDIwCiAKIHN0cnVjdCBwYWdlICpwYWdlY2FjaGVfZ2V0X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3Qgb2Zmc2V0LAotCQlpbnQgZmdwX2ZsYWdzLCBnZnBfdCBjYWNoZV9nZnBfbWFzaywgZ2ZwX3QgcmFkaXhfZ2ZwX21hc2spOworCQlpbnQgZmdwX2ZsYWdzLCBnZnBfdCBjYWNoZV9nZnBfbWFzayk7CiAKIC8qKgogICogZmluZF9nZXRfcGFnZSAtIGZpbmQgYW5kIGdldCBhIHBhZ2UgcmVmZXJlbmNlCkBAIC0yNjYsMTMgKzI2NiwxMyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZmluZF9nZXRfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJcGdvZmZfdCBvZmZzZXQpCiB7Ci0JcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBvZmZzZXQsIDAsIDAsIDApOworCXJldHVybiBwYWdlY2FjaGVfZ2V0X3BhZ2UobWFwcGluZywgb2Zmc2V0LCAwLCAwKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZmluZF9nZXRfcGFnZV9mbGFncyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJcGdvZmZfdCBvZmZzZXQsIGludCBmZ3BfZmxhZ3MpCiB7Ci0JcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBvZmZzZXQsIGZncF9mbGFncywgMCwgMCk7CisJcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBvZmZzZXQsIGZncF9mbGFncywgMCk7CiB9CiAKIC8qKgpAQCAtMjkyLDcgKzI5Miw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpmaW5kX2xvY2tfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJcGdvZmZfdCBvZmZzZXQpCiB7Ci0JcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBvZmZzZXQsIEZHUF9MT0NLLCAwLCAwKTsKKwlyZXR1cm4gcGFnZWNhY2hlX2dldF9wYWdlKG1hcHBpbmcsIG9mZnNldCwgRkdQX0xPQ0ssIDApOwogfQogCiAvKioKQEAgLTMxOSw3ICszMTksNyBAQAogewogCXJldHVybiBwYWdlY2FjaGVfZ2V0X3BhZ2UobWFwcGluZywgb2Zmc2V0LAogCQkJCQlGR1BfTE9DS3xGR1BfQUNDRVNTRUR8RkdQX0NSRUFULAotCQkJCQlnZnBfbWFzaywgZ2ZwX21hc2sgJiBHRlBfUkVDTEFJTV9NQVNLKTsKKwkJCQkJZ2ZwX21hc2spOwogfQogCiAvKioKQEAgLTM0MCw4ICszNDAsNyBAQAogewogCXJldHVybiBwYWdlY2FjaGVfZ2V0X3BhZ2UobWFwcGluZywgaW5kZXgsCiAJCQlGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCwKLQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZyksCi0JCQlHRlBfTk9GUyk7CisJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIH0KIAogc3RydWN0IHBhZ2UgKmZpbmRfZ2V0X2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IG9mZnNldCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCAzNjBhOTY2Li45NjAzMDk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTE3NSw2ICsxNzUsOCBAQAogCVBDSV9ERVZfRkxBR1NfRE1BX0FMSUFTX0RFVkZOID0gKF9fZm9yY2UgcGNpX2Rldl9mbGFnc190KSAoMSA8PCA0KSwKIAkvKiBVc2UgYSBQQ0llLXRvLVBDSSBicmlkZ2UgYWxpYXMgZXZlbiBpZiAhcGNpX2lzX3BjaWUgKi8KIAlQQ0lfREVWX0ZMQUdfUENJRV9CUklER0VfQUxJQVMgPSAoX19mb3JjZSBwY2lfZGV2X2ZsYWdzX3QpICgxIDw8IDUpLAorCS8qIERvIG5vdCB1c2UgYnVzIHJlc2V0cyBmb3IgZGV2aWNlICovCisJUENJX0RFVl9GTEFHU19OT19CVVNfUkVTRVQgPSAoX19mb3JjZSBwY2lfZGV2X2ZsYWdzX3QpICgxIDw8IDYpLAogfTsKIAogZW51bSBwY2lfaXJxX3Jlcm91dGVfdmFyaWFudCB7CkBAIC0xMDY1LDYgKzEwNjcsNyBAQAogdm9pZCBwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cyk7CiB2b2lkIHBjaV9idXNfc2l6ZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogaW50IHBjaV9jbGFpbV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQpOworaW50IHBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgaW50IGkpOwogdm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKHZvaWQpOwogdm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfYnJpZGdlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKTsKIHZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVkX2J1c19yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDQ4NmU4NGMuLjY2NGRlNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC03OSwxMSArNzksNiBAQAogCXN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeQllbnRyaWVzWzBdOwogfTsKIAotc3RydWN0IHBlcmZfcmVncyB7Ci0JX191NjQJCWFiaTsKLQlzdHJ1Y3QgcHRfcmVncwkqcmVnczsKLX07Ci0KIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAogLyoKQEAgLTQ1NSwxMSArNDUwLDYgQEAKICNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIH07CiAKLWVudW0gcGVyZl9ldmVudF9jb250ZXh0X3R5cGUgewotCXRhc2tfY29udGV4dCwKLQljcHVfY29udGV4dCwKLX07Ci0KIC8qKgogICogc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAtIGV2ZW50IGNvbnRleHQgc3RydWN0dXJlCiAgKgpAQCAtNDY3LDcgKzQ1Nyw2IEBACiAgKi8KIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgewogCXN0cnVjdCBwbXUJCQkqcG11OwotCWVudW0gcGVyZl9ldmVudF9jb250ZXh0X3R5cGUJdHlwZTsKIAkvKgogCSAqIFByb3RlY3QgdGhlIHN0YXRlcyBvZiB0aGUgZXZlbnRzIGluIHRoZSBsaXN0LAogCSAqIG5yX2FjdGl2ZSwgYW5kIHRoZSBsaXN0OgpAQCAtNjEwLDcgKzU5OSwxNCBAQAogCQl1MzIJcmVzZXJ2ZWQ7CiAJfQkJCQljcHVfZW50cnk7CiAJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5CSpjYWxsY2hhaW47CisKKwkvKgorCSAqIHJlZ3NfdXNlciBtYXkgcG9pbnQgdG8gdGFza19wdF9yZWdzIG9yIHRvIHJlZ3NfdXNlcl9jb3B5LCBkZXBlbmRpbmcKKwkgKiBvbiBhcmNoIGRldGFpbHMuCisJICovCiAJc3RydWN0IHBlcmZfcmVncwkJcmVnc191c2VyOworCXN0cnVjdCBwdF9yZWdzCQkJcmVnc191c2VyX2NvcHk7CisKIAlzdHJ1Y3QgcGVyZl9yZWdzCQlyZWdzX2ludHI7CiAJdTY0CQkJCXN0YWNrX3VzZXJfc2l6ZTsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9yZWdzLmgKaW5kZXggM2M3M2Q1Zi4uYTVmOThkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfcmVncy5oCkBAIC0xLDExICsxLDE5IEBACiAjaWZuZGVmIF9MSU5VWF9QRVJGX1JFR1NfSAogI2RlZmluZSBfTElOVVhfUEVSRl9SRUdTX0gKIAorc3RydWN0IHBlcmZfcmVncyB7CisJX191NjQJCWFiaTsKKwlzdHJ1Y3QgcHRfcmVncwkqcmVnczsKK307CisKICNpZmRlZiBDT05GSUdfSEFWRV9QRVJGX1JFR1MKICNpbmNsdWRlIDxhc20vcGVyZl9yZWdzLmg+CiB1NjQgcGVyZl9yZWdfdmFsdWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpZHgpOwogaW50IHBlcmZfcmVnX3ZhbGlkYXRlKHU2NCBtYXNrKTsKIHU2NCBwZXJmX3JlZ19hYmkoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK3ZvaWQgcGVyZl9nZXRfcmVnc191c2VyKHN0cnVjdCBwZXJmX3JlZ3MgKnJlZ3NfdXNlciwKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3NfdXNlcl9jb3B5KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHU2NCBwZXJmX3JlZ192YWx1ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlkeCkKIHsKQEAgLTIxLDUgKzI5LDEzIEBACiB7CiAJcmV0dXJuIFBFUkZfU0FNUExFX1JFR1NfQUJJX05PTkU7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2dldF9yZWdzX3VzZXIoc3RydWN0IHBlcmZfcmVncyAqcmVnc191c2VyLAorCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzX3VzZXJfY29weSkKK3sKKwlyZWdzX3VzZXItPnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisJcmVnc191c2VyLT5hYmkgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7Cit9CiAjZW5kaWYgLyogQ09ORklHX0hBVkVfUEVSRl9SRUdTICovCiAjZW5kaWYgLyogX0xJTlVYX1BFUkZfUkVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS9vbWFwX2NvbnRyb2xfcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS9vbWFwX2NvbnRyb2xfcGh5LmgKaW5kZXggZTllNmNmYi4uZWI3ZDRhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkvb21hcF9jb250cm9sX3BoeS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGh5L29tYXBfY29udHJvbF9waHkuaApAQCAtNjYsNyArNjYsNyBAQAogI2RlZmluZQlPTUFQX0NUUkxfUElQRTNfUEhZX1RYX1JYX1BPV0VST0ZGCTB4MAogCiAjZGVmaW5lCU9NQVBfQ1RSTF9QQ0lFX1BDU19NQVNLCQkJMHhmZgotI2RlZmluZQlPTUFQX0NUUkxfUENJRV9QQ1NfREVMQVlfQ09VTlRfU0hJRlQJMHg4CisjZGVmaW5lCU9NQVBfQ1RSTF9QQ0lFX1BDU19ERUxBWV9DT1VOVF9TSElGVAkxNgogCiAjZGVmaW5lIE9NQVBfQ1RSTF9VU0IyX1BIWV9QRAkJQklUKDI4KQogCkBAIC03OSw3ICs3OSw3IEBACiB2b2lkIG9tYXBfY29udHJvbF9waHlfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb24pOwogdm9pZCBvbWFwX2NvbnRyb2xfdXNiX3NldF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgICBlbnVtIG9tYXBfY29udHJvbF91c2JfbW9kZSBtb2RlKTsKLXZvaWQgb21hcF9jb250cm9sX3BjaWVfcGNzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggaWQsIHU4IGRlbGF5KTsKK3ZvaWQgb21hcF9jb250cm9sX3BjaWVfcGNzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggZGVsYXkpOwogI2Vsc2UKIAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfY29udHJvbF9waHlfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb24pCkBAIC05MSw3ICs5MSw3IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2NvbnRyb2xfcGNpZV9wY3Moc3RydWN0IGRldmljZSAqZGV2LCB1OCBpZCwgdTggZGVsYXkpCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9jb250cm9sX3BjaWVfcGNzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggZGVsYXkpCiB7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmggYi9pbmNsdWRlL2xpbnV4L3BtX2RvbWFpbi5oCmluZGV4IDZjZDIwZDUuLmE5ZWRhYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9kb21haW4uaApAQCAtMjcxLDYgKzI3MSw4IEBACiBpbnQgX19vZl9nZW5wZF9hZGRfcHJvdmlkZXIoc3RydWN0IGRldmljZV9ub2RlICpucCwgZ2VucGRfeGxhdGVfdCB4bGF0ZSwKIAkJCXZvaWQgKmRhdGEpOwogdm9pZCBvZl9nZW5wZF9kZWxfcHJvdmlkZXIoc3RydWN0IGRldmljZV9ub2RlICpucCk7CitzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKm9mX2dlbnBkX2dldF9mcm9tX3Byb3ZpZGVyKAorCQkJc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqZ2VucGRzcGVjKTsKIAogc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpfX29mX2dlbnBkX3hsYXRlX3NpbXBsZSgKIAkJCQkJc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqZ2VucGRzcGVjLApAQCAtMjg4LDYgKzI5MCwxMiBAQAogfQogc3RhdGljIGlubGluZSB2b2lkIG9mX2dlbnBkX2RlbF9wcm92aWRlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKSB7fQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqb2ZfZ2VucGRfZ2V0X2Zyb21fcHJvdmlkZXIoCisJCQlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpnZW5wZHNwZWMpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKICNkZWZpbmUgX19vZl9nZW5wZF94bGF0ZV9zaW1wbGUJCU5VTEwKICNkZWZpbmUgX19vZl9nZW5wZF94bGF0ZV9vbmVjZWxsCU5VTEwKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmludGsuaCBiL2luY2x1ZGUvbGludXgvcHJpbnRrLmgKaW5kZXggYzhmMTcwMy4uNGQ1YmY1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmludGsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ByaW50ay5oCkBAIC0xMCw5ICsxMCw2IEBACiBleHRlcm4gY29uc3QgY2hhciBsaW51eF9iYW5uZXJbXTsKIGV4dGVybiBjb25zdCBjaGFyIGxpbnV4X3Byb2NfYmFubmVyW107CiAKLWV4dGVybiBjaGFyICpsb2dfYnVmX2FkZHJfZ2V0KHZvaWQpOwotZXh0ZXJuIHUzMiBsb2dfYnVmX2xlbl9nZXQodm9pZCk7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHByaW50a19nZXRfbGV2ZWwoY29uc3QgY2hhciAqYnVmZmVyKQogewogCWlmIChidWZmZXJbMF0gPT0gS0VSTl9TT0hfQVNDSUkgJiYgYnVmZmVyWzFdKSB7CkBAIC0xNjMsNiArMTYwLDggQEAKIAogZXh0ZXJuIHZvaWQgd2FrZV91cF9rbG9nZCh2b2lkKTsKIAorY2hhciAqbG9nX2J1Zl9hZGRyX2dldCh2b2lkKTsKK3UzMiBsb2dfYnVmX2xlbl9nZXQodm9pZCk7CiB2b2lkIGxvZ19idWZfa2V4ZWNfc2V0dXAodm9pZCk7CiB2b2lkIF9faW5pdCBzZXR1cF9sb2dfYnVmKGludCBlYXJseSk7CiB2b2lkIGR1bXBfc3RhY2tfc2V0X2FyY2hfZGVzYyhjb25zdCBjaGFyICpmbXQsIC4uLik7CkBAIC0xOTgsNiArMTk3LDE2IEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgY2hhciAqbG9nX2J1Zl9hZGRyX2dldCh2b2lkKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBsb2dfYnVmX2xlbl9nZXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGxvZ19idWZfa2V4ZWNfc2V0dXAodm9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvcXVvdGEuaAppbmRleCA1MDk3OGI3Li4wOTdkN2ViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGEuaApAQCAtMzIxLDYgKzMyMSw0OSBAQAogCiBzdHJ1Y3QgcGF0aDsKIAorLyogU3RydWN0dXJlIGZvciBjb21tdW5pY2F0aW5nIHZpYSAtPmdldF9kcWJsaygpICYgLT5zZXRfZHFibGsoKSAqLworc3RydWN0IHFjX2RxYmxrIHsKKwlpbnQgZF9maWVsZG1hc2s7CS8qIG1hc2sgb2YgZmllbGRzIHRvIGNoYW5nZSBpbiAtPnNldF9kcWJsaygpICovCisJdTY0IGRfc3BjX2hhcmRsaW1pdDsJLyogYWJzb2x1dGUgbGltaXQgb24gdXNlZCBzcGFjZSAqLworCXU2NCBkX3NwY19zb2Z0bGltaXQ7CS8qIHByZWZlcnJlZCBsaW1pdCBvbiB1c2VkIHNwYWNlICovCisJdTY0IGRfaW5vX2hhcmRsaW1pdDsJLyogbWF4aW11bSAjIGFsbG9jYXRlZCBpbm9kZXMgKi8KKwl1NjQgZF9pbm9fc29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgaW5vZGUgbGltaXQgKi8KKwl1NjQgZF9zcGFjZTsJCS8qIFNwYWNlIG93bmVkIGJ5IHRoZSB1c2VyICovCisJdTY0IGRfaW5vX2NvdW50OwkvKiAjIGlub2RlcyBvd25lZCBieSB0aGUgdXNlciAqLworCXM2NCBkX2lub190aW1lcjsJLyogemVybyBpZiB3aXRoaW4gaW5vZGUgbGltaXRzICovCisJCQkJLyogaWYgbm90LCB3ZSByZWZ1c2Ugc2VydmljZSAqLworCXM2NCBkX3NwY190aW1lcjsJLyogc2ltaWxhciB0byBhYm92ZTsgZm9yIHNwYWNlICovCisJaW50IGRfaW5vX3dhcm5zOwkvKiAjIHdhcm5pbmdzIGlzc3VlZCB3cnQgbnVtIGlub2RlcyAqLworCWludCBkX3NwY193YXJuczsJLyogIyB3YXJuaW5ncyBpc3N1ZWQgd3J0IHVzZWQgc3BhY2UgKi8KKwl1NjQgZF9ydF9zcGNfaGFyZGxpbWl0OwkvKiBhYnNvbHV0ZSBsaW1pdCBvbiByZWFsdGltZSBzcGFjZSAqLworCXU2NCBkX3J0X3NwY19zb2Z0bGltaXQ7CS8qIHByZWZlcnJlZCBsaW1pdCBvbiBSVCBzcGFjZSAqLworCXU2NCBkX3J0X3NwYWNlOwkJLyogcmVhbHRpbWUgc3BhY2Ugb3duZWQgKi8KKwlzNjQgZF9ydF9zcGNfdGltZXI7CS8qIHNpbWlsYXIgdG8gYWJvdmU7IGZvciBSVCBzcGFjZSAqLworCWludCBkX3J0X3NwY193YXJuczsJLyogIyB3YXJuaW5ncyBpc3N1ZWQgd3J0IFJUIHNwYWNlICovCit9OworCisvKiBGaWVsZCBzcGVjaWZpZXJzIGZvciAtPnNldF9kcWJsaygpIGluIHN0cnVjdCBxY19kcWJsayAqLworI2RlZmluZQlRQ19JTk9fU09GVAkoMTw8MCkKKyNkZWZpbmUJUUNfSU5PX0hBUkQJKDE8PDEpCisjZGVmaW5lCVFDX1NQQ19TT0ZUCSgxPDwyKQorI2RlZmluZQlRQ19TUENfSEFSRAkoMTw8MykKKyNkZWZpbmUJUUNfUlRfU1BDX1NPRlQJKDE8PDQpCisjZGVmaW5lCVFDX1JUX1NQQ19IQVJECSgxPDw1KQorI2RlZmluZSBRQ19MSU1JVF9NQVNLIChRQ19JTk9fU09GVCB8IFFDX0lOT19IQVJEIHwgUUNfU1BDX1NPRlQgfCBRQ19TUENfSEFSRCB8IFwKKwkJICAgICAgIFFDX1JUX1NQQ19TT0ZUIHwgUUNfUlRfU1BDX0hBUkQpCisjZGVmaW5lCVFDX1NQQ19USU1FUgkoMTw8NikKKyNkZWZpbmUJUUNfSU5PX1RJTUVSCSgxPDw3KQorI2RlZmluZQlRQ19SVF9TUENfVElNRVIJKDE8PDgpCisjZGVmaW5lIFFDX1RJTUVSX01BU0sgKFFDX1NQQ19USU1FUiB8IFFDX0lOT19USU1FUiB8IFFDX1JUX1NQQ19USU1FUikKKyNkZWZpbmUJUUNfU1BDX1dBUk5TCSgxPDw5KQorI2RlZmluZQlRQ19JTk9fV0FSTlMJKDE8PDEwKQorI2RlZmluZQlRQ19SVF9TUENfV0FSTlMJKDE8PDExKQorI2RlZmluZSBRQ19XQVJOU19NQVNLIChRQ19TUENfV0FSTlMgfCBRQ19JTk9fV0FSTlMgfCBRQ19SVF9TUENfV0FSTlMpCisjZGVmaW5lCVFDX1NQQUNFCSgxPDwxMikKKyNkZWZpbmUJUUNfSU5PX0NPVU5UCSgxPDwxMykKKyNkZWZpbmUJUUNfUlRfU1BBQ0UJKDE8PDE0KQorI2RlZmluZSBRQ19BQ0NUX01BU0sgKFFDX1NQQUNFIHwgUUNfSU5PX0NPVU5UIHwgUUNfUlRfU1BBQ0UpCisKIC8qIE9wZXJhdGlvbnMgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UgKi8KIHN0cnVjdCBxdW90YWN0bF9vcHMgewogCWludCAoKnF1b3RhX29uKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBpbnQsIHN0cnVjdCBwYXRoICopOwpAQCAtMzI5LDggKzM3Miw4IEBACiAJaW50ICgqcXVvdGFfc3luYykoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CiAJaW50ICgqZ2V0X2luZm8pKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHN0cnVjdCBpZl9kcWluZm8gKik7CiAJaW50ICgqc2V0X2luZm8pKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHN0cnVjdCBpZl9kcWluZm8gKik7Ci0JaW50ICgqZ2V0X2RxYmxrKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtxaWQsIHN0cnVjdCBmc19kaXNrX3F1b3RhICopOwotCWludCAoKnNldF9kcWJsaykoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrcWlkLCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqKTsKKwlpbnQgKCpnZXRfZHFibGspKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga3FpZCwgc3RydWN0IHFjX2RxYmxrICopOworCWludCAoKnNldF9kcWJsaykoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrcWlkLCBzdHJ1Y3QgcWNfZHFibGsgKik7CiAJaW50ICgqZ2V0X3hzdGF0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19xdW90YV9zdGF0ICopOwogCWludCAoKnNldF94c3RhdGUpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBpbnQsIGludCk7CiAJaW50ICgqZ2V0X3hzdGF0ZXYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfcXVvdGFfc3RhdHYgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmggYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKaW5kZXggZjIzNTM4YS4uMjllMzQ1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaApAQCAtOTgsOSArOTgsOSBAQAogaW50IGRxdW90X2dldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKTsKIGludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgaWZfZHFpbmZvICppaSk7CiBpbnQgZHF1b3RfZ2V0X2RxYmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrcWlkIGlkLAotCQlzdHJ1Y3QgZnNfZGlza19xdW90YSAqZGkpOworCQlzdHJ1Y3QgcWNfZHFibGsgKmRpKTsKIGludCBkcXVvdF9zZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtxaWQgaWQsCi0JCXN0cnVjdCBmc19kaXNrX3F1b3RhICpkaSk7CisJCXN0cnVjdCBxY19kcWJsayAqZGkpOwogCiBpbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90byk7CiBpbnQgZHF1b3RfdHJhbnNmZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICppYXR0cik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oCmluZGV4IGMwYzJiY2UuLmQ5ZDdlN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC0zNyw2ICszNywxNiBAQAogCWF0b21pY190IHJlZmNvdW50OwogCiAJLyoKKwkgKiBDb3VudCBvZiBjaGlsZCBhbm9uX3ZtYXMgYW5kIFZNQXMgd2hpY2ggcG9pbnRzIHRvIHRoaXMgYW5vbl92bWEuCisJICoKKwkgKiBUaGlzIGNvdW50ZXIgaXMgdXNlZCBmb3IgbWFraW5nIGRlY2lzaW9uIGFib3V0IHJldXNpbmcgYW5vbl92bWEKKwkgKiBpbnN0ZWFkIG9mIGZvcmtpbmcgbmV3IG9uZS4gU2VlIGNvbW1lbnRzIGluIGZ1bmN0aW9uIGFub25fdm1hX2Nsb25lLgorCSAqLworCXVuc2lnbmVkIGRlZ3JlZTsKKworCXN0cnVjdCBhbm9uX3ZtYSAqcGFyZW50OwkvKiBQYXJlbnQgb2YgdGhpcyBhbm9uX3ZtYSAqLworCisJLyoKIAkgKiBOT1RFOiB0aGUgTFNCIG9mIHRoZSByYl9yb290LnJiX25vZGUgaXMgc2V0IGJ5CiAJICogbW1fdGFrZV9hbGxfbG9ja3MoKSBfYWZ0ZXJfIHRha2luZyB0aGUgYWJvdmUgbG9jay4gU28gdGhlCiAJICogcmJfcm9vdCBtdXN0IG9ubHkgYmUgcmVhZC93cml0dGVuIGFmdGVyIHRha2luZyB0aGUgYWJvdmUgbG9jawpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvYXQ4NnJmMjMwLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9hdDg2cmYyMzAuaAppbmRleCBiMmIxYWZiLi5jZDUxOWExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9hdDg2cmYyMzAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9hdDg2cmYyMzAuaApAQCAtMTIsMTAgKzEyLDYgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKICAqIFdyaXR0ZW4gYnk6CiAgKiBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiA8ZG1pdHJ5LmJhcnlzaGtvdkBzaWVtZW5zLmNvbT4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbDRmMDAyNDJ0MDMuaCBiL2luY2x1ZGUvbGludXgvc3BpL2w0ZjAwMjQydDAzLmgKaW5kZXggYmM4Njc3Yy4uZTY5ZTliNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvbDRmMDAyNDJ0MDMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9sNGYwMDI0MnQwMy5oCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwogCiAjaWZuZGVmIF9JTkNMVURFX0xJTlVYX1NQSV9MNEYwMDI0MlQwM19IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbG1zMjgzZ2YwNS5oIGIvaW5jbHVkZS9saW51eC9zcGkvbG1zMjgzZ2YwNS5oCmluZGV4IDU1NWQyNTQuLmZkZDFkMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL2xtczI4M2dmMDUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmgKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCiAKICNpZm5kZWYgX0lOQ0xVREVfTElOVVhfU1BJX0xNUzI4M0dGMDVfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL214cy1zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL214cy1zcGkuaAppbmRleCA0ODM1NDg2Li4zODFkMzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9teHMtc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvbXhzLXNwaS5oCkBAIC0xNSwxMCArMTUsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogICovCiAKICNpZm5kZWYgX19MSU5VWF9TUElfTVhTX1NQSV9IX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3B4YTJ4eF9zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL3B4YTJ4eF9zcGkuaAppbmRleCBkNWEzMTY1Li41ZWI1NmUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9weGEyeHhfc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvcHhhMnh4X3NwaS5oCkBAIC0xMCwxMCArMTAsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogI2lmbmRlZiBfX2xpbnV4X3B4YTJ4eF9zcGlfaAogI2RlZmluZSBfX2xpbnV4X3B4YTJ4eF9zcGlfaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvcnNwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvcnNwaS5oCmluZGV4IGU1NDZiMmMuLmE2OTMxODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3JzcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9yc3BpLmgKQEAgLTExLDExICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgogICovCiAKICNpZm5kZWYgX19MSU5VWF9TUElfUkVORVNBU19TUElfSF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9zaF9oc3BpLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9zaF9oc3BpLmgKaW5kZXggYTExMjFmOC4uYWEwZDQ0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc2hfaHNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NoX2hzcGkuaApAQCAtOSwxMCArOSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpZm5kZWYgU0hfSFNQSV9ICiAjZGVmaW5lIFNIX0hTUElfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvc2hfbXNpb2YuaCBiL2luY2x1ZGUvbGludXgvc3BpL3NoX21zaW9mLmgKaW5kZXggODhhMTRkOC4uYjA4N2E4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc2hfbXNpb2YuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9zaF9tc2lvZi5oCkBAIC03LDYgKzcsOCBAQAogCXUxNiBudW1fY2hpcHNlbGVjdDsKIAl1bnNpZ25lZCBpbnQgZG1hX3R4X2lkOwogCXVuc2lnbmVkIGludCBkbWFfcnhfaWQ7CisJdTMyIGR0ZGw7CisJdTMyIHN5bmNkbDsKIH07CiAKICNlbmRpZiAvKiBfX1NQSV9TSF9NU0lPRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKaW5kZXggYTZlZjJhOC4uNmUyNjY0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKQEAgLTEwLDEwICsxMCw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpZm5kZWYgX19MSU5VWF9TUElfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvdGxlNjJ4MC5oIGIvaW5jbHVkZS9saW51eC9zcGkvdGxlNjJ4MC5oCmluZGV4IDYwYjU5MTguLjQxNGM2ZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3RsZTYyeDAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS90bGU2MngwLmgKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCiAKIHN0cnVjdCB0bGU2MngwX3BkYXRhIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3RzYzIwMDUuaCBiL2luY2x1ZGUvbGludXgvc3BpL3RzYzIwMDUuaAppbmRleCA4ZjcyMWU0Li41NjNiM2IxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS90c2MyMDA1LmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvdHNjMjAwNS5oCkBAIC0xMiwxMSArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKgogICovCiAKICNpZm5kZWYgX0xJTlVYX1NQSV9UU0MyMDA1X0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKaW5kZXggYzYxMWEwMi4uZmM1MmUzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aGVybWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgVEhFUk1BTF9DU1RBVEVfSU5WQUxJRCAtMVVMCiAKIC8qIE5vIHVwcGVyL2xvd2VyIGxpbWl0IHJlcXVpcmVtZW50ICovCi0jZGVmaW5lIFRIRVJNQUxfTk9fTElNSVQJVEhFUk1BTF9DU1RBVEVfSU5WQUxJRAorI2RlZmluZSBUSEVSTUFMX05PX0xJTUlUCSgodTMyKX4wKQogCiAvKiBVbml0IGNvbnZlcnNpb24gbWFjcm9zICovCiAjZGVmaW5lIEtFTFZJTl9UT19DRUxTSVVTKHQpCShsb25nKSgoKGxvbmcpdC0yNzMyID49IDApID8JXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lLmggYi9pbmNsdWRlL2xpbnV4L3RpbWUuaAppbmRleCAyMDNjMmFkLi5iZWViZTNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWUuaApAQCAtMTEwLDYgKzExMCwxOSBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgdGltZXZhbF92YWxpZChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYpCit7CisJLyogRGF0ZXMgYmVmb3JlIDE5NzAgYXJlIGJvZ3VzICovCisJaWYgKHR2LT50dl9zZWMgPCAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDYW4ndCBoYXZlIG1vcmUgbWljcm9zZWNvbmRzIHRoZW4gYSBzZWNvbmQgKi8KKwlpZiAodHYtPnR2X3VzZWMgPCAwIHx8IHR2LT50dl91c2VjID49IFVTRUNfUEVSX1NFQykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfdHJ1bmMoc3RydWN0IHRpbWVzcGVjIHQsIHVuc2lnbmVkIGdyYW4pOwogCiAjZGVmaW5lIENVUlJFTlRfVElNRQkJKGN1cnJlbnRfa2VybmVsX3RpbWUoKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmggYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCmluZGV4IGEyMTliZTkuLjAwMDQ4MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaApAQCAtMTc3LDcgKzE3Nyw2IEBACiAJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCB3cml0ZXBhZ2VfdCB3cml0ZXBhZ2UsCiAJCSAgICAgIHZvaWQgKmRhdGEpOwogaW50IGRvX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKLXZvaWQgc2V0X3BhZ2VfZGlydHlfYmFsYW5jZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB2b2lkIHdyaXRlYmFja19zZXRfcmF0ZWxpbWl0KHZvaWQpOwogdm9pZCB0YWdfcGFnZXNfZm9yX3dyaXRlYmFjayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCSAgICAgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmggYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAppbmRleCBhZjEwYzJjLi42YzkyNDE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaApAQCAtMjcsMTAgKzI3LDE4IEBACiAgKiBAbWF4YXR0cjogbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlcyBzdXBwb3J0ZWQKICAqIEBuZXRuc29rOiBzZXQgdG8gdHJ1ZSBpZiB0aGUgZmFtaWx5IGNhbiBoYW5kbGUgbmV0d29yawogICoJbmFtZXNwYWNlcyBhbmQgc2hvdWxkIGJlIHByZXNlbnRlZCBpbiBhbGwgb2YgdGhlbQorICogQHBhcmFsbGVsX29wczogb3BlcmF0aW9ucyBjYW4gYmUgY2FsbGVkIGluIHBhcmFsbGVsIGFuZCBhcmVuJ3QKKyAqCXN5bmNocm9uaXplZCBieSB0aGUgY29yZSBnZW5ldGxpbmsgY29kZQogICogQHByZV9kb2l0OiBjYWxsZWQgYmVmb3JlIGFuIG9wZXJhdGlvbidzIGRvaXQgY2FsbGJhY2ssIGl0IG1heQogICoJZG8gYWRkaXRpb25hbCwgY29tbW9uLCBmaWx0ZXJpbmcgYW5kIHJldHVybiBhbiBlcnJvcgogICogQHBvc3RfZG9pdDogY2FsbGVkIGFmdGVyIGFuIG9wZXJhdGlvbidzIGRvaXQgY2FsbGJhY2ssIGl0IG1heQogICoJdW5kbyBvcGVyYXRpb25zIGRvbmUgYnkgcHJlX2RvaXQsIGZvciBleGFtcGxlIHJlbGVhc2UgbG9ja3MKKyAqIEBtY2FzdF9iaW5kOiBhIHNvY2tldCBib3VuZCB0byB0aGUgZ2l2ZW4gbXVsdGljYXN0IGdyb3VwICh3aGljaAorICoJaXMgZ2l2ZW4gYXMgdGhlIG9mZnNldCBpbnRvIHRoZSBncm91cHMgYXJyYXkpCisgKiBAbWNhc3RfdW5iaW5kOiBhIHNvY2tldCB3YXMgdW5ib3VuZCBmcm9tIHRoZSBnaXZlbiBtdWx0aWNhc3QgZ3JvdXAuCisgKglOb3RlIHRoYXQgdW5iaW5kKCkgd2lsbCBub3QgYmUgY2FsbGVkIHN5bW1ldHJpY2FsbHkgaWYgdGhlCisgKglnZW5lcmljIG5ldGxpbmsgZmFtaWx5IGlzIHJlbW92ZWQgd2hpbGUgdGhlcmUgYXJlIHN0aWxsIG9wZW4KKyAqCXNvY2tldHMuCiAgKiBAYXR0cmJ1ZjogYnVmZmVyIHRvIHN0b3JlIHBhcnNlZCBhdHRyaWJ1dGVzCiAgKiBAZmFtaWx5X2xpc3Q6IGZhbWlseSBsaXN0CiAgKiBAbWNncnBzOiBtdWx0aWNhc3QgZ3JvdXBzIHVzZWQgYnkgdGhpcyBmYW1pbHkgKHByaXZhdGUpCkBAIC01Myw2ICs2MSw4IEBACiAJdm9pZAkJCSgqcG9zdF9kb2l0KShjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgKm9wcywKIAkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOworCWludAkJCSgqbWNhc3RfYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOworCXZvaWQJCQkoKm1jYXN0X3VuYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOwogCXN0cnVjdCBubGF0dHIgKioJYXR0cmJ1ZjsJLyogcHJpdmF0ZSAqLwogCWNvbnN0IHN0cnVjdCBnZW5sX29wcyAqCW9wczsJCS8qIHByaXZhdGUgKi8KIAljb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgKm1jZ3JwczsgLyogcHJpdmF0ZSAqLwpAQCAtMzk1LDExICs0MDUsMTEgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZ2VubF9oYXNfbGlzdGVuZXJzKHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LAotCQkJCSAgICAgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZ3JvdXApCisJCQkJICAgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBncm91cCkKIHsKIAlpZiAoV0FSTl9PTl9PTkNFKGdyb3VwID49IGZhbWlseS0+bl9tY2dycHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlncm91cCA9IGZhbWlseS0+bWNncnBfb2Zmc2V0ICsgZ3JvdXA7Ci0JcmV0dXJuIG5ldGxpbmtfaGFzX2xpc3RlbmVycyhzaywgZ3JvdXApOworCXJldHVybiBuZXRsaW5rX2hhc19saXN0ZW5lcnMobmV0LT5nZW5sX3NvY2ssIGdyb3VwKTsKIH0KICNlbmRpZgkvKiBfX05FVF9HRU5FUklDX05FVExJTktfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggMGJiNjIwNy4uZjdjYmQ3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC0zOSwxMSArMzksMTIgQEAKIAlzdHJ1Y3QgaXBfb3B0aW9ucwlvcHQ7CQkvKiBDb21waWxlZCBJUCBvcHRpb25zCQkqLwogCXVuc2lnbmVkIGNoYXIJCWZsYWdzOwogCi0jZGVmaW5lIElQU0tCX0ZPUldBUkRFRAkJMQotI2RlZmluZSBJUFNLQl9YRlJNX1RVTk5FTF9TSVpFCTIKLSNkZWZpbmUgSVBTS0JfWEZSTV9UUkFOU0ZPUk1FRAk0Ci0jZGVmaW5lIElQU0tCX0ZSQUdfQ09NUExFVEUJOAotI2RlZmluZSBJUFNLQl9SRVJPVVRFRAkJMTYKKyNkZWZpbmUgSVBTS0JfRk9SV0FSREVECQlCSVQoMCkKKyNkZWZpbmUgSVBTS0JfWEZSTV9UVU5ORUxfU0laRQlCSVQoMSkKKyNkZWZpbmUgSVBTS0JfWEZSTV9UUkFOU0ZPUk1FRAlCSVQoMikKKyNkZWZpbmUgSVBTS0JfRlJBR19DT01QTEVURQlCSVQoMykKKyNkZWZpbmUgSVBTS0JfUkVST1VURUQJCUJJVCg0KQorI2RlZmluZSBJUFNLQl9ET1JFRElSRUNUCUJJVCg1KQogCiAJdTE2CQkJZnJhZ19tYXhfc2l6ZTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA1OGQ3MTlkLi4yOWM3YmU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTEyNzAsOCArMTI3MCw3IEBACiAgKgogICogQElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjogVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYnkgdGhlCiAgKglkcml2ZXIgdG8gaW5kaWNhdGUgdGhhdCBpdCByZXF1aXJlcyBJViBnZW5lcmF0aW9uIGZvciB0aGlzCi0gKglwYXJ0aWN1bGFyIGtleS4gU2V0dGluZyB0aGlzIGZsYWcgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IFNLQnMKLSAqCXdpbGwgaGF2ZSBzdWZmaWNpZW50IHRhaWxyb29tIGZvciBJQ1Ygb3IgTUlDLgorICoJcGFydGljdWxhciBrZXkuCiAgKiBASUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM6IFRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IGJ5CiAgKgl0aGUgZHJpdmVyIGZvciBhIFRLSVAga2V5IGlmIGl0IHJlcXVpcmVzIE1pY2hhZWwgTUlDCiAgKglnZW5lcmF0aW9uIGluIHNvZnR3YXJlLgpAQCAtMTI4Myw5ICsxMjgyLDcgQEAKICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFOiBUaGlzIGZsYWcgc2hvdWxkIGJlIHNldCBieSB0aGUgZHJpdmVyCiAgKglpZiBzcGFjZSBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoZSBJViwgYnV0IHRoZSBJVgogICoJaXRzZWxmIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkLiBEbyBub3Qgc2V0IHRvZ2V0aGVyIHdpdGgKLSAqCUBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYgb24gdGhlIHNhbWUga2V5LiBTZXR0aW5nIHRoaXMgZmxhZyBkb2VzCi0gKglub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IFNLQnMgd2lsbCBoYXZlIHN1ZmZpY2llbnQgdGFpbHJvb20gZm9yIElDViBvcgotICoJTUlDLgorICoJQElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JViBvbiB0aGUgc2FtZSBrZXkuCiAgKiBASUVFRTgwMjExX0tFWV9GTEFHX1JYX01HTVQ6IFRoaXMga2V5IHdpbGwgYmUgdXNlZCB0byBkZWNyeXB0IHJlY2VpdmVkCiAgKgltYW5hZ2VtZW50IGZyYW1lcy4gVGhlIGZsYWcgY2FuIGhlbHAgZHJpdmVycyB0aGF0IGhhdmUgYSBoYXJkd2FyZQogICoJY3J5cHRvIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lc24ndCBkZWFsIHdpdGggbWFuYWdlbWVudCBmcmFtZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKaW5kZXggZWIwNzBiMy4uNzZmNzA4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKQEAgLTE5MCw3ICsxOTAsNiBAQAogCiAKIHN0cnVjdCBuZWlnaF90YWJsZSB7Ci0Jc3RydWN0IG5laWdoX3RhYmxlCSpuZXh0OwogCWludAkJCWZhbWlseTsKIAlpbnQJCQllbnRyeV9zaXplOwogCWludAkJCWtleV9sZW47CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC92eGxhbi5oIGIvaW5jbHVkZS9uZXQvdnhsYW4uaAppbmRleCA1N2NjY2QwLi45MDM0NjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC92eGxhbi5oCisrKyBiL2luY2x1ZGUvbmV0L3Z4bGFuLmgKQEAgLTEsNiArMSw5IEBACiAjaWZuZGVmIF9fTkVUX1ZYTEFOX0gKICNkZWZpbmUgX19ORVRfVlhMQU5fSCAxCiAKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CkBAIC01MSwxNiArNTQsMzMgQEAKIAkJICAgX19iZTMyIHNyYywgX19iZTMyIGRzdCwgX191OCB0b3MsIF9fdTggdHRsLCBfX2JlMTYgZGYsCiAJCSAgIF9fYmUxNiBzcmNfcG9ydCwgX19iZTE2IGRzdF9wb3J0LCBfX2JlMzIgdm5pLCBib29sIHhuZXQpOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgdnhsYW5fZ3NvX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIG5ldGRldl9mZWF0dXJlc190IHZ4bGFuX2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogewotCWlmICgoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIFNLQl9HU09fVURQX1RVTk5FTCkgJiYKKwl1OCBsNF9oZHIgPSAwOworCisJaWYgKCFza2ItPmVuY2Fwc3VsYXRpb24pCisJCXJldHVybiBmZWF0dXJlczsKKworCXN3aXRjaCAodmxhbl9nZXRfcHJvdG9jb2woc2tiKSkgeworCWNhc2UgaHRvbnMoRVRIX1BfSVApOgorCQlsNF9oZHIgPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CisJCWJyZWFrOworCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CisJCWw0X2hkciA9IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBmZWF0dXJlczs7CisJfQorCisJaWYgKChsNF9oZHIgPT0gSVBQUk9UT19VRFApICYmCiAJICAgIChza2ItPmlubmVyX3Byb3RvY29sX3R5cGUgIT0gRU5DQVBfVFlQRV9FVEhFUiB8fAogCSAgICAgc2tiLT5pbm5lcl9wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9URUIpIHx8CiAJICAgICAoc2tiX2lubmVyX21hY19oZWFkZXIoc2tiKSAtIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgIT0KIAkgICAgICBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBzaXplb2Yoc3RydWN0IHZ4bGFuaGRyKSkpKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBmZWF0dXJlcyAmIH4oTkVUSUZfRl9BTExfQ1NVTSB8IE5FVElGX0ZfR1NPX01BU0spOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGZlYXR1cmVzOwogfQogCiAvKiBJUCBoZWFkZXIgKyBVRFAgKyBWWExBTiArIEV0aGVybmV0IGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggMWU3Zjc0YS4uYjQyOWI3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC04NTcsNyArODU3LDcgQEAKIH0KIAogLyoqCi0gKiBwYXJhbXNfY2hhbm5lbHMgLSBHZXQgdGhlIHNhbXBsZSByYXRlIGZyb20gdGhlIGh3IHBhcmFtcworICogcGFyYW1zX3JhdGUgLSBHZXQgdGhlIHNhbXBsZSByYXRlIGZyb20gdGhlIGh3IHBhcmFtcwogICogQHA6IGh3IHBhcmFtcwogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwYXJhbXNfcmF0ZShjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnApCkBAIC04NjYsNyArODY2LDcgQEAKIH0KIAogLyoqCi0gKiBwYXJhbXNfY2hhbm5lbHMgLSBHZXQgdGhlIHBlcmlvZCBzaXplIChpbiBmcmFtZXMpIGZyb20gdGhlIGh3IHBhcmFtcworICogcGFyYW1zX3BlcmlvZF9zaXplIC0gR2V0IHRoZSBwZXJpb2Qgc2l6ZSAoaW4gZnJhbWVzKSBmcm9tIHRoZSBodyBwYXJhbXMKICAqIEBwOiBodyBwYXJhbXMKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGFyYW1zX3BlcmlvZF9zaXplKGNvbnN0IHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcCkKQEAgLTg3NSw3ICs4NzUsNyBAQAogfQogCiAvKioKLSAqIHBhcmFtc19jaGFubmVscyAtIEdldCB0aGUgbnVtYmVyIG9mIHBlcmlvZHMgZnJvbSB0aGUgaHcgcGFyYW1zCisgKiBwYXJhbXNfcGVyaW9kcyAtIEdldCB0aGUgbnVtYmVyIG9mIHBlcmlvZHMgZnJvbSB0aGUgaHcgcGFyYW1zCiAgKiBAcDogaHcgcGFyYW1zCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBhcmFtc19wZXJpb2RzKGNvbnN0IHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcCkKQEAgLTg4NCw3ICs4ODQsNyBAQAogfQogCiAvKioKLSAqIHBhcmFtc19jaGFubmVscyAtIEdldCB0aGUgYnVmZmVyIHNpemUgKGluIGZyYW1lcykgZnJvbSB0aGUgaHcgcGFyYW1zCisgKiBwYXJhbXNfYnVmZmVyX3NpemUgLSBHZXQgdGhlIGJ1ZmZlciBzaXplIChpbiBmcmFtZXMpIGZyb20gdGhlIGh3IHBhcmFtcwogICogQHA6IGh3IHBhcmFtcwogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwYXJhbXNfYnVmZmVyX3NpemUoY29uc3Qgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwKQpAQCAtODkzLDcgKzg5Myw3IEBACiB9CiAKIC8qKgotICogcGFyYW1zX2NoYW5uZWxzIC0gR2V0IHRoZSBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIGZyb20gdGhlIGh3IHBhcmFtcworICogcGFyYW1zX2J1ZmZlcl9ieXRlcyAtIEdldCB0aGUgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBmcm9tIHRoZSBodyBwYXJhbXMKICAqIEBwOiBodyBwYXJhbXMKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGFyYW1zX2J1ZmZlcl9ieXRlcyhjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnApCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYWNrZW5kLmggYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYWNrZW5kLmgKaW5kZXggNDMwY2ZhZi4uZGI4MWM2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFja2VuZC5oCisrKyBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2JhY2tlbmQuaApAQCAtMTM1LDcgKzEzNSw2IEBACiBpbnQJc2VfZGV2X3NldF9lbXVsYXRlX3Jlc3RfcmVvcmQoc3RydWN0IHNlX2RldmljZSAqZGV2LCBpbnQpOwogaW50CXNlX2Rldl9zZXRfcXVldWVfZGVwdGgoc3RydWN0IHNlX2RldmljZSAqLCB1MzIpOwogaW50CXNlX2Rldl9zZXRfbWF4X3NlY3RvcnMoc3RydWN0IHNlX2RldmljZSAqLCB1MzIpOwotaW50CXNlX2Rldl9zZXRfZmFicmljX21heF9zZWN0b3JzKHN0cnVjdCBzZV9kZXZpY2UgKiwgdTMyKTsKIGludAlzZV9kZXZfc2V0X29wdGltYWxfc2VjdG9ycyhzdHJ1Y3Qgc2VfZGV2aWNlICosIHUzMik7CiBpbnQJc2VfZGV2X3NldF9ibG9ja19zaXplKHN0cnVjdCBzZV9kZXZpY2UgKiwgdTMyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFja2VuZF9jb25maWdmcy5oIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFja2VuZF9jb25maWdmcy5oCmluZGV4IDMyNDdkNzUuLjE4NmY3YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2JhY2tlbmRfY29uZmlnZnMuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYWNrZW5kX2NvbmZpZ2ZzLmgKQEAgLTk4LDggKzk4LDYgQEAKIAlUQl9ERVZfQVRUUihfYmFja2VuZCwgYmxvY2tfc2l6ZSwgU19JUlVHTyB8IFNfSVdVU1IpOwkJXAogCURFRl9UQl9ERVZfQVRUUklCX1JPKF9iYWNrZW5kLCBod19tYXhfc2VjdG9ycyk7CQkJXAogCVRCX0RFVl9BVFRSX1JPKF9iYWNrZW5kLCBod19tYXhfc2VjdG9ycyk7CQkJXAotCURFRl9UQl9ERVZfQVRUUklCKF9iYWNrZW5kLCBmYWJyaWNfbWF4X3NlY3RvcnMpOwkJXAotCVRCX0RFVl9BVFRSKF9iYWNrZW5kLCBmYWJyaWNfbWF4X3NlY3RvcnMsIFNfSVJVR08gfCBTX0lXVVNSKTsJXAogCURFRl9UQl9ERVZfQVRUUklCKF9iYWNrZW5kLCBvcHRpbWFsX3NlY3RvcnMpOwkJCVwKIAlUQl9ERVZfQVRUUihfYmFja2VuZCwgb3B0aW1hbF9zZWN0b3JzLCBTX0lSVUdPIHwgU19JV1VTUik7CVwKIAlERUZfVEJfREVWX0FUVFJJQl9STyhfYmFja2VuZCwgaHdfcXVldWVfZGVwdGgpOwkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaCBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaAppbmRleCAzOTdmYjYzLi40YTg3OTVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmgKKysrIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oCkBAIC03Nyw4ICs3Nyw2IEBACiAjZGVmaW5lIERBX1VOTUFQX0dSQU5VTEFSSVRZX0FMSUdOTUVOVF9ERUZBVUxUCTAKIC8qIERlZmF1bHQgbWF4X3dyaXRlX3NhbWVfbGVuLCBkaXNhYmxlZCBieSBkZWZhdWx0ICovCiAjZGVmaW5lIERBX01BWF9XUklURV9TQU1FX0xFTgkJCTAKLS8qIERlZmF1bHQgbWF4IHRyYW5zZmVyIGxlbmd0aCAqLwotI2RlZmluZSBEQV9GQUJSSUNfTUFYX1NFQ1RPUlMJCQk4MTkyCiAvKiBVc2UgYSBtb2RlbCBhbGlhcyBiYXNlZCBvbiB0aGUgY29uZmlnZnMgYmFja2VuZCBkZXZpY2UgbmFtZSAqLwogI2RlZmluZSBEQV9FTVVMQVRFX01PREVMX0FMSUFTCQkJMAogLyogRW11bGF0aW9uIGZvciBEaXJlY3QgUGFnZSBPdXQgKi8KQEAgLTY5NCw3ICs2OTIsNiBAQAogCXUzMgkJaHdfYmxvY2tfc2l6ZTsKIAl1MzIJCWJsb2NrX3NpemU7CiAJdTMyCQlod19tYXhfc2VjdG9yczsKLQl1MzIJCWZhYnJpY19tYXhfc2VjdG9yczsKIAl1MzIJCW9wdGltYWxfc2VjdG9yczsKIAl1MzIJCWh3X3F1ZXVlX2RlcHRoOwogCXUzMgkJcXVldWVfZGVwdGg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oCmluZGV4IDZlZGYxZjIuLjg2YjM5OWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oCkBAIC0xNDYsNiArMTQ2LDE0IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0tWTV9JUlFGRCkKIAorI2lmZGVmIGt2bV9pcnFjaGlwcworI2RlZmluZSBrdm1fYWNrX2lycV9zdHJpbmcgImlycWNoaXAgJXMgcGluICV1IgorI2RlZmluZSBrdm1fYWNrX2lycV9wYXJtICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPmlycWNoaXAsIGt2bV9pcnFjaGlwcyksIF9fZW50cnktPnBpbgorI2Vsc2UKKyNkZWZpbmUga3ZtX2Fja19pcnFfc3RyaW5nICJpcnFjaGlwICVkIHBpbiAldSIKKyNkZWZpbmUga3ZtX2Fja19pcnFfcGFybSAgX19lbnRyeS0+aXJxY2hpcCwgX19lbnRyeS0+cGluCisjZW5kaWYKKwogVFJBQ0VfRVZFTlQoa3ZtX2Fja19pcnEsCiAJVFBfUFJPVE8odW5zaWduZWQgaW50IGlycWNoaXAsIHVuc2lnbmVkIGludCBwaW4pLAogCVRQX0FSR1MoaXJxY2hpcCwgcGluKSwKQEAgLTE2MCwxMyArMTY4LDcgQEAKIAkJX19lbnRyeS0+cGluCQk9IHBpbjsKIAkpLAogCi0jaWZkZWYga3ZtX2lycWNoaXBzCi0JVFBfcHJpbnRrKCJpcnFjaGlwICVzIHBpbiAldSIsCi0JCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT5pcnFjaGlwLCBrdm1faXJxY2hpcHMpLAotCQkgX19lbnRyeS0+cGluKQotI2Vsc2UKLQlUUF9wcmludGsoImlycWNoaXAgJWQgcGluICV1IiwgX19lbnRyeS0+aXJxY2hpcCwgX19lbnRyeS0+cGluKQotI2VuZGlmCisJVFBfcHJpbnRrKGt2bV9hY2tfaXJxX3N0cmluZywga3ZtX2Fja19pcnFfcGFybSkKICk7CiAKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19IQVZFX0tWTV9JUlFGRCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggNzU0M2IzZS4uZTA2M2VmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmgKQEAgLTUsNyArNSw3IEBACiAKIC8qCiAgKiBGTU9ERV9FWEVDIGlzIDB4MjAKLSAqIEZNT0RFX05PTk9USUZZIGlzIDB4MTAwMDAwMAorICogRk1PREVfTk9OT1RJRlkgaXMgMHg0MDAwMDAwCiAgKiBUaGVzZSBjYW5ub3QgYmUgdXNlZCBieSB1c2Vyc3BhY2UgT18qIHVudGlsIGludGVybmFsIGFuZCBleHRlcm5hbCBvcGVuCiAgKiBmbGFncyBhcmUgc3BsaXQuCiAgKiAtRXJpYyBQYXJpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2Nhbi9uZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvY2FuL25ldGxpbmsuaAppbmRleCAzZTQzMjNhLi45NGZmZTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvY2FuL25ldGxpbmsuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvY2FuL25ldGxpbmsuaApAQCAtOTgsNiArOTgsNyBAQAogI2RlZmluZSBDQU5fQ1RSTE1PREVfQkVSUl9SRVBPUlRJTkcJMHgxMAkvKiBCdXMtZXJyb3IgcmVwb3J0aW5nICovCiAjZGVmaW5lIENBTl9DVFJMTU9ERV9GRAkJCTB4MjAJLyogQ0FOIEZEIG1vZGUgKi8KICNkZWZpbmUgQ0FOX0NUUkxNT0RFX1BSRVNVTUVfQUNLCTB4NDAJLyogSWdub3JlIG1pc3NpbmcgQ0FOIEFDS3MgKi8KKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX0ZEX05PTl9JU08JCTB4ODAJLyogQ0FOIEZEIGluIG5vbi1JU08gbW9kZSAqLwogCiAvKgogICogQ0FOIGRldmljZSBzdGF0aXN0aWNzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaW42LmggYi9pbmNsdWRlL3VhcGkvbGludXgvaW42LmgKaW5kZXggNzRhMmExNy4uNzliMTJiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2luNi5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pbjYuaApAQCAtMTQ5LDcgKzE0OSw3IEBACiAvKgogICoJSVBWNiBzb2NrZXQgb3B0aW9ucwogICovCi0KKyNpZiBfX1VBUElfREVGX0lQVjZfT1BUSU9OUwogI2RlZmluZSBJUFY2X0FERFJGT1JNCQkxCiAjZGVmaW5lIElQVjZfMjI5MlBLVElORk8JMgogI2RlZmluZSBJUFY2XzIyOTJIT1BPUFRTCTMKQEAgLTE5Niw2ICsxOTYsNyBAQAogCiAjZGVmaW5lIElQVjZfSVBTRUNfUE9MSUNZCTM0CiAjZGVmaW5lIElQVjZfWEZSTV9QT0xJQ1kJMzUKKyNlbmRpZgogCiAvKgogICogTXVsdGljYXN0OgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2tmZF9pb2N0bC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2tmZF9pb2N0bC5oCmluZGV4IDdhY2VmNDEuLmFmOTRmMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rZmRfaW9jdGwuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgva2ZkX2lvY3RsLmgKQEAgLTEyOCwyNyArMTI4LDM0IEBACiAJdWludDMyX3QgcGFkOwogfTsKIAotI2RlZmluZSBLRkRfSU9DX01BR0lDICdLJworI2RlZmluZSBBTURLRkRfSU9DVExfQkFTRSAnSycKKyNkZWZpbmUgQU1ES0ZEX0lPKG5yKQkJCV9JTyhBTURLRkRfSU9DVExfQkFTRSwgbnIpCisjZGVmaW5lIEFNREtGRF9JT1IobnIsIHR5cGUpCQlfSU9SKEFNREtGRF9JT0NUTF9CQVNFLCBuciwgdHlwZSkKKyNkZWZpbmUgQU1ES0ZEX0lPVyhuciwgdHlwZSkJCV9JT1coQU1ES0ZEX0lPQ1RMX0JBU0UsIG5yLCB0eXBlKQorI2RlZmluZSBBTURLRkRfSU9XUihuciwgdHlwZSkJCV9JT1dSKEFNREtGRF9JT0NUTF9CQVNFLCBuciwgdHlwZSkKIAotI2RlZmluZSBLRkRfSU9DX0dFVF9WRVJTSU9OIFwKLQkJX0lPUihLRkRfSU9DX01BR0lDLCAxLCBzdHJ1Y3Qga2ZkX2lvY3RsX2dldF92ZXJzaW9uX2FyZ3MpCisjZGVmaW5lIEFNREtGRF9JT0NfR0VUX1ZFUlNJT04JCQlcCisJCUFNREtGRF9JT1IoMHgwMSwgc3RydWN0IGtmZF9pb2N0bF9nZXRfdmVyc2lvbl9hcmdzKQogCi0jZGVmaW5lIEtGRF9JT0NfQ1JFQVRFX1FVRVVFIFwKLQkJX0lPV1IoS0ZEX0lPQ19NQUdJQywgMiwgc3RydWN0IGtmZF9pb2N0bF9jcmVhdGVfcXVldWVfYXJncykKKyNkZWZpbmUgQU1ES0ZEX0lPQ19DUkVBVEVfUVVFVUUJCQlcCisJCUFNREtGRF9JT1dSKDB4MDIsIHN0cnVjdCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlX2FyZ3MpCiAKLSNkZWZpbmUgS0ZEX0lPQ19ERVNUUk9ZX1FVRVVFIFwKLQlfSU9XUihLRkRfSU9DX01BR0lDLCAzLCBzdHJ1Y3Qga2ZkX2lvY3RsX2Rlc3Ryb3lfcXVldWVfYXJncykKKyNkZWZpbmUgQU1ES0ZEX0lPQ19ERVNUUk9ZX1FVRVVFCQlcCisJCUFNREtGRF9JT1dSKDB4MDMsIHN0cnVjdCBrZmRfaW9jdGxfZGVzdHJveV9xdWV1ZV9hcmdzKQogCi0jZGVmaW5lIEtGRF9JT0NfU0VUX01FTU9SWV9QT0xJQ1kgXAotCV9JT1coS0ZEX0lPQ19NQUdJQywgNCwgc3RydWN0IGtmZF9pb2N0bF9zZXRfbWVtb3J5X3BvbGljeV9hcmdzKQorI2RlZmluZSBBTURLRkRfSU9DX1NFVF9NRU1PUllfUE9MSUNZCQlcCisJCUFNREtGRF9JT1coMHgwNCwgc3RydWN0IGtmZF9pb2N0bF9zZXRfbWVtb3J5X3BvbGljeV9hcmdzKQogCi0jZGVmaW5lIEtGRF9JT0NfR0VUX0NMT0NLX0NPVU5URVJTIFwKLQlfSU9XUihLRkRfSU9DX01BR0lDLCA1LCBzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVyc19hcmdzKQorI2RlZmluZSBBTURLRkRfSU9DX0dFVF9DTE9DS19DT1VOVEVSUwkJXAorCQlBTURLRkRfSU9XUigweDA1LCBzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVyc19hcmdzKQogCi0jZGVmaW5lIEtGRF9JT0NfR0VUX1BST0NFU1NfQVBFUlRVUkVTIFwKLQlfSU9SKEtGRF9JT0NfTUFHSUMsIDYsIHN0cnVjdCBrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVzX2FyZ3MpCisjZGVmaW5lIEFNREtGRF9JT0NfR0VUX1BST0NFU1NfQVBFUlRVUkVTCVwKKwkJQU1ES0ZEX0lPUigweDA2LCBzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlc19hcmdzKQogCi0jZGVmaW5lIEtGRF9JT0NfVVBEQVRFX1FVRVVFIFwKLQlfSU9XKEtGRF9JT0NfTUFHSUMsIDcsIHN0cnVjdCBrZmRfaW9jdGxfdXBkYXRlX3F1ZXVlX2FyZ3MpCisjZGVmaW5lIEFNREtGRF9JT0NfVVBEQVRFX1FVRVVFCQkJXAorCQlBTURLRkRfSU9XKDB4MDcsIHN0cnVjdCBrZmRfaW9jdGxfdXBkYXRlX3F1ZXVlX2FyZ3MpCisKKyNkZWZpbmUgQU1ES0ZEX0NPTU1BTkRfU1RBUlQJCTB4MDEKKyNkZWZpbmUgQU1ES0ZEX0NPTU1BTkRfRU5ECQkweDA4CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmggYi9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaAppbmRleCBjMTQwNjIwLi5lMjg4MDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBfX1VBUElfREVGX1NPQ0tBRERSX0lONgkJMAogI2RlZmluZSBfX1VBUElfREVGX0lQVjZfTVJFUQkJMAogI2RlZmluZSBfX1VBUElfREVGX0lQUFJPVE9fVjYJCTAKKyNkZWZpbmUgX19VQVBJX0RFRl9JUFY2X09QVElPTlMJCTAKIAogI2Vsc2UKIApAQCAtODIsNiArODMsNyBAQAogI2RlZmluZSBfX1VBUElfREVGX1NPQ0tBRERSX0lONgkJMQogI2RlZmluZSBfX1VBUElfREVGX0lQVjZfTVJFUQkJMQogI2RlZmluZSBfX1VBUElfREVGX0lQUFJPVE9fVjYJCTEKKyNkZWZpbmUgX19VQVBJX0RFRl9JUFY2X09QVElPTlMJCTEKIAogI2VuZGlmIC8qIF9ORVRJTkVUX0lOX0ggKi8KIApAQCAtMTAzLDYgKzEwNSw3IEBACiAjZGVmaW5lIF9fVUFQSV9ERUZfU09DS0FERFJfSU42CQkxCiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBWNl9NUkVRCQkxCiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBQUk9UT19WNgkJMQorI2RlZmluZSBfX1VBUElfREVGX0lQVjZfT1BUSU9OUwkJMQogCiAvKiBEZWZpbml0aW9ucyBmb3IgeGF0dHIuaCAqLwogI2RlZmluZSBfX1VBUElfREVGX1hBVFRSCQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaCBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCmluZGV4IDNhNmRjYWEuLmY3MTRlODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCkBAIC0xNzQsNiArMTc0LDEwIEBACiAJT1ZTX1BBQ0tFVF9BVFRSX1VTRVJEQVRBLCAgICAvKiBPVlNfQUNUSU9OX0FUVFJfVVNFUlNQQUNFIGFyZy4gKi8KIAlPVlNfUEFDS0VUX0FUVFJfRUdSRVNTX1RVTl9LRVksICAvKiBOZXN0ZWQgT1ZTX1RVTk5FTF9LRVlfQVRUUl8qCiAJCQkJCSAgICBhdHRyaWJ1dGVzLiAqLworCU9WU19QQUNLRVRfQVRUUl9VTlVTRUQxLAorCU9WU19QQUNLRVRfQVRUUl9VTlVTRUQyLAorCU9WU19QQUNLRVRfQVRUUl9QUk9CRSwgICAgICAvKiBQYWNrZXQgb3BlcmF0aW9uIGlzIGEgZmVhdHVyZSBwcm9iZSwKKwkJCQkgICAgICAgZXJyb3IgbG9nZ2luZyBzaG91bGQgYmUgc3VwcHJlc3NlZC4gKi8KIAlfX09WU19QQUNLRVRfQVRUUl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC91aW5wdXQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC91aW5wdXQuaAppbmRleCBiYWVhYjgzLi4wMTNjOWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdWlucHV0LmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3VpbnB1dC5oCkBAIC04Miw3ICs4Miw3IEBACiAgKiBUaGUgY29tcGxldGUgc3lzZnMgcGF0aCBpcyB0aGVuIC9zeXMvZGV2aWNlcy92aXJ0dWFsL2lucHV0Ly0tTkFNRS0tCiAgKiBVc3VhbGx5LCBpdCBpcyBpbiB0aGUgZm9ybSAiaW5wdXROIgogICovCi0jZGVmaW5lIFVJX0dFVF9TWVNOQU1FKGxlbikJX0lPQyhfSU9DX1JFQUQsIFVJTlBVVF9JT0NUTF9CQVNFLCAzMDAsIGxlbikKKyNkZWZpbmUgVUlfR0VUX1NZU05BTUUobGVuKQlfSU9DKF9JT0NfUkVBRCwgVUlOUFVUX0lPQ1RMX0JBU0UsIDQ0LCBsZW4pCiAKIC8qKgogICogVUlfR0VUX1ZFUlNJT04gLSBSZXR1cm4gdmVyc2lvbiBvZiB1aW5wdXQgcHJvdG9jb2wKQEAgLTkxLDcgKzkxLDcgQEAKICAqIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgdGhlIGlvY3RsIGFyZ3VtZW50LiBUaGUgcHJvdG9jb2wgdmVyc2lvbgogICogaXMgaGFyZC1jb2RlZCBpbiB0aGUga2VybmVsIGFuZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgdWlucHV0IGRldmljZS4KICAqLwotI2RlZmluZSBVSV9HRVRfVkVSU0lPTgkJX0lPUihVSU5QVVRfSU9DVExfQkFTRSwgMzAxLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFVJX0dFVF9WRVJTSU9OCQlfSU9SKFVJTlBVVF9JT0NUTF9CQVNFLCA0NSwgdW5zaWduZWQgaW50KQogCiAvKgogICogVG8gd3JpdGUgYSBmb3JjZS1mZWVkYmFjay1jYXBhYmxlIGRyaXZlciwgdGhlIHVwbG9hZF9lZmZlY3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fcmluZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19yaW5nLmgKaW5kZXggNjFjODE4YS4uYTMzMThmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19yaW5nLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19yaW5nLmgKQEAgLTEwMSw2ICsxMDEsMTMgQEAKIAlzdHJ1Y3QgdnJpbmdfdXNlZCAqdXNlZDsKIH07CiAKKy8qIEFsaWdubWVudCByZXF1aXJlbWVudHMgZm9yIHZyaW5nIGVsZW1lbnRzLgorICogV2hlbiB1c2luZyBwcmUtdmlydGlvIDEuMCBsYXlvdXQsIHRoZXNlIGZhbGwgb3V0IG5hdHVyYWxseS4KKyAqLworI2RlZmluZSBWUklOR19BVkFJTF9BTElHTl9TSVpFIDIKKyNkZWZpbmUgVlJJTkdfVVNFRF9BTElHTl9TSVpFIDQKKyNkZWZpbmUgVlJJTkdfREVTQ19BTElHTl9TSVpFIDE2CisKIC8qIFRoZSBzdGFuZGFyZCBsYXlvdXQgZm9yIHRoZSByaW5nIGlzIGEgY29udGludW91cyBjaHVuayBvZiBtZW1vcnkgd2hpY2ggbG9va3MKICAqIGxpa2UgdGhpcy4gIFdlIGFzc3VtZSBudW0gaXMgYSBwb3dlciBvZiAyLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS9ubWkuaCBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9ubWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdkOWQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL25taS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG5taS5oCisgKgorICogTk1JIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBhbmQgcmVhc29uIGNvZGVzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgS2VpciBGcmFzZXIgPGtlaXJAeGVuc291cmNlLmNvbT4KKyAqLworCisjaWZuZGVmIF9fWEVOX1BVQkxJQ19OTUlfSF9fCisjZGVmaW5lIF9fWEVOX1BVQkxJQ19OTUlfSF9fCisKKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgorCisvKgorICogTk1JIHJlYXNvbiBjb2RlczoKKyAqIEN1cnJlbnRseSB0aGVzZSBhcmUgeDg2LXNwZWNpZmljLCBzdG9yZWQgaW4gYXJjaF9zaGFyZWRfaW5mby5ubWlfcmVhc29uLgorICovCisgLyogSS9PLWNoZWNrIGVycm9yIHJlcG9ydGVkIHZpYSBJU0EgcG9ydCAweDYxLCBiaXQgNi4gKi8KKyNkZWZpbmUgX1hFTl9OTUlSRUFTT05faW9fZXJyb3IgICAgIDAKKyNkZWZpbmUgWEVOX05NSVJFQVNPTl9pb19lcnJvciAgICAgICgxVUwgPDwgX1hFTl9OTUlSRUFTT05faW9fZXJyb3IpCisgLyogUENJIFNFUlIgcmVwb3J0ZWQgdmlhIElTQSBwb3J0IDB4NjEsIGJpdCA3LiAqLworI2RlZmluZSBfWEVOX05NSVJFQVNPTl9wY2lfc2VyciAgICAgMQorI2RlZmluZSBYRU5fTk1JUkVBU09OX3BjaV9zZXJyICAgICAgKDFVTCA8PCBfWEVOX05NSVJFQVNPTl9wY2lfc2VycikKKyAvKiBVbmtub3duIGhhcmR3YXJlLWdlbmVyYXRlZCBOTUkuICovCisjZGVmaW5lIF9YRU5fTk1JUkVBU09OX3Vua25vd24gICAgICAyCisjZGVmaW5lIFhFTl9OTUlSRUFTT05fdW5rbm93biAgICAgICAoMVVMIDw8IF9YRU5fTk1JUkVBU09OX3Vua25vd24pCisKKy8qCisgKiBsb25nIG5taV9vcCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCisgKiBOQi4gQWxsIG9wcyByZXR1cm4gemVybyBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworCisvKgorICogUmVnaXN0ZXIgTk1JIGNhbGxiYWNrIGZvciB0aGlzIChjYWxsaW5nKSBWQ1BVLiBDdXJyZW50bHkgdGhpcyBvbmx5IG1ha2VzCisgKiBzZW5zZSBmb3IgZG9tYWluIDAsIHZjcHUgMC4gQWxsIG90aGVyIGNhbGxlcnMgd2lsbCBiZSByZXR1cm5lZCBFSU5WQUwuCisgKiBhcmcgPT0gcG9pbnRlciB0byB4ZW5ubWlfY2FsbGJhY2sgc3RydWN0dXJlLgorICovCisjZGVmaW5lIFhFTk5NSV9yZWdpc3Rlcl9jYWxsYmFjayAgIDAKK3N0cnVjdCB4ZW5ubWlfY2FsbGJhY2sgeworICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlcl9hZGRyZXNzOworICAgIHVuc2lnbmVkIGxvbmcgcGFkOworfTsKK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhlbm5taV9jYWxsYmFjayk7CisKKy8qCisgKiBEZXJlZ2lzdGVyIE5NSSBjYWxsYmFjayBmb3IgdGhpcyAoY2FsbGluZykgVkNQVS4KKyAqIGFyZyA9PSBOVUxMLgorICovCisjZGVmaW5lIFhFTk5NSV91bnJlZ2lzdGVyX2NhbGxiYWNrIDEKKworI2VuZGlmIC8qIF9fWEVOX1BVQkxJQ19OTUlfSF9fICovCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXQuYyBiL2tlcm5lbC9hdWRpdC5jCmluZGV4IGY4ZjIwM2UuLjcyYWI3NTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdC5jCisrKyBiL2tlcm5lbC9hdWRpdC5jCkBAIC00MjksNyArNDI5LDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjb25zdW1lIGFuIHNrYiBhcyBtaWdodCBiZSBleHBlY3RlZCBzaW5jZSBpdCBoYXMgdG8KICAqIGNvcHkgaXQgYW55d2F5cy4KICAqLwotc3RhdGljIHZvaWQga2F1ZGl0ZF9zZW5kX211bHRpY2FzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGthdWRpdGRfc2VuZF9tdWx0aWNhc3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBza19idWZmCQkqY29weTsKIAlzdHJ1Y3QgYXVkaXRfbmV0CSphdW5ldCA9IG5ldF9nZW5lcmljKCZpbml0X25ldCwgYXVkaXRfbmV0X2lkKTsKQEAgLTQ0OCwxMSArNDQ4LDExIEBACiAJICogbm8gcmVhc29uIGZvciBuZXcgbXVsdGljYXN0IGNsaWVudHMgdG8gY29udGludWUgd2l0aCB0aGlzCiAJICogbm9uLWNvbXBsaWFuY2UuCiAJICovCi0JY29weSA9IHNrYl9jb3B5KHNrYiwgR0ZQX0tFUk5FTCk7CisJY29weSA9IHNrYl9jb3B5KHNrYiwgZ2ZwX21hc2spOwogCWlmICghY29weSkKIAkJcmV0dXJuOwogCi0Jbmxtc2dfbXVsdGljYXN0KHNvY2ssIGNvcHksIDAsIEFVRElUX05MR1JQX1JFQURMT0csIEdGUF9LRVJORUwpOworCW5sbXNnX211bHRpY2FzdChzb2NrLCBjb3B5LCAwLCBBVURJVF9OTEdSUF9SRUFETE9HLCBnZnBfbWFzayk7CiB9CiAKIC8qCkBAIC0xMTAwLDcgKzExMDAsNyBAQAogfQogCiAvKiBSdW4gY3VzdG9tIGJpbmQgZnVuY3Rpb24gb24gbmV0bGluayBzb2NrZXQgZ3JvdXAgY29ubmVjdCBvciBiaW5kIHJlcXVlc3RzLiAqLwotc3RhdGljIGludCBhdWRpdF9iaW5kKGludCBncm91cCkKK3N0YXRpYyBpbnQgYXVkaXRfYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cCkKIHsKIAlpZiAoIWNhcGFibGUoQ0FQX0FVRElUX1JFQUQpKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtMTk0MCw3ICsxOTQwLDcgQEAKIAkJc3RydWN0IG5sbXNnaGRyICpubGggPSBubG1zZ19oZHIoYWItPnNrYik7CiAKIAkJbmxoLT5ubG1zZ19sZW4gPSBhYi0+c2tiLT5sZW47Ci0JCWthdWRpdGRfc2VuZF9tdWx0aWNhc3Rfc2tiKGFiLT5za2IpOworCQlrYXVkaXRkX3NlbmRfbXVsdGljYXN0X3NrYihhYi0+c2tiLCBhYi0+Z2ZwX21hc2spOwogCiAJCS8qCiAJCSAqIFRoZSBvcmlnaW5hbCBrYXVkaXQgdW5pY2FzdCBzb2NrZXQgc2VuZHMgdXAgbWVzc2FnZXMgd2l0aApkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwppbmRleCAzNTk4ZTEzLi40ZjY4YTMyIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYworKysgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwpAQCAtNDQyLDE5ICs0NDIsNyBAQAogCQlpZiAoKGYtPnR5cGUgPT0gQVVESVRfTE9HSU5VSUQpICYmIChmLT52YWwgPT0gQVVESVRfVUlEX1VOU0VUKSkgewogCQkJZi0+dHlwZSA9IEFVRElUX0xPR0lOVUlEX1NFVDsKIAkJCWYtPnZhbCA9IDA7Ci0JCX0KLQotCQlpZiAoKGYtPnR5cGUgPT0gQVVESVRfUElEKSB8fCAoZi0+dHlwZSA9PSBBVURJVF9QUElEKSkgewotCQkJc3RydWN0IHBpZCAqcGlkOwotCQkJcmN1X3JlYWRfbG9jaygpOwotCQkJcGlkID0gZmluZF92cGlkKGYtPnZhbCk7Ci0JCQlpZiAoIXBpZCkgewotCQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJCWVyciA9IC1FU1JDSDsKLQkJCQlnb3RvIGV4aXRfZnJlZTsKLQkJCX0KLQkJCWYtPnZhbCA9IHBpZF9ucihwaWQpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQllbnRyeS0+cnVsZS5wZmxhZ3MgfD0gQVVESVRfTE9HSU5VSURfTEVHQUNZOwogCQl9CiAKIAkJZXJyID0gYXVkaXRfZmllbGRfdmFsaWQoZW50cnksIGYpOwpAQCAtNjMwLDYgKzYxOCwxMyBAQAogCQkJZGF0YS0+YnVmbGVuICs9IGRhdGEtPnZhbHVlc1tpXSA9CiAJCQkJYXVkaXRfcGFja19zdHJpbmcoJmJ1ZnAsIGtydWxlLT5maWx0ZXJrZXkpOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfTE9HSU5VSURfU0VUOgorCQkJaWYgKGtydWxlLT5wZmxhZ3MgJiBBVURJVF9MT0dJTlVJRF9MRUdBQ1kgJiYgIWYtPnZhbCkgeworCQkJCWRhdGEtPmZpZWxkc1tpXSA9IEFVRElUX0xPR0lOVUlEOworCQkJCWRhdGEtPnZhbHVlc1tpXSA9IEFVRElUX1VJRF9VTlNFVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGZhbGx0aHJvdWdoIGlmIHNldCAqLwogCQlkZWZhdWx0OgogCQkJZGF0YS0+dmFsdWVzW2ldID0gZi0+dmFsOwogCQl9CkBAIC02NDYsNiArNjQxLDcgQEAKIAlpbnQgaTsKIAogCWlmIChhLT5mbGFncyAhPSBiLT5mbGFncyB8fAorCSAgICBhLT5wZmxhZ3MgIT0gYi0+cGZsYWdzIHx8CiAJICAgIGEtPmxpc3RuciAhPSBiLT5saXN0bnIgfHwKIAkgICAgYS0+YWN0aW9uICE9IGItPmFjdGlvbiB8fAogCSAgICBhLT5maWVsZF9jb3VudCAhPSBiLT5maWVsZF9jb3VudCkKQEAgLTc2NCw2ICs3NjAsNyBAQAogCW5ldyA9ICZlbnRyeS0+cnVsZTsKIAluZXctPnZlcnNfb3BzID0gb2xkLT52ZXJzX29wczsKIAluZXctPmZsYWdzID0gb2xkLT5mbGFnczsKKwluZXctPnBmbGFncyA9IG9sZC0+cGZsYWdzOwogCW5ldy0+bGlzdG5yID0gb2xkLT5saXN0bnI7CiAJbmV3LT5hY3Rpb24gPSBvbGQtPmFjdGlvbjsKIAlmb3IgKGkgPSAwOyBpIDwgQVVESVRfQklUTUFTS19TSVpFOyBpKyspCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCBjNzU1MjJhLi4wNzI1NjZkIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTcyLDYgKzcyLDggQEAKICNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgvbGltaXRzLmg+CiAKICNpbmNsdWRlICJhdWRpdC5oIgogCkBAIC0xODYxLDggKzE4NjMsNyBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShuLCAmY29udGV4dC0+bmFtZXNfbGlzdCwgbGlzdCkgewotCQkvKiBkb2VzIHRoZSBuYW1lIHBvaW50ZXIgbWF0Y2g/ICovCi0JCWlmICghbi0+bmFtZSB8fCBuLT5uYW1lLT5uYW1lICE9IG5hbWUtPm5hbWUpCisJCWlmICghbi0+bmFtZSB8fCBzdHJjbXAobi0+bmFtZS0+bmFtZSwgbmFtZS0+bmFtZSkpCiAJCQljb250aW51ZTsKIAogCQkvKiBtYXRjaCB0aGUgY29ycmVjdCByZWNvcmQgdHlwZSAqLwpAQCAtMTg3NywxMiArMTg3OCw0OCBAQAogCX0KIAogb3V0X2FsbG9jOgotCS8qIHVuYWJsZSB0byBmaW5kIHRoZSBuYW1lIGZyb20gYSBwcmV2aW91cyBnZXRuYW1lKCkuIEFsbG9jYXRlIGEgbmV3Ci0JICogYW5vbnltb3VzIGVudHJ5LgotCSAqLwotCW4gPSBhdWRpdF9hbGxvY19uYW1lKGNvbnRleHQsIEFVRElUX1RZUEVfTk9STUFMKTsKKwkvKiB1bmFibGUgdG8gZmluZCBhbiBlbnRyeSB3aXRoIGJvdGggYSBtYXRjaGluZyBuYW1lIGFuZCB0eXBlICovCisJbiA9IGF1ZGl0X2FsbG9jX25hbWUoY29udGV4dCwgQVVESVRfVFlQRV9VTktOT1dOKTsKIAlpZiAoIW4pCiAJCXJldHVybjsKKwkvKiB1bmZvcnR1bmF0ZWx5LCB3aGlsZSB3ZSBtYXkgaGF2ZSBhIHBhdGggbmFtZSB0byByZWNvcmQgd2l0aCB0aGUKKwkgKiBpbm9kZSwgd2UgY2FuJ3QgYWx3YXlzIHJlbHkgb24gdGhlIHN0cmluZyBsYXN0aW5nIHVudGlsIHRoZSBlbmQgb2YKKwkgKiB0aGUgc3lzY2FsbCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvdXIgb3duIGNvcHksIGl0IG1heSBmYWlsIGR1ZSB0bworCSAqIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcywgYnV0IHdlIGRvIG91ciBiZXN0ICovCisJaWYgKG5hbWUpIHsKKwkJLyogd2UgY2FuJ3QgdXNlIGdldG5hbWVfa2VybmVsKCkgZHVlIHRvIHNpemUgbGltaXRzICovCisJCXNpemVfdCBsZW4gPSBzdHJsZW4obmFtZS0+bmFtZSkgKyAxOworCQlzdHJ1Y3QgZmlsZW5hbWUgKm5ldyA9IF9fZ2V0bmFtZSgpOworCisJCWlmICh1bmxpa2VseSghbmV3KSkKKwkJCWdvdG8gb3V0OworCisJCWlmIChsZW4gPD0gKFBBVEhfTUFYIC0gc2l6ZW9mKCpuZXcpKSkgeworCQkJbmV3LT5uYW1lID0gKGNoYXIgKikobmV3KSArIHNpemVvZigqbmV3KTsKKwkJCW5ldy0+c2VwYXJhdGUgPSBmYWxzZTsKKwkJfSBlbHNlIGlmIChsZW4gPD0gUEFUSF9NQVgpIHsKKwkJCS8qIHRoaXMgbG9va3Mgb2RkLCBidXQgaXMgZHVlIHRvIGZpbmFsX3B1dG5hbWUoKSAqLworCQkJc3RydWN0IGZpbGVuYW1lICpuZXcyOworCisJCQluZXcyID0ga21hbGxvYyhzaXplb2YoKm5ldzIpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICh1bmxpa2VseSghbmV3MikpIHsKKwkJCQlfX3B1dG5hbWUobmV3KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCW5ldzItPm5hbWUgPSAoY2hhciAqKW5ldzsKKwkJCW5ldzItPnNlcGFyYXRlID0gdHJ1ZTsKKwkJCW5ldyA9IG5ldzI7CisJCX0gZWxzZSB7CisJCQkvKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIGJ1dCBsZXQncyBiZSBzYWZlICovCisJCQlfX3B1dG5hbWUobmV3KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXN0cmxjcHkoKGNoYXIgKiluZXctPm5hbWUsIG5hbWUtPm5hbWUsIGxlbik7CisJCW5ldy0+dXB0ciA9IE5VTEw7CisJCW5ldy0+YW5hbWUgPSBuOworCQluLT5uYW1lID0gbmV3OworCQluLT5uYW1lX3B1dCA9IHRydWU7CisJfQogb3V0OgogCWlmIChwYXJlbnQpIHsKIAkJbi0+bmFtZV9sZW4gPSBuLT5uYW1lID8gcGFyZW50X2xlbihuLT5uYW1lLT5uYW1lKSA6IEFVRElUX05BTUVfRlVMTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmMKaW5kZXggZDY1OTRlNC4uYTY0ZTdhMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jb3JlLmMKKysrIGIva2VybmVsL2JwZi9jb3JlLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCiB2b2lkIGJwZl9qaXRfYmluYXJ5X2ZyZWUoc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZHIpCiB7Ci0JbW9kdWxlX2ZyZWUoTlVMTCwgaGRyKTsKKwltb2R1bGVfbWVtZnJlZShoZHIpOwogfQogI2VuZGlmIC8qIENPTkZJR19CUEZfSklUICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggMDg4YWMwYi4uNTM2ZWRjMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmMKKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCWludCB1ZmQgPSBhdHRyLT5tYXBfZmQ7CiAJc3RydWN0IGZkIGYgPSBmZGdldCh1ZmQpOwogCXN0cnVjdCBicGZfbWFwICptYXA7Ci0Jdm9pZCAqa2V5LCAqdmFsdWU7CisJdm9pZCAqa2V5LCAqdmFsdWUsICpwdHI7CiAJaW50IGVycjsKIAogCWlmIChDSEVDS19BVFRSKEJQRl9NQVBfTE9PS1VQX0VMRU0pKQpAQCAtMTY5LDIwICsxNjksMjkgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCB1a2V5LCBtYXAtPmtleV9zaXplKSAhPSAwKQogCQlnb3RvIGZyZWVfa2V5OwogCi0JZXJyID0gLUVOT0VOVDsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JdmFsdWUgPSBtYXAtPm9wcy0+bWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKKwllcnIgPSAtRU5PTUVNOworCXZhbHVlID0ga21hbGxvYyhtYXAtPnZhbHVlX3NpemUsIEdGUF9VU0VSKTsKIAlpZiAoIXZhbHVlKQotCQlnb3RvIGVycl91bmxvY2s7CisJCWdvdG8gZnJlZV9rZXk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcHRyID0gbWFwLT5vcHMtPm1hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7CisJaWYgKHB0cikKKwkJbWVtY3B5KHZhbHVlLCBwdHIsIG1hcC0+dmFsdWVfc2l6ZSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwllcnIgPSAtRU5PRU5UOworCWlmICghcHRyKQorCQlnb3RvIGZyZWVfdmFsdWU7CiAKIAllcnIgPSAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIodXZhbHVlLCB2YWx1ZSwgbWFwLT52YWx1ZV9zaXplKSAhPSAwKQotCQlnb3RvIGVycl91bmxvY2s7CisJCWdvdG8gZnJlZV92YWx1ZTsKIAogCWVyciA9IDA7CiAKLWVycl91bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CitmcmVlX3ZhbHVlOgorCWtmcmVlKHZhbHVlKTsKIGZyZWVfa2V5OgogCWtmcmVlKGtleSk7CiBlcnJfcHV0OgpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IGJiMjYzZDAuLjA0Y2ZlOGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTE5MDksNyArMTkwOSw3IEBACiAJICoKIAkgKiBBbmQgZG9uJ3Qga2lsbCB0aGUgZGVmYXVsdCByb290LgogCSAqLwotCWlmIChjc3NfaGFzX29ubGluZV9jaGlsZHJlbigmcm9vdC0+Y2dycC5zZWxmKSB8fAorCWlmICghbGlzdF9lbXB0eSgmcm9vdC0+Y2dycC5zZWxmLmNoaWxkcmVuKSB8fAogCSAgICByb290ID09ICZjZ3JwX2RmbF9yb290KQogCQljZ3JvdXBfcHV0KCZyb290LT5jZ3JwKTsKIAllbHNlCmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcvZGVidWdfY29yZS5jIGIva2VybmVsL2RlYnVnL2RlYnVnX2NvcmUuYwppbmRleCAxYWRmNjJiLi4wN2NlMThjIDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcvZGVidWdfY29yZS5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9kZWJ1Z19jb3JlLmMKQEAgLTI3LDYgKzI3LDkgQEAKICAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CiAgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJLR0RCOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KQEAgLTE5Niw4ICsxOTksOCBAQAogCQlyZXR1cm4gZXJyOwogCWVyciA9IGtnZGJfYXJjaF9yZW1vdmVfYnJlYWtwb2ludCgmdG1wKTsKIAlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIktHREI6IENyaXRpY2FsIGJyZWFrcG9pbnQgZXJyb3IsIGtlcm5lbCAiCi0JCSAgICJtZW1vcnkgZGVzdHJveWVkIGF0OiAlbHgiLCBhZGRyKTsKKwkJcHJfZXJyKCJDcml0aWNhbCBicmVha3BvaW50IGVycm9yLCBrZXJuZWwgbWVtb3J5IGRlc3Ryb3llZCBhdDogJWx4XG4iLAorCQkgICAgICAgYWRkcik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjU2LDggKzI1OSw4IEBACiAJCWVycm9yID0ga2dkYl9hcmNoX3NldF9icmVha3BvaW50KCZrZ2RiX2JyZWFrW2ldKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlyZXQgPSBlcnJvcjsKLQkJCXByaW50ayhLRVJOX0lORk8gIktHREI6IEJQIGluc3RhbGwgZmFpbGVkOiAlbHgiLAotCQkJICAgICAgIGtnZGJfYnJlYWtbaV0uYnB0X2FkZHIpOworCQkJcHJfaW5mbygiQlAgaW5zdGFsbCBmYWlsZWQ6ICVseFxuIiwKKwkJCQlrZ2RiX2JyZWFrW2ldLmJwdF9hZGRyKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTMxOSw4ICszMjIsOCBAQAogCQkJY29udGludWU7CiAJCWVycm9yID0ga2dkYl9hcmNoX3JlbW92ZV9icmVha3BvaW50KCZrZ2RiX2JyZWFrW2ldKTsKIAkJaWYgKGVycm9yKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJLR0RCOiBCUCByZW1vdmUgZmFpbGVkOiAlbHhcbiIsCi0JCQkgICAgICAga2dkYl9icmVha1tpXS5icHRfYWRkcik7CisJCQlwcl9pbmZvKCJCUCByZW1vdmUgZmFpbGVkOiAlbHhcbiIsCisJCQkJa2dkYl9icmVha1tpXS5icHRfYWRkcik7CiAJCQlyZXQgPSBlcnJvcjsKIAkJfQogCkBAIC0zNjcsNyArMzcwLDcgQEAKIAkJCWdvdG8gc2V0dW5kZWZpbmVkOwogCQllcnJvciA9IGtnZGJfYXJjaF9yZW1vdmVfYnJlYWtwb2ludCgma2dkYl9icmVha1tpXSk7CiAJCWlmIChlcnJvcikKLQkJCXByaW50ayhLRVJOX0VSUiAiS0dEQjogYnJlYWtwb2ludCByZW1vdmUgZmFpbGVkOiAlbHhcbiIsCisJCQlwcl9lcnIoImJyZWFrcG9pbnQgcmVtb3ZlIGZhaWxlZDogJWx4XG4iLAogCQkJICAgICAgIGtnZGJfYnJlYWtbaV0uYnB0X2FkZHIpOwogc2V0dW5kZWZpbmVkOgogCQlrZ2RiX2JyZWFrW2ldLnN0YXRlID0gQlBfVU5ERUZJTkVEOwpAQCAtNDAwLDkgKzQwMyw5IEBACiAJaWYgKHByaW50X3dhaXQpIHsKICNpZmRlZiBDT05GSUdfS0dEQl9LREIKIAkJaWYgKCFkYmdfa2RiX21vZGUpCi0JCQlwcmludGsoS0VSTl9DUklUICJLR0RCOiB3YWl0aW5nLi4uIG9yICQzIzMzIGZvciBLREJcbiIpOworCQkJcHJfY3JpdCgid2FpdGluZy4uLiBvciAkMyMzMyBmb3IgS0RCXG4iKTsKICNlbHNlCi0JCXByaW50ayhLRVJOX0NSSVQgIktHREI6IFdhaXRpbmcgZm9yIHJlbW90ZSBkZWJ1Z2dlclxuIik7CisJCXByX2NyaXQoIldhaXRpbmcgZm9yIHJlbW90ZSBkZWJ1Z2dlclxuIik7CiAjZW5kaWYKIAl9CiAJcmV0dXJuIDE7CkBAIC00MzAsOCArNDMzLDcgQEAKIAkJZXhjZXB0aW9uX2xldmVsID0gMDsKIAkJa2dkYl9za2lwZXhjZXB0aW9uKGtzLT5leF92ZWN0b3IsIGtzLT5saW51eF9yZWdzKTsKIAkJZGJnX2FjdGl2YXRlX3N3X2JyZWFrcG9pbnRzKCk7Ci0JCXByaW50ayhLRVJOX0NSSVQgIktHREI6IHJlLWVudGVyIGVycm9yOiBicmVha3BvaW50IHJlbW92ZWQgJWx4XG4iLAotCQkJYWRkcik7CisJCXByX2NyaXQoInJlLWVudGVyIGVycm9yOiBicmVha3BvaW50IHJlbW92ZWQgJWx4XG4iLCBhZGRyKTsKIAkJV0FSTl9PTl9PTkNFKDEpOwogCiAJCXJldHVybiAxOwpAQCAtNDQ0LDcgKzQ0Niw3IEBACiAJCXBhbmljKCJSZWN1cnNpdmUgZW50cnkgdG8gZGVidWdnZXIiKTsKIAl9CiAKLQlwcmludGsoS0VSTl9DUklUICJLR0RCOiByZS1lbnRlciBleGNlcHRpb246IEFMTCBicmVha3BvaW50cyBraWxsZWRcbiIpOworCXByX2NyaXQoInJlLWVudGVyIGV4Y2VwdGlvbjogQUxMIGJyZWFrcG9pbnRzIGtpbGxlZFxuIik7CiAjaWZkZWYgQ09ORklHX0tHREJfS0RCCiAJLyogQWxsb3cga2RiIHRvIGRlYnVnIGl0c2VsZiBvbmUgbGV2ZWwgKi8KIAlyZXR1cm4gMDsKQEAgLTQ3MSw2ICs0NzMsNyBAQAogCWludCBjcHU7CiAJaW50IHRyYWNlX29uID0gMDsKIAlpbnQgb25saW5lX2NwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKKwl1NjQgdGltZV9sZWZ0OwogCiAJa2dkYl9pbmZvW2tzLT5jcHVdLmVudGVyX2tnZGIrKzsKIAlrZ2RiX2luZm9ba3MtPmNwdV0uZXhjZXB0aW9uX3N0YXRlIHw9IGV4Y2VwdGlvbl9zdGF0ZTsKQEAgLTU5NSw5ICs1OTgsMTMgQEAKIAkvKgogCSAqIFdhaXQgZm9yIHRoZSBvdGhlciBDUFVzIHRvIGJlIG5vdGlmaWVkIGFuZCBiZSB3YWl0aW5nIGZvciB1czoKIAkgKi8KLQl3aGlsZSAoa2dkYl9kb19yb3VuZHVwICYmIChhdG9taWNfcmVhZCgmbWFzdGVyc19pbl9rZ2RiKSArCi0JCQkJYXRvbWljX3JlYWQoJnNsYXZlc19pbl9rZ2RiKSkgIT0gb25saW5lX2NwdXMpCisJdGltZV9sZWZ0ID0gbG9vcHNfcGVyX2ppZmZ5ICogSFo7CisJd2hpbGUgKGtnZGJfZG9fcm91bmR1cCAmJiAtLXRpbWVfbGVmdCAmJgorCSAgICAgICAoYXRvbWljX3JlYWQoJm1hc3RlcnNfaW5fa2dkYikgKyBhdG9taWNfcmVhZCgmc2xhdmVzX2luX2tnZGIpKSAhPQorCQkgICBvbmxpbmVfY3B1cykKIAkJY3B1X3JlbGF4KCk7CisJaWYgKCF0aW1lX2xlZnQpCisJCXByX2NyaXQoIktHREI6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBzZWNvbmRhcnkgQ1BVcy5cbiIpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50IHRoZSBwcmltYXJ5IHByb2Nlc3NvciBpcyBjb21wbGV0ZWx5CkBAIC03OTUsMTUgKzgwMiwxNSBAQAogc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX2RiZyhpbnQga2V5KQogewogCWlmICghZGJnX2lvX29wcykgewotCQlwcmludGsoS0VSTl9DUklUICJFUlJPUjogTm8gS0dEQiBJL08gbW9kdWxlIGF2YWlsYWJsZVxuIik7CisJCXByX2NyaXQoIkVSUk9SOiBObyBLR0RCIEkvTyBtb2R1bGUgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoIWtnZGJfY29ubmVjdGVkKSB7CiAjaWZkZWYgQ09ORklHX0tHREJfS0RCCiAJCWlmICghZGJnX2tkYl9tb2RlKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiS0dEQiBvciAkMyMzMyBmb3IgS0RCXG4iKTsKKwkJCXByX2NyaXQoIktHREIgb3IgJDMjMzMgZm9yIEtEQlxuIik7CiAjZWxzZQotCQlwcmludGsoS0VSTl9DUklUICJFbnRlcmluZyBLR0RCXG4iKTsKKwkJcHJfY3JpdCgiRW50ZXJpbmcgS0dEQlxuIik7CiAjZW5kaWYKIAl9CiAKQEAgLTk0NSw3ICs5NTIsNyBAQAogewogCWtnZGJfYnJlYWtfYXNhcCA9IDA7CiAKLQlwcmludGsoS0VSTl9DUklUICJrZ2RiOiBXYWl0aW5nIGZvciBjb25uZWN0aW9uIGZyb20gcmVtb3RlIGdkYi4uLlxuIik7CisJcHJfY3JpdCgiV2FpdGluZyBmb3IgY29ubmVjdGlvbiBmcm9tIHJlbW90ZSBnZGIuLi5cbiIpOwogCWtnZGJfYnJlYWtwb2ludCgpOwogfQogCkBAIC05NjQsOCArOTcxLDcgQEAKIAlpZiAoZGJnX2lvX29wcykgewogCQlzcGluX3VubG9jaygma2dkYl9yZWdpc3RyYXRpb25fbG9jayk7CiAKLQkJcHJpbnRrKEtFUk5fRVJSICJrZ2RiOiBBbm90aGVyIEkvTyBkcml2ZXIgaXMgYWxyZWFkeSAiCi0JCQkJInJlZ2lzdGVyZWQgd2l0aCBLR0RCLlxuIik7CisJCXByX2VycigiQW5vdGhlciBJL08gZHJpdmVyIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIEtHREJcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtOTgxLDggKzk4Nyw3IEBACiAKIAlzcGluX3VubG9jaygma2dkYl9yZWdpc3RyYXRpb25fbG9jayk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJrZ2RiOiBSZWdpc3RlcmVkIEkvTyBkcml2ZXIgJXMuXG4iLAotCSAgICAgICBuZXdfZGJnX2lvX29wcy0+bmFtZSk7CisJcHJfaW5mbygiUmVnaXN0ZXJlZCBJL08gZHJpdmVyICVzXG4iLCBuZXdfZGJnX2lvX29wcy0+bmFtZSk7CiAKIAkvKiBBcm0gS0dEQiBub3cuICovCiAJa2dkYl9yZWdpc3Rlcl9jYWxsYmFja3MoKTsKQEAgLTEwMTcsOCArMTAyMiw3IEBACiAKIAlzcGluX3VubG9jaygma2dkYl9yZWdpc3RyYXRpb25fbG9jayk7CiAKLQlwcmludGsoS0VSTl9JTkZPCi0JCSJrZ2RiOiBVbnJlZ2lzdGVyZWQgSS9PIGRyaXZlciAlcywgZGVidWdnZXIgZGlzYWJsZWQuXG4iLAorCXByX2luZm8oIlVucmVnaXN0ZXJlZCBJL08gZHJpdmVyICVzLCBkZWJ1Z2dlciBkaXNhYmxlZFxuIiwKIAkJb2xkX2RiZ19pb19vcHMtPm5hbWUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa2dkYl91bnJlZ2lzdGVyX2lvX21vZHVsZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcva2RiL2tkYl9icC5jIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfYnAuYwppbmRleCBiMjBkNTQ0Li5lMWRiZjRhIDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9icC5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2JwLmMKQEAgLTUzMSwyMiArNTMxLDI5IEBACiAJZm9yIChpID0gMCwgYnAgPSBrZGJfYnJlYWtwb2ludHM7IGkgPCBLREJfTUFYQlBUOyBpKyssIGJwKyspCiAJCWJwLT5icF9mcmVlID0gMTsKIAotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImJwIiwga2RiX2JwLCAiWzx2YWRkcj5dIiwKLQkJIlNldC9EaXNwbGF5IGJyZWFrcG9pbnRzIiwgMCwgS0RCX1JFUEVBVF9OT19BUkdTKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJibCIsIGtkYl9icCwgIls8dmFkZHI+XSIsCi0JCSJEaXNwbGF5IGJyZWFrcG9pbnRzIiwgMCwgS0RCX1JFUEVBVF9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImJwIiwga2RiX2JwLCAiWzx2YWRkcj5dIiwKKwkJIlNldC9EaXNwbGF5IGJyZWFrcG9pbnRzIiwgMCwKKwkJS0RCX0VOQUJMRV9GTE9XX0NUUkwgfCBLREJfUkVQRUFUX05PX0FSR1MpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiYmwiLCBrZGJfYnAsICJbPHZhZGRyPl0iLAorCQkiRGlzcGxheSBicmVha3BvaW50cyIsIDAsCisJCUtEQl9FTkFCTEVfRkxPV19DVFJMIHwgS0RCX1JFUEVBVF9OT19BUkdTKTsKIAlpZiAoYXJjaF9rZ2RiX29wcy5mbGFncyAmIEtHREJfSFdfQlJFQUtQT0lOVCkKLQkJa2RiX3JlZ2lzdGVyX3JlcGVhdCgiYnBoIiwga2RiX2JwLCAiWzx2YWRkcj5dIiwKLQkJIltkYXRhciBbbGVuZ3RoXXxkYXRhdyBbbGVuZ3RoXV0gICBTZXQgaHcgYnJrIiwgMCwgS0RCX1JFUEVBVF9OT19BUkdTKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJiYyIsIGtkYl9iYywgIjxicG51bT4iLAotCQkiQ2xlYXIgQnJlYWtwb2ludCIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiYmUiLCBrZGJfYmMsICI8YnBudW0+IiwKLQkJIkVuYWJsZSBCcmVha3BvaW50IiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJiZCIsIGtkYl9iYywgIjxicG51bT4iLAotCQkiRGlzYWJsZSBCcmVha3BvaW50IiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKKwkJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJicGgiLCBrZGJfYnAsICJbPHZhZGRyPl0iLAorCQkiW2RhdGFyIFtsZW5ndGhdfGRhdGF3IFtsZW5ndGhdXSAgIFNldCBodyBicmsiLCAwLAorCQlLREJfRU5BQkxFX0ZMT1dfQ1RSTCB8IEtEQl9SRVBFQVRfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJiYyIsIGtkYl9iYywgIjxicG51bT4iLAorCQkiQ2xlYXIgQnJlYWtwb2ludCIsIDAsCisJCUtEQl9FTkFCTEVfRkxPV19DVFJMKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImJlIiwga2RiX2JjLCAiPGJwbnVtPiIsCisJCSJFbmFibGUgQnJlYWtwb2ludCIsIDAsCisJCUtEQl9FTkFCTEVfRkxPV19DVFJMKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImJkIiwga2RiX2JjLCAiPGJwbnVtPiIsCisJCSJEaXNhYmxlIEJyZWFrcG9pbnQiLCAwLAorCQlLREJfRU5BQkxFX0ZMT1dfQ1RSTCk7CiAKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJzcyIsIGtkYl9zcywgIiIsCi0JCSJTaW5nbGUgU3RlcCIsIDEsIEtEQl9SRVBFQVRfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJzcyIsIGtkYl9zcywgIiIsCisJCSJTaW5nbGUgU3RlcCIsIDEsCisJCUtEQl9FTkFCTEVfRkxPV19DVFJMIHwgS0RCX1JFUEVBVF9OT19BUkdTKTsKIAkvKgogCSAqIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24uCiAJICovCmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcva2RiL2tkYl9kZWJ1Z2dlci5jIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfZGVidWdnZXIuYwppbmRleCA4ODU5Y2EzLi4xNWUxYTdhIDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9kZWJ1Z2dlci5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2RlYnVnZ2VyLmMKQEAgLTEyOSw2ICsxMjksMTAgQEAKIAkJa3MtPnBhc3NfZXhjZXB0aW9uID0gMTsKIAkJS0RCX0ZMQUdfU0VUKENBVEFTVFJPUEhJQyk7CiAJfQorCS8qIHNldCBDQVRBU1RST1BISUMgaWYgdGhlIHN5c3RlbSBjb250YWlucyB1bnJlc3BvbnNpdmUgcHJvY2Vzc29ycyAqLworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJaWYgKCFrZ2RiX2luZm9baV0uZW50ZXJfa2dkYikKKwkJCUtEQl9GTEFHX1NFVChDQVRBU1RST1BISUMpOwogCWlmIChLREJfU1RBVEUoU1NCUFQpICYmIHJlYXNvbiA9PSBLREJfUkVBU09OX1NTVEVQKSB7CiAJCUtEQl9TVEFURV9DTEVBUihTU0JQVCk7CiAJCUtEQl9TVEFURV9DTEVBUihET0lOR19TUyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMKaW5kZXggMzc5NjUwYi4uN2I0MGM1ZiAxMDA2NDQKLS0tIGEva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva21zZ19kdW1wLmg+CkBAIC0yMyw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KQEAgLTQyLDYgKzQ0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImtkYl9wcml2YXRlLmgiCiAKKyN1bmRlZglNT0RVTEVfUEFSQU1fUFJFRklYCisjZGVmaW5lCU1PRFVMRV9QQVJBTV9QUkVGSVggImtkYi4iCisKK3N0YXRpYyBpbnQga2RiX2NtZF9lbmFibGVkID0gQ09ORklHX0tEQl9ERUZBVUxUX0VOQUJMRTsKK21vZHVsZV9wYXJhbV9uYW1lZChjbWRfZW5hYmxlLCBrZGJfY21kX2VuYWJsZWQsIGludCwgMDYwMCk7CisKICNkZWZpbmUgR1JFUF9MRU4gMjU2CiBjaGFyIGtkYl9ncmVwX3N0cmluZ1tHUkVQX0xFTl07CiBpbnQga2RiX2dyZXBwaW5nX2ZsYWc7CkBAIC0xMjEsNiArMTI5LDcgQEAKIAlLREJNU0coQkFETEVOR1RILCAiSW52YWxpZCBsZW5ndGggZmllbGQiKSwKIAlLREJNU0coTk9CUCwgIk5vIEJyZWFrcG9pbnQgZXhpc3RzIiksCiAJS0RCTVNHKEJBREFERFIsICJJbnZhbGlkIGFkZHJlc3MiKSwKKwlLREJNU0coTk9QRVJNLCAiUGVybWlzc2lvbiBkZW5pZWQiKSwKIH07CiAjdW5kZWYgS0RCTVNHCiAKQEAgLTE4OCw2ICsxOTcsMjYgQEAKIH0KIAogLyoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGZsYWdzIG9mIHRoZSBjdXJyZW50IGNvbW1hbmQgYW5kIHRoZSBwZXJtaXNzaW9ucworICogb2YgdGhlIGtkYiBjb25zb2xlIGhhcyBhbGxvdyBhIGNvbW1hbmQgdG8gYmUgcnVuLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wga2RiX2NoZWNrX2ZsYWdzKGtkYl9jbWRmbGFnc190IGZsYWdzLCBpbnQgcGVybWlzc2lvbnMsCisJCQkJICAgYm9vbCBub19hcmdzKQoreworCS8qIHBlcm1pc3Npb25zIGNvbWVzIGZyb20gdXNlcnNwYWNlIHNvIG5lZWRzIG1hc3NhZ2luZyBzbGlnaHRseSAqLworCXBlcm1pc3Npb25zICY9IEtEQl9FTkFCTEVfTUFTSzsKKwlwZXJtaXNzaW9ucyB8PSBLREJfRU5BQkxFX0FMV0FZU19TQUZFOworCisJLyogc29tZSBjb21tYW5kcyBjaGFuZ2UgZ3JvdXAgd2hlbiBsYXVuY2hlZCB3aXRoIG5vIGFyZ3VtZW50cyAqLworCWlmIChub19hcmdzKQorCQlwZXJtaXNzaW9ucyB8PSBwZXJtaXNzaW9ucyA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQ7CisKKwlmbGFncyB8PSBLREJfRU5BQkxFX0FMTDsKKworCXJldHVybiBwZXJtaXNzaW9ucyAmIGZsYWdzOworfQorCisvKgogICoga2RiZ2V0ZW52IC0gVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgY2hhcmFjdGVyIHN0cmluZyB2YWx1ZSBvZgogICoJYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCiAgKiBQYXJhbWV0ZXJzOgpAQCAtNDc2LDYgKzUwNSwxNSBAQAogCWtkYl9zeW10YWJfdCBzeW10YWI7CiAKIAkvKgorCSAqIElmIHRoZSBlbmFibGUgZmxhZ3MgcHJvaGliaXQgYm90aCBhcmJpdHJhcnkgbWVtb3J5IGFjY2VzcworCSAqIGFuZCBmbG93IGNvbnRyb2wgdGhlbiB0aGVyZSBhcmUgbm8gcmVhc29uYWJsZSBncm91bmRzIHRvCisJICogcHJvdmlkZSBzeW1ib2wgbG9va3VwLgorCSAqLworCWlmICgha2RiX2NoZWNrX2ZsYWdzKEtEQl9FTkFCTEVfTUVNX1JFQUQgfCBLREJfRU5BQkxFX0ZMT1dfQ1RSTCwKKwkJCSAgICAga2RiX2NtZF9lbmFibGVkLCBmYWxzZSkpCisJCXJldHVybiBLREJfTk9QRVJNOworCisJLyoKIAkgKiBQcm9jZXNzIGFyZ3VtZW50cyB3aGljaCBmb2xsb3cgdGhlIGZvbGxvd2luZyBzeW50YXg6CiAJICoKIAkgKiAgc3ltYm9sIHwgbnVtZXJpYy1hZGRyZXNzIFsrLy0gbnVtZXJpYy1vZmZzZXRdCkBAIC02NDEsOCArNjc5LDEzIEBACiAJCWlmICghcy0+Y291bnQpCiAJCQlzLT51c2FibGUgPSAwOwogCQlpZiAocy0+dXNhYmxlKQotCQkJa2RiX3JlZ2lzdGVyKHMtPm5hbWUsIGtkYl9leGVjX2RlZmNtZCwKLQkJCQkgICAgIHMtPnVzYWdlLCBzLT5oZWxwLCAwKTsKKwkJCS8qIG1hY3JvcyBhcmUgYWx3YXlzIHNhZmUgYmVjYXVzZSB3aGVuIGV4ZWN1dGVkIGVhY2gKKwkJCSAqIGludGVybmFsIGNvbW1hbmQgcmUtZW50ZXJzIGtkYl9wYXJzZSgpIGFuZCBpcworCQkJICogc2FmZXR5IGNoZWNrZWQgaW5kaXZpZHVhbGx5LgorCQkJICovCisJCQlrZGJfcmVnaXN0ZXJfZmxhZ3Mocy0+bmFtZSwga2RiX2V4ZWNfZGVmY21kLCBzLT51c2FnZSwKKwkJCQkJICAgcy0+aGVscCwgMCwKKwkJCQkJICAgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXMtPnVzYWJsZSkKQEAgLTEwMDMsMjUgKzEwNDYsMjIgQEAKIAogCWlmIChpIDwga2RiX21heF9jb21tYW5kcykgewogCQlpbnQgcmVzdWx0OworCisJCWlmICgha2RiX2NoZWNrX2ZsYWdzKHRwLT5jbWRfZmxhZ3MsIGtkYl9jbWRfZW5hYmxlZCwgYXJnYyA8PSAxKSkKKwkJCXJldHVybiBLREJfTk9QRVJNOworCiAJCUtEQl9TVEFURV9TRVQoQ01EKTsKIAkJcmVzdWx0ID0gKCp0cC0+Y21kX2Z1bmMpKGFyZ2MtMSwgKGNvbnN0IGNoYXIgKiopYXJndik7CiAJCWlmIChyZXN1bHQgJiYgaWdub3JlX2Vycm9ycyAmJiByZXN1bHQgPiBLREJfQ01EX0dPKQogCQkJcmVzdWx0ID0gMDsKIAkJS0RCX1NUQVRFX0NMRUFSKENNRCk7Ci0JCXN3aXRjaCAodHAtPmNtZF9yZXBlYXQpIHsKLQkJY2FzZSBLREJfUkVQRUFUX05PTkU6Ci0JCQlhcmdjID0gMDsKLQkJCWlmIChhcmd2WzBdKQotCQkJCSooYXJndlswXSkgPSAnXDAnOwotCQkJYnJlYWs7Ci0JCWNhc2UgS0RCX1JFUEVBVF9OT19BUkdTOgotCQkJYXJnYyA9IDE7Ci0JCQlpZiAoYXJndlsxXSkKLQkJCQkqKGFyZ3ZbMV0pID0gJ1wwJzsKLQkJCWJyZWFrOwotCQljYXNlIEtEQl9SRVBFQVRfV0lUSF9BUkdTOgotCQkJYnJlYWs7Ci0JCX0KKworCQlpZiAodHAtPmNtZF9mbGFncyAmIEtEQl9SRVBFQVRfV0lUSF9BUkdTKQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQlhcmdjID0gdHAtPmNtZF9mbGFncyAmIEtEQl9SRVBFQVRfTk9fQVJHUyA/IDEgOiAwOworCQlpZiAoYXJndlthcmdjXSkKKwkJCSooYXJndlthcmdjXSkgPSAnXDAnOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtMTkyMSwxMCArMTk2MSwxNCBAQAogICovCiBzdGF0aWMgaW50IGtkYl9zcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CisJYm9vbCBjaGVja19tYXNrID0KKwkgICAgIWtkYl9jaGVja19mbGFncyhLREJfRU5BQkxFX0FMTCwga2RiX2NtZF9lbmFibGVkLCBmYWxzZSk7CisKIAlpZiAoYXJnYyAhPSAxKQogCQlyZXR1cm4gS0RCX0FSR0NPVU5UOworCiAJa2RiX3RyYXBfcHJpbnRrKys7Ci0JX19oYW5kbGVfc3lzcnEoKmFyZ3ZbMV0sIGZhbHNlKTsKKwlfX2hhbmRsZV9zeXNycSgqYXJndlsxXSwgY2hlY2tfbWFzayk7CiAJa2RiX3RyYXBfcHJpbnRrLS07CiAKIAlyZXR1cm4gMDsKQEAgLTE5NzksNyArMjAyMyw3IEBACiAJCWtkYl9wcmludGYoIiUtMjBzJTh1ICAweCVwICIsIG1vZC0+bmFtZSwKIAkJCSAgIG1vZC0+Y29yZV9zaXplLCAodm9pZCAqKW1vZCk7CiAjaWZkZWYgQ09ORklHX01PRFVMRV9VTkxPQUQKLQkJa2RiX3ByaW50ZigiJTRsZCAiLCBtb2R1bGVfcmVmY291bnQobW9kKSk7CisJCWtkYl9wcmludGYoIiU0ZCAiLCBtb2R1bGVfcmVmY291bnQobW9kKSk7CiAjZW5kaWYKIAkJaWYgKG1vZC0+c3RhdGUgPT0gTU9EVUxFX1NUQVRFX0dPSU5HKQogCQkJa2RiX3ByaW50ZigiIChVbmxvYWRpbmcpIik7CkBAIC0yMTU3LDYgKzIyMDEsOCBAQAogCWZvciAoc3RhcnRfY3B1ID0gLTEsIGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CiAJCWlmICghY3B1X29ubGluZShpKSkgewogCQkJc3RhdGUgPSAnRic7CS8qIGNwdSBpcyBvZmZsaW5lICovCisJCX0gZWxzZSBpZiAoIWtnZGJfaW5mb1tpXS5lbnRlcl9rZ2RiKSB7CisJCQlzdGF0ZSA9ICdEJzsJLyogY3B1IGlzIG9ubGluZSBidXQgdW5yZXNwb25zaXZlICovCiAJCX0gZWxzZSB7CiAJCQlzdGF0ZSA9ICcgJzsJLyogY3B1IGlzIHJlc3BvbmRpbmcgdG8ga2RiICovCiAJCQlpZiAoa2RiX3Rhc2tfc3RhdGVfY2hhcihLREJfVFNLKGkpKSA9PSAnSScpCkBAIC0yMjEwLDcgKzIyNTYsNyBAQAogCS8qCiAJICogVmFsaWRhdGUgY3B1bnVtCiAJICovCi0JaWYgKChjcHVudW0gPiBOUl9DUFVTKSB8fCAhY3B1X29ubGluZShjcHVudW0pKQorCWlmICgoY3B1bnVtID4gTlJfQ1BVUykgfHwgIWtnZGJfaW5mb1tjcHVudW1dLmVudGVyX2tnZGIpCiAJCXJldHVybiBLREJfQkFEQ1BVTlVNOwogCiAJZGJnX3N3aXRjaF9jcHUgPSBjcHVudW07CkBAIC0yMzc1LDYgKzI0MjEsOCBAQAogCQkJcmV0dXJuIDA7CiAJCWlmICgha3QtPmNtZF9uYW1lKQogCQkJY29udGludWU7CisJCWlmICgha2RiX2NoZWNrX2ZsYWdzKGt0LT5jbWRfZmxhZ3MsIGtkYl9jbWRfZW5hYmxlZCwgdHJ1ZSkpCisJCQljb250aW51ZTsKIAkJaWYgKHN0cmxlbihrdC0+Y21kX3VzYWdlKSA+IDIwKQogCQkJc3BhY2UgPSAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwogCQlrZGJfcHJpbnRmKCIlLTE1LjE1cyAlLTIwcyVzJXNcbiIsIGt0LT5jbWRfbmFtZSwKQEAgLTI2MjksNyArMjY3Nyw3IEBACiB9CiAKIC8qCi0gKiBrZGJfcmVnaXN0ZXJfcmVwZWF0IC0gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlZ2lzdGVyIGEga2VybmVsCisgKiBrZGJfcmVnaXN0ZXJfZmxhZ3MgLSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVnaXN0ZXIgYSBrZXJuZWwKICAqIAlkZWJ1Z2dlciBjb21tYW5kLgogICogSW5wdXRzOgogICoJY21kCUNvbW1hbmQgbmFtZQpAQCAtMjY0MSwxMiArMjY4OSwxMiBAQAogICoJemVybyBmb3Igc3VjY2Vzcywgb25lIGlmIGEgZHVwbGljYXRlIGNvbW1hbmQuCiAgKi8KICNkZWZpbmUga2RiX2NvbW1hbmRfZXh0ZW5kIDUwCS8qIGFyYml0cmFyeSAqLwotaW50IGtkYl9yZWdpc3Rlcl9yZXBlYXQoY2hhciAqY21kLAotCQkJa2RiX2Z1bmNfdCBmdW5jLAotCQkJY2hhciAqdXNhZ2UsCi0JCQljaGFyICpoZWxwLAotCQkJc2hvcnQgbWlubGVuLAotCQkJa2RiX3JlcGVhdF90IHJlcGVhdCkKK2ludCBrZGJfcmVnaXN0ZXJfZmxhZ3MoY2hhciAqY21kLAorCQkgICAgICAga2RiX2Z1bmNfdCBmdW5jLAorCQkgICAgICAgY2hhciAqdXNhZ2UsCisJCSAgICAgICBjaGFyICpoZWxwLAorCQkgICAgICAgc2hvcnQgbWlubGVuLAorCQkgICAgICAga2RiX2NtZGZsYWdzX3QgZmxhZ3MpCiB7CiAJaW50IGk7CiAJa2RidGFiX3QgKmtwOwpAQCAtMjY5NCwxOSArMjc0MiwxOCBAQAogCWtwLT5jbWRfZnVuYyAgID0gZnVuYzsKIAlrcC0+Y21kX3VzYWdlICA9IHVzYWdlOwogCWtwLT5jbWRfaGVscCAgID0gaGVscDsKLQlrcC0+Y21kX2ZsYWdzICA9IDA7CiAJa3AtPmNtZF9taW5sZW4gPSBtaW5sZW47Ci0Ja3AtPmNtZF9yZXBlYXQgPSByZXBlYXQ7CisJa3AtPmNtZF9mbGFncyAgPSBmbGFnczsKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa2RiX3JlZ2lzdGVyX3JlcGVhdCk7CitFWFBPUlRfU1lNQk9MX0dQTChrZGJfcmVnaXN0ZXJfZmxhZ3MpOwogCiAKIC8qCiAgKiBrZGJfcmVnaXN0ZXIgLSBDb21wYXRpYmlsaXR5IHJlZ2lzdGVyIGZ1bmN0aW9uIGZvciBjb21tYW5kcyB0aGF0IGRvCiAgKglub3QgbmVlZCB0byBzcGVjaWZ5IGEgcmVwZWF0IHN0YXRlLiAgRXF1aXZhbGVudCB0bwotICoJa2RiX3JlZ2lzdGVyX3JlcGVhdCB3aXRoIEtEQl9SRVBFQVRfTk9ORS4KKyAqCWtkYl9yZWdpc3Rlcl9mbGFncyB3aXRoIGZsYWdzIHNldCB0byAwLgogICogSW5wdXRzOgogICoJY21kCUNvbW1hbmQgbmFtZQogICoJZnVuYwlGdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kCkBAIC0yNzIxLDggKzI3NjgsNyBAQAogCSAgICAgY2hhciAqaGVscCwKIAkgICAgIHNob3J0IG1pbmxlbikKIHsKLQlyZXR1cm4ga2RiX3JlZ2lzdGVyX3JlcGVhdChjbWQsIGZ1bmMsIHVzYWdlLCBoZWxwLCBtaW5sZW4sCi0JCQkJICAgS0RCX1JFUEVBVF9OT05FKTsKKwlyZXR1cm4ga2RiX3JlZ2lzdGVyX2ZsYWdzKGNtZCwgZnVuYywgdXNhZ2UsIGhlbHAsIG1pbmxlbiwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrZGJfcmVnaXN0ZXIpOwogCkBAIC0yNzY0LDgwICsyODEwLDEwOSBAQAogCWZvcl9lYWNoX2tkYmNtZChrcCwgaSkKIAkJa3AtPmNtZF9uYW1lID0gTlVMTDsKIAotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoIm1kIiwga2RiX21kLCAiPHZhZGRyPiIsCisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJtZCIsIGtkYl9tZCwgIjx2YWRkcj4iLAogCSAgIkRpc3BsYXkgTWVtb3J5IENvbnRlbnRzLCBhbHNvIG1kV2NOLCBlLmcuIG1kOGMxIiwgMSwKLQkJCSAgICBLREJfUkVQRUFUX05PX0FSR1MpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoIm1kciIsIGtkYl9tZCwgIjx2YWRkcj4gPGJ5dGVzPiIsCi0JICAiRGlzcGxheSBSYXcgTWVtb3J5IiwgMCwgS0RCX1JFUEVBVF9OT19BUkdTKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJtZHAiLCBrZGJfbWQsICI8cGFkZHI+IDxieXRlcz4iLAotCSAgIkRpc3BsYXkgUGh5c2ljYWwgTWVtb3J5IiwgMCwgS0RCX1JFUEVBVF9OT19BUkdTKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJtZHMiLCBrZGJfbWQsICI8dmFkZHI+IiwKLQkgICJEaXNwbGF5IE1lbW9yeSBTeW1ib2xpY2FsbHkiLCAwLCBLREJfUkVQRUFUX05PX0FSR1MpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoIm1tIiwga2RiX21tLCAiPHZhZGRyPiA8Y29udGVudHM+IiwKLQkgICJNb2RpZnkgTWVtb3J5IENvbnRlbnRzIiwgMCwgS0RCX1JFUEVBVF9OT19BUkdTKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJnbyIsIGtkYl9nbywgIls8dmFkZHI+XSIsCi0JICAiQ29udGludWUgRXhlY3V0aW9uIiwgMSwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJyZCIsIGtkYl9yZCwgIiIsCi0JICAiRGlzcGxheSBSZWdpc3RlcnMiLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoInJtIiwga2RiX3JtLCAiPHJlZz4gPGNvbnRlbnRzPiIsCi0JICAiTW9kaWZ5IFJlZ2lzdGVycyIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiZWYiLCBrZGJfZWYsICI8dmFkZHI+IiwKLQkgICJEaXNwbGF5IGV4Y2VwdGlvbiBmcmFtZSIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiYnQiLCBrZGJfYnQsICJbPHZhZGRyPl0iLAotCSAgIlN0YWNrIHRyYWNlYmFjayIsIDEsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiYnRwIiwga2RiX2J0LCAiPHBpZD4iLAotCSAgIkRpc3BsYXkgc3RhY2sgZm9yIHByb2Nlc3MgPHBpZD4iLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImJ0YSIsIGtkYl9idCwgIltEfFJ8U3xUfEN8WnxFfFV8SXxNfEFdIiwKLQkgICJCYWNrdHJhY2UgYWxsIHByb2Nlc3NlcyBtYXRjaGluZyBzdGF0ZSBmbGFnIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJidGMiLCBrZGJfYnQsICIiLAotCSAgIkJhY2t0cmFjZSBjdXJyZW50IHByb2Nlc3Mgb24gZWFjaCBjcHUiLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImJ0dCIsIGtkYl9idCwgIjx2YWRkcj4iLAorCSAgS0RCX0VOQUJMRV9NRU1fUkVBRCB8IEtEQl9SRVBFQVRfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJtZHIiLCBrZGJfbWQsICI8dmFkZHI+IDxieXRlcz4iLAorCSAgIkRpc3BsYXkgUmF3IE1lbW9yeSIsIDAsCisJICBLREJfRU5BQkxFX01FTV9SRUFEIHwgS0RCX1JFUEVBVF9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoIm1kcCIsIGtkYl9tZCwgIjxwYWRkcj4gPGJ5dGVzPiIsCisJICAiRGlzcGxheSBQaHlzaWNhbCBNZW1vcnkiLCAwLAorCSAgS0RCX0VOQUJMRV9NRU1fUkVBRCB8IEtEQl9SRVBFQVRfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJtZHMiLCBrZGJfbWQsICI8dmFkZHI+IiwKKwkgICJEaXNwbGF5IE1lbW9yeSBTeW1ib2xpY2FsbHkiLCAwLAorCSAgS0RCX0VOQUJMRV9NRU1fUkVBRCB8IEtEQl9SRVBFQVRfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJtbSIsIGtkYl9tbSwgIjx2YWRkcj4gPGNvbnRlbnRzPiIsCisJICAiTW9kaWZ5IE1lbW9yeSBDb250ZW50cyIsIDAsCisJICBLREJfRU5BQkxFX01FTV9XUklURSB8IEtEQl9SRVBFQVRfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJnbyIsIGtkYl9nbywgIls8dmFkZHI+XSIsCisJICAiQ29udGludWUgRXhlY3V0aW9uIiwgMSwKKwkgIEtEQl9FTkFCTEVfUkVHX1dSSVRFIHwgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRV9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoInJkIiwga2RiX3JkLCAiIiwKKwkgICJEaXNwbGF5IFJlZ2lzdGVycyIsIDAsCisJICBLREJfRU5BQkxFX1JFR19SRUFEKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoInJtIiwga2RiX3JtLCAiPHJlZz4gPGNvbnRlbnRzPiIsCisJICAiTW9kaWZ5IFJlZ2lzdGVycyIsIDAsCisJICBLREJfRU5BQkxFX1JFR19XUklURSk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJlZiIsIGtkYl9lZiwgIjx2YWRkcj4iLAorCSAgIkRpc3BsYXkgZXhjZXB0aW9uIGZyYW1lIiwgMCwKKwkgIEtEQl9FTkFCTEVfTUVNX1JFQUQpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiYnQiLCBrZGJfYnQsICJbPHZhZGRyPl0iLAorCSAgIlN0YWNrIHRyYWNlYmFjayIsIDEsCisJICBLREJfRU5BQkxFX01FTV9SRUFEIHwgS0RCX0VOQUJMRV9JTlNQRUNUX05PX0FSR1MpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiYnRwIiwga2RiX2J0LCAiPHBpZD4iLAorCSAgIkRpc3BsYXkgc3RhY2sgZm9yIHByb2Nlc3MgPHBpZD4iLCAwLAorCSAgS0RCX0VOQUJMRV9JTlNQRUNUKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImJ0YSIsIGtkYl9idCwgIltEfFJ8U3xUfEN8WnxFfFV8SXxNfEFdIiwKKwkgICJCYWNrdHJhY2UgYWxsIHByb2Nlc3NlcyBtYXRjaGluZyBzdGF0ZSBmbGFnIiwgMCwKKwkgIEtEQl9FTkFCTEVfSU5TUEVDVCk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJidGMiLCBrZGJfYnQsICIiLAorCSAgIkJhY2t0cmFjZSBjdXJyZW50IHByb2Nlc3Mgb24gZWFjaCBjcHUiLCAwLAorCSAgS0RCX0VOQUJMRV9JTlNQRUNUKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImJ0dCIsIGtkYl9idCwgIjx2YWRkcj4iLAogCSAgIkJhY2t0cmFjZSBwcm9jZXNzIGdpdmVuIGl0cyBzdHJ1Y3QgdGFzayBhZGRyZXNzIiwgMCwKLQkJCSAgICBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImVudiIsIGtkYl9lbnYsICIiLAotCSAgIlNob3cgZW52aXJvbm1lbnQgdmFyaWFibGVzIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJzZXQiLCBrZGJfc2V0LCAiIiwKLQkgICJTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJoZWxwIiwga2RiX2hlbHAsICIiLAotCSAgIkRpc3BsYXkgSGVscCBNZXNzYWdlIiwgMSwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCI/Iiwga2RiX2hlbHAsICIiLAotCSAgIkRpc3BsYXkgSGVscCBNZXNzYWdlIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJjcHUiLCBrZGJfY3B1LCAiPGNwdW51bT4iLAotCSAgIlN3aXRjaCB0byBuZXcgY3B1IiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJrZ2RiIiwga2RiX2tnZGIsICIiLAotCSAgIkVudGVyIGtnZGIgbW9kZSIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgicHMiLCBrZGJfcHMsICJbPGZsYWdzPnxBXSIsCi0JICAiRGlzcGxheSBhY3RpdmUgdGFzayBsaXN0IiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJwaWQiLCBrZGJfcGlkLCAiPHBpZG51bT4iLAotCSAgIlN3aXRjaCB0byBhbm90aGVyIHRhc2siLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoInJlYm9vdCIsIGtkYl9yZWJvb3QsICIiLAotCSAgIlJlYm9vdCB0aGUgbWFjaGluZSBpbW1lZGlhdGVseSIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7CisJICBLREJfRU5BQkxFX01FTV9SRUFEIHwgS0RCX0VOQUJMRV9JTlNQRUNUX05PX0FSR1MpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiZW52Iiwga2RiX2VudiwgIiIsCisJICAiU2hvdyBlbnZpcm9ubWVudCB2YXJpYWJsZXMiLCAwLAorCSAgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJzZXQiLCBrZGJfc2V0LCAiIiwKKwkgICJTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIiwgMCwKKwkgIEtEQl9FTkFCTEVfQUxXQVlTX1NBRkUpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiaGVscCIsIGtkYl9oZWxwLCAiIiwKKwkgICJEaXNwbGF5IEhlbHAgTWVzc2FnZSIsIDEsCisJICBLREJfRU5BQkxFX0FMV0FZU19TQUZFKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoIj8iLCBrZGJfaGVscCwgIiIsCisJICAiRGlzcGxheSBIZWxwIE1lc3NhZ2UiLCAwLAorCSAgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJjcHUiLCBrZGJfY3B1LCAiPGNwdW51bT4iLAorCSAgIlN3aXRjaCB0byBuZXcgY3B1IiwgMCwKKwkgIEtEQl9FTkFCTEVfQUxXQVlTX1NBRkVfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJrZ2RiIiwga2RiX2tnZGIsICIiLAorCSAgIkVudGVyIGtnZGIgbW9kZSIsIDAsIDApOworCWtkYl9yZWdpc3Rlcl9mbGFncygicHMiLCBrZGJfcHMsICJbPGZsYWdzPnxBXSIsCisJICAiRGlzcGxheSBhY3RpdmUgdGFzayBsaXN0IiwgMCwKKwkgIEtEQl9FTkFCTEVfSU5TUEVDVCk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJwaWQiLCBrZGJfcGlkLCAiPHBpZG51bT4iLAorCSAgIlN3aXRjaCB0byBhbm90aGVyIHRhc2siLCAwLAorCSAgS0RCX0VOQUJMRV9JTlNQRUNUKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoInJlYm9vdCIsIGtkYl9yZWJvb3QsICIiLAorCSAgIlJlYm9vdCB0aGUgbWFjaGluZSBpbW1lZGlhdGVseSIsIDAsCisJICBLREJfRU5BQkxFX1JFQk9PVCk7CiAjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJsc21vZCIsIGtkYl9sc21vZCwgIiIsCi0JICAiTGlzdCBsb2FkZWQga2VybmVsIG1vZHVsZXMiLCAwLCBLREJfUkVQRUFUX05PTkUpOworCWtkYl9yZWdpc3Rlcl9mbGFncygibHNtb2QiLCBrZGJfbHNtb2QsICIiLAorCSAgIkxpc3QgbG9hZGVkIGtlcm5lbCBtb2R1bGVzIiwgMCwKKwkgIEtEQl9FTkFCTEVfSU5TUEVDVCk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJzciIsIGtkYl9zciwgIjxrZXk+IiwKLQkgICJNYWdpYyBTeXNScSBrZXkiLCAwLCBLREJfUkVQRUFUX05PTkUpOworCWtkYl9yZWdpc3Rlcl9mbGFncygic3IiLCBrZGJfc3IsICI8a2V5PiIsCisJICAiTWFnaWMgU3lzUnEga2V5IiwgMCwKKwkgIEtEQl9FTkFCTEVfQUxXQVlTX1NBRkUpOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfUFJJTlRLKQotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImRtZXNnIiwga2RiX2RtZXNnLCAiW2xpbmVzXSIsCi0JICAiRGlzcGxheSBzeXNsb2cgYnVmZmVyIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImRtZXNnIiwga2RiX2RtZXNnLCAiW2xpbmVzXSIsCisJICAiRGlzcGxheSBzeXNsb2cgYnVmZmVyIiwgMCwKKwkgIEtEQl9FTkFCTEVfQUxXQVlTX1NBRkUpOwogI2VuZGlmCiAJaWYgKGFyY2hfa2dkYl9vcHMuZW5hYmxlX25taSkgewotCQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJkaXNhYmxlX25taSIsIGtkYl9kaXNhYmxlX25taSwgIiIsCi0JCSAgIkRpc2FibGUgTk1JIGVudHJ5IHRvIEtEQiIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7CisJCWtkYl9yZWdpc3Rlcl9mbGFncygiZGlzYWJsZV9ubWkiLCBrZGJfZGlzYWJsZV9ubWksICIiLAorCQkgICJEaXNhYmxlIE5NSSBlbnRyeSB0byBLREIiLCAwLAorCQkgIEtEQl9FTkFCTEVfQUxXQVlTX1NBRkUpOwogCX0KLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJkZWZjbWQiLCBrZGJfZGVmY21kLCAibmFtZSBcInVzYWdlXCIgXCJoZWxwXCIiLAotCSAgIkRlZmluZSBhIHNldCBvZiBjb21tYW5kcywgZG93biB0byBlbmRlZmNtZCIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgia2lsbCIsIGtkYl9raWxsLCAiPC1zaWduYWw+IDxwaWQ+IiwKLQkgICJTZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgic3VtbWFyeSIsIGtkYl9zdW1tYXJ5LCAiIiwKLQkgICJTdW1tYXJpemUgdGhlIHN5c3RlbSIsIDQsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgicGVyX2NwdSIsIGtkYl9wZXJfY3B1LCAiPHN5bT4gWzxieXRlcz5dIFs8Y3B1Pl0iLAotCSAgIkRpc3BsYXkgcGVyX2NwdSB2YXJpYWJsZXMiLCAzLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImdyZXBoZWxwIiwga2RiX2dyZXBfaGVscCwgIiIsCi0JICAiRGlzcGxheSBoZWxwIG9uIHwgZ3JlcCIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJkZWZjbWQiLCBrZGJfZGVmY21kLCAibmFtZSBcInVzYWdlXCIgXCJoZWxwXCIiLAorCSAgIkRlZmluZSBhIHNldCBvZiBjb21tYW5kcywgZG93biB0byBlbmRlZmNtZCIsIDAsCisJICBLREJfRU5BQkxFX0FMV0FZU19TQUZFKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImtpbGwiLCBrZGJfa2lsbCwgIjwtc2lnbmFsPiA8cGlkPiIsCisJICAiU2VuZCBhIHNpZ25hbCB0byBhIHByb2Nlc3MiLCAwLAorCSAgS0RCX0VOQUJMRV9TSUdOQUwpOworCWtkYl9yZWdpc3Rlcl9mbGFncygic3VtbWFyeSIsIGtkYl9zdW1tYXJ5LCAiIiwKKwkgICJTdW1tYXJpemUgdGhlIHN5c3RlbSIsIDQsCisJICBLREJfRU5BQkxFX0FMV0FZU19TQUZFKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoInBlcl9jcHUiLCBrZGJfcGVyX2NwdSwgIjxzeW0+IFs8Ynl0ZXM+XSBbPGNwdT5dIiwKKwkgICJEaXNwbGF5IHBlcl9jcHUgdmFyaWFibGVzIiwgMywKKwkgIEtEQl9FTkFCTEVfTUVNX1JFQUQpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiZ3JlcGhlbHAiLCBrZGJfZ3JlcF9oZWxwLCAiIiwKKwkgICJEaXNwbGF5IGhlbHAgb24gfCBncmVwIiwgMCwKKwkgIEtEQl9FTkFCTEVfQUxXQVlTX1NBRkUpOwogfQogCiAvKiBFeGVjdXRlIGFueSBjb21tYW5kcyBkZWZpbmVkIGluIGtkYl9jbWRzLiAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX3ByaXZhdGUuaCBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX3ByaXZhdGUuaAppbmRleCA3YWZkM2M4Li5lYWFjZDE2IDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9wcml2YXRlLmgKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfcHJpdmF0ZS5oCkBAIC0xNzIsMTAgKzE3Miw5IEBACiAJa2RiX2Z1bmNfdCBjbWRfZnVuYzsJCS8qIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgY29tbWFuZCAqLwogCWNoYXIgICAgKmNtZF91c2FnZTsJCS8qIFVzYWdlIFN0cmluZyBmb3IgdGhpcyBjb21tYW5kICovCiAJY2hhciAgICAqY21kX2hlbHA7CQkvKiBIZWxwIG1lc3NhZ2UgZm9yIHRoaXMgY29tbWFuZCAqLwotCXNob3J0ICAgIGNtZF9mbGFnczsJCS8qIFBhcnNpbmcgZmxhZ3MgKi8KIAlzaG9ydCAgICBjbWRfbWlubGVuOwkJLyogTWluaW11bSBsZWdhbCAjIGNvbW1hbmQKIAkJCQkJICogY2hhcnMgcmVxdWlyZWQgKi8KLQlrZGJfcmVwZWF0X3QgY21kX3JlcGVhdDsJLyogRG9lcyBjb21tYW5kIGF1dG8gcmVwZWF0IG9uIGVudGVyPyAqLworCWtkYl9jbWRmbGFnc190IGNtZF9mbGFnczsJLyogQ29tbWFuZCBiZWhhdmlvdXIgZmxhZ3MgKi8KIH0ga2RidGFiX3Q7CiAKIGV4dGVybiBpbnQga2RiX2J0KGludCwgY29uc3QgY2hhciAqKik7CS8qIEtEQiBkaXNwbGF5IGJhY2sgdHJhY2UgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvY29yZS5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKaW5kZXggNGMxZWU3Zi4uMTllZmNmMSAxMDA2NDQKLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmMKKysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKQEAgLTQ0NjEsMTggKzQ0NjEsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9zYW1wbGVfcmVnc191c2VyKHN0cnVjdCBwZXJmX3JlZ3MgKnJlZ3NfdXNlciwKLQkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVnc191c2VyX2NvcHkpCiB7Ci0JaWYgKCF1c2VyX21vZGUocmVncykpIHsKLQkJaWYgKGN1cnJlbnQtPm1tKQotCQkJcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKLQkJZWxzZQotCQkJcmVncyA9IE5VTEw7Ci0JfQotCi0JaWYgKHJlZ3MpIHsKLQkJcmVnc191c2VyLT5hYmkgID0gcGVyZl9yZWdfYWJpKGN1cnJlbnQpOworCWlmICh1c2VyX21vZGUocmVncykpIHsKKwkJcmVnc191c2VyLT5hYmkgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7CiAJCXJlZ3NfdXNlci0+cmVncyA9IHJlZ3M7CisJfSBlbHNlIGlmIChjdXJyZW50LT5tbSkgeworCQlwZXJmX2dldF9yZWdzX3VzZXIocmVnc191c2VyLCByZWdzLCByZWdzX3VzZXJfY29weSk7CiAJfSBlbHNlIHsKIAkJcmVnc191c2VyLT5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FOwogCQlyZWdzX3VzZXItPnJlZ3MgPSBOVUxMOwpAQCAtNDk1MSw3ICs0OTQ3LDggQEAKIAl9CiAKIAlpZiAoc2FtcGxlX3R5cGUgJiAoUEVSRl9TQU1QTEVfUkVHU19VU0VSIHwgUEVSRl9TQU1QTEVfU1RBQ0tfVVNFUikpCi0JCXBlcmZfc2FtcGxlX3JlZ3NfdXNlcigmZGF0YS0+cmVnc191c2VyLCByZWdzKTsKKwkJcGVyZl9zYW1wbGVfcmVnc191c2VyKCZkYXRhLT5yZWdzX3VzZXIsIHJlZ3MsCisJCQkJICAgICAgJmRhdGEtPnJlZ3NfdXNlcl9jb3B5KTsKIAogCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfVVNFUikgewogCQkvKiByZWdzIGR1bXAgQUJJIGluZm8gKi8KQEAgLTY3NzksNyArNjc3Niw2IEBACiAJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoJmNwdWN0eC0+Y3R4KTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmNwdWN0eC0+Y3R4Lm11dGV4LCAmY3B1Y3R4X211dGV4KTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmNwdWN0eC0+Y3R4LmxvY2ssICZjcHVjdHhfbG9jayk7Ci0JCWNwdWN0eC0+Y3R4LnR5cGUgPSBjcHVfY29udGV4dDsKIAkJY3B1Y3R4LT5jdHgucG11ID0gcG11OwogCiAJCV9fcGVyZl9jcHVfaHJ0aW1lcl9pbml0KGNwdWN0eCwgY3B1KTsKQEAgLTc0MjMsNyArNzQxOSwxOSBAQAogCQkgKiB0YXNrIG9yIENQVSBjb250ZXh0OgogCQkgKi8KIAkJaWYgKG1vdmVfZ3JvdXApIHsKLQkJCWlmIChncm91cF9sZWFkZXItPmN0eC0+dHlwZSAhPSBjdHgtPnR5cGUpCisJCQkvKgorCQkJICogTWFrZSBzdXJlIHdlJ3JlIGJvdGggb24gdGhlIHNhbWUgdGFzaywgb3IgYm90aAorCQkJICogcGVyLWNwdSBldmVudHMuCisJCQkgKi8KKwkJCWlmIChncm91cF9sZWFkZXItPmN0eC0+dGFzayAhPSBjdHgtPnRhc2spCisJCQkJZ290byBlcnJfY29udGV4dDsKKworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB3ZSdyZSBib3RoIGV2ZW50cyBmb3IgdGhlIHNhbWUgQ1BVOworCQkJICogZ3JvdXBpbmcgZXZlbnRzIGZvciBkaWZmZXJlbnQgQ1BVcyBpcyBicm9rZW47IHNpbmNlCisJCQkgKiB5b3UgY2FuIG5ldmVyIGNvbmN1cnJlbnRseSBzY2hlZHVsZSB0aGVtIGFueWhvdy4KKwkJCSAqLworCQkJaWYgKGdyb3VwX2xlYWRlci0+Y3B1ICE9IGV2ZW50LT5jcHUpCiAJCQkJZ290byBlcnJfY29udGV4dDsKIAkJfSBlbHNlIHsKIAkJCWlmIChncm91cF9sZWFkZXItPmN0eCAhPSBjdHgpCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCAxZWE0MzY5Li42ODA2YzU1IDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTEyODcsOSArMTI4NywxNSBAQAogc3RhdGljIGludCB3YWl0X2NvbnNpZGVyX3Rhc2soc3RydWN0IHdhaXRfb3B0cyAqd28sIGludCBwdHJhY2UsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwKQogeworCS8qCisJICogV2UgY2FuIHJhY2Ugd2l0aCB3YWl0X3Rhc2tfem9tYmllKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KKwkgKiBFbnN1cmUgdGhhdCBFWElUX1pPTUJJRSAtPiBFWElUX0RFQUQvRVhJVF9UUkFDRSB0cmFuc2l0aW9uCisJICogY2FuJ3QgY29uZnVzZSB0aGUgY2hlY2tzIGJlbG93LgorCSAqLworCWludCBleGl0X3N0YXRlID0gQUNDRVNTX09OQ0UocC0+ZXhpdF9zdGF0ZSk7CiAJaW50IHJldDsKIAotCWlmICh1bmxpa2VseShwLT5leGl0X3N0YXRlID09IEVYSVRfREVBRCkpCisJaWYgKHVubGlrZWx5KGV4aXRfc3RhdGUgPT0gRVhJVF9ERUFEKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBlbGlnaWJsZV9jaGlsZCh3bywgcCk7CkBAIC0xMzEwLDcgKzEzMTYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAodW5saWtlbHkocC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1RSQUNFKSkgeworCWlmICh1bmxpa2VseShleGl0X3N0YXRlID09IEVYSVRfVFJBQ0UpKSB7CiAJCS8qCiAJCSAqIHB0cmFjZSA9PSAwIG1lYW5zIHdlIGFyZSB0aGUgbmF0dXJhbCBwYXJlbnQuIEluIHRoaXMgY2FzZQogCQkgKiB3ZSBzaG91bGQgY2xlYXIgbm90YXNrX2Vycm9yLCBkZWJ1Z2dlciB3aWxsIG5vdGlmeSB1cy4KQEAgLTEzMzcsNyArMTM0Myw3IEBACiAJfQogCiAJLyogc2xheSB6b21iaWU/ICovCi0JaWYgKHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIHsKKwlpZiAoZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkgewogCQkvKiB3ZSBkb24ndCByZWFwIGdyb3VwIGxlYWRlcnMgd2l0aCBzdWJ0aHJlYWRzICovCiAJCWlmICghZGVsYXlfZ3JvdXBfbGVhZGVyKHApKSB7CiAJCQkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMDZmNTgzMC4uZWU2MTk5MiAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogc3RhdGljIHZvaWQgZnJlZV9pbnNuX3BhZ2Uodm9pZCAqcGFnZSkKIHsKLQltb2R1bGVfZnJlZShOVUxMLCBwYWdlKTsKKwltb2R1bGVfbWVtZnJlZShwYWdlKTsKIH0KIAogc3RydWN0IGtwcm9iZV9pbnNuX2NhY2hlIGtwcm9iZV9pbnNuX3Nsb3RzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbXV0ZXgtZGVidWcuYyBiL2tlcm5lbC9sb2NraW5nL211dGV4LWRlYnVnLmMKaW5kZXggNWNmNjczMS4uM2VmMzczNiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbXV0ZXgtZGVidWcuYworKysgYi9rZXJuZWwvbG9ja2luZy9tdXRleC1kZWJ1Zy5jCkBAIC04MCwxMyArODAsMTMgQEAKIAkJCURFQlVHX0xPQ0tTX1dBUk5fT04obG9jay0+b3duZXIgIT0gY3VycmVudCk7CiAKIAkJREVCVUdfTE9DS1NfV0FSTl9PTighbG9jay0+d2FpdF9saXN0LnByZXYgJiYgIWxvY2stPndhaXRfbGlzdC5uZXh0KTsKLQkJbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7CiAJfQogCiAJLyoKIAkgKiBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpIGlzIGV4cGxpY2l0bHkgMCBmb3IgZGVidWcKIAkgKiBtdXRleGVzIHNvIHRoYXQgd2UgY2FuIGRvIGl0IGhlcmUgYWZ0ZXIgd2UndmUgdmVyaWZpZWQgc3RhdGUuCiAJICovCisJbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7CiAJYXRvbWljX3NldCgmbG9jay0+Y291bnQsIDEpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMzk2NTUxMS4uZDg1NmU5NiAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtNzcyLDkgKzc3MiwxOCBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBsb25nIG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpCisvKioKKyAqIG1vZHVsZV9yZWZjb3VudCAtIHJldHVybiB0aGUgcmVmY291bnQgb3IgLTEgaWYgdW5sb2FkaW5nCisgKgorICogQG1vZDoJdGhlIG1vZHVsZSB3ZSdyZSBjaGVja2luZworICoKKyAqIFJldHVybnM6CisgKgktMSBpZiB0aGUgbW9kdWxlIGlzIGluIHRoZSBwcm9jZXNzIG9mIHVubG9hZGluZworICoJb3RoZXJ3aXNlIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyBpbiB0aGUga2VybmVsIHRvIHRoZSBtb2R1bGUKKyAqLworaW50IG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19yZWFkKCZtb2QtPnJlZmNudCkgLSBNT0RVTEVfUkVGX0JBU0U7CisJcmV0dXJuIGF0b21pY19yZWFkKCZtb2QtPnJlZmNudCkgLSBNT0RVTEVfUkVGX0JBU0U7CiB9CiBFWFBPUlRfU1lNQk9MKG1vZHVsZV9yZWZjb3VudCk7CiAKQEAgLTg1Niw3ICs4NjUsNyBAQAogCXN0cnVjdCBtb2R1bGVfdXNlICp1c2U7CiAJaW50IHByaW50ZWRfc29tZXRoaW5nID0gMDsKIAotCXNlcV9wcmludGYobSwgIiAlbHUgIiwgbW9kdWxlX3JlZmNvdW50KG1vZCkpOworCXNlcV9wcmludGYobSwgIiAlaSAiLCBtb2R1bGVfcmVmY291bnQobW9kKSk7CiAKIAkvKgogCSAqIEFsd2F5cyBpbmNsdWRlIGEgdHJhaWxpbmcgLCBzbyB1c2Vyc3BhY2UgY2FuIGRpZmZlcmVudGlhdGUKQEAgLTkwOCw3ICs5MTcsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19yZWZjbnQoc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1hdHRyLAogCQkJICAgc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptaywgY2hhciAqYnVmZmVyKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVsdVxuIiwgbW9kdWxlX3JlZmNvdW50KG1rLT5tb2QpKTsKKwlyZXR1cm4gc3ByaW50ZihidWZmZXIsICIlaVxuIiwgbW9kdWxlX3JlZmNvdW50KG1rLT5tb2QpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlIG1vZGluZm9fcmVmY250ID0KQEAgLTE3OTUsNyArMTgwNCw3IEBACiBzdGF0aWMgdm9pZCB1bnNldF9tb2R1bGVfaW5pdF9yb19ueChzdHJ1Y3QgbW9kdWxlICptb2QpIHsgfQogI2VuZGlmCiAKLXZvaWQgX193ZWFrIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3ZvaWQgX193ZWFrIG1vZHVsZV9tZW1mcmVlKHZvaWQgKm1vZHVsZV9yZWdpb24pCiB7CiAJdmZyZWUobW9kdWxlX3JlZ2lvbik7CiB9CkBAIC0xODA0LDYgKzE4MTMsMTAgQEAKIHsKIH0KIAordm9pZCBfX3dlYWsgbW9kdWxlX2FyY2hfZnJlZWluZ19pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKK30KKwogLyogRnJlZSBhIG1vZHVsZSwgcmVtb3ZlIGZyb20gbGlzdHMsIGV0Yy4gKi8KIHN0YXRpYyB2b2lkIGZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKQEAgLTE4NDEsNyArMTg1NCw4IEBACiAKIAkvKiBUaGlzIG1heSBiZSBOVUxMLCBidXQgdGhhdCdzIE9LICovCiAJdW5zZXRfbW9kdWxlX2luaXRfcm9fbngobW9kKTsKLQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOworCW1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpOworCW1vZHVsZV9tZW1mcmVlKG1vZC0+bW9kdWxlX2luaXQpOwogCWtmcmVlKG1vZC0+YXJncyk7CiAJcGVyY3B1X21vZGZyZWUobW9kKTsKIApAQCAtMTg1MCw3ICsxODY0LDcgQEAKIAogCS8qIEZpbmFsbHksIGZyZWUgdGhlIGNvcmUgKGNvbnRhaW5pbmcgdGhlIG1vZHVsZSBzdHJ1Y3R1cmUpICovCiAJdW5zZXRfbW9kdWxlX2NvcmVfcm9fbngobW9kKTsKLQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCW1vZHVsZV9tZW1mcmVlKG1vZC0+bW9kdWxlX2NvcmUpOwogCiAjaWZkZWYgQ09ORklHX01QVQogCXVwZGF0ZV9wcm90ZWN0aW9ucyhjdXJyZW50LT5tbSk7CkBAIC0yNzg1LDcgKzI3OTksNyBAQAogCQkgKi8KIAkJa21lbWxlYWtfaWdub3JlKHB0cik7CiAJCWlmICghcHRyKSB7Ci0JCQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCQkJbW9kdWxlX21lbWZyZWUobW9kLT5tb2R1bGVfY29yZSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQltZW1zZXQocHRyLCAwLCBtb2QtPmluaXRfc2l6ZSk7CkBAIC0yOTMwLDggKzI5NDQsOSBAQAogc3RhdGljIHZvaWQgbW9kdWxlX2RlYWxsb2NhdGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogCXBlcmNwdV9tb2RmcmVlKG1vZCk7Ci0JbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKLQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCW1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpOworCW1vZHVsZV9tZW1mcmVlKG1vZC0+bW9kdWxlX2luaXQpOworCW1vZHVsZV9tZW1mcmVlKG1vZC0+bW9kdWxlX2NvcmUpOwogfQogCiBpbnQgX193ZWFrIG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLApAQCAtMjk4MywxMCArMjk5OCwzMSBAQAogI2VuZGlmCiB9CiAKKy8qIEZvciBmcmVlaW5nIG1vZHVsZV9pbml0IG9uIHN1Y2Nlc3MsIGluIGNhc2Uga2FsbHN5bXMgdHJhdmVyc2luZyAqLworc3RydWN0IG1vZF9pbml0ZnJlZSB7CisJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwl2b2lkICptb2R1bGVfaW5pdDsKK307CisKK3N0YXRpYyB2b2lkIGRvX2ZyZWVfaW5pdChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG1vZF9pbml0ZnJlZSAqbSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbW9kX2luaXRmcmVlLCByY3UpOworCW1vZHVsZV9tZW1mcmVlKG0tPm1vZHVsZV9pbml0KTsKKwlrZnJlZShtKTsKK30KKwogLyogVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGhhcHBlbnMgKi8KIHN0YXRpYyBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCWludCByZXQgPSAwOworCXN0cnVjdCBtb2RfaW5pdGZyZWUgKmZyZWVpbml0OworCisJZnJlZWluaXQgPSBrbWFsbG9jKHNpemVvZigqZnJlZWluaXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZyZWVpbml0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisJZnJlZWluaXQtPm1vZHVsZV9pbml0ID0gbW9kLT5tb2R1bGVfaW5pdDsKIAogCS8qCiAJICogV2Ugd2FudCB0byBmaW5kIG91dCB3aGV0aGVyIEBtb2QgdXNlcyBhc3luYyBkdXJpbmcgaW5pdC4gIENsZWFyCkBAIC0yOTk5LDE4ICszMDM1LDcgQEAKIAlpZiAobW9kLT5pbml0ICE9IE5VTEwpCiAJCXJldCA9IGRvX29uZV9pbml0Y2FsbChtb2QtPmluaXQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCS8qCi0JCSAqIEluaXQgcm91dGluZSBmYWlsZWQ6IGFib3J0LiAgVHJ5IHRvIHByb3RlY3QgdXMgZnJvbQotCQkgKiBidWdneSByZWZjb3VudGVycy4KLQkJICovCi0JCW1vZC0+c3RhdGUgPSBNT0RVTEVfU1RBVEVfR09JTkc7Ci0JCXN5bmNocm9uaXplX3NjaGVkKCk7Ci0JCW1vZHVsZV9wdXQobW9kKTsKLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbW9kdWxlX25vdGlmeV9saXN0LAotCQkJCQkgICAgIE1PRFVMRV9TVEFURV9HT0lORywgbW9kKTsKLQkJZnJlZV9tb2R1bGUobW9kKTsKLQkJd2FrZV91cF9hbGwoJm1vZHVsZV93cSk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZmFpbF9mcmVlX2ZyZWVpbml0OwogCX0KIAlpZiAocmV0ID4gMCkgewogCQlwcl93YXJuKCIlczogJyVzJy0+aW5pdCBzdXNwaWNpb3VzbHkgcmV0dXJuZWQgJWQsIGl0IHNob3VsZCAiCkBAIC0zMDU1LDE1ICszMDgwLDM1IEBACiAJbW9kLT5zdHJ0YWIgPSBtb2QtPmNvcmVfc3RydGFiOwogI2VuZGlmCiAJdW5zZXRfbW9kdWxlX2luaXRfcm9fbngobW9kKTsKLQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOworCW1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpOwogCW1vZC0+bW9kdWxlX2luaXQgPSBOVUxMOwogCW1vZC0+aW5pdF9zaXplID0gMDsKIAltb2QtPmluaXRfcm9fc2l6ZSA9IDA7CiAJbW9kLT5pbml0X3RleHRfc2l6ZSA9IDA7CisJLyoKKwkgKiBXZSB3YW50IHRvIGZyZWUgbW9kdWxlX2luaXQsIGJ1dCBiZSBhd2FyZSB0aGF0IGthbGxzeW1zIG1heSBiZQorCSAqIHdhbGtpbmcgdGhpcyB3aXRoIHByZWVtcHQgZGlzYWJsZWQuICBJbiBhbGwgdGhlIGZhaWx1cmUgcGF0aHMsCisJICogd2UgY2FsbCBzeW5jaHJvbml6ZV9yY3Uvc3luY2hyb25pemVfc2NoZWQsIGJ1dCB3ZSBkb24ndCB3YW50CisJICogdG8gc2xvdyBkb3duIHRoZSBzdWNjZXNzIHBhdGgsIHNvIHVzZSBhY3R1YWwgUkNVIGhlcmUuCisJICovCisJY2FsbF9yY3UoJmZyZWVpbml0LT5yY3UsIGRvX2ZyZWVfaW5pdCk7CiAJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCXdha2VfdXBfYWxsKCZtb2R1bGVfd3EpOwogCiAJcmV0dXJuIDA7CisKK2ZhaWxfZnJlZV9mcmVlaW5pdDoKKwlrZnJlZShmcmVlaW5pdCk7CitmYWlsOgorCS8qIFRyeSB0byBwcm90ZWN0IHVzIGZyb20gYnVnZ3kgcmVmY291bnRlcnMuICovCisJbW9kLT5zdGF0ZSA9IE1PRFVMRV9TVEFURV9HT0lORzsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworCW1vZHVsZV9wdXQobW9kKTsKKwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZtb2R1bGVfbm90aWZ5X2xpc3QsCisJCQkJICAgICBNT0RVTEVfU1RBVEVfR09JTkcsIG1vZCk7CisJZnJlZV9tb2R1bGUobW9kKTsKKwl3YWtlX3VwX2FsbCgmbW9kdWxlX3dxKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG1heV9pbml0X21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IDBhZjliMmMuLjcyOGUwNWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTY0MiwxMiArNjQyLDE1IEBACiAJbWstPm1wLT5ncnAuYXR0cnMgPSBuZXdfYXR0cnM7CiAKIAkvKiBUYWNrIG5ldyBvbmUgb24gdGhlIGVuZC4gKi8KKwltZW1zZXQoJm1rLT5tcC0+YXR0cnNbbWstPm1wLT5udW1dLCAwLCBzaXplb2YobWstPm1wLT5hdHRyc1swXSkpOwogCXN5c2ZzX2F0dHJfaW5pdCgmbWstPm1wLT5hdHRyc1ttay0+bXAtPm51bV0ubWF0dHIuYXR0cik7CiAJbWstPm1wLT5hdHRyc1ttay0+bXAtPm51bV0ucGFyYW0gPSBrcDsKIAltay0+bXAtPmF0dHJzW21rLT5tcC0+bnVtXS5tYXR0ci5zaG93ID0gcGFyYW1fYXR0cl9zaG93OwogCS8qIERvIG5vdCBhbGxvdyBydW50aW1lIERBQyBjaGFuZ2VzIHRvIG1ha2UgcGFyYW0gd3JpdGFibGUuICovCiAJaWYgKChrcC0+cGVybSAmIChTX0lXVVNSIHwgU19JV0dSUCB8IFNfSVdPVEgpKSAhPSAwKQogCQltay0+bXAtPmF0dHJzW21rLT5tcC0+bnVtXS5tYXR0ci5zdG9yZSA9IHBhcmFtX2F0dHJfc3RvcmU7CisJZWxzZQorCQltay0+bXAtPmF0dHJzW21rLT5tcC0+bnVtXS5tYXR0ci5zdG9yZSA9IE5VTEw7CiAJbWstPm1wLT5hdHRyc1ttay0+bXAtPm51bV0ubWF0dHIuYXR0ci5uYW1lID0gKGNoYXIgKiluYW1lOwogCW1rLT5tcC0+YXR0cnNbbWstPm1wLT5udW1dLm1hdHRyLmF0dHIubW9kZSA9IGtwLT5wZXJtOwogCW1rLT5tcC0+bnVtKys7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmFuZ2UuYyBiL2tlcm5lbC9yYW5nZS5jCmluZGV4IDMyMmVhOGUuLjgyY2ZjMjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yYW5nZS5jCisrKyBiL2tlcm5lbC9yYW5nZS5jCkBAIC0xMTMsMTIgKzExMywxMiBAQAogewogCWNvbnN0IHN0cnVjdCByYW5nZSAqcjEgPSB4MTsKIAljb25zdCBzdHJ1Y3QgcmFuZ2UgKnIyID0geDI7Ci0JczY0IHN0YXJ0MSwgc3RhcnQyOwogCi0Jc3RhcnQxID0gcjEtPnN0YXJ0OwotCXN0YXJ0MiA9IHIyLT5zdGFydDsKLQotCXJldHVybiBzdGFydDEgLSBzdGFydDI7CisJaWYgKHIxLT5zdGFydCA8IHIyLT5zdGFydCkKKwkJcmV0dXJuIC0xOworCWlmIChyMS0+c3RhcnQgPiByMi0+c3RhcnQpCisJCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBpbnQgY2xlYW5fc29ydF9yYW5nZShzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgYXopCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBiNTc5N2I3Li5lNjI4Y2IxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTcxMTMsOSArNzExMyw2IEBACiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECiAJYWxsb2Nfc2l6ZSArPSAyICogbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLCi0JYWxsb2Nfc2l6ZSArPSBudW1fcG9zc2libGVfY3B1cygpICogY3B1bWFza19zaXplKCk7Ci0jZW5kaWYKIAlpZiAoYWxsb2Nfc2l6ZSkgewogCQlwdHIgPSAodW5zaWduZWQgbG9uZylremFsbG9jKGFsbG9jX3NpemUsIEdGUF9OT1dBSVQpOwogCkBAIC03MTM1LDEzICs3MTMyLDEzIEBACiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogCiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCi0jaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKLQkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJCXBlcl9jcHUobG9hZF9iYWxhbmNlX21hc2ssIGkpID0gKHZvaWQgKilwdHI7Ci0JCQlwdHIgKz0gY3B1bWFza19zaXplKCk7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSyAqLwogCX0KKyNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXBlcl9jcHUobG9hZF9iYWxhbmNlX21hc2ssIGkpID0gKGNwdW1hc2tfdmFyX3Qpa3phbGxvY19ub2RlKAorCQkJY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGkpKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sgKi8KIAogCWluaXRfcnRfYmFuZHdpZHRoKCZkZWZfcnRfYmFuZHdpZHRoLAogCQkJZ2xvYmFsX3J0X3BlcmlvZCgpLCBnbG9iYWxfcnRfcnVudGltZSgpKTsKQEAgLTcyOTUsMTMgKzcyOTIsMTIgQEAKIAkgKiBzaW5jZSB3ZSB3aWxsIGV4aXQgd2l0aCBUQVNLX1JVTk5JTkcgbWFrZSBzdXJlIHdlIGVudGVyIHdpdGggaXQsCiAJICogb3RoZXJ3aXNlIHdlIHdpbGwgZGVzdHJveSBzdGF0ZS4KIAkgKi8KLQlpZiAoV0FSTl9PTkNFKGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORywKKwlXQVJOX09OQ0UoY3VycmVudC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HICYmIGN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlLAogCQkJImRvIG5vdCBjYWxsIGJsb2NraW5nIG9wcyB3aGVuICFUQVNLX1JVTk5JTkc7ICIKIAkJCSJzdGF0ZT0lbHggc2V0IGF0IFs8JXA+XSAlcFNcbiIsCiAJCQljdXJyZW50LT5zdGF0ZSwKIAkJCSh2b2lkICopY3VycmVudC0+dGFza19zdGF0ZV9jaGFuZ2UsCi0JCQkodm9pZCAqKWN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlKSkKLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJKHZvaWQgKiljdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSk7CiAKIAlfX19taWdodF9zbGVlcChmaWxlLCBsaW5lLCBwcmVlbXB0X29mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCmluZGV4IGU1ZGI4YzYuLmI1MjA5MmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCisrKyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCkBAIC01NzAsMjQgKzU3MCw3IEBACiBzdGF0aWMKIGludCBkbF9ydW50aW1lX2V4Y2VlZGVkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKQogewotCWludCBkbWlzcyA9IGRsX3RpbWVfYmVmb3JlKGRsX3NlLT5kZWFkbGluZSwgcnFfY2xvY2socnEpKTsKLQlpbnQgcm9ydW4gPSBkbF9zZS0+cnVudGltZSA8PSAwOwotCi0JaWYgKCFyb3J1biAmJiAhZG1pc3MpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgYmV5b25kIG91ciBjdXJyZW50IGRlYWRsaW5lIGFuZCB3ZSBhcmUgc3RpbGwKLQkgKiBleGVjdXRpbmcsIHRoZW4gd2UgaGF2ZSBhbHJlYWR5IHVzZWQgc29tZSBvZiB0aGUgcnVudGltZSBvZgotCSAqIHRoZSBuZXh0IGluc3RhbmNlLiBUaHVzLCBpZiB3ZSBkbyBub3QgYWNjb3VudCB0aGF0LCB3ZSBhcmUKLQkgKiBzdGVhbGluZyBiYW5kd2lkdGggZnJvbSB0aGUgc3lzdGVtIGF0IGVhY2ggZGVhZGxpbmUgbWlzcyEKLQkgKi8KLQlpZiAoZG1pc3MpIHsKLQkJZGxfc2UtPnJ1bnRpbWUgPSByb3J1biA/IGRsX3NlLT5ydW50aW1lIDogMDsKLQkJZGxfc2UtPnJ1bnRpbWUgLT0gcnFfY2xvY2socnEpIC0gZGxfc2UtPmRlYWRsaW5lOwotCX0KLQotCXJldHVybiAxOworCXJldHVybiAoZGxfc2UtPnJ1bnRpbWUgPD0gMCk7CiB9CiAKIGV4dGVybiBib29sIHNjaGVkX3J0X2JhbmR3aWR0aF9hY2NvdW50KHN0cnVjdCBydF9ycSAqcnRfcnEpOwpAQCAtODI2LDEwICs4MDksMTAgQEAKIAkgKiBwYXJhbWV0ZXJzIG9mIHRoZSB0YXNrIG1pZ2h0IG5lZWQgdXBkYXRpbmcuIE90aGVyd2lzZSwKIAkgKiB3ZSB3YW50IGEgcmVwbGVuaXNobWVudCBvZiBpdHMgcnVudGltZS4KIAkgKi8KLQlpZiAoIWRsX3NlLT5kbF9uZXcgJiYgZmxhZ3MgJiBFTlFVRVVFX1JFUExFTklTSCkKLQkJcmVwbGVuaXNoX2RsX2VudGl0eShkbF9zZSwgcGlfc2UpOwotCWVsc2UKKwlpZiAoZGxfc2UtPmRsX25ldyB8fCBmbGFncyAmIEVOUVVFVUVfV0FLRVVQKQogCQl1cGRhdGVfZGxfZW50aXR5KGRsX3NlLCBwaV9zZSk7CisJZWxzZSBpZiAoZmxhZ3MgJiBFTlFVRVVFX1JFUExFTklTSCkKKwkJcmVwbGVuaXNoX2RsX2VudGl0eShkbF9zZSwgcGlfc2UpOwogCiAJX19lbnF1ZXVlX2RsX2VudGl0eShkbF9zZSk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCBkZjJjZGY3Li40MDY2N2NiIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTQwMDUsNiArNDAwNSwxMCBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2Nmc19iYW5kd2lkdGgoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKQogeworCS8qIGluaXRfY2ZzX2JhbmR3aWR0aCgpIHdhcyBub3QgY2FsbGVkICovCisJaWYgKCFjZnNfYi0+dGhyb3R0bGVkX2Nmc19ycS5uZXh0KQorCQlyZXR1cm47CisKIAlocnRpbWVyX2NhbmNlbCgmY2ZzX2ItPnBlcmlvZF90aW1lcik7CiAJaHJ0aW1lcl9jYW5jZWwoJmNmc19iLT5zbGFja190aW1lcik7CiB9CkBAIC00NDI0LDcgKzQ0MjgsNyBAQAogCQkgKiB3bCA9IFMgKiBzJ19pOyBzZWUgKDIpCiAJCSAqLwogCQlpZiAoVyA+IDAgJiYgdyA8IFcpCi0JCQl3bCA9ICh3ICogdGctPnNoYXJlcykgLyBXOworCQkJd2wgPSAodyAqIChsb25nKXRnLT5zaGFyZXMpIC8gVzsKIAkJZWxzZQogCQkJd2wgPSB0Zy0+c2hhcmVzOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggYThjOWY1YS4uZWE5Yzg4MSAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMjIxMCw5ICsyMjEwLDEzIEBACiAJCXVwX3dyaXRlKCZtZS0+bW0tPm1tYXBfc2VtKTsKIAkJYnJlYWs7CiAJY2FzZSBQUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQ6CisJCWlmIChhcmcyIHx8IGFyZzMgfHwgYXJnNCB8fCBhcmc1KQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWVycm9yID0gTVBYX0VOQUJMRV9NQU5BR0VNRU5UKG1lKTsKIAkJYnJlYWs7CiAJY2FzZSBQUl9NUFhfRElTQUJMRV9NQU5BR0VNRU5UOgorCQlpZiAoYXJnMiB8fCBhcmczIHx8IGFyZzQgfHwgYXJnNSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQllcnJvciA9IE1QWF9ESVNBQkxFX01BTkFHRU1FTlQobWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCA4N2EzNDZmLi4yOGJmOTFjIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtNjMzLDYgKzYzMywxMyBAQAogCWlmICgodHhjLT5tb2RlcyAmIEFESl9TRVRPRkZTRVQpICYmICghY2FwYWJsZShDQVBfU1lTX1RJTUUpKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAorCWlmICh0eGMtPm1vZGVzICYgQURKX0ZSRVFVRU5DWSkgeworCQlpZiAoTE9OR19NSU4gLyBQUE1fU0NBTEUgPiB0eGMtPmZyZXEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKExPTkdfTUFYIC8gUFBNX1NDQUxFIDwgdHhjLT5mcmVxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWUuYyBiL2tlcm5lbC90aW1lL3RpbWUuYwppbmRleCA2MzkwNTE3Li4yYzg1Yjc3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lLmMKKysrIGIva2VybmVsL3RpbWUvdGltZS5jCkBAIC0xOTYsNiArMTk2LDEwIEBACiAJaWYgKHR2KSB7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcl90diwgdHYsIHNpemVvZigqdHYpKSkKIAkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICghdGltZXZhbF92YWxpZCgmdXNlcl90dikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQluZXdfdHMudHZfc2VjID0gdXNlcl90di50dl9zZWM7CiAJCW5ld190cy50dl9uc2VjID0gdXNlcl90di50dl91c2VjICogTlNFQ19QRVJfVVNFQzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggOTI5YTczM2QuLjIyNGU3NjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTI0OTcsMTIgKzI0OTcsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX3J1bl9tb2RpZnlfY29kZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBpbnQgY29tbWFuZCwKLQkJCQkgICBzdHJ1Y3QgZnRyYWNlX2hhc2ggKm9sZF9oYXNoKQorCQkJCSAgIHN0cnVjdCBmdHJhY2Vfb3BzX2hhc2ggKm9sZF9oYXNoKQogewogCW9wcy0+ZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9NT0RJRllJTkc7Ci0Jb3BzLT5vbGRfaGFzaC5maWx0ZXJfaGFzaCA9IG9sZF9oYXNoOworCW9wcy0+b2xkX2hhc2guZmlsdGVyX2hhc2ggPSBvbGRfaGFzaC0+ZmlsdGVyX2hhc2g7CisJb3BzLT5vbGRfaGFzaC5ub3RyYWNlX2hhc2ggPSBvbGRfaGFzaC0+bm90cmFjZV9oYXNoOwogCWZ0cmFjZV9ydW5fdXBkYXRlX2NvZGUoY29tbWFuZCk7CiAJb3BzLT5vbGRfaGFzaC5maWx0ZXJfaGFzaCA9IE5VTEw7CisJb3BzLT5vbGRfaGFzaC5ub3RyYWNlX2hhc2ggPSBOVUxMOwogCW9wcy0+ZmxhZ3MgJj0gfkZUUkFDRV9PUFNfRkxfTU9ESUZZSU5HOwogfQogCkBAIC0zNTc5LDcgKzM1ODEsNyBAQAogCiBzdGF0aWMgaW50IGZ0cmFjZV9wcm9iZV9yZWdpc3RlcmVkOwogCi1zdGF0aWMgdm9pZCBfX2VuYWJsZV9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoc3RydWN0IGZ0cmFjZV9oYXNoICpvbGRfaGFzaCkKK3N0YXRpYyB2b2lkIF9fZW5hYmxlX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShzdHJ1Y3QgZnRyYWNlX29wc19oYXNoICpvbGRfaGFzaCkKIHsKIAlpbnQgcmV0OwogCWludCBpOwpAQCAtMzYzNyw2ICszNjM5LDcgQEAKIHJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLAogCQkJICAgICAgdm9pZCAqZGF0YSkKIHsKKwlzdHJ1Y3QgZnRyYWNlX29wc19oYXNoIG9sZF9oYXNoX29wczsKIAlzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUgKmVudHJ5OwogCXN0cnVjdCBmdHJhY2VfaGFzaCAqKm9yaWdfaGFzaCA9ICZ0cmFjZV9wcm9iZV9vcHMuZnVuY19oYXNoLT5maWx0ZXJfaGFzaDsKIAlzdHJ1Y3QgZnRyYWNlX2hhc2ggKm9sZF9oYXNoID0gKm9yaWdfaGFzaDsKQEAgLTM2NTgsNiArMzY2MSwxMCBAQAogCiAJbXV0ZXhfbG9jaygmdHJhY2VfcHJvYmVfb3BzLmZ1bmNfaGFzaC0+cmVnZXhfbG9jayk7CiAKKwlvbGRfaGFzaF9vcHMuZmlsdGVyX2hhc2ggPSBvbGRfaGFzaDsKKwkvKiBQcm9iZXMgb25seSBoYXZlIGZpbHRlcnMgKi8KKwlvbGRfaGFzaF9vcHMubm90cmFjZV9oYXNoID0gTlVMTDsKKwogCWhhc2ggPSBhbGxvY19hbmRfY29weV9mdHJhY2VfaGFzaChGVFJBQ0VfSEFTSF9ERUZBVUxUX0JJVFMsIG9sZF9oYXNoKTsKIAlpZiAoIWhhc2gpIHsKIAkJY291bnQgPSAtRU5PTUVNOwpAQCAtMzcxOCw3ICszNzI1LDcgQEAKIAogCXJldCA9IGZ0cmFjZV9oYXNoX21vdmUoJnRyYWNlX3Byb2JlX29wcywgMSwgb3JpZ19oYXNoLCBoYXNoKTsKIAotCV9fZW5hYmxlX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShvbGRfaGFzaCk7CisJX19lbmFibGVfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKCZvbGRfaGFzaF9vcHMpOwogCiAJaWYgKCFyZXQpCiAJCWZyZWVfZnRyYWNlX2hhc2hfcmN1KG9sZF9oYXNoKTsKQEAgLTQwMDYsMTAgKzQwMTMsMzQgQEAKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX29wc191cGRhdGVfY29kZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLAotCQkJCSAgIHN0cnVjdCBmdHJhY2VfaGFzaCAqb2xkX2hhc2gpCisJCQkJICAgc3RydWN0IGZ0cmFjZV9vcHNfaGFzaCAqb2xkX2hhc2gpCiB7Ci0JaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQgJiYgZnRyYWNlX2VuYWJsZWQpCisJc3RydWN0IGZ0cmFjZV9vcHMgKm9wOworCisJaWYgKCFmdHJhY2VfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQpIHsKIAkJZnRyYWNlX3J1bl9tb2RpZnlfY29kZShvcHMsIEZUUkFDRV9VUERBVEVfQ0FMTFMsIG9sZF9oYXNoKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyB0aGUgc2hhcmVkIGdsb2JhbF9vcHMgZmlsdGVyLCB0aGVuIHdlIG5lZWQgdG8KKwkgKiBjaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIG9wcyB0aGF0IHNoYXJlcyBpdCwgaXMgZW5hYmxlZC4KKwkgKiBJZiBzbywgd2Ugc3RpbGwgbmVlZCB0byBydW4gdGhlIG1vZGlmeSBjb2RlLgorCSAqLworCWlmIChvcHMtPmZ1bmNfaGFzaCAhPSAmZ2xvYmFsX29wcy5sb2NhbF9oYXNoKQorCQlyZXR1cm47CisKKwlkb19mb3JfZWFjaF9mdHJhY2Vfb3Aob3AsIGZ0cmFjZV9vcHNfbGlzdCkgeworCQlpZiAob3AtPmZ1bmNfaGFzaCA9PSAmZ2xvYmFsX29wcy5sb2NhbF9oYXNoICYmCisJCSAgICBvcC0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQpIHsKKwkJCWZ0cmFjZV9ydW5fbW9kaWZ5X2NvZGUob3AsIEZUUkFDRV9VUERBVEVfQ0FMTFMsIG9sZF9oYXNoKTsKKwkJCS8qIE9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UgKi8KKwkJCXJldHVybjsKKwkJfQorCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX29wKG9wKTsKIH0KIAogc3RhdGljIGludApAQCAtNDAxNyw2ICs0MDQ4LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBpcCwgaW50IHJlbW92ZSwgaW50IHJlc2V0LCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCBmdHJhY2VfaGFzaCAqKm9yaWdfaGFzaDsKKwlzdHJ1Y3QgZnRyYWNlX29wc19oYXNoIG9sZF9oYXNoX29wczsKIAlzdHJ1Y3QgZnRyYWNlX2hhc2ggKm9sZF9oYXNoOwogCXN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaDsKIAlpbnQgcmV0OwpAQCAtNDA1Myw5ICs0MDg1LDExIEBACiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJb2xkX2hhc2ggPSAqb3JpZ19oYXNoOworCW9sZF9oYXNoX29wcy5maWx0ZXJfaGFzaCA9IG9wcy0+ZnVuY19oYXNoLT5maWx0ZXJfaGFzaDsKKwlvbGRfaGFzaF9vcHMubm90cmFjZV9oYXNoID0gb3BzLT5mdW5jX2hhc2gtPm5vdHJhY2VfaGFzaDsKIAlyZXQgPSBmdHJhY2VfaGFzaF9tb3ZlKG9wcywgZW5hYmxlLCBvcmlnX2hhc2gsIGhhc2gpOwogCWlmICghcmV0KSB7Ci0JCWZ0cmFjZV9vcHNfdXBkYXRlX2NvZGUob3BzLCBvbGRfaGFzaCk7CisJCWZ0cmFjZV9vcHNfdXBkYXRlX2NvZGUob3BzLCAmb2xkX2hhc2hfb3BzKTsKIAkJZnJlZV9mdHJhY2VfaGFzaF9yY3Uob2xkX2hhc2gpOwogCX0KIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKQEAgLTQyNjcsNiArNDMwMSw3IEBACiBpbnQgZnRyYWNlX3JlZ2V4X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnRyYWNlX29wc19oYXNoIG9sZF9oYXNoX29wczsKIAlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyOwogCXN0cnVjdCBmdHJhY2VfaGFzaCAqKm9yaWdfaGFzaDsKIAlzdHJ1Y3QgZnRyYWNlX2hhc2ggKm9sZF9oYXNoOwpAQCAtNDMwMCwxMCArNDMzNSwxMiBAQAogCiAJCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAkJb2xkX2hhc2ggPSAqb3JpZ19oYXNoOworCQlvbGRfaGFzaF9vcHMuZmlsdGVyX2hhc2ggPSBpdGVyLT5vcHMtPmZ1bmNfaGFzaC0+ZmlsdGVyX2hhc2g7CisJCW9sZF9oYXNoX29wcy5ub3RyYWNlX2hhc2ggPSBpdGVyLT5vcHMtPmZ1bmNfaGFzaC0+bm90cmFjZV9oYXNoOwogCQlyZXQgPSBmdHJhY2VfaGFzaF9tb3ZlKGl0ZXItPm9wcywgZmlsdGVyX2hhc2gsCiAJCQkJICAgICAgIG9yaWdfaGFzaCwgaXRlci0+aGFzaCk7CiAJCWlmICghcmV0KSB7Ci0JCQlmdHJhY2Vfb3BzX3VwZGF0ZV9jb2RlKGl0ZXItPm9wcywgb2xkX2hhc2gpOworCQkJZnRyYWNlX29wc191cGRhdGVfY29kZShpdGVyLT5vcHMsICZvbGRfaGFzaF9vcHMpOwogCQkJZnJlZV9mdHJhY2VfaGFzaF9yY3Uob2xkX2hhc2gpOwogCQl9CiAJCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCAyZTc2Nzk3Li40YTkwNzliIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtNjkxOCw3ICs2OTE4LDYgQEAKIAkJCXRyYWNlcG9pbnRfcHJpbnRrID0gMDsKIAl9CiAJdHJhY2VyX2FsbG9jX2J1ZmZlcnMoKTsKLQlpbml0X2Z0cmFjZV9zeXNjYWxscygpOwogCXRyYWNlX2V2ZW50X2luaXQoKTsJCiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCAzNjZhNzhhLi5iMDNhMGVhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC0yNDI5LDEyICsyNDI5LDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBfX2luaXQgdm9pZAorZWFybHlfZW5hYmxlX2V2ZW50cyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBib29sIGRpc2FibGVfZmlyc3QpCit7CisJY2hhciAqYnVmID0gYm9vdHVwX2V2ZW50X2J1ZjsKKwljaGFyICp0b2tlbjsKKwlpbnQgcmV0OworCisJd2hpbGUgKHRydWUpIHsKKwkJdG9rZW4gPSBzdHJzZXAoJmJ1ZiwgIiwiKTsKKworCQlpZiAoIXRva2VuKQorCQkJYnJlYWs7CisJCWlmICghKnRva2VuKQorCQkJY29udGludWU7CisKKwkJLyogUmVzdGFydGluZyBzeXNjYWxscyByZXF1aXJlcyB0aGF0IHdlIHN0b3AgdGhlbSBmaXJzdCAqLworCQlpZiAoZGlzYWJsZV9maXJzdCkKKwkJCWZ0cmFjZV9zZXRfY2xyX2V2ZW50KHRyLCB0b2tlbiwgMCk7CisKKwkJcmV0ID0gZnRyYWNlX3NldF9jbHJfZXZlbnQodHIsIHRva2VuLCAxKTsKKwkJaWYgKHJldCkKKwkJCXByX3dhcm4oIkZhaWxlZCB0byBlbmFibGUgdHJhY2UgZXZlbnQ6ICVzXG4iLCB0b2tlbik7CisKKwkJLyogUHV0IGJhY2sgdGhlIGNvbW1hIHRvIGFsbG93IHRoaXMgdG8gYmUgY2FsbGVkIGFnYWluICovCisJCWlmIChidWYpCisJCQkqKGJ1ZiAtIDEpID0gJywnOworCX0KK30KKwogc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfZW5hYmxlKHZvaWQpCiB7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IHRvcF90cmFjZV9hcnJheSgpOwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKml0ZXIsICpjYWxsOwotCWNoYXIgKmJ1ZiA9IGJvb3R1cF9ldmVudF9idWY7Ci0JY2hhciAqdG9rZW47CiAJaW50IHJldDsKIAogCWlmICghdHIpCkBAIC0yNDU2LDE4ICsyNDgzLDcgQEAKIAkgKi8KIAlfX3RyYWNlX2Vhcmx5X2FkZF9ldmVudHModHIpOwogCi0Jd2hpbGUgKHRydWUpIHsKLQkJdG9rZW4gPSBzdHJzZXAoJmJ1ZiwgIiwiKTsKLQotCQlpZiAoIXRva2VuKQotCQkJYnJlYWs7Ci0JCWlmICghKnRva2VuKQotCQkJY29udGludWU7Ci0KLQkJcmV0ID0gZnRyYWNlX3NldF9jbHJfZXZlbnQodHIsIHRva2VuLCAxKTsKLQkJaWYgKHJldCkKLQkJCXByX3dhcm4oIkZhaWxlZCB0byBlbmFibGUgdHJhY2UgZXZlbnQ6ICVzXG4iLCB0b2tlbik7Ci0JfQorCWVhcmx5X2VuYWJsZV9ldmVudHModHIsIGZhbHNlKTsKIAogCXRyYWNlX3ByaW50a19zdGFydF9jb21tKCk7CiAKQEAgLTI0NzgsNiArMjQ5NCwzMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogZXZlbnRfdHJhY2VfZW5hYmxlKCkgaXMgY2FsbGVkIGZyb20gdHJhY2VfZXZlbnRfaW5pdCgpIGZpcnN0IHRvCisgKiBpbml0aWFsaXplIGV2ZW50cyBhbmQgcGVyaGFwcyBzdGFydCBhbnkgZXZlbnRzIHRoYXQgYXJlIG9uIHRoZQorICogY29tbWFuZCBsaW5lLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgc29tZSBldmVudHMgdGhhdCB3aWxsIG5vdAorICogc3RhcnQgdGhpcyBlYXJseSwgbGlrZSB0aGUgc3lzdGVtIGNhbGwgdHJhY2Vwb2ludHMgdGhhdCBuZWVkCisgKiB0byBzZXQgdGhlIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQgZmxhZyBvZiBwaWQgMS4gQnV0IGV2ZW50X3RyYWNlX2VuYWJsZSgpCisgKiBpcyBjYWxsZWQgYmVmb3JlIHBpZCAxIHN0YXJ0cywgYW5kIHRoaXMgZmxhZyBpcyBuZXZlciBzZXQsIG1ha2luZworICogdGhlIHN5c2NhbGwgdHJhY2Vwb2ludCBuZXZlciBnZXQgcmVhY2hlZCwgYnV0IHRoZSBldmVudCBpcyBlbmFibGVkCisgKiByZWdhcmRsZXNzIChhbmQgbm90IGRvaW5nIGFueXRoaW5nKS4KKyAqLworc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfZW5hYmxlX2FnYWluKHZvaWQpCit7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0cjsKKworCXRyID0gdG9wX3RyYWNlX2FycmF5KCk7CisJaWYgKCF0cikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllYXJseV9lbmFibGVfZXZlbnRzKHRyLCB0cnVlKTsKKworCXJldHVybiAwOworfQorCitlYXJseV9pbml0Y2FsbChldmVudF90cmFjZV9lbmFibGVfYWdhaW4pOworCiBzdGF0aWMgX19pbml0IGludCBldmVudF90cmFjZV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0cjsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rZGIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rZGIuYwppbmRleCBiMGIxYzQ0Li4zY2NmNWMyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa2RiLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2tkYi5jCkBAIC0xMzIsOCArMTMyLDggQEAKIAogc3RhdGljIF9faW5pdCBpbnQga2RiX2Z0cmFjZV9yZWdpc3Rlcih2b2lkKQogewotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImZ0ZHVtcCIsIGtkYl9mdGR1bXAsICJbc2tpcF8jbGluZXNdIFtjcHVdIiwKLQkJCSAgICAiRHVtcCBmdHJhY2UgbG9nIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImZ0ZHVtcCIsIGtkYl9mdGR1bXAsICJbc2tpcF8jbGluZXNdIFtjcHVdIiwKKwkJCSAgICAiRHVtcCBmdHJhY2UgbG9nIiwgMCwgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA2MjAyYjA4Li5iZWVlYWM5IDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0xODQxLDE3ICsxODQxLDExIEBACiAgKiBzcGluX2xvY2tfaXJxKHBvb2wtPmxvY2spIHdoaWNoIG1heSBiZSByZWxlYXNlZCBhbmQgcmVncmFiYmVkCiAgKiBtdWx0aXBsZSB0aW1lcy4gIERvZXMgR0ZQX0tFUk5FTCBhbGxvY2F0aW9ucy4gIENhbGxlZCBvbmx5IGZyb20KICAqIG1hbmFnZXIuCi0gKgotICogUmV0dXJuOgotICogJWZhbHNlIGlmIG5vIGFjdGlvbiB3YXMgdGFrZW4gYW5kIHBvb2wtPmxvY2sgc3RheWVkIGxvY2tlZCwgJXRydWUKLSAqIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGJvb2wgbWF5YmVfY3JlYXRlX3dvcmtlcihzdHJ1Y3Qgd29ya2VyX3Bvb2wgKnBvb2wpCitzdGF0aWMgdm9pZCBtYXliZV9jcmVhdGVfd29ya2VyKHN0cnVjdCB3b3JrZXJfcG9vbCAqcG9vbCkKIF9fcmVsZWFzZXMoJnBvb2wtPmxvY2spCiBfX2FjcXVpcmVzKCZwb29sLT5sb2NrKQogewotCWlmICghbmVlZF90b19jcmVhdGVfd29ya2VyKHBvb2wpKQotCQlyZXR1cm4gZmFsc2U7CiByZXN0YXJ0OgogCXNwaW5fdW5sb2NrX2lycSgmcG9vbC0+bG9jayk7CiAKQEAgLTE4NzcsNyArMTg3MSw2IEBACiAJICovCiAJaWYgKG5lZWRfdG9fY3JlYXRlX3dvcmtlcihwb29sKSkKIAkJZ290byByZXN0YXJ0OwotCXJldHVybiB0cnVlOwogfQogCiAvKioKQEAgLTE4OTcsMTYgKzE4OTAsMTQgQEAKICAqIG11bHRpcGxlIHRpbWVzLiAgRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb25zLgogICoKICAqIFJldHVybjoKLSAqICVmYWxzZSBpZiB0aGUgcG9vbCBkb24ndCBuZWVkIG1hbmFnZW1lbnQgYW5kIHRoZSBjYWxsZXIgY2FuIHNhZmVseSBzdGFydAotICogcHJvY2Vzc2luZyB3b3JrcywgJXRydWUgaW5kaWNhdGVzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbGVhc2VkIHBvb2wtPmxvY2sKLSAqIGFuZCByZWFjcXVpcmVkIGl0IHRvIHBlcmZvcm0gc29tZSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGFuZCB0aGF0IHRoZQotICogY29uZGl0aW9ucyB0aGF0IHRoZSBjYWxsZXIgdmVyaWZpZWQgd2hpbGUgaG9sZGluZyB0aGUgbG9jayBiZWZvcmUKLSAqIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIG1pZ2h0IG5vIGxvbmdlciBiZSB0cnVlLgorICogJWZhbHNlIGlmIHRoZSBwb29sIGRvZXNuJ3QgbmVlZCBtYW5hZ2VtZW50IGFuZCB0aGUgY2FsbGVyIGNhbiBzYWZlbHkKKyAqIHN0YXJ0IHByb2Nlc3Npbmcgd29ya3MsICV0cnVlIGlmIG1hbmFnZW1lbnQgZnVuY3Rpb24gd2FzIHBlcmZvcm1lZCBhbmQKKyAqIHRoZSBjb25kaXRpb25zIHRoYXQgdGhlIGNhbGxlciB2ZXJpZmllZCBiZWZvcmUgY2FsbGluZyB0aGUgZnVuY3Rpb24gbWF5CisgKiBubyBsb25nZXIgYmUgdHJ1ZS4KICAqLwogc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKQogewogCXN0cnVjdCB3b3JrZXJfcG9vbCAqcG9vbCA9IHdvcmtlci0+cG9vbDsKLQlib29sIHJldCA9IGZhbHNlOwogCiAJLyoKIAkgKiBBbnlvbmUgd2hvIHN1Y2Nlc3NmdWxseSBncmFicyBtYW5hZ2VyX2FyYiB3aW5zIHRoZSBhcmJpdHJhdGlvbgpAQCAtMTkxOSwxMiArMTkxMCwxMiBAQAogCSAqIGFjdHVhbCBtYW5hZ2VtZW50LCB0aGUgcG9vbCBtYXkgc3RhbGwgaW5kZWZpbml0ZWx5LgogCSAqLwogCWlmICghbXV0ZXhfdHJ5bG9jaygmcG9vbC0+bWFuYWdlcl9hcmIpKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXQgfD0gbWF5YmVfY3JlYXRlX3dvcmtlcihwb29sKTsKKwltYXliZV9jcmVhdGVfd29ya2VyKHBvb2wpOwogCiAJbXV0ZXhfdW5sb2NrKCZwb29sLT5tYW5hZ2VyX2FyYik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5rZ2RiIGIvbGliL0tjb25maWcua2dkYgppbmRleCAzNThlYjgxLi5jNjM1YTEwIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5rZ2RiCisrKyBiL2xpYi9LY29uZmlnLmtnZGIKQEAgLTczLDYgKzczLDMxIEBACiAJaGVscAogCSAgS0RCIGZyb250ZW5kIGZvciBrZXJuZWwKIAorY29uZmlnIEtEQl9ERUZBVUxUX0VOQUJMRQorCWhleCAiS0RCOiBTZWxlY3Qga2RiIGNvbW1hbmQgZnVuY3Rpb25zIHRvIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCIKKwlkZXBlbmRzIG9uIEtHREJfS0RCCisJZGVmYXVsdCAweDEKKwloZWxwCisJICBTcGVjaWZpZXJzIHdoaWNoIGtkYiBjb21tYW5kcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGlzIG1heQorCSAgYmUgc2V0IHRvIDEgb3IgMCB0byBlbmFibGUgYWxsIGNvbW1hbmRzIG9yIGRpc2FibGUgYWxtb3N0IGFsbAorCSAgY29tbWFuZHMuCisKKwkgIEFsdGVybmF0aXZlbHkgdGhlIGZvbGxvd2luZyBiaXRtYXNrIGFwcGxpZXM6CisKKwkgICAgMHgwMDAyIC0gYWxsb3cgYXJiaXRyYXJ5IHJlYWRzIGZyb20gbWVtb3J5IGFuZCBzeW1ib2wgbG9va3VwCisJICAgIDB4MDAwNCAtIGFsbG93IGFyYml0cmFyeSB3cml0ZXMgdG8gbWVtb3J5CisJICAgIDB4MDAwOCAtIGFsbG93IGN1cnJlbnQgcmVnaXN0ZXIgc3RhdGUgdG8gYmUgaW5zcGVjdGVkCisJICAgIDB4MDAxMCAtIGFsbG93IGN1cnJlbnQgcmVnaXN0ZXIgc3RhdGUgdG8gYmUgbW9kaWZpZWQKKwkgICAgMHgwMDIwIC0gYWxsb3cgcGFzc2l2ZSBpbnNwZWN0aW9uIChiYWNrdHJhY2UsIHByb2Nlc3MgbGlzdCwgbHNtb2QpCisJICAgIDB4MDA0MCAtIGFsbG93IGZsb3cgY29udHJvbCBtYW5hZ2VtZW50IChicmVha3BvaW50LCBzaW5nbGUgc3RlcCkKKwkgICAgMHgwMDgwIC0gZW5hYmxlIHNpZ25hbGxpbmcgb2YgcHJvY2Vzc2VzCisJICAgIDB4MDEwMCAtIGFsbG93IG1hY2hpbmUgdG8gYmUgcmVib290ZWQKKworCSAgVGhlIGNvbmZpZyBvcHRpb24gbWVyZWx5IHNldHMgdGhlIGRlZmF1bHQgYXQgYm9vdCB0aW1lLiBCb3RoCisJICBpc3N1aW5nICdlY2hvIFggPiAvc3lzL21vZHVsZS9rZGIvcGFyYW1ldGVycy9jbWRfZW5hYmxlJyBvcgorICAgICAgICAgIHNldHRpbmcgd2l0aCBrZGIuY21kX2VuYWJsZT1YIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIHdpbGwKKwkgIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorCiBjb25maWcgS0RCX0tFWUJPQVJECiAJYm9vbCAiS0dEQl9LREI6IGtleWJvYXJkIGFzIGlucHV0IGRldmljZSIKIAlkZXBlbmRzIG9uIFZUICYmIEtHREJfS0RCCmRpZmYgLS1naXQgYS9saWIvYXNzb2NfYXJyYXkuYyBiL2xpYi9hc3NvY19hcnJheS5jCmluZGV4IDI0MDRkMDMuLjAzZGQ1NzYgMTAwNjQ0Ci0tLSBhL2xpYi9hc3NvY19hcnJheS5jCisrKyBiL2xpYi9hc3NvY19hcnJheS5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAvLyNkZWZpbmUgREVCVUcKKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9hc3NvY19hcnJheV9wcml2Lmg+CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnLmRlYnVnIGIvbW0vS2NvbmZpZy5kZWJ1ZwppbmRleCA1NmJhZGZjLi45NTdkM2RhIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnLmRlYnVnCisrKyBiL21tL0tjb25maWcuZGVidWcKQEAgLTE0LDcgKzE0LDYgQEAKIAlkZXBlbmRzIG9uICFLTUVNQ0hFQ0sKIAlzZWxlY3QgUEFHRV9FWFRFTlNJT04KIAlzZWxlY3QgUEFHRV9QT0lTT05JTkcgaWYgIUFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCi0Jc2VsZWN0IFBBR0VfR1VBUkQgaWYgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKIAktLS1oZWxwLS0tCiAJICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgogCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKQEAgLTI3LDEzICsyNiw1IEBACiAJICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3Qgd2FybmluZ3Mgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYWZ0ZXIKIAkgIGEgcmVzdW1lIGJlY2F1c2UgZnJlZSBwYWdlcyBhcmUgbm90IHNhdmVkIHRvIHRoZSBzdXNwZW5kIGltYWdlLgogCi1jb25maWcgV0FOVF9QQUdFX0RFQlVHX0ZMQUdTCi0JYm9vbAotCiBjb25maWcgUEFHRV9QT0lTT05JTkcKIAlib29sCi0Jc2VsZWN0IFdBTlRfUEFHRV9ERUJVR19GTEFHUwotCi1jb25maWcgUEFHRV9HVUFSRAotCWJvb2wKLQlzZWxlY3QgV0FOVF9QQUdFX0RFQlVHX0ZMQUdTCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggYmQ4NTQzYy4uNjczZTQ1OCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMTA0Niw4ICsxMDQ2LDcgQEAKICAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZSB0byBzZWFyY2gKICAqIEBvZmZzZXQ6IHRoZSBwYWdlIGluZGV4CiAgKiBAZmdwX2ZsYWdzOiBQQ0cgZmxhZ3MKLSAqIEBjYWNoZV9nZnBfbWFzazogZ2ZwIG1hc2sgdG8gdXNlIGZvciB0aGUgcGFnZSBjYWNoZSBkYXRhIHBhZ2UgYWxsb2NhdGlvbgotICogQHJhZGl4X2dmcF9tYXNrOiBnZnAgbWFzayB0byB1c2UgZm9yIHJhZGl4IHRyZWUgbm9kZSBhbGxvY2F0aW9uCisgKiBAZ2ZwX21hc2s6IGdmcCBtYXNrIHRvIHVzZSBmb3IgdGhlIHBhZ2UgY2FjaGUgZGF0YSBwYWdlIGFsbG9jYXRpb24KICAqCiAgKiBMb29rcyB1cCB0aGUgcGFnZSBjYWNoZSBzbG90IGF0IEBtYXBwaW5nICYgQG9mZnNldC4KICAqCkBAIC0xMDU2LDExICsxMDU1LDkgQEAKICAqIEZHUF9BQ0NFU1NFRDogdGhlIHBhZ2Ugd2lsbCBiZSBtYXJrZWQgYWNjZXNzZWQKICAqIEZHUF9MT0NLOiBQYWdlIGlzIHJldHVybiBsb2NrZWQKICAqIEZHUF9DUkVBVDogSWYgcGFnZSBpcyBub3QgcHJlc2VudCB0aGVuIGEgbmV3IHBhZ2UgaXMgYWxsb2NhdGVkIHVzaW5nCi0gKgkJQGNhY2hlX2dmcF9tYXNrIGFuZCBhZGRlZCB0byB0aGUgcGFnZSBjYWNoZSBhbmQgdGhlIFZNJ3MgTFJVCi0gKgkJbGlzdC4gSWYgcmFkaXggdHJlZSBub2RlcyBhcmUgYWxsb2NhdGVkIGR1cmluZyBwYWdlIGNhY2hlCi0gKgkJaW5zZXJ0aW9uIHRoZW4gQHJhZGl4X2dmcF9tYXNrIGlzIHVzZWQuIFRoZSBwYWdlIGlzIHJldHVybmVkCi0gKgkJbG9ja2VkIGFuZCB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gT3RoZXJ3aXNlLCAlTlVMTCBpcwotICoJCXJldHVybmVkLgorICoJCUBnZnBfbWFzayBhbmQgYWRkZWQgdG8gdGhlIHBhZ2UgY2FjaGUgYW5kIHRoZSBWTSdzIExSVQorICoJCWxpc3QuIFRoZSBwYWdlIGlzIHJldHVybmVkIGxvY2tlZCBhbmQgd2l0aCBhbiBpbmNyZWFzZWQKKyAqCQlyZWZjb3VudC4gT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KICAqCiAgKiBJZiBGR1BfTE9DSyBvciBGR1BfQ1JFQVQgYXJlIHNwZWNpZmllZCB0aGVuIHRoZSBmdW5jdGlvbiBtYXkgc2xlZXAgZXZlbgogICogaWYgdGhlIEdGUCBmbGFncyBzcGVjaWZpZWQgZm9yIEZHUF9DUkVBVCBhcmUgYXRvbWljLgpAQCAtMTA2OCw3ICsxMDY1LDcgQEAKICAqIElmIHRoZXJlIGlzIGEgcGFnZSBjYWNoZSBwYWdlLCBpdCBpcyByZXR1cm5lZCB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4KICAqLwogc3RydWN0IHBhZ2UgKnBhZ2VjYWNoZV9nZXRfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBvZmZzZXQsCi0JaW50IGZncF9mbGFncywgZ2ZwX3QgY2FjaGVfZ2ZwX21hc2ssIGdmcF90IHJhZGl4X2dmcF9tYXNrKQorCWludCBmZ3BfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCkBAIC0xMTA1LDEzICsxMTAyLDExIEBACiAJaWYgKCFwYWdlICYmIChmZ3BfZmxhZ3MgJiBGR1BfQ1JFQVQpKSB7CiAJCWludCBlcnI7CiAJCWlmICgoZmdwX2ZsYWdzICYgRkdQX1dSSVRFKSAmJiBtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKQotCQkJY2FjaGVfZ2ZwX21hc2sgfD0gX19HRlBfV1JJVEU7Ci0JCWlmIChmZ3BfZmxhZ3MgJiBGR1BfTk9GUykgewotCQkJY2FjaGVfZ2ZwX21hc2sgJj0gfl9fR0ZQX0ZTOwotCQkJcmFkaXhfZ2ZwX21hc2sgJj0gfl9fR0ZQX0ZTOwotCQl9CisJCQlnZnBfbWFzayB8PSBfX0dGUF9XUklURTsKKwkJaWYgKGZncF9mbGFncyAmIEZHUF9OT0ZTKQorCQkJZ2ZwX21hc2sgJj0gfl9fR0ZQX0ZTOwogCi0JCXBhZ2UgPSBfX3BhZ2VfY2FjaGVfYWxsb2MoY2FjaGVfZ2ZwX21hc2spOworCQlwYWdlID0gX19wYWdlX2NhY2hlX2FsbG9jKGdmcF9tYXNrKTsKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIE5VTEw7CiAKQEAgLTExMjIsNyArMTExNyw4IEBACiAJCWlmIChmZ3BfZmxhZ3MgJiBGR1BfQUNDRVNTRUQpCiAJCQlfX1NldFBhZ2VSZWZlcmVuY2VkKHBhZ2UpOwogCi0JCWVyciA9IGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBvZmZzZXQsIHJhZGl4X2dmcF9tYXNrKTsKKwkJZXJyID0gYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHBhZ2UsIG1hcHBpbmcsIG9mZnNldCwKKwkJCQlnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0spOwogCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQkJcGFnZSA9IE5VTEw7CkBAIC0yNDQzLDggKzI0MzksNyBAQAogCQlmZ3BfZmxhZ3MgfD0gRkdQX05PRlM7CiAKIAlwYWdlID0gcGFnZWNhY2hlX2dldF9wYWdlKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsCi0JCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpLAotCQkJR0ZQX0tFUk5FTCk7CisJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAlpZiAocGFnZSkKIAkJd2FpdF9mb3Jfc3RhYmxlX3BhZ2UocGFnZSk7CiAKZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmMKaW5kZXggYTkwMDc1OS4uOGRkNTBjZSAxMDA2NDQKLS0tIGEvbW0vZ3VwLmMKKysrIGIvbW0vZ3VwLmMKQEAgLTI5Niw3ICsyOTYsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWlmIChyZXQgJiAoVk1fRkFVTFRfSFdQT0lTT04gfCBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSkpCiAJCQlyZXR1cm4gKmZsYWdzICYgRk9MTF9IV1BPSVNPTiA/IC1FSFdQT0lTT04gOiAtRUZBVUxUOwotCQlpZiAocmV0ICYgVk1fRkFVTFRfU0lHQlVTKQorCQlpZiAocmV0ICYgKFZNX0ZBVUxUX1NJR0JVUyB8IFZNX0ZBVUxUX1NJR1NFR1YpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCUJVRygpOwogCX0KQEAgLTU3MSw3ICs1NzEsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWlmIChyZXQgJiAoVk1fRkFVTFRfSFdQT0lTT04gfCBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSkpCiAJCQlyZXR1cm4gLUVIV1BPSVNPTjsKLQkJaWYgKHJldCAmIFZNX0ZBVUxUX1NJR0JVUykKKwkJaWYgKHJldCAmIChWTV9GQVVMVF9TSUdCVVMgfCBWTV9GQVVMVF9TSUdTRUdWKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlCVUcoKTsKIAl9CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IGQyNDdlZmEuLjE1NjQ3ZmIgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCisrKyBiL21tL2tzbS5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAkJZWxzZQogCQkJcmV0ID0gVk1fRkFVTFRfV1JJVEU7CiAJCXB1dF9wYWdlKHBhZ2UpOwotCX0gd2hpbGUgKCEocmV0ICYgKFZNX0ZBVUxUX1dSSVRFIHwgVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfT09NKSkpOworCX0gd2hpbGUgKCEocmV0ICYgKFZNX0ZBVUxUX1dSSVRFIHwgVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfU0lHU0VHViB8IFZNX0ZBVUxUX09PTSkpKTsKIAkvKgogCSAqIFdlIG11c3QgbG9vcCBiZWNhdXNlIGhhbmRsZV9tbV9mYXVsdCgpIG1heSBiYWNrIG91dCBpZiB0aGVyZSdzCiAJICogYW55IGRpZmZpY3VsdHkgZS5nLiBpZiBwdGUgYWNjZXNzZWQgYml0IGdldHMgdXBkYXRlZCBjb25jdXJyZW50bHkuCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggZWY5MWU4NS4uNjgzYjQ3OCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMTQ3Nyw5ICsxNDc3LDkgQEAKIAogCXByX2luZm8oIlRhc2sgaW4gIik7CiAJcHJfY29udF9jZ3JvdXBfcGF0aCh0YXNrX2Nncm91cChwLCBtZW1vcnlfY2dycF9pZCkpOwotCXByX2luZm8oIiBraWxsZWQgYXMgYSByZXN1bHQgb2YgbGltaXQgb2YgIik7CisJcHJfY29udCgiIGtpbGxlZCBhcyBhIHJlc3VsdCBvZiBsaW1pdCBvZiAiKTsKIAlwcl9jb250X2Nncm91cF9wYXRoKG1lbWNnLT5jc3MuY2dyb3VwKTsKLQlwcl9pbmZvKCJcbiIpOworCXByX2NvbnQoIlxuIik7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtMzA0MywxOCArMzA0Myw2IEBACiAJaWYgKHN3YXBfY2dyb3VwX2NtcHhjaGcoZW50cnksIG9sZF9pZCwgbmV3X2lkKSA9PSBvbGRfaWQpIHsKIAkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MoZnJvbSwgZmFsc2UpOwogCQltZW1fY2dyb3VwX3N3YXBfc3RhdGlzdGljcyh0bywgdHJ1ZSk7Ci0JCS8qCi0JCSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0YXNrIG1pZ3JhdGlvbiBjb250ZXh0IG5vdy4KLQkJICogSXQgcG9zdHBvbmVzIHBhZ2VfY291bnRlciBhbmQgcmVmY291bnQgaGFuZGxpbmcgdGlsbCB0aGUgZW5kCi0JCSAqIG9mIHRhc2sgbWlncmF0aW9uKG1lbV9jZ3JvdXBfY2xlYXJfbWMoKSkgZm9yIHBlcmZvcm1hbmNlCi0JCSAqIGltcHJvdmVtZW50LiBCdXQgd2UgY2Fubm90IHBvc3Rwb25lIGNzc19nZXQodG8pICBiZWNhdXNlIGlmCi0JCSAqIHRoZSBwcm9jZXNzIHRoYXQgaGFzIGJlZW4gbW92ZWQgdG8gQHRvIGRvZXMgc3dhcC1pbiwgdGhlCi0JCSAqIHJlZmNvdW50IG9mIEB0byBtaWdodCBiZSBkZWNyZWFzZWQgdG8gMC4KLQkJICoKLQkJICogV2UgYXJlIGluIGF0dGFjaCgpIHBoYXNlLCBzbyB0aGUgY2dyb3VwIGlzIGd1YXJhbnRlZWQgdG8gYmUKLQkJICogYWxpdmUsIHNvIHdlIGNhbiBqdXN0IGNhbGwgY3NzX2dldCgpLgotCQkgKi8KLQkJY3NzX2dldCgmdG8tPmNzcyk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ2NzksNiArNDY2Nyw3IEBACiAJaWYgKHBhcmVudF9jc3MgPT0gTlVMTCkgewogCQlyb290X21lbV9jZ3JvdXAgPSBtZW1jZzsKIAkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1vcnksIE5VTEwpOworCQltZW1jZy0+c29mdF9saW1pdCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtc3csIE5VTEwpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmbWVtY2ctPmttZW0sIE5VTEwpOwogCX0KQEAgLTQ3MjQsNiArNDcxMyw3IEBACiAKIAlpZiAocGFyZW50LT51c2VfaGllcmFyY2h5KSB7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtb3J5LCAmcGFyZW50LT5tZW1vcnkpOworCQltZW1jZy0+c29mdF9saW1pdCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtc3csICZwYXJlbnQtPm1lbXN3KTsKIAkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5rbWVtLCAmcGFyZW50LT5rbWVtKTsKIApAQCAtNDczMyw2ICs0NzIzLDcgQEAKIAkJICovCiAJfSBlbHNlIHsKIAkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1vcnksIE5VTEwpOworCQltZW1jZy0+c29mdF9saW1pdCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtc3csIE5VTEwpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmbWVtY2ctPmttZW0sIE5VTEwpOwogCQkvKgpAQCAtNDgwNyw3ICs0Nzk4LDcgQEAKIAltZW1fY2dyb3VwX3Jlc2l6ZV9saW1pdChtZW1jZywgUEFHRV9DT1VOVEVSX01BWCk7CiAJbWVtX2Nncm91cF9yZXNpemVfbWVtc3dfbGltaXQobWVtY2csIFBBR0VfQ09VTlRFUl9NQVgpOwogCW1lbWNnX3VwZGF0ZV9rbWVtX2xpbWl0KG1lbWNnLCBQQUdFX0NPVU5URVJfTUFYKTsKLQltZW1jZy0+c29mdF9saW1pdCA9IDA7CisJbWVtY2ctPnNvZnRfbGltaXQgPSBQQUdFX0NPVU5URVJfTUFYOwogfQogCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA2NDllN2Q0NC4uMmMzNTM2YyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTIzNSw2ICsyMzUsOSBAQAogCiBzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X3RsYm9ubHkoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIHsKKwlpZiAoIXRsYi0+ZW5kKQorCQlyZXR1cm47CisKIAl0bGJfZmx1c2godGxiKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZSh0bGItPm1tLCB0bGItPnN0YXJ0LCB0bGItPmVuZCk7CiAjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKQEAgLTI0Nyw3ICsyNTAsNyBAQAogewogCXN0cnVjdCBtbXVfZ2F0aGVyX2JhdGNoICpiYXRjaDsKIAotCWZvciAoYmF0Y2ggPSAmdGxiLT5sb2NhbDsgYmF0Y2g7IGJhdGNoID0gYmF0Y2gtPm5leHQpIHsKKwlmb3IgKGJhdGNoID0gJnRsYi0+bG9jYWw7IGJhdGNoICYmIGJhdGNoLT5ucjsgYmF0Y2ggPSBiYXRjaC0+bmV4dCkgewogCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKGJhdGNoLT5wYWdlcywgYmF0Y2gtPm5yKTsKIAkJYmF0Y2gtPm5yID0gMDsKIAl9CkBAIC0yNTYsOSArMjU5LDYgQEAKIAogdm9pZCB0bGJfZmx1c2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCiB7Ci0JaWYgKCF0bGItPmVuZCkKLQkJcmV0dXJuOwotCiAJdGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7CiAJdGxiX2ZsdXNoX21tdV9mcmVlKHRsYik7CiB9CkBAIC0yMTM3LDE3ICsyMTM3LDI0IEBACiAJCWlmICghZGlydHlfcGFnZSkKIAkJCXJldHVybiByZXQ7CiAKLQkJLyoKLQkJICogWWVzLCBWaXJnaW5pYSwgdGhpcyBpcyBhY3R1YWxseSByZXF1aXJlZCB0byBwcmV2ZW50IGEgcmFjZQotCQkgKiB3aXRoIGNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKCkgZnJvbSBjbGVhcmluZyB0aGUgcGFnZSBkaXJ0eQotCQkgKiBiaXQgYWZ0ZXIgaXQgY2xlYXIgYWxsIGRpcnR5IHB0ZXMsIGJ1dCBiZWZvcmUgYSByYWNpbmcKLQkJICogZG9fd3BfcGFnZSBpbnN0YWxscyBhIGRpcnR5IHB0ZS4KLQkJICoKLQkJICogZG9fc2hhcmVkX2ZhdWx0IGlzIHByb3RlY3RlZCBzaW1pbGFybHkuCi0JCSAqLwogCQlpZiAoIXBhZ2VfbWt3cml0ZSkgewotCQkJd2FpdF9vbl9wYWdlX2xvY2tlZChkaXJ0eV9wYWdlKTsKLQkJCXNldF9wYWdlX2RpcnR5X2JhbGFuY2UoZGlydHlfcGFnZSk7CisJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwkJCWludCBkaXJ0aWVkOworCisJCQlsb2NrX3BhZ2UoZGlydHlfcGFnZSk7CisJCQlkaXJ0aWVkID0gc2V0X3BhZ2VfZGlydHkoZGlydHlfcGFnZSk7CisJCQlWTV9CVUdfT05fUEFHRShQYWdlQW5vbihkaXJ0eV9wYWdlKSwgZGlydHlfcGFnZSk7CisJCQltYXBwaW5nID0gZGlydHlfcGFnZS0+bWFwcGluZzsKKwkJCXVubG9ja19wYWdlKGRpcnR5X3BhZ2UpOworCisJCQlpZiAoZGlydGllZCAmJiBtYXBwaW5nKSB7CisJCQkJLyoKKwkJCQkgKiBTb21lIGRldmljZSBkcml2ZXJzIGRvIG5vdCBzZXQgcGFnZS5tYXBwaW5nCisJCQkJICogYnV0IHN0aWxsIGRpcnR5IHRoZWlyIHBhZ2VzCisJCQkJICovCisJCQkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZChtYXBwaW5nKTsKKwkJCX0KKwogCQkJLyogZmlsZV91cGRhdGVfdGltZSBvdXRzaWRlIHBhZ2VfbG9jayAqLwogCQkJaWYgKHZtYS0+dm1fZmlsZSkKIAkJCQlmaWxlX3VwZGF0ZV90aW1lKHZtYS0+dm1fZmlsZSk7CkBAIC0yMzc4LDEyICsyMzg1LDEyIEBACiAJCWRldGFpbHMubGFzdF9pbmRleCA9IFVMT05HX01BWDsKIAogCi0JaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKKwlpX21tYXBfbG9ja193cml0ZShtYXBwaW5nKTsKIAlpZiAodW5saWtlbHkoIVJCX0VNUFRZX1JPT1QoJm1hcHBpbmctPmlfbW1hcCkpKQogCQl1bm1hcF9tYXBwaW5nX3JhbmdlX3RyZWUoJm1hcHBpbmctPmlfbW1hcCwgJmRldGFpbHMpOwogCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhcikpKQogCQl1bm1hcF9tYXBwaW5nX3JhbmdlX2xpc3QoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsICZkZXRhaWxzKTsKLQlpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7CisJaV9tbWFwX3VubG9ja193cml0ZShtYXBwaW5nKTsKIH0KIEVYUE9SVF9TWU1CT0wodW5tYXBfbWFwcGluZ19yYW5nZSk7CiAKQEAgLTI1OTMsNyArMjYwMCw3IEBACiAJCWlmIChwcmV2ICYmIHByZXYtPnZtX2VuZCA9PSBhZGRyZXNzKQogCQkJcmV0dXJuIHByZXYtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOID8gMCA6IC1FTk9NRU07CiAKLQkJZXhwYW5kX2Rvd253YXJkcyh2bWEsIGFkZHJlc3MgLSBQQUdFX1NJWkUpOworCQlyZXR1cm4gZXhwYW5kX2Rvd253YXJkcyh2bWEsIGFkZHJlc3MgLSBQQUdFX1NJWkUpOwogCX0KIAlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU1VQKSAmJiBhZGRyZXNzICsgUEFHRV9TSVpFID09IHZtYS0+dm1fZW5kKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IHZtYS0+dm1fbmV4dDsKQEAgLTI2MDIsNyArMjYwOSw3IEBACiAJCWlmIChuZXh0ICYmIG5leHQtPnZtX3N0YXJ0ID09IGFkZHJlc3MgKyBQQUdFX1NJWkUpCiAJCQlyZXR1cm4gbmV4dC0+dm1fZmxhZ3MgJiBWTV9HUk9XU1VQID8gMCA6IC1FTk9NRU07CiAKLQkJZXhwYW5kX3Vwd2FyZHModm1hLCBhZGRyZXNzICsgUEFHRV9TSVpFKTsKKwkJcmV0dXJuIGV4cGFuZF91cHdhcmRzKHZtYSwgYWRkcmVzcyArIFBBR0VfU0laRSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjYyNSw3ICsyNjMyLDcgQEAKIAogCS8qIENoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIGEgZ3VhcmQgcGFnZSB0byB0aGUgc3RhY2sgKi8KIAlpZiAoY2hlY2tfc3RhY2tfZ3VhcmRfcGFnZSh2bWEsIGFkZHJlc3MpIDwgMCkKLQkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7CiAKIAkvKiBVc2UgdGhlIHplcm8tcGFnZSBmb3IgcmVhZHMgKi8KIAlpZiAoIShmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpICYmICFtbV9mb3JiaWRzX3plcm9wYWdlKG1tKSkgewpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDdiMzZhYTcuLjdmNjg0ZDUgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTc3OCwxMCArNzc4LDEyIEBACiAJCWlmIChleHBvcnRlciAmJiBleHBvcnRlci0+YW5vbl92bWEgJiYgIWltcG9ydGVyLT5hbm9uX3ZtYSkgewogCQkJaW50IGVycm9yOwogCi0JCQllcnJvciA9IGFub25fdm1hX2Nsb25lKGltcG9ydGVyLCBleHBvcnRlcik7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJcmV0dXJuIGVycm9yOwogCQkJaW1wb3J0ZXItPmFub25fdm1hID0gZXhwb3J0ZXItPmFub25fdm1hOworCQkJZXJyb3IgPSBhbm9uX3ZtYV9jbG9uZShpbXBvcnRlciwgZXhwb3J0ZXIpOworCQkJaWYgKGVycm9yKSB7CisJCQkJaW1wb3J0ZXItPmFub25fdm1hID0gTlVMTDsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTIwOTksMTQgKzIxMDEsMTcgQEAKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJc3RydWN0IHJsaW1pdCAqcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbTsKLQl1bnNpZ25lZCBsb25nIG5ld19zdGFydDsKKwl1bnNpZ25lZCBsb25nIG5ld19zdGFydCwgYWN0dWFsX3NpemU7CiAKIAkvKiBhZGRyZXNzIHNwYWNlIGxpbWl0IHRlc3RzICovCiAJaWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCBncm93KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBTdGFjayBsaW1pdCB0ZXN0ICovCi0JaWYgKHNpemUgPiBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIpKQorCWFjdHVhbF9zaXplID0gc2l6ZTsKKwlpZiAoc2l6ZSAmJiAodm1hLT52bV9mbGFncyAmIChWTV9HUk9XU1VQIHwgVk1fR1JPV1NET1dOKSkpCisJCWFjdHVhbF9zaXplIC09IFBBR0VfU0laRTsKKwlpZiAoYWN0dWFsX3NpemUgPiBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIG1sb2NrIGxpbWl0IHRlc3RzICovCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCBkNWQ4MWY1Li42ZjQzMzUyIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTE1NDEsMTYgKzE1NDEsNiBAQAogCQliZGlfc3RhcnRfYmFja2dyb3VuZF93cml0ZWJhY2soYmRpKTsKIH0KIAotdm9pZCBzZXRfcGFnZV9kaXJ0eV9iYWxhbmNlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCWlmIChzZXRfcGFnZV9kaXJ0eShwYWdlKSkgewotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQotCQlpZiAobWFwcGluZykKLQkJCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWQobWFwcGluZyk7Ci0JfQotfQotCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBiZHBfcmF0ZWxpbWl0cyk7CiAKIC8qCkBAIC0yMTIzLDMyICsyMTEzLDI1IEBACiAgKiBwYWdlIGRpcnR5IGluIHRoYXQgY2FzZSwgYnV0IG5vdCBhbGwgdGhlIGJ1ZmZlcnMuICBUaGlzIGlzIGEgImJvdHRvbS11cCIKICAqIGRpcnR5aW5nLCB3aGVyZWFzIF9fc2V0X3BhZ2VfZGlydHlfYnVmZmVycygpIGlzIGEgInRvcC1kb3duIiBkaXJ0eWluZy4KICAqCi0gKiBNb3N0IGNhbGxlcnMgaGF2ZSBsb2NrZWQgdGhlIHBhZ2UsIHdoaWNoIHBpbnMgdGhlIGFkZHJlc3Nfc3BhY2UgaW4gbWVtb3J5LgotICogQnV0IHphcF9wdGVfcmFuZ2UoKSBkb2VzIG5vdCBsb2NrIHRoZSBwYWdlLCBob3dldmVyIGluIHRoYXQgY2FzZSB0aGUKLSAqIG1hcHBpbmcgaXMgcGlubmVkIGJ5IHRoZSB2bWEncyAtPnZtX2ZpbGUgcmVmZXJlbmNlLgotICoKLSAqIFdlIHRha2UgY2FyZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhZ2Ugd2FzIHRydW5jYXRlZCBmcm9tIHRoZQotICogbWFwcGluZyBieSByZS1jaGVja2luZyBwYWdlX21hcHBpbmcoKSBpbnNpZGUgdHJlZV9sb2NrLgorICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGlzIGRvZXNuJ3QgcmFjZSB3aXRoIHRydW5jYXRpb24uICBNb3N0IHdpbGwgc2ltcGx5CisgKiBob2xkIHRoZSBwYWdlIGxvY2ssIGJ1dCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBjYWxscyB3aXRoIHRoZSBwYWdlIG1hcHBlZCBhbmQKKyAqIHRoZSBwdGUgbG9jayBoZWxkLCB3aGljaCBhbHNvIGxvY2tzIG91dCB0cnVuY2F0aW9uLgogICovCiBpbnQgX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJaWYgKCFUZXN0U2V0UGFnZURpcnR5KHBhZ2UpKSB7CiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzI7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJaWYgKCFtYXBwaW5nKQogCQkJcmV0dXJuIDE7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hcHBpbmctPnRyZWVfbG9jaywgZmxhZ3MpOwotCQltYXBwaW5nMiA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQkJaWYgKG1hcHBpbmcyKSB7IC8qIFJhY2Ugd2l0aCB0cnVuY2F0ZT8gKi8KLQkJCUJVR19PTihtYXBwaW5nMiAhPSBtYXBwaW5nKTsKLQkJCVdBUk5fT05fT05DRSghUGFnZVByaXZhdGUocGFnZSkgJiYgIVBhZ2VVcHRvZGF0ZShwYWdlKSk7Ci0JCQlhY2NvdW50X3BhZ2VfZGlydGllZChwYWdlLCBtYXBwaW5nKTsKLQkJCXJhZGl4X3RyZWVfdGFnX3NldCgmbWFwcGluZy0+cGFnZV90cmVlLAotCQkJCXBhZ2VfaW5kZXgocGFnZSksIFBBR0VDQUNIRV9UQUdfRElSVFkpOwotCQl9CisJCUJVR19PTihwYWdlX21hcHBpbmcocGFnZSkgIT0gbWFwcGluZyk7CisJCVdBUk5fT05fT05DRSghUGFnZVByaXZhdGUocGFnZSkgJiYgIVBhZ2VVcHRvZGF0ZShwYWdlKSk7CisJCWFjY291bnRfcGFnZV9kaXJ0aWVkKHBhZ2UsIG1hcHBpbmcpOworCQlyYWRpeF90cmVlX3RhZ19zZXQoJm1hcHBpbmctPnBhZ2VfdHJlZSwgcGFnZV9pbmRleChwYWdlKSwKKwkJCQkgICBQQUdFQ0FDSEVfVEFHX0RJUlRZKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFwcGluZy0+dHJlZV9sb2NrLCBmbGFncyk7CiAJCWlmIChtYXBwaW5nLT5ob3N0KSB7CiAJCQkvKiAhUGFnZUFub24gJiYgIXN3YXBwZXJfc3BhY2UgKi8KQEAgLTIzMDUsMTIgKzIyODgsMTAgQEAKIAkJLyoKIAkJICogV2UgY2FyZWZ1bGx5IHN5bmNocm9uaXNlIGZhdWx0IGhhbmRsZXJzIGFnYWluc3QKIAkJICogaW5zdGFsbGluZyBhIGRpcnR5IHB0ZSBhbmQgbWFya2luZyB0aGUgcGFnZSBkaXJ0eQotCQkgKiBhdCB0aGlzIHBvaW50LiBXZSBkbyB0aGlzIGJ5IGhhdmluZyB0aGVtIGhvbGQgdGhlCi0JCSAqIHBhZ2UgbG9jayBhdCBzb21lIHBvaW50IGFmdGVyIGluc3RhbGxpbmcgdGhlaXIKLQkJICogcHRlLCBidXQgYmVmb3JlIG1hcmtpbmcgdGhlIHBhZ2UgZGlydHkuCi0JCSAqIFBhZ2VzIGFyZSBhbHdheXMgbG9ja2VkIGNvbWluZyBpbiBoZXJlLCBzbyB3ZSBnZXQKLQkJICogdGhlIGRlc2lyZWQgZXhjbHVzaW9uLiBTZWUgbW0vbWVtb3J5LmM6ZG9fd3BfcGFnZSgpCi0JCSAqIGZvciBtb3JlIGNvbW1lbnRzLgorCQkgKiBhdCB0aGlzIHBvaW50LiAgV2UgZG8gdGhpcyBieSBoYXZpbmcgdGhlbSBob2xkIHRoZQorCQkgKiBwYWdlIGxvY2sgd2hpbGUgZGlydHlpbmcgdGhlIHBhZ2UsIGFuZCBwYWdlcyBhcmUKKwkJICogYWx3YXlzIGxvY2tlZCBjb21pbmcgaW4gaGVyZSwgc28gd2UgZ2V0IHRoZSBkZXNpcmVkCisJCSAqIGV4Y2x1c2lvbi4KIAkJICovCiAJCWlmIChUZXN0Q2xlYXJQYWdlRGlydHkocGFnZSkpIHsKIAkJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggNzYzM2M1MC4uOGUyMGY5YyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMjMzMiwxMiArMjMzMiwyMSBAQAogX19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4LAogCW5vZGVtYXNrX3QgKm5vZGVtYXNrLCBzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsCi0JaW50IGNsYXNzem9uZV9pZHgsIGludCBtaWdyYXRldHlwZSkKKwlpbnQgY2xhc3N6b25lX2lkeCwgaW50IG1pZ3JhdGV0eXBlLCB1bnNpZ25lZCBsb25nICpkaWRfc29tZV9wcm9ncmVzcykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCS8qIEFjcXVpcmUgdGhlIHBlci16b25lIG9vbSBsb2NrIGZvciBlYWNoIHpvbmUgKi8KKwkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSAwOworCisJaWYgKG9vbV9raWxsZXJfZGlzYWJsZWQpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBBY3F1aXJlIHRoZSBwZXItem9uZSBvb20gbG9jayBmb3IgZWFjaCB6b25lLiAgSWYgdGhhdAorCSAqIGZhaWxzLCBzb21lYm9keSBlbHNlIGlzIG1ha2luZyBwcm9ncmVzcyBmb3IgdXMuCisJICovCiAJaWYgKCFvb21fem9uZWxpc3RfdHJ5bG9jayh6b25lbGlzdCwgZ2ZwX21hc2spKSB7CisJCSpkaWRfc29tZV9wcm9ncmVzcyA9IDE7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0yMzYzLDEyICsyMzcyLDE4IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9OT0ZBSUwpKSB7CisJCS8qIENvcmVkdW1wcyBjYW4gcXVpY2tseSBkZXBsZXRlIGFsbCBtZW1vcnkgcmVzZXJ2ZXMgKi8KKwkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfRFVNUENPUkUpCisJCQlnb3RvIG91dDsKIAkJLyogVGhlIE9PTSBraWxsZXIgd2lsbCBub3QgaGVscCBoaWdoZXIgb3JkZXIgYWxsb2NzICovCiAJCWlmIChvcmRlciA+IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKQogCQkJZ290byBvdXQ7CiAJCS8qIFRoZSBPT00ga2lsbGVyIGRvZXMgbm90IG5lZWRsZXNzbHkga2lsbCB0YXNrcyBmb3IgbG93bWVtICovCiAJCWlmIChoaWdoX3pvbmVpZHggPCBaT05FX05PUk1BTCkKIAkJCWdvdG8gb3V0OworCQkvKiBUaGUgT09NIGtpbGxlciBkb2VzIG5vdCBjb21wZW5zYXRlIGZvciBsaWdodCByZWNsYWltICovCisJCWlmICghKGdmcF9tYXNrICYgX19HRlBfRlMpKQorCQkJZ290byBvdXQ7CiAJCS8qCiAJCSAqIEdGUF9USElTTk9ERSBjb250YWlucyBfX0dGUF9OT1JFVFJZIGFuZCB3ZSBuZXZlciBoaXQgdGhpcy4KIAkJICogU2FuaXR5IGNoZWNrIGZvciBiYXJlIGNhbGxzIG9mIF9fR0ZQX1RISVNOT0RFLCBub3QgcmVhbCBPT00uCkBAIC0yMzgxLDcgKzIzOTYsNyBAQAogCX0KIAkvKiBFeGhhdXN0ZWQgd2hhdCBjYW4gYmUgZG9uZSBzbyBpdCdzIGJsYW1vIHRpbWUgKi8KIAlvdXRfb2ZfbWVtb3J5KHpvbmVsaXN0LCBnZnBfbWFzaywgb3JkZXIsIG5vZGVtYXNrLCBmYWxzZSk7Ci0KKwkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSAxOwogb3V0OgogCW9vbV96b25lbGlzdF91bmxvY2soem9uZWxpc3QsIGdmcF9tYXNrKTsKIAlyZXR1cm4gcGFnZTsKQEAgLTI2NTgsNyArMjY3Myw3IEBACiAJICAgIChnZnBfbWFzayAmIEdGUF9USElTTk9ERSkgPT0gR0ZQX1RISVNOT0RFKQogCQlnb3RvIG5vcGFnZTsKIAotcmVzdGFydDoKK3JldHJ5OgogCWlmICghKGdmcF9tYXNrICYgX19HRlBfTk9fS1NXQVBEKSkKIAkJd2FrZV9hbGxfa3N3YXBkcyhvcmRlciwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKIAkJCQlwcmVmZXJyZWRfem9uZSwgbm9kZW1hc2spOwpAQCAtMjY4MSw3ICsyNjk2LDYgQEAKIAkJY2xhc3N6b25lX2lkeCA9IHpvbmVsaXN0X3pvbmVfaWR4KHByZWZlcnJlZF96b25lcmVmKTsKIAl9CiAKLXJlYmFsYW5jZToKIAkvKiBUaGlzIGlzIHRoZSBsYXN0IGNoYW5jZSwgaW4gZ2VuZXJhbCwgYmVmb3JlIHRoZSBnb3RvIG5vcGFnZS4gKi8KIAlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzaywgbm9kZW1hc2ssIG9yZGVyLCB6b25lbGlzdCwKIAkJCWhpZ2hfem9uZWlkeCwgYWxsb2NfZmxhZ3MgJiB+QUxMT0NfTk9fV0FURVJNQVJLUywKQEAgLTI3ODgsNTQgKzI4MDIsMjggQEAKIAlpZiAocGFnZSkKIAkJZ290byBnb3RfcGc7CiAKLQkvKgotCSAqIElmIHdlIGZhaWxlZCB0byBtYWtlIGFueSBwcm9ncmVzcyByZWNsYWltaW5nLCB0aGVuIHdlIGFyZQotCSAqIHJ1bm5pbmcgb3V0IG9mIG9wdGlvbnMgYW5kIGhhdmUgdG8gY29uc2lkZXIgZ29pbmcgT09NCi0JICovCi0JaWYgKCFkaWRfc29tZV9wcm9ncmVzcykgewotCQlpZiAob29tX2dmcF9hbGxvd2VkKGdmcF9tYXNrKSkgewotCQkJaWYgKG9vbV9raWxsZXJfZGlzYWJsZWQpCi0JCQkJZ290byBub3BhZ2U7Ci0JCQkvKiBDb3JlZHVtcHMgY2FuIHF1aWNrbHkgZGVwbGV0ZSBhbGwgbWVtb3J5IHJlc2VydmVzICovCi0JCQlpZiAoKGN1cnJlbnQtPmZsYWdzICYgUEZfRFVNUENPUkUpICYmCi0JCQkgICAgIShnZnBfbWFzayAmIF9fR0ZQX05PRkFJTCkpCi0JCQkJZ290byBub3BhZ2U7Ci0JCQlwYWdlID0gX19hbGxvY19wYWdlc19tYXlfb29tKGdmcF9tYXNrLCBvcmRlciwKLQkJCQkJem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKLQkJCQkJbm9kZW1hc2ssIHByZWZlcnJlZF96b25lLAotCQkJCQljbGFzc3pvbmVfaWR4LCBtaWdyYXRldHlwZSk7Ci0JCQlpZiAocGFnZSkKLQkJCQlnb3RvIGdvdF9wZzsKLQotCQkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9OT0ZBSUwpKSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGUgb29tIGtpbGxlciBpcyBub3QgY2FsbGVkIGZvciBoaWdoLW9yZGVyCi0JCQkJICogYWxsb2NhdGlvbnMgdGhhdCBtYXkgZmFpbCwgc28gaWYgbm8gcHJvZ3Jlc3MKLQkJCQkgKiBpcyBiZWluZyBtYWRlLCB0aGVyZSBhcmUgbm8gb3RoZXIgb3B0aW9ucyBhbmQKLQkJCQkgKiByZXRyeWluZyBpcyB1bmxpa2VseSB0byBoZWxwLgotCQkJCSAqLwotCQkJCWlmIChvcmRlciA+IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKQotCQkJCQlnb3RvIG5vcGFnZTsKLQkJCQkvKgotCQkJCSAqIFRoZSBvb20ga2lsbGVyIGlzIG5vdCBjYWxsZWQgZm9yIGxvd21lbQotCQkJCSAqIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgbmVlZGxlc3NseSBraWxsaW5nCi0JCQkJICogaW5ub2NlbnQgdGFza3MuCi0JCQkJICovCi0JCQkJaWYgKGhpZ2hfem9uZWlkeCA8IFpPTkVfTk9STUFMKQotCQkJCQlnb3RvIG5vcGFnZTsKLQkJCX0KLQotCQkJZ290byByZXN0YXJ0OwotCQl9Ci0JfQotCiAJLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIHJldHJ5IHRoZSBhbGxvY2F0aW9uICovCiAJcGFnZXNfcmVjbGFpbWVkICs9IGRpZF9zb21lX3Byb2dyZXNzOwogCWlmIChzaG91bGRfYWxsb2NfcmV0cnkoZ2ZwX21hc2ssIG9yZGVyLCBkaWRfc29tZV9wcm9ncmVzcywKIAkJCQkJCXBhZ2VzX3JlY2xhaW1lZCkpIHsKKwkJLyoKKwkJICogSWYgd2UgZmFpbCB0byBtYWtlIHByb2dyZXNzIGJ5IGZyZWVpbmcgaW5kaXZpZHVhbAorCQkgKiBwYWdlcywgYnV0IHRoZSBhbGxvY2F0aW9uIHdhbnRzIHVzIHRvIGtlZXAgZ29pbmcsCisJCSAqIHN0YXJ0IE9PTSBraWxsaW5nIHRhc2tzLgorCQkgKi8KKwkJaWYgKCFkaWRfc29tZV9wcm9ncmVzcykgeworCQkJcGFnZSA9IF9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfbWFzaywgb3JkZXIsIHpvbmVsaXN0LAorCQkJCQkJaGlnaF96b25laWR4LCBub2RlbWFzaywKKwkJCQkJCXByZWZlcnJlZF96b25lLCBjbGFzc3pvbmVfaWR4LAorCQkJCQkJbWlncmF0ZXR5cGUsJmRpZF9zb21lX3Byb2dyZXNzKTsKKwkJCWlmIChwYWdlKQorCQkJCWdvdG8gZ290X3BnOworCQkJaWYgKCFkaWRfc29tZV9wcm9ncmVzcykKKwkJCQlnb3RvIG5vcGFnZTsKKwkJfQogCQkvKiBXYWl0IGZvciBzb21lIHdyaXRlIHJlcXVlc3RzIHRvIGNvbXBsZXRlIHRoZW4gcmV0cnkgKi8KIAkJd2FpdF9pZmZfY29uZ2VzdGVkKHByZWZlcnJlZF96b25lLCBCTEtfUldfQVNZTkMsIEhaLzUwKTsKLQkJZ290byByZWJhbGFuY2U7CisJCWdvdG8gcmV0cnk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogSGlnaC1vcmRlciBhbGxvY2F0aW9ucyBkbyBub3QgbmVjZXNzYXJpbHkgbG9vcCBhZnRlcgpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IGM1YmMyNDEuLjcxY2Q1YmQgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTcyLDYgKzcyLDggQEAKIAlhbm9uX3ZtYSA9IGttZW1fY2FjaGVfYWxsb2MoYW5vbl92bWFfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAoYW5vbl92bWEpIHsKIAkJYXRvbWljX3NldCgmYW5vbl92bWEtPnJlZmNvdW50LCAxKTsKKwkJYW5vbl92bWEtPmRlZ3JlZSA9IDE7CS8qIFJlZmVyZW5jZSBmb3IgZmlyc3Qgdm1hICovCisJCWFub25fdm1hLT5wYXJlbnQgPSBhbm9uX3ZtYTsKIAkJLyoKIAkJICogSW5pdGlhbGlzZSB0aGUgYW5vbl92bWEgcm9vdCB0byBwb2ludCB0byBpdHNlbGYuIElmIGNhbGxlZAogCQkgKiBmcm9tIGZvcmssIHRoZSByb290IHdpbGwgYmUgcmVzZXQgdG8gdGhlIHBhcmVudHMgYW5vbl92bWEuCkBAIC0xODgsNiArMTkwLDggQEAKIAkJaWYgKGxpa2VseSghdm1hLT5hbm9uX3ZtYSkpIHsKIAkJCXZtYS0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKIAkJCWFub25fdm1hX2NoYWluX2xpbmsodm1hLCBhdmMsIGFub25fdm1hKTsKKwkJCS8qIHZtYSByZWZlcmVuY2Ugb3Igc2VsZi1wYXJlbnQgbGluayBmb3IgbmV3IHJvb3QgKi8KKwkJCWFub25fdm1hLT5kZWdyZWUrKzsKIAkJCWFsbG9jYXRlZCA9IE5VTEw7CiAJCQlhdmMgPSBOVUxMOwogCQl9CkBAIC0yMzYsNiArMjQwLDE0IEBACiAvKgogICogQXR0YWNoIHRoZSBhbm9uX3ZtYXMgZnJvbSBzcmMgdG8gZHN0LgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS4KKyAqCisgKiBJZiBkc3QtPmFub25fdm1hIGlzIE5VTEwgdGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaW5kIGFuZCByZXVzZSBleGlzdGluZworICogYW5vbl92bWEgd2hpY2ggaGFzIG5vIHZtYXMgYW5kIG9ubHkgb25lIGNoaWxkIGFub25fdm1hLiBUaGlzIHByZXZlbnRzCisgKiBkZWdyYWRhdGlvbiBvZiBhbm9uX3ZtYSBoaWVyYXJjaHkgdG8gZW5kbGVzcyBsaW5lYXIgY2hhaW4gaW4gY2FzZSBvZgorICogY29uc3RhbnRseSBmb3JraW5nIHRhc2suIE9uIHRoZSBvdGhlciBoYW5kLCBhbiBhbm9uX3ZtYSB3aXRoIG1vcmUgdGhhbiBvbmUKKyAqIGNoaWxkIGlzbid0IHJldXNlZCBldmVuIGlmIHRoZXJlIHdhcyBubyBhbGl2ZSB2bWEsIHRodXMgcm1hcCB3YWxrZXIgaGFzIGEKKyAqIGdvb2QgY2hhbmNlIG9mIGF2b2lkaW5nIHNjYW5uaW5nIHRoZSB3aG9sZSBoaWVyYXJjaHkgd2hlbiBpdCBzZWFyY2hlcyB3aGVyZQorICogcGFnZSBpcyBtYXBwZWQuCiAgKi8KIGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMpCiB7CkBAIC0yNTYsNyArMjY4LDIxIEBACiAJCWFub25fdm1hID0gcGF2Yy0+YW5vbl92bWE7CiAJCXJvb3QgPSBsb2NrX2Fub25fdm1hX3Jvb3Qocm9vdCwgYW5vbl92bWEpOwogCQlhbm9uX3ZtYV9jaGFpbl9saW5rKGRzdCwgYXZjLCBhbm9uX3ZtYSk7CisKKwkJLyoKKwkJICogUmV1c2UgZXhpc3RpbmcgYW5vbl92bWEgaWYgaXRzIGRlZ3JlZSBsb3dlciB0aGFuIHR3bywKKwkJICogdGhhdCBtZWFucyBpdCBoYXMgbm8gdm1hIGFuZCBvbmx5IG9uZSBhbm9uX3ZtYSBjaGlsZC4KKwkJICoKKwkJICogRG8gbm90IGNob3NlIHBhcmVudCBhbm9uX3ZtYSwgb3RoZXJ3aXNlIGZpcnN0IGNoaWxkCisJCSAqIHdpbGwgYWx3YXlzIHJldXNlIGl0LiBSb290IGFub25fdm1hIGlzIG5ldmVyIHJldXNlZDoKKwkJICogaXQgaGFzIHNlbGYtcGFyZW50IHJlZmVyZW5jZSBhbmQgYXQgbGVhc3Qgb25lIGNoaWxkLgorCQkgKi8KKwkJaWYgKCFkc3QtPmFub25fdm1hICYmIGFub25fdm1hICE9IHNyYy0+YW5vbl92bWEgJiYKKwkJCQlhbm9uX3ZtYS0+ZGVncmVlIDwgMikKKwkJCWRzdC0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKIAl9CisJaWYgKGRzdC0+YW5vbl92bWEpCisJCWRzdC0+YW5vbl92bWEtPmRlZ3JlZSsrOwogCXVubG9ja19hbm9uX3ZtYV9yb290KHJvb3QpOwogCXJldHVybiAwOwogCkBAIC0yODAsNiArMzA2LDkgQEAKIAlpZiAoIXB2bWEtPmFub25fdm1hKQogCQlyZXR1cm4gMDsKIAorCS8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovCisJdm1hLT5hbm9uX3ZtYSA9IE5VTEw7CisKIAkvKgogCSAqIEZpcnN0LCBhdHRhY2ggdGhlIG5ldyBWTUEgdG8gdGhlIHBhcmVudCBWTUEncyBhbm9uX3ZtYXMsCiAJICogc28gcm1hcCBjYW4gZmluZCBub24tQ09XZWQgcGFnZXMgaW4gY2hpbGQgcHJvY2Vzc2VzLgpAQCAtMjg4LDYgKzMxNywxMCBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCisJLyogQW4gZXhpc3RpbmcgYW5vbl92bWEgaGFzIGJlZW4gcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqLworCWlmICh2bWEtPmFub25fdm1hKQorCQlyZXR1cm4gMDsKKwogCS8qIFRoZW4gYWRkIG91ciBvd24gYW5vbl92bWEuICovCiAJYW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpOwogCWlmICghYW5vbl92bWEpCkBAIC0zMDEsNiArMzM0LDcgQEAKIAkgKiBsb2NrIGFueSBvZiB0aGUgYW5vbl92bWFzIGluIHRoaXMgYW5vbl92bWEgdHJlZS4KIAkgKi8KIAlhbm9uX3ZtYS0+cm9vdCA9IHB2bWEtPmFub25fdm1hLT5yb290OworCWFub25fdm1hLT5wYXJlbnQgPSBwdm1hLT5hbm9uX3ZtYTsKIAkvKgogCSAqIFdpdGggcmVmY291bnRzLCBhbiBhbm9uX3ZtYSBjYW4gc3RheSBhcm91bmQgbG9uZ2VyIHRoYW4gdGhlCiAJICogcHJvY2VzcyBpdCBiZWxvbmdzIHRvLiBUaGUgcm9vdCBhbm9uX3ZtYSBuZWVkcyB0byBiZSBwaW5uZWQgdW50aWwKQEAgLTMxMSw2ICszNDUsNyBAQAogCXZtYS0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKIAlhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTsKIAlhbm9uX3ZtYV9jaGFpbl9saW5rKHZtYSwgYXZjLCBhbm9uX3ZtYSk7CisJYW5vbl92bWEtPnBhcmVudC0+ZGVncmVlKys7CiAJYW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTsKIAogCXJldHVybiAwOwpAQCAtMzQxLDEyICszNzYsMTYgQEAKIAkJICogTGVhdmUgZW1wdHkgYW5vbl92bWFzIG9uIHRoZSBsaXN0IC0gd2UnbGwgbmVlZAogCQkgKiB0byBmcmVlIHRoZW0gb3V0c2lkZSB0aGUgbG9jay4KIAkJICovCi0JCWlmIChSQl9FTVBUWV9ST09UKCZhbm9uX3ZtYS0+cmJfcm9vdCkpCisJCWlmIChSQl9FTVBUWV9ST09UKCZhbm9uX3ZtYS0+cmJfcm9vdCkpIHsKKwkJCWFub25fdm1hLT5wYXJlbnQtPmRlZ3JlZS0tOwogCQkJY29udGludWU7CisJCX0KIAogCQlsaXN0X2RlbCgmYXZjLT5zYW1lX3ZtYSk7CiAJCWFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTsKIAl9CisJaWYgKHZtYS0+YW5vbl92bWEpCisJCXZtYS0+YW5vbl92bWEtPmRlZ3JlZS0tOwogCXVubG9ja19hbm9uX3ZtYV9yb290KHJvb3QpOwogCiAJLyoKQEAgLTM1Nyw2ICszOTYsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhdmMsIG5leHQsICZ2bWEtPmFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewogCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLT5hbm9uX3ZtYTsKIAorCQlCVUdfT04oYW5vbl92bWEtPmRlZ3JlZSk7CiAJCXB1dF9hbm9uX3ZtYShhbm9uX3ZtYSk7CiAKIAkJbGlzdF9kZWwoJmF2Yy0+c2FtZV92bWEpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiZDlhNzJiLi5kY2Q5MGM4IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtMjY1Niw3ICsyNjU2LDcgQEAKIAkgKiBzaG91bGQgbWFrZSByZWFzb25hYmxlIHByb2dyZXNzLgogCSAqLwogCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsCi0JCQkJCWdmcF9tYXNrLCBub2RlbWFzaykgeworCQkJCQlnZnBfem9uZShnZnBfbWFzayksIG5vZGVtYXNrKSB7CiAJCWlmICh6b25lX2lkeCh6b25lKSA+IFpPTkVfTk9STUFMKQogCQkJY29udGludWU7CiAKQEAgLTI5MjEsMTggKzI5MjEsMjAgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBUaGVyZSBpcyBhIHBvdGVudGlhbCByYWNlIGJldHdlZW4gd2hlbiBrc3dhcGQgY2hlY2tzIGl0cyB3YXRlcm1hcmtzCi0JICogYW5kIGEgcHJvY2VzcyBnZXRzIHRocm90dGxlZC4gVGhlcmUgaXMgYWxzbyBhIHBvdGVudGlhbCByYWNlIGlmCi0JICogcHJvY2Vzc2VzIGdldCB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJieQotCSAqIGJhbGFuY2luZyB0aGUgem9uZXMgdGhhdCBjYXVzZXMga3N3YXBkIHRvIG1pc3MgYSB3YWtldXAuIElmIGtzd2FwZAotCSAqIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZCBiZSBzbGVlcGluZyBvbiBwZm1lbWFsbG9jX3dhaXQKLQkgKiBzbyB3YWtlIHRoZW0gbm93IGlmIG5lY2Vzc2FyeS4gSWYgbmVjZXNzYXJ5LCBwcm9jZXNzZXMgd2lsbCB3YWtlCi0JICoga3N3YXBkIGFuZCBnZXQgdGhyb3R0bGVkIGFnYWluCisJICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhcworCSAqIHNvb24gYXMgcGZtZW1hbGxvY193YXRlcm1hcmtfb2soKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWwKKwkgKiByYWNlIGJldHdlZW4gd2hlbiBrc3dhcGQgY2hlY2tzIHRoZSB3YXRlcm1hcmtzIGFuZCBhIHByb2Nlc3MgZ2V0cworCSAqIHRocm90dGxlZC4gVGhlcmUgaXMgYWxzbyBhIHBvdGVudGlhbCByYWNlIGlmIHByb2Nlc3NlcyBnZXQKKwkgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZQorCSAqIHpvbmVzLCB3aGljaCBjYXVzZXMga3N3YXBkIHRvIGV4aXQgYmFsYW5jZV9wZ2RhdCgpIGJlZm9yZSByZWFjaGluZworCSAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZAorCSAqIGJlIHNsZWVwaW5nIG9uIHBmbWVtYWxsb2Nfd2FpdCwgc28gd2FrZSB0aGVtIG5vdyBpZiBuZWNlc3NhcnkuIElmCisJICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0CisJICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpcworCSAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuCiAJICovCi0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnBnZGF0LT5wZm1lbWFsbG9jX3dhaXQpKSB7Ci0JCXdha2VfdXAoJnBnZGF0LT5wZm1lbWFsbG9jX3dhaXQpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQorCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwZ2RhdC0+cGZtZW1hbGxvY193YWl0KSkKKwkJd2FrZV91cF9hbGwoJnBnZGF0LT5wZm1lbWFsbG9jX3dhaXQpOwogCiAJcmV0dXJuIHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgY2xhc3N6b25lX2lkeCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMgYi9uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMKaW5kZXggZmMxODM1Yy4uMDBmOWUxNCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAJa2ZyZWUoZW50cnkpOwogCiAJLyogTWFrZSByb29tIGZvciB0aGUgcmVzdCBvZiB0aGUgZnJhZ21lbnRzLiAqLwotCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYl9vdXQsIDAsIHNpemUgLSBza2ItPmxlbiwgR0ZQX0FUT01JQykgPCAwKSB7CisJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiX291dCwgMCwgc2l6ZSAtIHNrYl9vdXQtPmxlbiwgR0ZQX0FUT01JQykgPCAwKSB7CiAJCWtmcmVlX3NrYihza2Jfb3V0KTsKIAkJc2tiX291dCA9IE5VTEw7CiAJCWdvdG8gZnJlZTsKQEAgLTQzNCw3ICs0MzQsNyBAQAogCSAqIGZyYWdtZW50cyBsYXJnZXIgdGhhbiBCQVRBRFZfRlJBR19NQVhfRlJBR19TSVpFCiAJICovCiAJbXR1ID0gbWluX3QodW5zaWduZWQsIG10dSwgQkFUQURWX0ZSQUdfTUFYX0ZSQUdfU0laRSk7Ci0JbWF4X2ZyYWdtZW50X3NpemUgPSAobXR1IC0gaGVhZGVyX3NpemUgLSBFVEhfSExFTik7CisJbWF4X2ZyYWdtZW50X3NpemUgPSBtdHUgLSBoZWFkZXJfc2l6ZTsKIAltYXhfcGFja2V0X3NpemUgPSBtYXhfZnJhZ21lbnRfc2l6ZSAqIEJBVEFEVl9GUkFHX01BWF9GUkFHTUVOVFM7CiAKIAkvKiBEb24ndCBldmVuIHRyeSB0byBmcmFnbWVudCwgaWYgd2UgbmVlZCBtb3JlIHRoYW4gMTYgZnJhZ21lbnRzICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYwppbmRleCA5MGNmZjU4Li5lMGJjZjllIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMKQEAgLTgxMCw3ICs4MTAsNyBAQAogCQlnb3RvIG91dDsKIAogCWd3X25vZGUgPSBiYXRhZHZfZ3dfbm9kZV9nZXQoYmF0X3ByaXYsIG9yaWdfZHN0X25vZGUpOwotCWlmICghZ3dfbm9kZS0+YmFuZHdpZHRoX2Rvd24gPT0gMCkKKwlpZiAoIWd3X25vZGUpCiAJCWdvdG8gb3V0OwogCiAJc3dpdGNoIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmd3X21vZGUpKSB7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYyBiL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jCmluZGV4IGFiNmJiMmEuLmIyNGU0YmIgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jCisrKyBiL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jCkBAIC02ODUsMTEgKzY4NSwxMyBAQAogCQlpZiAob3JpZ19pbml0aWFsaXplZCkKIAkJCWF0b21pY19kZWMoJmJhdF9wcml2LT5tY2FzdC5udW1fZGlzYWJsZWQpOwogCQlvcmlnLT5jYXBhYmlsaXRpZXMgfD0gQkFUQURWX09SSUdfQ0FQQV9IQVNfTUNBU1Q7Ci0JLyogSWYgbWNhc3Qgc3VwcG9ydCBpcyBiZWluZyBzd2l0Y2hlZCBvZmYgaW5jcmVhc2UgdGhlIGRpc2FibGVkCi0JICogbWNhc3Qgbm9kZSBjb3VudGVyLgorCS8qIElmIG1jYXN0IHN1cHBvcnQgaXMgYmVpbmcgc3dpdGNoZWQgb2ZmIG9yIGlmIHRoaXMgaXMgYW4gaW5pdGlhbAorCSAqIE9HTSB3aXRob3V0IG1jYXN0IHN1cHBvcnQgdGhlbiBpbmNyZWFzZSB0aGUgZGlzYWJsZWQgbWNhc3QKKwkgKiBub2RlIGNvdW50ZXIuCiAJICovCiAJfSBlbHNlIGlmICghb3JpZ19tY2FzdF9lbmFibGVkICYmCi0JCSAgIG9yaWctPmNhcGFiaWxpdGllcyAmIEJBVEFEVl9PUklHX0NBUEFfSEFTX01DQVNUKSB7CisJCSAgIChvcmlnLT5jYXBhYmlsaXRpZXMgJiBCQVRBRFZfT1JJR19DQVBBX0hBU19NQ0FTVCB8fAorCQkgICAgIW9yaWdfaW5pdGlhbGl6ZWQpKSB7CiAJCWF0b21pY19pbmMoJmJhdF9wcml2LT5tY2FzdC5udW1fZGlzYWJsZWQpOwogCQlvcmlnLT5jYXBhYmlsaXRpZXMgJj0gfkJBVEFEVl9PUklHX0NBUEFfSEFTX01DQVNUOwogCX0KQEAgLTczOCw3ICs3NDAsOCBAQAogewogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBvcmlnLT5iYXRfcHJpdjsKIAotCWlmICghKG9yaWctPmNhcGFiaWxpdGllcyAmIEJBVEFEVl9PUklHX0NBUEFfSEFTX01DQVNUKSkKKwlpZiAoIShvcmlnLT5jYXBhYmlsaXRpZXMgJiBCQVRBRFZfT1JJR19DQVBBX0hBU19NQ0FTVCkgJiYKKwkgICAgb3JpZy0+Y2FwYV9pbml0aWFsaXplZCAmIEJBVEFEVl9PUklHX0NBUEFfSEFTX01DQVNUKQogCQlhdG9taWNfZGVjKCZiYXRfcHJpdi0+bWNhc3QubnVtX2Rpc2FibGVkKTsKIAogCWJhdGFkdl9tY2FzdF93YW50X3Vuc25vb3BfdXBkYXRlKGJhdF9wcml2LCBvcmlnLCBCQVRBRFZfTk9fRkxBR1MpOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbmV0d29yay1jb2RpbmcuYyBiL25ldC9iYXRtYW4tYWR2L25ldHdvcmstY29kaW5nLmMKaW5kZXggOGQwNGQxNy4uZmFiNDdmMSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbmV0d29yay1jb2RpbmcuYworKysgYi9uZXQvYmF0bWFuLWFkdi9uZXR3b3JrLWNvZGluZy5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlpZiAoIWJhdF9wcml2LT5uYy5kZWNvZGluZ19oYXNoKQogCQlnb3RvIGVycjsKIAotCWJhdGFkdl9oYXNoX3NldF9sb2NrX2NsYXNzKGJhdF9wcml2LT5uYy5jb2RpbmdfaGFzaCwKKwliYXRhZHZfaGFzaF9zZXRfbG9ja19jbGFzcyhiYXRfcHJpdi0+bmMuZGVjb2RpbmdfaGFzaCwKIAkJCQkgICAmYmF0YWR2X25jX2RlY29kaW5nX2hhc2hfbG9ja19jbGFzc19rZXkpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmJhdF9wcml2LT5uYy53b3JrLCBiYXRhZHZfbmNfd29ya2VyKTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYwppbmRleCA2YTQ4NDUxLi5iZWE4MTk4IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCkBAIC01NzAsOSArNTcwLDYgQEAKIAogCWJhdGFkdl9mcmFnX3B1cmdlX29yaWcob3JpZ19ub2RlLCBOVUxMKTsKIAotCWJhdGFkdl90dF9nbG9iYWxfZGVsX29yaWcob3JpZ19ub2RlLT5iYXRfcHJpdiwgb3JpZ19ub2RlLCAtMSwKLQkJCQkgICJvcmlnaW5hdG9yIHRpbWVkIG91dCIpOwotCiAJaWYgKG9yaWdfbm9kZS0+YmF0X3ByaXYtPmJhdF9hbGdvX29wcy0+YmF0X29yaWdfZnJlZSkKIAkJb3JpZ19ub2RlLT5iYXRfcHJpdi0+YmF0X2FsZ29fb3BzLT5iYXRfb3JpZ19mcmVlKG9yaWdfbm9kZSk7CiAKQEAgLTY3OCw2ICs2NzUsNyBAQAogCWF0b21pY19zZXQoJm9yaWdfbm9kZS0+bGFzdF90dHZuLCAwKTsKIAlvcmlnX25vZGUtPnR0X2J1ZmYgPSBOVUxMOwogCW9yaWdfbm9kZS0+dHRfYnVmZl9sZW4gPSAwOworCW9yaWdfbm9kZS0+bGFzdF9zZWVuID0gamlmZmllczsKIAlyZXNldF90aW1lID0gamlmZmllcyAtIDEgLSBtc2Vjc190b19qaWZmaWVzKEJBVEFEVl9SRVNFVF9QUk9URUNUSU9OX01TKTsKIAlvcmlnX25vZGUtPmJjYXN0X3NlcW5vX3Jlc2V0ID0gcmVzZXRfdGltZTsKICNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVApAQCAtOTc3LDYgKzk3NSw5IEBACiAJCQlpZiAoYmF0YWR2X3B1cmdlX29yaWdfbm9kZShiYXRfcHJpdiwgb3JpZ19ub2RlKSkgewogCQkJCWJhdGFkdl9nd19ub2RlX2RlbGV0ZShiYXRfcHJpdiwgb3JpZ19ub2RlKTsKIAkJCQlobGlzdF9kZWxfcmN1KCZvcmlnX25vZGUtPmhhc2hfZW50cnkpOworCQkJCWJhdGFkdl90dF9nbG9iYWxfZGVsX29yaWcob3JpZ19ub2RlLT5iYXRfcHJpdiwKKwkJCQkJCQkgIG9yaWdfbm9kZSwgLTEsCisJCQkJCQkJICAib3JpZ2luYXRvciB0aW1lZCBvdXQiKTsKIAkJCQliYXRhZHZfb3JpZ19ub2RlX2ZyZWVfcmVmKG9yaWdfbm9kZSk7CiAJCQkJY29udGludWU7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMgYi9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMKaW5kZXggMzVmNzZmMi4uNjY0OGYzMiAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5jCisrKyBiL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYwpAQCAtNDQzLDExICs0NDMsMTMgQEAKIAogCXJvdXRlciA9IGJhdGFkdl9vcmlnX3JvdXRlcl9nZXQob3JpZ19ub2RlLCByZWN2X2lmKTsKIAorCWlmICghcm91dGVyKQorCQlyZXR1cm4gcm91dGVyOworCiAJLyogb25seSBjb25zaWRlciBib25kaW5nIGZvciByZWN2X2lmID09IEJBVEFEVl9JRl9ERUZBVUxUIChmaXJzdCBob3ApCiAJICogYW5kIGlmIGFjdGl2YXRlZC4KIAkgKi8KLQlpZiAocmVjdl9pZiA9PSBCQVRBRFZfSUZfREVGQVVMVCB8fCAhYXRvbWljX3JlYWQoJmJhdF9wcml2LT5ib25kaW5nKSB8fAotCSAgICAhcm91dGVyKQorCWlmICghKHJlY3ZfaWYgPT0gQkFUQURWX0lGX0RFRkFVTFQgJiYgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5ib25kaW5nKSkpCiAJCXJldHVybiByb3V0ZXI7CiAKIAkvKiBib25kaW5nOiBsb29wIHRocm91Z2ggdGhlIGxpc3Qgb2YgcG9zc2libGUgcm91dGVycyBmb3VuZApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC82bG93cGFuLmMgYi9uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYwppbmRleCA3NjYxN2JlLi5jOTg5MjUzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYworKysgYi9uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYwpAQCAtMzkwLDcgKzM5MCw2IEBACiAKIGRyb3A6CiAJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0Ja2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwppbmRleCA4NWJjYzIxLi5jZTgyNzIyZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCkBAIC01MzMsNiArNTMzLDkgQEAKIAogCUJUX0RCRygiIik7CiAKKwlpZiAoIWwyY2FwX2lzX3NvY2tldChzb2NrKSkKKwkJcmV0dXJuIC1FQkFERkQ7CisKIAliYXN3YXAoKHZvaWQgKikgZHN0LCAmbDJjYXBfcGkoc29jay0+c2spLT5jaGFuLT5kc3QpOwogCWJhc3dhcCgodm9pZCAqKSBzcmMsICZsMmNhcF9waShzb2NrLT5zayktPmNoYW4tPnNyYyk7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCmluZGV4IDY3ZmU1ZTguLjI3OGExOTQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwpAQCAtMzM0LDYgKzMzNCw5IEBACiAKIAlCVF9EQkcoIiIpOwogCisJaWYgKCFsMmNhcF9pc19zb2NrZXQoc29jaykpCisJCXJldHVybiAtRUJBREZEOworCiAJc2Vzc2lvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbXRwX3Nlc3Npb24pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNlc3Npb24pCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggMzlhNWM4YS4uM2YyZThiOCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC0yNDIsNyArMjQyLDggQEAKIAlpZiAocnAtPnN0YXR1cykKIAkJcmV0dXJuOwogCi0JaWYgKHRlc3RfYml0KEhDSV9TRVRVUCwgJmhkZXYtPmRldl9mbGFncykpCisJaWYgKHRlc3RfYml0KEhDSV9TRVRVUCwgJmhkZXYtPmRldl9mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoSENJX0NPTkZJRywgJmhkZXYtPmRldl9mbGFncykpCiAJCW1lbWNweShoZGV2LT5kZXZfbmFtZSwgcnAtPm5hbWUsIEhDSV9NQVhfTkFNRV9MRU5HVEgpOwogfQogCkBAIC01MDksNyArNTEwLDggQEAKIAlpZiAocnAtPnN0YXR1cykKIAkJcmV0dXJuOwogCi0JaWYgKHRlc3RfYml0KEhDSV9TRVRVUCwgJmhkZXYtPmRldl9mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoSENJX1NFVFVQLCAmaGRldi0+ZGV2X2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChIQ0lfQ09ORklHLCAmaGRldi0+ZGV2X2ZsYWdzKSkgewogCQloZGV2LT5oY2lfdmVyID0gcnAtPmhjaV92ZXI7CiAJCWhkZXYtPmhjaV9yZXYgPSBfX2xlMTZfdG9fY3B1KHJwLT5oY2lfcmV2KTsKIAkJaGRldi0+bG1wX3ZlciA9IHJwLT5sbXBfdmVyOwpAQCAtNTI4LDcgKzUzMCw4IEBACiAJaWYgKHJwLT5zdGF0dXMpCiAJCXJldHVybjsKIAotCWlmICh0ZXN0X2JpdChIQ0lfU0VUVVAsICZoZGV2LT5kZXZfZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChIQ0lfU0VUVVAsICZoZGV2LT5kZXZfZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEhDSV9DT05GSUcsICZoZGV2LT5kZXZfZmxhZ3MpKQogCQltZW1jcHkoaGRldi0+Y29tbWFuZHMsIHJwLT5jb21tYW5kcywgc2l6ZW9mKGhkZXYtPmNvbW1hbmRzKSk7CiB9CiAKQEAgLTIxOTQsNyArMjE5NywxMiBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKCF0ZXN0X2JpdChIQ0lfQ09OTkVDVEFCTEUsICZoZGV2LT5kZXZfZmxhZ3MpICYmCisJLyogUmVxdWlyZSBIQ0lfQ09OTkVDVEFCTEUgb3IgYSB3aGl0ZWxpc3QgZW50cnkgdG8gYWNjZXB0IHRoZQorCSAqIGNvbm5lY3Rpb24uIFRoZXNlIGZlYXR1cmVzIGFyZSBvbmx5IHRvdWNoZWQgdGhyb3VnaCBtZ210IHNvCisJICogb25seSBkbyB0aGUgY2hlY2tzIGlmIEhDSV9NR01UIGlzIHNldC4KKwkgKi8KKwlpZiAodGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5kZXZfZmxhZ3MpICYmCisJICAgICF0ZXN0X2JpdChIQ0lfQ09OTkVDVEFCTEUsICZoZGV2LT5kZXZfZmxhZ3MpICYmCiAJICAgICFoY2lfYmRhZGRyX2xpc3RfbG9va3VwKCZoZGV2LT53aGl0ZWxpc3QsICZldi0+YmRhZGRyLAogCQkJCSAgICBCREFERFJfQlJFRFIpKSB7CiAJCSAgICBoY2lfcmVqZWN0X2Nvbm4oaGRldiwgJmV2LT5iZGFkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggY2MyNWQwYi4uMDczNDhlMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC0xMzE0LDEzICsxMzE0LDE0IEBACiB7CiAJc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubjsKLQlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKGN0cmxfc29jay0+c2spLT5jaGFuOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCWludCByZXQ7CiAKIAlyZXQgPSBoaWRwX3ZlcmlmeV9zb2NrZXRzKGN0cmxfc29jaywgaW50cl9zb2NrKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJY2hhbiA9IGwyY2FwX3BpKGN0cmxfc29jay0+c2spLT5jaGFuOwogCWNvbm4gPSBOVUxMOwogCWwyY2FwX2NoYW5fbG9jayhjaGFuKTsKIAlpZiAoY2hhbi0+Y29ubikKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwppbmRleCAxZjFkZTcxLi5lMmFhN2JlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCkBAIC0xNTQsNyArMTU0LDggQEAKIAlkc3QgPSBOVUxMOwogCiAJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGRlc3QpKSB7Ci0JCWlmIChwLT5mbGFncyAmIEJSX1BST1hZQVJQICYmCisJCWlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSAmJgorCQkgICAgcC0+ZmxhZ3MgJiBCUl9QUk9YWUFSUCAmJgogCQkgICAgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApKQogCQkJYnJfZG9fcHJveHlfYXJwKHNrYiwgYnIsIHZpZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9jZXBoL2F1dGhfeC5jIGIvbmV0L2NlcGgvYXV0aF94LmMKaW5kZXggMTU4NDU4MS4uYmE2ZWIxNyAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvYXV0aF94LmMKKysrIGIvbmV0L2NlcGgvYXV0aF94LmMKQEAgLTY3Niw3ICs2NzYsNyBAQAogCWludCByZXQ7CiAJY2hhciB0bXBfZW5jWzQwXTsKIAlfX2xlMzIgdG1wWzVdID0gewotCQkxNnUsIG1zZy0+aGRyLmNyYywgbXNnLT5mb290ZXIuZnJvbnRfY3JjLAorCQljcHVfdG9fbGUzMigxNiksIG1zZy0+aGRyLmNyYywgbXNnLT5mb290ZXIuZnJvbnRfY3JjLAogCQltc2ctPmZvb3Rlci5taWRkbGVfY3JjLCBtc2ctPmZvb3Rlci5kYXRhX2NyYywKIAl9OwogCXJldCA9IGNlcGhfeF9lbmNyeXB0KCZhdS0+c2Vzc2lvbl9rZXksICZ0bXAsIHNpemVvZih0bXApLApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbW9uX2NsaWVudC5jIGIvbmV0L2NlcGgvbW9uX2NsaWVudC5jCmluZGV4IGE4MzA2MmMuLmYyMTQ4ZTIgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21vbl9jbGllbnQuYworKysgYi9uZXQvY2VwaC9tb25fY2xpZW50LmMKQEAgLTcxNyw3ICs3MTcsNyBAQAogCWlmIChzcmNfbGVuICE9IHNpemVvZih1MzIpICsgZHN0X2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlidWZfbGVuID0gbGUzMl90b19jcHUoKih1MzIgKilzcmMpOworCWJ1Zl9sZW4gPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXNyYyk7CiAJaWYgKGJ1Zl9sZW4gIT0gZHN0X2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggZjQxMWMyOC4uMTcxNDIwZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE2OTQsNiArMTY5NCw3IEBACiAKIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgdHJ1ZSk7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwlza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBldGhfaGRyKHNrYiksIEVUSF9ITEVOKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUyMiw3ICsyNTIzLDcgQEAKIC8qIElmIE1QTFMgb2ZmbG9hZCByZXF1ZXN0LCB2ZXJpZnkgd2UgYXJlIHRlc3RpbmcgaGFyZHdhcmUgTVBMUyBmZWF0dXJlcwogICogaW5zdGVhZCBvZiBzdGFuZGFyZCBmZWF0dXJlcyBmb3IgdGhlIG5ldGRldi4KICAqLwotI2lmZGVmIENPTkZJR19ORVRfTVBMU19HU08KKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfTVBMU19HU08pCiBzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgbmV0X21wbHNfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsCiAJCQkJCSAgIF9fYmUxNiB0eXBlKQpAQCAtMjU2Miw3ICsyNTYzLDcgQEAKIAogbmV0ZGV2X2ZlYXR1cmVzX3QgbmV0aWZfc2tiX2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAluZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyA9IGRldi0+ZmVhdHVyZXM7CiAJdTE2IGdzb19zZWdzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2VnczsKIAlfX2JlMTYgcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOwpAQCAtMjU3MCwxMSArMjU3MSwyMSBAQAogCWlmIChnc29fc2VncyA+IGRldi0+Z3NvX21heF9zZWdzIHx8IGdzb19zZWdzIDwgZGV2LT5nc29fbWluX3NlZ3MpCiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0dTT19NQVNLOwogCi0JaWYgKHByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSB8fCBwcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxQUQpKSB7Ci0JCXN0cnVjdCB2bGFuX2V0aGhkciAqdmVoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYi0+ZGF0YTsKLQkJcHJvdG9jb2wgPSB2ZWgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87Ci0JfSBlbHNlIGlmICghdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXJldHVybiBoYXJtb25pemVfZmVhdHVyZXMoc2tiLCBmZWF0dXJlcyk7CisJLyogSWYgZW5jYXBzdWxhdGlvbiBvZmZsb2FkIHJlcXVlc3QsIHZlcmlmeSB3ZSBhcmUgdGVzdGluZworCSAqIGhhcmR3YXJlIGVuY2Fwc3VsYXRpb24gZmVhdHVyZXMgaW5zdGVhZCBvZiBzdGFuZGFyZAorCSAqIGZlYXR1cmVzIGZvciB0aGUgbmV0ZGV2CisJICovCisJaWYgKHNrYi0+ZW5jYXBzdWxhdGlvbikKKwkJZmVhdHVyZXMgJj0gZGV2LT5od19lbmNfZmVhdHVyZXM7CisKKwlpZiAoIXZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQlpZiAodW5saWtlbHkocHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpIHx8CisJCQkgICAgIHByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFBRCkpKSB7CisJCQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZlaCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CisJCQlwcm90b2NvbCA9IHZlaC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKKwkJfSBlbHNlIHsKKwkJCWdvdG8gZmluYWxpemU7CisJCX0KIAl9CiAKIAlmZWF0dXJlcyA9IG5ldGRldl9pbnRlcnNlY3RfZmVhdHVyZXMoZmVhdHVyZXMsCkBAIC0yNTkxLDYgKzI2MDIsMTEgQEAKIAkJCQkJCSAgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfAogCQkJCQkJICAgICBORVRJRl9GX0hXX1ZMQU5fU1RBR19UWCk7CiAKK2ZpbmFsaXplOgorCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19mZWF0dXJlc19jaGVjaykKKwkJZmVhdHVyZXMgJj0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fZmVhdHVyZXNfY2hlY2soc2tiLCBkZXYsCisJCQkJCQkJCWZlYXR1cmVzKTsKKwogCXJldHVybiBoYXJtb25pemVfZmVhdHVyZXMoc2tiLCBmZWF0dXJlcyk7CiB9CiBFWFBPUlRfU1lNQk9MKG5ldGlmX3NrYl9mZWF0dXJlcyk7CkBAIC0yNjYxLDE5ICsyNjc3LDEyIEBACiAJaWYgKHVubGlrZWx5KCFza2IpKQogCQlnb3RvIG91dF9udWxsOwogCi0JLyogSWYgZW5jYXBzdWxhdGlvbiBvZmZsb2FkIHJlcXVlc3QsIHZlcmlmeSB3ZSBhcmUgdGVzdGluZwotCSAqIGhhcmR3YXJlIGVuY2Fwc3VsYXRpb24gZmVhdHVyZXMgaW5zdGVhZCBvZiBzdGFuZGFyZAotCSAqIGZlYXR1cmVzIGZvciB0aGUgbmV0ZGV2Ci0JICovCi0JaWYgKHNrYi0+ZW5jYXBzdWxhdGlvbikKLQkJZmVhdHVyZXMgJj0gZGV2LT5od19lbmNfZmVhdHVyZXM7Ci0KIAlpZiAobmV0aWZfbmVlZHNfZ3NvKGRldiwgc2tiLCBmZWF0dXJlcykpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNlZ3M7CiAKIAkJc2VncyA9IHNrYl9nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTsKIAkJaWYgKElTX0VSUihzZWdzKSkgewotCQkJc2VncyA9IE5VTEw7CisJCQlnb3RvIG91dF9rZnJlZV9za2I7CiAJCX0gZWxzZSBpZiAoc2VncykgewogCQkJY29uc3VtZV9za2Ioc2tiKTsKIAkJCXNrYiA9IHNlZ3M7CkBAIC00NTU3LDYgKzQ1NjYsNjggQEAKIH0KIEVYUE9SVF9TWU1CT0wobmV0aWZfbmFwaV9kZWwpOwogCitzdGF0aWMgaW50IG5hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4sIHN0cnVjdCBsaXN0X2hlYWQgKnJlcG9sbCkKK3sKKwl2b2lkICpoYXZlOworCWludCB3b3JrLCB3ZWlnaHQ7CisKKwlsaXN0X2RlbF9pbml0KCZuLT5wb2xsX2xpc3QpOworCisJaGF2ZSA9IG5ldHBvbGxfcG9sbF9sb2NrKG4pOworCisJd2VpZ2h0ID0gbi0+d2VpZ2h0OworCisJLyogVGhpcyBOQVBJX1NUQVRFX1NDSEVEIHRlc3QgaXMgZm9yIGF2b2lkaW5nIGEgcmFjZQorCSAqIHdpdGggbmV0cG9sbCdzIHBvbGxfbmFwaSgpLiAgT25seSB0aGUgZW50aXR5IHdoaWNoCisJICogb2J0YWlucyB0aGUgbG9jayBhbmQgc2VlcyBOQVBJX1NUQVRFX1NDSEVEIHNldCB3aWxsCisJICogYWN0dWFsbHkgbWFrZSB0aGUgLT5wb2xsKCkgY2FsbC4gIFRoZXJlZm9yZSB3ZSBhdm9pZAorCSAqIGFjY2lkZW50YWxseSBjYWxsaW5nIC0+cG9sbCgpIHdoZW4gTkFQSSBpcyBub3Qgc2NoZWR1bGVkLgorCSAqLworCXdvcmsgPSAwOworCWlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1NDSEVELCAmbi0+c3RhdGUpKSB7CisJCXdvcmsgPSBuLT5wb2xsKG4sIHdlaWdodCk7CisJCXRyYWNlX25hcGlfcG9sbChuKTsKKwl9CisKKwlXQVJOX09OX09OQ0Uod29yayA+IHdlaWdodCk7CisKKwlpZiAobGlrZWx5KHdvcmsgPCB3ZWlnaHQpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkvKiBEcml2ZXJzIG11c3Qgbm90IG1vZGlmeSB0aGUgTkFQSSBzdGF0ZSBpZiB0aGV5CisJICogY29uc3VtZSB0aGUgZW50aXJlIHdlaWdodC4gIEluIHN1Y2ggY2FzZXMgdGhpcyBjb2RlCisJICogc3RpbGwgIm93bnMiIHRoZSBOQVBJIGluc3RhbmNlIGFuZCB0aGVyZWZvcmUgY2FuCisJICogbW92ZSB0aGUgaW5zdGFuY2UgYXJvdW5kIG9uIHRoZSBsaXN0IGF0LXdpbGwuCisJICovCisJaWYgKHVubGlrZWx5KG5hcGlfZGlzYWJsZV9wZW5kaW5nKG4pKSkgeworCQluYXBpX2NvbXBsZXRlKG4pOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJaWYgKG4tPmdyb19saXN0KSB7CisJCS8qIGZsdXNoIHRvbyBvbGQgcGFja2V0cworCQkgKiBJZiBIWiA8IDEwMDAsIGZsdXNoIGFsbCBwYWNrZXRzLgorCQkgKi8KKwkJbmFwaV9ncm9fZmx1c2gobiwgSFogPj0gMTAwMCk7CisJfQorCisJLyogU29tZSBkcml2ZXJzIG1heSBoYXZlIGNhbGxlZCBuYXBpX3NjaGVkdWxlCisJICogcHJpb3IgdG8gZXhoYXVzdGluZyB0aGVpciBidWRnZXQuCisJICovCisJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZuLT5wb2xsX2xpc3QpKSkgeworCQlwcl93YXJuX29uY2UoIiVzOiBCdWRnZXQgZXhoYXVzdGVkIGFmdGVyIG5hcGkgcmVzY2hlZHVsZWRcbiIsCisJCQkgICAgIG4tPmRldiA/IG4tPmRldi0+bmFtZSA6ICJiYWNrbG9nIik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZuLT5wb2xsX2xpc3QsIHJlcG9sbCk7CisKK291dF91bmxvY2s6CisJbmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTsKKworCXJldHVybiB3b3JrOworfQorCiBzdGF0aWMgdm9pZCBuZXRfcnhfYWN0aW9uKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKIHsKIAlzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCA9IHRoaXNfY3B1X3B0cigmc29mdG5ldF9kYXRhKTsKQEAgLTQ1NjQsNzQgKzQ2MzUsMzQgQEAKIAlpbnQgYnVkZ2V0ID0gbmV0ZGV2X2J1ZGdldDsKIAlMSVNUX0hFQUQobGlzdCk7CiAJTElTVF9IRUFEKHJlcG9sbCk7Ci0Jdm9pZCAqaGF2ZTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmc2QtPnBvbGxfbGlzdCwgJmxpc3QpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKKwlmb3IgKDs7KSB7CiAJCXN0cnVjdCBuYXBpX3N0cnVjdCAqbjsKLQkJaW50IHdvcmssIHdlaWdodDsKKworCQlpZiAobGlzdF9lbXB0eSgmbGlzdCkpIHsKKwkJCWlmICghc2RfaGFzX3Jwc19pcGlfd2FpdGluZyhzZCkgJiYgbGlzdF9lbXB0eSgmcmVwb2xsKSkKKwkJCQlyZXR1cm47CisJCQlicmVhazsKKwkJfQorCisJCW4gPSBsaXN0X2ZpcnN0X2VudHJ5KCZsaXN0LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QsIHBvbGxfbGlzdCk7CisJCWJ1ZGdldCAtPSBuYXBpX3BvbGwobiwgJnJlcG9sbCk7CiAKIAkJLyogSWYgc29mdGlycSB3aW5kb3cgaXMgZXhoYXVzdGVkIHRoZW4gcHVudC4KIAkJICogQWxsb3cgdGhpcyB0byBydW4gZm9yIDIgamlmZmllcyBzaW5jZSB3aGljaCB3aWxsIGFsbG93CiAJCSAqIGFuIGF2ZXJhZ2UgbGF0ZW5jeSBvZiAxLjUvSFouCiAJCSAqLwotCQlpZiAodW5saWtlbHkoYnVkZ2V0IDw9IDAgfHwgdGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lX2xpbWl0KSkpCi0JCQlnb3RvIHNvZnRuZXRfYnJlYWs7Ci0KLQotCQluID0gbGlzdF9maXJzdF9lbnRyeSgmbGlzdCwgc3RydWN0IG5hcGlfc3RydWN0LCBwb2xsX2xpc3QpOwotCQlsaXN0X2RlbF9pbml0KCZuLT5wb2xsX2xpc3QpOwotCi0JCWhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuKTsKLQotCQl3ZWlnaHQgPSBuLT53ZWlnaHQ7Ci0KLQkJLyogVGhpcyBOQVBJX1NUQVRFX1NDSEVEIHRlc3QgaXMgZm9yIGF2b2lkaW5nIGEgcmFjZQotCQkgKiB3aXRoIG5ldHBvbGwncyBwb2xsX25hcGkoKS4gIE9ubHkgdGhlIGVudGl0eSB3aGljaAotCQkgKiBvYnRhaW5zIHRoZSBsb2NrIGFuZCBzZWVzIE5BUElfU1RBVEVfU0NIRUQgc2V0IHdpbGwKLQkJICogYWN0dWFsbHkgbWFrZSB0aGUgLT5wb2xsKCkgY2FsbC4gIFRoZXJlZm9yZSB3ZSBhdm9pZAotCQkgKiBhY2NpZGVudGFsbHkgY2FsbGluZyAtPnBvbGwoKSB3aGVuIE5BUEkgaXMgbm90IHNjaGVkdWxlZC4KLQkJICovCi0JCXdvcmsgPSAwOwotCQlpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRCwgJm4tPnN0YXRlKSkgewotCQkJd29yayA9IG4tPnBvbGwobiwgd2VpZ2h0KTsKLQkJCXRyYWNlX25hcGlfcG9sbChuKTsKKwkJaWYgKHVubGlrZWx5KGJ1ZGdldCA8PSAwIHx8CisJCQkgICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZV9saW1pdCkpKSB7CisJCQlzZC0+dGltZV9zcXVlZXplKys7CisJCQlicmVhazsKIAkJfQotCi0JCVdBUk5fT05fT05DRSh3b3JrID4gd2VpZ2h0KTsKLQotCQlidWRnZXQgLT0gd29yazsKLQotCQkvKiBEcml2ZXJzIG11c3Qgbm90IG1vZGlmeSB0aGUgTkFQSSBzdGF0ZSBpZiB0aGV5Ci0JCSAqIGNvbnN1bWUgdGhlIGVudGlyZSB3ZWlnaHQuICBJbiBzdWNoIGNhc2VzIHRoaXMgY29kZQotCQkgKiBzdGlsbCAib3ducyIgdGhlIE5BUEkgaW5zdGFuY2UgYW5kIHRoZXJlZm9yZSBjYW4KLQkJICogbW92ZSB0aGUgaW5zdGFuY2UgYXJvdW5kIG9uIHRoZSBsaXN0IGF0LXdpbGwuCi0JCSAqLwotCQlpZiAodW5saWtlbHkod29yayA9PSB3ZWlnaHQpKSB7Ci0JCQlpZiAodW5saWtlbHkobmFwaV9kaXNhYmxlX3BlbmRpbmcobikpKSB7Ci0JCQkJbmFwaV9jb21wbGV0ZShuKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKG4tPmdyb19saXN0KSB7Ci0JCQkJCS8qIGZsdXNoIHRvbyBvbGQgcGFja2V0cwotCQkJCQkgKiBJZiBIWiA8IDEwMDAsIGZsdXNoIGFsbCBwYWNrZXRzLgotCQkJCQkgKi8KLQkJCQkJbmFwaV9ncm9fZmx1c2gobiwgSFogPj0gMTAwMCk7Ci0JCQkJfQotCQkJCWxpc3RfYWRkX3RhaWwoJm4tPnBvbGxfbGlzdCwgJnJlcG9sbCk7Ci0JCQl9Ci0JCX0KLQotCQluZXRwb2xsX3BvbGxfdW5sb2NrKGhhdmUpOwogCX0KIAotCWlmICghc2RfaGFzX3Jwc19pcGlfd2FpdGluZyhzZCkgJiYKLQkgICAgbGlzdF9lbXB0eSgmbGlzdCkgJiYKLQkgICAgbGlzdF9lbXB0eSgmcmVwb2xsKSkKLQkJcmV0dXJuOwotb3V0OgogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKIAlsaXN0X3NwbGljZV90YWlsX2luaXQoJnNkLT5wb2xsX2xpc3QsICZsaXN0KTsKQEAgLTQ2NDEsMTIgKzQ2NzIsNiBAQAogCQlfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9SWF9TT0ZUSVJRKTsKIAogCW5ldF9ycHNfYWN0aW9uX2FuZF9pcnFfZW5hYmxlKHNkKTsKLQotCXJldHVybjsKLQotc29mdG5ldF9icmVhazoKLQlzZC0+dGltZV9zcXVlZXplKys7Ci0JZ290byBvdXQ7CiB9CiAKIHN0cnVjdCBuZXRkZXZfYWRqYWNlbnQgewpAQCAtNzA0NywxMCArNzA3MiwyMCBAQAogCQlvbGRzZC0+b3V0cHV0X3F1ZXVlID0gTlVMTDsKIAkJb2xkc2QtPm91dHB1dF9xdWV1ZV90YWlscCA9ICZvbGRzZC0+b3V0cHV0X3F1ZXVlOwogCX0KLQkvKiBBcHBlbmQgTkFQSSBwb2xsIGxpc3QgZnJvbSBvZmZsaW5lIENQVS4gKi8KLQlpZiAoIWxpc3RfZW1wdHkoJm9sZHNkLT5wb2xsX2xpc3QpKSB7Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJm9sZHNkLT5wb2xsX2xpc3QsICZzZC0+cG9sbF9saXN0KTsKLQkJcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpOworCS8qIEFwcGVuZCBOQVBJIHBvbGwgbGlzdCBmcm9tIG9mZmxpbmUgQ1BVLCB3aXRoIG9uZSBleGNlcHRpb24gOgorCSAqIHByb2Nlc3NfYmFja2xvZygpIG11c3QgYmUgY2FsbGVkIGJ5IGNwdSBvd25pbmcgcGVyY3B1IGJhY2tsb2cuCisJICogV2UgcHJvcGVybHkgaGFuZGxlIHByb2Nlc3NfcXVldWUgJiBpbnB1dF9wa3RfcXVldWUgbGF0ZXIuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZvbGRzZC0+cG9sbF9saXN0KSkgeworCQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZvbGRzZC0+cG9sbF9saXN0LAorCQkJCQkJCSAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QsCisJCQkJCQkJICAgIHBvbGxfbGlzdCk7CisKKwkJbGlzdF9kZWxfaW5pdCgmbmFwaS0+cG9sbF9saXN0KTsKKwkJaWYgKG5hcGktPnBvbGwgPT0gcHJvY2Vzc19iYWNrbG9nKQorCQkJbmFwaS0+c3RhdGUgPSAwOworCQllbHNlCisJCQlfX19fbmFwaV9zY2hlZHVsZShzZCwgbmFwaSk7CiAJfQogCiAJcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1RYX1NPRlRJUlEpOwpAQCAtNzA2MSw3ICs3MDk2LDcgQEAKIAkJbmV0aWZfcnhfaW50ZXJuYWwoc2tiKTsKIAkJaW5wdXRfcXVldWVfaGVhZF9pbmNyKG9sZHNkKTsKIAl9Ci0Jd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZvbGRzZC0+aW5wdXRfcGt0X3F1ZXVlKSkpIHsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZvbGRzZC0+aW5wdXRfcGt0X3F1ZXVlKSkpIHsKIAkJbmV0aWZfcnhfaW50ZXJuYWwoc2tiKTsKIAkJaW5wdXRfcXVldWVfaGVhZF9pbmNyKG9sZHNkKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDhlMzhmMTcuLjhkNjE0YzkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC0yMDQzLDYgKzIwNDMsMTIgQEAKIAkJCWNhc2UgTkRUUEFfQkFTRV9SRUFDSEFCTEVfVElNRToKIAkJCQlORUlHSF9WQVJfU0VUKHAsIEJBU0VfUkVBQ0hBQkxFX1RJTUUsCiAJCQkJCSAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7CisJCQkJLyogdXBkYXRlIHJlYWNoYWJsZV90aW1lIGFzIHdlbGwsIG90aGVyd2lzZSwgdGhlIGNoYW5nZSB3aWxsCisJCQkJICogb25seSBiZSBlZmZlY3RpdmUgYWZ0ZXIgdGhlIG5leHQgdGltZSBuZWlnaF9wZXJpb2RpY193b3JrCisJCQkJICogZGVjaWRlcyB0byByZWNvbXB1dGUgaXQgKGNhbiBiZSBtdWx0aXBsZSBtaW51dGVzKQorCQkJCSAqLworCQkJCXAtPnJlYWNoYWJsZV90aW1lID0KKwkJCQkJbmVpZ2hfcmFuZF9yZWFjaF90aW1lKE5FSUdIX1ZBUihwLCBCQVNFX1JFQUNIQUJMRV9USU1FKSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIE5EVFBBX0dDX1NUQUxFVElNRToKIAkJCQlORUlHSF9WQVJfU0VUKHAsIEdDX1NUQUxFVElNRSwKQEAgLTI5MjEsNiArMjkyNywzMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbmVpZ2hfcHJvY19iYXNlX3JlYWNoYWJsZV90aW1lKHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAorCQkJCQkgIHZvaWQgX191c2VyICpidWZmZXIsCisJCQkJCSAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IG5laWdoX3Bhcm1zICpwID0gY3RsLT5leHRyYTI7CisJaW50IHJldDsKKworCWlmIChzdHJjbXAoY3RsLT5wcm9jbmFtZSwgImJhc2VfcmVhY2hhYmxlX3RpbWUiKSA9PSAwKQorCQlyZXQgPSBuZWlnaF9wcm9jX2RvaW50dmVjX2ppZmZpZXMoY3RsLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwllbHNlIGlmIChzdHJjbXAoY3RsLT5wcm9jbmFtZSwgImJhc2VfcmVhY2hhYmxlX3RpbWVfbXMiKSA9PSAwKQorCQlyZXQgPSBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY3RsLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwllbHNlCisJCXJldCA9IC0xOworCisJaWYgKHdyaXRlICYmIHJldCA9PSAwKSB7CisJCS8qIHVwZGF0ZSByZWFjaGFibGVfdGltZSBhcyB3ZWxsLCBvdGhlcndpc2UsIHRoZSBjaGFuZ2Ugd2lsbAorCQkgKiBvbmx5IGJlIGVmZmVjdGl2ZSBhZnRlciB0aGUgbmV4dCB0aW1lIG5laWdoX3BlcmlvZGljX3dvcmsKKwkJICogZGVjaWRlcyB0byByZWNvbXB1dGUgaXQKKwkJICovCisJCXAtPnJlYWNoYWJsZV90aW1lID0KKwkJCW5laWdoX3JhbmRfcmVhY2hfdGltZShORUlHSF9WQVIocCwgQkFTRV9SRUFDSEFCTEVfVElNRSkpOworCX0KKwlyZXR1cm4gcmV0OworfQorCiAjZGVmaW5lIE5FSUdIX1BBUk1TX0RBVEFfT0ZGU0VUKGluZGV4KQlcCiAJKCYoKHN0cnVjdCBuZWlnaF9wYXJtcyAqKSAwKS0+ZGF0YVtpbmRleF0pCiAKQEAgLTMwNDcsNiArMzA3OCwxOSBAQAogCQl0LT5uZWlnaF92YXJzW05FSUdIX1ZBUl9SRVRSQU5TX1RJTUVfTVNdLnByb2NfaGFuZGxlciA9IGhhbmRsZXI7CiAJCS8qIFJlYWNoYWJsZVRpbWUgKGluIG1pbGxpc2Vjb25kcykgKi8KIAkJdC0+bmVpZ2hfdmFyc1tORUlHSF9WQVJfQkFTRV9SRUFDSEFCTEVfVElNRV9NU10ucHJvY19oYW5kbGVyID0gaGFuZGxlcjsKKwl9IGVsc2UgeworCQkvKiBUaG9zZSBoYW5kbGVycyB3aWxsIHVwZGF0ZSBwLT5yZWFjaGFibGVfdGltZSBhZnRlcgorCQkgKiBiYXNlX3JlYWNoYWJsZV90aW1lKF9tcykgaXMgc2V0IHRvIGVuc3VyZSB0aGUgbmV3IHRpbWVyIHN0YXJ0cyBiZWluZworCQkgKiBhcHBsaWVkIGFmdGVyIHRoZSBuZXh0IG5laWdoYm91ciB1cGRhdGUgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcgorCQkgKiBuZWlnaF9wZXJpb2RpY193b3JrIHRvIHVwZGF0ZSBpdHMgdmFsdWUgKGNhbiBiZSBtdWx0aXBsZSBtaW51dGVzKQorCQkgKiBTbyBhbnkgaGFuZGxlciB0aGF0IHJlcGxhY2VzIHRoZW0gc2hvdWxkIGRvIHRoaXMgYXMgd2VsbAorCQkgKi8KKwkJLyogUmVhY2hhYmxlVGltZSAqLworCQl0LT5uZWlnaF92YXJzW05FSUdIX1ZBUl9CQVNFX1JFQUNIQUJMRV9USU1FXS5wcm9jX2hhbmRsZXIgPQorCQkJbmVpZ2hfcHJvY19iYXNlX3JlYWNoYWJsZV90aW1lOworCQkvKiBSZWFjaGFibGVUaW1lIChpbiBtaWxsaXNlY29uZHMpICovCisJCXQtPm5laWdoX3ZhcnNbTkVJR0hfVkFSX0JBU0VfUkVBQ0hBQkxFX1RJTUVfTVNdLnByb2NfaGFuZGxlciA9CisJCQluZWlnaF9wcm9jX2Jhc2VfcmVhY2hhYmxlX3RpbWU7CiAJfQogCiAJLyogRG9uJ3QgZXhwb3J0IHN5c2N0bHMgdG8gdW5wcml2aWxlZ2VkIHVzZXJzICovCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGFlMTNlZjYuLjM5NWMxNWIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC00MTQ4LDYgKzQxNDgsNyBAQAogCXNrYi0+aWdub3JlX2RmID0gMDsKIAlza2JfZHN0X2Ryb3Aoc2tiKTsKIAlza2ItPm1hcmsgPSAwOworCXNrYl9pbml0X3NlY21hcmsoc2tiKTsKIAlzZWNwYXRoX3Jlc2V0KHNrYik7CiAJbmZfcmVzZXQoc2tiKTsKIAluZl9yZXNldF90cmFjZShza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9zbGF2ZS5jIGIvbmV0L2RzYS9zbGF2ZS5jCmluZGV4IDUxNTU2OWYuLjU4OWFhZmQgMTAwNjQ0Ci0tLSBhL25ldC9kc2Evc2xhdmUuYworKysgYi9uZXQvZHNhL3NsYXZlLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKIAlzbnByaW50Zihkcy0+c2xhdmVfbWlpX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgImRzYS0lZDolLjJ4IiwKIAkJCWRzLT5pbmRleCwgZHMtPnBkLT5zd19hZGRyKTsKIAlkcy0+c2xhdmVfbWlpX2J1cy0+cGFyZW50ID0gZHMtPm1hc3Rlcl9kZXY7CisJZHMtPnNsYXZlX21paV9idXMtPnBoeV9tYXNrID0gfmRzLT5waHlzX21paV9tYXNrOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2dlbmV2ZS5jIGIvbmV0L2lwdjQvZ2VuZXZlLmMKaW5kZXggOTVlNDdjOS4uMzk0YTIwMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZ2VuZXZlLmMKKysrIGIvbmV0L2lwdjQvZ2VuZXZlLmMKQEAgLTEyMiwxNCArMTIyLDE4IEBACiAJaW50IGVycjsKIAogCXNrYiA9IHVkcF90dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgIWdzLT5zb2NrLT5zay0+c2tfbm9fY2hlY2tfdHgpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKIAogCW1pbl9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LT5kc3QuZGV2KSArIHJ0LT5kc3QuaGVhZGVyX2xlbgogCQkJKyBHRU5FVkVfQkFTRV9ITEVOICsgb3B0X2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpCiAJCQkrICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgPyBWTEFOX0hMRU4gOiAwKTsKIAogCWVyciA9IHNrYl9jb3dfaGVhZChza2IsIG1pbl9oZWFkcm9vbSk7Ci0JaWYgKHVubGlrZWx5KGVycikpCisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBlcnI7CisJfQogCiAJc2tiID0gdmxhbl9od2FjY2VsX3B1c2hfaW5zaWRlKHNrYik7CiAJaWYgKHVubGlrZWx5KCFza2IpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCmluZGV4IDNhODNjZTUuLjc4N2IzYzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYworKysgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKQEAgLTEyOSw3ICsxMjksOCBAQAogCSAqCVdlIG5vdyBnZW5lcmF0ZSBhbiBJQ01QIEhPU1QgUkVESVJFQ1QgZ2l2aW5nIHRoZSByb3V0ZQogCSAqCXdlIGNhbGN1bGF0ZWQuCiAJICovCi0JaWYgKHJ0LT5ydF9mbGFncyZSVENGX0RPUkVESVJFQ1QgJiYgIW9wdC0+c3JyICYmICFza2Jfc2VjX3BhdGgoc2tiKSkKKwlpZiAoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX0RPUkVESVJFQ1QgJiYgIW9wdC0+c3JyICYmCisJICAgICFza2Jfc2VjX3BhdGgoc2tiKSkKIAkJaXBfcnRfc2VuZF9yZWRpcmVjdChza2IpOwogCiAJc2tiLT5wcmlvcml0eSA9IHJ0X3RvczJwcmlvcml0eShpcGgtPnRvcyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCA4YTg5YzczLi42Yjg1YWRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTQ2MSwxNyArNDYxLDEzIEBACiAKIAltZW1jcHkoJmVycmhkci5lZSwgJnNlcnItPmVlLCBzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSk7CiAJc2luID0gJmVycmhkci5vZmZlbmRlcjsKLQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9VTlNQRUM7CisJbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKIAogCWlmIChzZXJyLT5lZS5lZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX0lDTVAgfHwKIAkgICAgaXB2NF9wa3RpbmZvX3ByZXBhcmVfZXJycXVldWUoc2ssIHNrYiwgc2Vyci0+ZWUuZWVfb3JpZ2luKSkgewotCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KIAkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHI7Ci0JCXNpbi0+c2luX3BvcnQgPSAwOwotCQltZW1zZXQoJnNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7Ci0JCWlmIChpbmV0LT5jbXNnX2ZsYWdzKQorCQlpZiAoaW5ldF9zayhzayktPmNtc2dfZmxhZ3MpCiAJCQlpcF9jbXNnX3JlY3YobXNnLCBza2IpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWRpcl9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlZGlyX2lwdjQuYwppbmRleCBmZjJkMjNkLi42ZWNmY2U2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlZGlyX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlZGlyX2lwdjQuYwpAQCAtMjcsMTAgKzI3LDEwIEBACiAKIAltZW1zZXQoJm1yLCAwLCBzaXplb2YobXIpKTsKIAlpZiAocHJpdi0+c3JlZ19wcm90b19taW4pIHsKLQkJbXIucmFuZ2VbMF0ubWluLmFsbCA9IChfX2ZvcmNlIF9fYmUxNikKLQkJCQkJZGF0YVtwcml2LT5zcmVnX3Byb3RvX21pbl0uZGF0YVswXTsKLQkJbXIucmFuZ2VbMF0ubWF4LmFsbCA9IChfX2ZvcmNlIF9fYmUxNikKLQkJCQkJZGF0YVtwcml2LT5zcmVnX3Byb3RvX21heF0uZGF0YVswXTsKKwkJbXIucmFuZ2VbMF0ubWluLmFsbCA9CisJCQkqKF9fYmUxNiAqKSZkYXRhW3ByaXYtPnNyZWdfcHJvdG9fbWluXS5kYXRhWzBdOworCQltci5yYW5nZVswXS5tYXguYWxsID0KKwkJCSooX19iZTE2ICopJmRhdGFbcHJpdi0+c3JlZ19wcm90b19tYXhdLmRhdGFbMF07CiAJCW1yLnJhbmdlWzBdLmZsYWdzIHw9IE5GX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9waW5nLmMgYi9uZXQvaXB2NC9waW5nLmMKaW5kZXggYzBkODJmNy4uMmEzNzIwZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcGluZy5jCisrKyBiL25ldC9pcHY0L3BpbmcuYwpAQCAtOTY2LDggKzk2NiwxMSBAQAogCiAJc2sgPSBwaW5nX2xvb2t1cChuZXQsIHNrYiwgbnRvaHMoaWNtcGgtPnVuLmVjaG8uaWQpKTsKIAlpZiAoc2sgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCiAJCXByX2RlYnVnKCJyY3Ygb24gc29ja2V0ICVwXG4iLCBzayk7Ci0JCXBpbmdfcXVldWVfcmN2X3NrYihzaywgc2tiX2dldChza2IpKTsKKwkJaWYgKHNrYjIpCisJCQlwaW5nX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYjIpOwogCQlzb2NrX3B1dChzayk7CiAJCXJldHVybiB0cnVlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDZhMjE1NWIuLmQ1OGRkMGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTU1NCwxMSArMTU1NCwxMCBAQAogCiAJZG9fY2FjaGUgPSByZXMtPmZpICYmICFpdGFnOwogCWlmIChvdXRfZGV2ID09IGluX2RldiAmJiBlcnIgJiYgSU5fREVWX1RYX1JFRElSRUNUUyhvdXRfZGV2KSAmJgorCSAgICBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSAmJgogCSAgICAoSU5fREVWX1NIQVJFRF9NRURJQShvdXRfZGV2KSB8fAotCSAgICAgaW5ldF9hZGRyX29ubGluayhvdXRfZGV2LCBzYWRkciwgRklCX1JFU19HVygqcmVzKSkpKSB7Ci0JCWZsYWdzIHw9IFJUQ0ZfRE9SRURJUkVDVDsKLQkJZG9fY2FjaGUgPSBmYWxzZTsKLQl9CisJICAgICBpbmV0X2FkZHJfb25saW5rKG91dF9kZXYsIHNhZGRyLCBGSUJfUkVTX0dXKCpyZXMpKSkpCisJCUlQQ0Ioc2tiKS0+ZmxhZ3MgfD0gSVBTS0JfRE9SRURJUkVDVDsKIAogCWlmIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSkgewogCQkvKiBOb3QgSVAgKGkuZS4gQVJQKS4gRG8gbm90IGNyZWF0ZSByb3V0ZSwgaWYgaXQgaXMKQEAgLTIzMDMsNiArMjMwMiw4IEBACiAJci0+cnRtX2ZsYWdzCT0gKHJ0LT5ydF9mbGFncyAmIH4weEZGRkYpIHwgUlRNX0ZfQ0xPTkVEOwogCWlmIChydC0+cnRfZmxhZ3MgJiBSVENGX05PVElGWSkKIAkJci0+cnRtX2ZsYWdzIHw9IFJUTV9GX05PVElGWTsKKwlpZiAoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX0RPUkVESVJFQ1QpCisJCXItPnJ0bV9mbGFncyB8PSBSVENGX0RPUkVESVJFQ1Q7CiAKIAlpZiAobmxhX3B1dF9iZTMyKHNrYiwgUlRBX0RTVCwgZHN0KSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggN2YxODI2Mi4uNjVjYWY4YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMjAxOSw3ICsyMDE5LDcgQEAKIAkJaWYgKHVubGlrZWx5KCF0Y3Bfc25kX3duZF90ZXN0KHRwLCBza2IsIG1zc19ub3cpKSkKIAkJCWJyZWFrOwogCi0JCWlmICh0c29fc2VncyA9PSAxKSB7CisJCWlmICh0c29fc2VncyA9PSAxIHx8ICFtYXhfc2VncykgewogCQkJaWYgKHVubGlrZWx5KCF0Y3BfbmFnbGVfdGVzdCh0cCwgc2tiLCBtc3Nfbm93LAogCQkJCQkJICAgICAodGNwX3NrYl9pc19sYXN0KHNrLCBza2IpID8KIAkJCQkJCSAgICAgIG5vbmFnbGUgOiBUQ1BfTkFHTEVfUFVTSCkpKSkKQEAgLTIwMzIsNyArMjAzMiw3IEBACiAJCX0KIAogCQlsaW1pdCA9IG1zc19ub3c7Ci0JCWlmICh0c29fc2VncyA+IDEgJiYgIXRjcF91cmdfbW9kZSh0cCkpCisJCWlmICh0c29fc2VncyA+IDEgJiYgbWF4X3NlZ3MgJiYgIXRjcF91cmdfbW9kZSh0cCkpCiAJCQlsaW1pdCA9IHRjcF9tc3Nfc3BsaXRfcG9pbnQoc2ssIHNrYiwgbXNzX25vdywKIAkJCQkJCSAgICBtaW5fdCh1bnNpZ25lZCBpbnQsCiAJCQkJCQkJICBjd25kX3F1b3RhLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwX2RpYWcuYyBiL25ldC9pcHY0L3VkcF9kaWFnLmMKaW5kZXggNzkyN2RiMC4uNGEwMDBmMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwX2RpYWcuYworKysgYi9uZXQvaXB2NC91ZHBfZGlhZy5jCkBAIC05OSwxMSArOTksMTMgQEAKIAlzX3Nsb3QgPSBjYi0+YXJnc1swXTsKIAludW0gPSBzX251bSA9IGNiLT5hcmdzWzFdOwogCi0JZm9yIChzbG90ID0gc19zbG90OyBzbG90IDw9IHRhYmxlLT5tYXNrOyBudW0gPSBzX251bSA9IDAsIHNsb3QrKykgeworCWZvciAoc2xvdCA9IHNfc2xvdDsgc2xvdCA8PSB0YWJsZS0+bWFzazsgc19udW0gPSAwLCBzbG90KyspIHsKIAkJc3RydWN0IHNvY2sgKnNrOwogCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKIAkJc3RydWN0IHVkcF9oc2xvdCAqaHNsb3QgPSAmdGFibGUtPmhhc2hbc2xvdF07CiAKKwkJbnVtID0gMDsKKwogCQlpZiAoaGxpc3RfbnVsbHNfZW1wdHkoJmhzbG90LT5oZWFkKSkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9kYXRhZ3JhbS5jIGIvbmV0L2lwdjYvZGF0YWdyYW0uYwppbmRleCAxMDBjNTg5Li40OWY1ZTczIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9kYXRhZ3JhbS5jCisrKyBiL25ldC9pcHY2L2RhdGFncmFtLmMKQEAgLTM5MywxMSArMzkzLDEwIEBACiAKIAltZW1jcHkoJmVycmhkci5lZSwgJnNlcnItPmVlLCBzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSk7CiAJc2luID0gJmVycmhkci5vZmZlbmRlcjsKLQlzaW4tPnNpbjZfZmFtaWx5ID0gQUZfVU5TUEVDOworCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisKIAlpZiAoc2Vyci0+ZWUuZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9MT0NBTCkgewogCQlzaW4tPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCXNpbi0+c2luNl9mbG93aW5mbyA9IDA7Ci0JCXNpbi0+c2luNl9wb3J0ID0gMDsKIAkJaWYgKG5wLT5yeG9wdC5hbGwpIHsKIAkJCWlmIChzZXJyLT5lZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX0lDTVAgJiYKIAkJCSAgICBzZXJyLT5lZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX0lDTVA2KQpAQCAtNDEyLDEyICs0MTEsOSBAQAogCQkJCWlwdjZfaWZhY2Vfc2NvcGVfaWQoJnNpbi0+c2luNl9hZGRyLAogCQkJCQkJICAgIElQNkNCKHNrYiktPmlpZik7CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KIAkJCWlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBfaGRyKHNrYiktPnNhZGRyLAogCQkJCQkgICAgICAgJnNpbi0+c2luNl9hZGRyKTsKLQkJCXNpbi0+c2luNl9zY29wZV9pZCA9IDA7Ci0JCQlpZiAoaW5ldC0+Y21zZ19mbGFncykKKwkJCWlmIChpbmV0X3NrKHNrKS0+Y21zZ19mbGFncykKIAkJCQlpcF9jbXNnX3JlY3YobXNnLCBza2IpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IGIyZDE4MzguLmYxYzZkNWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYworKysgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTY1OSw2ICs2NTksMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZmliNl9wdXJnZV9ydChzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKKwkJCSAgc3RydWN0IG5ldCAqbmV0KQoreworCWlmIChhdG9taWNfcmVhZCgmcnQtPnJ0NmlfcmVmKSAhPSAxKSB7CisJCS8qIFRoaXMgcm91dGUgaXMgdXNlZCBhcyBkdW1teSBhZGRyZXNzIGhvbGRlciBpbiBzb21lIHNwbGl0CisJCSAqIG5vZGVzLiBJdCBpcyBub3QgbGVha2VkLCBidXQgaXQgc3RpbGwgaG9sZHMgb3RoZXIgcmVzb3VyY2VzLAorCQkgKiB3aGljaCBtdXN0IGJlIHJlbGVhc2VkIGluIHRpbWUuIFNvLCBzY2FuIGFzY2VuZGFudCBub2RlcworCQkgKiBhbmQgcmVwbGFjZSBkdW1teSByZWZlcmVuY2VzIHRvIHRoaXMgcm91dGUgd2l0aCByZWZlcmVuY2VzCisJCSAqIHRvIHN0aWxsIGFsaXZlIG9uZXMuCisJCSAqLworCQl3aGlsZSAoZm4pIHsKKwkJCWlmICghKGZuLT5mbl9mbGFncyAmIFJUTl9SVElORk8pICYmIGZuLT5sZWFmID09IHJ0KSB7CisJCQkJZm4tPmxlYWYgPSBmaWI2X2ZpbmRfcHJlZml4KG5ldCwgZm4pOworCQkJCWF0b21pY19pbmMoJmZuLT5sZWFmLT5ydDZpX3JlZik7CisJCQkJcnQ2X3JlbGVhc2UocnQpOworCQkJfQorCQkJZm4gPSBmbi0+cGFyZW50OworCQl9CisJCS8qIE5vIG1vcmUgcmVmZXJlbmNlcyBhcmUgcG9zc2libGUgYXQgdGhpcyBwb2ludC4gKi8KKwkJQlVHX09OKGF0b21pY19yZWFkKCZydC0+cnQ2aV9yZWYpICE9IDEpOworCX0KK30KKwogLyoKICAqCUluc2VydCByb3V0aW5nIGluZm9ybWF0aW9uIGluIGEgbm9kZS4KICAqLwpAQCAtODA3LDExICs4MzAsMTIgQEAKIAkJcnQtPmRzdC5ydDZfbmV4dCA9IGl0ZXItPmRzdC5ydDZfbmV4dDsKIAkJYXRvbWljX2luYygmcnQtPnJ0NmlfcmVmKTsKIAkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8pOwotCQlydDZfcmVsZWFzZShpdGVyKTsKIAkJaWYgKCEoZm4tPmZuX2ZsYWdzICYgUlROX1JUSU5GTykpIHsKIAkJCWluZm8tPm5sX25ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9yb3V0ZV9ub2RlcysrOwogCQkJZm4tPmZuX2ZsYWdzIHw9IFJUTl9SVElORk87CiAJCX0KKwkJZmliNl9wdXJnZV9ydChpdGVyLCBmbiwgaW5mby0+bmxfbmV0KTsKKwkJcnQ2X3JlbGVhc2UoaXRlcik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMzIyLDI0ICsxMzQ2LDcgQEAKIAkJZm4gPSBmaWI2X3JlcGFpcl90cmVlKG5ldCwgZm4pOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmcnQtPnJ0NmlfcmVmKSAhPSAxKSB7Ci0JCS8qIFRoaXMgcm91dGUgaXMgdXNlZCBhcyBkdW1teSBhZGRyZXNzIGhvbGRlciBpbiBzb21lIHNwbGl0Ci0JCSAqIG5vZGVzLiBJdCBpcyBub3QgbGVha2VkLCBidXQgaXQgc3RpbGwgaG9sZHMgb3RoZXIgcmVzb3VyY2VzLAotCQkgKiB3aGljaCBtdXN0IGJlIHJlbGVhc2VkIGluIHRpbWUuIFNvLCBzY2FuIGFzY2VuZGFudCBub2RlcwotCQkgKiBhbmQgcmVwbGFjZSBkdW1teSByZWZlcmVuY2VzIHRvIHRoaXMgcm91dGUgd2l0aCByZWZlcmVuY2VzCi0JCSAqIHRvIHN0aWxsIGFsaXZlIG9uZXMuCi0JCSAqLwotCQl3aGlsZSAoZm4pIHsKLQkJCWlmICghKGZuLT5mbl9mbGFncyAmIFJUTl9SVElORk8pICYmIGZuLT5sZWFmID09IHJ0KSB7Ci0JCQkJZm4tPmxlYWYgPSBmaWI2X2ZpbmRfcHJlZml4KG5ldCwgZm4pOwotCQkJCWF0b21pY19pbmMoJmZuLT5sZWFmLT5ydDZpX3JlZik7Ci0JCQkJcnQ2X3JlbGVhc2UocnQpOwotCQkJfQotCQkJZm4gPSBmbi0+cGFyZW50OwotCQl9Ci0JCS8qIE5vIG1vcmUgcmVmZXJlbmNlcyBhcmUgcG9zc2libGUgYXQgdGhpcyBwb2ludC4gKi8KLQkJQlVHX09OKGF0b21pY19yZWFkKCZydC0+cnQ2aV9yZWYpICE9IDEpOwotCX0KKwlmaWI2X3B1cmdlX3J0KHJ0LCBmbiwgbmV0KTsKIAogCWluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvKTsKIAlydDZfcmVsZWFzZShydCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X3JlZGlyX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVkaXJfaXB2Ni5jCmluZGV4IDI0MzNhNmIuLjExODIwYjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVkaXJfaXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVkaXJfaXB2Ni5jCkBAIC0yNywxMCArMjcsMTAgQEAKIAogCW1lbXNldCgmcmFuZ2UsIDAsIHNpemVvZihyYW5nZSkpOwogCWlmIChwcml2LT5zcmVnX3Byb3RvX21pbikgewotCQlyYW5nZS5taW5fcHJvdG8uYWxsID0gKF9fZm9yY2UgX19iZTE2KQotCQkJCQlkYXRhW3ByaXYtPnNyZWdfcHJvdG9fbWluXS5kYXRhWzBdOwotCQlyYW5nZS5tYXhfcHJvdG8uYWxsID0gKF9fZm9yY2UgX19iZTE2KQotCQkJCQlkYXRhW3ByaXYtPnNyZWdfcHJvdG9fbWF4XS5kYXRhWzBdOworCQlyYW5nZS5taW5fcHJvdG8uYWxsID0KKwkJCSooX19iZTE2ICopJmRhdGFbcHJpdi0+c3JlZ19wcm90b19taW5dLmRhdGFbMF07CisJCXJhbmdlLm1heF9wcm90by5hbGwgPQorCQkJKihfX2JlMTYgKikmZGF0YVtwcml2LT5zcmVnX3Byb3RvX21heF0uZGF0YVswXTsKIAkJcmFuZ2UuZmxhZ3MgfD0gTkZfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IGM5MTA4MzEuLjQ5NTk2NTM1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExNjAsMTIgKzExNjAsOSBAQAogCQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRzdC0+ZGV2KTsKIAogCQlydDYtPnJ0NmlfZmxhZ3MgfD0gUlRGX01PRElGSUVEOwotCQlpZiAobXR1IDwgSVBWNl9NSU5fTVRVKSB7Ci0JCQl1MzIgZmVhdHVyZXMgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9GRUFUVVJFUyk7CisJCWlmIChtdHUgPCBJUFY2X01JTl9NVFUpCiAJCQltdHUgPSBJUFY2X01JTl9NVFU7Ci0JCQlmZWF0dXJlcyB8PSBSVEFYX0ZFQVRVUkVfQUxMRlJBRzsKLQkJCWRzdF9tZXRyaWNfc2V0KGRzdCwgUlRBWF9GRUFUVVJFUywgZmVhdHVyZXMpOwotCQl9CisKIAkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX01UVSwgbXR1KTsKIAkJcnQ2X3VwZGF0ZV9leHBpcmVzKHJ0NiwgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbXR1X2V4cGlyZXMpOwogCX0KQEAgLTEyNDUsMTIgKzEyNDIsMTYgQEAKIAkJcnQgPSBuZXQtPmlwdjYuaXA2X251bGxfZW50cnk7CiAJZWxzZSBpZiAocnQtPmRzdC5lcnJvcikgewogCQlydCA9IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKLQl9IGVsc2UgaWYgKHJ0ID09IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSkgeworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocnQgPT0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KSB7CiAJCWZuID0gZmliNl9iYWNrdHJhY2soZm4sICZmbDYtPnNhZGRyKTsKIAkJaWYgKGZuKQogCQkJZ290byByZXN0YXJ0OwogCX0KIAorb3V0OgogCWRzdF9ob2xkKCZydC0+ZHN0KTsKIAogCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggNWZmODc4MC4uOWMwYjU0ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC0xMzg3LDYgKzEzODcsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdGNwX3Y2X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkciwKKwkJCSAgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoKQoreworCS8qIFRoaXMgaXMgdHJpY2t5OiB3ZSBtb3ZlIElQNkNCIGF0IGl0cyBjb3JyZWN0IGxvY2F0aW9uIGludG8KKwkgKiBUQ1BfU0tCX0NCKCkuIEl0IG11c3QgYmUgZG9uZSBhZnRlciB4ZnJtNl9wb2xpY3lfY2hlY2soKSwgYmVjYXVzZQorCSAqIF9kZWNvZGVfc2Vzc2lvbjYoKSB1c2VzIElQNkNCKCkuCisJICogYmFycmllcigpIG1ha2VzIHN1cmUgY29tcGlsZXIgd29uJ3QgcGxheSBhbGlhc2luZyBnYW1lcy4KKwkgKi8KKwltZW1tb3ZlKCZUQ1BfU0tCX0NCKHNrYiktPmhlYWRlci5oNiwgSVA2Q0Ioc2tiKSwKKwkJc2l6ZW9mKHN0cnVjdCBpbmV0Nl9za2JfcGFybSkpOworCWJhcnJpZXIoKTsKKworCVRDUF9TS0JfQ0Ioc2tiKS0+c2VxID0gbnRvaGwodGgtPnNlcSk7CisJVENQX1NLQl9DQihza2IpLT5lbmRfc2VxID0gKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxICsgdGgtPnN5biArIHRoLT5maW4gKworCQkJCSAgICBza2ItPmxlbiAtIHRoLT5kb2ZmKjQpOworCVRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcSA9IG50b2hsKHRoLT5hY2tfc2VxKTsKKwlUQ1BfU0tCX0NCKHNrYiktPnRjcF9mbGFncyA9IHRjcF9mbGFnX2J5dGUodGgpOworCVRDUF9TS0JfQ0Ioc2tiKS0+dGNwX3R3X2lzbiA9IDA7CisJVENQX1NLQl9DQihza2IpLT5pcF9kc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChoZHIpOworCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkID0gMDsKK30KKwogc3RhdGljIGludCB0Y3BfdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGg7CkBAIC0xNDE4LDI0ICsxNDQwLDkgQEAKIAogCXRoID0gdGNwX2hkcihza2IpOwogCWhkciA9IGlwdjZfaGRyKHNrYik7Ci0JLyogVGhpcyBpcyB0cmlja3kgOiBXZSBtb3ZlIElQQ0IgYXQgaXRzIGNvcnJlY3QgbG9jYXRpb24gaW50byBUQ1BfU0tCX0NCKCkKLQkgKiBiYXJyaWVyKCkgbWFrZXMgc3VyZSBjb21waWxlciB3b250IHBsYXkgZm9vbF5XYWxpYXNpbmcgZ2FtZXMuCi0JICovCi0JbWVtbW92ZSgmVENQX1NLQl9DQihza2IpLT5oZWFkZXIuaDYsIElQNkNCKHNrYiksCi0JCXNpemVvZihzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0pKTsKLQliYXJyaWVyKCk7Ci0KLQlUQ1BfU0tCX0NCKHNrYiktPnNlcSA9IG50b2hsKHRoLT5zZXEpOwotCVRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSA9IChUQ1BfU0tCX0NCKHNrYiktPnNlcSArIHRoLT5zeW4gKyB0aC0+ZmluICsKLQkJCQkgICAgc2tiLT5sZW4gLSB0aC0+ZG9mZio0KTsKLQlUQ1BfU0tCX0NCKHNrYiktPmFja19zZXEgPSBudG9obCh0aC0+YWNrX3NlcSk7Ci0JVENQX1NLQl9DQihza2IpLT50Y3BfZmxhZ3MgPSB0Y3BfZmxhZ19ieXRlKHRoKTsKLQlUQ1BfU0tCX0NCKHNrYiktPnRjcF90d19pc24gPSAwOwotCVRDUF9TS0JfQ0Ioc2tiKS0+aXBfZHNmaWVsZCA9IGlwdjZfZ2V0X2RzZmllbGQoaGRyKTsKLQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCA9IDA7CiAKIAlzayA9IF9faW5ldDZfbG9va3VwX3NrYigmdGNwX2hhc2hpbmZvLCBza2IsIHRoLT5zb3VyY2UsIHRoLT5kZXN0LAotCQkJCXRjcF92Nl9paWYoc2tiKSk7CisJCQkJaW5ldDZfaWlmKHNrYikpOwogCWlmICghc2spCiAJCWdvdG8gbm9fdGNwX3NvY2tldDsKIApAQCAtMTQ1MSw2ICsxNDU4LDggQEAKIAlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpCiAJCWdvdG8gZGlzY2FyZF9hbmRfcmVsc2U7CiAKKwl0Y3BfdjZfZmlsbF9jYihza2IsIGhkciwgdGgpOworCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIAlpZiAodGNwX3Y2X2luYm91bmRfbWQ1X2hhc2goc2ssIHNrYikpCiAJCWdvdG8gZGlzY2FyZF9hbmRfcmVsc2U7CkBAIC0xNDgyLDYgKzE0OTEsOCBAQAogCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKKwl0Y3BfdjZfZmlsbF9jYihza2IsIGhkciwgdGgpOworCiAJaWYgKHNrYi0+bGVuIDwgKHRoLT5kb2ZmPDwyKSB8fCB0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewogY3N1bV9lcnJvcjoKIAkJVENQX0lOQ19TVEFUU19CSChuZXQsIFRDUF9NSUJfQ1NVTUVSUk9SUyk7CkBAIC0xNTA1LDYgKzE1MTYsOCBAQAogCQlnb3RvIGRpc2NhcmRfaXQ7CiAJfQogCisJdGNwX3Y2X2ZpbGxfY2Ioc2tiLCBoZHIsIHRoKTsKKwogCWlmIChza2ItPmxlbiA8ICh0aC0+ZG9mZjw8MikpIHsKIAkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKIAkJZ290byBiYWRfcGFja2V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCA1Zjk4MzY0Li40OGJmNWEwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMTMwLDEyICsxMzAsMTggQEAKIHsKIAlzdHJ1Y3QgZmxvd2k2ICpmbDYgPSAmZmwtPnUuaXA2OwogCWludCBvbmx5cHJvdG8gPSAwOwotCXUxNiBvZmZzZXQgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7CiAJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkciA9IGlwdjZfaGRyKHNrYik7CisJdTE2IG9mZnNldCA9IHNpemVvZigqaGRyKTsKIAlzdHJ1Y3QgaXB2Nl9vcHRfaGRyICpleHRoZHI7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqbmggPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKLQl1OCBuZXh0aGRyID0gbmhbSVA2Q0Ioc2tiKS0+bmhvZmZdOworCXUxNiBuaG9mZiA9IElQNkNCKHNrYiktPm5ob2ZmOwogCWludCBvaWYgPSAwOworCXU4IG5leHRoZHI7CisKKwlpZiAoIW5ob2ZmKQorCQluaG9mZiA9IG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTsKKworCW5leHRoZHIgPSBuaFtuaG9mZl07CiAKIAlpZiAoc2tiX2RzdChza2IpKQogCQlvaWYgPSBza2JfZHN0KHNrYiktPmRldi0+aWZpbmRleDsKZGlmZiAtLWdpdCBhL25ldC9sbGMvc3lzY3RsX25ldF9sbGMuYyBiL25ldC9sbGMvc3lzY3RsX25ldF9sbGMuYwppbmRleCA2MTJhNWRkLi43OTliYWZjIDEwMDY0NAotLS0gYS9uZXQvbGxjL3N5c2N0bF9uZXRfbGxjLmMKKysrIGIvbmV0L2xsYy9zeXNjdGxfbmV0X2xsYy5jCkBAIC0xOCwyOCArMTgsMjggQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJhY2siLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xsYzJfYWNrX3RpbWVvdXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbGxjMl9hY2tfdGltZW91dCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gImJ1c3kiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0LAotCQkubWF4bGVuCQk9IHNpemVvZihsb25nKSwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlciAgID0gcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewogCQkucHJvY25hbWUJPSAicCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfbGxjMl9wX3RpbWVvdXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbGxjMl9wX3RpbWVvdXQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJyZWoiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xsYzJfcmVqX3RpbWVvdXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbGxjMl9yZWpfdGltZW91dCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IDBiYjcwMzguLmJkNGU0NmUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTE0MCw3ICsxNDAsOSBAQAogCWlmICghcmV0KSB7CiAJCWtleS0+ZmxhZ3MgfD0gS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CiAKLQkJaWYgKCEoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpKQorCQlpZiAoISgoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpIHx8CisJCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHx8CisJCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFKSkpCiAJCQlzZGF0YS0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQtLTsKIAogCQlXQVJOX09OKChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFKSAmJgpAQCAtMTg4LDcgKzE5MCw5IEBACiAJc3RhID0ga2V5LT5zdGE7CiAJc2RhdGEgPSBrZXktPnNkYXRhOwogCi0JaWYgKCEoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpKQorCWlmICghKChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQykgfHwKKwkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSB8fAorCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFKSkpCiAJCWluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTsKIAogCXJldCA9IGRydl9zZXRfa2V5KGtleS0+bG9jYWwsIERJU0FCTEVfS0VZLCBzZGF0YSwKQEAgLTg4NCw3ICs4ODgsOSBAQAogCWlmIChrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpIHsKIAkJa2V5LT5mbGFncyAmPSB+S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CiAKLQkJaWYgKCEoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpKQorCQlpZiAoISgoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpIHx8CisJCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHx8CisJCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFKSkpCiAJCQlpbmNyZW1lbnRfdGFpbHJvb21fbmVlZF9jb3VudChrZXktPnNkYXRhKTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDJjMzZjNDcuLjgzN2E0MDYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTY0Myw3ICsxNjQzLDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlib29sIHJldDsKKwlib29sIHJldCA9IGZhbHNlOwogCWludCBhYzsKIAogCWlmIChsb2NhbC0+aHcucXVldWVzIDwgSUVFRTgwMjExX05VTV9BQ1MpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcG0uYyBiL25ldC9tYWM4MDIxMS9wbS5jCmluZGV4IDRjNTE5MmUuLjRhOTVmZTMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9wbS5jCisrKyBiL25ldC9tYWM4MDIxMS9wbS5jCkBAIC04NiwyMCArODYsNiBAQAogCQl9CiAJfQogCi0JLyogdGVhciBkb3duIGFnZ3JlZ2F0aW9uIHNlc3Npb25zIGFuZCByZW1vdmUgU1RBcyAqLwotCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewotCQlpZiAoc3RhLT51cGxvYWRlZCkgewotCQkJZW51bSBpZWVlODAyMTFfc3RhX3N0YXRlIHN0YXRlOwotCi0JCQlzdGF0ZSA9IHN0YS0+c3RhX3N0YXRlOwotCQkJZm9yICg7IHN0YXRlID4gSUVFRTgwMjExX1NUQV9OT1RFWElTVDsgc3RhdGUtLSkKLQkJCQlXQVJOX09OKGRydl9zdGFfc3RhdGUobG9jYWwsIHN0YS0+c2RhdGEsIHN0YSwKLQkJCQkJCSAgICAgIHN0YXRlLCBzdGF0ZSAtIDEpKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKLQogCS8qIHJlbW92ZSBhbGwgaW50ZXJmYWNlcyB0aGF0IHdlcmUgY3JlYXRlZCBpbiB0aGUgZHJpdmVyICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQpAQCAtMTExLDYgKzk3LDIxIEBACiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJCWllZWU4MDIxMV9tZ2RfcXVpZXNjZShzZGF0YSk7CiAJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CisJCQkvKiB0ZWFyIGRvd24gYWdncmVnYXRpb24gc2Vzc2lvbnMgYW5kIHJlbW92ZSBTVEFzICovCisJCQltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CisJCQlzdGEgPSBzZGF0YS0+dS53ZHMuc3RhOworCQkJaWYgKHN0YSAmJiBzdGEtPnVwbG9hZGVkKSB7CisJCQkJZW51bSBpZWVlODAyMTFfc3RhX3N0YXRlIHN0YXRlOworCisJCQkJc3RhdGUgPSBzdGEtPnN0YV9zdGF0ZTsKKwkJCQlmb3IgKDsgc3RhdGUgPiBJRUVFODAyMTFfU1RBX05PVEVYSVNUOyBzdGF0ZS0tKQorCQkJCQlXQVJOX09OKGRydl9zdGFfc3RhdGUobG9jYWwsIHN0YS0+c2RhdGEsCisJCQkJCQkJICAgICAgc3RhLCBzdGF0ZSwKKwkJCQkJCQkgICAgICBzdGF0ZSAtIDEpKTsKKwkJCX0KKwkJCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCA2ODNiMTBmLi5kNjljYTUxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJZWxzZSBpZiAocmF0ZSAmJiByYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUF9HKQogCQljaGFubmVsX2ZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE0gfCBJRUVFODAyMTFfQ0hBTl8yR0haOwogCWVsc2UgaWYgKHJhdGUpCi0JCWNoYW5uZWxfZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fT0ZETSB8IElFRUU4MDIxMV9DSEFOXzJHSFo7CisJCWNoYW5uZWxfZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fQ0NLIHwgSUVFRTgwMjExX0NIQU5fMkdIWjsKIAllbHNlCiAJCWNoYW5uZWxfZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fMkdIWjsKIAlwdXRfdW5hbGlnbmVkX2xlMTYoY2hhbm5lbF9mbGFncywgcG9zKTsKZGlmZiAtLWdpdCBhL25ldC9tcGxzL21wbHNfZ3NvLmMgYi9uZXQvbXBscy9tcGxzX2dzby5jCmluZGV4IGNhMjc4MzcuLjM0OTI5NWQgMTAwNjQ0Ci0tLSBhL25ldC9tcGxzL21wbHNfZ3NvLmMKKysrIGIvbmV0L21wbHMvbXBsc19nc28uYwpAQCAtMzEsMTAgKzMxLDcgQEAKIAkJCQkgIFNLQl9HU09fVENQVjYgfAogCQkJCSAgU0tCX0dTT19VRFAgfAogCQkJCSAgU0tCX0dTT19ET0RHWSB8Ci0JCQkJICBTS0JfR1NPX1RDUF9FQ04gfAotCQkJCSAgU0tCX0dTT19HUkUgfAotCQkJCSAgU0tCX0dTT19HUkVfQ1NVTSB8Ci0JCQkJICBTS0JfR1NPX0lQSVApKSkKKwkJCQkgIFNLQl9HU09fVENQX0VDTikpKQogCQlnb3RvIG91dDsKIAogCS8qIFNldHVwIGlubmVyIFNLQi4gKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYwppbmRleCAxZDUzNDFmLi41ZDNkYWFlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCkBAIC0xODMsNiArMTgzLDggQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJc3RydWN0IG5ldCAqbmV0OwogCisJKmRpZmYgPSAwOworCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAkvKiBUaGlzIGFwcGxpY2F0aW9uIGhlbHBlciBkb2Vzbid0IHdvcmsgd2l0aCBJUHY2IHlldCwKIAkgKiBzbyB0dXJuIHRoaXMgaW50byBhIG5vLW9wIGZvciBJUHY2IHBhY2tldHMKQEAgLTE5MSw4ICsxOTMsNiBAQAogCQlyZXR1cm4gMTsKICNlbmRpZgogCi0JKmRpZmYgPSAwOwotCiAJLyogT25seSB1c2VmdWwgZm9yIGVzdGFibGlzaGVkIHNlc3Npb25zICovCiAJaWYgKGNwLT5zdGF0ZSAhPSBJUF9WU19UQ1BfU19FU1RBQkxJU0hFRCkKIAkJcmV0dXJuIDE7CkBAIC0zMjIsNiArMzIyLDkgQEAKIAlzdHJ1Y3QgaXBfdnNfY29ubiAqbl9jcDsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKKwkvKiBubyBkaWZmIHJlcXVpcmVkIGZvciBpbmNvbWluZyBwYWNrZXRzICovCisJKmRpZmYgPSAwOworCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAkvKiBUaGlzIGFwcGxpY2F0aW9uIGhlbHBlciBkb2Vzbid0IHdvcmsgd2l0aCBJUHY2IHlldCwKIAkgKiBzbyB0dXJuIHRoaXMgaW50byBhIG5vLW9wIGZvciBJUHY2IHBhY2tldHMKQEAgLTMzMCw5ICszMzMsNiBAQAogCQlyZXR1cm4gMTsKICNlbmRpZgogCi0JLyogbm8gZGlmZiByZXF1aXJlZCBmb3IgaW5jb21pbmcgcGFja2V0cyAqLwotCSpkaWZmID0gMDsKLQogCS8qIE9ubHkgdXNlZnVsIGZvciBlc3RhYmxpc2hlZCBzZXNzaW9ucyAqLwogCWlmIChjcC0+c3RhdGUgIT0gSVBfVlNfVENQX1NfRVNUQUJMSVNIRUQpCiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IGExMTY3NDguLjQ2ZDFiMjYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTYxMSwxNiArNjExLDE1IEBACiAJICovCiAJTkZfQ1RfQVNTRVJUKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKTsKIAlwcl9kZWJ1ZygiQ29uZmlybWluZyBjb25udHJhY2sgJXBcbiIsIGN0KTsKLQkvKiBXZSBoYXZlIHRvIGNoZWNrIHRoZSBEWUlORyBmbGFnIGluc2lkZSB0aGUgbG9jayB0byBwcmV2ZW50Ci0JICAgYSByYWNlIGFnYWluc3QgbmZfY3RfZ2V0X25leHRfY29ycHNlKCkgcG9zc2libHkgY2FsbGVkIGZyb20KLQkgICB1c2VyIGNvbnRleHQsIGVsc2Ugd2UgaW5zZXJ0IGFuIGFscmVhZHkgJ2RlYWQnIGhhc2gsIGJsb2NraW5nCi0JICAgZnVydGhlciB1c2Ugb2YgdGhhdCBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24gLUpNICovCisJLyogV2UgaGF2ZSB0byBjaGVjayB0aGUgRFlJTkcgZmxhZyBhZnRlciB1bmxpbmsgdG8gcHJldmVudAorCSAqIGEgcmFjZSBhZ2FpbnN0IG5mX2N0X2dldF9uZXh0X2NvcnBzZSgpIHBvc3NpYmx5IGNhbGxlZCBmcm9tCisJICogdXNlciBjb250ZXh0LCBlbHNlIHdlIGluc2VydCBhbiBhbHJlYWR5ICdkZWFkJyBoYXNoLCBibG9ja2luZworCSAqIGZ1cnRoZXIgdXNlIG9mIHRoYXQgcGFydGljdWxhciBjb25uZWN0aW9uIC1KTS4KKwkgKi8KKwluZl9jdF9kZWxfZnJvbV9keWluZ19vcl91bmNvbmZpcm1lZF9saXN0KGN0KTsKIAotCWlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhjdCkpKSB7Ci0JCW5mX2Nvbm50cmFja19kb3VibGVfdW5sb2NrKGhhc2gsIHJlcGx5X2hhc2gpOwotCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJcmV0dXJuIE5GX0FDQ0VQVDsKLQl9CisJaWYgKHVubGlrZWx5KG5mX2N0X2lzX2R5aW5nKGN0KSkpCisJCWdvdG8gb3V0OwogCiAJLyogU2VlIGlmIHRoZXJlJ3Mgb25lIGluIHRoZSBsaXN0IGFscmVhZHksIGluY2x1ZGluZyByZXZlcnNlOgogCSAgIE5BVCBjb3VsZCBoYXZlIGdyYWJiZWQgaXQgd2l0aG91dCByZWFsaXppbmcsIHNpbmNlIHdlJ3JlCkBAIC02MzYsOCArNjM1LDYgQEAKIAkJICAgIHpvbmUgPT0gbmZfY3Rfem9uZShuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpKSkKIAkJCWdvdG8gb3V0OwogCi0JbmZfY3RfZGVsX2Zyb21fZHlpbmdfb3JfdW5jb25maXJtZWRfbGlzdChjdCk7Ci0KIAkvKiBUaW1lciByZWxhdGl2ZSB0byBjb25maXJtYXRpb24gdGltZSwgbm90IG9yaWdpbmFsCiAJICAgc2V0dGluZyB0aW1lLCBvdGhlcndpc2Ugd2UnZCBnZXQgdGltZXIgd3JhcCBpbgogCSAgIHdlaXJkIGRlbGF5IGNhc2VzLiAqLwpAQCAtNjczLDYgKzY3MCw3IEBACiAJcmV0dXJuIE5GX0FDQ0VQVDsKIAogb3V0OgorCW5mX2N0X2FkZF90b19keWluZ19saXN0KGN0KTsKIAluZl9jb25udHJhY2tfZG91YmxlX3VubG9jayhoYXNoLCByZXBseV9oYXNoKTsKIAlORl9DVF9TVEFUX0lOQyhuZXQsIGluc2VydF9mYWlsZWQpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwppbmRleCAxMjlhOGRhLi4zYjNkZGI0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwpAQCAtNzEzLDE2ICs3MTMsMTIgQEAKIAlzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbiwgKm5jOwogCXN0cnVjdCBuZnRfc2V0ICpzZXQsICpuczsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFpbiwgbmMsICZjdHgtPnRhYmxlLT5jaGFpbnMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCAmY3R4LT50YWJsZS0+Y2hhaW5zLCBsaXN0KSB7CiAJCWN0eC0+Y2hhaW4gPSBjaGFpbjsKIAogCQllcnIgPSBuZnRfZGVscnVsZV9ieV9jaGFpbihjdHgpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gb3V0OwotCi0JCWVyciA9IG5mdF9kZWxjaGFpbihjdHgpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5zLCAmY3R4LT50YWJsZS0+c2V0cywgbGlzdCkgewpAQCAtNzM1LDYgKzczMSwxNCBAQAogCQkJZ290byBvdXQ7CiAJfQogCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoYWluLCBuYywgJmN0eC0+dGFibGUtPmNoYWlucywgbGlzdCkgeworCQljdHgtPmNoYWluID0gY2hhaW47CisKKwkJZXJyID0gbmZ0X2RlbGNoYWluKGN0eCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gbmZ0X2RlbHRhYmxlKGN0eCk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCmluZGV4IDEzYzJlMTcuLmM0MjFkOTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwpAQCAtMzIxLDcgKzMyMSw4IEBACiAJCW5saCA9IG5sbXNnX2hkcihza2IpOwogCQllcnIgPSAwOwogCi0JCWlmIChubGgtPm5sbXNnX2xlbiA8IE5MTVNHX0hEUkxFTikgeworCQlpZiAobmxtc2dfbGVuKG5saCkgPCBzaXplb2Yoc3RydWN0IG5mZ2VubXNnKSB8fAorCQkgICAgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbikgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gYWNrOwogCQl9CkBAIC00NjMsMTMgKzQ2NCwxMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKLXN0YXRpYyBpbnQgbmZuZXRsaW5rX2JpbmQoaW50IGdyb3VwKQorc3RhdGljIGludCBuZm5ldGxpbmtfYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cCkKIHsKIAljb25zdCBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSAqc3M7CiAJaW50IHR5cGU7CiAKIAlpZiAoZ3JvdXAgPD0gTkZOTEdSUF9OT05FIHx8IGdyb3VwID4gTkZOTEdSUF9NQVgpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAogCXR5cGUgPSBuZm5sX2dyb3VwMnR5cGVbZ3JvdXBdOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X25hdC5jCmluZGV4IGFmZTJiMGIuLmFmZjU0ZmIxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYwpAQCAtNjUsMTAgKzY1LDEwIEBACiAJfQogCiAJaWYgKHByaXYtPnNyZWdfcHJvdG9fbWluKSB7Ci0JCXJhbmdlLm1pbl9wcm90by5hbGwgPSAoX19mb3JjZSBfX2JlMTYpCi0JCQkJCWRhdGFbcHJpdi0+c3JlZ19wcm90b19taW5dLmRhdGFbMF07Ci0JCXJhbmdlLm1heF9wcm90by5hbGwgPSAoX19mb3JjZSBfX2JlMTYpCi0JCQkJCWRhdGFbcHJpdi0+c3JlZ19wcm90b19tYXhdLmRhdGFbMF07CisJCXJhbmdlLm1pbl9wcm90by5hbGwgPQorCQkJKihfX2JlMTYgKikmZGF0YVtwcml2LT5zcmVnX3Byb3RvX21pbl0uZGF0YVswXTsKKwkJcmFuZ2UubWF4X3Byb3RvLmFsbCA9CisJCQkqKF9fYmUxNiAqKSZkYXRhW3ByaXYtPnNyZWdfcHJvdG9fbWF4XS5kYXRhWzBdOwogCQlyYW5nZS5mbGFncyB8PSBORl9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDA3NGNmM2UuLjAyZmRkZTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yaGFzaHRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuZXRsaW5rLmg+CiAKICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC0xMDkxLDggKzEwOTIsMTIgQEAKIAltdXRleF91bmxvY2soJm5sX3NrX2hhc2hfbG9jayk7CiAKIAluZXRsaW5rX3RhYmxlX2dyYWIoKTsKLQlpZiAobmxrX3NrKHNrKS0+c3Vic2NyaXB0aW9ucykKKwlpZiAobmxrX3NrKHNrKS0+c3Vic2NyaXB0aW9ucykgewogCQlfX3NrX2RlbF9iaW5kX25vZGUoc2spOworCQluZXRsaW5rX3VwZGF0ZV9saXN0ZW5lcnMoc2spOworCX0KKwlpZiAoc2stPnNrX3Byb3RvY29sID09IE5FVExJTktfR0VORVJJQykKKwkJYXRvbWljX2luYygmZ2VubF9za19kZXN0cnVjdGluZ19jbnQpOwogCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7CiB9CiAKQEAgLTExMzksOCArMTE0NCw4IEBACiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlID0gTlVMTDsKIAlzdHJ1Y3QgbXV0ZXggKmNiX211dGV4OwogCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sazsKLQlpbnQgKCpiaW5kKShpbnQgZ3JvdXApOwotCXZvaWQgKCp1bmJpbmQpKGludCBncm91cCk7CisJaW50ICgqYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOworCXZvaWQgKCp1bmJpbmQpKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKTsKIAlpbnQgZXJyID0gMDsKIAogCXNvY2stPnN0YXRlID0gU1NfVU5DT05ORUNURUQ7CkBAIC0xMjA5LDYgKzEyMTQsMjAgQEAKIAkgKiB3aWxsIGJlIHB1cmdlZC4KIAkgKi8KIAorCS8qIG11c3Qgbm90IGFjcXVpcmUgbmV0bGlua190YWJsZV9sb2NrIGluIGFueSB3YXkgYWdhaW4gYmVmb3JlIHVuYmluZAorCSAqIGFuZCBub3RpZnlpbmcgZ2VuZXRsaW5rIGlzIGRvbmUgYXMgb3RoZXJ3aXNlIGl0IG1pZ2h0IGRlYWRsb2NrCisJICovCisJaWYgKG5say0+bmV0bGlua191bmJpbmQpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IG5say0+bmdyb3VwczsgaSsrKQorCQkJaWYgKHRlc3RfYml0KGksIG5say0+Z3JvdXBzKSkKKwkJCQlubGstPm5ldGxpbmtfdW5iaW5kKHNvY2tfbmV0KHNrKSwgaSArIDEpOworCX0KKwlpZiAoc2stPnNrX3Byb3RvY29sID09IE5FVExJTktfR0VORVJJQyAmJgorCSAgICBhdG9taWNfZGVjX3JldHVybigmZ2VubF9za19kZXN0cnVjdGluZ19jbnQpID09IDApCisJCXdha2VfdXAoJmdlbmxfc2tfZGVzdHJ1Y3Rpbmdfd2FpdHEpOworCiAJc29jay0+c2sgPSBOVUxMOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJm5say0+d2FpdCk7CiAKQEAgLTEyMjYsOCArMTI0NSw4IEBACiAKIAltb2R1bGVfcHV0KG5say0+bW9kdWxlKTsKIAotCW5ldGxpbmtfdGFibGVfZ3JhYigpOwogCWlmIChuZXRsaW5rX2lzX2tlcm5lbChzaykpIHsKKwkJbmV0bGlua190YWJsZV9ncmFiKCk7CiAJCUJVR19PTihubF90YWJsZVtzay0+c2tfcHJvdG9jb2xdLnJlZ2lzdGVyZWQgPT0gMCk7CiAJCWlmICgtLW5sX3RhYmxlW3NrLT5za19wcm90b2NvbF0ucmVnaXN0ZXJlZCA9PSAwKSB7CiAJCQlzdHJ1Y3QgbGlzdGVuZXJzICpvbGQ7CkBAIC0xMjQxLDEwICsxMjYwLDggQEAKIAkJCW5sX3RhYmxlW3NrLT5za19wcm90b2NvbF0uZmxhZ3MgPSAwOwogCQkJbmxfdGFibGVbc2stPnNrX3Byb3RvY29sXS5yZWdpc3RlcmVkID0gMDsKIAkJfQotCX0gZWxzZSBpZiAobmxrLT5zdWJzY3JpcHRpb25zKSB7Ci0JCW5ldGxpbmtfdXBkYXRlX2xpc3RlbmVycyhzayk7CisJCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7CiAJfQotCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7CiAKIAlrZnJlZShubGstPmdyb3Vwcyk7CiAJbmxrLT5ncm91cHMgPSBOVUxMOwpAQCAtMTQxMCw5ICsxNDI3LDEwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgbmV0bGlua191bmJpbmQoaW50IGdyb3VwLCBsb25nIHVuc2lnbmVkIGludCBncm91cHMsCi0JCQkgICBzdHJ1Y3QgbmV0bGlua19zb2NrICpubGspCitzdGF0aWMgdm9pZCBuZXRsaW5rX3VuZG9fYmluZChpbnQgZ3JvdXAsIGxvbmcgdW5zaWduZWQgaW50IGdyb3VwcywKKwkJCSAgICAgIHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2soc2spOwogCWludCB1bmRvOwogCiAJaWYgKCFubGstPm5ldGxpbmtfdW5iaW5kKQpAQCAtMTQyMCw3ICsxNDM4LDcgQEAKIAogCWZvciAodW5kbyA9IDA7IHVuZG8gPCBncm91cDsgdW5kbysrKQogCQlpZiAodGVzdF9iaXQodW5kbywgJmdyb3VwcykpCi0JCQlubGstPm5ldGxpbmtfdW5iaW5kKHVuZG8pOworCQkJbmxrLT5uZXRsaW5rX3VuYmluZChzb2NrX25ldChzayksIHVuZG8pOwogfQogCiBzdGF0aWMgaW50IG5ldGxpbmtfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCkBAIC0xNDU4LDEwICsxNDc2LDEwIEBACiAJCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IG5say0+bmdyb3VwczsgZ3JvdXArKykgewogCQkJaWYgKCF0ZXN0X2JpdChncm91cCwgJmdyb3VwcykpCiAJCQkJY29udGludWU7Ci0JCQllcnIgPSBubGstPm5ldGxpbmtfYmluZChncm91cCk7CisJCQllcnIgPSBubGstPm5ldGxpbmtfYmluZChuZXQsIGdyb3VwKTsKIAkJCWlmICghZXJyKQogCQkJCWNvbnRpbnVlOwotCQkJbmV0bGlua191bmJpbmQoZ3JvdXAsIGdyb3VwcywgbmxrKTsKKwkJCW5ldGxpbmtfdW5kb19iaW5kKGdyb3VwLCBncm91cHMsIHNrKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9CkBAIC0xNDcxLDcgKzE0ODksNyBAQAogCQkJbmV0bGlua19pbnNlcnQoc2ssIG5ldCwgbmxhZGRyLT5ubF9waWQpIDoKIAkJCW5ldGxpbmtfYXV0b2JpbmQoc29jayk7CiAJCWlmIChlcnIpIHsKLQkJCW5ldGxpbmtfdW5iaW5kKG5say0+bmdyb3VwcywgZ3JvdXBzLCBubGspOworCQkJbmV0bGlua191bmRvX2JpbmQobmxrLT5uZ3JvdXBzLCBncm91cHMsIHNrKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9CkBAIC0yMTIyLDcgKzIxNDAsNyBAQAogCQlpZiAoIXZhbCB8fCB2YWwgLSAxID49IG5say0+bmdyb3VwcykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAob3B0bmFtZSA9PSBORVRMSU5LX0FERF9NRU1CRVJTSElQICYmIG5say0+bmV0bGlua19iaW5kKSB7Ci0JCQllcnIgPSBubGstPm5ldGxpbmtfYmluZCh2YWwpOworCQkJZXJyID0gbmxrLT5uZXRsaW5rX2JpbmQoc29ja19uZXQoc2spLCB2YWwpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0yMTMxLDcgKzIxNDksNyBAQAogCQkJCQkgb3B0bmFtZSA9PSBORVRMSU5LX0FERF9NRU1CRVJTSElQKTsKIAkJbmV0bGlua190YWJsZV91bmdyYWIoKTsKIAkJaWYgKG9wdG5hbWUgPT0gTkVUTElOS19EUk9QX01FTUJFUlNISVAgJiYgbmxrLT5uZXRsaW5rX3VuYmluZCkKLQkJCW5say0+bmV0bGlua191bmJpbmQodmFsKTsKKwkJCW5say0+bmV0bGlua191bmJpbmQoc29ja19uZXQoc2spLCB2YWwpOwogCiAJCWVyciA9IDA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5oIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5oCmluZGV4IGIyMGExNzMuLmYxYzMxYjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuaAorKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9BRl9ORVRMSU5LX0gKIAogI2luY2x1ZGUgPGxpbnV4L3JoYXNodGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjZGVmaW5lIE5MR1JQU1ooeCkJKEFMSUdOKHgsIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgpIC8gOCkKQEAgLTM5LDggKzQwLDggQEAKIAlzdHJ1Y3QgbXV0ZXgJCSpjYl9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXgJCWNiX2RlZl9tdXRleDsKIAl2b2lkCQkJKCpuZXRsaW5rX3Jjdikoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JaW50CQkJKCpuZXRsaW5rX2JpbmQpKGludCBncm91cCk7Ci0Jdm9pZAkJCSgqbmV0bGlua191bmJpbmQpKGludCBncm91cCk7CisJaW50CQkJKCpuZXRsaW5rX2JpbmQpKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKTsKKwl2b2lkCQkJKCpuZXRsaW5rX3VuYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOwogCXN0cnVjdCBtb2R1bGUJCSptb2R1bGU7CiAjaWZkZWYgQ09ORklHX05FVExJTktfTU1BUAogCXN0cnVjdCBtdXRleAkJcGdfdmVjX2xvY2s7CkBAIC02NSw4ICs2Niw4IEBACiAJdW5zaWduZWQgaW50CQlncm91cHM7CiAJc3RydWN0IG11dGV4CQkqY2JfbXV0ZXg7CiAJc3RydWN0IG1vZHVsZQkJKm1vZHVsZTsKLQlpbnQJCQkoKmJpbmQpKGludCBncm91cCk7Ci0Jdm9pZAkJCSgqdW5iaW5kKShpbnQgZ3JvdXApOworCWludAkJCSgqYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOworCXZvaWQJCQkoKnVuYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOwogCWJvb2wJCQkoKmNvbXBhcmUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNvY2spOwogCWludAkJCXJlZ2lzdGVyZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCA3NjM5M2YyLi5lZTU3NDU5IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtMjMsNiArMjMsOSBAQAogc3RhdGljIERFRklORV9NVVRFWChnZW5sX211dGV4KTsgLyogc2VyaWFsaXphdGlvbiBvZiBtZXNzYWdlIHByb2Nlc3NpbmcgKi8KIHN0YXRpYyBERUNMQVJFX1JXU0VNKGNiX2xvY2spOwogCithdG9taWNfdCBnZW5sX3NrX2Rlc3RydWN0aW5nX2NudCA9IEFUT01JQ19JTklUKDApOworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZ2VubF9za19kZXN0cnVjdGluZ193YWl0cSk7CisKIHZvaWQgZ2VubF9sb2NrKHZvaWQpCiB7CiAJbXV0ZXhfbG9jaygmZ2VubF9tdXRleCk7CkBAIC00MzUsMTUgKzQzOCwxOCBAQAogCiAJZ2VubF9sb2NrX2FsbCgpOwogCi0JZ2VubF91bnJlZ2lzdGVyX21jX2dyb3VwcyhmYW1pbHkpOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyYywgZ2VubF9mYW1pbHlfY2hhaW4oZmFtaWx5LT5pZCksIGZhbWlseV9saXN0KSB7CiAJCWlmIChmYW1pbHktPmlkICE9IHJjLT5pZCB8fCBzdHJjbXAocmMtPm5hbWUsIGZhbWlseS0+bmFtZSkpCiAJCQljb250aW51ZTsKIAorCQlnZW5sX3VucmVnaXN0ZXJfbWNfZ3JvdXBzKGZhbWlseSk7CisKIAkJbGlzdF9kZWwoJnJjLT5mYW1pbHlfbGlzdCk7CiAJCWZhbWlseS0+bl9vcHMgPSAwOwotCQlnZW5sX3VubG9ja19hbGwoKTsKKwkJdXBfd3JpdGUoJmNiX2xvY2spOworCQl3YWl0X2V2ZW50KGdlbmxfc2tfZGVzdHJ1Y3Rpbmdfd2FpdHEsCisJCQkgICBhdG9taWNfcmVhZCgmZ2VubF9za19kZXN0cnVjdGluZ19jbnQpID09IDApOworCQlnZW5sX3VubG9jaygpOwogCiAJCWtmcmVlKGZhbWlseS0+YXR0cmJ1Zik7CiAJCWdlbmxfY3RybF9ldmVudChDVFJMX0NNRF9ERUxGQU1JTFksIGZhbWlseSwgTlVMTCwgMCk7CkBAIC05ODMsMTEgKzk4OSw2MyBAQAogCXsgLm5hbWUgPSAibm90aWZ5IiwgfSwKIH07CiAKK3N0YXRpYyBpbnQgZ2VubF9iaW5kKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKQoreworCWludCBpLCBlcnIgPSAtRU5PRU5UOworCisJZG93bl9yZWFkKCZjYl9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgR0VOTF9GQU1fVEFCX1NJWkU7IGkrKykgeworCQlzdHJ1Y3QgZ2VubF9mYW1pbHkgKmY7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCBnZW5sX2ZhbWlseV9jaGFpbihpKSwgZmFtaWx5X2xpc3QpIHsKKwkJCWlmIChncm91cCA+PSBmLT5tY2dycF9vZmZzZXQgJiYKKwkJCSAgICBncm91cCA8IGYtPm1jZ3JwX29mZnNldCArIGYtPm5fbWNncnBzKSB7CisJCQkJaW50IGZhbV9ncnAgPSBncm91cCAtIGYtPm1jZ3JwX29mZnNldDsKKworCQkJCWlmICghZi0+bmV0bnNvayAmJiBuZXQgIT0gJmluaXRfbmV0KQorCQkJCQllcnIgPSAtRU5PRU5UOworCQkJCWVsc2UgaWYgKGYtPm1jYXN0X2JpbmQpCisJCQkJCWVyciA9IGYtPm1jYXN0X2JpbmQobmV0LCBmYW1fZ3JwKTsKKwkJCQllbHNlCisJCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJdXBfcmVhZCgmY2JfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBnZW5sX3VuYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cCkKK3sKKwlpbnQgaTsKKworCWRvd25fcmVhZCgmY2JfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IEdFTkxfRkFNX1RBQl9TSVpFOyBpKyspIHsKKwkJc3RydWN0IGdlbmxfZmFtaWx5ICpmOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgZ2VubF9mYW1pbHlfY2hhaW4oaSksIGZhbWlseV9saXN0KSB7CisJCQlpZiAoZ3JvdXAgPj0gZi0+bWNncnBfb2Zmc2V0ICYmCisJCQkgICAgZ3JvdXAgPCBmLT5tY2dycF9vZmZzZXQgKyBmLT5uX21jZ3JwcykgeworCQkJCWludCBmYW1fZ3JwID0gZ3JvdXAgLSBmLT5tY2dycF9vZmZzZXQ7CisKKwkJCQlpZiAoZi0+bWNhc3RfdW5iaW5kKQorCQkJCQlmLT5tY2FzdF91bmJpbmQobmV0LCBmYW1fZ3JwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwl1cF9yZWFkKCZjYl9sb2NrKTsKK30KKwogc3RhdGljIGludCBfX25ldF9pbml0IGdlbmxfcGVybmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRsaW5rX2tlcm5lbF9jZmcgY2ZnID0gewogCQkuaW5wdXQJCT0gZ2VubF9yY3YsCiAJCS5mbGFncwkJPSBOTF9DRkdfRl9OT05ST09UX1JFQ1YsCisJCS5iaW5kCQk9IGdlbmxfYmluZCwKKwkJLnVuYmluZAkJPSBnZW5sX3VuYmluZCwKIAl9OwogCiAJLyogd2UnbGwgYnVtcCB0aGUgZ3JvdXAgbnVtYmVyIHJpZ2h0IGFmdGVyd2FyZHMgKi8KZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMgYi9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jCmluZGV4IDc2NGZkYzMuLjc3MDA2NGMgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYwpAQCAtMTQ3LDcgKzE0Nyw4IEBACiAJaGRyID0gZXRoX2hkcihza2IpOwogCWhkci0+aF9wcm90byA9IG1wbHMtPm1wbHNfZXRoZXJ0eXBlOwogCi0Jc2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi0+cHJvdG9jb2wpOworCWlmICghc2tiLT5pbm5lcl9wcm90b2NvbCkKKwkJc2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi0+cHJvdG9jb2wpOwogCXNrYi0+cHJvdG9jb2wgPSBtcGxzLT5tcGxzX2V0aGVydHlwZTsKIAogCWludmFsaWRhdGVfZmxvd19rZXkoa2V5KTsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKaW5kZXggMzMyYjVhMC4uYjA3MzQ5ZSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKQEAgLTgzLDggKzgzLDcgQEAKIAkJCSAgICB1bnNpZ25lZCBpbnQgZ3JvdXApCiB7CiAJcmV0dXJuIGluZm8tPm5saGRyLT5ubG1zZ19mbGFncyAmIE5MTV9GX0VDSE8gfHwKLQkgICAgICAgZ2VubF9oYXNfbGlzdGVuZXJzKGZhbWlseSwgZ2VubF9pbmZvX25ldChpbmZvKS0+Z2VubF9zb2NrLAotCQkJCSAgZ3JvdXApOworCSAgICAgICBnZW5sX2hhc19saXN0ZW5lcnMoZmFtaWx5LCBnZW5sX2luZm9fbmV0KGluZm8pLCBncm91cCk7CiB9CiAKIHN0YXRpYyB2b2lkIG92c19ub3RpZnkoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksCkBAIC01MjUsNyArNTI0LDcgQEAKIAlzdHJ1Y3QgdnBvcnQgKmlucHV0X3Zwb3J0OwogCWludCBsZW47CiAJaW50IGVycjsKLQlib29sIGxvZyA9ICFhW09WU19GTE9XX0FUVFJfUFJPQkVdOworCWJvb2wgbG9nID0gIWFbT1ZTX1BBQ0tFVF9BVFRSX1BST0JFXTsKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKCFhW09WU19QQUNLRVRfQVRUUl9QQUNLRVRdIHx8ICFhW09WU19QQUNLRVRfQVRUUl9LRVldIHx8CkBAIC02MTEsNiArNjEwLDcgQEAKIAlbT1ZTX1BBQ0tFVF9BVFRSX1BBQ0tFVF0gPSB7IC5sZW4gPSBFVEhfSExFTiB9LAogCVtPVlNfUEFDS0VUX0FUVFJfS0VZXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiAJW09WU19QQUNLRVRfQVRUUl9BQ1RJT05TXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW09WU19QQUNLRVRfQVRUUl9QUk9CRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgZHBfcGFja2V0X2dlbmxfb3BzW10gPSB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuYwppbmRleCA3MGJlZjJhLi5kYTJmYWUwIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jCisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmMKQEAgLTcwLDYgKzcwLDcgQEAKIHsKIAlzdHJ1Y3QgZmxvd19zdGF0cyAqc3RhdHM7CiAJaW50IG5vZGUgPSBudW1hX25vZGVfaWQoKTsKKwlpbnQgbGVuID0gc2tiLT5sZW4gKyAodmxhbl90eF90YWdfcHJlc2VudChza2IpID8gVkxBTl9ITEVOIDogMCk7CiAKIAlzdGF0cyA9IHJjdV9kZXJlZmVyZW5jZShmbG93LT5zdGF0c1tub2RlXSk7CiAKQEAgLTEwNSw3ICsxMDYsNyBAQAogCQkJCWlmIChsaWtlbHkobmV3X3N0YXRzKSkgewogCQkJCQluZXdfc3RhdHMtPnVzZWQgPSBqaWZmaWVzOwogCQkJCQluZXdfc3RhdHMtPnBhY2tldF9jb3VudCA9IDE7Ci0JCQkJCW5ld19zdGF0cy0+Ynl0ZV9jb3VudCA9IHNrYi0+bGVuOworCQkJCQluZXdfc3RhdHMtPmJ5dGVfY291bnQgPSBsZW47CiAJCQkJCW5ld19zdGF0cy0+dGNwX2ZsYWdzID0gdGNwX2ZsYWdzOwogCQkJCQlzcGluX2xvY2tfaW5pdCgmbmV3X3N0YXRzLT5sb2NrKTsKIApAQCAtMTIwLDcgKzEyMSw3IEBACiAKIAlzdGF0cy0+dXNlZCA9IGppZmZpZXM7CiAJc3RhdHMtPnBhY2tldF9jb3VudCsrOwotCXN0YXRzLT5ieXRlX2NvdW50ICs9IHNrYi0+bGVuOworCXN0YXRzLT5ieXRlX2NvdW50ICs9IGxlbjsKIAlzdGF0cy0+dGNwX2ZsYWdzIHw9IHRjcF9mbGFnczsKIHVubG9jazoKIAlzcGluX3VubG9jaygmc3RhdHMtPmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jCmluZGV4IDk2NDVhMjEuLmQxZWVjZjcgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKQEAgLTE3NTMsNyArMTc1Myw2IEBACiAJCQkJICBfX2JlMTYgZXRoX3R5cGUsIF9fYmUxNiB2bGFuX3RjaSwgYm9vbCBsb2cpCiB7CiAJY29uc3Qgc3RydWN0IG5sYXR0ciAqYTsKLQlib29sIG91dF90bmxfcG9ydCA9IGZhbHNlOwogCWludCByZW0sIGVycjsKIAogCWlmIChkZXB0aCA+PSBTQU1QTEVfQUNUSU9OX0RFUFRIKQpAQCAtMTc5Niw4ICsxNzk1LDYgQEAKIAkJY2FzZSBPVlNfQUNUSU9OX0FUVFJfT1VUUFVUOgogCQkJaWYgKG5sYV9nZXRfdTMyKGEpID49IERQX01BWF9QT1JUUykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW91dF90bmxfcG9ydCA9IGZhbHNlOwotCiAJCQlicmVhazsKIAogCQljYXNlIE9WU19BQ1RJT05fQVRUUl9IQVNIOiB7CkBAIC0xODMyLDEyICsxODI5LDYgQEAKIAkJY2FzZSBPVlNfQUNUSU9OX0FUVFJfUFVTSF9NUExTOiB7CiAJCQljb25zdCBzdHJ1Y3Qgb3ZzX2FjdGlvbl9wdXNoX21wbHMgKm1wbHMgPSBubGFfZGF0YShhKTsKIAotCQkJLyogTmV0d29ya2luZyBzdGFjayBkbyBub3QgYWxsb3cgc2ltdWx0YW5lb3VzIFR1bm5lbAotCQkJICogYW5kIE1QTFMgR1NPLgotCQkJICovCi0JCQlpZiAob3V0X3RubF9wb3J0KQotCQkJCXJldHVybiAtRUlOVkFMOwotCiAJCQlpZiAoIWV0aF9wX21wbHMobXBscy0+bXBsc19ldGhlcnR5cGUpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJLyogUHJvaGliaXQgcHVzaCBNUExTIG90aGVyIHRoYW4gdG8gYSB3aGl0ZSBsaXN0CkBAIC0xODczLDExICsxODY0LDkgQEAKIAogCQljYXNlIE9WU19BQ1RJT05fQVRUUl9TRVQ6CiAJCQllcnIgPSB2YWxpZGF0ZV9zZXQoYSwga2V5LCBzZmEsCi0JCQkJCSAgICZvdXRfdG5sX3BvcnQsIGV0aF90eXBlLCBsb2cpOworCQkJCQkgICAmc2tpcF9jb3B5LCBldGhfdHlwZSwgbG9nKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKLQotCQkJc2tpcF9jb3B5ID0gb3V0X3RubF9wb3J0OwogCQkJYnJlYWs7CiAKIAkJY2FzZSBPVlNfQUNUSU9OX0FUVFJfU0FNUExFOgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LWdlbmV2ZS5jIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LWdlbmV2ZS5jCmluZGV4IDM0N2ZhMjMuLjQ4NDg2NGQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC92cG9ydC1nZW5ldmUuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ2VuZXZlLmMKQEAgLTIxOSw3ICsyMTksMTAgQEAKIAkJCSAgICAgIGZhbHNlKTsKIAlpZiAoZXJyIDwgMCkKIAkJaXBfcnRfcHV0KHJ0KTsKKwlyZXR1cm4gZXJyOworCiBlcnJvcjoKKwlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ3JlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ3JlLmMKaW5kZXggNmI2OWRmNS4uZDQxNjhjNCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LWdyZS5jCisrKyBiL25ldC9vcGVudnN3aXRjaC92cG9ydC1ncmUuYwpAQCAtNzMsNyArNzMsNyBAQAogCiAJc2tiID0gZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsICEhKHR1bl9rZXktPnR1bl9mbGFncyAmIFRVTk5FTF9DU1VNKSk7CiAJaWYgKElTX0VSUihza2IpKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIHNrYjsKIAogCXRwaS5mbGFncyA9IGZpbHRlcl90bmxfZmxhZ3ModHVuX2tleS0+dHVuX2ZsYWdzKTsKIAl0cGkucHJvdG8gPSBodG9ucyhFVEhfUF9URUIpOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKIAlpZiAodW5saWtlbHkoIU9WU19DQihza2IpLT5lZ3Jlc3NfdHVuX2luZm8pKSB7CiAJCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZXJyX2ZyZWVfc2tiOwogCX0KIAogCXR1bl9rZXkgPSAmT1ZTX0NCKHNrYiktPmVncmVzc190dW5faW5mby0+dHVubmVsOwpAQCAtMTU3LDggKzE1NywxMCBAQAogCWZsLmZsb3dpNF9wcm90byA9IElQUFJPVE9fR1JFOwogCiAJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsKTsKLQlpZiAoSVNfRVJSKHJ0KSkKLQkJcmV0dXJuIFBUUl9FUlIocnQpOworCWlmIChJU19FUlIocnQpKSB7CisJCWVyciA9IFBUUl9FUlIocnQpOworCQlnb3RvIGVycl9mcmVlX3NrYjsKKwl9CiAKIAl0dW5uZWxfaGxlbiA9IGlwX2dyZV9jYWxjX2hsZW4odHVuX2tleS0+dHVuX2ZsYWdzKTsKIApAQCAtMTgzLDggKzE4NSw5IEBACiAKIAkvKiBQdXNoIFR1bm5lbCBoZWFkZXIuICovCiAJc2tiID0gX19idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWxfaGxlbik7Ci0JaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0JCWVyciA9IDA7CisJaWYgKElTX0VSUihza2IpKSB7CisJCWVyciA9IFBUUl9FUlIoc2tiKTsKKwkJc2tiID0gTlVMTDsKIAkJZ290byBlcnJfZnJlZV9ydDsKIAl9CiAKQEAgLTE5OCw3ICsyMDEsOCBAQAogCQkJICAgICB0dW5fa2V5LT5pcHY0X3RvcywgdHVuX2tleS0+aXB2NF90dGwsIGRmLCBmYWxzZSk7CiBlcnJfZnJlZV9ydDoKIAlpcF9ydF9wdXQocnQpOwotZXJyb3I6CitlcnJfZnJlZV9za2I6CisJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LXZ4bGFuLmMgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtdnhsYW4uYwppbmRleCAzOGY5NWE1Li5kN2M0NmIzIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtdnhsYW4uYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtdnhsYW4uYwpAQCAtMTg3LDcgKzE4Nyw5IEBACiAJCQkgICAgIGZhbHNlKTsKIAlpZiAoZXJyIDwgMCkKIAkJaXBfcnRfcHV0KHJ0KTsKKwlyZXR1cm4gZXJyOwogZXJyb3I6CisJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmMgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYwppbmRleCA5NTg0NTI2Li4yMDM0YzZkIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJc3RhdHMgPSB0aGlzX2NwdV9wdHIodnBvcnQtPnBlcmNwdV9zdGF0cyk7CiAJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc3RhdHMtPnN5bmNwKTsKIAlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW4gKyAodmxhbl90eF90YWdfcHJlc2VudChza2IpID8gVkxBTl9ITEVOIDogMCk7CiAJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnN0YXRzLT5zeW5jcCk7CiAKIAlPVlNfQ0Ioc2tiKS0+aW5wdXRfdnBvcnQgPSB2cG9ydDsKQEAgLTUxOSwxMCArNTE5LDkgQEAKIAkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnN0YXRzLT5zeW5jcCk7CiAJfSBlbHNlIGlmIChzZW50IDwgMCkgewogCQlvdnNfdnBvcnRfcmVjb3JkX2Vycm9yKHZwb3J0LCBWUE9SVF9FX1RYX0VSUk9SKTsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJb3ZzX3Zwb3J0X3JlY29yZF9lcnJvcih2cG9ydCwgVlBPUlRfRV9UWF9EUk9QUEVEKTsKLQorCX0KIAlyZXR1cm4gc2VudDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggZTUyYTQ0Ny4uOWNmZTJlMSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC03ODUsNiArNzg1LDcgQEAKIAogCXN0cnVjdCB0cGFja2V0M19oZHIgKmxhc3RfcGt0OwogCXN0cnVjdCB0cGFja2V0X2hkcl92MSAqaDEgPSAmcGJkMS0+aGRyLmJoMTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSAmcG8tPnNrOwogCiAJaWYgKHBvLT5zdGF0cy5zdGF0czMudHBfZHJvcHMpCiAJCXN0YXR1cyB8PSBUUF9TVEFUVVNfTE9TSU5HOwpAQCAtODA5LDYgKzgxMCw4IEBACiAJLyogRmx1c2ggdGhlIGJsb2NrICovCiAJcHJiX2ZsdXNoX2Jsb2NrKHBrYzEsIHBiZDEsIHN0YXR1cyk7CiAKKwlzay0+c2tfZGF0YV9yZWFkeShzayk7CisKIAlwa2MxLT5rYWN0aXZlX2Jsa19udW0gPSBHRVRfTkVYVF9QUkJfQkxLX05VTShwa2MxKTsKIH0KIApAQCAtMjA1MiwxMiArMjA1NSwxMiBAQAogCXNtcF93bWIoKTsKICNlbmRpZgogCi0JaWYgKHBvLT50cF92ZXJzaW9uIDw9IFRQQUNLRVRfVjIpCisJaWYgKHBvLT50cF92ZXJzaW9uIDw9IFRQQUNLRVRfVjIpIHsKIAkJX19wYWNrZXRfc2V0X3N0YXR1cyhwbywgaC5yYXcsIHN0YXR1cyk7Ci0JZWxzZQorCQlzay0+c2tfZGF0YV9yZWFkeShzayk7CisJfSBlbHNlIHsKIAkJcHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cygmcG8tPnJ4X3JpbmcpOwotCi0Jc2stPnNrX2RhdGFfcmVhZHkoc2spOworCX0KIAogZHJvcF9uX3Jlc3RvcmU6CiAJaWYgKHNrYl9oZWFkICE9IHNrYi0+ZGF0YSAmJiBza2Jfc2hhcmVkKHNrYikpIHsKQEAgLTI1MTQsNyArMjUxNyw3IEBACiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoc29jay0+dHlwZSA9PSBTT0NLX0RHUkFNKSB7CiAJCW9mZnNldCA9IGRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgbnRvaHMocHJvdG8pLCBhZGRyLCBOVUxMLCBsZW4pOwotCQlpZiAodW5saWtlbHkob2Zmc2V0KSA8IDApCisJCWlmICh1bmxpa2VseShvZmZzZXQgPCAwKSkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfSBlbHNlIHsKIAkJaWYgKGxsX2hlYWRlcl90cnVuY2F0ZWQoZGV2LCBsZW4pKQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19icGYuYyBiL25ldC9zY2hlZC9jbHNfYnBmLmMKaW5kZXggODRjODIxOS4uZjU5YWRmOCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19icGYuYworKysgYi9uZXQvc2NoZWQvY2xzX2JwZi5jCkBAIC0xODAsNiArMTgwLDExIEBACiAJfQogCiAJYnBmX3NpemUgPSBicGZfbGVuICogc2l6ZW9mKCpicGZfb3BzKTsKKwlpZiAoYnBmX3NpemUgIT0gbmxhX2xlbih0YltUQ0FfQlBGX09QU10pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3V0OworCX0KKwogCWJwZl9vcHMgPSBremFsbG9jKGJwZl9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnBmX29wcyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0yMTUsMTUgKzIyMCwyMSBAQAogCQkJCSAgIHN0cnVjdCBjbHNfYnBmX2hlYWQgKmhlYWQpCiB7CiAJdW5zaWduZWQgaW50IGkgPSAweDgwMDAwMDAwOworCXUzMiBoYW5kbGU7CiAKIAlkbyB7CiAJCWlmICgrK2hlYWQtPmhnZW4gPT0gMHg3RkZGRkZGRikKIAkJCWhlYWQtPmhnZW4gPSAxOwogCX0gd2hpbGUgKC0taSA+IDAgJiYgY2xzX2JwZl9nZXQodHAsIGhlYWQtPmhnZW4pKTsKLQlpZiAoaSA9PSAwKQotCQlwcl9lcnIoIkluc3VmZmljaWVudCBudW1iZXIgb2YgaGFuZGxlc1xuIik7CiAKLQlyZXR1cm4gaTsKKwlpZiAodW5saWtlbHkoaSA9PSAwKSkgeworCQlwcl9lcnIoIkluc3VmZmljaWVudCBudW1iZXIgb2YgaGFuZGxlc1xuIik7CisJCWhhbmRsZSA9IDA7CisJfSBlbHNlIHsKKwkJaGFuZGxlID0gaGVhZC0+aGdlbjsKKwl9CisKKwlyZXR1cm4gaGFuZGxlOwogfQogCiBzdGF0aWMgaW50IGNsc19icGZfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggZjc5MWVkZC4uMjZkMDZkYiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMKKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKQEAgLTExODIsNyArMTE4Miw2IEBACiAJYXNvYy0+cGVlci5wZWVyX2htYWNzID0gbmV3LT5wZWVyLnBlZXJfaG1hY3M7CiAJbmV3LT5wZWVyLnBlZXJfaG1hY3MgPSBOVUxMOwogCi0Jc2N0cF9hdXRoX2tleV9wdXQoYXNvYy0+YXNvY19zaGFyZWRfa2V5KTsKIAlzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkoYXNvYywgR0ZQX0FUT01JQyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggMjYyNWVjYy4uYWFmZTk0YiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTE2MDMsNyArMTYwMyw3IEBACiAJc2N0cF9hc3NvY190IGFzc29jaWQgPSAwOwogCXNjdHBfY21zZ3NfdCBjbXNncyA9IHsgTlVMTCB9OwogCXNjdHBfc2NvcGVfdCBzY29wZTsKLQlib29sIGZpbGxfc2luZm9fdHRsID0gZmFsc2U7CisJYm9vbCBmaWxsX3NpbmZvX3R0bCA9IGZhbHNlLCB3YWl0X2Nvbm5lY3QgPSBmYWxzZTsKIAlzdHJ1Y3Qgc2N0cF9kYXRhbXNnICpkYXRhbXNnOwogCWludCBtc2dfZmxhZ3MgPSBtc2ctPm1zZ19mbGFnczsKIAlfX3UxNiBzaW5mb19mbGFncyA9IDA7CkBAIC0xOTQzLDYgKzE5NDMsNyBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAKKwkJd2FpdF9jb25uZWN0ID0gdHJ1ZTsKIAkJcHJfZGVidWcoIiVzOiB3ZSBhc3NvY2lhdGVkIHByaW1pdGl2ZWx5XG4iLCBfX2Z1bmNfXyk7CiAJfQogCkBAIC0xOTgwLDYgKzE5ODEsMTEgQEAKIAlzY3RwX2RhdGFtc2dfcHV0KGRhdGFtc2cpOwogCWVyciA9IG1zZ19sZW47CiAKKwlpZiAodW5saWtlbHkod2FpdF9jb25uZWN0KSkgeworCQl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZ19mbGFncyAmIE1TR19ET05UV0FJVCk7CisJCXNjdHBfd2FpdF9mb3JfY29ubmVjdChhc29jLCAmdGltZW8pOworCX0KKwogCS8qIElmIHdlIGFyZSBhbHJlYWR5IHBhc3QgQVNTT0NJQVRFLCB0aGUgbG93ZXIKIAkgKiBsYXllcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBhc3NvY2lhdGlvbiBjbGVhbnVwLgogCSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGEyYzMzYTQuLjQxODc5NWMgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTg2OSw5ICs4NjksNiBAQAogc3RhdGljIHN0cnVjdCBzb2NrX2lvY2IgKmFsbG9jX3NvY2tfaW9jYihzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCQkJCSBzdHJ1Y3Qgc29ja19pb2NiICpzaW9jYikKIHsKLQlpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpCi0JCUJVRygpOwotCiAJc2lvY2ItPmtpb2NiID0gaW9jYjsKIAlpb2NiLT5wcml2YXRlID0gc2lvY2I7CiAJcmV0dXJuIHNpb2NiOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94ZHIuYyBiL25ldC9zdW5ycGMveGRyLmMKaW5kZXggMWNiNjEyNC4uNDQzOWFjNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94ZHIuYworKysgYi9uZXQvc3VucnBjL3hkci5jCkBAIC02MDYsNyArNjA2LDcgQEAKIAlzdHJ1Y3Qga3ZlYyAqaGVhZCA9IGJ1Zi0+aGVhZDsKIAlzdHJ1Y3Qga3ZlYyAqdGFpbCA9IGJ1Zi0+dGFpbDsKIAlpbnQgZnJhZ2xlbjsKLQlpbnQgbmV3LCBvbGQ7CisJaW50IG5ldzsKIAogCWlmIChsZW4gPiBidWYtPmxlbikgewogCQlXQVJOX09OX09OQ0UoMSk7CkBAIC02MjksOCArNjI5LDggQEAKIAlidWYtPmxlbiAtPSBmcmFnbGVuOwogCiAJbmV3ID0gYnVmLT5wYWdlX2Jhc2UgKyBidWYtPnBhZ2VfbGVuOwotCW9sZCA9IG5ldyArIGZyYWdsZW47Ci0JeGRyLT5wYWdlX3B0ciAtPSAob2xkID4+IFBBR0VfU0hJRlQpIC0gKG5ldyA+PiBQQUdFX1NISUZUKTsKKworCXhkci0+cGFnZV9wdHIgPSBidWYtPnBhZ2VzICsgKG5ldyA+PiBQQUdFX1NISUZUKTsKIAogCWlmIChidWYtPnBhZ2VfbGVuKSB7CiAJCXhkci0+cCA9IHBhZ2VfYWRkcmVzcygqeGRyLT5wYWdlX3B0cik7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5jIGIvbmV0L3RpcGMvYmNhc3QuYwppbmRleCA5NmNlZWZlLi5hOWUxNzRmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5jCisrKyBiL25ldC90aXBjL2JjYXN0LmMKQEAgLTIyMCwxMCArMjIwLDExIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrYl9xdWV1ZV93YWxrKCZiY2wtPm91dHF1ZXVlLCBza2IpIHsKLQkJaWYgKG1vcmUoYnVmX3NlcW5vKHNrYiksIGFmdGVyKSkKKwkJaWYgKG1vcmUoYnVmX3NlcW5vKHNrYiksIGFmdGVyKSkgeworCQkJdGlwY19saW5rX3JldHJhbnNtaXQoYmNsLCBza2IsIG1vZCh0byAtIGFmdGVyKSk7CiAJCQlicmVhazsKKwkJfQogCX0KLQl0aXBjX2xpbmtfcmV0cmFuc21pdChiY2wsIHNrYiwgbW9kKHRvIC0gYWZ0ZXIpKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDIyYmE5NzEuLjI5Yzg2NzUgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9LY29uZmlnCisrKyBiL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC0xNzUsNyArMTc1LDcgQEAKIAkgIE1vc3QgZGlzdHJpYnV0aW9ucyBoYXZlIGEgQ1JEQSBwYWNrYWdlLiAgU28gaWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIENGRzgwMjExX1dFWFQKLQlib29sCisJYm9vbCAiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5IgogCWRlcGVuZHMgb24gQ0ZHODAyMTEKIAlzZWxlY3QgV0VYVF9DT1JFCiAJaGVscApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggN2NhNGI1MS4uODg4N2M2ZSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYworKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0yODU0LDYgKzI4NTQsOSBAQAogCWlmICghcmRldi0+b3BzLT5nZXRfa2V5KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKKwlpZiAoIXBhaXJ3aXNlICYmIG1hY19hZGRyICYmICEocmRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX0lCU1NfUlNOKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKIAltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1zZykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yODczLDEwICsyODc2LDYgQEAKIAkgICAgbmxhX3B1dChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBtYWNfYWRkcikpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JaWYgKHBhaXJ3aXNlICYmIG1hY19hZGRyICYmCi0JICAgICEocmRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX0lCU1NfUlNOKSkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KIAllcnIgPSByZGV2X2dldF9rZXkocmRldiwgZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIsICZjb29raWUsCiAJCQkgICBnZXRfa2V5X2NhbGxiYWNrKTsKIApAQCAtMzA0Nyw3ICszMDQ2LDcgQEAKIAl3ZGV2X2xvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKIAllcnIgPSBubDgwMjExX2tleV9hbGxvd2VkKGRldi0+aWVlZTgwMjExX3B0cik7CiAKLQlpZiAoa2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFICYmIG1hY19hZGRyICYmCisJaWYgKGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9HUk9VUCAmJiBtYWNfYWRkciAmJgogCSAgICAhKHJkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19JQlNTX1JTTikpCiAJCWVyciA9IC1FTk9FTlQ7CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuYwppbmRleCA3YjgzMDk4Li5kMzlkMWNiIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC0xNTMwLDQ1ICsxNTMwLDQwIEBACiAKIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOwogCXN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiBjaGFuZGVmOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpOwotCWJvb2wgcmV0ID0gdHJ1ZTsKKwllbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZTsKIAogCXdkZXZfbG9jayh3ZGV2KTsKKwlpZnR5cGUgPSB3ZGV2LT5pZnR5cGU7CiAKKwkvKiBtYWtlIHN1cmUgdGhlIGludGVyZmFjZSBpcyBhY3RpdmUgKi8KIAlpZiAoIXdkZXYtPm5ldGRldiB8fCAhbmV0aWZfcnVubmluZyh3ZGV2LT5uZXRkZXYpKQotCQlnb3RvIG91dDsKKwkJZ290byB3ZGV2X2luYWN0aXZlX3VubG9jazsKIAotCXN3aXRjaCAod2Rldi0+aWZ0eXBlKSB7CisJc3dpdGNoIChpZnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgogCQlpZiAoIXdkZXYtPmJlYWNvbl9pbnRlcnZhbCkKLQkJCWdvdG8gb3V0OwotCi0JCXJldCA9IGNmZzgwMjExX3JlZ19jYW5fYmVhY29uKHdpcGh5LAotCQkJCQkgICAgICAmd2Rldi0+Y2hhbmRlZiwgd2Rldi0+aWZ0eXBlKTsKKwkJCWdvdG8gd2Rldl9pbmFjdGl2ZV91bmxvY2s7CisJCWNoYW5kZWYgPSB3ZGV2LT5jaGFuZGVmOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlpZiAoIXdkZXYtPnNzaWRfbGVuKQotCQkJZ290byBvdXQ7Ci0KLQkJcmV0ID0gY2ZnODAyMTFfcmVnX2Nhbl9iZWFjb24od2lwaHksCi0JCQkJCSAgICAgICZ3ZGV2LT5jaGFuZGVmLCB3ZGV2LT5pZnR5cGUpOworCQkJZ290byB3ZGV2X2luYWN0aXZlX3VubG9jazsKKwkJY2hhbmRlZiA9IHdkZXYtPmNoYW5kZWY7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6CiAJCWlmICghd2Rldi0+Y3VycmVudF9ic3MgfHwKIAkJICAgICF3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmNoYW5uZWwpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gd2Rldl9pbmFjdGl2ZV91bmxvY2s7CiAKLQkJY2ggPSB3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmNoYW5uZWw7Ci0JCWlmIChyZGV2LT5vcHMtPmdldF9jaGFubmVsICYmCi0JCSAgICAhcmRldl9nZXRfY2hhbm5lbChyZGV2LCB3ZGV2LCAmY2hhbmRlZikpCi0JCQlyZXQgPSBjZmc4MDIxMV9jaGFuZGVmX3VzYWJsZSh3aXBoeSwgJmNoYW5kZWYsCi0JCQkJCQkgICAgICBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCk7Ci0JCWVsc2UKLQkJCXJldCA9ICEoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpOworCQlpZiAoIXJkZXYtPm9wcy0+Z2V0X2NoYW5uZWwgfHwKKwkJICAgIHJkZXZfZ2V0X2NoYW5uZWwocmRldiwgd2RldiwgJmNoYW5kZWYpKQorCQkJY2ZnODAyMTFfY2hhbmRlZl9jcmVhdGUoJmNoYW5kZWYsCisJCQkJCQl3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmNoYW5uZWwsCisJCQkJCQlOTDgwMjExX0NIQU5fTk9fSFQpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgpAQCAtMTU4MSw5ICsxNTc2LDI2IEBACiAJCWJyZWFrOwogCX0KIAotb3V0OgogCXdkZXZfdW5sb2NrKHdkZXYpOwotCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKGlmdHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcmV0dXJuIGNmZzgwMjExX3JlZ19jYW5fYmVhY29uKHdpcGh5LCAmY2hhbmRlZiwgaWZ0eXBlKTsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgorCQlyZXR1cm4gY2ZnODAyMTFfY2hhbmRlZl91c2FibGUod2lwaHksICZjaGFuZGVmLAorCQkJCQkgICAgICAgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiB0cnVlOworCit3ZGV2X2luYWN0aXZlX3VubG9jazoKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoc3RydWN0IHdpcGh5ICp3aXBoeSkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IGQwYWM3OTUuLjU0ODhjMzYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtMzA4LDYgKzMwOCwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKSB7CisJCWlmIChpZWVlODAyMTFfaGFzX29yZGVyKGZjKSkKKwkJCWhkcmxlbiArPSBJRUVFODAyMTFfSFRfQ1RMX0xFTjsKKwkJZ290byBvdXQ7CisJfQorCiAJaWYgKGllZWU4MDIxMV9pc19jdGwoZmMpKSB7CiAJCS8qCiAJCSAqIEFDSyBhbmQgQ1RTIGFyZSAxMCBieXRlcywgYWxsIG90aGVycyAxNi4gVG8gc2VlIGhvdwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9icGYvdGVzdF9tYXBzLmMgYi9zYW1wbGVzL2JwZi90ZXN0X21hcHMuYwppbmRleCBlMjg2YjQyLi42Mjk5ZWU5IDEwMDY0NAotLS0gYS9zYW1wbGVzL2JwZi90ZXN0X21hcHMuYworKysgYi9zYW1wbGVzL2JwZi90ZXN0X21hcHMuYwpAQCAtNjksOSArNjksOSBAQAogCiAJLyogaXRlcmF0ZSBvdmVyIHR3byBlbGVtZW50cyAqLwogCWFzc2VydChicGZfZ2V0X25leHRfa2V5KG1hcF9mZCwgJmtleSwgJm5leHRfa2V5KSA9PSAwICYmCi0JICAgICAgIG5leHRfa2V5ID09IDIpOworCSAgICAgICAobmV4dF9rZXkgPT0gMSB8fCBuZXh0X2tleSA9PSAyKSk7CiAJYXNzZXJ0KGJwZl9nZXRfbmV4dF9rZXkobWFwX2ZkLCAmbmV4dF9rZXksICZuZXh0X2tleSkgPT0gMCAmJgotCSAgICAgICBuZXh0X2tleSA9PSAxKTsKKwkgICAgICAgKG5leHRfa2V5ID09IDEgfHwgbmV4dF9rZXkgPT0gMikpOwogCWFzc2VydChicGZfZ2V0X25leHRfa2V5KG1hcF9mZCwgJm5leHRfa2V5LCAmbmV4dF9rZXkpID09IC0xICYmCiAJICAgICAgIGVycm5vID09IEVOT0VOVCk7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuY2xlYW4gYi9zY3JpcHRzL01ha2VmaWxlLmNsZWFuCmluZGV4IDFiY2ExODAuLjYyN2Y4Y2IgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuY2xlYW4KKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5jbGVhbgpAQCAtNDIsMTkgKzQyLDE5IEBACiAKIF9fY2xlYW4tZmlsZXMgICA6PSAkKGZpbHRlci1vdXQgJChuby1jbGVhbi1maWxlcyksICQoX19jbGVhbi1maWxlcykpCiAKLSMgYXMgY2xlYW4tZmlsZXMgaXMgZ2l2ZW4gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGlzIGFkZHMKLSMgYSAkKG9iaikgcHJlZml4LCBleGNlcHQgZm9yIGFic29sdXRlIHBhdGhzCisjIGNsZWFuLWZpbGVzIGlzIGdpdmVuIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdW5sZXNzIGl0CisjIHN0YXJ0cyB3aXRoICQob2JqdHJlZSkvICh3aGljaCBtZWFucyAiLi8iLCBzbyBkbyBub3QgYWRkICIuLyIgdW5sZXNzCisjIHlvdSB3YW50IHRvIGRlbGV0ZSBhIGZpbGUgZnJvbSB0aGUgdG9wbGV2ZWwgb2JqZWN0IGRpcmVjdG9yeSkuCiAKIF9fY2xlYW4tZmlsZXMgICA6PSAkKHdpbGRjYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgJChhZGRwcmVmaXggJChvYmopLywgJChmaWx0ZXItb3V0IC8lLCAkKF9fY2xlYW4tZmlsZXMpKSkgXAotCQkgICAkKGZpbHRlciAvJSwgJChfX2NsZWFuLWZpbGVzKSkpCisJCSAgICQoYWRkcHJlZml4ICQob2JqKS8sICQoZmlsdGVyLW91dCAkKG9ianRyZWUpLyUsICQoX19jbGVhbi1maWxlcykpKSBcCisJCSAgICQoZmlsdGVyICQob2JqdHJlZSkvJSwgJChfX2NsZWFuLWZpbGVzKSkpCiAKLSMgYXMgY2xlYW4tZGlycyBpcyBnaXZlbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoaXMgYWRkcwotIyBhICQob2JqKSBwcmVmaXgsIGV4Y2VwdCBmb3IgYWJzb2x1dGUgcGF0aHMKKyMgc2FtZSBhcyBjbGVhbi1maWxlcwogCiBfX2NsZWFuLWRpcnMgICAgOj0gJCh3aWxkY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICQoYWRkcHJlZml4ICQob2JqKS8sICQoZmlsdGVyLW91dCAvJSwgJChjbGVhbi1kaXJzKSkpICAgIFwKLQkJICAgJChmaWx0ZXIgLyUsICQoY2xlYW4tZGlycykpKQorCQkgICAkKGFkZHByZWZpeCAkKG9iaikvLCAkKGZpbHRlci1vdXQgJChvYmp0cmVlKS8lLCAkKGNsZWFuLWRpcnMpKSkgICAgXAorCQkgICAkKGZpbHRlciAkKG9ianRyZWUpLyUsICQoY2xlYW4tZGlycykpKQogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsIGIvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKaW5kZXggNTZlYTk5YS4uNTM3YzM4YyAxMDA3NTUKLS0tIGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKKysrIGIvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKQEAgLTI1NSw3ICsyNTUsNiBAQAogICAgICMgZm9yY2UgZmxhZ3MgZm9yIHRoaXMgYXJjaAogICAgICRsZCAuPSAiIC1tIHNobGVsZl9saW51eCI7CiAgICAgJG9iamNvcHkgLj0gIiAtTyBlbGYzMi1zaC1saW51eCI7Ci0gICAgJGNjIC49ICIgLW0zMiI7CiAKIH0gZWxzaWYgKCRhcmNoIGVxICJwb3dlcnBjIikgewogICAgICRsb2NhbF9yZWdleCA9ICJeWzAtOWEtZkEtRl0rXFxzK3RcXHMrKFxcLj9cXFMrKSI7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2djLmMgYi9zZWN1cml0eS9rZXlzL2djLmMKaW5kZXggOTYwOWE3Zi4uYzc5NTIzNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9nYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvZ2MuYwpAQCAtMTQ4LDEyICsxNDgsMTIgQEAKIAkJaWYgKHRlc3RfYml0KEtFWV9GTEFHX0lOU1RBTlRJQVRFRCwgJmtleS0+ZmxhZ3MpKQogCQkJYXRvbWljX2RlYygma2V5LT51c2VyLT5uaWtleXMpOwogCi0JCWtleV91c2VyX3B1dChrZXktPnVzZXIpOwotCiAJCS8qIG5vdyB0aHJvdyBhd2F5IHRoZSBrZXkgbWVtb3J5ICovCiAJCWlmIChrZXktPnR5cGUtPmRlc3Ryb3kpCiAJCQlrZXktPnR5cGUtPmRlc3Ryb3koa2V5KTsKIAorCQlrZXlfdXNlcl9wdXQoa2V5LT51c2VyKTsKKwogCQlrZnJlZShrZXktPmRlc2NyaXB0aW9uKTsKIAogI2lmZGVmIEtFWV9ERUJVR0dJTkcKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9kdW1teS5jIGIvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMKaW5kZXggZWM2NjdmMS4uNWQ5MDVkOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMKQEAgLTgyLDM2ICs4Miw2IEBACiBzdGF0aWMgaW50IG15X2NsaWVudCA9IC0xOwogCiAvKgotICogdW51c2UgY2FsbGJhY2sgLSBzZW5kIEFMTF9TT1VORFNfT0ZGIGFuZCBSRVNFVF9DT05UUk9MTEVSUyBldmVudHMKLSAqIHRvIHN1YnNjcmliZXJzLgotICogTm90ZTogdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgb25seSBhZnRlciBhbGwgc3Vic2NyaWJlcnMgYXJlIHJlbW92ZWQuCi0gKi8KLXN0YXRpYyBpbnQKLWR1bW15X3VudXNlKHZvaWQgKnByaXZhdGVfZGF0YSwgc3RydWN0IHNuZF9zZXFfcG9ydF9zdWJzY3JpYmUgKmluZm8pCi17Ci0Jc3RydWN0IHNuZF9zZXFfZHVtbXlfcG9ydCAqcDsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc25kX3NlcV9ldmVudCBldjsKLQotCXAgPSBwcml2YXRlX2RhdGE7Ci0JbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7Ci0JaWYgKHAtPmR1cGxleCkKLQkJZXYuc291cmNlLnBvcnQgPSBwLT5jb25uZWN0OwotCWVsc2UKLQkJZXYuc291cmNlLnBvcnQgPSBwLT5wb3J0OwotCWV2LmRlc3QuY2xpZW50ID0gU05EUlZfU0VRX0FERFJFU1NfU1VCU0NSSUJFUlM7Ci0JZXYudHlwZSA9IFNORFJWX1NFUV9FVkVOVF9DT05UUk9MTEVSOwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWV2LmRhdGEuY29udHJvbC5jaGFubmVsID0gaTsKLQkJZXYuZGF0YS5jb250cm9sLnBhcmFtID0gTUlESV9DVExfQUxMX1NPVU5EU19PRkY7Ci0JCXNuZF9zZXFfa2VybmVsX2NsaWVudF9kaXNwYXRjaChwLT5jbGllbnQsICZldiwgMCwgMCk7Ci0JCWV2LmRhdGEuY29udHJvbC5wYXJhbSA9IE1JRElfQ1RMX1JFU0VUX0NPTlRST0xMRVJTOwotCQlzbmRfc2VxX2tlcm5lbF9jbGllbnRfZGlzcGF0Y2gocC0+Y2xpZW50LCAmZXYsIDAsIDApOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIGV2ZW50IGlucHV0IGNhbGxiYWNrIC0ganVzdCByZWRpcmVjdCBldmVudHMgdG8gc3Vic2NyaWJlcnMKICAqLwogc3RhdGljIGludApAQCAtMTc1LDcgKzE0NSw2IEBACiAJCXwgU05EUlZfU0VRX1BPUlRfVFlQRV9QT1JUOwogCW1lbXNldCgmcGNiLCAwLCBzaXplb2YocGNiKSk7CiAJcGNiLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JcGNiLnVudXNlID0gZHVtbXlfdW51c2U7CiAJcGNiLmV2ZW50X2lucHV0ID0gZHVtbXlfaW5wdXQ7CiAJcGNiLnByaXZhdGVfZnJlZSA9IGR1bW15X2ZyZWU7CiAJcGNiLnByaXZhdGVfZGF0YSA9IHJlYzsKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmMgYi9zb3VuZC9maXJld2lyZS9hbWR0cC5jCmluZGV4IDNiYWRjNzAuLjBkNTgwMTggMTAwNjQ0Ci0tLSBhL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmMKKysrIGIvc291bmQvZmlyZXdpcmUvYW1kdHAuYwpAQCAtMjEsNyArMjEsMTkgQEAKICNkZWZpbmUgQ1lDTEVTX1BFUl9TRUNPTkQJODAwMAogI2RlZmluZSBUSUNLU19QRVJfU0VDT05ECShUSUNLU19QRVJfQ1lDTEUgKiBDWUNMRVNfUEVSX1NFQ09ORCkKIAotI2RlZmluZSBUUkFOU0ZFUl9ERUxBWV9USUNLUwkweDJlMDAgLyogNDc5LjE3IMK1cyAqLworLyoKKyAqIE5vbWluYWxseSAzMTI1IGJ5dGVzL3NlY29uZCwgYnV0IHRoZSBNSURJIHBvcnQncyBjbG9jayBtaWdodCBiZQorICogMSUgdG9vIHNsb3csIGFuZCB0aGUgYnVzIGNsb2NrIDEwMCBwcG0gdG9vIGZhc3QuCisgKi8KKyNkZWZpbmUgTUlESV9CWVRFU19QRVJfU0VDT05ECTMwOTMKKworLyoKKyAqIFNldmVyYWwgZGV2aWNlcyBsb29rIG9ubHkgYXQgdGhlIGZpcnN0IGVpZ2h0IGRhdGEgYmxvY2tzLgorICogSW4gYW55IGNhc2UsIHRoaXMgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgdGhlIE1JREkgZGF0YSByYXRlLgorICovCisjZGVmaW5lIE1BWF9NSURJX1JYX0JMT0NLUwk4CisKKyNkZWZpbmUgVFJBTlNGRVJfREVMQVlfVElDS1MJMHgyZTAwIC8qIDQ3OS4xNyDDgsK1cyAqLwogCiAvKiBpc29jaHJvbm91cyBoZWFkZXIgcGFyYW1ldGVycyAqLwogI2RlZmluZSBJU09fREFUQV9MRU5HVEhfU0hJRlQJMTYKQEAgLTc4LDggKzkwLDYgQEAKIAlzLT5jYWxsYmFja2VkID0gZmFsc2U7CiAJcy0+c3luY19zbGF2ZSA9IE5VTEw7CiAKLQlzLT5yeF9ibG9ja3NfZm9yX21pZGkgPSBVSU5UX01BWDsKLQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChhbWR0cF9zdHJlYW1faW5pdCk7CkBAIC0yMjIsNiArMjMyLDE0IEBACiAJZm9yIChpID0gMDsgaSA8IHBjbV9jaGFubmVsczsgaSsrKQogCQlzLT5wY21fcG9zaXRpb25zW2ldID0gaTsKIAlzLT5taWRpX3Bvc2l0aW9uID0gcy0+cGNtX2NoYW5uZWxzOworCisJLyoKKwkgKiBXZSBkbyBub3Qga25vdyB0aGUgYWN0dWFsIE1JREkgRklGTyBzaXplIG9mIG1vc3QgZGV2aWNlcy4gIEp1c3QKKwkgKiBhc3N1bWUgdHdvIGJ5dGVzLCBpLmUuLCBvbmUgYnl0ZSBjYW4gYmUgcmVjZWl2ZWQgb3ZlciB0aGUgYnVzIHdoaWxlCisJICogdGhlIHByZXZpb3VzIG9uZSBpcyB0cmFuc21pdHRlZCBvdmVyIE1JREkuCisJICogKFRoZSB2YWx1ZSBoZXJlIGlzIGFkanVzdGVkIGZvciBtaWRpX3JhdGVsaW1pdF9wZXJfcGFja2V0KCkuKQorCSAqLworCXMtPm1pZGlfZmlmb19saW1pdCA9IHJhdGUgLSBNSURJX0JZVEVTX1BFUl9TRUNPTkQgKiBzLT5zeXRfaW50ZXJ2YWwgKyAxOwogfQogRVhQT1JUX1NZTUJPTChhbWR0cF9zdHJlYW1fc2V0X3BhcmFtZXRlcnMpOwogCkBAIC00NjMsNiArNDgxLDM2IEBACiAJfQogfQogCisvKgorICogVG8gYXZvaWQgc2VuZGluZyBNSURJIGJ5dGVzIGF0IHRvbyBoaWdoIGEgcmF0ZSwgYXNzdW1lIHRoYXQgdGhlIHJlY2VpdmluZworICogZGV2aWNlIGhhcyBhIEZJRk8sIGFuZCB0cmFjayBob3cgbXVjaCBpdCBpcyBmaWxsZWQuICBUaGlzIHZhbHVlcyBpbmNyZWFzZXMKKyAqIGJ5IG9uZSB3aGVuZXZlciB3ZSBzZW5kIG9uZSBieXRlIGluIGEgcGFja2V0LCBidXQgdGhlIEZJRk8gZW1wdGllcyBhdAorICogYSBjb25zdGFudCByYXRlIGluZGVwZW5kZW50IG9mIG91ciBwYWNrZXQgcmF0ZS4gIE9uZSBwYWNrZXQgaGFzIHN5dF9pbnRlcnZhbAorICogc2FtcGxlcywgc28gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGVtcHR5IG91dCBvZiB0aGUgRklGTywgcGVyIHBhY2tldCghKSwKKyAqIGlzIE1JRElfQllURVNfUEVSX1NFQ09ORCAqIHN5dF9pbnRlcnZhbCAvIHNhbXBsZV9yYXRlLiAgVG8gYXZvaWQgc3RvcmluZworICogZnJhY3Rpb25hbCB2YWx1ZXMsIHRoZSB2YWx1ZXMgaW4gbWlkaV9maWZvX3VzZWRbXSBhcmUgbWVhc3VyZWQgaW4gYnl0ZXMKKyAqIG11bHRpcGxpZWQgYnkgdGhlIHNhbXBsZSByYXRlLgorICovCitzdGF0aWMgYm9vbCBtaWRpX3JhdGVsaW1pdF9wZXJfcGFja2V0KHN0cnVjdCBhbWR0cF9zdHJlYW0gKnMsIHVuc2lnbmVkIGludCBwb3J0KQoreworCWludCB1c2VkOworCisJdXNlZCA9IHMtPm1pZGlfZmlmb191c2VkW3BvcnRdOworCWlmICh1c2VkID09IDApIC8qIGNvbW1vbiBzaG9ydGN1dCAqLworCQlyZXR1cm4gdHJ1ZTsKKworCXVzZWQgLT0gTUlESV9CWVRFU19QRVJfU0VDT05EICogcy0+c3l0X2ludGVydmFsOworCXVzZWQgPSBtYXgodXNlZCwgMCk7CisJcy0+bWlkaV9maWZvX3VzZWRbcG9ydF0gPSB1c2VkOworCisJcmV0dXJuIHVzZWQgPCBzLT5taWRpX2ZpZm9fbGltaXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1pZGlfcmF0ZV91c2Vfb25lX2J5dGUoc3RydWN0IGFtZHRwX3N0cmVhbSAqcywgdW5zaWduZWQgaW50IHBvcnQpCit7CisJcy0+bWlkaV9maWZvX3VzZWRbcG9ydF0gKz0gYW1kdHBfcmF0ZV90YWJsZVtzLT5zZmNdOworfQorCiBzdGF0aWMgdm9pZCBhbWR0cF9maWxsX21pZGkoc3RydWN0IGFtZHRwX3N0cmVhbSAqcywKIAkJCSAgICBfX2JlMzIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGZyYW1lcykKIHsKQEAgLTQ3MCwxNiArNTE4LDIxIEBACiAJdTggKmI7CiAKIAlmb3IgKGYgPSAwOyBmIDwgZnJhbWVzOyBmKyspIHsKLQkJYnVmZmVyW3MtPm1pZGlfcG9zaXRpb25dID0gMDsKIAkJYiA9ICh1OCAqKSZidWZmZXJbcy0+bWlkaV9wb3NpdGlvbl07CiAKIAkJcG9ydCA9IChzLT5kYXRhX2Jsb2NrX2NvdW50ZXIgKyBmKSAlIDg7Ci0JCWlmICgoZiA+PSBzLT5yeF9ibG9ja3NfZm9yX21pZGkpIHx8Ci0JCSAgICAocy0+bWlkaVtwb3J0XSA9PSBOVUxMKSB8fAotCQkgICAgKHNuZF9yYXdtaWRpX3RyYW5zbWl0KHMtPm1pZGlbcG9ydF0sIGIgKyAxLCAxKSA8PSAwKSkKLQkJCWJbMF0gPSAweDgwOwotCQllbHNlCisJCWlmIChmIDwgTUFYX01JRElfUlhfQkxPQ0tTICYmCisJCSAgICBtaWRpX3JhdGVsaW1pdF9wZXJfcGFja2V0KHMsIHBvcnQpICYmCisJCSAgICBzLT5taWRpW3BvcnRdICE9IE5VTEwgJiYKKwkJICAgIHNuZF9yYXdtaWRpX3RyYW5zbWl0KHMtPm1pZGlbcG9ydF0sICZiWzFdLCAxKSA9PSAxKSB7CisJCQltaWRpX3JhdGVfdXNlX29uZV9ieXRlKHMsIHBvcnQpOwogCQkJYlswXSA9IDB4ODE7CisJCX0gZWxzZSB7CisJCQliWzBdID0gMHg4MDsKKwkJCWJbMV0gPSAwOworCQl9CisJCWJbMl0gPSAwOworCQliWzNdID0gMDsKIAogCQlidWZmZXIgKz0gcy0+ZGF0YV9ibG9ja19xdWFkbGV0czsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9hbWR0cC5oIGIvc291bmQvZmlyZXdpcmUvYW1kdHAuaAppbmRleCBlNmU4OTI2Li44YTAzYTkxIDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9hbWR0cC5oCisrKyBiL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmgKQEAgLTE0OCwxMyArMTQ4LDEyIEBACiAJYm9vbCBkb3VibGVfcGNtX2ZyYW1lczsKIAogCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKm1pZGlbQU1EVFBfTUFYX0NIQU5ORUxTX0ZPUl9NSURJICogOF07CisJaW50IG1pZGlfZmlmb19saW1pdDsKKwlpbnQgbWlkaV9maWZvX3VzZWRbQU1EVFBfTUFYX0NIQU5ORUxTX0ZPUl9NSURJICogOF07CiAKIAkvKiBxdWlyazogZml4ZWQgaW50ZXJ2YWwgb2YgZGJjIGJldHdlZW4gcHJldmlvcy9jdXJyZW50IHBhY2tldHMuICovCiAJdW5zaWduZWQgaW50IHR4X2RiY19pbnRlcnZhbDsKIAotCS8qIHF1aXJrOiB0aGUgZmlyc3QgY291bnQgb2YgZGF0YSBibG9ja3MgaW4gYW4gcnggcGFja2V0IGZvciBNSURJICovCi0JdW5zaWduZWQgaW50IHJ4X2Jsb2Nrc19mb3JfbWlkaTsKLQogCWJvb2wgY2FsbGJhY2tlZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBjYWxsYmFja193YWl0OwogCXN0cnVjdCBhbWR0cF9zdHJlYW0gKnN5bmNfc2xhdmU7CmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJvYl9zdHJlYW0uYyBiL3NvdW5kL2ZpcmV3aXJlL2JlYm9iL2JlYm9iX3N0cmVhbS5jCmluZGV4IDFhYWIwYTMyLi4wZWJjYWJmIDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJvYl9zdHJlYW0uYworKysgYi9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJvYl9zdHJlYW0uYwpAQCAtNDg0LDEzICs0ODQsNiBAQAogCQlhbWR0cF9zdHJlYW1fZGVzdHJveSgmYmVib2ItPnJ4X3N0cmVhbSk7CiAJCWRlc3Ryb3lfYm90aF9jb25uZWN0aW9ucyhiZWJvYik7CiAJfQotCS8qCi0JICogVGhlIGZpcm13YXJlIGZvciB0aGVzZSBkZXZpY2VzIGlnbm9yZSBNSURJIG1lc3NhZ2VzIGluIG1vcmUgdGhhbgotCSAqIGZpcnN0IDggZGF0YSBibG9ja3Mgb2YgYW4gcmVjZWl2ZWQgQU1EVFAgcGFja2V0LgotCSAqLwotCWlmIChiZWJvYi0+c3BlYyA9PSAmbWF1ZGlvX2Z3NDEwX3NwZWMgfHwKLQkgICAgYmVib2ItPnNwZWMgPT0gJm1hdWRpb19zcGVjaWFsX3NwZWMpCi0JCWJlYm9iLT5yeF9zdHJlYW0ucnhfYmxvY2tzX2Zvcl9taWRpID0gODsKIGVuZDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvZmlyZXdvcmtzL2ZpcmV3b3Jrc19zdHJlYW0uYyBiL3NvdW5kL2ZpcmV3aXJlL2ZpcmV3b3Jrcy9maXJld29ya3Nfc3RyZWFtLmMKaW5kZXggYjk4NWZjNS4uNGY0NDBlMSAxMDA2NDQKLS0tIGEvc291bmQvZmlyZXdpcmUvZmlyZXdvcmtzL2ZpcmV3b3Jrc19zdHJlYW0uYworKysgYi9zb3VuZC9maXJld2lyZS9maXJld29ya3MvZmlyZXdvcmtzX3N0cmVhbS5jCkBAIC0xNzksMTEgKzE3OSw2IEBACiAJCWRlc3Ryb3lfc3RyZWFtKGVmdywgJmVmdy0+dHhfc3RyZWFtKTsKIAkJZ290byBlbmQ7CiAJfQotCS8qCi0JICogRmlyZXdvcmtzIGlnbm9yZXMgTUlESSBtZXNzYWdlcyBpbiBtb3JlIHRoYW4gZmlyc3QgOCBkYXRhCi0JICogYmxvY2tzIG9mIGFuIHJlY2VpdmVkIEFNRFRQIHBhY2tldC4KLQkgKi8KLQllZnctPnJ4X3N0cmVhbS5yeF9ibG9ja3NfZm9yX21pZGkgPSA4OwogCiAJLyogc2V0IElFQzYxODgzIGNvbXBsaWFudCBtb2RlIChhY3R1YWxseSBub3QgZnVsbHkgY29tcGxpYW50Li4uKSAqLwogCWVyciA9IHNuZF9lZndfY29tbWFuZF9zZXRfdHhfbW9kZShlZncsIFNORF9FRldfVFJBTlNQT1JUX01PREVfSUVDNjE4ODMpOwpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvZmlyZXdvcmtzL2ZpcmV3b3Jrc190cmFuc2FjdGlvbi5jIGIvc291bmQvZmlyZXdpcmUvZmlyZXdvcmtzL2ZpcmV3b3Jrc190cmFuc2FjdGlvbi5jCmluZGV4IDI1NWRhYmMuLjJhODVlNDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2ZpcmV3aXJlL2ZpcmV3b3Jrcy9maXJld29ya3NfdHJhbnNhY3Rpb24uYworKysgYi9zb3VuZC9maXJld2lyZS9maXJld29ya3MvZmlyZXdvcmtzX3RyYW5zYWN0aW9uLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCXNwaW5fbG9ja19pcnEoJmVmdy0+bG9jayk7CiAKIAl0ID0gKHN0cnVjdCBzbmRfZWZ3X3RyYW5zYWN0aW9uICopZGF0YTsKLQlsZW5ndGggPSBtaW5fdChzaXplX3QsIHQtPmxlbmd0aCAqIHNpemVvZih0LT5sZW5ndGgpLCBsZW5ndGgpOworCWxlbmd0aCA9IG1pbl90KHNpemVfdCwgYmUzMl90b19jcHUodC0+bGVuZ3RoKSAqIHNpemVvZih1MzIpLCBsZW5ndGgpOwogCiAJaWYgKGVmdy0+cHVzaF9wdHIgPCBlZnctPnB1bGxfcHRyKQogCQljYXBhY2l0eSA9ICh1bnNpZ25lZCBpbnQpKGVmdy0+cHVsbF9wdHIgLSBlZnctPnB1c2hfcHRyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvbnRyb2xsZXIuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvbnRyb2xsZXIuYwppbmRleCA4Mjc2YTc0Li4wY2ZjOWM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb250cm9sbGVyLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29udHJvbGxlci5jCkBAIC0xOTIyLDEwICsxOTIyLDE4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhenhfbWl4ZXJfY3JlYXRlKTsKIAogCitzdGF0aWMgYm9vbCBpc19pbnB1dF9zdHJlYW0oc3RydWN0IGF6eCAqY2hpcCwgdW5zaWduZWQgY2hhciBpbmRleCkKK3sKKwlyZXR1cm4gKGluZGV4ID49IGNoaXAtPmNhcHR1cmVfaW5kZXhfb2Zmc2V0ICYmCisJCWluZGV4IDwgY2hpcC0+Y2FwdHVyZV9pbmRleF9vZmZzZXQgKyBjaGlwLT5jYXB0dXJlX3N0cmVhbXMpOworfQorCiAvKiBpbml0aWFsaXplIFNEIHN0cmVhbXMgKi8KIGludCBhenhfaW5pdF9zdHJlYW0oc3RydWN0IGF6eCAqY2hpcCkKIHsKIAlpbnQgaTsKKwlpbnQgaW5fc3RyZWFtX3RhZyA9IDA7CisJaW50IG91dF9zdHJlYW1fdGFnID0gMDsKIAogCS8qIGluaXRpYWxpemUgZWFjaCBzdHJlYW0gKGFrYSBkZXZpY2UpCiAJICogYXNzaWduIHRoZSBzdGFydGluZyBiZGwgYWRkcmVzcyB0byBlYWNoIHN0cmVhbSAoZGV2aWNlKQpAQCAtMTkzOCw5ICsxOTQ2LDIxIEBACiAJCWF6eF9kZXYtPnNkX2FkZHIgPSBjaGlwLT5yZW1hcF9hZGRyICsgKDB4MjAgKiBpICsgMHg4MCk7CiAJCS8qIGludCBtYXNrOiBTREkwPTB4MDEsIFNESTE9MHgwMiwgLi4uIFNETzM9MHg4MCAqLwogCQlhenhfZGV2LT5zZF9pbnRfc3RhX21hc2sgPSAxIDw8IGk7Ci0JCS8qIHN0cmVhbSB0YWc6IG11c3QgYmUgbm9uLXplcm8gYW5kIHVuaXF1ZSAqLwogCQlhenhfZGV2LT5pbmRleCA9IGk7Ci0JCWF6eF9kZXYtPnN0cmVhbV90YWcgPSBpICsgMTsKKworCQkvKiBzdHJlYW0gdGFnIG11c3QgYmUgdW5pcXVlIHRocm91Z2hvdXQKKwkJICogdGhlIHN0cmVhbSBkaXJlY3Rpb24gZ3JvdXAsCisJCSAqIHZhbGlkIHZhbHVlcyAxLi4uMTUKKwkJICogdXNlIHNlcGFyYXRlIHN0cmVhbSB0YWcgaWYgdGhlIGZsYWcKKwkJICogQVpYX0RDQVBTX1NFUEFSQVRFX1NUUkVBTV9UQUcgaXMgdXNlZAorCQkgKi8KKwkJaWYgKGNoaXAtPmRyaXZlcl9jYXBzICYgQVpYX0RDQVBTX1NFUEFSQVRFX1NUUkVBTV9UQUcpCisJCQlhenhfZGV2LT5zdHJlYW1fdGFnID0KKwkJCQlpc19pbnB1dF9zdHJlYW0oY2hpcCwgaSkgPworCQkJCSsraW5fc3RyZWFtX3RhZyA6CisJCQkJKytvdXRfc3RyZWFtX3RhZzsKKwkJZWxzZQorCQkJYXp4X2Rldi0+c3RyZWFtX3RhZyA9IGkgKyAxOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggMmJmMGI1Ni4uZDQyNmEwYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0yOTksNiArMjk5LDkgQEAKIAkgQVpYX0RDQVBTX1BNX1JVTlRJTUUgfCBBWlhfRENBUFNfSTkxNV9QT1dFUldFTEwgfFwKIAkgQVpYX0RDQVBTX1NOT09QX1RZUEUoU0NIKSkKIAorI2RlZmluZSBBWlhfRENBUFNfSU5URUxfU0tZTEFLRSBcCisJKEFaWF9EQ0FQU19JTlRFTF9QQ0ggfCBBWlhfRENBUFNfU0VQQVJBVEVfU1RSRUFNX1RBRykKKwogLyogcXVpcmtzIGZvciBBVEkgU0IgLyBBTUQgSHVkc29uICovCiAjZGVmaW5lIEFaWF9EQ0FQU19QUkVTRVRfQVRJX1NCIFwKIAkoQVpYX0RDQVBTX05PX1RDU0VMIHwgQVpYX0RDQVBTX1NZTkNfV1JJVEUgfCBBWlhfRENBUFNfUE9TRklYX0xQSUIgfFwKQEAgLTIwMjcsNyArMjAzMCw3IEBACiAJICAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1BDSCB8IEFaWF9EQ0FQU19JTlRFTF9QQ0ggfSwKIAkvKiBTdW5yaXNlIFBvaW50LUxQICovCiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHg5ZDcwKSwKLQkgIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfUENIIHwgQVpYX0RDQVBTX0lOVEVMX1BDSCB9LAorCSAgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9QQ0ggfCBBWlhfRENBUFNfSU5URUxfU0tZTEFLRSB9LAogCS8qIEhhc3dlbGwgKi8KIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDBhMGMpLAogCSAgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9IRE1JIHwgQVpYX0RDQVBTX0lOVEVMX0hBU1dFTEwgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX3ByaXYuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX3ByaXYuaAppbmRleCBhYTQ4NGZkLi4xNjZlM2U4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9wcml2LmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfcHJpdi5oCkBAIC0xNzEsNiArMTcxLDcgQEAKICNkZWZpbmUgQVpYX0RDQVBTX0k5MTVfUE9XRVJXRUxMICgxIDw8IDI3KQkvKiBIU1cgaTkxNSBwb3dlcndlbGwgc3VwcG9ydCAqLwogI2RlZmluZSBBWlhfRENBUFNfQ09SQlJQX1NFTEZfQ0xFQVIgKDEgPDwgMjgpCS8qIENPUkJSUCBjbGVhcnMgaXRzZWxmIGFmdGVyIHJlc2V0ICovCiAjZGVmaW5lIEFaWF9EQ0FQU19OT19NU0k2NCAgICAgICgxIDw8IDI5KQkvKiBTdGljayB0byAzMi1iaXQgTVNJcyAqLworI2RlZmluZSBBWlhfRENBUFNfU0VQQVJBVEVfU1RSRUFNX1RBRwkoMSA8PCAzMCkgLyogY2FwdHVyZSBhbmQgcGxheWJhY2sgdXNlIHNlcGFyYXRlIHN0cmVhbSB0YWcgKi8KIAogZW51bSB7CiAJQVpYX1NOT09QX1RZUEVfTk9ORSAsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCmluZGV4IDVmMTNkMmQuLmI0MjJlNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCkBAIC0zMzUzLDYgKzMzNTMsNyBAQAogeyAuaWQgPSAweDEwZGUwMDY3LCAubmFtZSA9ICJNQ1A2NyBIRE1JIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzJjaCB9LAogeyAuaWQgPSAweDEwZGUwMDcwLCAubmFtZSA9ICJHUFUgNzAgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaSB9LAogeyAuaWQgPSAweDEwZGUwMDcxLCAubmFtZSA9ICJHUFUgNzEgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaSB9LAoreyAuaWQgPSAweDEwZGUwMDcyLCAubmFtZSA9ICJHUFUgNzIgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaSB9LAogeyAuaWQgPSAweDEwZGU4MDAxLCAubmFtZSA9ICJNQ1A3MyBIRE1JIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzJjaCB9LAogeyAuaWQgPSAweDExMDY5ZjgwLCAubmFtZSA9ICJWWDkwMCBIRE1JL0RQIiwJLnBhdGNoID0gcGF0Y2hfdmlhX2hkbWkgfSwKIHsgLmlkID0gMHgxMTA2OWY4MSwgLm5hbWUgPSAiVlg5MDAgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX3ZpYV9oZG1pIH0sCkBAIC0zNDEzLDYgKzM0MTQsNyBAQAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDY3Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwNzAiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDA3MSIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDcyIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTgwMDEiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMTA2OWY4MCIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjExMDY5ZjgxIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggNGY2NDEzZS4uNjA1ZDE0MDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTU2OCw5ICs1NjgsOSBAQAogCQkJc3BlYy0+Z3Bpb19tYXNrOwogCX0KIAlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZ3Bpb19kaXIiLCAmc3BlYy0+Z3Bpb19kaXIpKQotCQlzcGVjLT5ncGlvX21hc2sgJj0gc3BlYy0+Z3Bpb19tYXNrOwotCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2RhdGEiLCAmc3BlYy0+Z3Bpb19kYXRhKSkKIAkJc3BlYy0+Z3Bpb19kaXIgJj0gc3BlYy0+Z3Bpb19tYXNrOworCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2RhdGEiLCAmc3BlYy0+Z3Bpb19kYXRhKSkKKwkJc3BlYy0+Z3Bpb19kYXRhICY9IHNwZWMtPmdwaW9fbWFzazsKIAlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZWFwZF9tYXNrIiwgJnNwZWMtPmVhcGRfbWFzaykpCiAJCXNwZWMtPmVhcGRfbWFzayAmPSBzcGVjLT5ncGlvX21hc2s7CiAJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fbXV0ZSIsICZzcGVjLT5ncGlvX211dGUpKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2FkaS9heGktaTJzLmMgYi9zb3VuZC9zb2MvYWRpL2F4aS1pMnMuYwppbmRleCA3NzUyODYwLi40YzIzMzgxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYWRpL2F4aS1pMnMuYworKysgYi9zb3VuZC9zb2MvYWRpL2F4aS1pMnMuYwpAQCAtMjQwLDYgKzI0MCw4IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfY2xrX2Rpc2FibGU7CiAKKwlyZXR1cm4gMDsKKwogZXJyX2Nsa19kaXNhYmxlOgogCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMnMtPmNsayk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC5jIGIvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LmMKaW5kZXggZTVmMmZiOC4uMzBjNjczYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LmMKQEAgLTE4OCw4ICsxODgsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY201MTJ4X2RzcF9wcm9ncmFtX3RleHRzW10gPSB7CiAJIkZJUiBpbnRlcnBvbGF0aW9uIHdpdGggZGUtZW1waGFzaXMiLAogCSJMb3cgbGF0ZW5jeSBJSVIgd2l0aCBkZS1lbXBoYXNpcyIsCi0JIkZpeGVkIHByb2Nlc3MgZmxvdyIsCiAJIkhpZ2ggYXR0ZW51YXRpb24gd2l0aCBkZS1lbXBoYXNpcyIsCisJIkZpeGVkIHByb2Nlc3MgZmxvdyIsCiAJIlJpbmdpbmctbGVzcyBsb3cgbGF0ZW5jeSBGSVIiLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDI4Ni5jIGIvc291bmQvc29jL2NvZGVjcy9ydDI4Ni5jCmluZGV4IDJjZDRmZTQuLjFkMWM3ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQyODYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3J0Mjg2LmMKQEAgLTg2MSwxMCArODYxLDggQEAKIAkJUlQyODZfSTJTX0NUUkwxLCAweDAwMTgsIGRfbGVuX2NvZGUgPDwgMyk7CiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiZm9ybWF0IHZhbCA9IDB4JXhcbiIsIHZhbCk7CiAKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQyODZfREFDX0ZPUk1BVCwgMHg0MDdmLCB2YWwpOwotCWVsc2UKLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQyODZfQURDX0ZPUk1BVCwgMHg0MDdmLCB2YWwpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUMjg2X0RBQ19GT1JNQVQsIDB4NDA3ZiwgdmFsKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDI4Nl9BRENfRk9STUFULCAweDQwN2YsIHZhbCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1Njc3LmMgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY3Ny5jCmluZGV4IDgxZmUxNDYuLjkxOGFkYTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1Njc3LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NzcuYwpAQCAtNzg0LDggKzc4NCw4IEBACiBzdGF0aWMgaW50IHJ0NTY3N19kc3BfdmFkX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHJ0NTY3N19wcml2ICpydDU2NzcgPSBzbmRfc29jX2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOwogCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBydDU2NzctPmRzcF92YWRfZW47CiAKQEAgLTc5NSw4ICs3OTUsOSBAQAogc3RhdGljIGludCBydDU2NzdfZHNwX3ZhZF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgcnQ1Njc3X3ByaXYgKnJ0NTY3NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2NvbXBvbmVudF90b19jb2RlYyhjb21wb25lbnQpOwogCiAJcnQ1Njc3LT5kc3BfdmFkX2VuID0gISF1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKIApAQCAtMjA4MiwxMCArMjA4MywxNCBAQAogCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY3Ny0+cmVnbWFwLCBSVDU2NzdfUExMMV9DVFJMMiwgMHgyLCAweDIpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgogCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1Njc3LT5yZWdtYXAsIFJUNTY3N19QTEwxX0NUUkwyLCAweDIsIDB4MCk7CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjEwMCwxMCArMjEwNSwxNCBAQAogCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY3Ny0+cmVnbWFwLCBSVDU2NzdfUExMMl9DVFJMMiwgMHgyLCAweDIpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgogCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1Njc3LT5yZWdtYXAsIFJUNTY3N19QTEwyX0NUUkwyLCAweDIsIDB4MCk7CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjIxMSw5ICsyMjIwLDExIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBydDU2NzdfZGFwbV93aWRnZXRzW10gPSB7CiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiUExMMSIsIFJUNTY3N19QV1JfQU5MRzIsIFJUNTY3N19QV1JfUExMMV9CSVQsCi0JCTAsIHJ0NTY3N19zZXRfcGxsMV9ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKwkJMCwgcnQ1Njc3X3NldF9wbGwxX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCVNORF9TT0NfREFQTV9QT1NUX1BNVSksCiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiUExMMiIsIFJUNTY3N19QV1JfQU5MRzIsIFJUNTY3N19QV1JfUExMMl9CSVQsCi0JCTAsIHJ0NTY3N19zZXRfcGxsMl9ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKwkJMCwgcnQ1Njc3X3NldF9wbGwyX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCVNORF9TT0NfREFQTV9QT1NUX1BNVSksCiAKIAkvKiBJbnB1dCBTaWRlICovCiAJLyogbWljYmlhcyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90czNhMjI3ZS5jIGIvc291bmQvc29jL2NvZGVjcy90czNhMjI3ZS5jCmluZGV4IDFkMTIwNTcuLjlmMmRjZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHMzYTIyN2UuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RzM2EyMjdlLmMKQEAgLTI1NCw2ICsyNTQsNyBAQAogCXN0cnVjdCB0czNhMjI3ZSAqdHMzYTIyN2U7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmkyYy0+ZGV2OwogCWludCByZXQ7CisJdW5zaWduZWQgaW50IGFjY19yZWc7CiAKIAl0czNhMjI3ZSA9IGRldm1fa3phbGxvYygmaTJjLT5kZXYsIHNpemVvZigqdHMzYTIyN2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAodHMzYTIyN2UgPT0gTlVMTCkKQEAgLTI4Myw2ICsyODQsMTEgQEAKIAkJCSAgIElOVEJfRElTQUJMRSB8IEFEQ19DT01QTEVURV9JTlRfRElTQUJMRSwKIAkJCSAgIEFEQ19DT01QTEVURV9JTlRfRElTQUJMRSk7CiAKKwkvKiBSZWFkIGphY2sgc3RhdHVzIGJlY2F1c2UgY2hpcCBtaWdodCBub3QgdHJpZ2dlciBpbnRlcnJ1cHQgYXQgYm9vdC4gKi8KKwlyZWdtYXBfcmVhZCh0czNhMjI3ZS0+cmVnbWFwLCBUUzNBMjI3RV9SRUdfQUNDRVNTT1JZX1NUQVRVUywgJmFjY19yZWcpOworCXRzM2EyMjdlX25ld19qYWNrX3N0YXRlKHRzM2EyMjdlLCBhY2NfcmVnKTsKKwl0czNhMjI3ZV9qYWNrX3JlcG9ydCh0czNhMjI3ZSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKaW5kZXggNGQyZDJiMS4uNzViODdjNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCkBAIC0xMDc2LDEwICsxMDc2LDEzIEBACiAJeyAiUmlnaHQgQ2FwdHVyZSBQR0EiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBNdXgiIH0sCiAJeyAiUmlnaHQgQ2FwdHVyZSBQR0EiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiB9LAogCi0JeyAiQUlGT1VUTCIsICJMZWZ0IiwgICJBRENMIiB9LAotCXsgIkFJRk9VVEwiLCAiUmlnaHQiLCAiQURDUiIgfSwKLQl7ICJBSUZPVVRSIiwgIkxlZnQiLCAgIkFEQ0wiIH0sCi0JeyAiQUlGT1VUUiIsICJSaWdodCIsICJBRENSIiB9LAorCXsgIkFJRk9VVEwgTXV4IiwgIkxlZnQiLCAiQURDTCIgfSwKKwl7ICJBSUZPVVRMIE11eCIsICJSaWdodCIsICJBRENSIiB9LAorCXsgIkFJRk9VVFIgTXV4IiwgIkxlZnQiLCAiQURDTCIgfSwKKwl7ICJBSUZPVVRSIE11eCIsICJSaWdodCIsICJBRENSIiB9LAorCisJeyAiQUlGT1VUTCIsIE5VTEwsICJBSUZPVVRMIE11eCIgfSwKKwl7ICJBSUZPVVRSIiwgTlVMTCwgIkFJRk9VVFIgTXV4IiB9LAogCiAJeyAiQURDTCIsIE5VTEwsICJDTEtfRFNQIiB9LAogCXsgIkFEQ0wiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIFBHQSIgfSwKQEAgLTEwODksMTIgKzEwOTIsMTYgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGRhY19pbnRlcmNvbltdID0gewotCXsgIkRBQ0wiLCAiUmlnaHQiLCAiQUlGSU5SIiB9LAotCXsgIkRBQ0wiLCAiTGVmdCIsICAiQUlGSU5MIiB9LAorCXsgIkRBQ0wgTXV4IiwgIkxlZnQiLCAiQUlGSU5MIiB9LAorCXsgIkRBQ0wgTXV4IiwgIlJpZ2h0IiwgIkFJRklOUiIgfSwKKworCXsgIkRBQ1IgTXV4IiwgIkxlZnQiLCAiQUlGSU5MIiB9LAorCXsgIkRBQ1IgTXV4IiwgIlJpZ2h0IiwgIkFJRklOUiIgfSwKKworCXsgIkRBQ0wiLCBOVUxMLCAiREFDTCBNdXgiIH0sCiAJeyAiREFDTCIsIE5VTEwsICJDTEtfRFNQIiB9LAogCi0JeyAiREFDUiIsICJSaWdodCIsICJBSUZJTlIiIH0sCi0JeyAiREFDUiIsICJMZWZ0IiwgICJBSUZJTkwiIH0sCisJeyAiREFDUiIsIE5VTEwsICJEQUNSIE11eCIgfSwKIAl7ICJEQUNSIiwgTlVMTCwgIkNMS19EU1AiIH0sCiAKIAl7ICJDaGFyZ2UgcHVtcCIsIE5VTEwsICJTWVNDTEsiIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYwppbmRleCAwMzFhMWFlLi5hOTZlYjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYwLmMKQEAgLTU1Niw3ICs1NTYsNyBAQAogCXsgMjIwNTAsIDIgfSwKIAl7IDI0MDAwLCAyIH0sCiAJeyAxNjAwMCwgMyB9LAotCXsgMTEyNTAsIDQgfSwKKwl7IDExMDI1LCA0IH0sCiAJeyAxMjAwMCwgNCB9LAogCXsgIDgwMDAsIDUgfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZHdjL2Rlc2lnbndhcmVfaTJzLmMgYi9zb3VuZC9zb2MvZHdjL2Rlc2lnbndhcmVfaTJzLmMKaW5kZXggYjkzMTY4ZC4uOGQxOGJiZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2R3Yy9kZXNpZ253YXJlX2kycy5jCisrKyBiL3NvdW5kL3NvYy9kd2MvZGVzaWdud2FyZV9pMnMuYwpAQCAtMjA5LDE2ICsyMDksOSBAQAogCiAJc3dpdGNoIChjb25maWctPmNoYW5fbnIpIHsKIAljYXNlIEVJR0hUX0NIQU5ORUxfU1VQUE9SVDoKLQkJY2hfcmVnID0gMzsKLQkJYnJlYWs7CiAJY2FzZSBTSVhfQ0hBTk5FTF9TVVBQT1JUOgotCQljaF9yZWcgPSAyOwotCQlicmVhazsKIAljYXNlIEZPVVJfQ0hBTk5FTF9TVVBQT1JUOgotCQljaF9yZWcgPSAxOwotCQlicmVhazsKIAljYXNlIFRXT19DSEFOTkVMX1NVUFBPUlQ6Ci0JCWNoX3JlZyA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoZGV2LT5kZXYsICJjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOwpAQCAtMjI3LDE4ICsyMjAsMjIgQEAKIAogCWkyc19kaXNhYmxlX2NoYW5uZWxzKGRldiwgc3Vic3RyZWFtLT5zdHJlYW0pOwogCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBUQ1IoY2hfcmVnKSwgeGZlcl9yZXNvbHV0aW9uKTsKLQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBURkNSKGNoX3JlZyksIDB4MDIpOwotCQlpcnEgPSBpMnNfcmVhZF9yZWcoZGV2LT5pMnNfYmFzZSwgSU1SKGNoX3JlZykpOwotCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIElNUihjaF9yZWcpLCBpcnEgJiB+MHgzMCk7Ci0JCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgVEVSKGNoX3JlZyksIDEpOwotCX0gZWxzZSB7Ci0JCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgUkNSKGNoX3JlZyksIHhmZXJfcmVzb2x1dGlvbik7Ci0JCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgUkZDUihjaF9yZWcpLCAweDA3KTsKLQkJaXJxID0gaTJzX3JlYWRfcmVnKGRldi0+aTJzX2Jhc2UsIElNUihjaF9yZWcpKTsKLQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBJTVIoY2hfcmVnKSwgaXJxICYgfjB4MDMpOwotCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFJFUihjaF9yZWcpLCAxKTsKKwlmb3IgKGNoX3JlZyA9IDA7IGNoX3JlZyA8IChjb25maWctPmNoYW5fbnIgLyAyKTsgY2hfcmVnKyspIHsKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgVENSKGNoX3JlZyksCisJCQkJICAgICAgeGZlcl9yZXNvbHV0aW9uKTsKKwkJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgVEZDUihjaF9yZWcpLCAweDAyKTsKKwkJCWlycSA9IGkyc19yZWFkX3JlZyhkZXYtPmkyc19iYXNlLCBJTVIoY2hfcmVnKSk7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIElNUihjaF9yZWcpLCBpcnEgJiB+MHgzMCk7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFRFUihjaF9yZWcpLCAxKTsKKwkJfSBlbHNlIHsKKwkJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgUkNSKGNoX3JlZyksCisJCQkJICAgICAgeGZlcl9yZXNvbHV0aW9uKTsKKwkJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgUkZDUihjaF9yZWcpLCAweDA3KTsKKwkJCWlycSA9IGkyc19yZWFkX3JlZyhkZXYtPmkyc19iYXNlLCBJTVIoY2hfcmVnKSk7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIElNUihjaF9yZWcpLCBpcnEgJiB+MHgwMyk7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFJFUihjaF9yZWcpLCAxKTsKKwkJfQogCX0KIAogCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgQ0NSLCBjY3IpOwpAQCAtMjYzLDYgKzI2MCwxOSBAQAogCXNuZF9zb2NfZGFpX3NldF9kbWFfZGF0YShkYWksIHN1YnN0cmVhbSwgTlVMTCk7CiB9CiAKK3N0YXRpYyBpbnQgZHdfaTJzX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBkd19pMnNfZGV2ICpkZXYgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgVFhGRlIsIDEpOworCWVsc2UKKwkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBSWEZGUiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkd19pMnNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJaW50IGNtZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CkBAIC0yOTQsNiArMzA0LDcgQEAKIAkuc3RhcnR1cAk9IGR3X2kyc19zdGFydHVwLAogCS5zaHV0ZG93bgk9IGR3X2kyc19zaHV0ZG93biwKIAkuaHdfcGFyYW1zCT0gZHdfaTJzX2h3X3BhcmFtcywKKwkucHJlcGFyZQk9IGR3X2kyc19wcmVwYXJlLAogCS50cmlnZ2VyCT0gZHdfaTJzX3RyaWdnZXIsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9lc2FpLmggYi9zb3VuZC9zb2MvZnNsL2ZzbF9lc2FpLmgKaW5kZXggOTFhNTUwZi4uNWU3OTNiYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfZXNhaS5oCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX2VzYWkuaApAQCAtMzAyLDcgKzMwMiw3IEBACiAjZGVmaW5lIEVTQUlfeENDUl94RlBfTUFTSwkoKCgxIDw8IEVTQUlfeENDUl94RlBfV0lEVEgpIC0gMSkgPDwgRVNBSV94Q0NSX3hGUF9TSElGVCkKICNkZWZpbmUgRVNBSV94Q0NSX3hGUCh2KQkoKCgodikgLSAxKSA8PCBFU0FJX3hDQ1JfeEZQX1NISUZUKSAmIEVTQUlfeENDUl94RlBfTUFTSykKICNkZWZpbmUgRVNBSV94Q0NSX3hEQ19TSElGVCAgICAgOQotI2RlZmluZSBFU0FJX3hDQ1JfeERDX1dJRFRICTQKKyNkZWZpbmUgRVNBSV94Q0NSX3hEQ19XSURUSAk1CiAjZGVmaW5lIEVTQUlfeENDUl94RENfTUFTSwkoKCgxIDw8IEVTQUlfeENDUl94RENfV0lEVEgpIC0gMSkgPDwgRVNBSV94Q0NSX3hEQ19TSElGVCkKICNkZWZpbmUgRVNBSV94Q0NSX3hEQyh2KQkoKCgodikgLSAxKSA8PCBFU0FJX3hDQ1JfeERDX1NISUZUKSAmIEVTQUlfeENDUl94RENfTUFTSykKICNkZWZpbmUgRVNBSV94Q0NSX3hQU1JfU0hJRlQJOApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMgYi9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuYwppbmRleCBhNjVmMTdkLi4wNTk0OTZlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuYwpAQCAtMTM2Miw5ICsxMzYyLDkgQEAKIAl9CiAKIAlzc2lfcHJpdmF0ZS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIXNzaV9wcml2YXRlLT5pcnEpIHsKKwlpZiAoc3NpX3ByaXZhdGUtPmlycSA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBub2RlICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0dXJuIHNzaV9wcml2YXRlLT5pcnE7CiAJfQogCiAJLyogQXJlIHRoZSBSWCBhbmQgdGhlIFRYIGNsb2NrcyBsb2NrZWQ/ICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2lteC13bTg5NjIuYyBiL3NvdW5kL3NvYy9mc2wvaW14LXdtODk2Mi5jCmluZGV4IDRjYWFjYjAuLmNkMTQ2ZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvaW14LXdtODk2Mi5jCisrKyBiL3NvdW5kL3NvYy9mc2wvaW14LXdtODk2Mi5jCkBAIC0yNTcsNiArMjU3LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGNsa19mYWlsOwogCWRhdGEtPmNhcmQubnVtX2xpbmtzID0gMTsKKwlkYXRhLT5jYXJkLm93bmVyID0gVEhJU19NT0RVTEU7CiAJZGF0YS0+Y2FyZC5kYWlfbGluayA9ICZkYXRhLT5kYWk7CiAJZGF0YS0+Y2FyZC5kYXBtX3dpZGdldHMgPSBpbXhfd204OTYyX2RhcG1fd2lkZ2V0czsKIAlkYXRhLT5jYXJkLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKGlteF93bTg5NjJfZGFwbV93aWRnZXRzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9nZW5lcmljL3NpbXBsZS1jYXJkLmMgYi9zb3VuZC9zb2MvZ2VuZXJpYy9zaW1wbGUtY2FyZC5jCmluZGV4IGZiOTI0MGYuLjdmZTMwMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9nZW5lcmljL3NpbXBsZS1jYXJkLmMKKysrIGIvc291bmQvc29jL2dlbmVyaWMvc2ltcGxlLWNhcmQuYwpAQCAtNDUyLDkgKzQ1Miw4IEBACiB9CiAKIC8qIERlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGRldmljZSBub2RlcyAqLwotc3RhdGljIGludCBhc29jX3NpbXBsZV9jYXJkX3VucmVmKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGFzb2Nfc2ltcGxlX2NhcmRfdW5yZWYoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rOwogCWludCBudW1fbGlua3M7CiAKQEAgLTU1Niw3ICs1NTUsNyBAQAogCQlyZXR1cm4gcmV0OwogCiBlcnI6Ci0JYXNvY19zaW1wbGVfY2FyZF91bnJlZihwZGV2KTsKKwlhc29jX3NpbXBsZV9jYXJkX3VucmVmKCZwcml2LT5zbmRfY2FyZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTcyLDcgKzU3MSw3IEBACiAJCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKCZzaW1wbGVfY2FyZF9taWNfamFjaywgMSwKIAkJCQkJJnNpbXBsZV9jYXJkX21pY19qYWNrX2dwaW8pOwogCi0JcmV0dXJuIGFzb2Nfc2ltcGxlX2NhcmRfdW5yZWYocGRldik7CisJcmV0dXJuIGFzb2Nfc2ltcGxlX2NhcmRfdW5yZWYoY2FyZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFzb2Nfc2ltcGxlX29mX21hdGNoW10gPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvS2NvbmZpZyBiL3NvdW5kL3NvYy9pbnRlbC9LY29uZmlnCmluZGV4IGU5ODllY2YuLmY4NmRlMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9LY29uZmlnCkBAIC04OSw3ICs4OSw3IEBACiAKIGNvbmZpZyBTTkRfU09DX0lOVEVMX0JZVENSX1JUNTY0MF9NQUNICiAJdHJpc3RhdGUgIkFTb0MgQXVkaW8gRFNQIFN1cHBvcnQgZm9yIE1JRCBCWVQgUGxhdGZvcm0iCi0JZGVwZW5kcyBvbiBYODYKKwlkZXBlbmRzIG9uIFg4NiAmJiBJMkMKIAlzZWxlY3QgU05EX1NPQ19SVDU2NDAKIAlzZWxlY3QgU05EX1NTVF9NRkxEX1BMQVRGT1JNCiAJc2VsZWN0IFNORF9TU1RfSVBDX0FDUEkKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiBjb25maWcgU05EX1NPQ19JTlRFTF9DSFRfQlNXX1JUNTY3Ml9NQUNICiAgICAgICAgIHRyaXN0YXRlICJBU29DIEF1ZGlvIGRyaXZlciBmb3IgSW50ZWwgQ2hlcnJ5dHJhaWwgJiBCcmFzd2VsbCB3aXRoIFJUNTY3MiBjb2RlYyIKLSAgICAgICAgZGVwZW5kcyBvbiBYODZfSU5URUxfTFBTUworICAgICAgICBkZXBlbmRzIG9uIFg4Nl9JTlRFTF9MUFNTICYmIEkyQwogICAgICAgICBzZWxlY3QgU05EX1NPQ19SVDU2NzAKICAgICAgICAgc2VsZWN0IFNORF9TU1RfTUZMRF9QTEFURk9STQogICAgICAgICBzZWxlY3QgU05EX1NTVF9JUENfQUNQSQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL2J5dGNyX2RwY21fcnQ1NjQwLmMgYi9zb3VuZC9zb2MvaW50ZWwvYnl0Y3JfZHBjbV9ydDU2NDAuYwppbmRleCBmNWQwZmMxLi5lZWYwYzU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYnl0Y3JfZHBjbV9ydDU2NDAuYworKysgYi9zb3VuZC9zb2MvaW50ZWwvYnl0Y3JfZHBjbV9ydDU2NDAuYwpAQCAtMjI3LDQgKzIyNyw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgSW50ZWwoUikgQmF5dHJhaWwgQ1IgTWFjaGluZSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlN1YmhyYW5zdSBTLiBQcnVzdHkgPHN1YmhyYW5zdS5zLnBydXN0eUBpbnRlbC5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOmJ5dHJ0NTY0MC1hdWRpbyIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpieXR0MTAwX3J0NTY0MCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL3NzdC1maXJtd2FyZS5jIGIvc291bmQvc29jL2ludGVsL3NzdC1maXJtd2FyZS5jCmluZGV4IDRhNWJkZTkuLmIzZjk0ODkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9zc3QtZmlybXdhcmUuYworKysgYi9zb3VuZC9zb2MvaW50ZWwvc3N0LWZpcm13YXJlLmMKQEAgLTcwNiw2ICs3MDYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmJsb2NrX2xpc3QpCiB7CiAJc3RydWN0IHNzdF9tZW1fYmxvY2sgKmJsb2NrLCAqdG1wOworCXN0cnVjdCBzc3RfYmxvY2tfYWxsb2NhdG9yIGJhX3RtcCA9ICpiYTsKIAl1MzIgZW5kID0gYmEtPm9mZnNldCArIGJhLT5zaXplLCBibG9ja19lbmQ7CiAJaW50IGVycjsKIApAQCAtNzMwLDkgKzczMSw5IEBACiAJCWlmIChiYS0+b2Zmc2V0ID49IGJsb2NrLT5vZmZzZXQgJiYgYmEtPm9mZnNldCA8IGJsb2NrX2VuZCkgewogCiAJCQkvKiBhbGlnbiBiYSB0byBibG9jayBib3VuZGFyeSAqLwotCQkJYmEtPnNpemUgLT0gYmxvY2tfZW5kIC0gYmEtPm9mZnNldDsKLQkJCWJhLT5vZmZzZXQgPSBibG9ja19lbmQ7Ci0JCQllcnIgPSBibG9ja19hbGxvY19jb250aWd1b3VzKGRzcCwgYmEsIGJsb2NrX2xpc3QpOworCQkJYmFfdG1wLnNpemUgLT0gYmxvY2tfZW5kIC0gYmEtPm9mZnNldDsKKwkJCWJhX3RtcC5vZmZzZXQgPSBibG9ja19lbmQ7CisJCQllcnIgPSBibG9ja19hbGxvY19jb250aWd1b3VzKGRzcCwgJmJhX3RtcCwgYmxvY2tfbGlzdCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzYzLDEwICs3NjQsMTQgQEAKIAkJLyogZG9lcyBibG9jayBzcGFuIG1vcmUgdGhhbiAxIHNlY3Rpb24gKi8KIAkJaWYgKGJhLT5vZmZzZXQgPj0gYmxvY2stPm9mZnNldCAmJiBiYS0+b2Zmc2V0IDwgYmxvY2tfZW5kKSB7CiAKKwkJCS8qIGFkZCBibG9jayAqLworCQkJbGlzdF9tb3ZlKCZibG9jay0+bGlzdCwgJmRzcC0+dXNlZF9ibG9ja19saXN0KTsKKwkJCWxpc3RfYWRkKCZibG9jay0+bW9kdWxlX2xpc3QsIGJsb2NrX2xpc3QpOwogCQkJLyogYWxpZ24gYmEgdG8gYmxvY2sgYm91bmRhcnkgKi8KLQkJCWJhLT5vZmZzZXQgPSBibG9jay0+b2Zmc2V0OworCQkJYmFfdG1wLnNpemUgLT0gYmxvY2tfZW5kIC0gYmEtPm9mZnNldDsKKwkJCWJhX3RtcC5vZmZzZXQgPSBibG9ja19lbmQ7CiAKLQkJCWVyciA9IGJsb2NrX2FsbG9jX2NvbnRpZ3VvdXMoZHNwLCBiYSwgYmxvY2tfbGlzdCk7CisJCQllcnIgPSBibG9ja19hbGxvY19jb250aWd1b3VzKGRzcCwgJmJhX3RtcCwgYmxvY2tfbGlzdCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL3NzdC1oYXN3ZWxsLWlwYy5jIGIvc291bmQvc29jL2ludGVsL3NzdC1oYXN3ZWxsLWlwYy5jCmluZGV4IDNmOGM0ODIuLjViZjE0MDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9zc3QtaGFzd2VsbC1pcGMuYworKysgYi9zb3VuZC9zb2MvaW50ZWwvc3N0LWhhc3dlbGwtaXBjLmMKQEAgLTEyMjgsNiArMTIyOCwxMSBAQAogCXN0cnVjdCBzc3RfZHNwICpzc3QgPSBoc3ctPmRzcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCFzdHJlYW0pIHsKKwkJZGV2X3dhcm4oaHN3LT5kZXYsICJ3YXJuaW5nOiBzdHJlYW0gaXMgTlVMTCwgbm8gc3RyZWFtIHRvIGZyZWUsIGlnbm9yZSBpdC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBkb250IGZyZWUgRFNQIHN0cmVhbXMgdGhhdCBhcmUgbm90IGNvbW1pdGVkICovCiAJaWYgKCFzdHJlYW0tPmNvbW1pdGVkKQogCQlnb3RvIG91dDsKQEAgLTE0MTUsNiArMTQyMCwxNiBAQAogCXUzMiBoZWFkZXI7CiAJaW50IHJldDsKIAorCWlmICghc3RyZWFtKSB7CisJCWRldl93YXJuKGhzdy0+ZGV2LCAid2FybmluZzogc3RyZWFtIGlzIE5VTEwsIG5vIHN0cmVhbSB0byBjb21taXQsIGlnbm9yZSBpdC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyZWFtLT5jb21taXRlZCkgeworCQlkZXZfd2Fybihoc3ctPmRldiwgIndhcm5pbmc6IHN0cmVhbSBpcyBhbHJlYWR5IGNvbW1pdHRlZCwgaWdub3JlIGl0LlxuIik7CisJCXJldHVybiAwOworCX0KKwogCXRyYWNlX2lwY19yZXF1ZXN0KCJzdHJlYW0gYWxsb2MiLCBzdHJlYW0tPmhvc3RfaWQpOwogCiAJaGVhZGVyID0gSVBDX0dMQl9UWVBFKElQQ19HTEJfQUxMT0NBVEVfU1RSRUFNKTsKQEAgLTE1MTksNiArMTUzNCwxMSBAQAogewogCWludCByZXQ7CiAKKwlpZiAoIXN0cmVhbSkgeworCQlkZXZfd2Fybihoc3ctPmRldiwgIndhcm5pbmc6IHN0cmVhbSBpcyBOVUxMLCBubyBzdHJlYW0gdG8gcGF1c2UsIGlnbm9yZSBpdC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAl0cmFjZV9pcGNfcmVxdWVzdCgic3RyZWFtIHBhdXNlIiwgc3RyZWFtLT5yZXBseS5zdHJlYW1faHdfaWQpOwogCiAJcmV0ID0gc3N0X2hzd19zdHJlYW1fb3BlcmF0aW9ucyhoc3csIElQQ19TVFJfUEFVU0UsCkBAIC0xNTM1LDYgKzE1NTUsMTEgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKCFzdHJlYW0pIHsKKwkJZGV2X3dhcm4oaHN3LT5kZXYsICJ3YXJuaW5nOiBzdHJlYW0gaXMgTlVMTCwgbm8gc3RyZWFtIHRvIHJlc3VtZSwgaWdub3JlIGl0LlxuIik7CisJCXJldHVybiAwOworCX0KKwogCXRyYWNlX2lwY19yZXF1ZXN0KCJzdHJlYW0gcmVzdW1lIiwgc3RyZWFtLT5yZXBseS5zdHJlYW1faHdfaWQpOwogCiAJcmV0ID0gc3N0X2hzd19zdHJlYW1fb3BlcmF0aW9ucyhoc3csIElQQ19TVFJfUkVTVU1FLApAQCAtMTU1MCw2ICsxNTc1LDExIEBACiB7CiAJaW50IHJldCwgdHJpZXMgPSAxMDsKIAorCWlmICghc3RyZWFtKSB7CisJCWRldl93YXJuKGhzdy0+ZGV2LCAid2FybmluZzogc3RyZWFtIGlzIE5VTEwsIG5vIHN0cmVhbSB0byByZXNldCwgaWdub3JlIGl0LlxuIik7CisJCXJldHVybiAwOworCX0KKwogCS8qIGRvbnQgcmVzZXQgc3RyZWFtcyB0aGF0IGFyZSBub3QgY29tbWl0ZWQgKi8KIAlpZiAoIXN0cmVhbS0+Y29tbWl0ZWQpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL3NzdC9zc3RfYWNwaS5jIGIvc291bmQvc29jL2ludGVsL3NzdC9zc3RfYWNwaS5jCmluZGV4IDNhYmMyOWUuLjJhYzcyZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9zc3Qvc3N0X2FjcGkuYworKysgYi9zb3VuZC9zb2MvaW50ZWwvc3N0L3NzdF9hY3BpLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNzdF9tYWNoaW5lcyBzc3RfYWNwaV9ieXRjcltdID0gewotCXsiMTBFQzU2NDAiLCAiVDEwMCIsICJieXR0MTAwX3J0NTY0MCIsIE5VTEwsICJmd19zc3RfMGYyOC5iaW4iLAorCXsiMTBFQzU2NDAiLCAiVDEwMCIsICJieXR0MTAwX3J0NTY0MCIsIE5VTEwsICJpbnRlbC9md19zc3RfMGYyOC5iaW4iLAogCQkJCQkJJmJ5dF9ydnBfcGxhdGZvcm1fZGF0YSB9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwppbmRleCA4Yjc5Y2FmYS4uYzdlYjlkZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtNDM0LDcgKzQzNCw3IEBACiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgogCQkvKiBNY0JTUCBzbGF2ZS4gRlMgY2xvY2sgYXMgb3V0cHV0ICovCiAJCXJlZ3MtPnNyZ3IyCXw9IEZTR007Ci0JCXJlZ3MtPnBjcjAJfD0gRlNYTTsKKwkJcmVncy0+cGNyMAl8PSBGU1hNIHwgRlNSTTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgogCQkvKiBNY0JTUCBzbGF2ZSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX2kycy5jIGIvc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX2kycy5jCmluZGV4IDI2ZWM1MTEuLmRjYzI2ZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9pMnMuYworKysgYi9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfaTJzLmMKQEAgLTMzNSw2ICszMzUsNyBAQAogCQkJICAgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKSwKIAl9LAogCS5vcHMgPSAmcm9ja2NoaXBfaTJzX2RhaV9vcHMsCisJLnN5bW1ldHJpY19yYXRlcyA9IDEsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciByb2NrY2hpcF9pMnNfY29tcG9uZW50ID0gewpAQCAtNDU0LDExICs0NTUsMTEgQEAKIAogCWkycy0+cGxheWJhY2tfZG1hX2RhdGEuYWRkciA9IHJlcy0+c3RhcnQgKyBJMlNfVFhEUjsKIAlpMnMtPnBsYXliYWNrX2RtYV9kYXRhLmFkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKLQlpMnMtPnBsYXliYWNrX2RtYV9kYXRhLm1heGJ1cnN0ID0gMTY7CisJaTJzLT5wbGF5YmFja19kbWFfZGF0YS5tYXhidXJzdCA9IDQ7CiAKIAlpMnMtPmNhcHR1cmVfZG1hX2RhdGEuYWRkciA9IHJlcy0+c3RhcnQgKyBJMlNfUlhEUjsKIAlpMnMtPmNhcHR1cmVfZG1hX2RhdGEuYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOwotCWkycy0+Y2FwdHVyZV9kbWFfZGF0YS5tYXhidXJzdCA9IDE2OworCWkycy0+Y2FwdHVyZV9kbWFfZGF0YS5tYXhidXJzdCA9IDQ7CiAKIAlpMnMtPmRldiA9ICZwZGV2LT5kZXY7CiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGkycyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfaTJzLmggYi9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfaTJzLmgKaW5kZXggODlhNWQ4Yi4uOTNmNDU2ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX2kycy5oCisrKyBiL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9pMnMuaApAQCAtMTI3LDcgKzEyNyw3IEBACiAjZGVmaW5lIEkyU19ETUFDUl9UREVfRElTQUJMRQkoMCA8PCBJMlNfRE1BQ1JfVERFX1NISUZUKQogI2RlZmluZSBJMlNfRE1BQ1JfVERFX0VOQUJMRQkoMSA8PCBJMlNfRE1BQ1JfVERFX1NISUZUKQogI2RlZmluZSBJMlNfRE1BQ1JfVERMX1NISUZUCTAKLSNkZWZpbmUgSTJTX0RNQUNSX1RETCh4KQkoKHggLSAxKSA8PCBJMlNfRE1BQ1JfVERMX1NISUZUKQorI2RlZmluZSBJMlNfRE1BQ1JfVERMKHgpCSgoeCkgPDwgSTJTX0RNQUNSX1RETF9TSElGVCkKICNkZWZpbmUgSTJTX0RNQUNSX1RETF9NQVNLCSgweDFmIDw8IEkyU19ETUFDUl9URExfU0hJRlQpCiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvbXByZXNzLmMgYi9zb3VuZC9zb2Mvc29jLWNvbXByZXNzLmMKaW5kZXggNTkwYTgyZi4uMDI1YzM4ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb21wcmVzcy5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29tcHJlc3MuYwpAQCAtNjU5LDcgKzY1OSw4IEBACiAJCQlydGQtPmRhaV9saW5rLT5zdHJlYW1fbmFtZSk7CiAKIAkJcmV0ID0gc25kX3BjbV9uZXdfaW50ZXJuYWwocnRkLT5jYXJkLT5zbmRfY2FyZCwgbmV3X25hbWUsIG51bSwKLQkJCQkxLCAwLCAmYmVfcGNtKTsKKwkJCQlydGQtPmRhaV9saW5rLT5kcGNtX3BsYXliYWNrLAorCQkJCXJ0ZC0+ZGFpX2xpbmstPmRwY21fY2FwdHVyZSwgJmJlX3BjbSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKHJ0ZC0+Y2FyZC0+ZGV2LCAiQVNvQzogY2FuJ3QgY3JlYXRlIGNvbXByZXNzZWQgZm9yICVzXG4iLAogCQkJCXJ0ZC0+ZGFpX2xpbmstPm5hbWUpOwpAQCAtNjY4LDggKzY2OSwxMCBAQAogCiAJCXJ0ZC0+cGNtID0gYmVfcGNtOwogCQlydGQtPmZlX2NvbXByID0gMTsKLQkJYmVfcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gcnRkOwotCQliZV9wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW0tPnByaXZhdGVfZGF0YSA9IHJ0ZDsKKwkJaWYgKHJ0ZC0+ZGFpX2xpbmstPmRwY21fcGxheWJhY2spCisJCQliZV9wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtLT5wcml2YXRlX2RhdGEgPSBydGQ7CisJCWVsc2UgaWYgKHJ0ZC0+ZGFpX2xpbmstPmRwY21fY2FwdHVyZSkKKwkJCWJlX3BjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gcnRkOwogCQltZW1jcHkoY29tcHItPm9wcywgJnNvY19jb21wcl9keW5fb3BzLCBzaXplb2Yoc29jX2NvbXByX2R5bl9vcHMpKTsKIAl9IGVsc2UKIAkJbWVtY3B5KGNvbXByLT5vcHMsICZzb2NfY29tcHJfb3BzLCBzaXplb2Yoc29jX2NvbXByX29wcykpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCA5ODUwNTJiLi4yYzYyNjIwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMzIzMCw3ICszMjMwLDcgQEAKIAkJCQkgICBjb25zdCBjaGFyICpwcm9wbmFtZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gY2FyZC0+ZGV2LT5vZl9ub2RlOwotCWludCBudW1fcm91dGVzLCBvbGRfcm91dGVzOworCWludCBudW1fcm91dGVzOwogCXN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgKnJvdXRlczsKIAlpbnQgaSwgcmV0OwogCkBAIC0zMjQ4LDkgKzMyNDgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlvbGRfcm91dGVzID0gY2FyZC0+bnVtX2RhcG1fcm91dGVzOwotCXJvdXRlcyA9IGRldm1fa3phbGxvYyhjYXJkLT5kZXYsCi0JCQkgICAgICAob2xkX3JvdXRlcyArIG51bV9yb3V0ZXMpICogc2l6ZW9mKCpyb3V0ZXMpLAorCXJvdXRlcyA9IGRldm1fa3phbGxvYyhjYXJkLT5kZXYsIG51bV9yb3V0ZXMgKiBzaXplb2YoKnJvdXRlcyksCiAJCQkgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXJvdXRlcykgewogCQlkZXZfZXJyKGNhcmQtPmRldiwKQEAgLTMyNTgsMTEgKzMyNTYsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQltZW1jcHkocm91dGVzLCBjYXJkLT5kYXBtX3JvdXRlcywgb2xkX3JvdXRlcyAqIHNpemVvZigqcm91dGVzKSk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3JvdXRlczsgaSsrKSB7CiAJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLCBwcm9wbmFtZSwKLQkJCTIgKiBpLCAmcm91dGVzW29sZF9yb3V0ZXMgKyBpXS5zaW5rKTsKKwkJCTIgKiBpLCAmcm91dGVzW2ldLnNpbmspOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGNhcmQtPmRldiwKIAkJCQkiQVNvQzogUHJvcGVydHkgJyVzJyBpbmRleCAlZCBjb3VsZCBub3QgYmUgcmVhZDogJWRcbiIsCkBAIC0zMjcwLDcgKzMyNjYsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgobnAsIHByb3BuYW1lLAotCQkJKDIgKiBpKSArIDEsICZyb3V0ZXNbb2xkX3JvdXRlcyArIGldLnNvdXJjZSk7CisJCQkoMiAqIGkpICsgMSwgJnJvdXRlc1tpXS5zb3VyY2UpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGNhcmQtPmRldiwKIAkJCQkiQVNvQzogUHJvcGVydHkgJyVzJyBpbmRleCAlZCBjb3VsZCBub3QgYmUgcmVhZDogJWRcbiIsCkBAIC0zMjc5LDcgKzMyNzUsNyBAQAogCQl9CiAJfQogCi0JY2FyZC0+bnVtX2RhcG1fcm91dGVzICs9IG51bV9yb3V0ZXM7CisJY2FyZC0+bnVtX2RhcG1fcm91dGVzID0gbnVtX3JvdXRlczsKIAljYXJkLT5kYXBtX3JvdXRlcyA9IHJvdXRlczsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwppbmRleCAyNzI4NDQ3Li4zMjdmODY0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYworKysgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwpAQCAtODE2LDcgKzgxNiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjZGV2LT5uX3N0cmVhbXMgPCAyKSB7CisJaWYgKGNkZXYtPm5fc3RyZWFtcyA8IDEpIHsKIAkJZGV2X2VycihkZXYsICJib2d1cyBudW1iZXIgb2Ygc3RyZWFtczogJWRcbiIsIGNkZXYtPm5fc3RyZWFtcyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlci5jIGIvc291bmQvdXNiL21peGVyLmMKaW5kZXggNDE2NTBkNS4uM2UyZWY2MSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21peGVyLmMKKysrIGIvc291bmQvdXNiL21peGVyLmMKQEAgLTkxMyw2ICs5MTMsNyBAQAogCWNhc2UgVVNCX0lEKDB4MDQ2ZCwgMHgwODA3KTogLyogTG9naXRlY2ggV2ViY2FtIEM1MDAgKi8KIAljYXNlIFVTQl9JRCgweDA0NmQsIDB4MDgwOCk6CiAJY2FzZSBVU0JfSUQoMHgwNDZkLCAweDA4MDkpOgorCWNhc2UgVVNCX0lEKDB4MDQ2ZCwgMHgwODE5KTogLyogTG9naXRlY2ggV2ViY2FtIEMyMTAgKi8KIAljYXNlIFVTQl9JRCgweDA0NmQsIDB4MDgxYik6IC8qIEhEIFdlYmNhbSBjMzEwICovCiAJY2FzZSBVU0JfSUQoMHgwNDZkLCAweDA4MWQpOiAvKiBIRCBXZWJjYW0gYzUxMCAqLwogCWNhc2UgVVNCX0lEKDB4MDQ2ZCwgMHgwODI1KTogLyogSEQgV2ViY2FtIGMyNzAgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmggYi90b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy5oCmluZGV4IDZlZWRiYTEuLjY1M2QxYmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmgKKysrIGIvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaApAQCAtMjIsNiArMjIsOCBAQAogI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKICNlbmRpZgogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaD4KIAogI2VuZGlmIC8qIF9fVE9PTFNfQVNNX0dFTkVSSUNfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2FyY2hfaHdlaWdodC5oIGIvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXJjaF9od2VpZ2h0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4YmIyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2FyY2hfaHdlaWdodC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9hcmNoX2h3ZWlnaHQuaCIKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2NvbnN0X2h3ZWlnaHQuaCBiL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2NvbnN0X2h3ZWlnaHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWZkNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvY29uc3RfaHdlaWdodC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9jb25zdF9od2VpZ2h0LmgiCmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0LmggYi90b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwMTIwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX1RPT0xTX0xJTlVYX0FTTV9HRU5FUklDX0JJVE9QU19IV0VJR0hUX0hfCisjZGVmaW5lIF9UT09MU19MSU5VWF9BU01fR0VORVJJQ19CSVRPUFNfSFdFSUdIVF9IXworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2FyY2hfaHdlaWdodC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9jb25zdF9od2VpZ2h0Lmg+CisKKyNlbmRpZiAvKiBfVE9PTFNfTElOVVhfQVNNX0dFTkVSSUNfQklUT1BTX0hXRUlHSFRfSF8gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0b3BzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCmluZGV4IDI2MDA1YTE1Li41YWQ5ZWUxIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTEsOSArMSw5IEBACiAjaWZuZGVmIF9UT09MU19MSU5VWF9CSVRPUFNfSF8KICNkZWZpbmUgX1RPT0xTX0xJTlVYX0JJVE9QU19IXwogCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vaHdlaWdodC5oPgogCiAjaWZuZGVmIF9fV09SRFNJWkUKICNkZWZpbmUgX19XT1JEU0laRSAoX19TSVpFT0ZfTE9OR19fICogOCkKQEAgLTE5LDYgKzE5LDExIEBACiAjZGVmaW5lIEJJVFNfVE9fVTMyKG5yKQkJRElWX1JPVU5EX1VQKG5yLCBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHUzMikpCiAjZGVmaW5lIEJJVFNfVE9fQllURVMobnIpCURJVl9ST1VORF9VUChuciwgQklUU19QRVJfQllURSkKIAorZXh0ZXJuIHVuc2lnbmVkIGludCBfX3N3X2h3ZWlnaHQ4KHVuc2lnbmVkIGludCB3KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19zd19od2VpZ2h0MTYodW5zaWduZWQgaW50IHcpOworZXh0ZXJuIHVuc2lnbmVkIGludCBfX3N3X2h3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N3X2h3ZWlnaHQ2NChfX3U2NCB3KTsKKwogLyoKICAqIEluY2x1ZGUgdGhpcyBoZXJlIGJlY2F1c2Ugc29tZSBhcmNoaXRlY3R1cmVzIG5lZWQgZ2VuZXJpY19mZnMvZmxzIGluCiAgKiBzY29wZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2FwaS9mcy9kZWJ1Z2ZzLmMgYi90b29scy9saWIvYXBpL2ZzL2RlYnVnZnMuYwppbmRleCBhNzRmYmE2Li44NmVhMmQ3IDEwMDY0NAotLS0gYS90b29scy9saWIvYXBpL2ZzL2RlYnVnZnMuYworKysgYi90b29scy9saWIvYXBpL2ZzL2RlYnVnZnMuYwpAQCAtNjcsNyArNjcsNyBAQAogCiAJaWYgKHN0YXRmcyhkZWJ1Z2ZzLCAmc3RfZnMpIDwgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JZWxzZSBpZiAoc3RfZnMuZl90eXBlICE9IChsb25nKSBERUJVR0ZTX01BR0lDKQorCWVsc2UgaWYgKChsb25nKXN0X2ZzLmZfdHlwZSAhPSAobG9uZylERUJVR0ZTX01BR0lDKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2FwaS9mcy9mcy5jIGIvdG9vbHMvbGliL2FwaS9mcy9mcy5jCmluZGV4IDY1ZDliZTMuLjEyOGVmNjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9hcGkvZnMvZnMuYworKysgYi90b29scy9saWIvYXBpL2ZzL2ZzLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAogCWlmIChzdGF0ZnMoZnMsICZzdF9mcykgPCAwKQogCQlyZXR1cm4gLUVOT0VOVDsKLQllbHNlIGlmIChzdF9mcy5mX3R5cGUgIT0gbWFnaWMpCisJZWxzZSBpZiAoKGxvbmcpc3RfZnMuZl90eXBlICE9IG1hZ2ljKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2xvY2tkZXAvcHJlbG9hZC5jIGIvdG9vbHMvbGliL2xvY2tkZXAvcHJlbG9hZC5jCmluZGV4IDZmODAzNjAuLjBiMDExMmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9sb2NrZGVwL3ByZWxvYWQuYworKysgYi90b29scy9saWIvbG9ja2RlcC9wcmVsb2FkLmMKQEAgLTMxNyw3ICszMTcsNyBAQAogCSAqCiAJICogVE9ETzogSG9vayBpbnRvIGZyZWUoKSBhbmQgYWRkIHRoYXQgY2hlY2sgdGhlcmUgYXMgd2VsbC4KIAkgKi8KLQlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChtdXRleCwgbXV0ZXggKyBzaXplb2YoKm11dGV4KSk7CisJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQobXV0ZXgsIHNpemVvZigqbXV0ZXgpKTsKIAlfX2RlbF9sb2NrKF9fZ2V0X2xvY2sobXV0ZXgpKTsKIAlyZXR1cm4gbGxfcHRocmVhZF9tdXRleF9kZXN0cm95KG11dGV4KTsKIH0KQEAgLTM0MSw3ICszNDEsNyBAQAogewogCXRyeV9pbml0X3ByZWxvYWQoKTsKIAotCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKHJ3bG9jaywgcndsb2NrICsgc2l6ZW9mKCpyd2xvY2spKTsKKwlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChyd2xvY2ssIHNpemVvZigqcndsb2NrKSk7CiAJX19kZWxfbG9jayhfX2dldF9sb2NrKHJ3bG9jaykpOwogCXJldHVybiBsbF9wdGhyZWFkX3J3bG9ja19kZXN0cm95KHJ3bG9jayk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL01BTklGRVNUIGIvdG9vbHMvcGVyZi9NQU5JRkVTVAppbmRleCA4M2UyODg3Li5mYmJmZGMzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01BTklGRVNUCisrKyBiL3Rvb2xzL3BlcmYvTUFOSUZFU1QKQEAgLTYsMTIgKzYsMTUgQEAKIHRvb2xzL2xpYi9zeW1ib2wva2FsbHN5bXMuaAogdG9vbHMvbGliL3V0aWwvZmluZF9uZXh0X2JpdC5jCiB0b29scy9pbmNsdWRlL2FzbS9idWcuaAordG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXJjaF9od2VpZ2h0LmgKIHRvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oCit0b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9jb25zdF9od2VpZ2h0LmgKIHRvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL19fZmZzLmgKIHRvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL19fZmxzLmgKIHRvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaAogdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaAogdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmgKK3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaAogdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaAogdG9vbHMvaW5jbHVkZS9saW51eC9iaXRvcHMuaAogdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0xOSw2ICsyMiw4IEBACiB0b29scy9pbmNsdWRlL2xpbnV4L2hhc2guaAogdG9vbHMvaW5jbHVkZS9saW51eC9sb2cyLmgKIHRvb2xzL2luY2x1ZGUvbGludXgvdHlwZXMuaAoraW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXJjaF9od2VpZ2h0LmgKK2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2NvbnN0X2h3ZWlnaHQuaAogaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaAogaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvX19mbHMuaAogaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmgKQEAgLTI5LDYgKzM0LDcgQEAKIGluY2x1ZGUvbGludXgvaGFzaC5oCiBpbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oCiBsaWIvZmluZF9uZXh0X2JpdC5jCitsaWIvaHdlaWdodC5jCiBsaWIvcmJ0cmVlLmMKIGluY2x1ZGUvbGludXgvc3dhYi5oCiBhcmNoLyovaW5jbHVkZS9hc20vdW5pc3RkKi5oCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKaW5kZXggNjdhMDNhODIuLmFhNmE1MDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorKysgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKQEAgLTIzMiwxMiArMjMyLDE1IEBACiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvYml0bWFwLmgKIExJQl9IICs9IC4uL2luY2x1ZGUvbGludXgvYml0b3BzLmgKK0xJQl9IICs9IC4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2FyY2hfaHdlaWdodC5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaAorTElCX0ggKz0gLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvY29uc3RfaHdlaWdodC5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9maW5kLmgKIExJQl9IICs9IC4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0LmgKIExJQl9IICs9IC4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2Zscy5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zscy5oCitMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0LmgKIExJQl9IICs9IC4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmgKIExJQl9IICs9IC4uL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAogTElCX0ggKz0gLi4vaW5jbHVkZS9saW51eC9sb2cyLmgKQEAgLTI1NSw3ICsyNTgsNiBAQAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS9idWcuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaAotTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9od2VpZ2h0LmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vc3dhYi5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL3N5c3RlbS5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtNDYyLDEwICs0NjQsMTIgQEAKICMgQmVuY2htYXJrIG1vZHVsZXMKIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9zY2hlZC1tZXNzYWdpbmcubwogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJlbmNoL3NjaGVkLXBpcGUubwotaWZlcSAoJChSQVdfQVJDSCkseDg2XzY0KQoraWZlcSAoJChBUkNIKSwgeDg2KQoraWZlcSAoJChJU182NF9CSVQpLCAxKQogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJlbmNoL21lbS1tZW1jcHkteDg2LTY0LWFzbS5vCiBCVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYmVuY2gvbWVtLW1lbXNldC14ODYtNjQtYXNtLm8KIGVuZGlmCitlbmRpZgogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJlbmNoL21lbS1tZW1jcHkubwogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJlbmNoL2Z1dGV4LWhhc2gubwogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJlbmNoL2Z1dGV4LXdha2UubwpAQCAtNzQzLDYgKzc0Nyw5IEBACiAkKE9VVFBVVCl1dGlsL3JidHJlZS5vOiAuLi8uLi9saWIvcmJ0cmVlLmMgJChPVVRQVVQpUEVSRi1DRkxBR1MKIAkkKFFVSUVUX0NDKSQoQ0MpIC1vICRAIC1jICQoQ0ZMQUdTKSAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLURFVENfUEVSRkNPTkZJRz0nIiQoRVRDX1BFUkZDT05GSUdfU1EpIicgJDwKIAorJChPVVRQVVQpdXRpbC9od2VpZ2h0Lm86IC4uLy4uL2xpYi9od2VpZ2h0LmMgJChPVVRQVVQpUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vICRAIC1jICQoQ0ZMQUdTKSAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLURFVENfUEVSRkNPTkZJRz0nIiQoRVRDX1BFUkZDT05GSUdfU1EpIicgJDwKKwogJChPVVRQVVQpdXRpbC9maW5kX25leHRfYml0Lm86IC4uL2xpYi91dGlsL2ZpbmRfbmV4dF9iaXQuYyAkKE9VVFBVVClQRVJGLUNGTEFHUwogCSQoUVVJRVRfQ0MpJChDQykgLW8gJEAgLWMgJChDRkxBR1MpIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtREVUQ19QRVJGQ09ORklHPSciJChFVENfUEVSRkNPTkZJR19TUSkiJyAkPAogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jIGIvdG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYwppbmRleCAzYmI1MGVhLi4wYzM3MGY4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9wb3dlcnBjL3V0aWwvc2tpcC1jYWxsY2hhaW4taWR4LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlyZXN1bHQgPSBkd2FyZl9jZmlfYWRkcmZyYW1lKGNmaSwgcGMsICZmcmFtZSk7CisJcmVzdWx0ID0gZHdhcmZfY2ZpX2FkZHJmcmFtZShjZmksIHBjLWJpYXMsICZmcmFtZSk7CiAJaWYgKHJlc3VsdCkgewogCQlwcl9kZWJ1ZygiJXMoKTogJXNcbiIsIF9fZnVuY19fLCBkd2ZsX2Vycm1zZygtMSkpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTEyOCw3ICsxMjgsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlyZXN1bHQgPSBkd2FyZl9jZmlfYWRkcmZyYW1lKGNmaSwgcGMsICZmcmFtZSk7CisJcmVzdWx0ID0gZHdhcmZfY2ZpX2FkZHJmcmFtZShjZmksIHBjLWJpYXMsICZmcmFtZSk7CiAJaWYgKHJlc3VsdCkgewogCQlwcl9kZWJ1ZygiJXMoKTogJXNcbiIsIF9fZnVuY19fLCBkd2ZsX2Vycm1zZygtMSkpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE0NSw3ICsxNDUsNyBAQAogICoJCXlldCB1c2VkKQogICoJLTEgaW4gY2FzZSBvZiBlcnJvcnMKICAqLwotc3RhdGljIGludCBjaGVja19yZXR1cm5fYWRkcihzdHJ1Y3QgZHNvICpkc28sIER3YXJmX0FkZHIgcGMpCitzdGF0aWMgaW50IGNoZWNrX3JldHVybl9hZGRyKHN0cnVjdCBkc28gKmRzbywgdTY0IG1hcF9zdGFydCwgRHdhcmZfQWRkciBwYykKIHsKIAlpbnQJCXJjID0gLTE7CiAJRHdmbAkJKmR3Zmw7CkBAIC0xNTUsNiArMTU1LDcgQEAKIAlEd2FyZl9BZGRyCXN0YXJ0ID0gcGM7CiAJRHdhcmZfQWRkcgllbmQgPSBwYzsKIAlib29sCQlzaWduYWxwOworCWNvbnN0IGNoYXIJKmV4ZWNfZmlsZSA9IGRzby0+bG9uZ19uYW1lOwogCiAJZHdmbCA9IGRzby0+ZHdmbDsKIApAQCAtMTY1LDggKzE2NiwxMCBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAKLQkJaWYgKGR3ZmxfcmVwb3J0X29mZmxpbmUoZHdmbCwgIiIsIGRzby0+bG9uZ19uYW1lLCAtMSkgPT0gTlVMTCkgewotCQkJcHJfZGVidWcoImR3ZmxfcmVwb3J0X29mZmxpbmUoKSBmYWlsZWQgJXNcbiIsCisJCW1vZCA9IGR3ZmxfcmVwb3J0X2VsZihkd2ZsLCBleGVjX2ZpbGUsIGV4ZWNfZmlsZSwgLTEsCisJCQkJCQltYXBfc3RhcnQsIGZhbHNlKTsKKwkJaWYgKCFtb2QpIHsKKwkJCXByX2RlYnVnKCJkd2ZsX3JlcG9ydF9lbGYoKSBmYWlsZWQgJXNcbiIsCiAJCQkJCQlkd2FyZl9lcnJtc2coLTEpKTsKIAkJCS8qCiAJCQkgKiBXZSBub3JtYWxseSBjYWNoZSB0aGUgRFdBUkYgZGVidWcgaW5mbyBhbmQgbmV2ZXIKQEAgLTI1NiwxMCArMjU5LDEwIEBACiAJCXJldHVybiBza2lwX3Nsb3Q7CiAJfQogCi0JcmMgPSBjaGVja19yZXR1cm5fYWRkcihkc28sIGlwKTsKKwlyYyA9IGNoZWNrX3JldHVybl9hZGRyKGRzbywgYWwubWFwLT5zdGFydCwgaXApOwogCi0JcHJfZGVidWcoIkRTTyAlcywgbnIgJSIgUFJJeDY0ICIsIGlwIDB4JSIgUFJJeDY0ICJyYyAlZFxuIiwKLQkJCQlkc28tPmxvbmdfbmFtZSwgY2hhaW4tPm5yLCBpcCwgcmMpOworCXByX2RlYnVnKCJbRFNPICVzLCBzeW0gJXMsIGlwIDB4JSIgUFJJeDY0ICJdIHJjICVkXG4iLAorCQkJCWRzby0+bG9uZ19uYW1lLCBhbC5zeW0tPm5hbWUsIGlwLCByYyk7CiAKIAlpZiAocmMgPT0gMCkgewogCQkvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9iZW5jaC9zY2hlZC1waXBlLmMgYi90b29scy9wZXJmL2JlbmNoL3NjaGVkLXBpcGUuYwppbmRleCAwN2E4ZDc2Li4wMDVjYzI4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2JlbmNoL3NjaGVkLXBpcGUuYworKysgYi90b29scy9wZXJmL2JlbmNoL3NjaGVkLXBpcGUuYwpAQCAtMTksMTIgKzE5LDEyIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KIAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCBlNzQxN2ZlLi43NDdmODYxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJCWlmIChucl9zYW1wbGVzID4gMCkgewogCQkJdG90YWxfbnJfc2FtcGxlcyArPSBucl9zYW1wbGVzOwogCQkJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7Ci0JCQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cyk7CisJCQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cywgTlVMTCk7CiAKIAkJCWlmIChzeW1ib2xfY29uZi5ldmVudF9ncm91cCAmJgogCQkJICAgICFwZXJmX2V2c2VsX19pc19ncm91cF9sZWFkZXIocG9zKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMgYi90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCmluZGV4IDFjZTQyNWQuLjFmZDk2YzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwpAQCAtNTQ1LDYgKzU0NSw0MiBAQAogCXJldHVybiBfX2hpc3RfZW50cnlfX2NtcF9jb21wdXRlKHBfbGVmdCwgcF9yaWdodCwgYyk7CiB9CiAKK3N0YXRpYyBpbnQ2NF90CitoaXN0X2VudHJ5X19jbXBfbm9wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0IF9fbWF5YmVfdW51c2VkLAorCQkgICAgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0IF9fbWF5YmVfdW51c2VkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50NjRfdAoraGlzdF9lbnRyeV9fY21wX2Jhc2VsaW5lKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCit7CisJaWYgKHNvcnRfY29tcHV0ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGVmdC0+c3RhdC5wZXJpb2QgPT0gcmlnaHQtPnN0YXQucGVyaW9kKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbGVmdC0+c3RhdC5wZXJpb2QgPiByaWdodC0+c3RhdC5wZXJpb2QgPyAxIDogLTE7Cit9CisKK3N0YXRpYyBpbnQ2NF90CitoaXN0X2VudHJ5X19jbXBfZGVsdGEoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKK3sKKwlyZXR1cm4gaGlzdF9lbnRyeV9fY21wX2NvbXB1dGUocmlnaHQsIGxlZnQsIENPTVBVVEVfREVMVEEpOworfQorCitzdGF0aWMgaW50NjRfdAoraGlzdF9lbnRyeV9fY21wX3JhdGlvKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCit7CisJcmV0dXJuIGhpc3RfZW50cnlfX2NtcF9jb21wdXRlKHJpZ2h0LCBsZWZ0LCBDT01QVVRFX1JBVElPKTsKK30KKworc3RhdGljIGludDY0X3QKK2hpc3RfZW50cnlfX2NtcF93ZGlmZihzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQoreworCXJldHVybiBoaXN0X2VudHJ5X19jbXBfY29tcHV0ZShyaWdodCwgbGVmdCwgQ09NUFVURV9XRUlHSFRFRF9ESUZGKTsKK30KKwogc3RhdGljIHZvaWQgaW5zZXJ0X2hpc3RfZW50cnlfYnlfY29tcHV0ZShzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwKIAkJCQkJIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwKIAkJCQkJIGludCBjKQpAQCAtNjA1LDcgKzY0MSw3IEBACiAJCWhpc3RzX19wcmVjb21wdXRlKGhpc3RzKTsKIAkJaGlzdHNfX2NvbXB1dGVfcmVzb3J0KGhpc3RzKTsKIAl9IGVsc2UgewotCQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cyk7CisJCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzLCBOVUxMKTsKIAl9CiAKIAloaXN0c19fZnByaW50ZihoaXN0cywgdHJ1ZSwgMCwgMCwgMCwgc3Rkb3V0KTsKQEAgLTEwMzgsMjcgKzEwNzQsMzUgQEAKIAlmbXQtPmhlYWRlciA9IGhwcF9faGVhZGVyOwogCWZtdC0+d2lkdGggID0gaHBwX193aWR0aDsKIAlmbXQtPmVudHJ5ICA9IGhwcF9fZW50cnlfZ2xvYmFsOworCWZtdC0+Y21wICAgID0gaGlzdF9lbnRyeV9fY21wX25vcDsKKwlmbXQtPmNvbGxhcHNlID0gaGlzdF9lbnRyeV9fY21wX25vcDsKIAogCS8qIFRPRE8gbW9yZSBjb2xvcnMgKi8KIAlzd2l0Y2ggKGlkeCkgewogCWNhc2UgUEVSRl9IUFBfRElGRl9fQkFTRUxJTkU6CiAJCWZtdC0+Y29sb3IgPSBocHBfX2NvbG9yX2Jhc2VsaW5lOworCQlmbXQtPnNvcnQgID0gaGlzdF9lbnRyeV9fY21wX2Jhc2VsaW5lOwogCQlicmVhazsKIAljYXNlIFBFUkZfSFBQX0RJRkZfX0RFTFRBOgogCQlmbXQtPmNvbG9yID0gaHBwX19jb2xvcl9kZWx0YTsKKwkJZm10LT5zb3J0ICA9IGhpc3RfZW50cnlfX2NtcF9kZWx0YTsKIAkJYnJlYWs7CiAJY2FzZSBQRVJGX0hQUF9ESUZGX19SQVRJTzoKIAkJZm10LT5jb2xvciA9IGhwcF9fY29sb3JfcmF0aW87CisJCWZtdC0+c29ydCAgPSBoaXN0X2VudHJ5X19jbXBfcmF0aW87CiAJCWJyZWFrOwogCWNhc2UgUEVSRl9IUFBfRElGRl9fV0VJR0hURURfRElGRjoKIAkJZm10LT5jb2xvciA9IGhwcF9fY29sb3Jfd2RpZmY7CisJCWZtdC0+c29ydCAgPSBoaXN0X2VudHJ5X19jbXBfd2RpZmY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCWZtdC0+c29ydCAgPSBoaXN0X2VudHJ5X19jbXBfbm9wOwogCQlicmVhazsKIAl9CiAKIAlpbml0X2hlYWRlcihkLCBkZm10KTsKIAlwZXJmX2hwcF9fY29sdW1uX3JlZ2lzdGVyKGZtdCk7CisJcGVyZl9ocHBfX3JlZ2lzdGVyX3NvcnRfZmllbGQoZm10KTsKIH0KIAogc3RhdGljIHZvaWQgdWlfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWxpc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1saXN0LmMKaW5kZXggMDExMTk1ZS4uMTk4ZjNjMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWxpc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tbGlzdC5jCkBAIC0xOSw3ICsxOSw5IEBACiBpbnQgY21kX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX19tYXliZV91bnVzZWQpCiB7CiAJaW50IGk7Ci0JY29uc3Qgc3RydWN0IG9wdGlvbiBsaXN0X29wdGlvbnNbXSA9IHsKKwlib29sIHJhd19kdW1wID0gZmFsc2U7CisJc3RydWN0IG9wdGlvbiBsaXN0X29wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0xFQU4oMCwgInJhdy1kdW1wIiwgJnJhd19kdW1wLCAiRHVtcCByYXcgZXZlbnRzIiksCiAJCU9QVF9FTkQoKQogCX07CiAJY29uc3QgY2hhciAqIGNvbnN0IGxpc3RfdXNhZ2VbXSA9IHsKQEAgLTI3LDExICsyOSwxOCBAQAogCQlOVUxMCiAJfTsKIAorCXNldF9vcHRpb25fZmxhZyhsaXN0X29wdGlvbnMsIDAsICJyYXctZHVtcCIsIFBBUlNFX09QVF9ISURERU4pOworCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgbGlzdF9vcHRpb25zLCBsaXN0X3VzYWdlLAogCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAogCXNldHVwX3BhZ2VyKCk7CiAKKwlpZiAocmF3X2R1bXApIHsKKwkJcHJpbnRfZXZlbnRzKE5VTEwsIHRydWUpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoYXJnYyA9PSAwKSB7CiAJCXByaW50X2V2ZW50cyhOVUxMLCBmYWxzZSk7CiAJCXJldHVybiAwOwpAQCAtNTMsOCArNjIsNiBAQAogCQkJcHJpbnRfaHdjYWNoZV9ldmVudHMoTlVMTCwgZmFsc2UpOwogCQllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgInBtdSIpID09IDApCiAJCQlwcmludF9wbXVfZXZlbnRzKE5VTEwsIGZhbHNlKTsKLQkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItLXJhdy1kdW1wIikgPT0gMCkKLQkJCXByaW50X2V2ZW50cyhOVUxMLCB0cnVlKTsKIAkJZWxzZSB7CiAJCQljaGFyICpzZXAgPSBzdHJjaHIoYXJndltpXSwgJzonKSwgKnM7CiAJCQlpbnQgc2VwX2lkeDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCAzOTM2NzYwLi4wNzJhZThhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC00NTcsNiArNDU3LDE5IEBACiAJdWlfcHJvZ3Jlc3NfX2ZpbmlzaCgpOwogfQogCitzdGF0aWMgdm9pZCByZXBvcnRfX291dHB1dF9yZXNvcnQoc3RydWN0IHJlcG9ydCAqcmVwKQoreworCXN0cnVjdCB1aV9wcm9ncmVzcyBwcm9nOworCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CisKKwl1aV9wcm9ncmVzc19faW5pdCgmcHJvZywgcmVwLT5ucl9lbnRyaWVzLCAiU29ydGluZyBldmVudHMgZm9yIG91dHB1dC4uLiIpOworCisJZXZsaXN0X19mb3JfZWFjaChyZXAtPnNlc3Npb24tPmV2bGlzdCwgcG9zKQorCQloaXN0c19fb3V0cHV0X3Jlc29ydChldnNlbF9faGlzdHMocG9zKSwgJnByb2cpOworCisJdWlfcHJvZ3Jlc3NfX2ZpbmlzaCgpOworfQorCiBzdGF0aWMgaW50IF9fY21kX3JlcG9ydChzdHJ1Y3QgcmVwb3J0ICpyZXApCiB7CiAJaW50IHJldDsKQEAgLTUwNSwxMyArNTE4LDIwIEBACiAJaWYgKHNlc3Npb25fZG9uZSgpKQogCQlyZXR1cm4gMDsKIAorCS8qCisJICogcmVjYWxjdWxhdGUgbnVtYmVyIG9mIGVudHJpZXMgYWZ0ZXIgY29sbGFwc2luZyBzaW5jZSBpdAorCSAqIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBjb2xsYXBzZSBwaGFzZS4KKwkgKi8KKwlyZXAtPm5yX2VudHJpZXMgPSAwOworCWV2bGlzdF9fZm9yX2VhY2goc2Vzc2lvbi0+ZXZsaXN0LCBwb3MpCisJCXJlcC0+bnJfZW50cmllcyArPSBldnNlbF9faGlzdHMocG9zKS0+bnJfZW50cmllczsKKwogCWlmIChyZXAtPm5yX2VudHJpZXMgPT0gMCkgewogCQl1aV9fZXJyb3IoIlRoZSAlcyBmaWxlIGhhcyBubyBzYW1wbGVzIVxuIiwgZmlsZS0+cGF0aCk7CiAJCXJldHVybiAwOwogCX0KIAotCWV2bGlzdF9fZm9yX2VhY2goc2Vzc2lvbi0+ZXZsaXN0LCBwb3MpCi0JCWhpc3RzX19vdXRwdXRfcmVzb3J0KGV2c2VsX19oaXN0cyhwb3MpKTsKKwlyZXBvcnRfX291dHB1dF9yZXNvcnQocmVwKTsKIAogCXJldHVybiByZXBvcnRfX2Jyb3dzZV9oaXN0cyhyZXApOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDBhYTc3NDcuLjYxNmYwZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAKLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdGF0aWMgdm9sYXRpbGUgaW50IGRvbmU7CkBAIC0yODUsNyArMjg0LDcgQEAKIAl9CiAKIAloaXN0c19fY29sbGFwc2VfcmVzb3J0KGhpc3RzLCBOVUxMKTsKLQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cyk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwogCiAJaGlzdHNfX291dHB1dF9yZWNhbGNfY29sX2xlbihoaXN0cywgdG9wLT5wcmludF9lbnRyaWVzIC0gcHJpbnRlZCk7CiAJcHV0Y2hhcignXG4nKTsKQEAgLTU1NCw3ICs1NTMsNyBAQAogCX0KIAogCWhpc3RzX19jb2xsYXBzZV9yZXNvcnQoaGlzdHMsIE5VTEwpOwotCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKwloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cywgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkICpkaXNwbGF5X3RocmVhZF90dWkodm9pZCAqYXJnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUgYi90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZQppbmRleCA1ZDRiMDM5Li42NDhlMzFmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNyBAQAogCiAjIEFkZGl0aW9uYWwgQVJDSCBzZXR0aW5ncyBmb3IgeDg2CiBpZmVxICgkKEFSQ0gpLHg4NikKLSAgaWZlcSAoJHtJU19YODZfNjR9LCAxKQorICBpZmVxICgke0lTXzY0X0JJVH0sIDEpCiAgICAgQ0ZMQUdTICs9IC1ESEFWRV9BUkNIX1g4Nl82NF9TVVBQT1JUCiAgICAgQVJDSF9JTkNMVURFID0gLi4vLi4vYXJjaC94ODYvbGliL21lbWNweV82NC5TIC4uLy4uL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUwogICAgIExJQlVOV0lORF9MSUJTID0gLWx1bndpbmQgLWx1bndpbmQteDg2XzY0CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZS5hcmNoIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUuYXJjaAppbmRleCA4NTFjZDAxLi5mZjk1YTY4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZS5hcmNoCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlLmFyY2gKQEAgLTEsNyArMSw3IEBACiAKIHVuYW1lX00gOj0gJChzaGVsbCB1bmFtZSAtbSAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCkKIAotQVJDSCA/PSAkKHNoZWxsIGVjaG8gJCh1bmFtZV9NKSB8IHNlZCAtZSBzL2kuODYvaTM4Ni8gLWUgcy9zdW40dS9zcGFyYzY0LyBcCitSQVdfQVJDSCA6PSAkKHNoZWxsIGVjaG8gJCh1bmFtZV9NKSB8IHNlZCAtZSBzL2kuODYvaTM4Ni8gLWUgcy9zdW40dS9zcGFyYzY0LyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgcy9hcm0uKi9hcm0vIC1lIHMvc2ExMTAvYXJtLyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgcy9zMzkweC9zMzkwLyAtZSBzL3BhcmlzYzY0L3BhcmlzYy8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIHMvcHBjLiovcG93ZXJwYy8gLWUgcy9taXBzLiovbWlwcy8gXApAQCAtOSwyMyArOSwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIHMvdGlsZS4qL3RpbGUvICkKIAogIyBBZGRpdGlvbmFsIEFSQ0ggc2V0dGluZ3MgZm9yIHg4NgotaWZlcSAoJChBUkNIKSxpMzg2KQotICBvdmVycmlkZSBBUkNIIDo9IHg4NgoraWZlcSAoJChSQVdfQVJDSCksaTM4NikKKyAgQVJDSCA/PSB4ODYKIGVuZGlmCiAKLWlmZXEgKCQoQVJDSCkseDg2XzY0KQotICBvdmVycmlkZSBBUkNIIDo9IHg4NgotICBJU19YODZfNjQgOj0gMAotICBpZmVxICgsICQoZmluZHN0cmluZyBtMzIsJChDRkxBR1MpKSkKLSAgICBJU19YODZfNjQgOj0gJChzaGVsbCBlY2hvIF9feDg2XzY0X18gfCAke0NDfSAtRSAteCBjIC0gfCB0YWlsIC1uIDEpCi0gICAgUkFXX0FSQ0ggOj0geDg2XzY0CitpZmVxICgkKFJBV19BUkNIKSx4ODZfNjQpCisgIEFSQ0ggPz0geDg2CisKKyAgaWZuZXEgKCwgJChmaW5kc3RyaW5nIG0zMiwkKENGTEFHUykpKQorICAgIFJBV19BUkNIIDo9IHg4Nl8zMgogICBlbmRpZgogZW5kaWYKIAotaWZlcSAoJHtJU19YODZfNjR9LCAxKQorQVJDSCA/PSAkKFJBV19BUkNIKQorCitMUDY0IDo9ICQoc2hlbGwgZWNobyBfX0xQNjRfXyB8ICR7Q0N9ICR7Q0ZMQUdTfSAtRSAteCBjIC0gfCB0YWlsIC1uIDEpCitpZmVxICgkKExQNjQpLCAxKQogICBJU182NF9CSVQgOj0gMQotZWxzZSBpZmVxICgkKEFSQ0gpLHg4NikKLSAgSVNfNjRfQklUIDo9IDAKIGVsc2UKLSAgSVNfNjRfQklUIDo9ICQoc2hlbGwgZWNobyBfX0xQNjRfXyB8ICR7Q0N9ICR7Q0ZMQUdTfSAtRSAteCBjIC0gfCB0YWlsIC1uIDEpCisgIElTXzY0X0JJVCA6PSAwCiBlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLXN5cy5oIGIvdG9vbHMvcGVyZi9wZXJmLXN5cy5oCmluZGV4IGEzYjEzZDcuLjZlZjY4MTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvcGVyZi1zeXMuaAorKysgYi90b29scy9wZXJmL3BlcmYtc3lzLmgKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKICNpZiBkZWZpbmVkKF9faTM4Nl9fKQogI2RlZmluZSBtYigpCQlhc20gdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiIDo6OiAibWVtb3J5IikKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jCmluZGV4IDc5MGNlYmEuLjI4NDMxZDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYwpAQCAtNSw3ICs1LDEwIEBACiAgKglBTlkgQ0hBTkdFUyBNQURFIEhFUkUgV0lMTCBCRSBMT1NUISAKICAqCiAgKi8KLQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpZm5kZWYgSEFTX0JPT0wKKyMgZGVmaW5lIEhBU19CT09MIDEKKyNlbmRpZgogI2xpbmUgMSAiQ29udGV4dC54cyIKIC8qCiAgKiBDb250ZXh0LnhzLiAgWFMgaW50ZXJmYWNlcyBmb3IgcGVyZiBzY3JpcHQuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jIGIvdG9vbHMvcGVyZi90ZXN0cy9kd2FyZi11bndpbmQuYwppbmRleCBhYjI4Y2NhLi4wYmYwNmJlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvZHdhcmYtdW53aW5kLmMKQEAgLTExLDYgKzExLDkgQEAKICNpbmNsdWRlICJ0aHJlYWQuaCIKICNpbmNsdWRlICJjYWxsY2hhaW4uaCIKIAorLyogRm9yIGJzZWFyY2guIFdlIHRyeSB0byB1bndpbmQgZnVuY3Rpb25zIGluIHNoYXJlZCBvYmplY3QuICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKIHN0YXRpYyBpbnQgbW1hcF9oYW5kbGVyKHN0cnVjdCBwZXJmX3Rvb2wgKnRvb2wgX19tYXliZV91bnVzZWQsCiAJCQl1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlIF9fbWF5YmVfdW51c2VkLApAQCAtMjgsNyArMzEsNyBAQAogCQkJCQkJICBtbWFwX2hhbmRsZXIsIG1hY2hpbmUsIHRydWUpOwogfQogCi0jZGVmaW5lIE1BWF9TVEFDSyA2CisjZGVmaW5lIE1BWF9TVEFDSyA4CiAKIHN0YXRpYyBpbnQgdW53aW5kX2VudHJ5KHN0cnVjdCB1bndpbmRfZW50cnkgKmVudHJ5LCB2b2lkICphcmcpCiB7CkBAIC0zNyw2ICs0MCw4IEBACiAJc3RhdGljIGNvbnN0IGNoYXIgKmZ1bmNzW01BWF9TVEFDS10gPSB7CiAJCSJ0ZXN0X19hcmNoX3Vud2luZF9zYW1wbGUiLAogCQkidW53aW5kX3RocmVhZCIsCisJCSJjb21wYXJlIiwKKwkJImJzZWFyY2giLAogCQkia3JhdmFfMyIsCiAJCSJrcmF2YV8yIiwKIAkJImtyYXZhXzEiLApAQCAtODgsMTAgKzkzLDM3IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBnbG9iYWxfdW53aW5kX3JldHZhbCA9IC1JTlRfTUFYOworCitfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorc3RhdGljIGludCBjb21wYXJlKHZvaWQgKnAxLCB2b2lkICpwMikKK3sKKwkvKiBBbnkgcG9zc2libGUgdmFsdWUgc2hvdWxkIGJlICd0aHJlYWQnICovCisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gKihzdHJ1Y3QgdGhyZWFkICoqKXAxOworCisJaWYgKGdsb2JhbF91bndpbmRfcmV0dmFsID09IC1JTlRfTUFYKQorCQlnbG9iYWxfdW53aW5kX3JldHZhbCA9IHVud2luZF90aHJlYWQodGhyZWFkKTsKKworCXJldHVybiBwMSAtIHAyOworfQorCiBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQogc3RhdGljIGludCBrcmF2YV8zKHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKIHsKLQlyZXR1cm4gdW53aW5kX3RocmVhZCh0aHJlYWQpOworCXN0cnVjdCB0aHJlYWQgKmFycmF5WzJdID0ge3RocmVhZCwgdGhyZWFkfTsKKwl2b2lkICpmcCA9ICZic2VhcmNoOworCS8qCisJICogbWFrZSBfYnNlYXJjaCBhIHZvbGF0aWxlIGZ1bmN0aW9uIHBvaW50ZXIgdG8KKwkgKiBwcmV2ZW50IHBvdGVudGlhbCBvcHRpbWl6YXRpb24sIHdoaWNoIG1heSBleHBhbmQKKwkgKiBic2VhcmNoIGFuZCBjYWxsIGNvbXBhcmUgZGlyZWN0bHkgZnJvbSB0aGlzIGZ1bmN0aW9uLAorCSAqIGluc3RlYWQgb2YgbGliYyBzaGFyZWQgb2JqZWN0LgorCSAqLworCXZvaWQgKigqdm9sYXRpbGUgX2JzZWFyY2gpKHZvaWQgKiwgdm9pZCAqLCBzaXplX3QsCisJCQlzaXplX3QsIGludCAoKikodm9pZCAqLCB2b2lkICopKTsKKworCV9ic2VhcmNoID0gZnA7CisJX2JzZWFyY2goYXJyYXksICZ0aHJlYWQsIDIsIHNpemVvZihzdHJ1Y3QgdGhyZWFkICoqKSwgY29tcGFyZSk7CisJcmV0dXJuIGdsb2JhbF91bndpbmRfcmV0dmFsOwogfQogCiBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19jdW11bGF0ZS5jIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19jdW11bGF0ZS5jCmluZGV4IDYxNGQ1YzQuLjhkMTEwZGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfY3VtdWxhdGUuYworKysgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2N1bXVsYXRlLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCSAqIGZ1bmN0aW9uIHNpbmNlIFRFU1RfQVNTRVJUX1ZBTCgpIHJldHVybnMgaW4gY2FzZSBvZiBmYWlsdXJlLgogCSAqLwogCWhpc3RzX19jb2xsYXBzZV9yZXNvcnQoaGlzdHMsIE5VTEwpOwotCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKwloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cywgTlVMTCk7CiAKIAlpZiAodmVyYm9zZSA+IDIpIHsKIAkJcHJfaW5mbygidXNlIGNhbGxjaGFpbjogJWQsIGN1bXVsYXRlIGNhbGxjaGFpbjogJWRcbiIsCkBAIC00NTQsMTIgKzQ1NCwxMiBAQAogCSAqICAgMzAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgcGVyZiAgICAgICAgICAgWy5dIGNtZF9yZWNvcmQKIAkgKiAgIDIwLjAwJSAgICAgMC4wMCUgICAgIGJhc2ggIGxpYmMgICAgICAgICAgIFsuXSBtYWxsb2MKIAkgKiAgIDEwLjAwJSAgICAxMC4wMCUgICAgIGJhc2ggIFtrZXJuZWxdICAgICAgIFtrXSBwYWdlX2ZhdWx0Ci0JICogICAxMC4wMCUgICAgMTAuMDAlICAgICBwZXJmICBba2VybmVsXSAgICAgICBba10gc2NoZWR1bGUKLQkgKiAgIDEwLjAwJSAgICAgMC4wMCUgICAgIHBlcmYgIFtrZXJuZWxdICAgICAgIFtrXSBzeXNfcGVyZl9ldmVudF9vcGVuCi0JICogICAxMC4wMCUgICAgMTAuMDAlICAgICBwZXJmICBba2VybmVsXSAgICAgICBba10gcGFnZV9mYXVsdAotCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgbGliYyAgICAgICAgICAgWy5dIGZyZWUKLQkgKiAgIDEwLjAwJSAgICAxMC4wMCUgICAgIHBlcmYgIGxpYmMgICAgICAgICAgIFsuXSBtYWxsb2MKIAkgKiAgIDEwLjAwJSAgICAxMC4wMCUgICAgIGJhc2ggIGJhc2ggICAgICAgICAgIFsuXSB4bWFsbG9jCisJICogICAxMC4wMCUgICAgMTAuMDAlICAgICBwZXJmICBba2VybmVsXSAgICAgICBba10gcGFnZV9mYXVsdAorCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgbGliYyAgICAgICAgICAgWy5dIG1hbGxvYworCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgW2tlcm5lbF0gICAgICAgW2tdIHNjaGVkdWxlCisJICogICAxMC4wMCUgICAgMTAuMDAlICAgICBwZXJmICBsaWJjICAgICAgICAgICBbLl0gZnJlZQorCSAqICAgMTAuMDAlICAgICAwLjAwJSAgICAgcGVyZiAgW2tlcm5lbF0gICAgICAgW2tdIHN5c19wZXJmX2V2ZW50X29wZW4KIAkgKi8KIAlzdHJ1Y3QgcmVzdWx0IGV4cGVjdGVkW10gPSB7CiAJCXsgNzAwMCwgMjAwMCwgInBlcmYiLCAicGVyZiIsICAgICAibWFpbiIgfSwKQEAgLTQ2OCwxMiArNDY4LDEyIEBACiAJCXsgMzAwMCwgMTAwMCwgInBlcmYiLCAicGVyZiIsICAgICAiY21kX3JlY29yZCIgfSwKIAkJeyAyMDAwLCAgICAwLCAiYmFzaCIsICJsaWJjIiwgICAgICJtYWxsb2MiIH0sCiAJCXsgMTAwMCwgMTAwMCwgImJhc2giLCAiW2tlcm5lbF0iLCAicGFnZV9mYXVsdCIgfSwKLQkJeyAxMDAwLCAxMDAwLCAicGVyZiIsICJba2VybmVsXSIsICJzY2hlZHVsZSIgfSwKLQkJeyAxMDAwLCAgICAwLCAicGVyZiIsICJba2VybmVsXSIsICJzeXNfcGVyZl9ldmVudF9vcGVuIiB9LAorCQl7IDEwMDAsIDEwMDAsICJiYXNoIiwgImJhc2giLCAgICAgInhtYWxsb2MiIH0sCiAJCXsgMTAwMCwgMTAwMCwgInBlcmYiLCAiW2tlcm5lbF0iLCAicGFnZV9mYXVsdCIgfSwKKwkJeyAxMDAwLCAxMDAwLCAicGVyZiIsICJba2VybmVsXSIsICJzY2hlZHVsZSIgfSwKIAkJeyAxMDAwLCAxMDAwLCAicGVyZiIsICJsaWJjIiwgICAgICJmcmVlIiB9LAogCQl7IDEwMDAsIDEwMDAsICJwZXJmIiwgImxpYmMiLCAgICAgIm1hbGxvYyIgfSwKLQkJeyAxMDAwLCAxMDAwLCAiYmFzaCIsICJiYXNoIiwgICAgICJ4bWFsbG9jIiB9LAorCQl7IDEwMDAsICAgIDAsICJwZXJmIiwgIltrZXJuZWxdIiwgInN5c19wZXJmX2V2ZW50X29wZW4iIH0sCiAJfTsKIAogCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSBmYWxzZTsKQEAgLTUzNywxMCArNTM3LDEzIEBACiAJICogICAgICAgICAgICAgICAgICBtYWxsb2MKIAkgKiAgICAgICAgICAgICAgICAgIG1haW4KIAkgKgotCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgW2tlcm5lbF0gICAgICAgW2tdIHNjaGVkdWxlCisJICogICAxMC4wMCUgICAgMTAuMDAlICAgICBiYXNoICBiYXNoICAgICAgICAgICBbLl0geG1hbGxvYwogCSAqICAgICAgICAgICAgICB8Ci0JICogICAgICAgICAgICAgIC0tLSBzY2hlZHVsZQotCSAqICAgICAgICAgICAgICAgICAgcnVuX2NvbW1hbmQKKwkgKiAgICAgICAgICAgICAgLS0tIHhtYWxsb2MKKwkgKiAgICAgICAgICAgICAgICAgIG1hbGxvYworCSAqICAgICAgICAgICAgICAgICAgeG1hbGxvYyAgICAgPC0tLSBOT1RFOiB0aGVyZSdzIGEgY3ljbGUKKwkgKiAgICAgICAgICAgICAgICAgIG1hbGxvYworCSAqICAgICAgICAgICAgICAgICAgeG1hbGxvYwogCSAqICAgICAgICAgICAgICAgICAgbWFpbgogCSAqCiAJICogICAxMC4wMCUgICAgIDAuMDAlICAgICBwZXJmICBba2VybmVsXSAgICAgICBba10gc3lzX3BlcmZfZXZlbnRfb3BlbgpAQCAtNTU2LDYgKzU1OSwxMiBAQAogCSAqICAgICAgICAgICAgICAgICAgcnVuX2NvbW1hbmQKIAkgKiAgICAgICAgICAgICAgICAgIG1haW4KIAkgKgorCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgW2tlcm5lbF0gICAgICAgW2tdIHNjaGVkdWxlCisJICogICAgICAgICAgICAgIHwKKwkgKiAgICAgICAgICAgICAgLS0tIHNjaGVkdWxlCisJICogICAgICAgICAgICAgICAgICBydW5fY29tbWFuZAorCSAqICAgICAgICAgICAgICAgICAgbWFpbgorCSAqCiAJICogICAxMC4wMCUgICAgMTAuMDAlICAgICBwZXJmICBsaWJjICAgICAgICAgICBbLl0gZnJlZQogCSAqICAgICAgICAgICAgICB8CiAJICogICAgICAgICAgICAgIC0tLSBmcmVlCkBAIC01NzAsMTUgKzU3OSw2IEBACiAJICogICAgICAgICAgICAgICAgICBydW5fY29tbWFuZAogCSAqICAgICAgICAgICAgICAgICAgbWFpbgogCSAqCi0JICogICAxMC4wMCUgICAgMTAuMDAlICAgICBiYXNoICBiYXNoICAgICAgICAgICBbLl0geG1hbGxvYwotCSAqICAgICAgICAgICAgICB8Ci0JICogICAgICAgICAgICAgIC0tLSB4bWFsbG9jCi0JICogICAgICAgICAgICAgICAgICBtYWxsb2MKLQkgKiAgICAgICAgICAgICAgICAgIHhtYWxsb2MgICAgIDwtLS0gTk9URTogdGhlcmUncyBhIGN5Y2xlCi0JICogICAgICAgICAgICAgICAgICBtYWxsb2MKLQkgKiAgICAgICAgICAgICAgICAgIHhtYWxsb2MKLQkgKiAgICAgICAgICAgICAgICAgIG1haW4KLQkgKgogCSAqLwogCXN0cnVjdCByZXN1bHQgZXhwZWN0ZWRbXSA9IHsKIAkJeyA3MDAwLCAyMDAwLCAicGVyZiIsICJwZXJmIiwgICAgICJtYWluIiB9LApAQCAtNTg3LDEyICs1ODcsMTIgQEAKIAkJeyAzMDAwLCAxMDAwLCAicGVyZiIsICJwZXJmIiwgICAgICJjbWRfcmVjb3JkIiB9LAogCQl7IDIwMDAsICAgIDAsICJiYXNoIiwgImxpYmMiLCAgICAgIm1hbGxvYyIgfSwKIAkJeyAxMDAwLCAxMDAwLCAiYmFzaCIsICJba2VybmVsXSIsICJwYWdlX2ZhdWx0IiB9LAotCQl7IDEwMDAsIDEwMDAsICJwZXJmIiwgIltrZXJuZWxdIiwgInNjaGVkdWxlIiB9LAorCQl7IDEwMDAsIDEwMDAsICJiYXNoIiwgImJhc2giLCAgICAgInhtYWxsb2MiIH0sCiAJCXsgMTAwMCwgICAgMCwgInBlcmYiLCAiW2tlcm5lbF0iLCAic3lzX3BlcmZfZXZlbnRfb3BlbiIgfSwKIAkJeyAxMDAwLCAxMDAwLCAicGVyZiIsICJba2VybmVsXSIsICJwYWdlX2ZhdWx0IiB9LAorCQl7IDEwMDAsIDEwMDAsICJwZXJmIiwgIltrZXJuZWxdIiwgInNjaGVkdWxlIiB9LAogCQl7IDEwMDAsIDEwMDAsICJwZXJmIiwgImxpYmMiLCAgICAgImZyZWUiIH0sCiAJCXsgMTAwMCwgMTAwMCwgInBlcmYiLCAibGliYyIsICAgICAibWFsbG9jIiB9LAotCQl7IDEwMDAsIDEwMDAsICJiYXNoIiwgImJhc2giLCAgICAgInhtYWxsb2MiIH0sCiAJfTsKIAlzdHJ1Y3QgY2FsbGNoYWluX3Jlc3VsdCBleHBlY3RlZF9jYWxsY2hhaW5bXSA9IHsKIAkJewpAQCAtNjIyLDkgKzYyMiwxMiBAQAogCQkJCXsgImJhc2giLCAgICAgIm1haW4iIH0sIH0sCiAJCX0sCiAJCXsKLQkJCTMsIHsJeyAiW2tlcm5lbF0iLCAic2NoZWR1bGUiIH0sCi0JCQkJeyAicGVyZiIsICAgICAicnVuX2NvbW1hbmQiIH0sCi0JCQkJeyAicGVyZiIsICAgICAibWFpbiIgfSwgfSwKKwkJCTYsIHsJeyAiYmFzaCIsICAgICAieG1hbGxvYyIgfSwKKwkJCQl7ICJsaWJjIiwgICAgICJtYWxsb2MiIH0sCisJCQkJeyAiYmFzaCIsICAgICAieG1hbGxvYyIgfSwKKwkJCQl7ICJsaWJjIiwgICAgICJtYWxsb2MiIH0sCisJCQkJeyAiYmFzaCIsICAgICAieG1hbGxvYyIgfSwKKwkJCQl7ICJiYXNoIiwgICAgICJtYWluIiB9LCB9LAogCQl9LAogCQl7CiAJCQkzLCB7CXsgIltrZXJuZWxdIiwgInN5c19wZXJmX2V2ZW50X29wZW4iIH0sCkBAIC02MzgsNiArNjQxLDExIEBACiAJCQkJeyAicGVyZiIsICAgICAibWFpbiIgfSwgfSwKIAkJfSwKIAkJeworCQkJMywgewl7ICJba2VybmVsXSIsICJzY2hlZHVsZSIgfSwKKwkJCQl7ICJwZXJmIiwgICAgICJydW5fY29tbWFuZCIgfSwKKwkJCQl7ICJwZXJmIiwgICAgICJtYWluIiB9LCB9LAorCQl9LAorCQl7CiAJCQk0LCB7CXsgImxpYmMiLCAgICAgImZyZWUiIH0sCiAJCQkJeyAicGVyZiIsICAgICAiY21kX3JlY29yZCIgfSwKIAkJCQl7ICJwZXJmIiwgICAgICJydW5fY29tbWFuZCIgfSwKQEAgLTY0OSwxNCArNjU3LDYgQEAKIAkJCQl7ICJwZXJmIiwgICAgICJydW5fY29tbWFuZCIgfSwKIAkJCQl7ICJwZXJmIiwgICAgICJtYWluIiB9LCB9LAogCQl9LAotCQl7Ci0JCQk2LCB7CXsgImJhc2giLCAgICAgInhtYWxsb2MiIH0sCi0JCQkJeyAibGliYyIsICAgICAibWFsbG9jIiB9LAotCQkJCXsgImJhc2giLCAgICAgInhtYWxsb2MiIH0sCi0JCQkJeyAibGliYyIsICAgICAibWFsbG9jIiB9LAotCQkJCXsgImJhc2giLCAgICAgInhtYWxsb2MiIH0sCi0JCQkJeyAiYmFzaCIsICAgICAibWFpbiIgfSwgfSwKLQkJfSwKIAl9OwogCiAJc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA9IHRydWU7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19maWx0ZXIuYwppbmRleCA3NGYyNTdhLi41OWU1M2RiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfZmlsdGVyLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlzdHJ1Y3QgaGlzdHMgKmhpc3RzID0gZXZzZWxfX2hpc3RzKGV2c2VsKTsKIAogCQloaXN0c19fY29sbGFwc2VfcmVzb3J0KGhpc3RzLCBOVUxMKTsKLQkJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cywgTlVMTCk7CiAKIAkJaWYgKHZlcmJvc2UgPiAyKSB7CiAJCQlwcl9pbmZvKCJOb3JtYWwgaGlzdG9ncmFtXG4iKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfb3V0cHV0LmMgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX291dHB1dC5jCmluZGV4IGE3NDhmMmIuLmY1NTQ3NjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfb3V0cHV0LmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19vdXRwdXQuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJCWdvdG8gb3V0OwogCiAJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7Ci0JaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzLCBOVUxMKTsKIAogCWlmICh2ZXJib3NlID4gMikgewogCQlwcl9pbmZvKCJbZmllbGRzID0gJXMsIHNvcnQgPSAlc11cbiIsIGZpZWxkX29yZGVyLCBzb3J0X29yZGVyKTsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQlnb3RvIG91dDsKIAogCWhpc3RzX19jb2xsYXBzZV9yZXNvcnQoaGlzdHMsIE5VTEwpOwotCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKwloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cywgTlVMTCk7CiAKIAlpZiAodmVyYm9zZSA+IDIpIHsKIAkJcHJfaW5mbygiW2ZpZWxkcyA9ICVzLCBzb3J0ID0gJXNdXG4iLCBmaWVsZF9vcmRlciwgc29ydF9vcmRlcik7CkBAIC0zMDYsNyArMzA2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAloaXN0c19fY29sbGFwc2VfcmVzb3J0KGhpc3RzLCBOVUxMKTsKLQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cyk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwogCiAJaWYgKHZlcmJvc2UgPiAyKSB7CiAJCXByX2luZm8oIltmaWVsZHMgPSAlcywgc29ydCA9ICVzXVxuIiwgZmllbGRfb3JkZXIsIHNvcnRfb3JkZXIpOwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJCWdvdG8gb3V0OwogCiAJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7Ci0JaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzLCBOVUxMKTsKIAogCWlmICh2ZXJib3NlID4gMikgewogCQlwcl9pbmZvKCJbZmllbGRzID0gJXMsIHNvcnQgPSAlc11cbiIsIGZpZWxkX29yZGVyLCBzb3J0X29yZGVyKTsKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCQlnb3RvIG91dDsKIAogCWhpc3RzX19jb2xsYXBzZV9yZXNvcnQoaGlzdHMsIE5VTEwpOwotCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKwloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cywgTlVMTCk7CiAKIAlpZiAodmVyYm9zZSA+IDIpIHsKIAkJcHJfaW5mbygiW2ZpZWxkcyA9ICVzLCBzb3J0ID0gJXNdXG4iLCBmaWVsZF9vcmRlciwgc29ydF9vcmRlcik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMgYi90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMKaW5kZXggZTZiYjA0Yi4uNzg4NTA2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jCisrKyBiL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvaGlzdHMuYwpAQCAtNTUwLDcgKzU1MCw3IEBACiAJYm9vbCBuZWVkX3BlcmNlbnQ7CiAKIAlub2RlID0gcmJfZmlyc3Qocm9vdCk7Ci0JbmVlZF9wZXJjZW50ID0gISFyYl9uZXh0KG5vZGUpOworCW5lZWRfcGVyY2VudCA9IG5vZGUgJiYgcmJfbmV4dChub2RlKTsKIAogCXdoaWxlIChub2RlKSB7CiAJCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hpbGQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUsIHJiX25vZGUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9oaXN0LmMgYi90b29scy9wZXJmL3VpL2hpc3QuYwppbmRleCBkYzBkMDk1Li40ODJhZGFlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2hpc3QuYworKysgYi90b29scy9wZXJmL3VpL2hpc3QuYwpAQCAtMjA0LDYgKzIwNCw5IEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCisJCWlmIChhLT50aHJlYWQgIT0gYi0+dGhyZWFkIHx8ICFzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQorCQkJcmV0dXJuIDA7CisKIAkJcmV0ID0gYi0+Y2FsbGNoYWluLT5tYXhfZGVwdGggLSBhLT5jYWxsY2hhaW4tPm1heF9kZXB0aDsKIAl9CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvdHVpL3NldHVwLmMgYi90b29scy9wZXJmL3VpL3R1aS9zZXR1cC5jCmluZGV4IDJmNjEyNTYuLjNjMzhmMjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvdHVpL3NldHVwLmMKKysrIGIvdG9vbHMvcGVyZi91aS90dWkvc2V0dXAuYwpAQCAtMSw1ICsxLDggQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzdGRib29sLmg+CisjaWZkZWYgSEFWRV9CQUNLVFJBQ0VfU1VQUE9SVAorI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgIi4uLy4uL3V0aWwvY2FjaGUuaCIKICNpbmNsdWRlICIuLi8uLi91dGlsL2RlYnVnLmgiCkBAIC04OCw2ICs5MSwyNSBAQAogCXJldHVybiBTTGtwX2dldGtleSgpOwogfQogCisjaWZkZWYgSEFWRV9CQUNLVFJBQ0VfU1VQUE9SVAorc3RhdGljIHZvaWQgdWlfX3NpZ25hbF9iYWNrdHJhY2UoaW50IHNpZykKK3sKKwl2b2lkICpzdGFja2R1bXBbMzJdOworCXNpemVfdCBzaXplOworCisJdWlfX2V4aXQoZmFsc2UpOworCXBzaWduYWwoc2lnLCAicGVyZiIpOworCisJcHJpbnRmKCItLS0tLS0tLSBiYWNrdHJhY2UgLS0tLS0tLS1cbiIpOworCXNpemUgPSBiYWNrdHJhY2Uoc3RhY2tkdW1wLCBBUlJBWV9TSVpFKHN0YWNrZHVtcCkpOworCWJhY2t0cmFjZV9zeW1ib2xzX2ZkKHN0YWNrZHVtcCwgc2l6ZSwgU1RET1VUX0ZJTEVOTyk7CisKKwlleGl0KDApOworfQorI2Vsc2UKKyMgZGVmaW5lIHVpX19zaWduYWxfYmFja3RyYWNlICB1aV9fc2lnbmFsCisjZW5kaWYKKwogc3RhdGljIHZvaWQgdWlfX3NpZ25hbChpbnQgc2lnKQogewogCXVpX19leGl0KGZhbHNlKTsKQEAgLTEyMiw4ICsxNDQsOCBAQAogCXVpX2Jyb3dzZXJfX2luaXQoKTsKIAl0dWlfcHJvZ3Jlc3NfX2luaXQoKTsKIAotCXNpZ25hbChTSUdTRUdWLCB1aV9fc2lnbmFsKTsKLQlzaWduYWwoU0lHRlBFLCB1aV9fc2lnbmFsKTsKKwlzaWduYWwoU0lHU0VHViwgdWlfX3NpZ25hbF9iYWNrdHJhY2UpOworCXNpZ25hbChTSUdGUEUsIHVpX19zaWduYWxfYmFja3RyYWNlKTsKIAlzaWduYWwoU0lHSU5ULCB1aV9fc2lnbmFsKTsKIAlzaWduYWwoU0lHUVVJVCwgdWlfX3NpZ25hbCk7CiAJc2lnbmFsKFNJR1RFUk0sIHVpX19zaWduYWwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYwppbmRleCA3OTk5OWNlLi4wMWJjNGUyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYwpAQCAtMTc3LDE0ICsxNzcsMTcgQEAKIAkJZ290byBvdXRfZnJlZV9vcHM7CiAKIAlvcHMtPmxvY2tlZC5pbnMgPSBpbnNfX2ZpbmQobmFtZSk7CisJZnJlZShuYW1lKTsKKwogCWlmIChvcHMtPmxvY2tlZC5pbnMgPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9vcHM7CiAKIAlpZiAoIW9wcy0+bG9ja2VkLmlucy0+b3BzKQogCQlyZXR1cm4gMDsKIAotCWlmIChvcHMtPmxvY2tlZC5pbnMtPm9wcy0+cGFyc2UpCi0JCW9wcy0+bG9ja2VkLmlucy0+b3BzLT5wYXJzZShvcHMtPmxvY2tlZC5vcHMpOworCWlmIChvcHMtPmxvY2tlZC5pbnMtPm9wcy0+cGFyc2UgJiYKKwkgICAgb3BzLT5sb2NrZWQuaW5zLT5vcHMtPnBhcnNlKG9wcy0+bG9ja2VkLm9wcykgPCAwKQorCQlnb3RvIG91dF9mcmVlX29wczsKIAogCXJldHVybiAwOwogCkBAIC0yMDgsNiArMjExLDEzIEBACiAKIHN0YXRpYyB2b2lkIGxvY2tfX2RlbGV0ZShzdHJ1Y3QgaW5zX29wZXJhbmRzICpvcHMpCiB7CisJc3RydWN0IGlucyAqaW5zID0gb3BzLT5sb2NrZWQuaW5zOworCisJaWYgKGlucyAmJiBpbnMtPm9wcy0+ZnJlZSkKKwkJaW5zLT5vcHMtPmZyZWUob3BzLT5sb2NrZWQub3BzKTsKKwllbHNlCisJCWluc19fZGVsZXRlKG9wcy0+bG9ja2VkLm9wcyk7CisKIAl6ZnJlZSgmb3BzLT5sb2NrZWQub3BzKTsKIAl6ZnJlZSgmb3BzLT50YXJnZXQucmF3KTsKIAl6ZnJlZSgmb3BzLT50YXJnZXQubmFtZSk7CkBAIC01MzEsOCArNTQxLDggQEAKIAlpZiAoIWRsLT5pbnMtPm9wcykKIAkJcmV0dXJuOwogCi0JaWYgKGRsLT5pbnMtPm9wcy0+cGFyc2UpCi0JCWRsLT5pbnMtPm9wcy0+cGFyc2UoJmRsLT5vcHMpOworCWlmIChkbC0+aW5zLT5vcHMtPnBhcnNlICYmIGRsLT5pbnMtPm9wcy0+cGFyc2UoJmRsLT5vcHMpIDwgMCkKKwkJZGwtPmlucyA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgZGlzYXNtX2xpbmVfX3BhcnNlKGNoYXIgKmxpbmUsIGNoYXIgKipuYW1lcCwgY2hhciAqKnJhd3ApCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCmluZGV4IDA3ODRhOTQuLmNhZGJkYzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCkBAIC0xMTYsMTEgKzExNiw2IEBACiAJc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYzsKIH07CiAKLXN0cnVjdCBzYW5ub3RhdGlvbiB7Ci0Jc3RydWN0IGFubm90YXRpb24gYW5ub3RhdGlvbjsKLQlzdHJ1Y3Qgc3ltYm9sCSAgc3ltYm9sOwotfTsKLQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3QgKmFubm90YXRpb25fX2hpc3RvZ3JhbShzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMsIGludCBpZHgpCiB7CiAJcmV0dXJuICgoKHZvaWQgKikmbm90ZXMtPnNyYy0+aGlzdG9ncmFtcykgKwpAQCAtMTI5LDggKzEyNCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFubm90YXRpb24gKnN5bWJvbF9fYW5ub3RhdGlvbihzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7Ci0Jc3RydWN0IHNhbm5vdGF0aW9uICphID0gY29udGFpbmVyX29mKHN5bSwgc3RydWN0IHNhbm5vdGF0aW9uLCBzeW1ib2wpOwotCXJldHVybiAmYS0+YW5ub3RhdGlvbjsKKwlyZXR1cm4gKHZvaWQgKilzeW0gLSBzeW1ib2xfY29uZi5wcml2X3NpemU7CiB9CiAKIGludCBhZGRyX21hcF9zeW1ib2xfX2luY19zYW1wbGVzKHN0cnVjdCBhZGRyX21hcF9zeW1ib2wgKmFtcywgaW50IGV2aWR4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oIGIvdG9vbHMvcGVyZi91dGlsL2NhY2hlLmgKaW5kZXggNWNmOWUxYi4uZDA0ZDc3MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhY2hlLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhY2hlLmgKQEAgLTcxLDcgKzcxLDkgQEAKIGV4dGVybiBjaGFyICpwZXJmX3BhdGhkdXAoY29uc3QgY2hhciAqZm10LCAuLi4pCiAJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiAKKyNpZm5kZWYgX19VQ0xJQkNfXwogLyogTWF0Y2hlcyB0aGUgbGliYy9saWJic2QgZnVuY3Rpb24gYXR0cmlidXRlIHNvIHdlIGRlY2xhcmUgdGhpcyB1bmNvbmRpdGlvbmFsbHk6ICovCiBleHRlcm4gc2l6ZV90IHN0cmxjcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fUEVSRl9DQUNIRV9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMgYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKaW5kZXggNjRiMzc3ZS4uMTRlN2ExMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYwpAQCAtODQxLDMgKzg0MSwzMyBAQAogCiAJcmV0dXJuIGJmOwogfQorCitzdGF0aWMgdm9pZCBmcmVlX2NhbGxjaGFpbl9ub2RlKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmxpc3QsICp0bXA7CisJc3RydWN0IGNhbGxjaGFpbl9ub2RlICpjaGlsZDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaXN0LCB0bXAsICZub2RlLT52YWwsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmxpc3QtPmxpc3QpOworCQlmcmVlKGxpc3QpOworCX0KKworCW4gPSByYl9maXJzdCgmbm9kZS0+cmJfcm9vdF9pbik7CisJd2hpbGUgKG4pIHsKKwkJY2hpbGQgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlX2luKTsKKwkJbiA9IHJiX25leHQobik7CisJCXJiX2VyYXNlKCZjaGlsZC0+cmJfbm9kZV9pbiwgJm5vZGUtPnJiX3Jvb3RfaW4pOworCisJCWZyZWVfY2FsbGNoYWluX25vZGUoY2hpbGQpOworCQlmcmVlKGNoaWxkKTsKKwl9Cit9CisKK3ZvaWQgZnJlZV9jYWxsY2hhaW4oc3RydWN0IGNhbGxjaGFpbl9yb290ICpyb290KQoreworCWlmICghc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKKwkJcmV0dXJuOworCisJZnJlZV9jYWxsY2hhaW5fbm9kZSgmcm9vdC0+bm9kZSk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmggYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKaW5kZXggZGJjMDhjZi4uYzBlYzFhYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaApAQCAtMTk4LDQgKzE5OCw2IEBACiBjaGFyICpjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjbCwKIAkJCSAgICAgICBjaGFyICpiZiwgc2l6ZV90IGJmc2l6ZSwgYm9vbCBzaG93X2Rzbyk7CiAKK3ZvaWQgZnJlZV9jYWxsY2hhaW4oc3RydWN0IGNhbGxjaGFpbl9yb290ICpyb290KTsKKwogI2VuZGlmCS8qIF9fUEVSRl9DQUxMQ0hBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCmluZGV4IGNiYWIxZmIuLjJlNTA3YjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKQEAgLTE0NDUsNyArMTQ0NSw3IEBACiAJY2FzZSBFTk9FTlQ6CiAJCXNjbnByaW50ZihidWYsIHNpemUsICIlcyIsCiAJCQkgICJFcnJvcjpcdFVuYWJsZSB0byBmaW5kIGRlYnVnZnNcbiIKLQkJCSAgIkhpbnQ6XHRXYXMgeW91ciBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggZGVidWdmcyBzdXBwb3J0P1xuIgorCQkJICAiSGludDpcdFdhcyB5b3VyIGtlcm5lbCBjb21waWxlZCB3aXRoIGRlYnVnZnMgc3VwcG9ydD9cbiIKIAkJCSAgIkhpbnQ6XHRJcyB0aGUgZGVidWdmcyBmaWxlc3lzdGVtIG1vdW50ZWQ/XG4iCiAJCQkgICJIaW50Olx0VHJ5ICdzdWRvIG1vdW50IC10IGRlYnVnZnMgbm9kZXYgL3N5cy9rZXJuZWwvZGVidWcnIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKaW5kZXggNmU4OGI5ZS4uMTgyMzk1NSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImV2bGlzdC5oIgogI2luY2x1ZGUgImV2c2VsLmgiCiAjaW5jbHVkZSAiYW5ub3RhdGUuaCIKKyNpbmNsdWRlICJ1aS9wcm9ncmVzcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KIAogc3RhdGljIGJvb2wgaGlzdHNfX2ZpbHRlcl9lbnRyeV9ieV9kc28oc3RydWN0IGhpc3RzICpoaXN0cywKQEAgLTMwMyw3ICszMDQsNyBAQAogCXNpemVfdCBjYWxsY2hhaW5fc2l6ZSA9IDA7CiAJc3RydWN0IGhpc3RfZW50cnkgKmhlOwogCi0JaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gfHwgc3ltYm9sX2NvbmYuY3VtdWxhdGVfY2FsbGNoYWluKQorCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQogCQljYWxsY2hhaW5fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2FsbGNoYWluX3Jvb3QpOwogCiAJaGUgPSB6YWxsb2Moc2l6ZW9mKCpoZSkgKyBjYWxsY2hhaW5fc2l6ZSk7CkBAIC03MzYsNyArNzM3LDcgQEAKIAlpdGVyLT5oZSA9IGhlOwogCWhlX2NhY2hlW2l0ZXItPmN1cnIrK10gPSBoZTsKIAotCWNhbGxjaGFpbl9hcHBlbmQoaGUtPmNhbGxjaGFpbiwgJmNhbGxjaGFpbl9jdXJzb3IsIHNhbXBsZS0+cGVyaW9kKTsKKwloaXN0X2VudHJ5X19hcHBlbmRfY2FsbGNoYWluKGhlLCBzYW1wbGUpOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHJlLWluaXRpYWxpemUgdGhlIGN1cnNvciBzaW5jZSBjYWxsY2hhaW5fYXBwZW5kKCkKQEAgLTgwOSw3ICs4MTAsOCBAQAogCWl0ZXItPmhlID0gaGU7CiAJaGVfY2FjaGVbaXRlci0+Y3VycisrXSA9IGhlOwogCi0JY2FsbGNoYWluX2FwcGVuZChoZS0+Y2FsbGNoYWluLCAmY3Vyc29yLCBzYW1wbGUtPnBlcmlvZCk7CisJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCisJCWNhbGxjaGFpbl9hcHBlbmQoaGUtPmNhbGxjaGFpbiwgJmN1cnNvciwgc2FtcGxlLT5wZXJpb2QpOwogCXJldHVybiAwOwogfQogCkBAIC05NDUsNiArOTQ3LDcgQEAKIAl6ZnJlZSgmaGUtPm1lbV9pbmZvKTsKIAl6ZnJlZSgmaGUtPnN0YXRfYWNjKTsKIAlmcmVlX3NyY2xpbmUoaGUtPnNyY2xpbmUpOworCWZyZWVfY2FsbGNoYWluKGhlLT5jYWxsY2hhaW4pOwogCWZyZWUoaGUpOwogfQogCkBAIC05ODcsNiArOTkwLDcgQEAKIAkJZWxzZQogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAl9CisJaGlzdHMtPm5yX2VudHJpZXMrKzsKIAogCXJiX2xpbmtfbm9kZSgmaGUtPnJiX25vZGVfaW4sIHBhcmVudCwgcCk7CiAJcmJfaW5zZXJ0X2NvbG9yKCZoZS0+cmJfbm9kZV9pbiwgcm9vdCk7CkBAIC0xMDI0LDcgKzEwMjgsMTAgQEAKIAlpZiAoIXNvcnRfX25lZWRfY29sbGFwc2UpCiAJCXJldHVybjsKIAorCWhpc3RzLT5ucl9lbnRyaWVzID0gMDsKKwogCXJvb3QgPSBoaXN0c19fZ2V0X3JvdGF0ZV9lbnRyaWVzX2luKGhpc3RzKTsKKwogCW5leHQgPSByYl9maXJzdChyb290KTsKIAogCXdoaWxlIChuZXh0KSB7CkBAIC0xMTE5LDcgKzExMjYsNyBAQAogCXJiX2luc2VydF9jb2xvcigmaGUtPnJiX25vZGUsIGVudHJpZXMpOwogfQogCi12b2lkIGhpc3RzX19vdXRwdXRfcmVzb3J0KHN0cnVjdCBoaXN0cyAqaGlzdHMpCit2b2lkIGhpc3RzX19vdXRwdXRfcmVzb3J0KHN0cnVjdCBoaXN0cyAqaGlzdHMsIHN0cnVjdCB1aV9wcm9ncmVzcyAqcHJvZykKIHsKIAlzdHJ1Y3QgcmJfcm9vdCAqcm9vdDsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKQEAgLTExNDgsNiArMTE1NSw5IEBACiAKIAkJaWYgKCFuLT5maWx0ZXJlZCkKIAkJCWhpc3RzX19jYWxjX2NvbF9sZW4oaGlzdHMsIG4pOworCisJCWlmIChwcm9nKQorCQkJdWlfcHJvZ3Jlc3NfX3VwZGF0ZShwcm9nLCAxKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmggYi90b29scy9wZXJmL3V0aWwvaGlzdC5oCmluZGV4IGQwZWY5YTEuLjQ2YmQ1MDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuaApAQCAtMTIxLDcgKzEyMSw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaGlzdHMgKmhpc3RzKTsKIHZvaWQgaGlzdF9lbnRyeV9fZnJlZShzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKIAotdm9pZCBoaXN0c19fb3V0cHV0X3Jlc29ydChzdHJ1Y3QgaGlzdHMgKmhpc3RzKTsKK3ZvaWQgaGlzdHNfX291dHB1dF9yZXNvcnQoc3RydWN0IGhpc3RzICpoaXN0cywgc3RydWN0IHVpX3Byb2dyZXNzICpwcm9nKTsKIHZvaWQgaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBzdHJ1Y3QgdWlfcHJvZ3Jlc3MgKnByb2cpOwogCiB2b2lkIGhpc3RzX19kZWNheV9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsIGJvb2wgemFwX3VzZXIsIGJvb2wgemFwX2tlcm5lbCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaHdlaWdodC5jIGIvdG9vbHMvcGVyZi91dGlsL2h3ZWlnaHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxZDBkMC4uMDAwMDAwMAotLS0gYS90b29scy9wZXJmL3V0aWwvaHdlaWdodC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0vKioKLSAqIGh3ZWlnaHROIC0gcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgb2YgYSBOLWJpdCB3b3JkCi0gKiBAeDogdGhlIHdvcmQgdG8gd2VpZ2gKLSAqCi0gKiBUaGUgSGFtbWluZyBXZWlnaHQgb2YgYSBudW1iZXIgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIHNldCBpbiBpdC4KLSAqLwotCi11bnNpZ25lZCBpbnQgaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KQotewotCXVuc2lnbmVkIGludCByZXMgPSB3IC0gKCh3ID4+IDEpICYgMHg1NTU1NTU1NSk7Ci0JcmVzID0gKHJlcyAmIDB4MzMzMzMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMzMzMzKTsKLQlyZXMgPSAocmVzICsgKHJlcyA+PiA0KSkgJiAweDBGMEYwRjBGOwotCXJlcyA9IHJlcyArIChyZXMgPj4gOCk7Ci0JcmV0dXJuIChyZXMgKyAocmVzID4+IDE2KSkgJiAweDAwMDAwMEZGOwotfQotCi11bnNpZ25lZCBsb25nIGh3ZWlnaHQ2NChfX3U2NCB3KQotewotI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKLQlyZXR1cm4gaHdlaWdodDMyKCh1bnNpZ25lZCBpbnQpKHcgPj4gMzIpKSArIGh3ZWlnaHQzMigodW5zaWduZWQgaW50KXcpOwotI2VsaWYgQklUU19QRVJfTE9ORyA9PSA2NAotCV9fdTY0IHJlcyA9IHcgLSAoKHcgPj4gMSkgJiAweDU1NTU1NTU1NTU1NTU1NTV1bCk7Ci0JcmVzID0gKHJlcyAmIDB4MzMzMzMzMzMzMzMzMzMzM3VsKSArICgocmVzID4+IDIpICYgMHgzMzMzMzMzMzMzMzMzMzMzdWwpOwotCXJlcyA9IChyZXMgKyAocmVzID4+IDQpKSAmIDB4MEYwRjBGMEYwRjBGMEYwRnVsOwotCXJlcyA9IHJlcyArIChyZXMgPj4gOCk7Ci0JcmVzID0gcmVzICsgKHJlcyA+PiAxNik7Ci0JcmV0dXJuIChyZXMgKyAocmVzID4+IDMyKSkgJiAweDAwMDAwMDAwMDAwMDAwRkZ1bDsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2h3ZWlnaHQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9od2VpZ2h0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2Y2YyNmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2h3ZWlnaHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI2lmbmRlZiBQRVJGX0hXRUlHSFRfSAotI2RlZmluZSBQRVJGX0hXRUlHSFRfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLXVuc2lnbmVkIGludCBod2VpZ2h0MzIodW5zaWduZWQgaW50IHcpOwotdW5zaWduZWQgbG9uZyBod2VpZ2h0NjQoX191NjQgdyk7Ci0KLSNlbmRpZiAvKiBQRVJGX0hXRUlHSFRfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMKaW5kZXggOTRkZTNlNC4uMWJjYTNhOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYworKysgYi90b29scy9wZXJmL3V0aWwvbWFjaGluZS5jCkBAIC0zODksNyArMzg5LDYgQEAKIAlpZiAodGggIT0gTlVMTCkgewogCQlyYl9saW5rX25vZGUoJnRoLT5yYl9ub2RlLCBwYXJlbnQsIHApOwogCQlyYl9pbnNlcnRfY29sb3IoJnRoLT5yYl9ub2RlLCAmbWFjaGluZS0+dGhyZWFkcyk7Ci0JCW1hY2hpbmUtPmxhc3RfbWF0Y2ggPSB0aDsKIAogCQkvKgogCQkgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgbWFwX2dyb3VwcyBzZXBhcmF0ZWx5CkBAIC00MDAsOSArMzk5LDEyIEBACiAJCSAqIGxlYWRlciBhbmQgdGhhdCB3b3VsZCBzY3Jld2VkIHRoZSByYiB0cmVlLgogCQkgKi8KIAkJaWYgKHRocmVhZF9faW5pdF9tYXBfZ3JvdXBzKHRoLCBtYWNoaW5lKSkgeworCQkJcmJfZXJhc2UoJnRoLT5yYl9ub2RlLCAmbWFjaGluZS0+dGhyZWFkcyk7CiAJCQl0aHJlYWRfX2RlbGV0ZSh0aCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQorCisJCW1hY2hpbmUtPmxhc3RfbWF0Y2ggPSB0aDsKIAl9CiAKIAlyZXR1cm4gdGg7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbWFwLmggYi90b29scy9wZXJmL3V0aWwvbWFwLmgKaW5kZXggNjk1MWE5ZC4uMGU0MjQzOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaApAQCAtMTE2LDYgKzExNiwyMiBAQAogI2RlZmluZSBtYXBfX2Zvcl9lYWNoX3N5bWJvbChtYXAsIHBvcywgbikJXAogCWRzb19fZm9yX2VhY2hfc3ltYm9sKG1hcC0+ZHNvLCBwb3MsIG4sIG1hcC0+dHlwZSkKIAorLyogbWFwX19mb3JfZWFjaF9zeW1ib2xfd2l0aF9uYW1lIC0gaXRlcmF0ZSBvdmVyIHRoZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBtYXAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgaGF2ZSB0aGUgZ2l2ZW4gbmFtZQorICoKKyAqIEBtYXA6IHRoZSAnc3RydWN0IG1hcCAqJyBpbiB3aGljaCBzeW1ib2xzIGl0ZXJlYXRlZAorICogQHN5bV9uYW1lOiB0aGUgc3ltYm9sIG5hbWUKKyAqIEBwb3M6IHRoZSAnc3RydWN0IHN5bWJvbCAqJyB0byB1c2UgYXMgYSBsb29wIGN1cnNvcgorICogQGZpbHRlcjogdG8gdXNlIHdoZW4gbG9hZGluZyB0aGUgRFNPCisgKi8KKyNkZWZpbmUgX19tYXBfX2Zvcl9lYWNoX3N5bWJvbF9ieV9uYW1lKG1hcCwgc3ltX25hbWUsIHBvcywgZmlsdGVyKQlcCisJZm9yIChwb3MgPSBtYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUobWFwLCBzeW1fbmFtZSwgZmlsdGVyKTsJXAorCSAgICAgcG9zICYmIHN0cmNtcChwb3MtPm5hbWUsIHN5bV9uYW1lKSA9PSAwOwkJXAorCSAgICAgcG9zID0gc3ltYm9sX19uZXh0X2J5X25hbWUocG9zKSkKKworI2RlZmluZSBtYXBfX2Zvcl9lYWNoX3N5bWJvbF9ieV9uYW1lKG1hcCwgc3ltX25hbWUsIHBvcykJCVwKKwlfX21hcF9fZm9yX2VhY2hfc3ltYm9sX2J5X25hbWUobWFwLCBzeW1fbmFtZSwgKHBvcyksIE5VTEwpCisKIHR5cGVkZWYgaW50ICgqc3ltYm9sX2ZpbHRlcl90KShzdHJ1Y3QgbWFwICptYXAsIHN0cnVjdCBzeW1ib2wgKnN5bSk7CiAKIHZvaWQgbWFwX19pbml0KHN0cnVjdCBtYXAgKm1hcCwgZW51bSBtYXBfdHlwZSB0eXBlLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwppbmRleCAyOGViMTQxLi45MTk5MzdlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG50ZXZzOyBpKyspIHsKLQkJaWYgKHRldnNbaV0ucG9pbnQuYWRkcmVzcykgeworCQlpZiAodGV2c1tpXS5wb2ludC5hZGRyZXNzICYmICF0ZXZzW2ldLnBvaW50LnJldHByb2JlKSB7CiAJCQl0bXAgPSBzdHJkdXAocmVsb2Nfc3ltLT5uYW1lKTsKIAkJCWlmICghdG1wKQogCQkJCXJldHVybiAtRU5PTUVNOwpAQCAtNDk1LDkgKzQ5NSwxMSBAQAogCX0KIAogCWlmIChudGV2cyA9PSAwKQl7CS8qIE5vIGVycm9yIGJ1dCBmYWlsZWQgdG8gZmluZCBwcm9iZSBwb2ludC4gKi8KLQkJcHJfd2FybmluZygiUHJvYmUgcG9pbnQgJyVzJyBub3QgZm91bmQuXG4iLAorCQlwcl93YXJuaW5nKCJQcm9iZSBwb2ludCAnJXMnIG5vdCBmb3VuZCBpbiBkZWJ1Z2luZm8uXG4iLAogCQkJICAgc3ludGhlc2l6ZV9wZXJmX3Byb2JlX3BvaW50KCZwZXYtPnBvaW50KSk7Ci0JCXJldHVybiAtRU5PRU5UOworCQlpZiAobmVlZF9kd2FyZikKKwkJCXJldHVybiAtRU5PRU5UOworCQlyZXR1cm4gMDsKIAl9CiAJLyogRXJyb3IgcGF0aCA6IG50ZXZzIDwgMCAqLwogCXByX2RlYnVnKCJBbiBlcnJvciBvY2N1cnJlZCBpbiBkZWJ1Z2luZm8gYW5hbHlzaXMgKCVkKS5cbiIsIG50ZXZzKTsKQEAgLTIwNTAsOSArMjA1MiwxMSBAQAogCXByX2RlYnVnKCJXcml0aW5nIGV2ZW50OiAlc1xuIiwgYnVmKTsKIAlpZiAoIXByb2JlX2V2ZW50X2RyeV9ydW4pIHsKIAkJcmV0ID0gd3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpOwotCQlpZiAocmV0IDw9IDApCisJCWlmIChyZXQgPD0gMCkgeworCQkJcmV0ID0gLWVycm5vOwogCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIHdyaXRlIGV2ZW50OiAlc1xuIiwKIAkJCQkgICBzdHJlcnJvcl9yKGVycm5vLCBzYnVmLCBzaXplb2Yoc2J1ZikpKTsKKwkJfQogCX0KIAlmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKQEAgLTIxODksMTggKzIxOTMsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgY2hhciAqbG9va2luZ19mdW5jdGlvbl9uYW1lOwotc3RhdGljIGludCBudW1fbWF0Y2hlZF9mdW5jdGlvbnM7Ci0KLXN0YXRpYyBpbnQgcHJvYmVfZnVuY3Rpb25fZmlsdGVyKHN0cnVjdCBtYXAgKm1hcCBfX21heWJlX3VudXNlZCwKLQkJCQkgICAgICBzdHJ1Y3Qgc3ltYm9sICpzeW0pCitzdGF0aWMgaW50IGZpbmRfcHJvYmVfZnVuY3Rpb25zKHN0cnVjdCBtYXAgKm1hcCwgY2hhciAqbmFtZSkKIHsKLQlpZiAoKHN5bS0+YmluZGluZyA9PSBTVEJfR0xPQkFMIHx8IHN5bS0+YmluZGluZyA9PSBTVEJfTE9DQUwpICYmCi0JICAgIHN0cmNtcChsb29raW5nX2Z1bmN0aW9uX25hbWUsIHN5bS0+bmFtZSkgPT0gMCkgewotCQludW1fbWF0Y2hlZF9mdW5jdGlvbnMrKzsKLQkJcmV0dXJuIDA7CisJaW50IGZvdW5kID0gMDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisKKwltYXBfX2Zvcl9lYWNoX3N5bWJvbF9ieV9uYW1lKG1hcCwgbmFtZSwgc3ltKSB7CisJCWlmIChzeW0tPmJpbmRpbmcgPT0gU1RCX0dMT0JBTCB8fCBzeW0tPmJpbmRpbmcgPT0gU1RCX0xPQ0FMKQorCQkJZm91bmQrKzsKIAl9Ci0JcmV0dXJuIDE7CisKKwlyZXR1cm4gZm91bmQ7CiB9CiAKICNkZWZpbmUgc3RyZHVwX29yX2dvdG8oc3RyLCBsYWJlbCkJXApAQCAtMjIxOCwxMCArMjIyMSwxMCBAQAogCXN0cnVjdCBrbWFwICprbWFwID0gTlVMTDsKIAlzdHJ1Y3QgcmVmX3JlbG9jX3N5bSAqcmVsb2Nfc3ltID0gTlVMTDsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW07Ci0Jc3RydWN0IHJiX25vZGUgKm5kOwogCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2OwogCXN0cnVjdCBwZXJmX3Byb2JlX3BvaW50ICpwcCA9ICZwZXYtPnBvaW50OwogCXN0cnVjdCBwcm9iZV90cmFjZV9wb2ludCAqdHA7CisJaW50IG51bV9tYXRjaGVkX2Z1bmN0aW9uczsKIAlpbnQgcmV0LCBpOwogCiAJLyogSW5pdCBtYXBzIG9mIGdpdmVuIGV4ZWN1dGFibGUgb3Iga2VybmVsICovCkBAIC0yMjM4LDEwICsyMjQxLDggQEAKIAkgKiBMb2FkIG1hdGNoZWQgc3ltYm9sczogU2luY2UgdGhlIGRpZmZlcmVudCBsb2NhbCBzeW1ib2xzIG1heSBoYXZlCiAJICogc2FtZSBuYW1lIGJ1dCBkaWZmZXJlbnQgYWRkcmVzc2VzLCB0aGlzIGxpc3RzIGFsbCB0aGUgc3ltYm9scy4KIAkgKi8KLQludW1fbWF0Y2hlZF9mdW5jdGlvbnMgPSAwOwotCWxvb2tpbmdfZnVuY3Rpb25fbmFtZSA9IHBwLT5mdW5jdGlvbjsKLQlyZXQgPSBtYXBfX2xvYWQobWFwLCBwcm9iZV9mdW5jdGlvbl9maWx0ZXIpOwotCWlmIChyZXQgfHwgbnVtX21hdGNoZWRfZnVuY3Rpb25zID09IDApIHsKKwludW1fbWF0Y2hlZF9mdW5jdGlvbnMgPSBmaW5kX3Byb2JlX2Z1bmN0aW9ucyhtYXAsIHBwLT5mdW5jdGlvbik7CisJaWYgKG51bV9tYXRjaGVkX2Z1bmN0aW9ucyA9PSAwKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGZpbmQgc3ltYm9sICVzIGluICVzXG4iLCBwcC0+ZnVuY3Rpb24sCiAJCQl0YXJnZXQgPyA6ICJrZXJuZWwiKTsKIAkJcmV0ID0gLUVOT0VOVDsKQEAgLTIyNTMsNyArMjI1NCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghcGV2LT51cHJvYmVzKSB7CisJaWYgKCFwZXYtPnVwcm9iZXMgJiYgIXBwLT5yZXRwcm9iZSkgewogCQlrbWFwID0gbWFwX19rbWFwKG1hcCk7CiAJCXJlbG9jX3N5bSA9IGttYXAtPnJlZl9yZWxvY19zeW07CiAJCWlmICghcmVsb2Nfc3ltKSB7CkBAIC0yMjcxLDcgKzIyNzIsOCBAQAogCX0KIAogCXJldCA9IDA7Ci0JbWFwX19mb3JfZWFjaF9zeW1ib2wobWFwLCBzeW0sIG5kKSB7CisKKwltYXBfX2Zvcl9lYWNoX3N5bWJvbF9ieV9uYW1lKG1hcCwgcHAtPmZ1bmN0aW9uLCBzeW0pIHsKIAkJdGV2ID0gKCp0ZXZzKSArIHJldDsKIAkJdHAgPSAmdGV2LT5wb2ludDsKIAkJaWYgKHJldCA9PSBudW1fbWF0Y2hlZF9mdW5jdGlvbnMpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwppbmRleCBjNzkxOGY4Li5iNTI0N2Q3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCkBAIC05ODksOCArOTg5LDI0IEBACiAJaW50IHJldCA9IDA7CiAKICNpZiBfRUxGVVRJTFNfUFJFUkVRKDAsIDE0MikKKwlFbGYgKmVsZjsKKwlHRWxmX0VoZHIgZWhkcjsKKwlHRWxmX1NoZHIgc2hkcjsKKwogCS8qIEdldCB0aGUgY2FsbCBmcmFtZSBpbmZvcm1hdGlvbiBmcm9tIHRoaXMgZHdhcmYgKi8KLQlwZi0+Y2ZpID0gZHdhcmZfZ2V0Y2ZpX2VsZihkd2FyZl9nZXRlbGYoZGJnLT5kYmcpKTsKKwllbGYgPSBkd2FyZl9nZXRlbGYoZGJnLT5kYmcpOworCWlmIChlbGYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZ2VsZl9nZXRlaGRyKGVsZiwgJmVoZHIpID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGVsZl9zZWN0aW9uX2J5X25hbWUoZWxmLCAmZWhkciwgJnNoZHIsICIuZWhfZnJhbWUiLCBOVUxMKSAmJgorCSAgICBzaGRyLnNoX3R5cGUgPT0gU0hUX1BST0dCSVRTKSB7CisJCXBmLT5jZmkgPSBkd2FyZl9nZXRjZmlfZWxmKGVsZik7CisJfSBlbHNlIHsKKwkJcGYtPmNmaSA9IGR3YXJmX2dldGNmaShkYmctPmRiZyk7CisJfQogI2VuZGlmCiAKIAlvZmYgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi1leHQtc291cmNlcyBiL3Rvb2xzL3BlcmYvdXRpbC9weXRob24tZXh0LXNvdXJjZXMKaW5kZXggMTZhNDc1YS4uNmM2YTY5NSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi1leHQtc291cmNlcworKysgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLWV4dC1zb3VyY2VzCkBAIC0xMCw3ICsxMCw3IEBACiB1dGlsL2V2bGlzdC5jCiB1dGlsL2V2c2VsLmMKIHV0aWwvY3B1bWFwLmMKLXV0aWwvaHdlaWdodC5jCisuLi8uLi9saWIvaHdlaWdodC5jCiB1dGlsL3RocmVhZF9tYXAuYwogdXRpbC91dGlsLmMKIHV0aWwveHlhcnJheS5jCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggYzI0YzViOC4uYTE5NDcwMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMzk2LDYgKzM5Niw3IEBACiAJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByYl9ub2RlICpuOworCXN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlICpzOwogCiAJaWYgKHN5bWJvbHMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CkBAIC00MDMsNyArNDA0LDYgQEAKIAluID0gc3ltYm9scy0+cmJfbm9kZTsKIAogCXdoaWxlIChuKSB7Ci0JCXN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlICpzOwogCQlpbnQgY21wOwogCiAJCXMgPSByYl9lbnRyeShuLCBzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSwgcmJfbm9kZSk7CkBAIC00MTQsMTAgKzQxNCwyNCBAQAogCQllbHNlIGlmIChjbXAgPiAwKQogCQkJbiA9IG4tPnJiX3JpZ2h0OwogCQllbHNlCi0JCQlyZXR1cm4gJnMtPnN5bTsKKwkJCWJyZWFrOwogCX0KIAotCXJldHVybiBOVUxMOworCWlmIChuID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyogcmV0dXJuIGZpcnN0IHN5bWJvbCB0aGF0IGhhcyBzYW1lIG5hbWUgKGlmIGFueSkgKi8KKwlmb3IgKG4gPSByYl9wcmV2KG4pOyBuOyBuID0gcmJfcHJldihuKSkgeworCQlzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSAqdG1wOworCisJCXRtcCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlLCByYl9ub2RlKTsKKwkJaWYgKHN0cmNtcCh0bXAtPnN5bS5uYW1lLCBzLT5zeW0ubmFtZSkpCisJCQlicmVhazsKKworCQlzID0gdG1wOworCX0KKworCXJldHVybiAmcy0+c3ltOwogfQogCiBzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKmRzbywKQEAgLTQzNiw2ICs0NTAsMTcgQEAKIAlyZXR1cm4gc3ltYm9sc19fbmV4dChzeW0pOwogfQogCitzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xfX25leHRfYnlfbmFtZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnMgPSBjb250YWluZXJfb2Yoc3ltLCBzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSwgc3ltKTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJiX25leHQoJnMtPnJiX25vZGUpOworCisJcmV0dXJuIG4gPyAmcmJfZW50cnkobiwgc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUsIHJiX25vZGUpLT5zeW0gOiBOVUxMOworfQorCisgLyoKKyAgKiBUZXR1cm5zIGZpcnN0IHN5bWJvbCB0aGF0IG1hdGNoZWQgd2l0aCBAbmFtZS4KKyAgKi8KIHN0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAppbmRleCA5ZDYwMmU5Li4xNjUwZGNiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCkBAIC0yMzEsNiArMjMxLDcgQEAKIAkJCQl1NjQgYWRkcik7CiBzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUsCiAJCQkJCWNvbnN0IGNoYXIgKm5hbWUpOworc3RydWN0IHN5bWJvbCAqc3ltYm9sX19uZXh0X2J5X25hbWUoc3RydWN0IHN5bWJvbCAqc3ltKTsKIAogc3RydWN0IHN5bWJvbCAqZHNvX19maXJzdF9zeW1ib2woc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogc3RydWN0IHN5bWJvbCAqZHNvX19uZXh0X3N5bWJvbChzdHJ1Y3Qgc3ltYm9sICpzeW0pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYyBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGlidW53aW5kLmMKaW5kZXggMzcxMjE5YS4uNmVkZjUzNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYworKysgYi90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYnVud2luZC5jCkBAIC0xODUsNiArMTg1LDI4IEBACiAJcmV0dXJuIG9mZnNldDsKIH0KIAorI2lmbmRlZiBOT19MSUJVTldJTkRfREVCVUdfRlJBTUUKK3N0YXRpYyBpbnQgZWxmX2lzX2V4ZWMoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKQoreworCUVsZiAqZWxmOworCUdFbGZfRWhkciBlaGRyOworCWludCByZXR2YWwgPSAwOworCisJZWxmID0gZWxmX2JlZ2luKGZkLCBQRVJGX0VMRl9DX1JFQURfTU1BUCwgTlVMTCk7CisJaWYgKGVsZiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2VsZl9nZXRlaGRyKGVsZiwgJmVoZHIpID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmV0dmFsID0gKGVoZHIuZV90eXBlID09IEVUX0VYRUMpOworCitvdXQ6CisJZWxmX2VuZChlbGYpOworCXByX2RlYnVnKCJ1bndpbmQ6IGVsZl9pc19leGVjKCVzKTogJWRcbiIsIG5hbWUsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZgorCiBzdHJ1Y3QgdGFibGVfZW50cnkgewogCXUzMiBzdGFydF9pcF9vZmZzZXQ7CiAJdTMyIGZkZV9vZmZzZXQ7CkBAIC0zMjIsOCArMzQ0LDEyIEBACiAjaWZuZGVmIE5PX0xJQlVOV0lORF9ERUJVR19GUkFNRQogCS8qIENoZWNrIHRoZSAuZGVidWdfZnJhbWUgc2VjdGlvbiBmb3IgdW53aW5kaW5nIGluZm8gKi8KIAlpZiAoIXJlYWRfdW53aW5kX3NwZWNfZGVidWdfZnJhbWUobWFwLT5kc28sIHVpLT5tYWNoaW5lLCAmc2VnYmFzZSkpIHsKKwkJaW50IGZkID0gZHNvX19kYXRhX2ZkKG1hcC0+ZHNvLCB1aS0+bWFjaGluZSk7CisJCWludCBpc19leGVjID0gZWxmX2lzX2V4ZWMoZmQsIG1hcC0+ZHNvLT5uYW1lKTsKKwkJdW53X3dvcmRfdCBiYXNlID0gaXNfZXhlYyA/IDAgOiBtYXAtPnN0YXJ0OworCiAJCW1lbXNldCgmZGksIDAsIHNpemVvZihkaSkpOwotCQlpZiAoZHdhcmZfZmluZF9kZWJ1Z19mcmFtZSgwLCAmZGksIGlwLCAwLCBtYXAtPmRzby0+bmFtZSwKKwkJaWYgKGR3YXJmX2ZpbmRfZGVidWdfZnJhbWUoMCwgJmRpLCBpcCwgYmFzZSwgbWFwLT5kc28tPm5hbWUsCiAJCQkJCSAgIG1hcC0+c3RhcnQsIG1hcC0+ZW5kKSkKIAkJCXJldHVybiBkd2FyZl9zZWFyY2hfdW53aW5kX3RhYmxlKGFzLCBpcCwgJmRpLCBwaSwKIAkJCQkJCQkgbmVlZF91bndpbmRfaW5mbywgYXJnKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jCmluZGV4IDdjZGNmODguLjllYTkxNDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLmMKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXIuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJfQogCiAJZ2V0X2NwdV9pbmZvKDAsICZjcHVwb3dlcl9jcHVfaW5mbyk7Ci0JcnVuX2FzX3Jvb3QgPSAhZ2V0dWlkKCk7CisJcnVuX2FzX3Jvb3QgPSAhZ2V0ZXVpZCgpOwogCWlmIChydW5fYXNfcm9vdCkgewogCQlyZXQgPSB1bmFtZSgmdXRzKTsKIAkJaWYgKCFyZXQgJiYgIXN0cmNtcCh1dHMubWFjaGluZSwgIng4Nl82NCIpICYmCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmMKaW5kZXggMDlhZmU1ZC4uNGU4ZmUyYyAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5jCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuYwpAQCAtMzYxLDcgKzM2MSw3IEBACiAKIAlzbnByaW50ZihmaWxlLCBTWVNGU19QQVRIX01BWCwgUEFUSF9UT19DUFUgImNwdWlkbGUiKTsKIAlpZiAoc3RhdChmaWxlLCAmc3RhdGJ1ZikgIT0gMCB8fCAhU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDA7CiAKIAlzbnByaW50ZihmaWxlLCBTWVNGU19QQVRIX01BWCwgUEFUSF9UT19DUFUgImNwdSV1L2NwdWlkbGUvc3RhdGUwIiwgY3B1KTsKIAlpZiAoc3RhdChmaWxlLCAmc3RhdGJ1ZikgIT0gMCB8fCAhU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9leGVjdmVhdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9leGVjdmVhdC5jCmluZGV4IDMzYTVjMDYuLmUyMzhjOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvZXhlY3ZlYXQuYworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2V4ZWN2ZWF0LmMKQEAgLTYyLDcgKzYyLDcgQEAKIH0KIAogc3RhdGljIGludCBjaGVja19leGVjdmVhdF9pbnZva2VkX3JjKGludCBmZCwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLAotCQkJCSAgICAgaW50IGV4cGVjdGVkX3JjKQorCQkJCSAgICAgaW50IGV4cGVjdGVkX3JjLCBpbnQgZXhwZWN0ZWRfcmMyKQogewogCWludCBzdGF0dXM7CiAJaW50IHJjOwpAQCAtOTgsOSArOTgsMTAgQEAKIAkJCWNoaWxkLCBzdGF0dXMpOwogCQlyZXR1cm4gMTsKIAl9Ci0JaWYgKFdFWElUU1RBVFVTKHN0YXR1cykgIT0gZXhwZWN0ZWRfcmMpIHsKLQkJcHJpbnRmKCJbRkFJTF0gKGNoaWxkICVkIGV4aXRlZCB3aXRoICVkIG5vdCAlZClcbiIsCi0JCQljaGlsZCwgV0VYSVRTVEFUVVMoc3RhdHVzKSwgZXhwZWN0ZWRfcmMpOworCWlmICgoV0VYSVRTVEFUVVMoc3RhdHVzKSAhPSBleHBlY3RlZF9yYykgJiYKKwkgICAgKFdFWElUU1RBVFVTKHN0YXR1cykgIT0gZXhwZWN0ZWRfcmMyKSkgeworCQlwcmludGYoIltGQUlMXSAoY2hpbGQgJWQgZXhpdGVkIHdpdGggJWQgbm90ICVkIG5vciAlZClcbiIsCisJCQljaGlsZCwgV0VYSVRTVEFUVVMoc3RhdHVzKSwgZXhwZWN0ZWRfcmMsIGV4cGVjdGVkX3JjMik7CiAJCXJldHVybiAxOwogCX0KIAlwcmludGYoIltPS11cbiIpOwpAQCAtMTA5LDcgKzExMCw3IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfZXhlY3ZlYXQoaW50IGZkLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpCiB7Ci0JcmV0dXJuIGNoZWNrX2V4ZWN2ZWF0X2ludm9rZWRfcmMoZmQsIHBhdGgsIGZsYWdzLCA5OSk7CisJcmV0dXJuIGNoZWNrX2V4ZWN2ZWF0X2ludm9rZWRfcmMoZmQsIHBhdGgsIGZsYWdzLCA5OSwgOTkpOwogfQogCiBzdGF0aWMgY2hhciAqY29uY2F0KGNvbnN0IGNoYXIgKmxlZnQsIGNvbnN0IGNoYXIgKnJpZ2h0KQpAQCAtMTc5LDExICsxODAsMTEgQEAKIAkgKi8KIAlmZCA9IG9wZW4obG9uZ3BhdGgsIE9fUkRPTkxZKTsKIAlpZiAoZmQgPiAwKSB7Ci0JCXByaW50ZigiSW52b2tlIGNvcHkgb2YgJyVzJyB2aWEgZmlsZW5hbWUgb2YgbGVuZ3RoICVsdTpcbiIsCisJCXByaW50ZigiSW52b2tlIGNvcHkgb2YgJyVzJyB2aWEgZmlsZW5hbWUgb2YgbGVuZ3RoICV6dTpcbiIsCiAJCQlzcmMsIHN0cmxlbihsb25ncGF0aCkpOwogCQlmYWlsICs9IGNoZWNrX2V4ZWN2ZWF0KGZkLCAiIiwgQVRfRU1QVFlfUEFUSCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRmKCJGYWlsZWQgdG8gb3BlbiBsZW5ndGggJWx1IGZpbGVuYW1lLCBlcnJubz0lZCAoJXMpXG4iLAorCQlwcmludGYoIkZhaWxlZCB0byBvcGVuIGxlbmd0aCAlenUgZmlsZW5hbWUsIGVycm5vPSVkICglcylcbiIsCiAJCQlzdHJsZW4obG9uZ3BhdGgpLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKIAkJZmFpbCsrOwogCX0KQEAgLTE5Miw5ICsxOTMsMTUgQEAKIAkgKiBFeGVjdXRlIGFzIGEgbG9uZyBwYXRobmFtZSByZWxhdGl2ZSB0byAiLiIuICBJZiB0aGlzIGlzIGEgc2NyaXB0LAogCSAqIHRoZSBpbnRlcnByZXRlciB3aWxsIGxhdW5jaCBidXQgZmFpbCB0byBvcGVuIHRoZSBzY3JpcHQgYmVjYXVzZSBpdHMKIAkgKiBuYW1lICgiL2Rldi9mZC81L3h4eC4uLi4iKSBpcyBiaWdnZXIgdGhhbiBQQVRIX01BWC4KKwkgKgorCSAqIFRoZSBmYWlsdXJlIGNvZGUgaXMgdXN1YWxseSAxMjcgKFBPU0lYOiAiSWYgYSBjb21tYW5kIGlzIG5vdCBmb3VuZCwKKwkgKiB0aGUgZXhpdCBzdGF0dXMgc2hhbGwgYmUgMTI3LiIpLCBidXQgc29tZSBzeXN0ZW1zIGdpdmUgMTI2IChQT1NJWDoKKwkgKiAiSWYgdGhlIGNvbW1hbmQgbmFtZSBpcyBmb3VuZCwgYnV0IGl0IGlzIG5vdCBhbiBleGVjdXRhYmxlIHV0aWxpdHksCisJICogdGhlIGV4aXQgc3RhdHVzIHNoYWxsIGJlIDEyNi4iKSwgc28gYWxsb3cgZWl0aGVyLgogCSAqLwogCWlmIChpc19zY3JpcHQpCi0JCWZhaWwgKz0gY2hlY2tfZXhlY3ZlYXRfaW52b2tlZF9yYyhkb3RfZGZkLCBsb25ncGF0aCwgMCwgMTI3KTsKKwkJZmFpbCArPSBjaGVja19leGVjdmVhdF9pbnZva2VkX3JjKGRvdF9kZmQsIGxvbmdwYXRoLCAwLAorCQkJCQkJICAxMjcsIDEyNik7CiAJZWxzZQogCQlmYWlsICs9IGNoZWNrX2V4ZWN2ZWF0KGRvdF9kZmQsIGxvbmdwYXRoLCAwKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbXF1ZXVlL21xX3BlcmZfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21xdWV1ZS9tcV9wZXJmX3Rlc3RzLmMKaW5kZXggOTRkYWU2NS4uODUxOWU5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbXF1ZXVlL21xX3BlcmZfdGVzdHMuYworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tcXVldWUvbXFfcGVyZl90ZXN0cy5jCkBAIC01MzYsMTAgKzUzNiw5IEBACiB7CiAJc3RydWN0IG1xX2F0dHIgYXR0cjsKIAljaGFyICpvcHRpb24sICpuZXh0X29wdGlvbjsKLQlpbnQgaSwgY3B1OworCWludCBpLCBjcHUsIHJjOwogCXN0cnVjdCBzaWdhY3Rpb24gc2E7CiAJcG9wdENvbnRleHQgcG9wdF9jb250ZXh0OwotCWNoYXIgcmM7CiAJdm9pZCAqcmV0dmFsOwogCiAJbWFpbl90aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZtL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdm0vTWFrZWZpbGUKaW5kZXggNGM0YjFmNi4uMDc3ODI4YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdm0vTWFrZWZpbGUKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdm0vTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAKIGFsbDogJChCSU5BUklFUykKICU6ICUuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXgorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXiAtbHJ0CiAKIHJ1bl90ZXN0czogYWxsCiAJQC9iaW4vc2ggLi9ydW5fdm10ZXN0cyB8fCAoZWNobyAidm10ZXN0czogW0ZBSUxdIjsgZXhpdCAxKQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggZjUyODM0My4uMWNjNmUyZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC02NzEsNiArNjcxLDcgQEAKIAogCVdBUk5fT04obXNsb3RzW2ldLmlkICE9IGlkKTsKIAlpZiAoIW5ldy0+bnBhZ2VzKSB7CisJCVdBUk5fT04oIW1zbG90c1tpXS5ucGFnZXMpOwogCQluZXctPmJhc2VfZ2ZuID0gMDsKIAkJaWYgKG1zbG90c1tpXS5ucGFnZXMpCiAJCQlzbG90cy0+dXNlZF9zbG90cy0tOwpAQCAtNjg3LDEyICs2ODgsMjUgQEAKIAkJc2xvdHMtPmlkX3RvX2luZGV4W21zbG90c1tpXS5pZF0gPSBpOwogCQlpKys7CiAJfQotCXdoaWxlIChpID4gMCAmJgotCSAgICAgICBuZXctPmJhc2VfZ2ZuID4gbXNsb3RzW2kgLSAxXS5iYXNlX2dmbikgewotCQltc2xvdHNbaV0gPSBtc2xvdHNbaSAtIDFdOwotCQlzbG90cy0+aWRfdG9faW5kZXhbbXNsb3RzW2ldLmlkXSA9IGk7Ci0JCWktLTsKLQl9CisKKwkvKgorCSAqIFRoZSAiPj0iIGlzIG5lZWRlZCB3aGVuIGNyZWF0aW5nIGEgc2xvdCB3aXRoIGJhc2VfZ2ZuID09IDAsCisJICogc28gdGhhdCBpdCBtb3ZlcyBiZWZvcmUgYWxsIHRob3NlIHdpdGggYmFzZV9nZm4gPT0gbnBhZ2VzID09IDAuCisJICoKKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgbmV3LT5ucGFnZXMgaXMgemVybywgdGhlIGFib3ZlIGxvb3AgaGFzCisJICogYWxyZWFkeSBsZWZ0IGkgcG9pbnRpbmcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZW1wdHkgcGFydCBvZgorCSAqIG1zbG90cywgYW5kIHRoZSAiPj0iIHdvdWxkIG1vdmUgdGhlIGhvbGUgYmFja3dhcmRzIGluIHRoaXMKKwkgKiBjYXNlLS0td2hpY2ggaXMgd3JvbmcuICBTbyBza2lwIHRoZSBsb29wIHdoZW4gZGVsZXRpbmcgYSBzbG90LgorCSAqLworCWlmIChuZXctPm5wYWdlcykgeworCQl3aGlsZSAoaSA+IDAgJiYKKwkJICAgICAgIG5ldy0+YmFzZV9nZm4gPj0gbXNsb3RzW2kgLSAxXS5iYXNlX2dmbikgeworCQkJbXNsb3RzW2ldID0gbXNsb3RzW2kgLSAxXTsKKwkJCXNsb3RzLT5pZF90b19pbmRleFttc2xvdHNbaV0uaWRdID0gaTsKKwkJCWktLTsKKwkJfQorCX0gZWxzZQorCQlXQVJOX09OX09OQ0UoaSAhPSBzbG90cy0+dXNlZF9zbG90cyk7CiAKIAltc2xvdHNbaV0gPSAqbmV3OwogCXNsb3RzLT5pZF90b19pbmRleFttc2xvdHNbaV0uaWRdID0gaTsK