ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiIGIvRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IKaW5kZXggYzdlZDAxYi4uYWMwNzk3ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IKQEAgLTEzLDE0ICsxMywxNyBAQAogVGhlIGZyYW1ld29yayBwcm92aWRlcyBnZW5lcmljIGZ1bmN0aW9ucyAobW9zdGx5IGtlcm5lbCBBUEkgY2FsbHMpLCBzdWNoIGFzOgogCiAtIFRyYW5zcG9ydCBTdHJlYW0gVVJCIGhhbmRsaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggZHZiLWRlbXV4LWZlZWQtY29udHJvbAotICAoYnVsayBhbmQgaXNvYyAoVE9ETykgYXJlIHN1cHBvcnRlZCkKKyAgKGJ1bGsgYW5kIGlzb2MgYXJlIHN1cHBvcnRlZCkKIC0gcmVnaXN0ZXJpbmcgdGhlIGRldmljZSBmb3IgdGhlIERWQi1BUEkKIC0gcmVnaXN0ZXJpbmcgYW4gSTJDLWFkYXB0ZXIgaWYgYXBwbGljYWJsZQogLSByZW1vdGUtY29udHJvbC9pbnB1dC1kZXZpY2UgaGFuZGxpbmcKIC0gZmlybXdhcmUgcmVxdWVzdGluZyBhbmQgbG9hZGluZyAoY3VycmVudGx5IGp1c3QgZm9yIHRoZSBDeXByZXNzIFVTQgotICBjb250cm9sbGVyKQorICBjb250cm9sbGVycykKIC0gb3RoZXIgZnVuY3Rpb25zL21ldGhvZHMgd2hpY2ggY2FuIGJlIHNoYXJlZCBieSBzZXZlcmFsIGRyaXZlcnMgKHN1Y2ggYXMKICAgZnVuY3Rpb25zIGZvciBidWxrLWNvbnRyb2wtY29tbWFuZHMpCistIFRPRE86IGEgSTJDLWNodW5rZXIuIEl0IGNyZWF0ZXMgZGV2aWNlLXNwZWNpZmljIGNodW5rcyBvZiByZWdpc3Rlci1hY2Nlc3NlcworICBkZXBlbmRpbmcgb24gbGVuZ3RoIG9mIGEgcmVnaXN0ZXIgYW5kIHRoZSBudW1iZXIgb2YgdmFsdWVzIHRoYXQgY2FuIGJlCisgIG11bHRpLXdyaXR0ZW4gYW5kIG11bHRpLXJlYWQuCiAKIFRoZSBzb3VyY2UgY29kZSBvZiB0aGUgcGFydGljdWxhciBEVkIgVVNCIGRldmljZXMgZG9lcyBqdXN0IHRoZSBjb21tdW5pY2F0aW9uCiB3aXRoIHRoZSBkZXZpY2UgdmlhIHRoZSBidXMuIFRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIERWQi1BUEktZnVuY3Rpb25hbGl0eQpAQCAtMzYsOTMgKzM5LDE4IEBACiBUT0RPOiBkeW5hbWljIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YgdGhlIHBpZC1maWx0ZXIgaW4gcmVnYXJkIHRvIG51bWJlciBvZgogZmVlZHMgcmVxdWVzdGVkLgogCi1TdXBwb3J0ZWQgZGV2aWNlcyBVU0IxLjEKK1N1cHBvcnRlZCBkZXZpY2VzCiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotUHJvZHVjZWQgYW5kIHJlc2VsbGVkIGJ5IFR3aW5oYW46Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gVHdpbmhhbkRUViBVU0ItVGVyIERWQi1UIERldmljZSAoVlA3MDQxKQotCWh0dHA6Ly93d3cudHdpbmhhbi5jb20vcHJvZHVjdF90ZXJyZXN0cmlhbF8zLmFzcAorU2VlIHRoZSBMaW51eFRWIERWQiBXaWtpIGF0IHd3dy5saW51eHR2Lm9yZyBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mCitjYXJkcy9kcml2ZXJzL2Zpcm13YXJlczoKIAotLSBUd2luaGFuRFRWIE1hZ2ljIEJveCAoVlA3MDQxZSkKLQlodHRwOi8vd3d3LnR3aW5oYW4uY29tL3Byb2R1Y3RfdGVycmVzdHJpYWxfNC5hc3AKLQotLSBIQU1BIERWQi1UIFVTQiBkZXZpY2UKLQlodHRwOi8vd3d3LmhhbWEuZGUvcG9ydGFsL2FydGljbGVJZCoxMTA2MjAvYWN0aW9uKjI1OTgKLQotLSBDVFMgUG9ydGFibGUgKENoaW5lc2UgVGVsZXZpc2lvbiBTeXN0ZW0pICgyKQotCWh0dHA6Ly93d3cuMmN0cy50di9jdHNwb3J0YWJsZS8KLQotLSBVbmtub3duIFVTQiBEVkItVCBkZXZpY2Ugd2l0aCB2ZW5kb3IgSUQgSHlwZXItUGFsdGVrCi0KLQotUHJvZHVjZWQgYW5kIHJlc2VsbGVkIGJ5IEtXb3JsZDoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIEtXb3JsZCBWLVN0cmVhbSBYUEVSVCBEVFYgRFZCLVQgVVNCCi0JaHR0cDovL3d3dy5rd29ybGQuY29tLnR3L2VuL3Byb2R1Y3QvRFZCVC1VU0IvRFZCVC1VU0IuaHRtbAotCi0tIEpldFdheSBEVFYgRFZCLVQgVVNCCi0JaHR0cDovL3d3dy5qZXR3YXkuY29tLnR3L2V2aXNuL3Byb2R1Y3QvbGNkLXR2L0RWVC1VU0IvZHR2LXVzYi5odG0KLQotLSBBRFNUZWNoIEluc3RhbnQgVFYgRFZCLVQgVVNCCi0JaHR0cDovL3d3dy5hZHN0ZWNoLmNvbS9wcm9kdWN0cy9QVFYtMzMzL2ludHJvL1BUVi0zMzNfaW50cm8uYXNwP3BpZD1QVFYtMzMzCi0KLQotT3RoZXJzOgotLS0tLS0tLQotLSBVbHRpbWEgRWxlY3Ryb25pYy9BcnRlYyBUMSBVU0IgVFZCT1ggKEFOMjEzNSwgQU4yMjM1LCBBTjIyMzUgd2l0aCBQYW5hc29uaWMgVHVuZXIpCi0JaHR0cDovLzgyLjE2MS4yNDYuMjQ5L3Byb2R1Y3RzLXR2Ym94Lmh0bWwKLQotLSBDb21wcm8gVmlkZW9tYXRlIERWQi1VMjAwMCAtIERWQi1UIFVTQiAoMikKLQlodHRwOi8vd3d3LmNvbXByb3VzYS5jb20vcHJvZHVjdHMvdm11MjAwMC5odG0KLQotLSBHcmFuZHRlYyBVU0IgRFZCLVQKLQlodHRwOi8vd3d3LmdyYW5kLmNvbS50dy8KLQotLSBBVmVyTWVkaWEgQXZlclRWIERWQlQgVVNCCi0JaHR0cDovL3d3dy5hdmVybWVkaWEuY29tLwotCi0tIERpQmNvbSBVU0IgRFZCLVQgcmVmZXJlbmNlIGRldmljZSAobm9uLXB1YmxpYykKLQotCi1TdXBwb3J0ZWQgZGV2aWNlcyBVU0IyLjAtb25seQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0gVHdpbmhhbiBNYWdpY0JveCBJSQotCWh0dHA6Ly93d3cudHdpbmhhbi5jb20vcHJvZHVjdF90ZXJyZXN0cmlhbF83LmFzcAotCi0tIFR3aW5oYW5EVFYgQWxwaGEKLQlodHRwOi8vd3d3LnR3aW5oYW4uY29tL3Byb2R1Y3RfdGVycmVzdHJpYWxfOC5hc3AKLQotLSBEaWdpdGFsTm93IFRpbnlVU0IgMiBEVkItdCBSZWNlaXZlcgotCWh0dHA6Ly93d3cuZGlnaXRhbG5vdy5jb20uYXUvRGlnaXRhbE5vdyUyMHRpbnlVU0IyJTIwU3BlY2lmaWNhdGlvbnMuaHRtbAotCi0tIEhhbmZ0ZWsgVU1ULTAxMAotCWh0dHA6Ly93d3cuZ2xvYmFsc291cmNlcy5jb20vc2kvNjAwODgxOTc1NzA4Mi9Qcm9kdWN0RGV0YWlsL0RpZ2l0YWwtVFYvcHJvZHVjdF9pZC0xMDAwNDY1MjkKLQotCi1TdXBwb3J0ZWQgZGV2aWNlcyBVU0IyLjAgYW5kIFVTQjEuMQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0gVHlwaG9vbi9ZYWt1bW8vSEFNQS9ZdWFuIERWQi1UIG1vYmlsZSBVU0IyLjAKLQlodHRwOi8vd3d3Lnlha3Vtby5kZS9wcm9kdWt0ZS9pbmRleC5waHA/cGlkPTEmYWc9RFZCLVQKLQlodHRwOi8vd3d3Lnl1YW4uY29tLnR3L2VuL3Byb2R1Y3RzL3Zkb191YjMwMC5odG1sCi0JaHR0cDovL3d3dy5oYW1hLmRlL3BvcnRhbC9hcnRpY2xlSWQqMTE0NjYzL2FjdGlvbioyNTYzCi0JaHR0cDovL3d3dy5hbnViaXNsaW5lLmNvbS9lbmdsaXNoL2FydGljbGVjLmFzcD9pZD01MDUwMiZjYXRpZD0wMDIKLQotLSBBcnRlYyBUMSBVU0IgVFZCT1ggKEZYMikgKDIpCi0KLS0gSGF1cHBhdWdlIFdpblRWIE5PVkEtVCBVU0IyCi0JaHR0cDovL3d3dy5oYXVwcGF1Z2UuY29tLwotCi0tIEtXb3JsZC9BRFNUZWNoIEluc3RhbnQgRFZCLVQgVVNCMi4wIChEaUIzMDAwTS1CKQotCi0tIERpQmNvbSBVU0IyLjAgRFZCLVQgcmVmZXJlbmNlIGRldmljZSAobm9uLXB1YmxpYykKLQotLSBBVmVyTWVkaWEgQXZlclRWIEE4MDAgRFZCLVQgVVNCMi4wCi0KLTEpIEl0IGlzIHdvcmtpbmcgYWxtb3N0IC0gd29yay1pbi1wcm9ncmVzcy4KLTIpIE5vIHRlc3QgcmVwb3J0cyByZWNlaXZlZCB5ZXQuCitodHRwOi8vd3d3LmxpbnV4dHYub3JnL3dpa2kvaW5kZXgucGhwL0RWQl9VU0IKIAogMC4gSGlzdG9yeSAmIE5ld3M6CisgIDIwMDUtMDYtMzAgLSBhZGRlZCBzdXBwb3J0IGZvciBXaWRlVmlldyBXVC0yMjBVIChUaGFua3MgdG8gU3RldmUgQ2hhbmcpCisgIDIwMDUtMDUtMzAgLSBhZGRlZCBiYXNpYyBpc29jaHJvbm91cyBzdXBwb3J0IHRvIHRoZSBkdmItdXNiLWZyYW1ld29yaworICAgICAgICAgICAgICAgYWRkZWQgc3VwcG9ydCBmb3IgQ29uZXhhbnQgSHlicmlkIHJlZmVyZW5jZSBkZXNpZ24gYW5kIE5lYnVsYSBEaWdpVFYgVVNCCiAgIDIwMDUtMDQtMTcgLSBhbGwgZGlidXNiIGRldmljZXMgcG9ydGVkIHRvIG1ha2UgdXNlIG9mIHRoZSBkdmItdXNiLWZyYW1ld29yawogICAyMDA1LTA0LTAyIC0gcmUtZW5hYmxlZCBhbmQgaW1wcm92ZWQgcmVtb3RlIGNvbnRyb2wgY29kZS4KICAgMjAwNS0wMy0zMSAtIHBvcnRlZCB0aGUgWWFrdW1vL0hhbWEvVHlwaG9vbiBEVkItVCBVU0IyLjAgZGV2aWNlIHRvIGR2Yi11c2IuCkBAIC0xMzcsNyArNjUsNyBAQAogICAyMDA1LTAxLTMxIC0gZGlzdG9ydGVkIHN0cmVhbWluZyBpcyBnb25lIGZvciBVU0IxLjEgZGV2aWNlcwogICAyMDA1LTAxLTEzIC0gbW92ZWQgdGhlIG1pcnJvcmVkIHBpZF9maWx0ZXJfdGFibGUgYmFjayB0byBkdmItZGlidXNiCiAgICAgICAgICAgICAgLSBmaXJzdCBhbG1vc3Qgd29ya2luZyB2ZXJzaW9uIGZvciBIYW5mVGVrIFVNVC0wMTAKLSAgICAgICAgICAgICAtIGZvdW5kIG91dCwgdGhhdCBZYWt1bW8vSEFNQS9UeXBob29uIGFyZSBwcmVkZXNzb3JzIG9mIHRoZSBIYW5mVGVrIFVNVC0wMTAKKyAgICAgICAgICAgICAtIGZvdW5kIG91dCwgdGhhdCBZYWt1bW8vSEFNQS9UeXBob29uIGFyZSBwcmVkZWNlc3NvcnMgb2YgdGhlIEhhbmZUZWsgVU1ULTAxMAogICAyMDA1LTAxLTEwIC0gcmVmYWN0b3JpbmcgY29tcGxldGVkLCBub3cgZXZlcnl0aGluZyBpcyB2ZXJ5IGRlbGlnaHRmdWwKICAgICAgICAgICAgICAtIHR1bmVyIHF1aXJrcyBmb3Igc29tZSB3ZWlyZCBkZXZpY2VzIChBcnRlYyBUMSBBTjIyMzUgZGV2aWNlIGhhcyBzb21ldGltZXMgYQogICAgICAgICAgICAgICAgUGFuYXNvbmljIFR1bmVyIGFzc2VtYmxlZCkuIFR1bmVycHJvYmluZyBpbXBsZW1lbnRlZC4gVGhhbmtzIGEgbG90IHRvIEd1bm5hciBXaXR0aWNoLgpAQCAtMTg3LDI1ICsxMTUsMTMgQEAKIDEuIEhvdyB0byB1c2U/CiAxLjEuIEZpcm13YXJlCiAKLU1vc3Qgb2YgdGhlIFVTQiBkcml2ZXJzIG5lZWQgdG8gZG93bmxvYWQgYSBmaXJtd2FyZSB0byBzdGFydCB3b3JraW5nLgorTW9zdCBvZiB0aGUgVVNCIGRyaXZlcnMgbmVlZCB0byBkb3dubG9hZCBhIGZpcm13YXJlIHRvIHRoZSBkZXZpY2UgYmVmb3JlIHN0YXJ0Cit3b3JraW5nLgogCi1mb3IgVVNCMS4xIChBTjIxMzUpIHlvdSBuZWVkOiBkdmItdXNiLWRpYnVzYi01LjAuMC4xMS5mdwotZm9yIFVTQjIuMCBIYW5mVGVrOiBkdmItdXNiLXVtdC0wMTAtMDIuZncKLWZvciBVU0IyLjAgRGlCY29tOiBkdmItdXNiLWRpYnVzYi02LjAuMC44LmZ3Ci1mb3IgVVNCMi4wIEFWZXJNZWRpYSBBdmVyVFYgRFZCLVQgVVNCMjogZHZiLXVzYi1hdmVydHYtYTgwMC0wMS5mdwotZm9yIFVTQjIuMCBUd2luaGFuRFRWIEFscGhhL01hZ2ljQm94IElJOiBkdmItdXNiLXZwNzA0NS0wMS5mdworSGF2ZSBhIGxvb2sgYXQgdGhlIFdpa2lwYWdlIGZvciB0aGUgRFZCLVVTQi1kcml2ZXJzIHRvIGZpbmQgb3V0LCB3aGljaCBmaXJtd2FyZQoreW91IG5lZWQgZm9yIHlvdXIgZGV2aWNlOgogCi1UaGUgZmlsZXMgY2FuIGJlIGZvdW5kIG9uIGh0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWQvZmlybXdhcmUvIC4KLQotV2UgZG8gbm90IGhhdmUgdGhlIHBlcm1pc3Npb24gKHlldCkgdG8gcHVibGlzaCB0aGUgZm9sbG93aW5nIGZpcm13YXJlLWZpbGVzLgotWW91J2xsIG5lZWQgdG8gZXh0cmFjdCB0aGVtIGZyb20gdGhlIHdpbmRvd3MgZHJpdmVycy4KLQotWW91IHNob3VsZCBiZSBhYmxlIHRvIHVzZSAiZ2V0X2R2Yl9maXJtd2FyZSBkdmItdXNiIiB0byBnZXQgdGhlIGZpcm13YXJlOgotCi1mb3IgVVNCMS4xIChBTjIyMzUpIChhIGZldyBBcnRlYyBUMSBkZXZpY2VzKTogZHZiLXVzYi1kaWJ1c2ItYW4yMjM1LTAxLmZ3Ci1mb3IgVVNCMi4wIEhhdXBwYXVnZTogZHZiLXVzYi1ub3ZhLXQtdXNiMi0wMS5mdwotZm9yIFVTQjIuMCBBRFNUZWNoL0t3b3JsZCBVU0IyLjA6IGR2Yi11c2ItYWRzdGVjaC11c2IyLTAxLmZ3Ci1mb3IgVVNCMi4wIFlha3Vtby9UeXBob29uL0hhbWE6IGR2Yi11c2ItZHR0MjAwdS0wMS5mdworaHR0cDovL3d3dy5saW51eHR2Lm9yZy93aWtpL2luZGV4LnBocC9EVkJfVVNCCiAKIDEuMi4gQ29tcGlsaW5nCiAKQEAgLTI4OSw2ICsyMDUsOSBAQAogICAgR3VubmFyIFdpdHRpY2ggYW5kIEpvYWNoaW0gdm9uIENhcm9uIGZvciB0aGVpciB0cnVzdCBmb3IgcHJvdmlkaW5nCiAgICAgcm9vdC1zaGVsbHMgb24gdGhlaXIgbWFjaGluZXMgdG8gaW1wbGVtZW50IHN1cHBvcnQgZm9yIG5ldyBkZXZpY2VzLgogCisgICBBbGxhbiBUaGlyZCBhbmQgTWljaGFlbCBIdXRjaGluc29uIGZvciB0aGVpciBoZWxwIHRvIHdyaXRlIHRoZSBOZWJ1bGEKKyAgICBkaWdpdHYtZHJpdmVyLgorCiAgICBHbGVuIEhhcnJpcyBmb3IgYnJpbmdpbmcgdXAsIHRoYXQgdGhlcmUgaXMgYSBuZXcgZGlidXNiLWRldmljZSBhbmQgSml1bi1LdWVpCiAgICAgSnVuZyBmcm9tIEFWZXJNZWRpYSB3aG8ga2luZGx5IHByb3ZpZGVkIGEgc3BlY2lhbCBmaXJtd2FyZSB0byBnZXQgdGhlIGRldmljZQogICAgIHVwIGFuZCBydW5uaW5nIGluIExpbnV4LgpAQCAtMjk2LDcgKzIxNSwxMiBAQAogICAgSmVubmlmZXIgQ2hlbiwgSmVmZiBhbmQgSmFjayBmcm9tIFR3aW5oYW4gZm9yIGtpbmRseSBzdXBwb3J0aW5nIGJ5CiAJd3JpdGluZyB0aGUgdnA3MDQ1LWRyaXZlci4KIAotICAgU29tZSBndXlzIG9uIHRoZSBsaW51eC1kdmIgbWFpbGluZyBsaXN0IGZvciBlbmNvdXJhZ2luZyBtZQorICAgU3RldmUgQ2hhbmcgZnJvbSBXaWRlVmlldyBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIGZvciBuZXcgZGV2aWNlcyBhbmQKKwlmaXJtd2FyZSBmaWxlcy4KKworICAgTWljaGFlbCBQYXh0b24gZm9yIHN1Ym1pdHRpbmcgcmVtb3RlIGNvbnRyb2wga2V5bWFwcy4KKworICAgU29tZSBndXlzIG9uIHRoZSBsaW51eC1kdmIgbWFpbGluZyBsaXN0IGZvciBlbmNvdXJhZ2luZyBtZS4KIAogICAgUGV0ZXIgU2NoaWxkbWFubiA+cGV0ZXIuc2NoaWxkbWFubi1ub3NwYW0tYXQtd2ViLmRlPCBmb3IgaGlzCiAgICAgdXNlci1sZXZlbCBmaXJtd2FyZSBsb2FkZXIsIHdoaWNoIHNhdmVzIGEgbG90IG9mIHRpbWUKQEAgLTMwNSw0ICsyMjksNCBAQAogICAgVWxmIEhlcm1lbmF1IGZvciBoZWxwaW5nIG1lIG91dCB3aXRoIHRyYWRpdGlvbmFsIGNoaW5lc2UuCiAKICAgIEFuZHLpIFNtb2t0dW4gYW5kIENocmlzdGlhbiBGcvZtbWVsIGZvciBzdXBwb3J0aW5nIG1lIHdpdGgKLSAgICBoYXJkd2FyZSBhbmQgbGlzdGVuaW5nIHRvIG15IHByb2JsZW1zIHZlcnkgcGF0aWVudC4KKyAgICBoYXJkd2FyZSBhbmQgbGlzdGVuaW5nIHRvIG15IHByb2JsZW1zIHZlcnkgcGF0aWVudGx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvYnQ4eHgudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvYnQ4eHgudHh0CmluZGV4IDNhMzI2MDcuLmU2YjhkMDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2J0OHh4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9idDh4eC50eHQKQEAgLTEsNjYgKzEsNTUgQEAKLUhvdyB0byBnZXQgdGhlIE5lYnVsYSwgUENUViBhbmQgVHdpbmhhbiBEU1QgY2FyZHMgd29ya2luZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitIb3cgdG8gZ2V0IHRoZSBOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWLCBQaW5uYWNsZSBQQ1RWIFNhdCwgVHdpbmhhbiBEU1QgKyBjbG9uZXMgd29ya2luZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhpcyBjbGFzcyBvZiBjYXJkcyBoYXMgYSBidDg3OGEgYXMgdGhlIFBDSSBpbnRlcmZhY2UsIGFuZAotcmVxdWlyZSB0aGUgYnR0diBkcml2ZXIuCisxKSBHZW5lcmFsIGluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09CiAKLVBsZWFzZSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXJuaW5nIGFib3V0IHRoZSBidHR2IG1vZHVsZQotb3B0aW9ucyBiZWxvdyBmb3IgdGhlIERTVCBjYXJkLgorVGhpcyBjbGFzcyBvZiBjYXJkcyBoYXMgYSBidDg3OGEgY2hpcCBhcyB0aGUgUENJIGludGVyZmFjZS4KK1RoZSBkaWZmZXJlbnQgY2FyZCBkcml2ZXJzIHJlcXVpcmUgdGhlIGJ0dHYgZHJpdmVyIHRvIHByb3ZpZGUgdGhlIG1lYW5zCit0byBhY2Nlc3MgdGhlIGkyYyBidXMgYW5kIHRoZSBncGlvIHBpbnMgb2YgdGhlIGJ0OHh4IGNoaXBzZXQuCiAKLTEpIEdlbmVyYWwgaW5mb3JtYXRpb25zCi09PT09PT09PT09PT09PT09PT09PT09PQorMikgQ29tcGlsYXRpb24gcnVsZXMgZm9yIEtlcm5lbCA+PSAyLjYuMTIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZXNlIGRyaXZlcnMgcmVxdWlyZSB0aGUgYnR0diBkcml2ZXIgdG8gcHJvdmlkZSB0aGUgbWVhbnMgdG8gYWNjZXNzCi10aGUgaTJjIGJ1cyBhbmQgdGhlIGdwaW8gcGlucyBvZiB0aGUgYnQ4eHggY2hpcHNldC4KK0VuYWJsZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CiAKLUJlY2F1c2Ugb2YgdGhpcywgeW91IG5lZWQgdG8gZW5hYmxlCiAiRGV2aWNlIGRyaXZlcnMiID0+ICJNdWx0aW1lZGlhIGRldmljZXMiCi0gID0+ICJWaWRlbyBGb3IgTGludXgiID0+ICJCVDg0OCBWaWRlbyBGb3IgTGludXgiCi0KLUZ1cnRoZXJtb3JlIHlvdSBuZWVkIHRvIGVuYWJsZQorID0+ICJWaWRlbyBGb3IgTGludXgiID0+ICJCVDg0OCBWaWRlbyBGb3IgTGludXgiCiAiRGV2aWNlIGRyaXZlcnMiID0+ICJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzIgotICA9PiAiRFZCIGZvciBMaW51eCIgIkRWQiBDb3JlIFN1cHBvcnQiICJOZWJ1bGEvUGlubmFjbGUgUENUVi9Ud2luSGFuIFBDSSBDYXJkcyIKKyA9PiAiRFZCIGZvciBMaW51eCIgIkRWQiBDb3JlIFN1cHBvcnQiICJOZWJ1bGEvUGlubmFjbGUgUENUVi9Ud2luSGFuIFBDSSBDYXJkcyIKIAotMikgTG9hZGluZyBNb2R1bGVzCi09PT09PT09PT09PT09PT09PT0KKzMpIExvYWRpbmcgTW9kdWxlcywgZGVzY3JpYmVkIGJ5IHR3byBhcHByb2FjaGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBJbiBnZW5lcmFsIHlvdSBuZWVkIHRvIGxvYWQgdGhlIGJ0dHYgZHJpdmVyLCB3aGljaCB3aWxsIGhhbmRsZSB0aGUgZ3BpbyBhbmQKLWkyYyBjb21tdW5pY2F0aW9uIGZvciB1cywgcGx1cyB0aGUgY29tbW9uIGR2Yi1idDh4eCBkZXZpY2UgZHJpdmVyLgotVGhlIGZyb250ZW5kcyBmb3IgTmVidWxhIChueHQ2MDAwKSwgUGlubmFjbGUgUENUViAoY3gyNDExMCkgYW5kCi1Ud2luSGFuIChkc3QpIGFyZSBsb2FkZWQgYXV0b21hdGljYWxseSBieSB0aGUgZHZiLWJ0OHh4IGRldmljZSBkcml2ZXIuCitpMmMgY29tbXVuaWNhdGlvbiBmb3IgdXMsIHBsdXMgdGhlIGNvbW1vbiBkdmItYnQ4eHggZGV2aWNlIGRyaXZlciwKK3doaWNoIGlzIGNhbGxlZCB0aGUgYmFja2VuZC4KK1RoZSBmcm9udGVuZHMgZm9yIE5lYnVsYSBEaWdpVFYgKG54dDYwMDApLCBQaW5uYWNsZSBQQ1RWIFNhdCAoY3gyNDExMCksCitUd2luSGFuIERTVCArIGNsb25lcyAoZHN0IGFuZCBkc3QtY2EpIGFyZSBsb2FkZWQgYXV0b21hdGljYWxseSBieSB0aGUgYmFja2VuZC4KK0ZvciBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgVHdpbkhhbiBEU1QgKyBjbG9uZXMgc2VlIC9Eb2N1bWVudGF0aW9uL2R2Yi9jaS50eHQuCiAKLTNhKSBOZWJ1bGEgLyBQaW5uYWNsZSBQQ1RWCiszYSkgVGhlIG1hbnVhbCBhcHByb2FjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTG9hZGluZyBtb2R1bGVzOgorbW9kcHJvYmUgYnR0dgorbW9kcHJvYmUgZHZiLWJ0OHh4CisKK1VubG9hZGluZyBtb2R1bGVzOgorbW9kcHJvYmUgLXIgZHZiLWJ0OHh4Cittb2Rwcm9iZSAtciBidHR2CisKKzNiKSBUaGUgYXV0b21hdGljIGFwcHJvYWNoCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAkIG1vZHByb2JlIGJ0dHYgKG5vcm1hbGx5IGJ0dHYgaXMgYmVpbmcgbG9hZGVkIGF1dG9tYXRpY2FsbHkgYnkga21vZCkKLSAgICQgbW9kcHJvYmUgZHZiLWJ0OHh4IChvciBqdXN0IHBsYWNlIGR2Yi1idDh4eCBpbiAvZXRjL21vZHVsZXMgZm9yIGF1dG9tYXRpYyBsb2FkaW5nKQorSWYgbm90IGFscmVhZHkgZG9uZSBieSBpbnN0YWxsYXRpb24sIHBsYWNlIGEgbGluZSBlaXRoZXIgaW4KKy9ldGMvbW9kdWxlcy5jb25mIG9yIGluIC9ldGMvbW9kcHJvYmUuY29uZiBjb250YWluaW5nIHRoaXMgdGV4dDoKK2FsaWFzIGNoYXItbWFqb3ItODEJYnR0dgogCitUaGVuIHBsYWNlIGEgbGluZSBpbiAvZXRjL21vZHVsZXMgY29udGFpbmluZyB0aGlzIHRleHQ6CitkdmItYnQ4eHgKIAotM2IpIFR3aW5IYW4gYW5kIENsb25lcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgJCBtb2Rwcm9iZSBidHR2IGkyY19odz0xIGNhcmQ9MHg3MQotICAgJCBtb2Rwcm9iZSBkdmItYnQ4eHgKLSAgICQgbW9kcHJvYmUgZHN0Ci0KLVRoZSB2YWx1ZSAweDcxIHdpbGwgb3ZlcnJpZGUgdGhlIFBDSSB0eXBlIGRldGVjdGlvbiBmb3IgZHZiLWJ0OHh4LAotd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBUd2luSGFuIGNhcmRzLgotCi1JZiB5b3UncmUgaGF2aW5nIGFuIG9sZGVyIGNhcmQgKGJsdWUgY29sb3IgY2lyY3VpdCkgYW5kIGNhcmQ9MHg3MSBsb2NrcwoteW91ciBtYWNoaW5lLCB0cnkgdXNpbmcgMHg2OCwgdG9vLiBJZiB0aGF0IGRvZXMgbm90IHdvcmssIGFzayBvbiB0aGUKLW1haWxpbmcgbGlzdC4KLQotVGhlIERTVCBtb2R1bGUgdGFrZXMgYSBjb3VwbGUgb2YgdXNlZnVsIHBhcmFtZXRlcnM6Ci0KLWEuIHZlcmJvc2UgdGFrZXMgdmFsdWVzIDAgdG8gNS4gVGhlc2UgdmFsdWVzIGNvbnRyb2wgdGhlIHZlcmJvc2l0eSBsZXZlbC4KLWIuIGRlYnVnIHRha2VzIHZhbHVlcyAwIGFuZCAxLiBZb3UgY2FuIGVpdGhlciBkaXNhYmxlIG9yIGVuYWJsZSBkZWJ1Z2dpbmcuCi1jLiBkc3RfYWRkb25zIHRha2VzIHZhbHVlcyAwIGFuZCAweDIwOgotLSBBIHZhbHVlIG9mIDAgbWVhbnMgaXQgaXMgYSBGVEEgY2FyZC4KLS0gQSB2YWx1ZSBvZiAweDIwIG1lYW5zIGl0IGhhcyBhIENvbmRpdGlvbmFsIEFjY2VzcyBzbG90LgotCi1UaGUgYXV0b2RldGVjdGVkIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgInJlc3BvbnNlIHN0cmluZyIKLW9mIHRoZSBjYXJkLCB3aGljaCB5b3UgY2FuIHNlZSBpbiB5b3VyIGxvZ3M6Ci1lLmcuOiBkc3RfZ2V0X2RldmljZV9pZDogUmVjb2duaXplIFtEU1RNQ0ldCitSZWJvb3QgeW91ciBzeXN0ZW0gYW5kIGhhdmUgZnVuIQogCiAtLQogQXV0aG9yczogUmljaGFyZCBXYWxrZXIsIEphbWllIEhvbmFuLCBNaWNoYWVsIEh1bm9sZCwgTWFudSBBYnJhaGFtLCBVd2UgQnVnbGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAxZDIyN2VlLi4xMmRkZTQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0xMTksMyArMTE5LDE5IEBACiAJd2lsbCBiZSBhdmFpbGFibGUgdW50aWwgcmVtb3ZhbCBvZiBvbGQgbmFtZXMuCiBXaG86CUdyYW50IENvYWR5IDxnY29hZHlAZ21haWwuY29tPgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJUENNQ0lBIGNvbnRyb2wgaW9jdGwgKG5lZWRlZCBmb3IgcGNtY2lhLWNzIFtjYXJkbWdyLCBjYXJkY3RsXSkKK1doZW46CU5vdmVtYmVyIDIwMDUKK0ZpbGVzOglkcml2ZXJzL3BjbWNpYS86IHBjbWNpYV9pb2N0bC5jCitXaHk6CVdpdGggdGhlIDE2LWJpdCBQQ01DSUEgc3Vic3lzdGVtIG5vdyBiZWhhdmluZyAoYWxtb3N0KSBsaWtlIGEKKwlub3JtYWwgaG90cGx1Z2dhYmxlIGJ1cywgYW5kIHdpdGggaXQgdXNpbmcgdGhlIGRlZmF1bHQga2VybmVsCisJaW5mcmFzdHJ1Y3R1cmUgKGhvdHBsdWcsIGRyaXZlciBjb3JlLCBzeXNmcykga2VlcGluZyB0aGUgUENNQ0lBCisJY29udHJvbCBpb2N0bCBuZWVkZWQgYnkgY2FyZG1nciBhbmQgY2FyZGN0bCBmcm9tIHBjbWNpYS1jcyBpcworCXVubmVjZXNzYXJ5LCBhbmQgbWFrZXMgZnVydGhlciBjbGVhbnVwcyBhbmQgaW50ZWdyYXRpb24gb2YgdGhlCisJUENNQ0lBIHN1YnN5c3RlbSBpbnRvIHRoZSBMaW51eCBrZXJuZWwgZGV2aWNlIGRyaXZlciBtb2RlbCBtb3JlCisJZGlmZmljdWx0LiBUaGUgZmVhdHVyZXMgcHJvdmlkZWQgYnkgY2FyZG1nciBhbmQgY2FyZGN0bCBhcmUgZWl0aGVyCisJaGFuZGxlZCBieSB0aGUga2VybmVsIGl0c2VsZiBub3cgb3IgYXJlIGF2YWlsYWJsZSBpbiB0aGUgbmV3CisJcGNtY2lhdXRpbHMgcGFja2FnZSBhdmFpbGFibGUgYXQKKwlodHRwOi8va2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8KK1dobzoJRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfdmVyYnMudHh0IGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfdmVyYnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDc1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQKQEAgLTAsMCArMSw2OSBAQAorVVNFUlNQQUNFIFZFUkJTIEFDQ0VTUworCisgIFRoZSBpYl91dmVyYnMgbW9kdWxlLCBidWlsdCBieSBlbmFibGluZyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX1ZFUkJTLAorICBlbmFibGVzIGRpcmVjdCB1c2Vyc3BhY2UgYWNjZXNzIHRvIElCIGhhcmR3YXJlIHZpYSAidmVyYnMsIiBhcworICBkZXNjcmliZWQgaW4gY2hhcHRlciAxMSBvZiB0aGUgSW5maW5pQmFuZCBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbi4KKworICBUbyB1c2UgdGhlIHZlcmJzLCB0aGUgbGliaWJ2ZXJicyBsaWJyYXJ5LCBhdmFpbGFibGUgZnJvbQorICA8aHR0cDovL29wZW5pYi5vcmcvPiwgaXMgcmVxdWlyZWQuICBsaWJpYnZlcmJzIGNvbnRhaW5zIGEKKyAgZGV2aWNlLWluZGVwZW5kZW50IEFQSSBmb3IgdXNpbmcgdGhlIGliX3V2ZXJicyBpbnRlcmZhY2UuCisgIGxpYmlidmVyYnMgYWxzbyByZXF1aXJlcyBhcHByb3ByaWF0ZSBkZXZpY2UtZGVwZW5kZW50IGtlcm5lbCBhbmQKKyAgdXNlcnNwYWNlIGRyaXZlciBmb3IgeW91ciBJbmZpbmlCYW5kIGhhcmR3YXJlLiAgRm9yIGV4YW1wbGUsIHRvIHVzZQorICBhIE1lbGxhbm94IEhDQSwgeW91IHdpbGwgbmVlZCB0aGUgaWJfbXRoY2Ega2VybmVsIG1vZHVsZSBhbmQgdGhlCisgIGxpYm10aGNhIHVzZXJzcGFjZSBkcml2ZXIgYmUgaW5zdGFsbGVkLgorCitVc2VyLWtlcm5lbCBjb21tdW5pY2F0aW9uCisKKyAgVXNlcnNwYWNlIGNvbW11bmljYXRlcyB3aXRoIHRoZSBrZXJuZWwgZm9yIHNsb3cgcGF0aCwgcmVzb3VyY2UKKyAgbWFuYWdlbWVudCBvcGVyYXRpb25zIHZpYSB0aGUgL2Rldi9pbmZpbmliYW5kL3V2ZXJic04gY2hhcmFjdGVyCisgIGRldmljZXMuICBGYXN0IHBhdGggb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IHBlcmZvcm1lZCBieSB3cml0aW5nCisgIGRpcmVjdGx5IHRvIGhhcmR3YXJlIHJlZ2lzdGVycyBtbWFwKCllZCBpbnRvIHVzZXJzcGFjZSwgd2l0aCBubworICBzeXN0ZW0gY2FsbCBvciBjb250ZXh0IHN3aXRjaCBpbnRvIHRoZSBrZXJuZWwuCisKKyAgQ29tbWFuZHMgYXJlIHNlbnQgdG8gdGhlIGtlcm5lbCB2aWEgd3JpdGUoKXMgb24gdGhlc2UgZGV2aWNlIGZpbGVzLgorICBUaGUgQUJJIGlzIGRlZmluZWQgaW4gZHJpdmVycy9pbmZpbmliYW5kL2luY2x1ZGUvaWJfdXNlcl92ZXJicy5oLgorICBUaGUgc3RydWN0cyBmb3IgY29tbWFuZHMgdGhhdCByZXF1aXJlIGEgcmVzcG9uc2UgZnJvbSB0aGUga2VybmVsCisgIGNvbnRhaW4gYSA2NC1iaXQgZmllbGQgdXNlZCB0byBwYXNzIGEgcG9pbnRlciB0byBhbiBvdXRwdXQgYnVmZmVyLgorICBTdGF0dXMgaXMgcmV0dXJuZWQgdG8gdXNlcnNwYWNlIGFzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHdyaXRlKCkKKyAgc3lzdGVtIGNhbGwuCisKK1Jlc291cmNlIG1hbmFnZW1lbnQKKworICBTaW5jZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb2YgYWxsIElCIHJlc291cmNlcyBpcyBkb25lIGJ5CisgIGNvbW1hbmRzIHBhc3NlZCB0aHJvdWdoIGEgZmlsZSBkZXNjcmlwdG9yLCB0aGUga2VybmVsIGNhbiBrZWVwIHRyYWNrCisgIG9mIHdoaWNoIHJlc291cmNlcyBhcmUgYXR0YWNoZWQgdG8gYSBnaXZlbiB1c2Vyc3BhY2UgY29udGV4dC4gIFRoZQorICBpYl91dmVyYnMgbW9kdWxlIG1haW50YWlucyBpZHIgdGFibGVzIHRoYXQgYXJlIHVzZWQgdG8gdHJhbnNsYXRlCisgIGJldHdlZW4ga2VybmVsIHBvaW50ZXJzIGFuZCBvcGFxdWUgdXNlcnNwYWNlIGhhbmRsZXMsIHNvIHRoYXQga2VybmVsCisgIHBvaW50ZXJzIGFyZSBuZXZlciBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgdXNlcnNwYWNlIGNhbm5vdCB0cmljaworICB0aGUga2VybmVsIGludG8gZm9sbG93aW5nIGEgYm9ndXMgcG9pbnRlci4KKworICBUaGlzIGFsc28gYWxsb3dzIHRoZSBrZXJuZWwgdG8gY2xlYW4gdXAgd2hlbiBhIHByb2Nlc3MgZXhpdHMgYW5kCisgIHByZXZlbnQgb25lIHByb2Nlc3MgZnJvbSB0b3VjaGluZyBhbm90aGVyIHByb2Nlc3MncyByZXNvdXJjZXMuCisKK01lbW9yeSBwaW5uaW5nCisKKyAgRGlyZWN0IHVzZXJzcGFjZSBJL08gcmVxdWlyZXMgdGhhdCBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZSBwb3RlbnRpYWwKKyAgSS9PIHRhcmdldHMgYmUga2VwdCByZXNpZGVudCBhdCB0aGUgc2FtZSBwaHlzaWNhbCBhZGRyZXNzLiAgVGhlCisgIGliX3V2ZXJicyBtb2R1bGUgbWFuYWdlcyBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgbWVtb3J5IHJlZ2lvbnMgdmlhCisgIGdldF91c2VyX3BhZ2VzKCkgYW5kIHB1dF9wYWdlKCkgY2FsbHMuICBJdCBhbHNvIGFjY291bnRzIGZvciB0aGUKKyAgYW1vdW50IG9mIG1lbW9yeSBwaW5uZWQgaW4gdGhlIHByb2Nlc3MncyBsb2NrZWRfdm0sIGFuZCBjaGVja3MgdGhhdAorICB1bnByaXZpbGVnZWQgcHJvY2Vzc2VzIGRvIG5vdCBleGNlZWQgdGhlaXIgUkxJTUlUX01FTUxPQ0sgbGltaXQuCisKKyAgUGFnZXMgdGhhdCBhcmUgcGlubmVkIG11bHRpcGxlIHRpbWVzIGFyZSBjb3VudGVkIGVhY2ggdGltZSB0aGV5IGFyZQorICBwaW5uZWQsIHNvIHRoZSB2YWx1ZSBvZiBsb2NrZWRfdm0gbWF5IGJlIGFuIG92ZXJlc3RpbWF0ZSBvZiB0aGUKKyAgbnVtYmVyIG9mIHBhZ2VzIHBpbm5lZCBieSBhIHByb2Nlc3MuCisKKy9kZXYgZmlsZXMKKworICBUbyBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGNoYXJhY3RlciBkZXZpY2UgZmlsZXMgYXV0b21hdGljYWxseSB3aXRoCisgIHVkZXYsIGEgcnVsZSBsaWtlCisKKyAgICBLRVJORUw9InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorCisgIGNhbiBiZSB1c2VkLiAgVGhpcyB3aWxsIGNyZWF0ZSBkZXZpY2Ugbm9kZXMgbmFtZWQKKworICAgIC9kZXYvaW5maW5pYmFuZC91dmVyYnMwCisKKyAgYW5kIHNvIG9uLiAgU2luY2UgdGhlIEluZmluaUJhbmQgdXNlcnNwYWNlIHZlcmJzIHNob3VsZCBiZSBzYWZlIGZvcgorICB1c2UgYnkgbm9uLXByaXZpbGVnZWQgcHJvY2Vzc2VzLCBpdCBtYXkgYmUgdXNlZnVsIHRvIGFkZCBhbgorICBhcHByb3ByaWF0ZSBNT0RFIG9yIEdST1VQIHRvIHRoZSB1ZGV2IHJ1bGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CmluZGV4IDg4MWEzN2UuLjdhNGE1MDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CkBAIC0xMTcsNiArMTE3LDcgQEAKIE1lZGlvbiBNRDQyMjAJCQk/Pz8gKCopCiBTYW1zdW5nIFAzNQkJCXZiZXRvb2wgbmVlZGVkICg2KQogU2hhcnAgUEMtQVIxMCAoQVRJIHJhZ2UpCW5vbmUgKDEpCitTb255IFZhaW8gUENHLUMxVlJYL0sJCXMzX2Jpb3MgKDIpCiBTb255IFZhaW8gUENHLUY0MDMJCT8/PyAoKikKIFNvbnkgVmFpbyBQQ0ctTjUwNVNOCQk/Pz8gKCopCiBTb255IFZhaW8gdmduLXMyNjAJCVggb3IgYm9vdC1yYWRlb24gY2FuIGluaXQgaXQgKDUpCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDE5YTlhMWMuLjM3ZmIxZTIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0zNzAsNiArMzcwLDEwIEBACiBXOglodHRwOi8vYXRtZWx3bGFuZHJpdmVyLnNvdXJjZWZvcmdlLm5ldC8KIFM6CU1haW50YWluZWQKIAorQVVESVQgU1VCU1lTVEVNCitMOglsaW51eC1hdWRpdEByZWRoYXQuY29tIChzdWJzY3JpYmVycy1vbmx5KQorUzoJTWFpbnRhaW5lZAorCiBBWC4yNSBORVRXT1JLIExBWUVSCiBQOglSYWxmIEJhZWNobGUKIE06CXJhbGZAbGludXgtbWlwcy5vcmcKQEAgLTE4MDMsOCArMTgwNyw5IEBACiBTOglNYWludGFpbmVkCiAKIFBDTUNJQSBTVUJTWVNURU0KK1A6CUxpbnV4IFBDTUNJQSBUZWFtCiBMOglodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBjbWNpYQotUzoJVW5tYWludGFpbmVkCitTOglNYWludGFpbmVkCiAKIFBDTkVUMzIgTkVUV09SSyBEUklWRVIKIFA6CVRob21hcyBCb2dlbmT2cmZlcgpAQCAtMjE2MSw3ICsyMTY2LDcgQEAKIFA6CURhdmlkIFMuIE1pbGxlcgogTToJZGF2ZW1AZGF2ZW1sb2Z0Lm5ldAogUDoJRWRkaWUgQy4gRG9zdAotTToJZWNkQHNreW5ldC5iZQorTToJZWNkQGJyYWluYWlkLmRlCiBQOglKYWt1YiBKZWxpbmVrCiBNOglqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6CiBQOglBbnRvbiBCbGFuY2hhcmQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMjc4ZDUwOS4uOWNmMDdlNyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTc5Miw2ICs3OTIsOSBAQAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoQEQpICRACiAlLm86ICUuYyBzY3JpcHRzIEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChARCkgJEAKKyUua286IHNjcmlwdHMgRk9SQ0UKKwkkKFEpJChNQUtFKSBLQlVJTERfTU9EVUxFUz0kKGlmICQoQ09ORklHX01PRFVMRVMpLDEpICQoYnVpbGQpPSQoQEQpICQoQDoua289Lm8pCisJJChRKSQoTUFLRSkgLXJSIC1mICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CiAlLzogICAgICBzY3JpcHRzIHByZXBhcmUgRk9SQ0UKIAkkKFEpJChNQUtFKSBLQlVJTERfTU9EVUxFUz0kKGlmICQoQ09ORklHX01PRFVMRVMpLDEpICQoYnVpbGQpPSQoQEQpCiAlLmxzdDogJS5jIHNjcmlwdHMgRk9SQ0UKQEAgLTEwMzMsNiArMTAzNiw3IEBACiAJQGVjaG8gICcgIG1vZHVsZXNfaW5zdGFsbCAtIEluc3RhbGwgYWxsIG1vZHVsZXMnCiAJQGVjaG8gICcgIGRpci8gICAgICAgICAgICAtIEJ1aWxkIGFsbCBmaWxlcyBpbiBkaXIgYW5kIGJlbG93JwogCUBlY2hvICAnICBkaXIvZmlsZS5bb2lzXSAgLSBCdWlsZCBzcGVjaWZpZWQgdGFyZ2V0IG9ubHknCisJQGVjaG8gICcgIGRpci9maWxlLmtvICAgICAtIEJ1aWxkIG1vZHVsZSBpbmNsdWRpbmcgZmluYWwgbGluaycKIAlAZWNobyAgJyAgcnBtCQkgIC0gQnVpbGQgYSBrZXJuZWwgYXMgYW4gUlBNIHBhY2thZ2UnCiAJQGVjaG8gICcgIHRhZ3MvVEFHUwkgIC0gR2VuZXJhdGUgdGFncyBmaWxlIGZvciBlZGl0b3JzJwogCUBlY2hvICAnICBjc2NvcGUJICAtIEdlbmVyYXRlIGNzY29wZSBpbmRleCcKQEAgLTExNDksNyArMTE1Myw3IEBACiAjKHdoaWNoIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIElNSE8pIHRvIGF2b2lkIHVubmVlZGVkIGNsdXR0ZXIgaW4gdGhlIGJpZyB0YWdzIGZpbGUuCiAjQWRkaW5nICQoc3JjdHJlZSkgYWRkcyBhYm91dCAyME0gb24gaTM4NiB0byB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGZpbGUhCiAKLWlmZXEgKCQoS0JVSUxEX09VVFBVVCksKQoraWZlcSAoJChzcmMpLCQob2JqKSkKIF9fc3JjdHJlZSA9CiBlbHNlCiBfX3NyY3RyZWUgPSAkKHNyY3RyZWUpLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNjIwZjJjYS4uODc1Mjc1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0yMjMsNyArMjIzLDkgQEAKIAogc291cmNlICJhcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnIgogCi1zb3VyY2UgImFyY2gvYXJtL21hY2gtb21hcC9LY29uZmlnIgorc291cmNlICJhcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyIKKworc291cmNlICJhcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWciCiAKQEAgLTUxNCw3ICs1MTYsNyBAQAogCiBlbmRtZW51CiAKLWlmIChBUkNIX1NBMTEwMCB8fCBBUkNIX0lOVEVHUkFUT1IpCitpZiAoQVJDSF9TQTExMDAgfHwgQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfT01BUDEpCiAKIG1lbnUgIkNQVSBGcmVxdWVuY3kgc2NhbGluZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCBlYjkzM2RjLi42N2YxNDUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtOTEsNyArOTEsOCBAQAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JT1AzWFgpCSAgIDo9IGlvcDN4eAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JWFA0WFgpCSAgIDo9IGl4cDR4eAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JWFAyMDAwKSAgICA6PSBpeHAyMDAwCi0gbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVApCSAgIDo9IG9tYXAKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDEpCSAgIDo9IG9tYXAxCisgIGluY2Rpci0kKENPTkZJR19BUkNIX09NQVApCSAgIDo9IG9tYXAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzNDMjQxMCkJICAgOj0gczNjMjQxMAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9MSDdBNDBYKQkgICA6PSBsaDdhNDB4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1ZFUlNBVElMRSkgIDo9IHZlcnNhdGlsZQpAQCAtMTQyLDYgKzE0Myw5IEBACiBjb3JlLSQoQ09ORklHX0ZQRV9GQVNURlBFKQkrPSAkKEZBU1RGUEVfT0JKKQogY29yZS0kKENPTkZJR19WRlApCQkrPSBhcmNoL2FybS92ZnAvCiAKKyMgSWYgd2UgaGF2ZSBhIGNvbW1vbiBwbGF0Zm9ybSBkaXJlY3RvcnksIHRoZW4gaW5jbHVkZSBpdCBpbiB0aGUgYnVpbGQuCitjb3JlLSQoQ09ORklHX0FSQ0hfT01BUCkJKz0gYXJjaC9hcm0vcGxhdC1vbWFwLworCiBkcml2ZXJzLSQoQ09ORklHX09QUk9GSUxFKSAgICAgICs9IGFyY2gvYXJtL29wcm9maWxlLwogZHJpdmVycy0kKENPTkZJR19BUkNIX0NMUFM3NTAwKQkrPSBkcml2ZXJzL2Fjb3JuL2NoYXIvCiBkcml2ZXJzLSQoQ09ORklHX0FSQ0hfTDcyMDApCSs9IGRyaXZlcnMvYWNvcm4vY2hhci8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VucDI2MTFfZGVmY29uZmlnCmluZGV4IGI4YzUxZWUuLmY2N2NhMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lbnAyNjExX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1naXQ2Ci0jIFNhdCBKdW4gMjUgMDA6NTc6MjkgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjMgorIyBUaHUgSnVsICA3IDE2OjQxOjIxIDIwMDUKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CkBAIC0xMzcsNiArMTM3LDcgQEAKICMKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0zNDUsMTAgKzM0Niw5IEBACiBDT05GSUdfVU5JWD15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKQEAgLTM2MywxNyArMzYzLDggQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLQotIwotIyBUQ1AgY29uZ2VzdGlvbiBjb250cm9sCi0jCisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKLUNPTkZJR19UQ1BfQ09OR19XRVNUV09PRD1tCi1DT05GSUdfVENQX0NPTkdfSFRDUD1tCi0jIENPTkZJR19UQ1BfQ09OR19IU1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19IWUJMQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19WRUdBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKQEAgLTkzMSw0ICs5MjIsMyBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci0jIENPTkZJR19URVhUU0VBUkNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMF9kZWZjb25maWcKaW5kZXggM2NmYmUyZS4uNWM2YzkyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItZ2l0NgotIyBTYXQgSnVuIDI1IDAwOjU4OjM4IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1yYzIKKyMgVGh1IEp1bCAgNyAxNjo0OTowMSAyMDA1CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQpAQCAtMTM4LDYgKzEzOCw3IEBACiAjCiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMzQ2LDEwICszNDcsOSBAQAogQ09ORklHX1VOSVg9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CkBAIC0zNjQsMTcgKzM2NCw4IEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0KLSMKLSMgVENQIGNvbmdlc3Rpb24gY29udHJvbAotIworIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15Ci1DT05GSUdfVENQX0NPTkdfV0VTVFdPT0Q9bQotQ09ORklHX1RDUF9DT05HX0hUQ1A9bQotIyBDT05GSUdfVENQX0NPTkdfSFNUQ1AgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfSFlCTEEgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfVkVHQVMgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfU0NBTEFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCkBAIC05MzIsNCArOTIzLDMgQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotIyBDT05GSUdfVEVYVFNFQVJDSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCmluZGV4IDVjODdlOGUuLjZkYzQwZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLWdpdDYKLSMgU2F0IEp1biAyNSAwMDo1OTozNSAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMtcmMyCisjIFRodSBKdWwgIDcgMTY6NDk6MDggMjAwNQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKQEAgLTEzOCw2ICsxMzgsNyBAQAogIwogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTM0NiwxMCArMzQ3LDkgQEAKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQpAQCAtMzY0LDE3ICszNjQsOCBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lQX1RDUERJQUc9eQogIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLQotIwotIyBUQ1AgY29uZ2VzdGlvbiBjb250cm9sCi0jCisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKLUNPTkZJR19UQ1BfQ09OR19XRVNUV09PRD1tCi1DT05GSUdfVENQX0NPTkdfSFRDUD1tCi0jIENPTkZJR19UQ1BfQ09OR19IU1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19IWUJMQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19WRUdBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKQEAgLTkzMyw0ICs5MjQsMyBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci0jIENPTkZJR19URVhUU0VBUkNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKaW5kZXggM2NiNTYxYS4uZDJiYjBiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItZ2l0NgotIyBTYXQgSnVuIDI1IDAxOjAwOjI3IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1yYzIKKyMgVGh1IEp1bCAgNyAxNjo0OToyMCAyMDA1CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQpAQCAtMTM4LDYgKzEzOCw3IEBACiAjCiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMzQ2LDEwICszNDcsOSBAQAogQ09ORklHX1VOSVg9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CkBAIC0zNjQsMTcgKzM2NCw4IEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0KLSMKLSMgVENQIGNvbmdlc3Rpb24gY29udHJvbAotIworIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15Ci1DT05GSUdfVENQX0NPTkdfV0VTVFdPT0Q9bQotQ09ORklHX1RDUF9DT05HX0hUQ1A9bQotIyBDT05GSUdfVENQX0NPTkdfSFNUQ1AgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfSFlCTEEgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfVkVHQVMgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfU0NBTEFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCkBAIC05MzIsNCArOTIzLDMgQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotIyBDT05GSUdfVEVYVFNFQVJDSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCmluZGV4IGIxZTE2MmYuLjJkNmY5NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLWdpdDYKLSMgU2F0IEp1biAyNSAwMTowMToxOCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMtcmMyCisjIFRodSBKdWwgIDcgMTY6NDk6MTMgMjAwNQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKQEAgLTEzOCw2ICsxMzgsNyBAQAogIwogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTM0NiwxMCArMzQ3LDkgQEAKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQpAQCAtMzY0LDE3ICszNjQsOCBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotCi0jCi0jIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wKLSMKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQotQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPW0KLUNPTkZJR19UQ1BfQ09OR19IVENQPW0KLSMgQ09ORklHX1RDUF9DT05HX0hTVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0hZQkxBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX1ZFR0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIApAQCAtOTMzLDQgKzkyNCwzIEBACiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLSMgQ09ORklHX1RFWFRTRUFSQ0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCmluZGV4IDRlNThkOTMuLjI0OTU1MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMTc6NTI6NDEgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjMgorIyBGcmkgSnVsICA4IDA0OjQ5OjM0IDIwMDUKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTE3LDYgKzE2LDcgQEAKIENPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzMsOCArMzMsOSBAQAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQpAQCAtODIsMTAgKzgzLDI4IEBACiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogCiAjCiAjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCiAjCitDT05GSUdfQVJDSF9PTUFQX09URz15CitDT05GSUdfQVJDSF9PTUFQMT15CisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAorQ09ORklHX09NQVBfTVVYPXkKKyMgQ09ORklHX09NQVBfTVVYX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15CisjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF8zMktfVElNRVI9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDE9eQorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKIAogIwogIyBPTUFQIENvcmUgVHlwZQpAQCAtOTMsNyArMTEyLDYgQEAKICMgQ09ORklHX0FSQ0hfT01BUDczMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAxNTEwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAxNlhYPXkKLUNPTkZJR19BUkNIX09NQVBfT1RHPXkKIAogIwogIyBPTUFQIEJvYXJkIFR5cGUKQEAgLTEwMSwyMSArMTE5LDE0IEBACiAjIENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX09NQVBfSDI9eQogIyBDT05GSUdfTUFDSF9PTUFQX0gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9INCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX09NQVBfT1NLIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfT01BUF9HRU5FUklDIGlzIG5vdCBzZXQKIAogIwotIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIyBPTUFQIENQVSBTcGVlZAogIwotQ09ORklHX09NQVBfTVVYPXkKLSMgQ09ORklHX09NQVBfTVVYX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15Ci1DT05GSUdfT01BUF9NUFVfVElNRVI9eQotIyBDT05GSUdfT01BUF8zMktfVElNRVIgaXMgbm90IHNldAotQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDE9eQotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfQVJNXzIxNk1IWiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9BUk1fMTkyTUhaPXkKICMgQ09ORklHX09NQVBfQVJNXzE2OE1IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX0FSTV8xMjBNSFogaXMgbm90IHNldApAQCAtMTQ1LDYgKzE1Niw3IEBACiAjCiAjIEJ1cyBzdXBwb3J0CiAjCitDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKQEAgLTE1NCw3ICsxNjYsMTYgQEAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCisjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX05PX0lETEVfSFo9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX0xFRFMgaXMgbm90IHNldAogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKIApAQCAtMTY3LDYgKzE4OCwyMiBAQAogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAKICMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKKworIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KICMKIApAQCAtMjAyLDcgKzIzOSw2IEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0RSSVZFUj15CiAKICMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQpAQCAtMjkyLDcgKzMyOCw2IEBACiAjCiAjIEJsb2NrIGRldmljZXMKICMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKQEAgLTMyNyw2ICszNjIsNyBAQAogIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiAKICMKICMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCkBAIC0zNTYsNiArMzkyLDcgQEAKICMKICMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC0zNzUsMTIgKzQxMiwxMiBAQAogIwogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQpAQCAtMzk1LDYgKzQzMiw4IEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfVENQRElBRz15CiAjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKQEAgLTQ0Miw2ICs0ODEsNyBAQAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKIENPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNTE4LDcgKzU1OCw2IEBACiBDT05GSUdfU0VSSU9fU0VSUE9SVD15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwpAQCAtNTY3LDEzICs2MDYsMTEgQEAKICMKICMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCiAjCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKICMgVFBNIGRldmljZXMKICMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC02MDQsNyArNjQxLDkgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKQEAgLTYyMCw2ICs2NTksNyBAQAogIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKQEAgLTYyNywxNSArNjY3LDIxIEBACiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAKICMKICMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAogIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKIENPTkZJR19JU1AxMzAxX09NQVA9eQorQ09ORklHX1RQUzY1MDEwPXkKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTY2Myw4ICs3MDksMTAgQEAKICMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NPRlRfQ1VSU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCkBAIC02NzcsMTEgKzcyNSwxMyBAQAogQ09ORklHX0ZPTlRfOHg4PXkKIENPTkZJR19GT05UXzh4MTY9eQogIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogCiAjCiAjIExvZ28gY29uZmlndXJhdGlvbgpAQCAtNzI5LDE0ICs3NzksMTQgQEAKICMKIENPTkZJR19VU0JfR0FER0VUPXkKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQogIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfT01BUD15CiBDT05GSUdfVVNCX09NQVA9eQorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9eQpAQCAtNzU1LDYgKzgwNSw3IEBACiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc5MSw3ICs4NDIsNiBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldApAQCAtODI4LDEyICs4NzgsMTQgQEAKICMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQogIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKQEAgLTkwMywyNCArOTU1LDExIEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0VSUk9SUz15Ci1DT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKaW5kZXggYjcxM2M0NC4uODM1ZDQ1MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKQEAgLTQxLDcgKzQxLDEwIEBACiAgKiBUaGlzIGhhcyBhIHNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9uOyBpdCBkb2Vzbid0CiAgKiBtb2RpZnkgYW55IG9mIHRoZSB1c3VhbCByZWdpc3RlcnMsIGV4Y2VwdCBmb3IgTFIuCiAgKi8KKyNkZWZpbmUgRVhQT1JUX0NSQ19BTElBUyhzeW0pIF9fQ1JDX1NZTUJPTChzeW0sICIiKQorCiAjZGVmaW5lIEVYUE9SVF9TWU1CT0xfQUxJQVMoc3ltLG9yaWcpCQlcCisgRVhQT1JUX0NSQ19BTElBUyhzeW0pCQkJCVwKICBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX2tzeW10YWJfIyNzeW0JXAogICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tzeW10YWIiKSkpID0JXAogICAgIHsgKHVuc2lnbmVkIGxvbmcpJm9yaWcsICNzeW0gfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvY29yZS5jCmluZGV4IDRiOWQ4NDEuLjQ1YjE4NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CkBAIC0xMjUsMTkgKzEyNSw2IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgaXhwMjAwMF9zZXJpYWxfcG9ydCA9IHsKLQkubWVtYmFzZQk9IChjaGFyICopKElYUDIwMDBfVUFSVF9WSVJUX0JBU0UgKyAzKSwKLQkubWFwYmFzZQk9IElYUDIwMDBfVUFSVF9QSFlTX0JBU0UgKyAzLAotCS5pcnEJCT0gSVJRX0lYUDIwMDBfVUFSVCwKLQkuZmxhZ3MJCT0gVVBGX1NLSVBfVEVTVCwKLQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCS5yZWdzaGlmdAk9IDIsCi0JLnVhcnRjbGsJPSA1MDAwMDAwMCwKLQkubGluZQkJPSAwLAotCS50eXBlCQk9IFBPUlRfWFNDQUxFLAotCS5maWZvc2l6ZQk9IDE2Ci19OwotCiB2b2lkIF9faW5pdCBpeHAyMDAwX21hcF9pbyh2b2lkKQogewogCWV4dGVybiB1bnNpZ25lZCBpbnQgcHJvY2Vzc29yX2lkOwpAQCAtMTU3LDEyICsxNDQsNTAgQEAKIAl9CiAKIAlpb3RhYmxlX2luaXQoaXhwMjAwMF9pb19kZXNjLCBBUlJBWV9TSVpFKGl4cDIwMDBfaW9fZGVzYykpOwotCWVhcmx5X3NlcmlhbF9zZXR1cCgmaXhwMjAwMF9zZXJpYWxfcG9ydCk7CiAKIAkvKiBTZXQgc2xvd3BvcnQgdG8gOC1iaXQgbW9kZS4gICovCiAJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9TTE9XUE9SVF9GUk0sIDEpOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZXJpYWwgcG9ydCBzdXBwb3J0IGZvciBJWFAyMDAwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgaXhwMjAwMF9zZXJpYWxfcG9ydFtdID0geworCXsKKwkJLm1hcGJhc2UJPSBJWFAyMDAwX1VBUlRfUEhZU19CQVNFLAorCQkubWVtYmFzZQk9IChjaGFyICopKElYUDIwMDBfVUFSVF9WSVJUX0JBU0UgKyAzKSwKKwkJLmlycQkJPSBJUlFfSVhQMjAwMF9VQVJULAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IDUwMDAwMDAwLAorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpeHAyMDAwX3VhcnRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IElYUDIwMDBfVUFSVF9QSFlTX0JBU0UsCisJLmVuZAkJPSBJWFAyMDAwX1VBUlRfUEhZU19CQVNFICsgMHhmZmZmLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGl4cDIwMDBfc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCQk9IGl4cDIwMDBfc2VyaWFsX3BvcnQsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJml4cDIwMDBfdWFydF9yZXNvdXJjZSwKK307CisKK3ZvaWQgX19pbml0IGl4cDIwMDBfdWFydF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpeHAyMDAwX3NlcmlhbF9kZXZpY2UpOworfQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaW1lci10aWNrIGZ1bmN0aW9ucyBmb3IgSVhQMjAwMAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvZW5wMjYxMS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2VucDI2MTEuYwppbmRleCBiN2ViZjM4Li45YWE1NGRlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2VucDI2MTEuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvZW5wMjYxMS5jCkBAIC0yMTksNiArMjE5LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBlbnAyNjExX2luaXRfbWFjaGluZSh2b2lkKQogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGVucDI2MTFfZGV2aWNlcywgQVJSQVlfU0laRShlbnAyNjExX2RldmljZXMpKTsKKwlpeHAyMDAwX3VhcnRfaW5pdCgpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKaW5kZXggNWU0MzgwNy4uYTQzMzY5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKQEAgLTMwMyw1ICszMDMsNiBAQAogCWdwaW9fbGluZV9jb25maWcoSVhEUDJYMDBfR1BJT19JMkNfRU5BQkxFLCBHUElPX09VVCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpeGRwMngwMF9kZXZpY2VzLCBBUlJBWV9TSVpFKGl4ZHAyeDAwX2RldmljZXMpKTsKKwlpeHAyMDAwX3VhcnRfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDEuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCmluZGV4IGM3MzU4ODcuLjQzNDQ3ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCkBAIC0zNzAsNiArMzcwLDcgQEAKIAkJKCgqSVhEUDJYMDFfQ1BMRF9GTEFTSF9SRUcgJiBJWERQMlgwMV9DUExEX0ZMQVNIX0JBTktfTUFTSykgKyAxKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGl4ZHAyeDAxX2RldmljZXMsIEFSUkFZX1NJWkUoaXhkcDJ4MDFfZGV2aWNlcykpOworCWl4cDIwMDBfdWFydF9pbml0KCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCmluZGV4IGFhOTJlMzcuLjJiNTQ0MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKQEAgLTQ1Myw4ICs0NTMsOCBAQAogCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQ09NTUFORCwgMiwgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTsKIAogCXJlc1swXS5uYW1lID0gIlBDSSBJL08gU3BhY2UiOwotCXJlc1swXS5zdGFydCA9IDB4MDAwMDEwMDA7Ci0JcmVzWzBdLmVuZCA9IDB4ZmZmZjAwMDA7CisJcmVzWzBdLnN0YXJ0ID0gMHgwMDAwMDAwMDsKKwlyZXNbMF0uZW5kID0gMHgwMDAwZmZmZjsKIAlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwogCiAJcmVzWzFdLm5hbWUgPSAiUENJIE1lbW9yeSBTcGFjZSI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1zZXR1cC5jCmluZGV4IGM2MzM1ZjUuLjRmZjQzOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1zZXR1cC5jCkBAIC01NiwyMSArNTYsMjQgQEAKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgY295b3RlX3VhcnRfZGF0YSA9IHsKLQkubWFwYmFzZQk9IElYUDRYWF9VQVJUMl9CQVNFX1BIWVMsCi0JLm1lbWJhc2UJPSAoY2hhciAqKUlYUDRYWF9VQVJUMl9CQVNFX1ZJUlQgKyBSRUdfT0ZGU0VULAotCS5pcnEJCT0gSVJRX0lYUDRYWF9VQVJUMiwKLQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JLmlvdHlwZQkJPSBVUElPX01FTSwKLQkucmVnc2hpZnQJPSAyLAotCS51YXJ0Y2xrCT0gSVhQNFhYX1VBUlRfWFRBTCwKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgY295b3RlX3VhcnRfZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTLAorCQkubWVtYmFzZQk9IChjaGFyICopSVhQNFhYX1VBUlQyX0JBU0VfVklSVCArIFJFR19PRkZTRVQsCisJCS5pcnEJCT0gSVJRX0lYUDRYWF9VQVJUMiwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IElYUDRYWF9VQVJUX1hUQUwsCisJfSwKKwl7IH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3lvdGVfdWFydCA9IHsKIAkubmFtZQkJPSAic2VyaWFsODI1MCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZjb3lvdGVfdWFydF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9IGNveW90ZV91YXJ0X2RhdGEsCiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IDEsCiAJLnJlc291cmNlCT0gJmNveW90ZV91YXJ0X3Jlc291cmNlLApAQCAtODcsMTAgKzkwLDEwIEBACiAJKklYUDRYWF9FWFBfQ1MxID0gKklYUDRYWF9FWFBfQ1MwOwogCiAJaWYgKG1hY2hpbmVfaXNfaXhkcGc0MjUoKSkgewotCQljb3lvdGVfdWFydF9kYXRhLm1lbWJhc2UgPQorCQljb3lvdGVfdWFydF9kYXRhWzBdLm1lbWJhc2UgPQogCQkJKGNoYXIqKShJWFA0WFhfVUFSVDFfQkFTRV9WSVJUICsgUkVHX09GRlNFVCk7Ci0JCWNveW90ZV91YXJ0X2RhdGEubWFwYmFzZSA9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVM7Ci0JCWNveW90ZV91YXJ0X2RhdGEuaXJxID0gSVJRX0lYUDRYWF9VQVJUMTsKKwkJY295b3RlX3VhcnRfZGF0YVswXS5tYXBiYXNlID0gSVhQNFhYX1VBUlQxX0JBU0VfUEhZUzsKKwkJY295b3RlX3VhcnRfZGF0YVswXS5pcnEgPSBJUlFfSVhQNFhYX1VBUlQxOwogCX0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMKaW5kZXggZjJlOWMwZS4uYzJiYTc1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtc2V0dXAuYwpAQCAtOTUsNyArOTUsOCBAQAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAogCQkudWFydGNsawk9IElYUDRYWF9VQVJUX1hUQUwsCi0JfQorCX0sCisJeyB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXhkcDQyNV91YXJ0ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU0MmVmYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi1pZiBBUkNIX09NQVAKLQotbWVudSAiVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMiCi0KLWNvbW1lbnQgIk9NQVAgQ29yZSBUeXBlIgotCi1jb25maWcgQVJDSF9PTUFQNzMwCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAKLQlib29sICJPTUFQNzMwIEJhc2VkIFN5c3RlbSIKLQlzZWxlY3QgQVJDSF9PTUFQX09URwotCi1jb25maWcgQVJDSF9PTUFQMTUxMAotCWRlcGVuZHMgb24gQVJDSF9PTUFQCi0JZGVmYXVsdCB5Ci0JYm9vbCAiT01BUDE1MTAgQmFzZWQgU3lzdGVtIgotCi1jb25maWcgQVJDSF9PTUFQMTZYWAotCWRlcGVuZHMgb24gQVJDSF9PTUFQCi0JYm9vbCAiT01BUDE2WFggQmFzZWQgU3lzdGVtIgotCXNlbGVjdCBBUkNIX09NQVBfT1RHCi0KLWNvbmZpZyBBUkNIX09NQVBfT1RHCi0JYm9vbAotCi1jb21tZW50ICJPTUFQIEJvYXJkIFR5cGUiCi0KLWNvbmZpZyBNQUNIX09NQVBfSU5OT1ZBVE9SCi0JYm9vbCAiVEkgSW5ub3ZhdG9yIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYCi0JaGVscAotICAgICAgICAgIFRJIE9NQVAgMTUxMCBvciAxNjEwIElubm92YXRvciBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdQotICAgICAgICAgIGhhdmUgc3VjaCBhIGJvYXJkLgotCi1jb25maWcgTUFDSF9PTUFQX0gyCi0JYm9vbCAiVEkgSDIgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFgKLSAgICAJaGVscAotCSAgVEkgT01BUCAxNjEwLzE2MTFCIEgyIGJvYXJkIHN1cHBvcnQuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaAotCSAgYSBib2FyZC4KLQotY29uZmlnIE1BQ0hfT01BUF9IMwotCWJvb2wgIlRJIEgzIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYCi0gICAgCWhlbHAKLQkgIFRJIE9NQVAgMTcxMCBIMyBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2gKLQkgIGEgYm9hcmQuCi0KLWNvbmZpZyBNQUNIX09NQVBfSDQKLQlib29sICJUSSBINCBTdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWAotICAgIAloZWxwCi0JICBUSSBPTUFQIDE2MTAgSDQgYm9hcmQgc3VwcG9ydC4gU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoCi0JICBhIGJvYXJkLgotCi1jb25maWcgTUFDSF9PTUFQX09TSwotCWJvb2wgIlRJIE9TSyBTdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWAotICAgIAloZWxwCi0JICBUSSBPTUFQIDU5MTIgT1NLIChPTUFQIFN0YXJ0ZXIgS2l0KSBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlCi0gICAgICAgICAgaWYgeW91IGhhdmUgc3VjaCBhIGJvYXJkLgotCi1jb25maWcgTUFDSF9PTUFQX1BFUlNFVVMyCi0JYm9vbCAiVEkgUGVyc2V1czIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVA3MzAKLSAgICAJaGVscAotCSAgU3VwcG9ydCBmb3IgVEkgT01BUCA3MzAgUGVyc2V1czIgYm9hcmQuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaAotCSAgYSBib2FyZC4KLQotY29uZmlnIE1BQ0hfVk9JQ0VCTFVFCi0JYm9vbCAiVm9pY2VibHVlIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTUxMAotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFZvaWNlYmx1ZSBHU00vVm9JUCBnYXRld2F5LiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2gKLQkgIGJvYXJkLgotCi1jb25maWcgTUFDSF9ORVRTVEFSCi0JYm9vbCAiTmV0U3RhciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE1MTAKLQloZWxwCi0JICBTdXBwb3J0IGZvciBOZXRTdGFyIFBCWC4gU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoIGEgYm9hcmQuCi0KLWNvbmZpZyBNQUNIX09NQVBfR0VORVJJQwotCWJvb2wgIkdlbmVyaWMgT01BUCBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE1MTAgfHwgQVJDSF9PTUFQMTZYWAotCWhlbHAKLSAgICAgICAgICBTdXBwb3J0IGZvciBnZW5lcmljIE9NQVAtMTUxMCwgMTYxMCBvciAxNzEwIGJvYXJkIHdpdGgKLSAgICAgICAgICBubyBGUEdBLiBDYW4gYmUgdXNlZCBhcyB0ZW1wbGF0ZSBmb3IgcG9ydGluZyBMaW51eCB0bwotICAgICAgICAgIGN1c3RvbSBPTUFQIGJvYXJkcy4gU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIGN1c3RvbQotICAgICAgICAgIGJvYXJkLgotCi1jb21tZW50ICJPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucyIKLQotI2NvbmZpZyBPTUFQX0JPT1RfVEFHCi0jCWJvb2wgIk9NQVAgYm9vdGxvYWRlciBpbmZvcm1hdGlvbiBwYXNzaW5nIgotIyAgICAgICAgZGVwZW5kcyBvbiBBUkNIX09NQVAKLSMgICAgICAgIGRlZmF1bHQgbgotIyAgICAgICAgaGVscAotIyAgICAgICAgICBTYXkgWSwgaWYgeW91IGhhdmUgYSBib290bG9hZGVyIHdoaWNoIHBhc3NlcyBpbmZvcm1hdGlvbgotIyAgICAgICAgICBhYm91dCB5b3VyIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbCBjb25maWd1cmF0aW9uLgotCi1jb25maWcgT01BUF9NVVgKLQlib29sICJPTUFQIG11bHRpcGxleGluZyBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIEFSQ0hfT01BUAotCWRlZmF1bHQgeQotICAgICAgICBoZWxwCi0gICAgICAgICAgUGluIG11bHRpcGxleGluZyBzdXBwb3J0IGZvciBPTUFQIGJvYXJkcy4gSWYgeW91ciBib290bG9hZGVyCi0gICAgICAgICAgc2V0cyB0aGUgbXVsdGlwbGV4aW5nIGNvcnJlY3RseSwgc2F5IE4uIE90aGVyd2lzZSwgb3IgaWYgdW5zdXJlLAotICAgICAgICAgIHNheSBZLgotCi1jb25maWcgT01BUF9NVVhfREVCVUcKLQlib29sICJNdWx0aXBsZXhpbmcgZGVidWcgb3V0cHV0IgotICAgICAgICBkZXBlbmRzIG9uIE9NQVBfTVVYCi0gICAgICAgIGRlZmF1bHQgbgotICAgICAgICBoZWxwCi0gICAgICAgICAgTWFrZXMgdGhlIG11bHRpcGxleGluZyBmdW5jdGlvbnMgcHJpbnQgb3V0IGEgbG90IG9mIGRlYnVnIGluZm8uCi0gICAgICAgICAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZmluZCBvdXQgdGhlIGNvcnJlY3QgdmFsdWVzIG9mIHRoZQotICAgICAgICAgIG11bHRpcGxleGluZyByZWdpc3RlcnMuCi0KLWNvbmZpZyBPTUFQX01VWF9XQVJOSU5HUwotCWJvb2wgIldhcm4gYWJvdXQgcGlucyB0aGUgYm9vdGxvYWRlciBkaWRuJ3Qgc2V0IHVwIgotICAgICAgICBkZXBlbmRzIG9uIE9NQVBfTVVYCi0gICAgICAgIGRlZmF1bHQgeQotICAgICAgICBoZWxwCi0JICBDaG9vc2UgWSBoZXJlIHRvIHdhcm4gd2hlbmV2ZXIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGxvZ2ljIG5lZWRzCi0JICB0byBjaGFuZ2UgdGhlIHBpbiBtdWx0aXBsZXhpbmcgc2V0dXAuICBXaGVuIHRoZXJlIGFyZSBubyB3YXJuaW5ncwotCSAgcHJpbnRlZCwgaXQncyBzYWZlIHRvIGRlc2VsZWN0IE9NQVBfTVVYIGZvciB5b3VyIHByb2R1Y3QuCi0KLWNob2ljZQotICAgICAgICBwcm9tcHQgIlN5c3RlbSB0aW1lciIKLQlkZWZhdWx0IE9NQVBfTVBVX1RJTUVSCi0KLWNvbmZpZyBPTUFQX01QVV9USU1FUgotCWJvb2wgIlVzZSBtcHUgdGltZXIiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgT01BUCBtcHUgdGltZXIuIFRoaXMKLQkgIHRpbWVyIHByb3ZpZGVzIG1vcmUgaW50cmEtdGljayByZXNvbHV0aW9uIHRoYW4gdGhlIDMyS0h6IHRpbWVyLAotCSAgYnV0IGNvbnN1bWVzIG1vcmUgcG93ZXIuCi0KLWNvbmZpZyBPTUFQXzMyS19USU1FUgotCWJvb2wgIlVzZSAzMktIeiB0aW1lciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFgKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBPTUFQIDMyS0h6IHRpbWVyLgotCSAgVGhpcyB0aW1lciBzYXZlcyBwb3dlciBjb21wYXJlZCB0byB0aGUgT01BUF9NUFVfVElNRVIsIGFuZCBoYXMKLQkgIHN1cHBvcnQgZm9yIG5vIHRpY2sgZHVyaW5nIGlkbGUuIFRoZSAzMktIeiB0aW1lciBwcm92aWRlcyBsZXNzCi0JICBpbnRyYS10aWNrIHJlc29sdXRpb24gdGhhbiBPTUFQX01QVV9USU1FUi4gVGhlIDMyS0h6IHRpbWVyIGlzCi0JICBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIE9NQVAtMTZ4eC4KLQotZW5kY2hvaWNlCi0KLWNvbmZpZyBPTUFQXzMyS19USU1FUl9IWgotICAgICAgIGludCAiS2VybmVsIGludGVybmFsIHRpbWVyIGZyZXF1ZW5jeSBmb3IgMzJLSHogdGltZXIiCi0gICAgICAgcmFuZ2UgMzIgMTAyNAotICAgICAgIGRlcGVuZHMgb24gT01BUF8zMktfVElNRVIKLSAgICAgICBkZWZhdWx0ICIxMjgiCi0gICAgICAgaGVscAotCSAgS2VybmVsIGludGVybmFsIHRpbWVyIGZyZXF1ZW5jeSBzaG91bGQgYmUgYSBkaXZpc29yIG9mIDMyNzY4LAotCSAgc3VjaCBhcyA2NCBvciAxMjguCi0KLWNob2ljZQotCXByb21wdCAiTG93LWxldmVsIGRlYnVnIGNvbnNvbGUgVUFSVCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUAotCWRlZmF1bHQgT01BUF9MTF9ERUJVR19VQVJUMQotCi1jb25maWcgT01BUF9MTF9ERUJVR19VQVJUMQotCWJvb2wgIlVBUlQxIgotCi1jb25maWcgT01BUF9MTF9ERUJVR19VQVJUMgotCWJvb2wgIlVBUlQyIgotCi1jb25maWcgT01BUF9MTF9ERUJVR19VQVJUMwotCWJvb2wgIlVBUlQzIgotCi1lbmRjaG9pY2UKLQotY29uZmlnIE9NQVBfQVJNXzE5NU1IWgotCWJvb2wgIk9NQVAgQVJNIDE5NSBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQNzMwCi0JaGVscAotICAgICAgICAgIEVuYWJsZSAxOTVNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgT01BUF9BUk1fMTkyTUhaCi0JYm9vbCAiT01BUCBBUk0gMTkyIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYCi0JaGVscAotICAgICAgICAgIEVuYWJsZSAxOTJNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgT01BUF9BUk1fMTgyTUhaCi0JYm9vbCAiT01BUCBBUk0gMTgyIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVA3MzAKLQloZWxwCi0gICAgICAgICAgRW5hYmxlIDE4Mk1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBPTUFQX0FSTV8xNjhNSFoKLQlib29sICJPTUFQIEFSTSAxNjggTUh6IENQVSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE1MTAgfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzAKLQloZWxwCi0gICAgICAgICAgRW5hYmxlIDE2OE1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBPTUFQX0FSTV8xMjBNSFoKLQlib29sICJPTUFQIEFSTSAxMjAgTUh6IENQVSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE1MTAgfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzAKLQloZWxwCi0gICAgICAgICAgRW5hYmxlIDEyME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBPTUFQX0FSTV82ME1IWgotCWJvb2wgIk9NQVAgQVJNIDYwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwCi0gICAgICAgIGRlZmF1bHQgeQotCWhlbHAKLSAgICAgICAgICBFbmFibGUgNjBNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBZLgotCi1jb25maWcgT01BUF9BUk1fMzBNSFoKLQlib29sICJPTUFQIEFSTSAzMCBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMAotCWhlbHAKLSAgICAgICAgICBFbmFibGUgMzBNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgotCi1lbmRtZW51Ci0KLWVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYWZiMTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KLSMKLQotIyBDb21tb24gc3VwcG9ydAotb2JqLXkgOj0gY29tbW9uLm8gdGltZS5vIGlycS5vIGRtYS5vIGNsb2NrLm8gbXV4Lm8gZ3Bpby5vIG1jYnNwLm8gdXNiLm8KLW9iai1tIDo9Ci1vYmotbiA6PQotb2JqLSAgOj0KLWxlZC15IDo9IGxlZHMubwotCi0jIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKLW9iai0kKENPTkZJR19NQUNIX09NQVBfSDIpICs9IGJvYXJkLWgyLm8KLW9iai0kKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKSArPSBib2FyZC1pbm5vdmF0b3Iubwotb2JqLSQoQ09ORklHX01BQ0hfT01BUF9HRU5FUklDKSArPSBib2FyZC1nZW5lcmljLm8KLW9iai0kKENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIpICs9IGJvYXJkLXBlcnNldXMyLm8KLW9iai0kKENPTkZJR19NQUNIX09NQVBfT1NLKSArPSBib2FyZC1vc2subwotb2JqLSQoQ09ORklHX01BQ0hfT01BUF9IMykgKz0gYm9hcmQtaDMubwotb2JqLSQoQ09ORklHX01BQ0hfVk9JQ0VCTFVFKSArPSBib2FyZC12b2ljZWJsdWUubwotb2JqLSQoQ09ORklHX01BQ0hfTkVUU1RBUikgKz0gYm9hcmQtbmV0c3Rhci5vCi0KLSMgT0NQSSBpbnRlcmNvbm5lY3Qgc3VwcG9ydCBmb3IgMTcxMCwgMTYxMCBhbmQgNTkxMgotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDE2WFgpICs9IG9jcGkubwotCi0jIExFRHMgc3VwcG9ydAotbGVkLSQoQ09ORklHX01BQ0hfT01BUF9IMikgKz0gbGVkcy1oMnAyLWRlYnVnLm8KLWxlZC0kKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKSArPSBsZWRzLWlubm92YXRvci5vCi1sZWQtJChDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyKSArPSBsZWRzLWgycDItZGVidWcubwotb2JqLSQoQ09ORklHX0xFRFMpICs9ICQobGVkLXkpCi0KLSMgUG93ZXIgTWFuYWdlbWVudAotb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KLQotaWZlcSAoJChDT05GSUdfQVJDSF9PTUFQMTUxMCkseSkKLSMgSW5ub3ZhdG9yLTE1MTAgRlBHQQotb2JqLSQoQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IpICs9IGZwZ2EubwotZW5kaWYKLQotIyBrZ2RiIHN1cHBvcnQKLW9iai0kKENPTkZJR19LR0RCX1NFUklBTCkJKz0ga2dkYi1zZXJpYWwubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwL2NvbW1vbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVjZGU0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9jb21tb24uYworKysgL2Rldi9udWxsCkBAIC0xLDU0OSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2NvbW1vbi5jCi0gKgotICogQ29kZSBjb21tb24gdG8gYWxsIE9NQVAgbWFjaGluZXMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgotCi0jaW5jbHVkZSAiY2xvY2suaCIKLQotI2RlZmluZSBERUJVRyAxCi0KLXN0cnVjdCBvbWFwX2lkIHsKLQl1MTYJanRhZ19pZDsJLyogVXNlZCB0byBkZXRlcm1pbmUgT01BUCB0eXBlICovCi0JdTgJZGllX3JldjsJLyogUHJvY2Vzc29yIHJldmlzaW9uICovCi0JdTMyCW9tYXBfaWQ7CS8qIE9NQVAgcmV2aXNpb24gKi8KLQl1MzIJdHlwZTsJCS8qIENwdSBpZCBiaXRzIFszMTowOF0sIGNwdSBjbGFzcyBiaXRzIFswNzowMF0gKi8KLX07Ci0KLS8qIFJlZ2lzdGVyIHZhbHVlcyB0byBkZXRlY3QgdGhlIE9NQVAgdmVyc2lvbiAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2lkIG9tYXBfaWRzW10gX19pbml0ZGF0YSA9IHsKLQl7IC5qdGFnX2lkID0gMHgzNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAxMDB9LAotCXsgLmp0YWdfaWQgPSAweGI1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgwNzMwMDMwMH0sCi0JeyAuanRhZ19pZCA9IDB4YjQ3MCwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMxMDEwMCwgLnR5cGUgPSAweDE1MTAwMDAwfSwKLQl7IC5qdGFnX2lkID0gMHhiNTc2LCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MTYxMDAwMDB9LAotCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMjAxMDAsIC50eXBlID0gMHgxNjExMDAwMH0sCi0JeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDMsIC5vbWFwX2lkID0gMHgwMzMyMDEwMCwgLnR5cGUgPSAweDE2MTAwYzAwfSwKLQl7IC5qdGFnX2lkID0gMHhiNTc2LCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMjAwLCAudHlwZSA9IDB4MTYxMDBkMDB9LAotCXsgLmp0YWdfaWQgPSAweGI2MTMsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAzMDAsIC50eXBlID0gMHgxNjEwZWYwMH0sCi0JeyAuanRhZ19pZCA9IDB4YjYxMywgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDMwMCwgLnR5cGUgPSAweDE2MTBlZjAwfSwKLQl7IC5qdGFnX2lkID0gMHhiNTc2LCAuZGllX3JldiA9IDB4MSwgLm9tYXBfaWQgPSAweDAzMzIwMTAwLCAudHlwZSA9IDB4MTYxMTAwMDB9LAotCXsgLmp0YWdfaWQgPSAweGI1OGMsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMjAyMDAsIC50eXBlID0gMHgxNjExMGIwMH0sCi0JeyAuanRhZ19pZCA9IDB4YjU4YywgLmRpZV9yZXYgPSAweDMsIC5vbWFwX2lkID0gMHgwMzMyMDIwMCwgLnR5cGUgPSAweDE2MTEwYzAwfSwKLQl7IC5qdGFnX2lkID0gMHhiNjVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwNDAwLCAudHlwZSA9IDB4MTYyMTIzMDB9LAotCXsgLmp0YWdfaWQgPSAweGI2NWYsIC5kaWVfcmV2ID0gMHgxLCAub21hcF9pZCA9IDB4MDMzMjA0MDAsIC50eXBlID0gMHgxNjIxMjMwMH0sCi0JeyAuanRhZ19pZCA9IDB4YjY1ZiwgLmRpZV9yZXYgPSAweDEsIC5vbWFwX2lkID0gMHgwMzMyMDUwMCwgLnR5cGUgPSAweDE2MjEyMzAwfSwKLQl7IC5qdGFnX2lkID0gMHhiNWY3LCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzMwMDAwLCAudHlwZSA9IDB4MTcxMDAwMDB9LAotCXsgLmp0YWdfaWQgPSAweGI1ZjcsIC5kaWVfcmV2ID0gMHgxLCAub21hcF9pZCA9IDB4MDMzMzAxMDAsIC50eXBlID0gMHgxNzEwMDAwMH0sCi0JeyAuanRhZ19pZCA9IDB4YjVmNywgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMzMDEwMCwgLnR5cGUgPSAweDE3MTAwMDAwfSwKLX07Ci0KLS8qCi0gKiBHZXQgT01BUCB0eXBlIGZyb20gUFJPRF9JRC4KLSAqIDE3MTAgaGFzIHRoZSBQUk9EX0lEIGluIGJpdHMgMTU6MDAsIG5vdCBpbiAxNjowMSBhcyBkb2N1bWVudGVkIGluIFRSTS4KLSAqIDE1MTAgUFJPRF9JRCBpcyBlbXB0eSwgYW5kIDE2MTAgUFJPRF9JRCBkb2VzIG5vdCBtYWtlIHNlbnNlLgotICogVW5kb2N1bWVudGVkIHJlZ2lzdGVyIGluIFRFU1QgQkxPQ0sgaXMgdXNlZCBhcyBmYWxsYmFjazsgVGhpcyBzZWVtcyB0bwotICogd29yayBvbiAxNTEwLCAxNjEwICYgMTcxMC4gVGhlIG9mZmljaWFsIHdheSBob3BlZnVsbHkgd2lsbCB3b3JrIGluIGZ1dHVyZQotICogcHJvY2Vzc29ycy4KLSAqLwotc3RhdGljIHUxNiBfX2luaXQgb21hcF9nZXRfanRhZ19pZCh2b2lkKQotewotCXUzMiBwcm9kX2lkLCBvbWFwX2lkOwotCi0JcHJvZF9pZCA9IG9tYXBfcmVhZGwoT01BUF9QUk9EVUNUSU9OX0lEXzEpOwotCW9tYXBfaWQgPSBvbWFwX3JlYWRsKE9NQVAzMl9JRF8xKTsKLQotCS8qIENoZWNrIGZvciB1bnVzYWJsZSBPTUFQX1BST0RVQ1RJT05fSURfMSBvbiAxNjExQi81OTEyIGFuZCA3MzAgKi8KLQlpZiAoKChwcm9kX2lkID4+IDIwKSA9PSAwKSB8fCAocHJvZF9pZCA9PSBvbWFwX2lkKSkKLQkJcHJvZF9pZCA9IDA7Ci0JZWxzZQotCQlwcm9kX2lkICY9IDB4ZmZmZjsKLQotCWlmIChwcm9kX2lkKQotCQlyZXR1cm4gcHJvZF9pZDsKLQotCS8qIFVzZSBPTUFQMzJfSURfMSBhcyBmYWxsYmFjayAqLwotCXByb2RfaWQgPSAoKG9tYXBfaWQgPj4gMTIpICYgMHhmZmZmKTsKLQotCXJldHVybiBwcm9kX2lkOwotfQotCi0vKgotICogR2V0IE9NQVAgcmV2aXNpb24gZnJvbSBESUVfUkVWLgotICogRWFybHkgMTcxMCBwcm9jZXNzb3JzIG1heSBoYXZlIGJyb2tlbiBPTUFQX0RJRV9JRCwgaXQgY29udGFpbnMgUFJPRF9JRC4KLSAqIFVuZG9jdW1lbnRlZCByZWdpc3RlciBpbiB0aGUgVEVTVCBCTE9DSyBpcyB1c2VkIGFzIGZhbGxiYWNrLgotICogUkVWSVNJVDogVGhpcyBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgb24gMTUxMAotICovCi1zdGF0aWMgdTggX19pbml0IG9tYXBfZ2V0X2RpZV9yZXYodm9pZCkKLXsKLQl1MzIgZGllX3JldjsKLQotCWRpZV9yZXYgPSBvbWFwX3JlYWRsKE9NQVBfRElFX0lEXzEpOwotCi0JLyogQ2hlY2sgZm9yIGJyb2tlbiBPTUFQX0RJRV9JRCBvbiBlYXJseSAxNzEwICovCi0JaWYgKCgoZGllX3JldiA+PiAxMikgJiAweGZmZmYpID09IG9tYXBfZ2V0X2p0YWdfaWQoKSkKLQkJZGllX3JldiA9IDA7Ci0KLQlkaWVfcmV2ID0gKGRpZV9yZXYgPj4gMTcpICYgMHhmOwotCWlmIChkaWVfcmV2KQotCQlyZXR1cm4gZGllX3JldjsKLQotCWRpZV9yZXYgPSAob21hcF9yZWFkbChPTUFQMzJfSURfMSkgPj4gMjgpICYgMHhmOwotCi0JcmV0dXJuIGRpZV9yZXY7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2NoZWNrX3JldmlzaW9uKHZvaWQpCi17Ci0JaW50IGk7Ci0JdTE2IGp0YWdfaWQ7Ci0JdTggZGllX3JldjsKLQl1MzIgb21hcF9pZDsKLQl1OCBjcHVfdHlwZTsKLQotCWp0YWdfaWQgPSBvbWFwX2dldF9qdGFnX2lkKCk7Ci0JZGllX3JldiA9IG9tYXBfZ2V0X2RpZV9yZXYoKTsKLQlvbWFwX2lkID0gb21hcF9yZWFkbChPTUFQMzJfSURfMCk7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50aygiT01BUF9ESUVfSURfMDogMHglMDh4XG4iLCBvbWFwX3JlYWRsKE9NQVBfRElFX0lEXzApKTsKLQlwcmludGsoIk9NQVBfRElFX0lEXzE6IDB4JTA4eCBESUVfUkVWOiAlaVxuIiwKLQkJb21hcF9yZWFkbChPTUFQX0RJRV9JRF8xKSwKLQkgICAgICAgKG9tYXBfcmVhZGwoT01BUF9ESUVfSURfMSkgPj4gMTcpICYgMHhmKTsKLQlwcmludGsoIk9NQVBfUFJPRFVDVElPTl9JRF8wOiAweCUwOHhcbiIsIG9tYXBfcmVhZGwoT01BUF9QUk9EVUNUSU9OX0lEXzApKTsKLQlwcmludGsoIk9NQVBfUFJPRFVDVElPTl9JRF8xOiAweCUwOHggSlRBR19JRDogMHglMDR4XG4iLAotCQlvbWFwX3JlYWRsKE9NQVBfUFJPRFVDVElPTl9JRF8xKSwKLQkJb21hcF9yZWFkbChPTUFQX1BST0RVQ1RJT05fSURfMSkgJiAweGZmZmYpOwotCXByaW50aygiT01BUDMyX0lEXzA6IDB4JTA4eFxuIiwgb21hcF9yZWFkbChPTUFQMzJfSURfMCkpOwotCXByaW50aygiT01BUDMyX0lEXzE6IDB4JTA4eFxuIiwgb21hcF9yZWFkbChPTUFQMzJfSURfMSkpOwotCXByaW50aygiSlRBR19JRDogMHglMDR4IERJRV9SRVY6ICVpXG4iLCBqdGFnX2lkLCBkaWVfcmV2KTsKLSNlbmRpZgotCi0Jc3lzdGVtX3NlcmlhbF9oaWdoID0gb21hcF9yZWFkbChPTUFQX0RJRV9JRF8wKTsKLQlzeXN0ZW1fc2VyaWFsX2xvdyA9IG9tYXBfcmVhZGwoT01BUF9ESUVfSURfMSk7Ci0KLQkvKiBGaXJzdCBjaGVjayBvbmx5IHRoZSBtYWpvciB2ZXJzaW9uIGluIGEgc2FmZSB3YXkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvbWFwX2lkcyk7IGkrKykgewotCQlpZiAoanRhZ19pZCA9PSAob21hcF9pZHNbaV0uanRhZ19pZCkpIHsKLQkJCXN5c3RlbV9yZXYgPSBvbWFwX2lkc1tpXS50eXBlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBDaGVjayBpZiB3ZSBjYW4gZmluZCB0aGUgZGllIHJldmlzaW9uICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBpKyspIHsKLQkJaWYgKGp0YWdfaWQgPT0gb21hcF9pZHNbaV0uanRhZ19pZCAmJiBkaWVfcmV2ID09IG9tYXBfaWRzW2ldLmRpZV9yZXYpIHsKLQkJCXN5c3RlbV9yZXYgPSBvbWFwX2lkc1tpXS50eXBlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBGaW5hbGx5IGNoZWNrIGFsc28gdGhlIG9tYXBfaWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvbWFwX2lkcyk7IGkrKykgewotCQlpZiAoanRhZ19pZCA9PSBvbWFwX2lkc1tpXS5qdGFnX2lkCi0JCSAgICAmJiBkaWVfcmV2ID09IG9tYXBfaWRzW2ldLmRpZV9yZXYKLQkJICAgICYmIG9tYXBfaWQgPT0gb21hcF9pZHNbaV0ub21hcF9pZCkgewotCQkJc3lzdGVtX3JldiA9IG9tYXBfaWRzW2ldLnR5cGU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIEFkZCB0aGUgY3B1IGNsYXNzIGluZm8gKDd4eCwgMTV4eCwgMTZ4eCwgMjR4eCkgKi8KLQljcHVfdHlwZSA9IHN5c3RlbV9yZXYgPj4gMjQ7Ci0KLQlzd2l0Y2ggKGNwdV90eXBlKSB7Ci0JY2FzZSAweDA3OgotCQlzeXN0ZW1fcmV2IHw9IDB4MDc7Ci0JCWJyZWFrOwotCWNhc2UgMHgxNToKLQkJc3lzdGVtX3JldiB8PSAweDE1OwotCQlicmVhazsKLQljYXNlIDB4MTY6Ci0JY2FzZSAweDE3OgotCQlzeXN0ZW1fcmV2IHw9IDB4MTY7Ci0JCWJyZWFrOwotCWNhc2UgMHgyNDoKLQkJc3lzdGVtX3JldiB8PSAweDI0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIlVua25vd24gT01BUCBjcHUgdHlwZTogMHglMDJ4XG4iLCBjcHVfdHlwZSk7Ci0JfQotCi0JcHJpbnRrKCJPTUFQJTA0eCIsIHN5c3RlbV9yZXYgPj4gMTYpOwotCWlmICgoc3lzdGVtX3JldiA+PiA4KSAmIDB4ZmYpCi0JCXByaW50aygiJXgiLCAoc3lzdGVtX3JldiA+PiA4KSAmIDB4ZmYpOwotCXByaW50aygiIHJldmlzaW9uICVpIGhhbmRsZWQgYXMgJTAyeHh4IGlkOiAlMDh4JTA4eFxuIiwKLQkgICAgICAgZGllX3Jldiwgc3lzdGVtX3JldiAmIDB4ZmYsIHN5c3RlbV9zZXJpYWxfbG93LAotCSAgICAgICBzeXN0ZW1fc2VyaWFsX2hpZ2gpOwotfQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogT01BUCBJL08gbWFwcGluZwotICoKLSAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlcyB0aGUKLSAqIGRlZmF1bHQgbWFwcGluZyBwcm92aWRlZCBoZXJlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLSB7IElPX1ZJUlQsICAgICAgCUlPX1BIWVMsICAgICAgICAgICAgIElPX1NJWkUsICAgICAgICAJICAgTVRfREVWSUNFIH0sCi19OwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwNzMwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotIHsgT01BUDczMF9EU1BfQkFTRSwgICAgT01BUDczMF9EU1BfU1RBUlQsICAgIE9NQVA3MzBfRFNQX1NJWkUsICAgIE1UX0RFVklDRSB9LAotIHsgT01BUDczMF9EU1BSRUdfQkFTRSwgT01BUDczMF9EU1BSRUdfU1RBUlQsIE9NQVA3MzBfRFNQUkVHX1NJWkUsIE1UX0RFVklDRSB9LAotIHsgT01BUDczMF9TUkFNX0JBU0UsICAgT01BUDczMF9TUkFNX1NUQVJULCAgIE9NQVA3MzBfU1JBTV9TSVpFLCAgIE1UX0RFVklDRSB9Ci19OwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMTUxMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLSB7IE9NQVAxNTEwX0RTUF9CQVNFLCAgICBPTUFQMTUxMF9EU1BfU1RBUlQsICAgIE9NQVAxNTEwX0RTUF9TSVpFLCAgICBNVF9ERVZJQ0UgfSwKLSB7IE9NQVAxNTEwX0RTUFJFR19CQVNFLCBPTUFQMTUxMF9EU1BSRUdfU1RBUlQsIE9NQVAxNTEwX0RTUFJFR19TSVpFLCBNVF9ERVZJQ0UgfSwKLSB7IE9NQVAxNTEwX1NSQU1fQkFTRSwgICBPTUFQMTUxMF9TUkFNX1NUQVJULCAgIE9NQVAxNTEwX1NSQU1fU0laRSwgICBNVF9ERVZJQ0UgfQotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDE2MTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0geyBPTUFQMTZYWF9EU1BfQkFTRSwgICAgT01BUDE2WFhfRFNQX1NUQVJULCAgICBPTUFQMTZYWF9EU1BfU0laRSwgICAgTVRfREVWSUNFIH0sCi0geyBPTUFQMTZYWF9EU1BSRUdfQkFTRSwgT01BUDE2WFhfRFNQUkVHX1NUQVJULCBPTUFQMTZYWF9EU1BSRUdfU0laRSwgTVRfREVWSUNFIH0sCi0geyBPTUFQMTZYWF9TUkFNX0JBU0UsICAgT01BUDE2WFhfU1JBTV9TVEFSVCwgICBPTUFQMTYxMF9TUkFNX1NJWkUsICAgTVRfREVWSUNFIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDU5MTJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0geyBPTUFQMTZYWF9EU1BfQkFTRSwgICAgT01BUDE2WFhfRFNQX1NUQVJULCAgICBPTUFQMTZYWF9EU1BfU0laRSwgICAgTVRfREVWSUNFIH0sCi0geyBPTUFQMTZYWF9EU1BSRUdfQkFTRSwgT01BUDE2WFhfRFNQUkVHX1NUQVJULCBPTUFQMTZYWF9EU1BSRUdfU0laRSwgTVRfREVWSUNFIH0sCi0vKgotICogVGhlIE9NQVA1OTEyIGhhcyAyNTBrQnl0ZSBpbnRlcm5hbCBTUkFNLiBCZWNhdXNlIHRoZSBtYXBwaW5nIGlzIGJhc2VlZCBvbiBwYWdlCi0gKiBzaXplICg0a0J5dGUpLCBpdCBzZWVtcyB0aGF0IHRoZSBsYXN0IDJrQnl0ZSAoPTB4ODAwKSBvZiB0aGUgMjUwa0J5dGUgYXJlIG5vdCBtYXBwZWQuCi0gKiBBZGQgYWRkaXRpb25hbCAya0J5dGUgKDB4ODAwKSBzbyB0aGF0IHRoZSBsYXN0IHBhZ2UgaXMgbWFwcGVkIGFuZCB0aGUgbGFzdCAya0J5dGUKLSAqIGNhbiBiZSB1c2VkLgotICovCi0geyBPTUFQMTZYWF9TUkFNX0JBU0UsICAgT01BUDE2WFhfU1JBTV9TVEFSVCwgICBPTUFQNTkxMl9TUkFNX1NJWkUgKyAweDgwMCwgICBNVF9ERVZJQ0UgfQotfTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKLQotc3RhdGljIHZvaWQgX19pbml0IF9vbWFwX21hcF9pbyh2b2lkKQotewotCWluaXRpYWxpemVkID0gMTsKLQotCS8qIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgSU8gc3BhY2UgbWFwcGluZyBiZWZvcmUgd2UgY2FuIHJ1bgotCSAqIGNwdV9pc19vbWFweHh4KCkgbWFjcm9zLiAqLwotCWlvdGFibGVfaW5pdChvbWFwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcF9pb19kZXNjKSk7Ci0Jb21hcF9jaGVja19yZXZpc2lvbigpOwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAotCWlmIChjcHVfaXNfb21hcDczMCgpKSB7Ci0JCWlvdGFibGVfaW5pdChvbWFwNzMwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDczMF9pb19kZXNjKSk7Ci0JfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJaW90YWJsZV9pbml0KG9tYXAxNTEwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDE1MTBfaW9fZGVzYykpOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCi0JaWYgKGNwdV9pc19vbWFwMTYxMCgpIHx8IGNwdV9pc19vbWFwMTcxMCgpKSB7Ci0JCWlvdGFibGVfaW5pdChvbWFwMTYxMF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAxNjEwX2lvX2Rlc2MpKTsKLQl9Ci0JaWYgKGNwdV9pc19vbWFwNTkxMigpKSB7Ci0JCWlvdGFibGVfaW5pdChvbWFwNTkxMl9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXA1OTEyX2lvX2Rlc2MpKTsKLQl9Ci0jZW5kaWYKLQotCS8qIFJFVklTSVQ6IFJlZmVyIHRvIE9NQVA1OTEwIEVycmF0YSwgQWR2aXNvcnkgU1lTXzE6ICJUaW1lb3V0IEFib3J0Ci0JICogb24gYSBQb3N0ZWQgV3JpdGUgaW4gdGhlIFRJUEIgQnJpZGdlIi4KLQkgKi8KLQlvbWFwX3dyaXRldygweDAsIE1QVV9QVUJMSUNfVElQQl9DTlRMKTsKLQlvbWFwX3dyaXRldygweDAsIE1QVV9QUklWQVRFX1RJUEJfQ05UTCk7Ci0KLQkvKiBNdXN0IGluaXQgY2xvY2tzIGVhcmx5IHRvIGFzc3VyZSB0aGF0IHRpbWVyIGludGVycnVwdCB3b3JrcwotCSAqLwotCWNsa19pbml0KCk7Ci19Ci0KLS8qCi0gKiBUaGlzIHNob3VsZCBvbmx5IGdldCBjYWxsZWQgZnJvbSBib2FyZCBzcGVjaWZpYyBpbml0Ci0gKi8KLXZvaWQgb21hcF9tYXBfaW8odm9pZCkKLXsKLQlpZiAoIWluaXRpYWxpemVkKQotCQlfb21hcF9tYXBfaW8oKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb21hcF9zZXJpYWxfaW4oc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICp1cCwKLQkJCQkJICBpbnQgb2Zmc2V0KQotewotCW9mZnNldCA8PD0gdXAtPnJlZ3NoaWZ0OwotCXJldHVybiAodW5zaWduZWQgaW50KV9fcmF3X3JlYWRiKHVwLT5tZW1iYXNlICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfc2VyaWFsX291dHAoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwLCBpbnQgb2Zmc2V0LAotCQkJCSAgICBpbnQgdmFsdWUpCi17Ci0Jb2Zmc2V0IDw8PSBwLT5yZWdzaGlmdDsKLQlfX3Jhd193cml0ZWIodmFsdWUsIHAtPm1lbWJhc2UgKyBvZmZzZXQpOwotfQotCi0vKgotICogSW50ZXJuYWwgVUFSVHMgbmVlZCB0byBiZSBpbml0aWFsaXplZCBmb3IgdGhlIDgyNTAgYXV0b2NvbmZpZyB0byB3b3JrCi0gKiBwcm9wZXJseS4gTm90ZSB0aGF0IHRoZSBUWCB3YXRlcm1hcmsgaW5pdGlhbGl6YXRpb24gbWF5IG5vdCBiZSBuZWVkZWQKLSAqIG9uY2UgdGhlIDgyNTAuYyB3YXRlcm1hcmsgaGFuZGxpbmcgY29kZSBpcyBtZXJnZWQuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9yZXNldChzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnApCi17Ci0Jb21hcF9zZXJpYWxfb3V0cChwLCBVQVJUX09NQVBfTURSMSwgMHgwNyk7CS8qIGRpc2FibGUgVUFSVCAqLwotCW9tYXBfc2VyaWFsX291dHAocCwgVUFSVF9PTUFQX1NDUiwgMHgwOCk7CS8qIFRYIHdhdGVybWFyayAqLwotCW9tYXBfc2VyaWFsX291dHAocCwgVUFSVF9PTUFQX01EUjEsIDB4MDApOwkvKiBlbmFibGUgVUFSVCAqLwotCi0JaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgewotCQlvbWFwX3NlcmlhbF9vdXRwKHAsIFVBUlRfT01BUF9TWVNDLCAweDAxKTsKLQkJd2hpbGUgKCEob21hcF9zZXJpYWxfaW4ocCwgVUFSVF9PTUFQX1NZU0MpICYgMHgwMSkpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1lbWJhc2UJPSAoY2hhciopSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpLAotCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDFfQkFTRSwKLQkJLmlycQkJPSBJTlRfVUFSVDEsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJLnJlZ3NoaWZ0CT0gMiwKLQkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKLQl9LAotCXsKLQkJLm1lbWJhc2UJPSAoY2hhciopSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAotCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDJfQkFTRSwKLQkJLmlycQkJPSBJTlRfVUFSVDIsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJLnJlZ3NoaWZ0CT0gMiwKLQkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKLQl9LAotCXsKLQkJLm1lbWJhc2UJPSAoY2hhciopSU9fQUREUkVTUyhPTUFQX1VBUlQzX0JBU0UpLAotCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDNfQkFTRSwKLQkJLmlycQkJPSBJTlRfVUFSVDMsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJLnJlZ3NoaWZ0CT0gMiwKLQkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKLQl9LAotCXsgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKLQkuaWQJCQk9IDAsCi0JLmRldgkJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotCi0vKgotICogTm90ZSB0aGF0IG9uIElubm92YXRvci0xNTEwIFVBUlQyIHBpbnMgY29uZmxpY3Qgd2l0aCBVU0IyLgotICogQnkgZGVmYXVsdCBVQVJUMiBkb2VzIG5vdCB3b3JrIG9uIElubm92YXRvci0xNTEwIGlmIHlvdSBoYXZlCi0gKiBVU0IgT0hDSSBlbmFibGVkLiBUbyB1c2UgVUFSVDIsIHlvdSBtdXN0IGRpc2FibGUgVVNCMiBmaXJzdC4KLSAqLwotdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdChpbnQgcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdKQotewotCWludCBpOwotCi0JaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKLQkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0ucmVnc2hpZnQgPSAwOwotCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsxXS5yZWdzaGlmdCA9IDA7Ci0JCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdLmlycSA9IElOVF83MzBfVUFSVF9NT0RFTV8xOwotCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsxXS5pcnEgPSBJTlRfNzMwX1VBUlRfTU9ERU1fSVJEQV8yOwotCX0KLQotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewotCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVswXS51YXJ0Y2xrID0gT01BUDE1MTBfQkFTRV9CQVVEICogMTY7Ci0JCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzFdLnVhcnRjbGsgPSBPTUFQMTUxMF9CQVNFX0JBVUQgKiAxNjsKLQkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMl0udWFydGNsayA9IE9NQVAxNTEwX0JBU0VfQkFVRCAqIDE2OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBPTUFQX01BWF9OUl9QT1JUUzsgaSsrKSB7Ci0JCXVuc2lnbmVkIGNoYXIgcmVnOwotCi0JCWlmIChwb3J0c1tpXSA9PSAwKSB7Ci0JCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXS5tZW1iYXNlID0gMDsKLQkJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhW2ldLm1hcGJhc2UgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSAwOgotCQkJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTJfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOwotCQkJfQotCQkJaWYgKGNwdV9pc19vbWFwMTcxMCgpKSB7Ci0JCQkJY2xrX2VuYWJsZShjbGtfZ2V0KDAsICJ1YXJ0M19jayIpKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCW9tYXBfc2VyaWFsX3Jlc2V0KCZzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKLX0KLWFyY2hfaW5pdGNhbGwob21hcF9pbml0KTsKLQotI2RlZmluZSBOT19MRU5HVEhfQ0hFQ0sgMHhmZmZmZmZmZgotCi1leHRlcm4gaW50IG9tYXBfYm9vdGxvYWRlcl90YWdfbGVuOwotZXh0ZXJuIHU4IG9tYXBfYm9vdGxvYWRlcl90YWdbXTsKLQotc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCAqb21hcF9ib2FyZF9jb25maWc7Ci1pbnQgb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IDA7Ci0KLXN0YXRpYyBjb25zdCB2b2lkICpnZXRfY29uZmlnKHUxNiB0YWcsIHNpemVfdCBsZW4sIGludCBza2lwLCBzaXplX3QgKmxlbl9vdXQpCi17Ci0Jc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCAqa2luZm8gPSBOVUxMOwotCWludCBpOwotCi0jaWZkZWYgQ09ORklHX09NQVBfQk9PVF9UQUcKLQlzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfZW50cnkgKmluZm8gPSBOVUxMOwotCi0JaWYgKG9tYXBfYm9vdGxvYWRlcl90YWdfbGVuID4gNCkKLQkJaW5mbyA9IChzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfZW50cnkgKikgb21hcF9ib290bG9hZGVyX3RhZzsKLQl3aGlsZSAoaW5mbyAhPSBOVUxMKSB7Ci0JCXU4ICpuZXh0OwotCi0JCWlmIChpbmZvLT50YWcgPT0gdGFnKSB7Ci0JCQlpZiAoc2tpcCA9PSAwKQotCQkJCWJyZWFrOwotCQkJc2tpcC0tOwotCQl9Ci0KLQkJaWYgKChpbmZvLT5sZW4gJiAweDAzKSAhPSAwKSB7Ci0JCQkvKiBXZSBiYWlsIG91dCB0byBhdm9pZCBhbiBhbGlnbm1lbnQgZmF1bHQgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiT01BUCBwZXJpcGhlcmFsIGNvbmZpZzogTGVuZ3RoICglZCkgbm90IHdvcmQtYWxpZ25lZCAodGFnICUwNHgpXG4iLAotCQkJICAgICAgIGluZm8tPmxlbiwgaW5mby0+dGFnKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCW5leHQgPSAodTggKikgaW5mbyArIHNpemVvZigqaW5mbykgKyBpbmZvLT5sZW47Ci0JCWlmIChuZXh0ID49IG9tYXBfYm9vdGxvYWRlcl90YWcgKyBvbWFwX2Jvb3Rsb2FkZXJfdGFnX2xlbikKLQkJCWluZm8gPSBOVUxMOwotCQllbHNlCi0JCQlpbmZvID0gKHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19lbnRyeSAqKSBuZXh0OwotCX0KLQlpZiAoaW5mbyAhPSBOVUxMKSB7Ci0JCS8qIENoZWNrIHRoZSBsZW5ndGggYXMgYSBsYW1lIGF0dGVtcHQgdG8gY2hlY2sgZm9yCi0JCSAqIGJpbmFyeSBpbmNvbnNpc3RhbmN5LiAqLwotCQlpZiAobGVuICE9IE5PX0xFTkdUSF9DSEVDSykgewotCQkJLyogV29yZC1hbGlnbiBsZW4gKi8KLQkJCWlmIChsZW4gJiAweDAzKQotCQkJCWxlbiA9IChsZW4gKyAzKSAmIH4weDAzOwotCQkJaWYgKGluZm8tPmxlbiAhPSBsZW4pIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIk9NQVAgcGVyaXBoZXJhbCBjb25maWc6IExlbmd0aCBtaXNtYXRjaCB3aXRoIHRhZyAleCAod2FudCAlZCwgZ290ICVkKVxuIiwKLQkJCQkgICAgICAgdGFnLCBsZW4sIGluZm8tPmxlbik7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGxlbl9vdXQgIT0gTlVMTCkKLQkJCSpsZW5fb3V0ID0gaW5mby0+bGVuOwotCQlyZXR1cm4gaW5mby0+ZGF0YTsKLQl9Ci0jZW5kaWYKLQkvKiBUcnkgdG8gZmluZCB0aGUgY29uZmlnIGZyb20gdGhlIGJvYXJkLXNwZWNpZmljIHN0cnVjdHVyZXMKLQkgKiBpbiB0aGUga2VybmVsLiAqLwotCWZvciAoaSA9IDA7IGkgPCBvbWFwX2JvYXJkX2NvbmZpZ19zaXplOyBpKyspIHsKLQkJaWYgKG9tYXBfYm9hcmRfY29uZmlnW2ldLnRhZyA9PSB0YWcpIHsKLQkJCWtpbmZvID0gJm9tYXBfYm9hcmRfY29uZmlnW2ldOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGtpbmZvID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBraW5mby0+ZGF0YTsKLX0KLQotY29uc3Qgdm9pZCAqX19vbWFwX2dldF9jb25maWcodTE2IHRhZywgc2l6ZV90IGxlbiwgaW50IG5yKQotewotICAgICAgICByZXR1cm4gZ2V0X2NvbmZpZyh0YWcsIGxlbiwgbnIsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTChfX29tYXBfZ2V0X2NvbmZpZyk7Ci0KLWNvbnN0IHZvaWQgKm9tYXBfZ2V0X3Zhcl9jb25maWcodTE2IHRhZywgc2l6ZV90ICpsZW4pCi17Ci0gICAgICAgIHJldHVybiBnZXRfY29uZmlnKHRhZywgTk9fTEVOR1RIX0NIRUNLLCAwLCBsZW4pOwotfQotRVhQT1JUX1NZTUJPTChvbWFwX2dldF92YXJfY29uZmlnKTsKLQotc3RhdGljIGludCBfX2luaXQgb21hcF9hZGRfc2VyaWFsX2NvbnNvbGUodm9pZCkKLXsKLQljb25zdCBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyAqaW5mbzsKLQotCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwgc3RydWN0IG9tYXBfdWFydF9jb25maWcpOwotCWlmIChpbmZvICE9IE5VTEwgJiYgaW5mby0+Y29uc29sZV91YXJ0KSB7Ci0JCXN0YXRpYyBjaGFyIHNwZWVkWzExXSwgKm9wdCA9IE5VTEw7Ci0KLQkJaWYgKGluZm8tPmNvbnNvbGVfc3BlZWQpIHsKLQkJCXNucHJpbnRmKHNwZWVkLCBzaXplb2Yoc3BlZWQpLCAiJXUiLCBpbmZvLT5jb25zb2xlX3NwZWVkKTsKLQkJCW9wdCA9IHNwZWVkOwotCQl9Ci0JCXJldHVybiBhZGRfcHJlZmVycmVkX2NvbnNvbGUoInR0eVMiLCBpbmZvLT5jb25zb2xlX3VhcnQgLSAxLCBvcHQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLWNvbnNvbGVfaW5pdGNhbGwob21hcF9hZGRfc2VyaWFsX2NvbnNvbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MDhhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKQEAgLTAsMCArMSwxNDQgQEAKK2NvbW1lbnQgIk9NQVAgQ29yZSBUeXBlIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMQorCitjb25maWcgQVJDSF9PTUFQNzMwCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxCisJYm9vbCAiT01BUDczMCBCYXNlZCBTeXN0ZW0iCisJc2VsZWN0IEFSQ0hfT01BUF9PVEcKKworY29uZmlnIEFSQ0hfT01BUDE1MTAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKKwlkZWZhdWx0IHkKKwlib29sICJPTUFQMTUxMCBCYXNlZCBTeXN0ZW0iCisKK2NvbmZpZyBBUkNIX09NQVAxNlhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxCisJYm9vbCAiT01BUDE2eHggQmFzZWQgU3lzdGVtIgorCXNlbGVjdCBBUkNIX09NQVBfT1RHCisKK2NvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKKworY29uZmlnIE1BQ0hfT01BUF9JTk5PVkFUT1IKKwlib29sICJUSSBJbm5vdmF0b3IiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFgpCisJaGVscAorICAgICAgICAgIFRJIE9NQVAgMTUxMCBvciAxNjEwIElubm92YXRvciBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdQorICAgICAgICAgIGhhdmUgc3VjaCBhIGJvYXJkLgorCitjb25maWcgTUFDSF9PTUFQX0gyCisJYm9vbCAiVEkgSDIgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWAorICAgIAloZWxwCisJICBUSSBPTUFQIDE2MTAvMTYxMUIgSDIgYm9hcmQgc3VwcG9ydC4gU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoCisJICBhIGJvYXJkLgorCitjb25maWcgTUFDSF9PTUFQX0gzCisJYm9vbCAiVEkgSDMgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWAorICAgIAloZWxwCisJICBUSSBPTUFQIDE3MTAgSDMgYm9hcmQgc3VwcG9ydC4gU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoCisJICBhIGJvYXJkLgorCitjb25maWcgTUFDSF9PTUFQX09TSworCWJvb2wgIlRJIE9TSyBTdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVAxNlhYCisgICAgCWhlbHAKKwkgIFRJIE9NQVAgNTkxMiBPU0sgKE9NQVAgU3RhcnRlciBLaXQpIGJvYXJkIHN1cHBvcnQuIFNheSBZIGhlcmUKKyAgICAgICAgICBpZiB5b3UgaGF2ZSBzdWNoIGEgYm9hcmQuCisKK2NvbmZpZyBNQUNIX09NQVBfUEVSU0VVUzIKKwlib29sICJUSSBQZXJzZXVzMiIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQNzMwCisgICAgCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFRJIE9NQVAgNzMwIFBlcnNldXMyIGJvYXJkLiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2gKKwkgIGEgYm9hcmQuCisKK2NvbmZpZyBNQUNIX1ZPSUNFQkxVRQorCWJvb2wgIlZvaWNlYmx1ZSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTUxMAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFZvaWNlYmx1ZSBHU00vVm9JUCBnYXRld2F5LiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlCisJICBzdWNoIGEgYm9hcmQuCisKK2NvbmZpZyBNQUNIX05FVFNUQVIKKwlib29sICJOZXRTdGFyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVAxNTEwCisJaGVscAorCSAgU3VwcG9ydCBmb3IgTmV0U3RhciBQQlguIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaCBhIGJvYXJkLgorCitjb25maWcgTUFDSF9PTUFQX0dFTkVSSUMKKwlib29sICJHZW5lcmljIE9NQVAgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFgpCisJaGVscAorICAgICAgICAgIFN1cHBvcnQgZm9yIGdlbmVyaWMgT01BUC0xNTEwLCAxNjEwIG9yIDE3MTAgYm9hcmQgd2l0aAorICAgICAgICAgIG5vIEZQR0EuIENhbiBiZSB1c2VkIGFzIHRlbXBsYXRlIGZvciBwb3J0aW5nIExpbnV4IHRvCisgICAgICAgICAgY3VzdG9tIE9NQVAgYm9hcmRzLiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgY3VzdG9tCisgICAgICAgICAgYm9hcmQuCisKK2NvbW1lbnQgIk9NQVAgQ1BVIFNwZWVkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMQorCitjb25maWcgT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVIKKwlib29sICJPTUFQIGNsb2NrcyBzZXQgYnkgYm9vdGxvYWRlciIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKKwloZWxwCisJICBFbmFibGUgdGhpcyBvcHRpb24gdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gb3ZlcnJpZGluZyB0aGUgY2xvY2sKKwkgIGZyZXF1ZW5jaWVzIHByb2dyYW1tZWQgYnkgYm9vdGxvYWRlciBmb3IgTVBVLCBEU1AsIE1NVXMsIFRDLAorCSAgaW50ZXJuYWwgTENEIGNvbnRyb2xsZXIgYW5kIE1QVSBwZXJpcGhlcmFscy4KKworY29uZmlnIE9NQVBfQVJNXzIxNk1IWgorCWJvb2wgIk9NQVAgQVJNIDIxNiBNSHogQ1BVICgxNzEwIG9ubHkpIgorICAgICAgICBkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWAorICAgICAgICBoZWxwCisgICAgICAgICAgRW5hYmxlIDIxNiBNSHogY2xvY2sgZm9yIE9NQVAxNzEwIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE9NQVBfQVJNXzE5NU1IWgorCWJvb2wgIk9NQVAgQVJNIDE5NSBNSHogQ1BVIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVA3MzAKKwloZWxwCisgICAgICAgICAgRW5hYmxlIDE5NU1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBPTUFQX0FSTV8xOTJNSFoKKwlib29sICJPTUFQIEFSTSAxOTIgTUh6IENQVSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWAorCWhlbHAKKyAgICAgICAgICBFbmFibGUgMTkyTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE9NQVBfQVJNXzE4Mk1IWgorCWJvb2wgIk9NQVAgQVJNIDE4MiBNSHogQ1BVIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVA3MzAKKwloZWxwCisgICAgICAgICAgRW5hYmxlIDE4Mk1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBPTUFQX0FSTV8xNjhNSFoKKwlib29sICJPTUFQIEFSTSAxNjggTUh6IENQVSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1MTAgfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzApCisJaGVscAorICAgICAgICAgIEVuYWJsZSAxNjhNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgT01BUF9BUk1fMTUwTUhaCisJYm9vbCAiT01BUCBBUk0gMTUwIE1IeiBDUFUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1MTAKKwloZWxwCisJICBFbmFibGUgMTUwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE9NQVBfQVJNXzEyME1IWgorCWJvb2wgIk9NQVAgQVJNIDEyMCBNSHogQ1BVIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKKwloZWxwCisgICAgICAgICAgRW5hYmxlIDEyME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBPTUFQX0FSTV82ME1IWgorCWJvb2wgIk9NQVAgQVJNIDYwIE1IeiBDUFUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorICAgICAgICBkZWZhdWx0IHkKKwloZWxwCisgICAgICAgICAgRW5hYmxlIDYwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIE9NQVBfQVJNXzMwTUhaCisJYm9vbCAiT01BUCBBUk0gMzAgTUh6IENQVSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1MTAgfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzApCisJaGVscAorICAgICAgICAgIEVuYWJsZSAzME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODZmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgQ29tbW9uIHN1cHBvcnQKK29iai15IDo9IGlvLm8gaWQubyBpcnEubyB0aW1lLm8gc2VyaWFsLm8KK2xlZC15IDo9IGxlZHMubworCisjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKK29iai0kKENPTkZJR19NQUNIX09NQVBfSDIpCQkrPSBib2FyZC1oMi5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikJKz0gYm9hcmQtaW5ub3ZhdG9yLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfR0VORVJJQykJCSs9IGJvYXJkLWdlbmVyaWMubworb2JqLSQoQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMikJKz0gYm9hcmQtcGVyc2V1czIubworb2JqLSQoQ09ORklHX01BQ0hfT01BUF9PU0spCQkrPSBib2FyZC1vc2subworb2JqLSQoQ09ORklHX01BQ0hfT01BUF9IMykJCSs9IGJvYXJkLWgzLm8KK29iai0kKENPTkZJR19NQUNIX1ZPSUNFQkxVRSkJCSs9IGJvYXJkLXZvaWNlYmx1ZS5vCitvYmotJChDT05GSUdfTUFDSF9ORVRTVEFSKQkJKz0gYm9hcmQtbmV0c3Rhci5vCisKK2lmZXEgKCQoQ09ORklHX0FSQ0hfT01BUDE1MTApLHkpCisjIElubm92YXRvci0xNTEwIEZQR0EKK29iai0kKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKQkrPSBmcGdhLm8KK2VuZGlmCisKKyMgTEVEcyBzdXBwb3J0CitsZWQtJChDT05GSUdfTUFDSF9PTUFQX0gyKQkJKz0gbGVkcy1oMnAyLWRlYnVnLm8KK2xlZC0kKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKQkrPSBsZWRzLWlubm92YXRvci5vCitsZWQtJChDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyKQkrPSBsZWRzLWgycDItZGVidWcubworbGVkLSQoQ09ORklHX01BQ0hfT01BUF9PU0spCQkrPSBsZWRzLW9zay5vCitvYmotJChDT05GSUdfTEVEUykJCQkrPSAkKGxlZC15KQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUuYm9vdApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvTWFrZWZpbGUuYm9vdApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZS5ib290CmluZGV4IGZlZTFhNmEuLjI5MmQ1NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9NYWtlZmlsZS5ib290CisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUuYm9vdApAQCAtMSw0ICsxLDMgQEAKICAgIHpyZWxhZGRyLXkJCTo9IDB4MTAwMDgwMDAKIHBhcmFtc19waHlzLXkJCTo9IDB4MTAwMDAxMDAKIGluaXRyZF9waHlzLXkJCTo9IDB4MTA4MDAwMDAKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1nZW5lcmljLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IDM4NGJjN2MuLjEyMjc5NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWdlbmVyaWMuYworICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKICAqCiAgKiBNb2RpZmllZCBmcm9tIGJvYXJkLWlubm92YXRvcjE1MTAuYwogICoKQEAgLTI2LDggKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgotCi0jaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CiAKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBnZW5lcmljX3NlcmlhbF9wb3J0c1tPTUFQX01BWF9OUl9QT1JUU10gPSB7MSwgMSwgMX07CiAKQEAgLTg0LDcgKzgzLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19tYXBfaW8odm9pZCkKIHsKLQlvbWFwX21hcF9pbygpOworCW9tYXBfbWFwX2NvbW1vbl9pbygpCiB9CiAKIE1BQ0hJTkVfU1RBUlQoT01BUF9HRU5FUklDLCAiR2VuZXJpYyBPTUFQMTUxMC8xNjEwLzE3MTAiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWgyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWgyLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwppbmRleCBmMzdjNzZhLi5mNDk4M2VlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtaDIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWgyLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwogICoKICAqIEJvYXJkIHNwZWNpZmljIGluaXRzIGZvciBPTUFQLTE2MTAgSDIKICAqCkBAIC0zNSw4ICszNSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAogZXh0ZXJuIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKTsKIApAQCAtMTcyLDcgKzE3MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoMl9tYXBfaW8odm9pZCkKIHsKLQlvbWFwX21hcF9pbygpOworCW9tYXBfbWFwX2NvbW1vbl9pbygpOwogCW9tYXBfc2VyaWFsX2luaXQoaDJfc2VyaWFsX3BvcnRzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWgzLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwppbmRleCA3MDVlNDg1Li43Y2Q0MTlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtaDMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWgzLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBPTUFQMTcxMCBIMyBzcGVjaWZpYyBjb2RlLgogICoKQEAgLTM3LDggKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgotCi0jaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CiAKIGV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CiAKQEAgLTE5MCw3ICsxODksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDNfbWFwX2lvKHZvaWQpCiB7Ci0Jb21hcF9tYXBfaW8oKTsKKwlvbWFwX21hcF9jb21tb25faW8oKTsKIAlvbWFwX3NlcmlhbF9pbml0KGgzX3NlcmlhbF9wb3J0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLWlubm92YXRvci5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCmluZGV4IDUyMzM2M2YuLjkxZGU2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuYworICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwogICoKICAqIEJvYXJkIHNwZWNpZmljIGluaXRzIGZvciBPTUFQLTE1MTAgYW5kIE9NQVAtMTYxMCBJbm5vdmF0b3IKICAqCkBAIC0zMyw4ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAogc3RhdGljIGludCBfX2luaXRkYXRhIGlubm92YXRvcl9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwogCkBAIC0yNTIsNyArMjUxLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGlubm92YXRvcl9tYXBfaW8odm9pZCkKIHsKLQlvbWFwX21hcF9pbygpOworCW9tYXBfbWFwX2NvbW1vbl9pbygpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1uZXRzdGFyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5ldHN0YXIuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtbmV0c3Rhci5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5ldHN0YXIuYwppbmRleCA4YzY1MzczLi42NzUwYjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtbmV0c3Rhci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbmV0c3Rhci5jCkBAIC0yNiw4ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgotCi0jaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CiAKIGV4dGVybiB2b2lkIF9faW5pdCBvbWFwX2luaXRfdGltZSh2b2lkKTsKIGV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CkBAIC0xMDAsNyArOTksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbmV0c3Rhcl9tYXBfaW8odm9pZCkKIHsKLQlvbWFwX21hcF9pbygpOworCW9tYXBfbWFwX2NvbW1vbl9pbygpOwogCW9tYXBfc2VyaWFsX2luaXQob21hcF9zZXJpYWxfcG9ydHMpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtb3NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1vc2suYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwppbmRleCBjYjQzMzQzLi42ODQ0ZTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtb3NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtb3NrLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKICAqCiAgKiBCb2FyZCBzcGVjaWZpYyBpbml0IGZvciBPTUFQNTkxMiBPU0sKICAqCkBAIC0zOSw4ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9zazU5MTJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiB7IE9NQVBfT1NLX05PUl9GTEFTSF9CQVNFLCBPTUFQX09TS19OT1JfRkxBU0hfU1RBUlQsIE9NQVBfT1NLX05PUl9GTEFTSF9TSVpFLApAQCAtMTUzLDcgKzE1Miw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvc2tfbWFwX2lvKHZvaWQpCiB7Ci0Jb21hcF9tYXBfaW8oKTsKKwlvbWFwX21hcF9jb21tb25faW8oKTsKIAlpb3RhYmxlX2luaXQob3NrNTkxMl9pb19kZXNjLCBBUlJBWV9TSVpFKG9zazU5MTJfaW9fZGVzYykpOwogCW9tYXBfc2VyaWFsX2luaXQob3NrX3NlcmlhbF9wb3J0cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtcGVyc2V1czIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtcGVyc2V1czIuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCmluZGV4IGQ1MzQyMDQuLjIxMzMxNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC1wZXJzZXVzMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtcGVyc2V1czIuYworICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCiAgKgogICogTW9kaWZpZWQgZnJvbSBib2FyZC1nZW5lcmljLmMKICAqCkBAIC0yNyw4ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC0xNDAsNyArMTM5LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGVyc2V1czJfbWFwX2lvKHZvaWQpCiB7Ci0Jb21hcF9tYXBfaW8oKTsKKwlvbWFwX21hcF9jb21tb25faW8oKTsKIAlpb3RhYmxlX2luaXQob21hcF9wZXJzZXVzMl9pb19kZXNjLAogCQkgICAgIEFSUkFZX1NJWkUob21hcF9wZXJzZXVzMl9pb19kZXNjKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9ib2FyZC12b2ljZWJsdWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2JvYXJkLXZvaWNlYmx1ZS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IDZiMGM1MDAuLmU0MjI4MTk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvYm9hcmQtdm9pY2VibHVlLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKICAqCiAgKiBNb2RpZmllZCBmcm9tIGJvYXJkLWdlbmVyaWMuYwogICoKQEAgLTMxLDggKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgotCi0jaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CiAKIGV4dGVybiB2b2lkIG9tYXBfaW5pdF90aW1lKHZvaWQpOwogZXh0ZXJuIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKTsKQEAgLTE3MCw3ICsxNjksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX21hcF9pbyh2b2lkKQogewotCW9tYXBfbWFwX2lvKCk7CisJb21hcF9tYXBfY29tbW9uX2lvKCk7CiAJb21hcF9zZXJpYWxfaW5pdChvbWFwX3NlcmlhbF9wb3J0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9mcGdhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2ZwZ2EuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2ZwZ2EuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODZjM2I3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCisgKgorICogT01BUDEgQ1BVIGlkZW50aWZpY2F0aW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24KKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RydWN0IG9tYXBfaWQgeworCXUxNglqdGFnX2lkOwkvKiBVc2VkIHRvIGRldGVybWluZSBPTUFQIHR5cGUgKi8KKwl1OAlkaWVfcmV2OwkvKiBQcm9jZXNzb3IgcmV2aXNpb24gKi8KKwl1MzIJb21hcF9pZDsJLyogT01BUCByZXZpc2lvbiAqLworCXUzMgl0eXBlOwkJLyogQ3B1IGlkIGJpdHMgWzMxOjA4XSwgY3B1IGNsYXNzIGJpdHMgWzA3OjAwXSAqLworfTsKKworLyogUmVnaXN0ZXIgdmFsdWVzIHRvIGRldGVjdCB0aGUgT01BUCB2ZXJzaW9uICovCitzdGF0aWMgc3RydWN0IG9tYXBfaWQgb21hcF9pZHNbXSBfX2luaXRkYXRhID0geworCXsgLmp0YWdfaWQgPSAweDM1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgwNzMwMDEwMH0sCisJeyAuanRhZ19pZCA9IDB4YjU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDA3MzAwMzAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNDcwLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzEwMTAwLCAudHlwZSA9IDB4MTUxMDAwMDB9LAorCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgxNjEwMDAwMH0sCisJeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMyMDEwMCwgLnR5cGUgPSAweDE2MTEwMDAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNTc2LCAuZGllX3JldiA9IDB4MywgLm9tYXBfaWQgPSAweDAzMzIwMTAwLCAudHlwZSA9IDB4MTYxMDBjMDB9LAorCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAyMDAsIC50eXBlID0gMHgxNjEwMGQwMH0sCisJeyAuanRhZ19pZCA9IDB4YjYxMywgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDMwMCwgLnR5cGUgPSAweDE2MTBlZjAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNjEzLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMzAwLCAudHlwZSA9IDB4MTYxMGVmMDB9LAorCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgxLCAub21hcF9pZCA9IDB4MDMzMjAxMDAsIC50eXBlID0gMHgxNjExMDAwMH0sCisJeyAuanRhZ19pZCA9IDB4YjU4YywgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMyMDIwMCwgLnR5cGUgPSAweDE2MTEwYjAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNThjLCAuZGllX3JldiA9IDB4MywgLm9tYXBfaWQgPSAweDAzMzIwMjAwLCAudHlwZSA9IDB4MTYxMTBjMDB9LAorCXsgLmp0YWdfaWQgPSAweGI2NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjA0MDAsIC50eXBlID0gMHgxNjIxMjMwMH0sCisJeyAuanRhZ19pZCA9IDB4YjY1ZiwgLmRpZV9yZXYgPSAweDEsIC5vbWFwX2lkID0gMHgwMzMyMDQwMCwgLnR5cGUgPSAweDE2MjEyMzAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNjVmLCAuZGllX3JldiA9IDB4MSwgLm9tYXBfaWQgPSAweDAzMzIwNTAwLCAudHlwZSA9IDB4MTYyMTIzMDB9LAorCXsgLmp0YWdfaWQgPSAweGI1ZjcsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMzAwMDAsIC50eXBlID0gMHgxNzEwMDAwMH0sCisJeyAuanRhZ19pZCA9IDB4YjVmNywgLmRpZV9yZXYgPSAweDEsIC5vbWFwX2lkID0gMHgwMzMzMDEwMCwgLnR5cGUgPSAweDE3MTAwMDAwfSwKKwl7IC5qdGFnX2lkID0gMHhiNWY3LCAuZGllX3JldiA9IDB4MiwgLm9tYXBfaWQgPSAweDAzMzMwMTAwLCAudHlwZSA9IDB4MTcxMDAwMDB9LAorfTsKKworLyoKKyAqIEdldCBPTUFQIHR5cGUgZnJvbSBQUk9EX0lELgorICogMTcxMCBoYXMgdGhlIFBST0RfSUQgaW4gYml0cyAxNTowMCwgbm90IGluIDE2OjAxIGFzIGRvY3VtZW50ZWQgaW4gVFJNLgorICogMTUxMCBQUk9EX0lEIGlzIGVtcHR5LCBhbmQgMTYxMCBQUk9EX0lEIGRvZXMgbm90IG1ha2Ugc2Vuc2UuCisgKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgaW4gVEVTVCBCTE9DSyBpcyB1c2VkIGFzIGZhbGxiYWNrOyBUaGlzIHNlZW1zIHRvCisgKiB3b3JrIG9uIDE1MTAsIDE2MTAgJiAxNzEwLiBUaGUgb2ZmaWNpYWwgd2F5IGhvcGVmdWxseSB3aWxsIHdvcmsgaW4gZnV0dXJlCisgKiBwcm9jZXNzb3JzLgorICovCitzdGF0aWMgdTE2IF9faW5pdCBvbWFwX2dldF9qdGFnX2lkKHZvaWQpCit7CisJdTMyIHByb2RfaWQsIG9tYXBfaWQ7CisKKwlwcm9kX2lkID0gb21hcF9yZWFkbChPTUFQX1BST0RVQ1RJT05fSURfMSk7CisJb21hcF9pZCA9IG9tYXBfcmVhZGwoT01BUDMyX0lEXzEpOworCisJLyogQ2hlY2sgZm9yIHVudXNhYmxlIE9NQVBfUFJPRFVDVElPTl9JRF8xIG9uIDE2MTFCLzU5MTIgYW5kIDczMCAqLworCWlmICgoKHByb2RfaWQgPj4gMjApID09IDApIHx8IChwcm9kX2lkID09IG9tYXBfaWQpKQorCQlwcm9kX2lkID0gMDsKKwllbHNlCisJCXByb2RfaWQgJj0gMHhmZmZmOworCisJaWYgKHByb2RfaWQpCisJCXJldHVybiBwcm9kX2lkOworCisJLyogVXNlIE9NQVAzMl9JRF8xIGFzIGZhbGxiYWNrICovCisJcHJvZF9pZCA9ICgob21hcF9pZCA+PiAxMikgJiAweGZmZmYpOworCisJcmV0dXJuIHByb2RfaWQ7Cit9CisKKy8qCisgKiBHZXQgT01BUCByZXZpc2lvbiBmcm9tIERJRV9SRVYuCisgKiBFYXJseSAxNzEwIHByb2Nlc3NvcnMgbWF5IGhhdmUgYnJva2VuIE9NQVBfRElFX0lELCBpdCBjb250YWlucyBQUk9EX0lELgorICogVW5kb2N1bWVudGVkIHJlZ2lzdGVyIGluIHRoZSBURVNUIEJMT0NLIGlzIHVzZWQgYXMgZmFsbGJhY2suCisgKiBSRVZJU0lUOiBUaGlzIGRvZXMgbm90IHNlZW0gdG8gd29yayBvbiAxNTEwCisgKi8KK3N0YXRpYyB1OCBfX2luaXQgb21hcF9nZXRfZGllX3Jldih2b2lkKQoreworCXUzMiBkaWVfcmV2OworCisJZGllX3JldiA9IG9tYXBfcmVhZGwoT01BUF9ESUVfSURfMSk7CisKKwkvKiBDaGVjayBmb3IgYnJva2VuIE9NQVBfRElFX0lEIG9uIGVhcmx5IDE3MTAgKi8KKwlpZiAoKChkaWVfcmV2ID4+IDEyKSAmIDB4ZmZmZikgPT0gb21hcF9nZXRfanRhZ19pZCgpKQorCQlkaWVfcmV2ID0gMDsKKworCWRpZV9yZXYgPSAoZGllX3JldiA+PiAxNykgJiAweGY7CisJaWYgKGRpZV9yZXYpCisJCXJldHVybiBkaWVfcmV2OworCisJZGllX3JldiA9IChvbWFwX3JlYWRsKE9NQVAzMl9JRF8xKSA+PiAyOCkgJiAweGY7CisKKwlyZXR1cm4gZGllX3JldjsKK30KKwordm9pZCBfX2luaXQgb21hcF9jaGVja19yZXZpc2lvbih2b2lkKQoreworCWludCBpOworCXUxNiBqdGFnX2lkOworCXU4IGRpZV9yZXY7CisJdTMyIG9tYXBfaWQ7CisJdTggY3B1X3R5cGU7CisKKwlqdGFnX2lkID0gb21hcF9nZXRfanRhZ19pZCgpOworCWRpZV9yZXYgPSBvbWFwX2dldF9kaWVfcmV2KCk7CisJb21hcF9pZCA9IG9tYXBfcmVhZGwoT01BUDMyX0lEXzApOworCisjaWZkZWYgREVCVUcKKwlwcmludGsoIk9NQVBfRElFX0lEXzA6IDB4JTA4eFxuIiwgb21hcF9yZWFkbChPTUFQX0RJRV9JRF8wKSk7CisJcHJpbnRrKCJPTUFQX0RJRV9JRF8xOiAweCUwOHggRElFX1JFVjogJWlcbiIsCisJCW9tYXBfcmVhZGwoT01BUF9ESUVfSURfMSksCisJICAgICAgIChvbWFwX3JlYWRsKE9NQVBfRElFX0lEXzEpID4+IDE3KSAmIDB4Zik7CisJcHJpbnRrKCJPTUFQX1BST0RVQ1RJT05fSURfMDogMHglMDh4XG4iLCBvbWFwX3JlYWRsKE9NQVBfUFJPRFVDVElPTl9JRF8wKSk7CisJcHJpbnRrKCJPTUFQX1BST0RVQ1RJT05fSURfMTogMHglMDh4IEpUQUdfSUQ6IDB4JTA0eFxuIiwKKwkJb21hcF9yZWFkbChPTUFQX1BST0RVQ1RJT05fSURfMSksCisJCW9tYXBfcmVhZGwoT01BUF9QUk9EVUNUSU9OX0lEXzEpICYgMHhmZmZmKTsKKwlwcmludGsoIk9NQVAzMl9JRF8wOiAweCUwOHhcbiIsIG9tYXBfcmVhZGwoT01BUDMyX0lEXzApKTsKKwlwcmludGsoIk9NQVAzMl9JRF8xOiAweCUwOHhcbiIsIG9tYXBfcmVhZGwoT01BUDMyX0lEXzEpKTsKKwlwcmludGsoIkpUQUdfSUQ6IDB4JTA0eCBESUVfUkVWOiAlaVxuIiwganRhZ19pZCwgZGllX3Jldik7CisjZW5kaWYKKworCXN5c3RlbV9zZXJpYWxfaGlnaCA9IG9tYXBfcmVhZGwoT01BUF9ESUVfSURfMCk7CisJc3lzdGVtX3NlcmlhbF9sb3cgPSBvbWFwX3JlYWRsKE9NQVBfRElFX0lEXzEpOworCisJLyogRmlyc3QgY2hlY2sgb25seSB0aGUgbWFqb3IgdmVyc2lvbiBpbiBhIHNhZmUgd2F5ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBpKyspIHsKKwkJaWYgKGp0YWdfaWQgPT0gKG9tYXBfaWRzW2ldLmp0YWdfaWQpKSB7CisJCQlzeXN0ZW1fcmV2ID0gb21hcF9pZHNbaV0udHlwZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIGRpZSByZXZpc2lvbiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9tYXBfaWRzKTsgaSsrKSB7CisJCWlmIChqdGFnX2lkID09IG9tYXBfaWRzW2ldLmp0YWdfaWQgJiYgZGllX3JldiA9PSBvbWFwX2lkc1tpXS5kaWVfcmV2KSB7CisJCQlzeXN0ZW1fcmV2ID0gb21hcF9pZHNbaV0udHlwZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRmluYWxseSBjaGVjayBhbHNvIHRoZSBvbWFwX2lkICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBpKyspIHsKKwkJaWYgKGp0YWdfaWQgPT0gb21hcF9pZHNbaV0uanRhZ19pZAorCQkgICAgJiYgZGllX3JldiA9PSBvbWFwX2lkc1tpXS5kaWVfcmV2CisJCSAgICAmJiBvbWFwX2lkID09IG9tYXBfaWRzW2ldLm9tYXBfaWQpIHsKKwkJCXN5c3RlbV9yZXYgPSBvbWFwX2lkc1tpXS50eXBlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBBZGQgdGhlIGNwdSBjbGFzcyBpbmZvICg3eHgsIDE1eHgsIDE2eHgsIDI0eHgpICovCisJY3B1X3R5cGUgPSBzeXN0ZW1fcmV2ID4+IDI0OworCisJc3dpdGNoIChjcHVfdHlwZSkgeworCWNhc2UgMHgwNzoKKwkJc3lzdGVtX3JldiB8PSAweDA3OworCQlicmVhazsKKwljYXNlIDB4MTU6CisJCXN5c3RlbV9yZXYgfD0gMHgxNTsKKwkJYnJlYWs7CisJY2FzZSAweDE2OgorCWNhc2UgMHgxNzoKKwkJc3lzdGVtX3JldiB8PSAweDE2OworCQlicmVhazsKKwljYXNlIDB4MjQ6CisJCXN5c3RlbV9yZXYgfD0gMHgyNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJVbmtub3duIE9NQVAgY3B1IHR5cGU6IDB4JTAyeFxuIiwgY3B1X3R5cGUpOworCX0KKworCXByaW50aygiT01BUCUwNHgiLCBzeXN0ZW1fcmV2ID4+IDE2KTsKKwlpZiAoKHN5c3RlbV9yZXYgPj4gOCkgJiAweGZmKQorCQlwcmludGsoIiV4IiwgKHN5c3RlbV9yZXYgPj4gOCkgJiAweGZmKTsKKwlwcmludGsoIiByZXZpc2lvbiAlaSBoYW5kbGVkIGFzICUwMnh4eCBpZDogJTA4eCUwOHhcbiIsCisJICAgICAgIGRpZV9yZXYsIHN5c3RlbV9yZXYgJiAweGZmLCBzeXN0ZW1fc2VyaWFsX2xvdywKKwkgICAgICAgc3lzdGVtX3NlcmlhbF9oaWdoKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwN2RmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKKyAqCisgKiBPTUFQMSBJL08gbWFwcGluZyBjb2RlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKworZXh0ZXJuIGludCBjbGtfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfY2hlY2tfcmV2aXNpb24odm9pZCk7CisKKy8qCisgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heSBwcm92aWRlIHRoZSBleHRyYSBtYXBwaW5nIGJlc2lkZXMgdGhlCisgKiBkZWZhdWx0IG1hcHBpbmcgcHJvdmlkZWQgaGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIHsgSU9fVklSVCwgICAgICAJSU9fUEhZUywgICAgICAgICAgICAgSU9fU0laRSwgICAgICAgIAkgICBNVF9ERVZJQ0UgfSwKK307CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXA3MzBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisgeyBPTUFQNzMwX0RTUF9CQVNFLCAgICBPTUFQNzMwX0RTUF9TVEFSVCwgICAgT01BUDczMF9EU1BfU0laRSwgICAgTVRfREVWSUNFIH0sCisgeyBPTUFQNzMwX0RTUFJFR19CQVNFLCBPTUFQNzMwX0RTUFJFR19TVEFSVCwgT01BUDczMF9EU1BSRUdfU0laRSwgTVRfREVWSUNFIH0sCisgeyBPTUFQNzMwX1NSQU1fQkFTRSwgICBPTUFQNzMwX1NSQU1fU1RBUlQsICAgT01BUDczMF9TUkFNX1NJWkUsICAgTVRfREVWSUNFIH0KK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAxNTEwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIHsgT01BUDE1MTBfRFNQX0JBU0UsICAgIE9NQVAxNTEwX0RTUF9TVEFSVCwgICAgT01BUDE1MTBfRFNQX1NJWkUsICAgIE1UX0RFVklDRSB9LAorIHsgT01BUDE1MTBfRFNQUkVHX0JBU0UsIE9NQVAxNTEwX0RTUFJFR19TVEFSVCwgT01BUDE1MTBfRFNQUkVHX1NJWkUsIE1UX0RFVklDRSB9LAorIHsgT01BUDE1MTBfU1JBTV9CQVNFLCAgIE9NQVAxNTEwX1NSQU1fU1RBUlQsICAgT01BUDE1MTBfU1JBTV9TSVpFLCAgIE1UX0RFVklDRSB9Cit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMTYxMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyB7IE9NQVAxNlhYX0RTUF9CQVNFLCAgICBPTUFQMTZYWF9EU1BfU1RBUlQsICAgIE9NQVAxNlhYX0RTUF9TSVpFLCAgICBNVF9ERVZJQ0UgfSwKKyB7IE9NQVAxNlhYX0RTUFJFR19CQVNFLCBPTUFQMTZYWF9EU1BSRUdfU1RBUlQsIE9NQVAxNlhYX0RTUFJFR19TSVpFLCBNVF9ERVZJQ0UgfSwKKyB7IE9NQVAxNlhYX1NSQU1fQkFTRSwgICBPTUFQMTZYWF9TUkFNX1NUQVJULCAgIE9NQVAxNjEwX1NSQU1fU0laRSwgICBNVF9ERVZJQ0UgfQorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwNTkxMl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKyB7IE9NQVAxNlhYX0RTUF9CQVNFLCAgICBPTUFQMTZYWF9EU1BfU1RBUlQsICAgIE9NQVAxNlhYX0RTUF9TSVpFLCAgICBNVF9ERVZJQ0UgfSwKKyB7IE9NQVAxNlhYX0RTUFJFR19CQVNFLCBPTUFQMTZYWF9EU1BSRUdfU1RBUlQsIE9NQVAxNlhYX0RTUFJFR19TSVpFLCBNVF9ERVZJQ0UgfSwKKy8qCisgKiBUaGUgT01BUDU5MTIgaGFzIDI1MGtCeXRlIGludGVybmFsIFNSQU0uIEJlY2F1c2UgdGhlIG1hcHBpbmcgaXMgYmFzZWVkIG9uIHBhZ2UKKyAqIHNpemUgKDRrQnl0ZSksIGl0IHNlZW1zIHRoYXQgdGhlIGxhc3QgMmtCeXRlICg9MHg4MDApIG9mIHRoZSAyNTBrQnl0ZSBhcmUgbm90IG1hcHBlZC4KKyAqIEFkZCBhZGRpdGlvbmFsIDJrQnl0ZSAoMHg4MDApIHNvIHRoYXQgdGhlIGxhc3QgcGFnZSBpcyBtYXBwZWQgYW5kIHRoZSBsYXN0IDJrQnl0ZQorICogY2FuIGJlIHVzZWQuCisgKi8KKyB7IE9NQVAxNlhYX1NSQU1fQkFTRSwgICBPTUFQMTZYWF9TUkFNX1NUQVJULCAgIE9NQVA1OTEyX1NSQU1fU0laRSArIDB4ODAwLCAgIE1UX0RFVklDRSB9Cit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCitzdGF0aWMgdm9pZCBfX2luaXQgX29tYXBfbWFwX2lvKHZvaWQpCit7CisJaW5pdGlhbGl6ZWQgPSAxOworCisJLyogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBJTyBzcGFjZSBtYXBwaW5nIGJlZm9yZSB3ZSBjYW4gcnVuCisJICogY3B1X2lzX29tYXB4eHgoKSBtYWNyb3MuICovCisJaW90YWJsZV9pbml0KG9tYXBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwX2lvX2Rlc2MpKTsKKwlvbWFwX2NoZWNrX3JldmlzaW9uKCk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJaW90YWJsZV9pbml0KG9tYXA3MzBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwNzMwX2lvX2Rlc2MpKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlpb3RhYmxlX2luaXQob21hcDE1MTBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMTUxMF9pb19kZXNjKSk7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKwlpZiAoY3B1X2lzX29tYXAxNjEwKCkgfHwgY3B1X2lzX29tYXAxNzEwKCkpIHsKKwkJaW90YWJsZV9pbml0KG9tYXAxNjEwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDE2MTBfaW9fZGVzYykpOworCX0KKwlpZiAoY3B1X2lzX29tYXA1OTEyKCkpIHsKKwkJaW90YWJsZV9pbml0KG9tYXA1OTEyX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDU5MTJfaW9fZGVzYykpOworCX0KKyNlbmRpZgorCisJLyogUkVWSVNJVDogUmVmZXIgdG8gT01BUDU5MTAgRXJyYXRhLCBBZHZpc29yeSBTWVNfMTogIlRpbWVvdXQgQWJvcnQKKwkgKiBvbiBhIFBvc3RlZCBXcml0ZSBpbiB0aGUgVElQQiBCcmlkZ2UiLgorCSAqLworCW9tYXBfd3JpdGV3KDB4MCwgTVBVX1BVQkxJQ19USVBCX0NOVEwpOworCW9tYXBfd3JpdGV3KDB4MCwgTVBVX1BSSVZBVEVfVElQQl9DTlRMKTsKKworCS8qIE11c3QgaW5pdCBjbG9ja3MgZWFybHkgdG8gYXNzdXJlIHRoYXQgdGltZXIgaW50ZXJydXB0IHdvcmtzCisJICovCisJY2xrX2luaXQoKTsKK30KKworLyoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgZ2V0IGNhbGxlZCBmcm9tIGJvYXJkIHNwZWNpZmljIGluaXQKKyAqLwordm9pZCBvbWFwX21hcF9jb21tb25faW8odm9pZCkKK3sKKwlpZiAoIWluaXRpYWxpemVkKQorCQlfb21hcF9tYXBfaW8oKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2lycS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCmluZGV4IGYwMWM5OTIuLmExMWI2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCkBAIC01Niw2ICs1Niw3IEBACiBzdHJ1Y3Qgb21hcF9pcnFfYmFuayB7CiAJdW5zaWduZWQgbG9uZyBiYXNlX3JlZzsKIAl1bnNpZ25lZCBsb25nIHRyaWdnZXJfbWFwOworCXVuc2lnbmVkIGxvbmcgd2FrZV9lbmFibGU7CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGlycV9iYW5rX2NvdW50ID0gMDsKQEAgLTEwNSw2ICsxMDYsMTkgQEAKIAlvbWFwX2Fja19pcnEoaXJxKTsKIH0KIAorc3RhdGljIGludCBvbWFwX3dha2VfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBlbmFibGUpCit7CisJaW50IGJhbmsgPSBJUlFfQkFOSyhpcnEpOworCisJaWYgKGVuYWJsZSkKKwkJaXJxX2JhbmtzW2JhbmtdLndha2VfZW5hYmxlIHw9IElSUV9CSVQoaXJxKTsKKwllbHNlCisJCWlycV9iYW5rc1tiYW5rXS53YWtlX2VuYWJsZSAmPSB+SVJRX0JJVChpcnEpOworCisJcmV0dXJuIDA7Cit9CisKKwogLyoKICAqIEFsbG93cyB0dW5pbmcgdGhlIElSUSB0eXBlIGFuZCBwcmlvcml0eQogICoKQEAgLTE0NSw3ICsxNTksNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIG9tYXAxNjEwX2lycV9iYW5rc1tdID0gewogCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwgCQkudHJpZ2dlcl9tYXAgPSAweGIzZmVmZThmIH0sCiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4ZmRiN2MxZmQgfSwKLQl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UgKyAweDEwMCwJLnRyaWdnZXJfbWFwID0gMHhmZmZmZjdmZiB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDJfQkFTRSArIDB4MTAwLAkudHJpZ2dlcl9tYXAgPSAweGZmZmZiN2ZmIH0sCiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFICsgMHgyMDAsCS50cmlnZ2VyX21hcCA9IDB4ZmZmZmZmZmYgfSwKIH07CiAjZW5kaWYKQEAgLTE1NCw2ICsxNjgsNyBAQAogCS5hY2sgICAgPSBvbWFwX21hc2tfYWNrX2lycSwKIAkubWFzayAgID0gb21hcF9tYXNrX2lycSwKIAkudW5tYXNrID0gb21hcF91bm1hc2tfaXJxLAorCS53YWtlCT0gb21hcF93YWtlX2lycSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9sZWRzLWgycDItZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1oMnAyLWRlYnVnLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtb21hcC9sZWRzLWgycDItZGVidWcuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLWgycDItZGVidWcuYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMtaW5ub3ZhdG9yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaW5ub3ZhdG9yLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtb21hcC9sZWRzLWlubm92YXRvci5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaW5ub3ZhdG9yLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9sZWRzLW9zay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLW9zay5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtb21hcC9sZWRzLW9zay5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtb3NrLmMKaW5kZXggZjUxNzdmNC4uNGEwZThiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMtb3NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLW9zay5jCkBAIC0xMjksMTQgKzEyOSwxMSBAQAogCiAjaWZkZWYJQ09ORklHX0ZCX09NQVAKIAotI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCiAJY2FzZSBsZWRfdGltZXI6CiAJCWh3X2xlZF9zdGF0ZSBePSBUSU1FUl9MRUQ7CiAJCW1pc3RyYWxfc2V0bGVkKCk7CiAJCWJyZWFrOwotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTEVEU19DUFUKIAljYXNlIGxlZF9pZGxlX3N0YXJ0OgogCQlod19sZWRfc3RhdGUgfD0gSURMRV9MRUQ7CiAJCW1pc3RyYWxfc2V0bGVkKCk7CkBAIC0xNDYsNyArMTQzLDYgQEAKIAkJaHdfbGVkX3N0YXRlICY9IH5JRExFX0xFRDsKIAkJbWlzdHJhbF9zZXRsZWQoKTsKIAkJYnJlYWs7Ci0jZW5kaWYKIAogI2VuZGlmCS8qIENPTkZJR19GQl9PTUFQICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9sZWRzLmggYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2xlZHMuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNGU1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCisgKgorICogT01BUDEgQ1BVIGlkZW50aWZpY2F0aW9uIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KKworc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0MV9jayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2NrID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDNfY2sgPSBOVUxMOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvbWFwX3NlcmlhbF9pbihzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnVwLAorCQkJCQkgIGludCBvZmZzZXQpCit7CisJb2Zmc2V0IDw8PSB1cC0+cmVnc2hpZnQ7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19yYXdfcmVhZGIodXAtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9zZXJpYWxfb3V0cChzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAsIGludCBvZmZzZXQsCisJCQkJICAgIGludCB2YWx1ZSkKK3sKKwlvZmZzZXQgPDw9IHAtPnJlZ3NoaWZ0OworCV9fcmF3X3dyaXRlYih2YWx1ZSwgcC0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKKy8qCisgKiBJbnRlcm5hbCBVQVJUcyBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGZvciB0aGUgODI1MCBhdXRvY29uZmlnIHRvIHdvcmsKKyAqIHByb3Blcmx5LiBOb3RlIHRoYXQgdGhlIFRYIHdhdGVybWFyayBpbml0aWFsaXphdGlvbiBtYXkgbm90IGJlIG5lZWRlZAorICogb25jZSB0aGUgODI1MC5jIHdhdGVybWFyayBoYW5kbGluZyBjb2RlIGlzIG1lcmdlZC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfc2VyaWFsX3Jlc2V0KHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCkKK3sKKwlvbWFwX3NlcmlhbF9vdXRwKHAsIFVBUlRfT01BUF9NRFIxLCAweDA3KTsJLyogZGlzYWJsZSBVQVJUICovCisJb21hcF9zZXJpYWxfb3V0cChwLCBVQVJUX09NQVBfU0NSLCAweDA4KTsJLyogVFggd2F0ZXJtYXJrICovCisJb21hcF9zZXJpYWxfb3V0cChwLCBVQVJUX09NQVBfTURSMSwgMHgwMCk7CS8qIGVuYWJsZSBVQVJUICovCisKKwlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKSB7CisJCW9tYXBfc2VyaWFsX291dHAocCwgVUFSVF9PTUFQX1NZU0MsIDB4MDEpOworCQl3aGlsZSAoIShvbWFwX3NlcmlhbF9pbihwLCBVQVJUX09NQVBfU1lTQykgJiAweDAxKSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWVtYmFzZQk9IChjaGFyKilJT19BRERSRVNTKE9NQVBfVUFSVDFfQkFTRSksCisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUMV9CQVNFLAorCQkuaXJxCQk9IElOVF9VQVJUMSwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCX0sCisJeworCQkubWVtYmFzZQk9IChjaGFyKilJT19BRERSRVNTKE9NQVBfVUFSVDJfQkFTRSksCisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUMl9CQVNFLAorCQkuaXJxCQk9IElOVF9VQVJUMiwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCX0sCisJeworCQkubWVtYmFzZQk9IChjaGFyKilJT19BRERSRVNTKE9NQVBfVUFSVDNfQkFTRSksCisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUM19CQVNFLAorCQkuaXJxCQk9IElOVF9VQVJUMywKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gMCwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKKy8qCisgKiBOb3RlIHRoYXQgb24gSW5ub3ZhdG9yLTE1MTAgVUFSVDIgcGlucyBjb25mbGljdCB3aXRoIFVTQjIuCisgKiBCeSBkZWZhdWx0IFVBUlQyIGRvZXMgbm90IHdvcmsgb24gSW5ub3ZhdG9yLTE1MTAgaWYgeW91IGhhdmUKKyAqIFVTQiBPSENJIGVuYWJsZWQuIFRvIHVzZSBVQVJUMiwgeW91IG11c3QgZGlzYWJsZSBVU0IyIGZpcnN0LgorICovCit2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0KGludCBwb3J0c1tPTUFQX01BWF9OUl9QT1JUU10pCit7CisJaW50IGk7CisKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVswXS5yZWdzaGlmdCA9IDA7CisJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzFdLnJlZ3NoaWZ0ID0gMDsKKwkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0uaXJxID0gSU5UXzczMF9VQVJUX01PREVNXzE7CisJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzFdLmlycSA9IElOVF83MzBfVUFSVF9NT0RFTV9JUkRBXzI7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdLnVhcnRjbGsgPSBPTUFQMTUxMF9CQVNFX0JBVUQgKiAxNjsKKwkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0udWFydGNsayA9IE9NQVAxNTEwX0JBU0VfQkFVRCAqIDE2OworCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsyXS51YXJ0Y2xrID0gT01BUDE1MTBfQkFTRV9CQVVEICogMTY7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciByZWc7CisKKwkJaWYgKHBvcnRzW2ldID09IDApIHsKKwkJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhW2ldLm1lbWJhc2UgPSBOVUxMOworCQkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbaV0ubWFwYmFzZSA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQl1YXJ0MV9jayA9IGNsa19nZXQoTlVMTCwgInVhcnQxX2NrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQxX2NrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0MV9jayk7CisJCQkJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQkJCQljbGtfc2V0X3JhdGUodWFydDFfY2ssIDEyMDAwMDAwKTsKKwkJCX0KKwkJCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJCQkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJCQkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkgeworCQkJCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCQkJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00xX0VOOworCQkJCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCQkJCXVkZWxheSgxMCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXVhcnQyX2NrID0gY2xrX2dldChOVUxMLCAidWFydDJfY2siKTsKKwkJCWlmIChJU19FUlIodWFydDJfY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0Ml9ja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQyX2NrKTsKKwkJCQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpCisJCQkJCWNsa19zZXRfcmF0ZSh1YXJ0Ml9jaywgMTIwMDAwMDApOworCQkJCWVsc2UKKwkJCQkJY2xrX3NldF9yYXRlKHVhcnQyX2NrLCA0ODAwMDAwMCk7CisJCQl9CisJCQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCQkJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpIHsKKwkJCQkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQkJCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKKwkJCQkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQkJCQl1ZGVsYXkoMTApOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl1YXJ0M19jayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2NrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQzX2NrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDNfY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0M19jayk7CisJCQkJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQkJCQljbGtfc2V0X3JhdGUodWFydDNfY2ssIDEyMDAwMDAwKTsKKwkJCX0KKwkJCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJCQkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCW9tYXBfc2VyaWFsX3Jlc2V0KCZzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKK30KK2FyY2hfaW5pdGNhbGwob21hcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvdGltZS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwppbmRleCBkZDM0ZTlmLi5kNTQwNTM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC90aW1lLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCiAgKgogICogT01BUCBUaW1lcnMKICAqCkBAIC01OCwxNyArNTgsOSBAQAogICogTVBVIHRpbWVyCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotI2RlZmluZSBPTUFQX01QVV9USU1FUjFfQkFTRQkJKDB4ZmZmZWM1MDApCi0jZGVmaW5lIE9NQVBfTVBVX1RJTUVSMl9CQVNFCQkoMHhmZmZlYzYwMCkKLSNkZWZpbmUgT01BUF9NUFVfVElNRVIzX0JBU0UJCSgweGZmZmVjNzAwKQogI2RlZmluZSBPTUFQX01QVV9USU1FUl9CQVNFCQlPTUFQX01QVV9USU1FUjFfQkFTRQogI2RlZmluZSBPTUFQX01QVV9USU1FUl9PRkZTRVQJCTB4MTAwCiAKLSNkZWZpbmUgTVBVX1RJTUVSX0ZSRUUJCQkoMSA8PCA2KQotI2RlZmluZSBNUFVfVElNRVJfQ0xPQ0tfRU5BQkxFCQkoMSA8PCA1KQotI2RlZmluZSBNUFVfVElNRVJfQVIJCQkoMSA8PCAxKQotI2RlZmluZSBNUFVfVElNRVJfU1QJCQkoMSA8PCAwKQotCiAvKiBjeWNsZXMgdG8gbnNlYyBjb252ZXJzaW9ucyB0YWtlbiBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jLAogICogY29udmVydGVkIHRvIHVzZSBrSHogYnkgS2V2aW4gSGlsbWFuICovCiAvKiBjb252ZXJ0IGZyb20gY3ljbGVzKDY0Yml0cykgPT4gbmFub3NlY29uZHMgKDY0Yml0cykKQEAgLTI1NSw2ICsyNDcsMTMgQEAKICNkZWZpbmUgT01BUF8zMktfVElNRVJfVENSCQkweDA0CiAKICNkZWZpbmUgT01BUF8zMktfVElDS1NfUEVSX0haCQkoMzI3NjggLyBIWikKKyNpZiAoMzI3NjggJSBIWikgIT0gMAorLyogV2UgY2Fubm90IGlnbm9yZSBtb2R1bG8uCisgKiBQb3RlbnRpYWwgZXJyb3IgY2FuIGJlIGFzIGhpZ2ggYXMgc2V2ZXJhbCBwZXJjZW50LgorICovCisjZGVmaW5lIE9NQVBfMzJLX1RJQ0tfTU9EVUxPCQkoMzI3NjggJSBIWikKK3N0YXRpYyB1bnNpZ25lZCBtb2R1bG9fY291bnQgPSAwOyAvKiBDb3VudHMgMS9IWiB1bml0cyAqLworI2VuZGlmCiAKIC8qCiAgKiBUUk0gc2F5cyAxIC8gSFogPSAoIFRWUiArIDEpIC8gMzI3NjgsIHNvIFRSViA9ICgzMjc2OCAvIEhaKSAtIDEKQEAgLTMzMSw2ICszMzAsMTkgQEAKIAlub3cgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKIAogCXdoaWxlIChub3cgLSBvbWFwXzMya19sYXN0X3RpY2sgPj0gT01BUF8zMktfVElDS1NfUEVSX0haKSB7CisjaWZkZWYgT01BUF8zMktfVElDS19NT0RVTE8KKwkJLyogTW9kdWxvIGFkZGl0aW9uIG1heSBwdXQgb21hcF8zMmtfbGFzdF90aWNrIGFoZWFkIG9mIG5vdworCQkgKiBhbmQgY2F1c2UgdW53YW50ZWQgcmVwZXRpdGlvbiBvZiB0aGUgd2hpbGUgbG9vcC4KKwkJICovCisJCWlmICh1bmxpa2VseShub3cgLSBvbWFwXzMya19sYXN0X3RpY2sgPT0gfjApKQorCQkJYnJlYWs7CisKKwkJbW9kdWxvX2NvdW50ICs9IE9NQVBfMzJLX1RJQ0tfTU9EVUxPOworCQlpZiAobW9kdWxvX2NvdW50ID4gSFopIHsKKwkJCSsrb21hcF8zMmtfbGFzdF90aWNrOworCQkJbW9kdWxvX2NvdW50IC09IEhaOworCQl9CisjZW5kaWYKIAkJb21hcF8zMmtfbGFzdF90aWNrICs9IE9NQVBfMzJLX1RJQ0tTX1BFUl9IWjsKIAkJdGltZXJfdGljayhyZWdzKTsKIAl9CkBAIC00MDcsNyArNDE5LDcgQEAKICAqIFRpbWVyIGluaXRpYWxpemF0aW9uCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NUFVfVElNRVIpCiAJb21hcF9pbml0X21wdV90aW1lcigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggOTU2MDZiNC4uYWZiYmViNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogIyBBUk05MjVUCiBjb25maWcgQ1BVX0FSTTkyNVQKLSAJYm9vbCAiU3VwcG9ydCBBUk05MjVUIHByb2Nlc3NvciIgaWYgQVJDSF9PTUFQCisgCWJvb2wgIlN1cHBvcnQgQVJNOTI1VCBwcm9jZXNzb3IiIGlmIEFSQ0hfT01BUDEKICAJZGVwZW5kcyBvbiBBUkNIX09NQVAxNTEwCiAgCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAxNTEwCiAJc2VsZWN0IENQVV8zMnY0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbS1hcm12LmMgYi9hcmNoL2FybS9tbS9tbS1hcm12LmMKaW5kZXggYzNiZDUwMy4uYjE5ZjAwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW0tYXJtdi5jCisrKyBiL2FyY2gvYXJtL21tL21tLWFybXYuYwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJCWVjY19tYXNrID0gMDsKIAl9CiAKLQlpZiAoY3B1X2FyY2ggPD0gQ1BVX0FSQ0hfQVJNdjUpIHsKKwlpZiAoY3B1X2FyY2ggPD0gQ1BVX0FSQ0hfQVJNdjVURUopIHsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWVtX3R5cGVzKTsgaSsrKSB7CiAJCQlpZiAobWVtX3R5cGVzW2ldLnByb3RfbDEpCiAJCQkJbWVtX3R5cGVzW2ldLnByb3RfbDEgfD0gUE1EX0JJVDQ7CkBAIC01ODQsNyArNTg0LDcgQEAKIAkJcG1kdmFsID0gKGkgPDwgUEdESVJfU0hJRlQpIHwKIAkJCSBQTURfU0VDVF9BUF9XUklURSB8IFBNRF9TRUNUX0FQX1JFQUQgfAogCQkJIFBNRF9UWVBFX1NFQ1Q7Ci0JCWlmIChjcHVfYXJjaCA8PSBDUFVfQVJDSF9BUk12NSkKKwkJaWYgKGNwdV9hcmNoIDw9IENQVV9BUkNIX0FSTXY1VEVKKQogCQkJcG1kdmFsIHw9IFBNRF9CSVQ0OwogCQlwbWQgPSBwbWRfb2ZmKHBnZCwgaSA8PCBQR0RJUl9TSElGVCk7CiAJCXBtZFswXSA9IF9fcG1kKHBtZHZhbCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKaW5kZXggZTNkODUxMC4uMzUyZGI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJbWNyCXAxNSwgMCwgcjQsIGMyLCBjMCwgMQkJQCBsb2FkIFRUQjEKICNpZmRlZiBDT05GSUdfVkZQCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMgotCW9ycglyMCwgcjAsICMoMyA8PCAyMCkKKwlvcnIJcjAsIHIwLCAjKDB4ZiA8PCAyMCkKIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAyCQlAIEVuYWJsZSBmdWxsIGFjY2VzcyB0byBWRlAKICNlbmRpZgogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgcmVhZCBjb250cm9sIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NTM2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtMCwwICsxLDExMiBAQAoraWYgQVJDSF9PTUFQCisKK21lbnUgIlRJIE9NQVAgSW1wbGVtZW50YXRpb25zIgorCitjb25maWcgQVJDSF9PTUFQX09URworCWJvb2wKKworY2hvaWNlCisJcHJvbXB0ICJPTUFQIFN5c3RlbSBUeXBlIgorCWRlZmF1bHQgQVJDSF9PTUFQMQorCitjb25maWcgQVJDSF9PTUFQMQorCWJvb2wgIlRJIE9NQVAxIgorCitjb25maWcgQVJDSF9PTUFQMgorCWJvb2wgIlRJIE9NQVAyIgorCitlbmRjaG9pY2UKKworY29tbWVudCAiT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMiCisKK2NvbmZpZyBPTUFQX1JFU0VUX0NMT0NLUworCWJvb2wgIlJlc2V0IHVudXNlZCBjbG9ja3MgZHVyaW5nIGJvb3QiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byByZXNldCB1bnVzZWQgY2xvY2tzIGR1cmluZyBib290LgorCSAgVGhpcyBvcHRpb24gc2F2ZXMgcG93ZXIsIGJ1dCBhc3N1bWVzIGFsbCBkcml2ZXJzIGFyZQorCSAgdXNpbmcgdGhlIGNsb2NrIGZyYW1ld29yay4gQnJva2VuIGRyaXZlcnMgdGhhdCBkbyBub3QKKwkgIHlldCB1c2UgY2xvY2sgZnJhbWV3b3JrIG1heSBub3Qgd29yayB3aXRoIHRoaXMgb3B0aW9uLgorCSAgSWYgeW91IGFyZSBib290aW5nIGZyb20gYW5vdGhlciBvcGVyYXRpbmcgc3lzdGVtLCB5b3UKKwkgIHByb2JhYmx5IGRvIG5vdCB3YW50IHRoaXMgb3B0aW9uIGVuYWJsZWQgdW50aWwgeW91cgorCSAgZGV2aWNlIGRyaXZlcnMgd29yayBwcm9wZXJseS4KKworY29uZmlnIE9NQVBfTVVYCisJYm9vbCAiT01BUCBtdWx0aXBsZXhpbmcgc3VwcG9ydCIKKyAgICAgICAgZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlkZWZhdWx0IHkKKyAgICAgICAgaGVscAorICAgICAgICAgIFBpbiBtdWx0aXBsZXhpbmcgc3VwcG9ydCBmb3IgT01BUCBib2FyZHMuIElmIHlvdXIgYm9vdGxvYWRlcgorICAgICAgICAgIHNldHMgdGhlIG11bHRpcGxleGluZyBjb3JyZWN0bHksIHNheSBOLiBPdGhlcndpc2UsIG9yIGlmIHVuc3VyZSwKKyAgICAgICAgICBzYXkgWS4KKworY29uZmlnIE9NQVBfTVVYX0RFQlVHCisJYm9vbCAiTXVsdGlwbGV4aW5nIGRlYnVnIG91dHB1dCIKKyAgICAgICAgZGVwZW5kcyBvbiBPTUFQX01VWAorICAgICAgICBkZWZhdWx0IG4KKyAgICAgICAgaGVscAorICAgICAgICAgIE1ha2VzIHRoZSBtdWx0aXBsZXhpbmcgZnVuY3Rpb25zIHByaW50IG91dCBhIGxvdCBvZiBkZWJ1ZyBpbmZvLgorICAgICAgICAgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbmQgb3V0IHRoZSBjb3JyZWN0IHZhbHVlcyBvZiB0aGUKKyAgICAgICAgICBtdWx0aXBsZXhpbmcgcmVnaXN0ZXJzLgorCitjb25maWcgT01BUF9NVVhfV0FSTklOR1MKKwlib29sICJXYXJuIGFib3V0IHBpbnMgdGhlIGJvb3Rsb2FkZXIgZGlkbid0IHNldCB1cCIKKyAgICAgICAgZGVwZW5kcyBvbiBPTUFQX01VWAorICAgICAgICBkZWZhdWx0IHkKKyAgICAgICAgaGVscAorCSAgQ2hvb3NlIFkgaGVyZSB0byB3YXJuIHdoZW5ldmVyIGRyaXZlciBpbml0aWFsaXphdGlvbiBsb2dpYyBuZWVkcworCSAgdG8gY2hhbmdlIHRoZSBwaW4gbXVsdGlwbGV4aW5nIHNldHVwLiAgV2hlbiB0aGVyZSBhcmUgbm8gd2FybmluZ3MKKwkgIHByaW50ZWQsIGl0J3Mgc2FmZSB0byBkZXNlbGVjdCBPTUFQX01VWCBmb3IgeW91ciBwcm9kdWN0LgorCitjaG9pY2UKKyAgICAgICAgcHJvbXB0ICJTeXN0ZW0gdGltZXIiCisJZGVmYXVsdCBPTUFQX01QVV9USU1FUgorCitjb25maWcgT01BUF9NUFVfVElNRVIKKwlib29sICJVc2UgbXB1IHRpbWVyIgorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIE9NQVAgbXB1IHRpbWVyLiBUaGlzCisJICB0aW1lciBwcm92aWRlcyBtb3JlIGludHJhLXRpY2sgcmVzb2x1dGlvbiB0aGFuIHRoZSAzMktIeiB0aW1lciwKKwkgIGJ1dCBjb25zdW1lcyBtb3JlIHBvd2VyLgorCitjb25maWcgT01BUF8zMktfVElNRVIKKwlib29sICJVc2UgMzJLSHogdGltZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgT01BUCAzMktIeiB0aW1lci4KKwkgIFRoaXMgdGltZXIgc2F2ZXMgcG93ZXIgY29tcGFyZWQgdG8gdGhlIE9NQVBfTVBVX1RJTUVSLCBhbmQgaGFzCisJICBzdXBwb3J0IGZvciBubyB0aWNrIGR1cmluZyBpZGxlLiBUaGUgMzJLSHogdGltZXIgcHJvdmlkZXMgbGVzcworCSAgaW50cmEtdGljayByZXNvbHV0aW9uIHRoYW4gT01BUF9NUFVfVElNRVIuIFRoZSAzMktIeiB0aW1lciBpcworCSAgY3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBPTUFQLTE2eHguCisKK2VuZGNob2ljZQorCitjb25maWcgT01BUF8zMktfVElNRVJfSFoKKyAgICAgICBpbnQgIktlcm5lbCBpbnRlcm5hbCB0aW1lciBmcmVxdWVuY3kgZm9yIDMyS0h6IHRpbWVyIgorICAgICAgIHJhbmdlIDMyIDEwMjQKKyAgICAgICBkZXBlbmRzIG9uIE9NQVBfMzJLX1RJTUVSCisgICAgICAgZGVmYXVsdCAiMTI4IgorICAgICAgIGhlbHAKKwkgIEtlcm5lbCBpbnRlcm5hbCB0aW1lciBmcmVxdWVuY3kgc2hvdWxkIGJlIGEgZGl2aXNvciBvZiAzMjc2OCwKKwkgIHN1Y2ggYXMgNjQgb3IgMTI4LgorCitjaG9pY2UKKwlwcm9tcHQgIkxvdy1sZXZlbCBkZWJ1ZyBjb25zb2xlIFVBUlQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlkZWZhdWx0IE9NQVBfTExfREVCVUdfVUFSVDEKKworY29uZmlnIE9NQVBfTExfREVCVUdfVUFSVDEKKwlib29sICJVQVJUMSIKKworY29uZmlnIE9NQVBfTExfREVCVUdfVUFSVDIKKwlib29sICJVQVJUMiIKKworY29uZmlnIE9NQVBfTExfREVCVUdfVUFSVDMKKwlib29sICJVQVJUMyIKKworZW5kY2hvaWNlCisKK2VuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzFlMTFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgQ29tbW9uIHN1cHBvcnQKK29iai15IDo9IGNvbW1vbi5vIGRtYS5vIGNsb2NrLm8gbXV4Lm8gZ3Bpby5vIG1jYnNwLm8gdXNiLm8KK29iai1tIDo9CitvYmotbiA6PQorb2JqLSAgOj0KKworIyBPQ1BJIGludGVyY29ubmVjdCBzdXBwb3J0IGZvciAxNzEwLCAxNjEwIGFuZCA1OTEyCitvYmotJChDT05GSUdfQVJDSF9PTUFQMTZYWCkgKz0gb2NwaS5vCisKKyMgUG93ZXIgTWFuYWdlbWVudAorb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KKworb2JqLSQoQ09ORklHX0NQVV9GUkVRKSArPSBjcHUtb21hcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCnNpbWlsYXJpdHkgaW5kZXggNzQlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtb21hcC9jbG9jay5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCBlOTExODZiLi41OWQ5MWIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2Nsb2NrLmMKKyAqICBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgY29ycG9yYXRpb24KICAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KQEAgLTI1LDYgKzI2LDggQEAKIHN0YXRpYyBERUNMQVJFX01VVEVYKGNsb2Nrc19zZW0pOwogc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja2Z3X2xvY2spOwogc3RhdGljIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqICBjbGspOworLyogVUFSVCBjbG9jayBmdW5jdGlvbiAqLworc3RhdGljIGludCBzZXRfdWFydF9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAvKiBFeHRlcm5hbCBjbG9jayAoTUNMSyAmIEJDTEspIGZ1bmN0aW9ucyAqLwogc3RhdGljIGludCBzZXRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogc3RhdGljIGxvbmcgcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwpAQCAtMzQsNyArMzcsNyBAQAogc3RhdGljIGxvbmcgcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHZvaWQgY2xrX3NldGRwbGwoX191MTYsIF9fdTE2KTsKIAotc3RydWN0IG1wdV9yYXRlIHJhdGVfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXB1X3JhdGUgcmF0ZV90YWJsZVtdID0gewogCS8qIE1QVSBNSHosIHh0YWwgTUh6LCBkcGxsMSBNSHosIENLQ1RMLCBEUExMX0NUTAogCSAqIGFybWRpdiwgZHNwZGl2LCBkc3BtbXUsIHRjZGl2LCBwZXJkaXYsIGxjZGRpdgogCSAqLwpAQCAtNDgsNyArNTEsNyBAQAogCXsgMTkyMDAwMDAwLCAxOTIwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjUxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLwogCXsgMTkyMDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjgxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLwogCXsgIDk2MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1NWYsIDB4MjgxMCB9LCAvKiAyLzIvMi8yLzgvOCAqLwotCXsgIDQ4MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBjY2YsIDB4MjgxMCB9LCAvKiA0LzQvNC80LzgvOCAqLworCXsgIDQ4MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBiYWYsIDB4MjgxMCB9LCAvKiA0LzgvNC80LzgvOCAqLwogCXsgIDI0MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBmZmYsIDB4MjgxMCB9LCAvKiA4LzgvOC84LzgvOCAqLwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTgyTUhaKQpAQCAtNTgsNyArNjEsNyBAQAogCXsgMTY4MDAwMDAwLCAxMjAwMDAwMCwgMTY4MDAwMDAwLCAweDAxMGYsIDB4MjcxMCB9LCAvKiAxLzEvMS8yLzgvOCAqLwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTUwTUhaKQotCXsgMTUwMDAwMDAwLCAxMjAwMDAwMCwgMTUwMDAwMDAwLCAweDE1MGEsIDB4MmNiMCB9LCAvKiAwLzAvMS8xLzIvMiAqLworCXsgMTUwMDAwMDAwLCAxMjAwMDAwMCwgMTUwMDAwMDAwLCAweDAxMGEsIDB4MmNiMCB9LCAvKiAxLzEvMS8yLzQvNCAqLwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTIwTUhaKQogCXsgMTIwMDAwMDAwLCAxMjAwMDAwMCwgMTIwMDAwMDAwLCAweDAxMGEsIDB4MjUxMCB9LCAvKiAxLzEvMS8yLzQvNCAqLwpAQCAtNzYsMTkgKzc5LDExIEBACiB9OwogCiAKLXN0YXRpYyB2b2lkIGNrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsaykKLXsKLQlpbnQgZHNvcjsKLQotCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQgKi8KLQlkc29yID0gMSA8PCAoMyAmIChvbWFwX3JlYWR3KEFSTV9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOwotCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yKSkKLQkJcmV0dXJuOyAvKiBObyBjaGFuZ2UsIHF1aWNrIGV4aXQgKi8KLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7Ci0KLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci19CitzdGF0aWMgdm9pZCBja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqICBjbGspOworaW50IF9fY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwordm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIF9fY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgX19jbGtfdXNlKHN0cnVjdCBjbGsgKmNsayk7CiAKIAogc3RhdGljIHZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsaykKQEAgLTEwMiw2ICs5NywxNCBAQAogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gMTQ7CiB9CiAKK3N0YXRpYyB2b2lkIHVhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCit7CisJdW5zaWduZWQgaW50IHZhbCA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlpZiAodmFsICYgY2xrLT5lbmFibGVfYml0KQorCQljbGstPnJhdGUgPSA0ODAwMDAwMDsKKwllbHNlCisJCWNsay0+cmF0ZSA9IDEyMDAwMDAwOworfQogCiBzdGF0aWMgc3RydWN0IGNsayBja19yZWYgPSB7CiAJLm5hbWUJCT0gImNrX3JlZiIsCkBAIC0xMzgsNyArMTQxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybXBlcl9jayA9IHsKIAkubmFtZQkJPSAiYXJtcGVyX2NrIiwKIAkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA3MzAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKIAkJCSAgUkFURV9DS0NUTCwKIAkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAogCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCkBAIC0xODUsNyArMTg4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNnh4ID0gewogCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKIAkucGFyZW50CQk9ICZhcm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLyogTm90ZTogT24gMTZ4eCB0aGUgZnJlcXVlbmN5IGNhbiBiZSBkaXZpZGVkIGJ5IDIgYnkgcHJvZ3JhbW1pbmcKIAkgKiBBUk1fQ0tDVEw6QVJNX0lOVEhDS19TRUwoMTQpIHRvIDEKQEAgLTIxNCw2ICsyMTcsMzggQEAKIAkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCiB9OwogCitzdGF0aWMgc3RydWN0IGNsayBkc3BwZXJfY2sgPSB7CisJLm5hbWUJCT0gImRzcHBlcl9jayIsCisJLnBhcmVudAkJPSAmY2tfZHBsbDEsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBSQVRFX0NLQ1RMIHwgRFNQX0RPTUFJTl9DTE9DSyB8IFZJUlRVQUxfSU9fQUREUkVTUywKKwkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS8vLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNweG9yX2NrID0geworCS5uYW1lCQk9ICJkc3B4b3JfY2siLAorCS5wYXJlbnQJCT0gJmNrX3JlZiwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIERTUF9ET01BSU5fQ0xPQ0sgfCBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKKwkuZW5hYmxlX2JpdAk9IEVOX1hPUlBDSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwdGltX2NrID0geworCS5uYW1lCQk9ICJkc3B0aW1fY2siLAorCS5wYXJlbnQJCT0gJmNrX3JlZiwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIERTUF9ET01BSU5fQ0xPQ0sgfCBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKKwkuZW5hYmxlX2JpdAk9IEVOX0RTUFRJTUNLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCiBzdGF0aWMgc3RydWN0IGNsayB0Y19jayA9IHsKIAkubmFtZQkJPSAidGNfY2siLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLApAQCAtMjI2LDcgKzI2MSw3IEBACiBzdGF0aWMgc3RydWN0IGNsayBhcm1pbnRoX2NrMTUxMCA9IHsKIAkubmFtZQkJPSAiYXJtaW50aF9jayIsCiAJLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLyogTm90ZTogT24gMTUxMCB0aGUgZnJlcXVlbmN5IGZvbGxvd3MgVENfQ0sKIAkgKgpAQCAtMjM3LDcgKzI3Miw3IEBACiBzdGF0aWMgc3RydWN0IGNsayB0aXBiX2NrID0gewogCS5uYW1lCQk9ICJ0aWJwX2NrIiwKIAkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI3MSwxNCArMzA2LDE1IEBACiBzdGF0aWMgc3RydWN0IGNsayBkbWFfY2sgPSB7CiAJLm5hbWUJCT0gImRtYV9jayIsCiAJLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZG1hX2xjZGZyZWVfY2sgPSB7CiAJLm5hbWUJCT0gImRtYV9sY2RmcmVlX2NrIiwKIAkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTMwMywxNCArMzM5LDE0IEBACiBzdGF0aWMgc3RydWN0IGNsayByaGVhMV9jayA9IHsKIAkubmFtZQkJPSAicmhlYTFfY2siLAogCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcmhlYTJfY2sgPSB7CiAJLm5hbWUJCT0gInJoZWEyX2NrIiwKIAkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTMyNSw0MyArMzYxLDU1IEBACiAJLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfY2sgPSB7CitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNTEwID0geworCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgRU5BQkxFX1JFR18zMkJJVCB8IEFMV0FZU19FTkFCTEVELAorCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gMjksCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KKwkuc2V0X3JhdGUJPSAmc2V0X3VhcnRfcmF0ZSwKKwkucmVjYWxjCQk9ICZ1YXJ0X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxXzE2eHggPSB7CiAJLm5hbWUJCT0gInVhcnQxX2NrIiwKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAogCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAogCS5lbmFibGVfYml0CT0gMjksCi0JLyogKE9ubHkgb24gMTUxMCkKLQkgKiBUaGUgImVuYWJsZSBiaXQiIGFjdHVhbGx5IGNob29zZXMgYmV0d2VlbiA0OE1IeiBhbmQgMTJNSHouCi0JICovCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9jayA9IHsKIAkubmFtZQkJPSAidWFydDJfY2siLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfCBFTkFCTEVfUkVHXzMyQklULAogCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAotCS5lbmFibGVfYml0CT0gMzAsCi0JLyogKGZvciBib3RoIDE1MTAgYW5kIDE2eHgpCi0JICogVGhlICJlbmFibGUgYml0IiBhY3R1YWxseSBjaG9vc2VzIGJldHdlZW4gNDhNSHogYW5kIDEyTUh6LzMya0h6LgotCSAqLworCS5lbmFibGVfYml0CT0gMzAsCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KKwkuc2V0X3JhdGUJPSAmc2V0X3VhcnRfcmF0ZSwKKwkucmVjYWxjCQk9ICZ1YXJ0X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2NrID0geworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfMTUxMCA9IHsKKwkubmFtZQkJPSAidWFydDNfY2siLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLworCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCwKKwkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKKwkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCisJLnNldF9yYXRlCT0gJnNldF91YXJ0X3JhdGUsCisJLnJlY2FsYwkJPSAmdWFydF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M18xNnh4ID0gewogCS5uYW1lCQk9ICJ1YXJ0M19jayIsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCiAJLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKIAkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKIAkuZW5hYmxlX2JpdAk9IDMxLAotCS8qIChPbmx5IG9uIDE1MTApCi0JICogVGhlICJlbmFibGUgYml0IiBhY3R1YWxseSBjaG9vc2VzIGJldHdlZW4gNDhNSHogYW5kIDEyTUh6LgotCSAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2Nsa28gPSB7CS8qIDYgTUh6IG91dHB1dCBvbiBXNF9VU0JfQ0xLTyAqLwpAQCAtNDgwLDYgKzUyOCw5IEBACiAJLyogQ0tfR0VOMiBjbG9ja3MgKi8KIAkmZHNwX2NrLAogCSZkc3BtbXVfY2ssCisJJmRzcHBlcl9jaywKKwkmZHNweG9yX2NrLAorCSZkc3B0aW1fY2ssCiAJLyogQ0tfR0VOMyBjbG9ja3MgKi8KIAkmdGNfY2ssCiAJJnRpcGJfY2ssCkBAIC00OTQsOSArNTQ1LDExIEBACiAJJnJoZWEyX2NrLAogCSZsY2RfY2ssCiAJLyogVUxQRCBjbG9ja3MgKi8KLQkmdWFydDFfY2ssCisJJnVhcnQxXzE1MTAsCisJJnVhcnQxXzE2eHgsCiAJJnVhcnQyX2NrLAotCSZ1YXJ0M19jaywKKwkmdWFydDNfMTUxMCwKKwkmdWFydDNfMTZ4eCwKIAkmdXNiX2Nsa28sCiAJJnVzYl9oaGNfY2sxNTEwLCAmdXNiX2hoY19jazE2eHgsCiAJJm1jbGtfMTUxMCwgICZtY2xrXzE2eHgsCkBAIC01NDcsMTQgKzYwMCwzNCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoY2xrLT5mbGFncyAmIERTUF9ET01BSU5fQ0xPQ0spIHsKKwkJX19jbGtfdXNlKCZhcGlfY2spOworCX0KKwogCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgewotCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisJCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7CisJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCQl9IGVsc2UgeworCQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KIAl9IGVsc2UgewotCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJb21hcF93cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7CisJCQlyZWd2YWwxNiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7CisJCQlyZWd2YWwxNiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJX19yYXdfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOworCQl9IGVsc2UgeworCQkJcmVndmFsMTYgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7CisJCQlyZWd2YWwxNiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJb21hcF93cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9CisKKwlpZiAoY2xrLT5mbGFncyAmIERTUF9ET01BSU5fQ0xPQ0spIHsKKwkJX19jbGtfdW51c2UoJmFwaV9jayk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01NjksMTQgKzY0MiwzNCBAQAogCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gMCkKIAkJcmV0dXJuOwogCisJaWYgKGNsay0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKSB7CisJCV9fY2xrX3VzZSgmYXBpX2NrKTsKKwl9CisKIAlpZiAoY2xrLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpIHsKLQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQlvbWFwX3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKKwkJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCQl9IGVsc2UgeworCQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCQlyZWd2YWwzMiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJCW9tYXBfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCQl9CiAJfSBlbHNlIHsKLQkJcmVndmFsMTYgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JCXJlZ3ZhbDE2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKKwkJCXJlZ3ZhbDE2ID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJX19yYXdfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOworCQl9IGVsc2UgeworCQkJcmVndmFsMTYgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7CisJCQlyZWd2YWwxNiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJCW9tYXBfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisJfQorCisJaWYgKGNsay0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKSB7CisJCV9fY2xrX3VudXNlKCZhcGlfY2spOwogCX0KIH0KIApAQCAtNzY2LDYgKzg1OSwzMyBAQAogCXJldHVybiBkc29yX2V4cDsKIH0KIAorCitzdGF0aWMgdm9pZCBja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqICBjbGspCit7CisJaW50IGRzb3I7CisKKwkvKiBDYWxjdWxhdGUgZGl2aXNvciBlbmNvZGVkIGFzIDItYml0IGV4cG9uZW50ICovCisJaWYgKGNsay0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKSB7CisJCS8qIFRoZSBjbG9jayBjb250cm9sIGJpdHMgYXJlIGluIERTUCBkb21haW4sCisJCSAqIHNvIGFwaV9jayBpcyBuZWVkZWQgZm9yIGFjY2Vzcy4KKwkJICogTm90ZSB0aGF0IERTUF9DS0NUTCB2aXJ0IGFkZHIgPSBwaHlzIGFkZHIsIHNvCisJCSAqIHdlIG11c3QgdXNlIF9fcmF3X3JlYWR3KCkgaW5zdGVhZCBvZiBvbWFwX3JlYWR3KCkuCisJCSAqLworCQlfX2Nsa191c2UoJmFwaV9jayk7CisJCWRzb3IgPSAxIDw8ICgzICYgKF9fcmF3X3JlYWR3KERTUF9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOworCQlfX2Nsa191bnVzZSgmYXBpX2NrKTsKKwl9IGVsc2UgeworCQlkc29yID0gMSA8PCAoMyAmIChvbWFwX3JlYWR3KEFSTV9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOworCX0KKwlpZiAodW5saWtlbHkoY2xrLT5yYXRlID09IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcikpCisJCXJldHVybjsgLyogTm8gY2hhbmdlLCBxdWljayBleGl0ICovCisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yOworCisJaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQorCQlwcm9wYWdhdGVfcmF0ZShjbGspOworfQorCisKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJaW50IGRzb3JfZXhwOwpAQCAtODI2LDYgKzk0Niw5IEBACiAJaWYgKCFwdHItPnJhdGUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFwdHItPnJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKHVubGlrZWx5KGNrX2RwbGwxLnJhdGUgPT0gMCkpIHsKIAkJb21hcF93cml0ZXcocHRyLT5kcGxsY3RsX3ZhbCwgRFBMTF9DVEwpOwogCQlja19kcGxsMS5yYXRlID0gcHRyLT5wbGxfcmF0ZTsKQEAgLTkyMSw2ICsxMDQ0LDIzIEBACiAJcmV0dXJuIGRzb3I7CiB9CiAKKy8qIE9ubHkgbmVlZGVkIG9uIDE1MTAgKi8KK3N0YXRpYyBpbnQgc2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlpZiAocmF0ZSA9PSAxMjAwMDAwMCkKKwkJdmFsICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCWVsc2UgaWYgKHJhdGUgPT0gNDgwMDAwMDApCisJCXZhbCB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJb21hcF93cml0ZWwodmFsLCBjbGstPmVuYWJsZV9yZWcpOworCWNsay0+cmF0ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCBzZXRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CkBAIC05ODUsNyArMTEyNSwxOCBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfdW5yZWdpc3Rlcik7CiAKLQorI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUworLyoKKyAqIFJlc2V0cyBzb21lIGNsb2NrcyB0aGF0IG1heSBiZSBsZWZ0IG9uIGZyb20gYm9vdGxvYWRlciwKKyAqIGJ1dCBsZWF2ZXMgc2VyaWFsIGNsb2NrcyBvbi4gU2VlIGFsc28gb21hcF9sYXRlX2Nsa19yZXNldCgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9lYXJseV9jbGtfcmVzZXQodm9pZCkKK3sKKwkvL29tYXBfd3JpdGVsKDB4MyA8PCAyOSwgTU9EX0NPTkZfQ1RSTF8wKTsKK30KKyNlbHNlCisjZGVmaW5lIG9tYXBfZWFybHlfY2xrX3Jlc2V0KCkJe30KKyNlbmRpZgogCiBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCiB7CkBAIC05OTMsNiArMTE0NCw4IEBACiAJY29uc3Qgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnICppbmZvOwogCWludCBjcnlzdGFsX3R5cGUgPSAwOyAvKiBEZWZhdWx0IDEyIE1IeiAqLwogCisJb21hcF9lYXJseV9jbGtfcmVzZXQoKTsKKwogCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MrQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7IGNsa3ArKykgewogCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQMTUxMCkgJiYgY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJCWNsa19yZWdpc3RlcigqY2xrcCk7CkBAIC0xMDIzLDkgKzExNzYsNDIgQEAKIAkJY2tfcmVmLnJhdGUgPSAxOTIwMDAwMDsKICNlbmRpZgogCisJcHJpbnRrKCJDbG9ja3M6IEFSTV9TWVNTVDogMHglMDR4IERQTExfQ1RMOiAweCUwNHggQVJNX0NLQ1RMOiAweCUwNHhcbiIsCisJICAgICAgIG9tYXBfcmVhZHcoQVJNX1NZU1NUKSwgb21hcF9yZWFkdyhEUExMX0NUTCksCisJICAgICAgIG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSk7CisKIAkvKiBXZSB3YW50IHRvIGJlIGluIHN5bmNyb25vdXMgc2NhbGFibGUgbW9kZSAqLwogCW9tYXBfd3JpdGV3KDB4MTAwMCwgQVJNX1NZU1NUKTsKIAorI2lmZGVmIENPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUgorCS8qIFVzZSB2YWx1ZXMgc2V0IGJ5IGJvb3Rsb2FkZXIuIERldGVybWluZSBQTEwgcmF0ZSBhbmQgcmVjYWxjdWxhdGUKKwkgKiBkZXBlbmRlbnQgY2xvY2tzIGFzIGlmIGtlcm5lbCBoYWQgY2hhbmdlZCBQTEwgb3IgZGl2aXNvcnMuCisJICovCisJeworCQl1bnNpZ25lZCBwbGxfY3RsX3ZhbCA9IG9tYXBfcmVhZHcoRFBMTF9DVEwpOworCisJCWNrX2RwbGwxLnJhdGUgPSBja19yZWYucmF0ZTsgLyogQmFzZSB4dGFsIHJhdGUgKi8KKwkJaWYgKHBsbF9jdGxfdmFsICYgMHgxMCkgeworCQkJLyogUExMIGVuYWJsZWQsIGFwcGx5IG11bHRpcGxpZXIgYW5kIGRpdmlzb3IgKi8KKwkJCWlmIChwbGxfY3RsX3ZhbCAmIDB4ZjgwKQorCQkJCWNrX2RwbGwxLnJhdGUgKj0gKHBsbF9jdGxfdmFsICYgMHhmODApID4+IDc7CisJCQlja19kcGxsMS5yYXRlIC89ICgocGxsX2N0bF92YWwgJiAweDYwKSA+PiA1KSArIDE7CisJCX0gZWxzZSB7CisJCQkvKiBQTEwgZGlzYWJsZWQsIGFwcGx5IGJ5cGFzcyBkaXZpc29yICovCisJCQlzd2l0Y2ggKHBsbF9jdGxfdmFsICYgMHhjKSB7CisJCQljYXNlIDA6CisJCQkJYnJlYWs7CisJCQljYXNlIDB4NDoKKwkJCQlja19kcGxsMS5yYXRlIC89IDI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWNrX2RwbGwxLnJhdGUgLz0gNDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOworI2Vsc2UKIAkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgYW5kIGVuYWJsZSBpdCAqLwogCWlmIChzZWxlY3RfdGFibGVfcmF0ZSgmdmlydHVhbF9ja19tcHUsIH4wKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlN5c3RlbSBmcmVxdWVuY2llcyBub3Qgc2V0LiBDaGVjayB5b3VyIGNvbmZpZy5cbiIpOwpAQCAtMTAzNCwxMiArMTIyMCwxMyBAQAogCQlvbWFwX3dyaXRldygweDEwMDUsIEFSTV9DS0NUTCk7CiAJCWNrX2RwbGwxLnJhdGUgPSA2MDAwMDAwMDsKIAkJcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoeHRhbC9EUExMMS9NUFUpOiAlbGQvJWxkLyVsZFxuIiwKLQkJICAgICAgIGNrX3JlZi5yYXRlLCBja19kcGxsMS5yYXRlLCBhcm1fY2sucmF0ZSk7CiAJfQotCisjZW5kaWYKIAkvKiBDYWNoZSByYXRlcyBmb3IgY2xvY2tzIGNvbm5lY3RlZCB0byBja19yZWYgKG5vdCBkcGxsMSkgKi8KIAlwcm9wYWdhdGVfcmF0ZSgmY2tfcmVmKTsKKwlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlICh4dGFsL0RQTEwxL01QVSk6ICVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkgICAgICAgY2tfcmVmLnJhdGUgLyAxMDAwMDAwLCAoY2tfcmVmLnJhdGUgLyAxMDAwMDApICUgMTAsCisJICAgICAgIGNrX2RwbGwxLnJhdGUsIGFybV9jay5yYXRlKTsKIAogI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIKIAkvKiBTZWxlY3Qgc2xpY2VyIG91dHB1dCBhcyBPTUFQIGlucHV0IGNsb2NrICovCkBAIC0xMDc0LDMgKzEyNjEsNjMgQEAKIAogCXJldHVybiAwOwogfQorCisKKyNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKKworc3RhdGljIGludCBfX2luaXQgb21hcF9sYXRlX2Nsa19yZXNldCh2b2lkKQoreworCS8qIFR1cm4gb2ZmIGFsbCB1bnVzZWQgY2xvY2tzICovCisJc3RydWN0IGNsayAqcDsKKwlfX3UzMiByZWd2YWwzMjsKKworCW9tYXBfd3JpdGV3KDAsIFNPRlRfUkVRX1JFRyk7CisJb21hcF93cml0ZXcoMCwgU09GVF9SRVFfUkVHMik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKHAtPnVzZWNvdW50ID4gMCB8fCAocC0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkgfHwKKwkJCXAtPmVuYWJsZV9yZWcgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEFzc3VtZSBubyBEU1AgY2xvY2tzIGhhdmUgYmVlbiBhY3RpdmF0ZWQgYnkgYm9vdGxvYWRlciAqLworCQlpZiAocC0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKQorCQkJY29udGludWU7CisKKwkJLyogSXMgdGhlIGNsb2NrIGFscmVhZHkgZGlzYWJsZWQ/ICovCisJCWlmIChwLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpIHsKKwkJCWlmIChwLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKKwkJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKHAtPmVuYWJsZV9yZWcpOworCQkJZWxzZQorCQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChwLT5lbmFibGVfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKKwkJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWR3KHAtPmVuYWJsZV9yZWcpOworCQkJZWxzZQorCQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkdyhwLT5lbmFibGVfcmVnKTsKKwkJfQorCisJCWlmICgocmVndmFsMzIgJiAoMSA8PCBwLT5lbmFibGVfYml0KSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEZJWE1FOiBUaGlzIGNsb2NrIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSBidXQgbm8tb25lCisJCSAqIGhhcyBhc2tlZCBmb3IgaXRzIGFjdGl2YXRpb24uICovCisJCWlmIChwID09ICZ0YzJfY2sgICAgICAgICAvLyBGSVg6IHBtLmMgKFNSQU0pLCBDQ1AsIENhbWVyYQorCQkgICAgfHwgcCA9PSAmY2tfZHBsbDFvdXQgLy8gRklYOiBTb1NTSSwgU1NSCisJCSAgICB8fCBwID09ICZhcm1fZ3Bpb19jayAvLyBGSVg6IEdQSU8gY29kZSBmb3IgMTUxMAorCQkgICAgKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJGSVhNRTogQ2xvY2sgXCIlc1wiIHNlZW1zIHVudXNlZFxuIiwKKwkJCSAgICAgICBwLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIHVudXNlZCBjbG9jayBcIiVzXCIuLi4gIiwgcC0+bmFtZSk7CisJCV9fY2xrX2Rpc2FibGUocCk7CisJCXByaW50aygiIGRvbmVcbiIpOworCX0KKworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKG9tYXBfbGF0ZV9jbGtfcmVzZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmgKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2Nsb2NrLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5oCmluZGV4IDA4YzBkZGQuLmE4OWUxZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvY2xvY2suaAorICogIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5oCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBjb3Jwb3JhdGlvbgogICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CkBAIC01Miw2ICs1Miw4IEBACiAjZGVmaW5lIENMT0NLX0lOX09NQVAxNlhYCTY0CiAjZGVmaW5lIENMT0NLX0lOX09NQVAxNTEwCTEyOAogI2RlZmluZSBDTE9DS19JTl9PTUFQNzMwCTI1NgorI2RlZmluZSBEU1BfRE9NQUlOX0NMT0NLCTUxMgorI2RlZmluZSBWSVJUVUFMX0lPX0FERFJFU1MJMTAyNAogCiAvKiBBUk1fQ0tDVEwgYml0IHNoaWZ0cyAqLwogI2RlZmluZSBDS0NUTF9QRVJESVZfT0ZGU0VUCTAKQEAgLTYzLDYgKzY1LDggQEAKIC8qI2RlZmluZSBBUk1fVElNWE8JCTEyKi8KICNkZWZpbmUgRU5fRFNQQ0sJCTEzCiAvKiNkZWZpbmUgQVJNX0lOVEhDS19TRUwJMTQqLyAvKiBEaXZpZGUtYnktMiBmb3IgbXB1IGludGhfY2sgKi8KKy8qIERTUF9DS0NUTCBiaXQgc2hpZnRzICovCisjZGVmaW5lIENLQ1RMX0RTUFBFUkRJVl9PRkZTRVQJMAogCiAvKiBBUk1fSURMRUNUMSBiaXQgc2hpZnRzICovCiAvKiNkZWZpbmUgSURMV0RUX0FSTQkwKi8KQEAgLTk2LDYgKzEwMCw5IEBACiAjZGVmaW5lIEVOX1RDMV9DSwkyCiAjZGVmaW5lIEVOX1RDMl9DSwk0CiAKKy8qIERTUF9JRExFQ1QyIGJpdCBzaGlmdHMgKDAsMSwyIGFyZSBzYW1lIGFzIGZvciBBUk1fSURMRUNUMikgKi8KKyNkZWZpbmUgRU5fRFNQVElNQ0sJNQorCiAvKiBWYXJpb3VzIHJlZ2lzdGVyIGRlZmluZXMgZm9yIGNsb2NrIGNvbnRyb2xzIHNjYXR0ZXJlZCBhcm91bmQgT01BUCBjaGlwICovCiAjZGVmaW5lIFVTQl9NQ0xLX0VOX0JJVAkJNAkvKiBJbiBVTFBEX0NMS0NfQ1RSTCAqLwogI2RlZmluZSBVU0JfSE9TVF9ISENfVUhPU1RfRU4JOQkvKiBJbiBNT0RfQ09ORl9DVFJMXzAgKi8KQEAgLTEwMyw3ICsxMTAsOCBAQAogI2RlZmluZSBDT01fVUxQRF9QTExfQ0xLX1JFUQkxCS8qIEluIENPTV9DTEtfRElWX0NUUkxfU0VMICovCiAjZGVmaW5lIFNXRF9DTEtfRElWX0NUUkxfU0VMCTB4ZmZmZTA4NzQKICNkZWZpbmUgQ09NX0NMS19ESVZfQ1RSTF9TRUwJMHhmZmZlMDg3OAotCisjZGVmaW5lIFNPRlRfUkVRX1JFRwkJMHhmZmZlMDgzNAorI2RlZmluZSBTT0ZUX1JFUV9SRUcyCQkweGZmZmUwODgwCiAKIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTk2N2E4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisgKgorICogQ29kZSBjb21tb24gdG8gYWxsIE9NQVAgbWFjaGluZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworI2RlZmluZSBOT19MRU5HVEhfQ0hFQ0sgMHhmZmZmZmZmZgorCitleHRlcm4gaW50IG9tYXBfYm9vdGxvYWRlcl90YWdfbGVuOworZXh0ZXJuIHU4IG9tYXBfYm9vdGxvYWRlcl90YWdbXTsKKworc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCAqb21hcF9ib2FyZF9jb25maWc7CitpbnQgb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IDA7CisKK3N0YXRpYyBjb25zdCB2b2lkICpnZXRfY29uZmlnKHUxNiB0YWcsIHNpemVfdCBsZW4sIGludCBza2lwLCBzaXplX3QgKmxlbl9vdXQpCit7CisJc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCAqa2luZm8gPSBOVUxMOworCWludCBpOworCisjaWZkZWYgQ09ORklHX09NQVBfQk9PVF9UQUcKKwlzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfZW50cnkgKmluZm8gPSBOVUxMOworCisJaWYgKG9tYXBfYm9vdGxvYWRlcl90YWdfbGVuID4gNCkKKwkJaW5mbyA9IChzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfZW50cnkgKikgb21hcF9ib290bG9hZGVyX3RhZzsKKwl3aGlsZSAoaW5mbyAhPSBOVUxMKSB7CisJCXU4ICpuZXh0OworCisJCWlmIChpbmZvLT50YWcgPT0gdGFnKSB7CisJCQlpZiAoc2tpcCA9PSAwKQorCQkJCWJyZWFrOworCQkJc2tpcC0tOworCQl9CisKKwkJaWYgKChpbmZvLT5sZW4gJiAweDAzKSAhPSAwKSB7CisJCQkvKiBXZSBiYWlsIG91dCB0byBhdm9pZCBhbiBhbGlnbm1lbnQgZmF1bHQgKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiT01BUCBwZXJpcGhlcmFsIGNvbmZpZzogTGVuZ3RoICglZCkgbm90IHdvcmQtYWxpZ25lZCAodGFnICUwNHgpXG4iLAorCQkJICAgICAgIGluZm8tPmxlbiwgaW5mby0+dGFnKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCW5leHQgPSAodTggKikgaW5mbyArIHNpemVvZigqaW5mbykgKyBpbmZvLT5sZW47CisJCWlmIChuZXh0ID49IG9tYXBfYm9vdGxvYWRlcl90YWcgKyBvbWFwX2Jvb3Rsb2FkZXJfdGFnX2xlbikKKwkJCWluZm8gPSBOVUxMOworCQllbHNlCisJCQlpbmZvID0gKHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19lbnRyeSAqKSBuZXh0OworCX0KKwlpZiAoaW5mbyAhPSBOVUxMKSB7CisJCS8qIENoZWNrIHRoZSBsZW5ndGggYXMgYSBsYW1lIGF0dGVtcHQgdG8gY2hlY2sgZm9yCisJCSAqIGJpbmFyeSBpbmNvbnNpc3RhbmN5LiAqLworCQlpZiAobGVuICE9IE5PX0xFTkdUSF9DSEVDSykgeworCQkJLyogV29yZC1hbGlnbiBsZW4gKi8KKwkJCWlmIChsZW4gJiAweDAzKQorCQkJCWxlbiA9IChsZW4gKyAzKSAmIH4weDAzOworCQkJaWYgKGluZm8tPmxlbiAhPSBsZW4pIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIk9NQVAgcGVyaXBoZXJhbCBjb25maWc6IExlbmd0aCBtaXNtYXRjaCB3aXRoIHRhZyAleCAod2FudCAlZCwgZ290ICVkKVxuIiwKKwkJCQkgICAgICAgdGFnLCBsZW4sIGluZm8tPmxlbik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKGxlbl9vdXQgIT0gTlVMTCkKKwkJCSpsZW5fb3V0ID0gaW5mby0+bGVuOworCQlyZXR1cm4gaW5mby0+ZGF0YTsKKwl9CisjZW5kaWYKKwkvKiBUcnkgdG8gZmluZCB0aGUgY29uZmlnIGZyb20gdGhlIGJvYXJkLXNwZWNpZmljIHN0cnVjdHVyZXMKKwkgKiBpbiB0aGUga2VybmVsLiAqLworCWZvciAoaSA9IDA7IGkgPCBvbWFwX2JvYXJkX2NvbmZpZ19zaXplOyBpKyspIHsKKwkJaWYgKG9tYXBfYm9hcmRfY29uZmlnW2ldLnRhZyA9PSB0YWcpIHsKKwkJCWtpbmZvID0gJm9tYXBfYm9hcmRfY29uZmlnW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGtpbmZvID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXJldHVybiBraW5mby0+ZGF0YTsKK30KKworY29uc3Qgdm9pZCAqX19vbWFwX2dldF9jb25maWcodTE2IHRhZywgc2l6ZV90IGxlbiwgaW50IG5yKQoreworICAgICAgICByZXR1cm4gZ2V0X2NvbmZpZyh0YWcsIGxlbiwgbnIsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTChfX29tYXBfZ2V0X2NvbmZpZyk7CisKK2NvbnN0IHZvaWQgKm9tYXBfZ2V0X3Zhcl9jb25maWcodTE2IHRhZywgc2l6ZV90ICpsZW4pCit7CisgICAgICAgIHJldHVybiBnZXRfY29uZmlnKHRhZywgTk9fTEVOR1RIX0NIRUNLLCAwLCBsZW4pOworfQorRVhQT1JUX1NZTUJPTChvbWFwX2dldF92YXJfY29uZmlnKTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9hZGRfc2VyaWFsX2NvbnNvbGUodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcgKmluZm87CisKKwlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1NFUklBTF9DT05TT0xFLAorCQkJICAgICAgIHN0cnVjdCBvbWFwX3NlcmlhbF9jb25zb2xlX2NvbmZpZyk7CisJaWYgKGluZm8gIT0gTlVMTCAmJiBpbmZvLT5jb25zb2xlX3VhcnQpIHsKKwkJc3RhdGljIGNoYXIgc3BlZWRbMTFdLCAqb3B0ID0gTlVMTDsKKworCQlpZiAoaW5mby0+Y29uc29sZV9zcGVlZCkgeworCQkJc25wcmludGYoc3BlZWQsIHNpemVvZihzcGVlZCksICIldSIsIGluZm8tPmNvbnNvbGVfc3BlZWQpOworCQkJb3B0ID0gc3BlZWQ7CisJCX0KKwkJcmV0dXJuIGFkZF9wcmVmZXJyZWRfY29uc29sZSgidHR5UyIsIGluZm8tPmNvbnNvbGVfdWFydCAtIDEsIG9wdCk7CisJfQorCXJldHVybiAwOworfQorY29uc29sZV9pbml0Y2FsbChvbWFwX2FkZF9zZXJpYWxfY29uc29sZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOWFhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYwpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYworICoKKyAqICBDUFUgZnJlcXVlbmN5IHNjYWxpbmcgZm9yIE9NQVAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICoKKyAqICBCYXNlZCBvbiBjcHUtc2ExMTEwLmMsIENvcHlyaWdodCAoQykgMjAwMSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisKKy8qIFRPRE86IEFkZCBzdXBwb3J0IGZvciBTRFJBTSB0aW1pbmcgY2hhbmdlcyAqLworCitpbnQgb21hcF92ZXJpZnlfc3BlZWQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJc3RydWN0IGNsayAqIG1wdV9jbGs7CisKKwlpZiAocG9saWN5LT5jcHUpCisJCXJldHVybiAtRUlOVkFMOworCisJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSwKKwkJCQkgICAgIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSk7CisJbXB1X2NsayA9IGNsa19nZXQoTlVMTCwgIm1wdSIpOworCWlmIChJU19FUlIobXB1X2NsaykpCisJCXJldHVybiBQVFJfRVJSKG1wdV9jbGspOworCXBvbGljeS0+bWluID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgcG9saWN5LT5taW4gKiAxMDAwKSAvIDEwMDA7CisJcG9saWN5LT5tYXggPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLCBwb2xpY3ktPm1heCAqIDEwMDApIC8gMTAwMDsKKwljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLAorCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKKwljbGtfcHV0KG1wdV9jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBvbWFwX2dldHNwZWVkKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGNsayAqIG1wdV9jbGs7CisJdW5zaWduZWQgbG9uZyByYXRlOworCisJaWYgKGNwdSkKKwkJcmV0dXJuIDA7CisKKwltcHVfY2xrID0gY2xrX2dldChOVUxMLCAibXB1Iik7CisJaWYgKElTX0VSUihtcHVfY2xrKSkKKwkJcmV0dXJuIDA7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShtcHVfY2xrKSAvIDEwMDA7CisJY2xrX3B1dChtcHVfY2xrKTsKKworCXJldHVybiByYXRlOworfQorCitzdGF0aWMgaW50IG9tYXBfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkgICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAorCQkgICAgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQoreworCXN0cnVjdCBjbGsgKiBtcHVfY2xrOworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOworCWludCByZXQgPSAwOworCisJbXB1X2NsayA9IGNsa19nZXQoTlVMTCwgIm1wdSIpOworCWlmIChJU19FUlIobXB1X2NsaykpCisJCXJldHVybiBQVFJfRVJSKG1wdV9jbGspOworCisJZnJlcXMub2xkID0gb21hcF9nZXRzcGVlZCgwKTsKKwlmcmVxcy5uZXcgPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLCB0YXJnZXRfZnJlcSAqIDEwMDApIC8gMTAwMDsKKwlmcmVxcy5jcHUgPSAwOworCisJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKKwlyZXQgPSBjbGtfc2V0X3JhdGUobXB1X2NsaywgdGFyZ2V0X2ZyZXEgKiAxMDAwKTsKKwljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKKwljbGtfcHV0KG1wdV9jbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2luaXQgb21hcF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlzdHJ1Y3QgY2xrICogbXB1X2NsazsKKworCW1wdV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJtcHUiKTsKKwlpZiAoSVNfRVJSKG1wdV9jbGspKQorCQlyZXR1cm4gUFRSX0VSUihtcHVfY2xrKTsKKworCWlmIChwb2xpY3ktPmNwdSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwb2xpY3ktPmN1ciA9IHBvbGljeS0+bWluID0gcG9saWN5LT5tYXggPSBvbWFwX2dldHNwZWVkKDApOworCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgMCkgLyAxMDAwOworCXBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9IGNsa19yb3VuZF9yYXRlKG1wdV9jbGssIDIxNjAwMDAwMCkgLyAxMDAwOworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CisJY2xrX3B1dChtcHVfY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIG9tYXBfZHJpdmVyID0geworCS5mbGFncwkJPSBDUFVGUkVRX1NUSUNLWSwKKwkudmVyaWZ5CQk9IG9tYXBfdmVyaWZ5X3NwZWVkLAorCS50YXJnZXQJCT0gb21hcF90YXJnZXQsCisJLmdldAkJPSBvbWFwX2dldHNwZWVkLAorCS5pbml0CQk9IG9tYXBfY3B1X2luaXQsCisJLm5hbWUJCT0gIm9tYXAiLAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9jcHVmcmVxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJm9tYXBfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChvbWFwX2NwdWZyZXFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2RtYS5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggN2E5ZWJlOC4uYzBhNWMyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9vbWFwL2RtYS5jCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTm9raWEgQ29ycG9yYXRpb24KICAqIEF1dGhvcjogSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KQEAgLTc5NCwxMCArNzk0LDYgQEAKIAl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NUUkwpOwogCS8qIEFsd2F5cyBzZXQgdGhlIHNvdXJjZSBwb3J0IGFzIFNEUkFNIGZvciBub3cqLwogCXcgJj0gfigweDAzIDw8IDYpOwotCWlmIChsY2RfZG1hLmV4dF9jdHJsKQotCQl3IHw9IDEgPDwgODsKLQllbHNlCi0JCXcgJj0gfigxIDw8IDgpOwogCWlmIChsY2RfZG1hLmNhbGxiYWNrICE9IE5VTEwpCiAJCXcgfD0gMSA8PCAxOyAgICAgICAgICAgIC8qIEJsb2NrIGludGVycnVwdCBlbmFibGUgKi8KIAllbHNlCkBAIC04ODksOSArODg1LDE1IEBACiAJICovCiAJaWYgKGVuYWJsZV8xNTEwX21vZGUgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCiAJCXJldHVybjsKKworCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CisJdyB8PSAxIDw8IDg7CisJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKKwogCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKIAl3IHw9IDEgPDwgNzsKIAlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NDUik7CisKIAlsY2RfZG1hLmFjdGl2ZSA9IDE7CiB9CiAKQEAgLTkyMiwxMCArOTI0LDE5IEBACiAKIHZvaWQgb21hcF9zdG9wX2xjZF9kbWEodm9pZCkKIHsKKwl1MTYgdzsKKwogCWxjZF9kbWEuYWN0aXZlID0gMDsKLQlpZiAoIWVuYWJsZV8xNTEwX21vZGUgJiYgbGNkX2RtYS5leHRfY3RybCkKLQkJb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiB+KDEgPDwgNyksCi0JCQkgICAgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOworCWlmIChlbmFibGVfMTUxMF9tb2RlIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQorCQlyZXR1cm47CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7CisJdyAmPSB+KDEgPDwgNyk7CisJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOworCisJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKKwl3ICY9IH4oMSA8PCA4KTsKKwlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NUUkwpOwogfQogCiAvKgpAQCAtOTcyLDYgKzk4MywyNSBAQAogCQkJICAgICAoT01BUF9ETUFfQ0RTQV9VKGxjaCkgPDwgMTYpKTsKIH0KIAoraW50IG9tYXBfZG1hX3J1bm5pbmcodm9pZCkKK3sKKwlpbnQgbGNoOworCisJLyogQ2hlY2sgaWYgTENEIERNQSBpcyBydW5uaW5nICovCisJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlpZiAob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiBPTUFQX0RNQV9DQ1JfRU4pCisJCQlyZXR1cm4gMTsKKworCWZvciAobGNoID0gMDsgbGNoIDwgZG1hX2NoYW5fY291bnQ7IGxjaCsrKSB7CisJCXUxNiB3OworCisJCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKKwkJaWYgKHcgJiBPTUFQX0RNQV9DQ1JfRU4pCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9kbWEodm9pZCkKIHsKIAlpbnQgY2gsIHI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvZ3Bpby5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IDkwNDVkZmQuLjFjODViNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2dwaW8uYworICogIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKICAqCiAgKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgT01BUCBHUElPCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvbWNic3AuYwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKaW5kZXggN2M0YWQ3Ny4uNDM1NjdkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vb21hcC9tY2JzcC5jCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBDb3Jwb3JhdGlvbgogICogQXV0aG9yOiBTYW11ZWwgT3J0aXogPHNhbXVlbC5vcnRpekBub2tpYS5jb20+CkBAIC02Niw2ICs2Niw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3AgbWNic3BbT01BUF9NQVhfTUNCU1BfQ09VTlRdOwogc3RhdGljIHN0cnVjdCBjbGsgKm1jYnNwX2RzcF9jayA9IDA7CiBzdGF0aWMgc3RydWN0IGNsayAqbWNic3BfYXBpX2NrID0gMDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICptY2JzcF9kc3B4b3JfY2sgPSAwOwogCiAKIHN0YXRpYyB2b2lkIG9tYXBfbWNic3BfZHVtcF9yZWcodTggaWQpCkBAIC0xNzUsNyArMTc2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8IGNwdV9pc19vbWFwMTYxMCgpIHx8IGNwdV9pc19vbWFwMTcxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8IGNwdV9pc19vbWFwMTZ4eCgpKSB7CiAJCWlmIChpZCA+IE9NQVBfTUFYX01DQlNQX0NPVU5UKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgZG9lc24ndCBleGlzdFxuIiwgaWQgKyAxKTsKIAkJCXJldHVybiAtMTsKQEAgLTE5MSwxNSArMTkyLDEyIEBACiAKIHN0YXRpYyB2b2lkIG9tYXBfbWNic3BfZHNwX3JlcXVlc3Qodm9pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkgfHwgY3B1X2lzX29tYXAxNjEwKCkgfHwgY3B1X2lzX29tYXAxNzEwKCkpIHsKLQkJb21hcF93cml0ZXcoKG9tYXBfcmVhZHcoQVJNX1JTVENUMSkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKLQkJCSAgICBBUk1fUlNUQ1QxKTsKLQkJY2xrX2VuYWJsZShtY2JzcF9kc3BfY2spOwotCQljbGtfZW5hYmxlKG1jYnNwX2FwaV9jayk7CisJaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8IGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCWNsa191c2UobWNic3BfZHNwX2NrKTsKKwkJY2xrX3VzZShtY2JzcF9hcGlfY2spOwogCiAJCS8qIGVuYWJsZSAxMk1IeiBjbG9jayB0byBtY2JzcCAxICYgMyAqLwotCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoRFNQX0lETEVDVDIpIHwgKDEgPDwgRU5fWE9SUENLKSwKLQkJCSAgICAgRFNQX0lETEVDVDIpOworCQljbGtfdXNlKG1jYnNwX2RzcHhvcl9jayk7CiAJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhEU1BfUlNUQ1QyKSB8IDEgfCAxIDw8IDEsCiAJCQkgICAgIERTUF9SU1RDVDIpOwogCX0KQEAgLTIwNywxMCArMjA1LDEzIEBACiAKIHN0YXRpYyB2b2lkIG9tYXBfbWNic3BfZHNwX2ZyZWUodm9pZCkKIHsKLQkvKiBVc2VsZXNzIGZvciBub3cgKi8KKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkgfHwgY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJY2xrX3VudXNlKG1jYnNwX2RzcHhvcl9jayk7CisJCWNsa191bnVzZShtY2JzcF9kc3BfY2spOworCQljbGtfdW51c2UobWNic3BfYXBpX2NrKTsKKwl9CiB9CiAKLQogaW50IG9tYXBfbWNic3BfcmVxdWVzdCh1bnNpZ25lZCBpbnQgaWQpCiB7CiAJaW50IGVycjsKQEAgLTM1MCw2ICszNTEsNzMgQEAKIH0KIAogCisvKiBwb2xsZWQgbWNic3AgaS9vIG9wZXJhdGlvbnMgKi8KK2ludCBvbWFwX21jYnNwX3BvbGx3cml0ZSh1bnNpZ25lZCBpbnQgaWQsIHUxNiBidWYpCit7CisJdTMyIGJhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKKwl3cml0ZXcoYnVmLCBiYXNlICsgT01BUF9NQ0JTUF9SRUdfRFhSMSk7CisJLyogaWYgZnJhbWUgc3luYyBlcnJvciAtIGNsZWFyIHRoZSBlcnJvciAqLworCWlmIChyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpICYgWFNZTkNfRVJSKSB7CisJCS8qIGNsZWFyIGVycm9yICovCisJCXdyaXRldyhyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpICYgKH5YU1lOQ19FUlIpLAorCQkgICAgICAgYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IyKTsKKwkJLyogcmVzZW5kICovCisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQkvKiB3YWl0IGZvciB0cmFuc21pdCBjb25maXJtYXRpb24gKi8KKwkJaW50IGF0dGVtcHMgPSAwOworCQl3aGlsZSAoIShyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpICYgWFJEWSkpIHsKKwkJCWlmIChhdHRlbXBzKysgPiAxMDAwKSB7CisJCQkJd3JpdGV3KHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMikgJgorCQkJCSAgICAgICAoflhSU1QpLAorCQkJCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpOworCQkJCXVkZWxheSgxMCk7CisJCQkJd3JpdGV3KHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMikgfAorCQkJCSAgICAgICAoWFJTVCksCisJCQkJICAgICAgIGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMik7CisJCQkJdWRlbGF5KDEwKTsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiBDb3VsZCBub3Qgd3JpdGUgdG8gTWNCU1AgUmVnaXN0ZXJcbiIpOworCQkJCXJldHVybiAtMjsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG9tYXBfbWNic3BfcG9sbHJlYWQodW5zaWduZWQgaW50IGlkLCB1MTYgKiBidWYpCit7CisJdTMyIGJhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKKwkvKiBpZiBmcmFtZSBzeW5jIGVycm9yIC0gY2xlYXIgdGhlIGVycm9yICovCisJaWYgKHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSkgJiBSU1lOQ19FUlIpIHsKKwkJLyogY2xlYXIgZXJyb3IgKi8KKwkJd3JpdGV3KHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSkgJiAoflJTWU5DX0VSUiksCisJCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpOworCQkvKiByZXNlbmQgKi8KKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCS8qIHdhaXQgZm9yIHJlY2lldmUgY29uZmlybWF0aW9uICovCisJCWludCBhdHRlbXBzID0gMDsKKwkJd2hpbGUgKCEocmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IxKSAmIFJSRFkpKSB7CisJCQlpZiAoYXR0ZW1wcysrID4gMTAwMCkgeworCQkJCXdyaXRldyhyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpICYKKwkJCQkgICAgICAgKH5SUlNUKSwKKwkJCQkgICAgICAgYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IxKTsKKwkJCQl1ZGVsYXkoMTApOworCQkJCXdyaXRldyhyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpIHwKKwkJCQkgICAgICAgKFJSU1QpLAorCQkJCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpOworCQkJCXVkZWxheSgxMCk7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIgQ291bGQgbm90IHJlYWQgZnJvbSBNY0JTUCBSZWdpc3RlclxuIik7CisJCQkJcmV0dXJuIC0yOworCQkJfQorCQl9CisJfQorCSpidWYgPSByZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfRFJSMSk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBJUlEgYmFzZWQgd29yZCB0cmFuc21pc3Npb24uCiAgKi8KQEAgLTYyNSwxMCArNjkzLDE1IEBACiAJCXJldHVybiBQVFJfRVJSKG1jYnNwX2RzcF9jayk7CiAJfQogCW1jYnNwX2FwaV9jayA9IGNsa19nZXQoMCwgImFwaV9jayIpOwotCWlmIChJU19FUlIobWNic3BfZHNwX2NrKSkgeworCWlmIChJU19FUlIobWNic3BfYXBpX2NrKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBhcGlfY2sgaGFuZGxlLlxuIik7CiAJCXJldHVybiBQVFJfRVJSKG1jYnNwX2FwaV9jayk7CiAJfQorCW1jYnNwX2RzcHhvcl9jayA9IGNsa19nZXQoMCwgImRzcHhvcl9jayIpOworCWlmIChJU19FUlIobWNic3BfZHNweG9yX2NrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBkc3B4b3JfY2sgaGFuZGxlLlxuIik7CisJCXJldHVybiBQVFJfRVJSKG1jYnNwX2RzcHhvcl9jayk7CisJfQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAogCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CkBAIC02NDMsNyArNzE2LDcgQEAKIAl9CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQotCWlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgewogCQltY2JzcF9pbmZvID0gbWNic3BfMTYxMDsKIAkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzE2MTApOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9tdXguYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYwpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvbXV4LmMKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtb21hcC9tdXguYwppbmRleCBiY2YzYzZlLi5lYTdiOTU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAvbXV4LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9tdXguYworICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCiAgKgogICogVXRpbGl0eSB0byBzZXQgdGhlIE9tYXAgTVVYIGFuZCBQVUxMX0RXTiByZWdpc3RlcnMgZnJvbSBhIHRhYmxlIGluIG11eC5oCiAgKgpAQCAtNTMsMTkgKzUzLDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNmZyA9ICZyZWdfY2ZnX3RhYmxlW3JlZ19jZmddOwotCi0JLyoKLQkgKiBXZSBkbyBhIHByZXR0eSBsb25nIHNlY3Rpb24gaGVyZSB3aXRoIGxvY2sgb24sIGJ1dCBwaW4gbXV4aW5nCi0JICogc2hvdWxkIG9ubHkgaGFwcGVuIG9uIGRyaXZlciBpbml0IGZvciBlYWNoIGRyaXZlciwgc28gaXQncyBub3QgdGltZQotCSAqIGNyaXRpY2FsLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7CisJY2ZnID0gKHJlZ19jZmdfc2V0ICopJnJlZ19jZmdfdGFibGVbcmVnX2NmZ107CiAKIAkvKiBDaGVjayB0aGUgbXV4IHJlZ2lzdGVyIGluIHF1ZXN0aW9uICovCiAJaWYgKGNmZy0+bXV4X3JlZykgewogCQl1bnNpZ25lZAl0bXAxLCB0bXAyOwogCisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7CiAJCXJlZ19vcmlnID0gb21hcF9yZWFkbChjZmctPm11eF9yZWcpOwogCiAJCS8qIFRoZSBtdXggcmVnaXN0ZXJzIGFsd2F5cyBzZWVtIHRvIGJlIDMgYml0cyBsb25nICovCkBAIC04MCwxMSArNzQsMTMgQEAKIAkJCXdhcm4gPSAxOwogCiAJCW9tYXBfd3JpdGVsKHJlZywgY2ZnLT5tdXhfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwogCX0KIAogCS8qIENoZWNrIGZvciBwdWxsIHVwIG9yIHB1bGwgZG93biBzZWxlY3Rpb24gb24gMTYxMCAqLwogCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJaWYgKGNmZy0+cHVfcGRfcmVnICYmIGNmZy0+cHVsbF92YWwpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7CiAJCQlwdV9wZF9vcmlnID0gb21hcF9yZWFkbChjZmctPnB1X3BkX3JlZyk7CiAJCQltYXNrID0gMSA8PCBjZmctPnB1bGxfYml0OwogCkBAIC0xMDAsMTEgKzk2LDEzIEBACiAJCQkJcHVfcGQgPSBwdV9wZF9vcmlnICYgfm1hc2s7CiAJCQl9CiAJCQlvbWFwX3dyaXRlbChwdV9wZCwgY2ZnLT5wdV9wZF9yZWcpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwogCQl9CiAJfQogCiAJLyogQ2hlY2sgZm9yIGFuIGFzc29jaWF0ZWQgcHVsbCBkb3duIHJlZ2lzdGVyICovCiAJaWYgKGNmZy0+cHVsbF9yZWcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm11eF9zcGluX2xvY2ssIGZsYWdzKTsKIAkJcHVsbF9vcmlnID0gb21hcF9yZWFkbChjZmctPnB1bGxfcmVnKTsKIAkJbWFzayA9IDEgPDwgY2ZnLT5wdWxsX2JpdDsKIApAQCAtMTIxLDYgKzExOSw3IEBACiAJCX0KIAogCQlvbWFwX3dyaXRlbChwdWxsLCBjZmctPnB1bGxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwogCX0KIAogCWlmICh3YXJuKSB7CkBAIC0xNDksOCArMTQ4LDYgQEAKIAl9CiAjZW5kaWYKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11eF9zcGluX2xvY2ssIGZsYWdzKTsKLQogI2lmZGVmIENPTkZJR19PTUFQX01VWF9FUlJPUlMKIAlyZXR1cm4gd2FybiA/IC1FVFhUQlNZIDogMDsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvb2NwaS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvb2NwaS5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LW9tYXAvb2NwaS5jCmluZGV4IGM5Y2VkMTMuLjFmYjE2ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9vY3BpLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvb2NwaS5jCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvb2NwaS5jCiAgKgogICogTWluaW1hbCBPQ1AgYnVzIHN1cHBvcnQgZm9yIG9tYXAxNnh4CiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL3BtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvcG0uYwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMKaW5kZXggNmIwM2NjZC4uZTY1MzZiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwL3BtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL3BtLmMKKyAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCiAgKgogICogT01BUCBQb3dlciBNYW5hZ2VtZW50IFJvdXRpbmVzCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwL3NsZWVwLlMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAvc2xlZXAuUwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKaW5kZXggNGQ0MjZkMS4uMjc5NDkwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL3NsZWVwLlMKKyAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9zbGVlcC5TCiAgKgogICogTG93LWxldmVsIE9NQVAxNTEwLzE2MTAgc2xlZXAvd2FrZVVwIHN1cHBvcnQKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAvdXNiLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL3VzYi5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKaW5kZXggZmQ0ODNmZi4uMjViYzRhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwL3VzYi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9tYWNoLW9tYXAvdXNiLmMgLS0gcGxhdGZvcm0gbGV2ZWwgVVNCIGluaXRpYWxpemF0aW9uCisgKiBhcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMgLS0gcGxhdGZvcm0gbGV2ZWwgVVNCIGluaXRpYWxpemF0aW9uCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCiAgKgpAQCAtMzI2LDcgKzMyNiw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG9oY2lfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQJPSBPTUFQX09IQ0lfQkFTRSwKLQkJLmVuZAk9IE9NQVBfT0hDSV9CQVNFICsgNDA5NiwKKwkJLmVuZAk9IE9NQVBfT0hDSV9CQVNFICsgNDA5NiAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvZGVmY29uZmlnIGIvYXJjaC9mcnYvZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZTRjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2Zydi9kZWZjb25maWcKQEAgLTAsMCArMSw2MjcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMS44CisjIEZyaSBNYXkgMTMgMTc6MTY6MDMgMjAwNQorIworQ09ORklHX0ZSVj15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTIGlzIG5vdCBzZXQKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorIyBDT05GSUdfS09CSkVDVF9VRVZFTlQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgRnVqaXRzdSBGUi1WIHN5c3RlbSBzZXR1cAorIworQ09ORklHX01NVT15CitDT05GSUdfRlJWX09VVE9GTElORV9BVE9NSUNfT1BTPXkKK0NPTkZJR19ISUdITUVNPXkKK0NPTkZJR19ISUdIUFRFPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX0ZSVl9ERUZMX0NBQ0hFX1dCQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSVl9ERUZMX0NBQ0hFX1dCRUhJTkQgaXMgbm90IHNldAorQ09ORklHX0ZSVl9ERUZMX0NBQ0hFX1dUSFJVPXkKKyMgQ09ORklHX0ZSVl9ERUZMX0NBQ0hFX0RJU0FCTEVEIGlzIG5vdCBzZXQKKworIworIyBDUFUgY29yZSBzdXBwb3J0CisjCitDT05GSUdfQ1BVX0ZSNDUxPXkKK0NPTkZJR19DUFVfRlI0NTFfQ09NUElMRT15CitDT05GSUdfRlJWX0wxX0NBQ0hFX1NISUZUPTUKK0NPTkZJR19NQjkzMDkxX1ZESz15CisjIENPTkZJR19NQjkzMDkzX1BESyBpcyBub3Qgc2V0CitDT05GSUdfTUI5MzA5MF9NQjAwPXkKKyMgQ09ORklHX01COTMwOTFfTk9fTUIgaXMgbm90IHNldAorIyBDT05GSUdfR1BSRUxfREFUQV84IGlzIG5vdCBzZXQKK0NPTkZJR19HUFJFTF9EQVRBXzQ9eQorIyBDT05GSUdfR1BSRUxfREFUQV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0k9eQorIyBDT05GSUdfUENJX0xFR0FDWV9QUk9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9OQU1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZvcm1hdHMKKyMKKyMgQ09ORklHX0JJTkZNVF9FTEYgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEZfRkRQSUM9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JLX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfS0dEQk9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CitDT05GSUdfTkUyS19QQ0k9eQorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTEKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVI0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgWEZTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfR0RCU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCAyMjAzYTlkLi40NTUzZmZkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtNDM1LDYgKzQzNSwxMSBAQAogCWlmIChjID09ICZib290X2NwdV9kYXRhKQogCQlzeXNlbnRlcl9zZXR1cCgpOwogCWVuYWJsZV9zZXBfY3B1KCk7CisKKwlpZiAoYyA9PSAmYm9vdF9jcHVfZGF0YSkKKwkJbXRycl9icF9pbml0KCk7CisJZWxzZQorCQltdHJyX2FwX2luaXQoKTsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfSFQKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDk2YTc1ZDAuLmEyYzMzYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtMjUsNyArMjUsNyBAQAogLyoKICAqIEFsaWdubWVudCBhdCB3aGljaCBtb3ZzbCBpcyBwcmVmZXJyZWQgZm9yIGJ1bGsgbWVtb3J5IGNvcGllcy4KICAqLwotc3RydWN0IG1vdnNsX21hc2sgbW92c2xfbWFzazsKK3N0cnVjdCBtb3ZzbF9tYXNrIG1vdnNsX21hc2sgX19yZWFkX21vc3RseTsKICNlbmRpZgogCiB2b2lkIF9fZGV2aW5pdCBlYXJseV9pbnRlbF93b3JrYXJvdW5kKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKaW5kZXggNjRkOTFmNy4uMTY5YWM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKQEAgLTY3LDEzICs2Nyw2IEBACiAJbXRycl9zdGF0ZS5lbmFibGVkID0gKGxvICYgMHhjMDApID4+IDEwOwogfQogCi0vKiAgRnJlZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgc3RydWN0IG10cnJfc3RhdGUgICovCi12b2lkIF9faW5pdCBmaW5hbGl6ZV9tdHJyX3N0YXRlKHZvaWQpCi17Ci0Ja2ZyZWUobXRycl9zdGF0ZS52YXJfcmFuZ2VzKTsKLQltdHJyX3N0YXRlLnZhcl9yYW5nZXMgPSBOVUxMOwotfQotCiAvKiAgU29tZSBCSU9TJ3MgYXJlIGZ1Y2tlZCBhbmQgZG9uJ3Qgc2V0IGFsbCBNVFJScyB0aGUgc2FtZSEgICovCiB2b2lkIF9faW5pdCBtdHJyX3N0YXRlX3dhcm4odm9pZCkKIHsKQEAgLTMzNCw2ICszMjcsOSBAQAogKi8KIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdnI7CisKKwl2ciA9ICZtdHJyX3N0YXRlLnZhcl9yYW5nZXNbcmVnXTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwcmVwYXJlX3NldCgpOwpAQCAtMzQyLDExICszMzgsMTUgQEAKIAkJLyogVGhlIGludmFsaWQgYml0IGlzIGtlcHQgaW4gdGhlIG1hc2ssIHNvIHdlIHNpbXBseSBjbGVhciB0aGUKIAkJICAgcmVsZXZhbnQgbWFzayByZWdpc3RlciB0byBkaXNhYmxlIGEgcmFuZ2UuICovCiAJCW10cnJfd3Jtc3IoTVRSUnBoeXNNYXNrX01TUihyZWcpLCAwLCAwKTsKKwkJbWVtc2V0KHZyLCAwLCBzaXplb2Yoc3RydWN0IG10cnJfdmFyX3JhbmdlKSk7CiAJfSBlbHNlIHsKLQkJbXRycl93cm1zcihNVFJScGh5c0Jhc2VfTVNSKHJlZyksIGJhc2UgPDwgUEFHRV9TSElGVCB8IHR5cGUsCi0JCSAgICAgIChiYXNlICYgc2l6ZV9hbmRfbWFzaykgPj4gKDMyIC0gUEFHRV9TSElGVCkpOwotCQltdHJyX3dybXNyKE1UUlJwaHlzTWFza19NU1IocmVnKSwgLXNpemUgPDwgUEFHRV9TSElGVCB8IDB4ODAwLAotCQkgICAgICAoLXNpemUgJiBzaXplX2FuZF9tYXNrKSA+PiAoMzIgLSBQQUdFX1NISUZUKSk7CisJCXZyLT5iYXNlX2xvID0gYmFzZSA8PCBQQUdFX1NISUZUIHwgdHlwZTsKKwkJdnItPmJhc2VfaGkgPSAoYmFzZSAmIHNpemVfYW5kX21hc2spID4+ICgzMiAtIFBBR0VfU0hJRlQpOworCQl2ci0+bWFza19sbyA9IC1zaXplIDw8IFBBR0VfU0hJRlQgfCAweDgwMDsKKwkJdnItPm1hc2tfaGkgPSAoLXNpemUgJiBzaXplX2FuZF9tYXNrKSA+PiAoMzIgLSBQQUdFX1NISUZUKTsKKworCQltdHJyX3dybXNyKE1UUlJwaHlzQmFzZV9NU1IocmVnKSwgdnItPmJhc2VfbG8sIHZyLT5iYXNlX2hpKTsKKwkJbXRycl93cm1zcihNVFJScGh5c01hc2tfTVNSKHJlZyksIHZyLT5tYXNrX2xvLCB2ci0+bWFza19oaSk7CiAJfQogCiAJcG9zdF9zZXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKaW5kZXggZDY2YjA5ZS4uNzY0Y2FjNiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTMzMiw2ICszMzIsOCBAQAogCiAJZXJyb3IgPSAtRUlOVkFMOwogCisJLyogTm8gQ1BVIGhvdHBsdWcgd2hlbiB3ZSBjaGFuZ2UgTVRSUiBlbnRyaWVzICovCisJbG9ja19jcHVfaG90cGx1ZygpOwogCS8qICBTZWFyY2ggZm9yIGV4aXN0aW5nIE1UUlIgICovCiAJZG93bigmbWFpbl9sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7ICsraSkgewpAQCAtMzcyLDYgKzM3NCw3IEBACiAJZXJyb3IgPSBpOwogIG91dDoKIAl1cCgmbWFpbl9sb2NrKTsKKwl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTQ2MSw2ICs0NjQsOCBAQAogCQlyZXR1cm4gLUVOWElPOwogCiAJbWF4ID0gbnVtX3Zhcl9yYW5nZXM7CisJLyogTm8gQ1BVIGhvdHBsdWcgd2hlbiB3ZSBjaGFuZ2UgTVRSUiBlbnRyaWVzICovCisJbG9ja19jcHVfaG90cGx1ZygpOwogCWRvd24oJm1haW5fbG9jayk7CiAJaWYgKHJlZyA8IDApIHsKIAkJLyogIFNlYXJjaCBmb3IgZXhpc3RpbmcgTVRSUiAgKi8KQEAgLTUwMSw2ICs1MDYsNyBAQAogCWVycm9yID0gcmVnOwogIG91dDoKIAl1cCgmbWFpbl9sb2NrKTsKKwl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAvKioKQEAgLTU0NCwyMSArNTUwLDkgQEAKIAljZW50YXVyX2luaXRfbXRycigpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9vdGhlcl9jcHVzKHZvaWQpCi17Ci0JaWYgKHVzZV9pbnRlbCgpKQotCQlnZXRfbXRycl9zdGF0ZSgpOwotCi0JLyogYnJpbmcgdXAgdGhlIG90aGVyIHByb2Nlc3NvcnMgKi8KLQlzZXRfbXRycih+MFUsMCwwLDApOwotCi0JaWYgKHVzZV9pbnRlbCgpKSB7Ci0JCWZpbmFsaXplX210cnJfc3RhdGUoKTsKLQkJbXRycl9zdGF0ZV93YXJuKCk7Ci0JfQotfQotCi0KKy8qIFRoZSBzdXNwZW5kL3Jlc3VtZSBtZXRob2RzIGFyZSBvbmx5IGZvciBDUFUgd2l0aG91dCBNVFJSLiBDUFUgdXNpbmcgZ2VuZXJpYworICogTVRSUiBkcml2ZXIgZG9lc24ndCByZXF1aXJlIHRoaXMKKyAqLwogc3RydWN0IG10cnJfdmFsdWUgewogCW10cnJfdHlwZQlsdHlwZTsKIAl1bnNpZ25lZCBsb25nCWxiYXNlOwpAQCAtNjExLDEzICs2MDUsMTMgQEAKIAogCiAvKioKLSAqIG10cnJfaW5pdCAtIGluaXRpYWxpemUgbXRycnMgb24gdGhlIGJvb3QgQ1BVCisgKiBtdHJyX2JwX2luaXQgLSBpbml0aWFsaXplIG10cnJzIG9uIHRoZSBib290IENQVQogICoKICAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5OyBiZWZvcmUgYW55IG9mIHRoZSBvdGhlciBDUFVzIGFyZSAKICAqIGluaXRpYWxpemVkIChpLmUuIGJlZm9yZSBzbXBfaW5pdCgpKS4KICAqIAogICovCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IG10cnJfYnBfaW5pdCh2b2lkKQogewogCWluaXRfaWZzKCk7CiAKQEAgLTY3NCwxMiArNjY4LDQ4IEBACiAJaWYgKG10cnJfaWYpIHsKIAkJc2V0X251bV92YXJfcmFuZ2VzKCk7CiAJCWluaXRfdGFibGUoKTsKLQkJaW5pdF9vdGhlcl9jcHVzKCk7Ci0KLQkJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsCi0JCQkJCSAgICAgICZtdHJyX3N5c2Rldl9kcml2ZXIpOworCQlpZiAodXNlX2ludGVsKCkpCisJCQlnZXRfbXRycl9zdGF0ZSgpOwogCX0KLQlyZXR1cm4gLUVOWElPOwogfQogCi1zdWJzeXNfaW5pdGNhbGwobXRycl9pbml0KTsKK3ZvaWQgbXRycl9hcF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghbXRycl9pZiB8fCAhdXNlX2ludGVsKCkpCisJCXJldHVybjsKKwkvKgorCSAqIElkZWFsbHkgd2Ugc2hvdWxkIGhvbGQgbWFpbl9sb2NrIGhlcmUgdG8gYXZvaWQgbXRyciBlbnRyaWVzIGNoYW5nZWQsCisJICogYnV0IHRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCBpbiBjcHUgYm9vdCB0aW1lLCBob2xkaW5nIHRoZSBsb2NrCisJICogYnJlYWtzIGl0LiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGluIHR3byBjYXNlczogMS52ZXJ5IGVhcmlseSB0aW1lCisJICogb2Ygc29mdHdhcmUgcmVzdW1lLCB3aGVuIHRoZXJlIGFic29sdXRlbHkgaXNuJ3QgbXRyciBlbnRyeSBjaGFuZ2VzOworCSAqIDIuY3B1IGhvdGFkZCB0aW1lLiBXZSBsZXQgbXRycl9hZGQvZGVsX3BhZ2UgaG9sZCBjcHVob3RwbHVnIGxvY2sgdG8KKwkgKiBwcmV2ZW50IG10cnIgZW50cnkgY2hhbmdlcworCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCW10cnJfaWYtPnNldF9hbGwoKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbXRycl9pbml0X2ZpbmlhbGl6ZSh2b2lkKQoreworCWlmICghbXRycl9pZikKKwkJcmV0dXJuIDA7CisJaWYgKHVzZV9pbnRlbCgpKQorCQltdHJyX3N0YXRlX3dhcm4oKTsKKwllbHNlIHsKKwkJLyogVGhlIENQVXMgaGF2ZW4ndCBNVFJSIGFuZCBzZWVtZXMgbm90IHN1cHBvcnQgU01QLiBUaGV5IGhhdmUKKwkJICogc3BlY2lmaWMgZHJpdmVycywgd2UgdXNlIGEgdHJpY2t5IG1ldGhvZCB0byBzdXBwb3J0CisJCSAqIHN1c3BlbmQvcmVzdW1lIGZvciB0aGVtLgorCQkgKiBUQkQ6IGlzIHRoZXJlIGFueSBzeXN0ZW0gd2l0aCBzdWNoIENQVSB3aGljaCBzdXBwb3J0cworCQkgKiBzdXNwZW5kL3Jlc3VtZT8gIGlmIG5vLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjb2RlLgorCQkgKi8KKwkJc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywKKwkJCSZtdHJyX3N5c2Rldl9kcml2ZXIpOworCX0KKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbChtdHJyX2luaXRfZmluaWFsaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKaW5kZXggZGUxMzUxMjQuLjk5YzlmMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCkBAIC05MSw3ICs5MSw2IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbnVtX3Zhcl9yYW5nZXM7CiAKLXZvaWQgZmluYWxpemVfbXRycl9zdGF0ZSh2b2lkKTsKIHZvaWQgbXRycl9zdGF0ZV93YXJuKHZvaWQpOwogY2hhciAqbXRycl9hdHRyaWJfdG9fc3RyKGludCB4KTsKIHZvaWQgbXRycl93cm1zcih1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggZDY2YmY0OC4uOGFjOGU5ZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKQEAgLTY4LDIxICs2OCwyMSBAQAogI2VuZGlmCiAKIC8qIFBhY2thZ2UgSUQgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotaW50IHBoeXNfcHJvY19pZFtOUl9DUFVTXSA9IHtbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUR9OworaW50IHBoeXNfcHJvY19pZFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5ID0ge1swIC4uLiBOUl9DUFVTLTFdID0gQkFEX0FQSUNJRH07CiBFWFBPUlRfU1lNQk9MKHBoeXNfcHJvY19pZCk7CiAKIC8qIENvcmUgSUQgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotaW50IGNwdV9jb3JlX2lkW05SX0NQVVNdID0ge1swIC4uLiBOUl9DUFVTLTFdID0gQkFEX0FQSUNJRH07CitpbnQgY3B1X2NvcmVfaWRbTlJfQ1BVU10gX19yZWFkX21vc3RseSA9IHtbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUR9OwogRVhQT1JUX1NZTUJPTChjcHVfY29yZV9pZCk7CiAKLWNwdW1hc2tfdCBjcHVfc2libGluZ19tYXBbTlJfQ1BVU107CitjcHVtYXNrX3QgY3B1X3NpYmxpbmdfbWFwW05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKGNwdV9zaWJsaW5nX21hcCk7CiAKLWNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107CitjcHVtYXNrX3QgY3B1X2NvcmVfbWFwW05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKGNwdV9jb3JlX21hcCk7CiAKIC8qIGJpdG1hcCBvZiBvbmxpbmUgY3B1cyAqLwotY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOworY3B1bWFza190IGNwdV9vbmxpbmVfbWFwIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKGNwdV9vbmxpbmVfbWFwKTsKIAogY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOwpAQCAtMTAwLDcgKzEwMCw3IEBACiBzdHJ1Y3QgY3B1aW5mb194ODYgY3B1X2RhdGFbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKIEVYUE9SVF9TWU1CT0woY3B1X2RhdGEpOwogCi11OCB4ODZfY3B1X3RvX2FwaWNpZFtOUl9DUFVTXSA9Cit1OCB4ODZfY3B1X3RvX2FwaWNpZFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5ID0KIAkJCXsgWzAgLi4uIE5SX0NQVVMtMV0gPSAweGZmIH07CiBFWFBPUlRfU1lNQk9MKHg4Nl9jcHVfdG9fYXBpY2lkKTsKIApAQCAtNTUwLDEwICs1NTAsMTAgQEAKICNpZmRlZiBDT05GSUdfTlVNQQogCiAvKiB3aGljaCBsb2dpY2FsIENQVXMgYXJlIG9uIHdoaWNoIG5vZGVzICovCi1jcHVtYXNrX3Qgbm9kZV8yX2NwdV9tYXNrW01BWF9OVU1OT0RFU10gPQorY3B1bWFza190IG5vZGVfMl9jcHVfbWFza1tNQVhfTlVNTk9ERVNdIF9fcmVhZF9tb3N0bHkgPQogCQkJCXsgWzAgLi4uIE1BWF9OVU1OT0RFUy0xXSA9IENQVV9NQVNLX05PTkUgfTsKIC8qIHdoaWNoIG5vZGUgZWFjaCBsb2dpY2FsIENQVSBpcyBvbiAqLwotaW50IGNwdV8yX25vZGVbTlJfQ1BVU10gPSB7IFswIC4uLiBOUl9DUFVTLTFdID0gMCB9OworaW50IGNwdV8yX25vZGVbTlJfQ1BVU10gX19yZWFkX21vc3RseSA9IHsgWzAgLi4uIE5SX0NQVVMtMV0gPSAwIH07CiBFWFBPUlRfU1lNQk9MKGNwdV8yX25vZGUpOwogCiAvKiBzZXQgdXAgYSBtYXBwaW5nIGJldHdlZW4gY3B1IGFuZCBub2RlLiAqLwpAQCAtNTgxLDcgKzU4MSw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCi11OCBjcHVfMl9sb2dpY2FsX2FwaWNpZFtOUl9DUFVTXSA9IHsgWzAgLi4uIE5SX0NQVVMtMV0gPSBCQURfQVBJQ0lEIH07Cit1OCBjcHVfMl9sb2dpY2FsX2FwaWNpZFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5ID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUQgfTsKIAogc3RhdGljIHZvaWQgbWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL2kzODYva2VybmVsL3RpbWUuYwppbmRleCAyODU0YzM1Li4wZWU5ZGVlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RpbWUuYwpAQCAtOTEsNyArOTEsNyBAQAogREVGSU5FX1NQSU5MT0NLKGk4MjUzX2xvY2spOwogRVhQT1JUX1NZTUJPTChpODI1M19sb2NrKTsKIAotc3RydWN0IHRpbWVyX29wdHMgKmN1cl90aW1lciA9ICZ0aW1lcl9ub25lOworc3RydWN0IHRpbWVyX29wdHMgKmN1cl90aW1lciBfX3JlYWRfbW9zdGx5ID0gJnRpbWVyX25vbmU7CiAKIC8qCiAgKiBUaGlzIGlzIGEgc3BlY2lhbCBsb2NrIHRoYXQgaXMgb3duZWQgYnkgdGhlIENQVSBhbmQgaG9sZHMgdGhlIGluZGV4CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl9ocGV0LmMgYi9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl9ocGV0LmMKaW5kZXggZDc2NmUwOS4uZWY4ZGFjNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfaHBldC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX2hwZXQuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgIm1hY2hfdGltZXIuaCIKICNpbmNsdWRlIDxhc20vaHBldC5oPgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBocGV0X3VzZWNfcXVvdGllbnQ7CS8qIGNvbnZlcnQgaHBldCBjbGtzIHRvIHVzZWMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgaHBldF91c2VjX3F1b3RpZW50OwkvKiBjb252ZXJ0IGhwZXQgY2xrcyB0byB1c2VjICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0c2NfaHBldF9xdW90aWVudDsJCS8qIGNvbnZlcnQgdHNjIHRvIGhwZXQgY2xrcyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBldF9sYXN0OyAJLyogaHBldCBjb3VudGVyIHZhbHVlIGF0IGxhc3QgdGljayovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3RzY19sb3c7CS8qIGxzYiAzMiBiaXRzIG9mIFRpbWUgU3RhbXAgQ291bnRlciAqLwpAQCAtMTgwLDcgKzE4MCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiB0c2MgdGltZXJfb3B0cyBzdHJ1Y3QgKi8KLXN0YXRpYyBzdHJ1Y3QgdGltZXJfb3B0cyB0aW1lcl9ocGV0ID0geworc3RhdGljIHN0cnVjdCB0aW1lcl9vcHRzIHRpbWVyX2hwZXQgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZSA9IAkJImhwZXQiLAogCS5tYXJrX29mZnNldCA9CQltYXJrX29mZnNldF9ocGV0LAogCS5nZXRfb2Zmc2V0ID0JCWdldF9vZmZzZXRfaHBldCwKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA3ZTAxYTUyLi43NjE5NzJmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01Nyw2ICs1Nyw5IEBACiAJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKICAgfQogCisgIC8qIHJhcmVseSBjaGFuZ2VkIGRhdGEgbGlrZSBjcHUgbWFwcyAqLworICAuID0gQUxJR04oMzIpOworICAuZGF0YS5yZWFkX21vc3RseSA6IEFUKEFERFIoLmRhdGEucmVhZF9tb3N0bHkpIC0gTE9BRF9PRkZTRVQpIHsgKiguZGF0YS5yZWFkX21vc3RseSkgfQogICBfZWRhdGEgPSAuOwkJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KIAogICAuID0gQUxJR04oVEhSRUFEX1NJWkUpOwkvKiBpbml0X3Rhc2sgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL2kzODYvbW0vaW9yZW1hcC5jCmluZGV4IDZiMjVhZmMuLmYzNzliOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9pMzg2L21tL2lvcmVtYXAuYwpAQCAtMjI4LDcgKzIyOCw4IEBACiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXN0cnVjdCB2bV9zdHJ1Y3QgKnA7Ci0JaWYgKCh2b2lkIF9fZm9yY2UgKikgYWRkciA8PSBoaWdoX21lbW9yeSkgCisKKwlpZiAoKHZvaWQgX19mb3JjZSAqKWFkZHIgPD0gaGlnaF9tZW1vcnkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0yNDEsOSArMjQyLDEwIEBACiAJCXJldHVybjsKIAogCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKLQlwID0gX19yZW1vdmVfdm1fYXJlYSgodm9pZCAqKSAoUEFHRV9NQVNLICYgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSkgYWRkcikpOworCXAgPSBfX3JlbW92ZV92bV9hcmVhKCh2b2lkICopKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcikpOwogCWlmICghcCkgeyAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW91bm1hcDogYmFkIGFkZHJlc3MgJXBcbiIsIGFkZHIpOworCQlkdW1wX3N0YWNrKCk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wb3dlci9jcHUuYyBiL2FyY2gvaTM4Ni9wb3dlci9jcHUuYwppbmRleCAwZTZiNDViLi5jNTQ3YzFhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcG93ZXIvY3B1LmMKKysrIGIvYXJjaC9pMzg2L3Bvd2VyL2NwdS5jCkBAIC0xMzcsNiArMTM3LDcgQEAKIAogCWZpeF9wcm9jZXNzb3JfY29udGV4dCgpOwogCWRvX2ZwdV9lbmQoKTsKKwltdHJyX2FwX2luaXQoKTsKIH0KIAogdm9pZCByZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYjJlMmY2NS4uZTFmYjY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBACiBvYmotJChDT05GSUdfSU9TQVBJQykJCSs9IGlvc2FwaWMubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtb2R1bGUubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vIHNtcGJvb3QubyBkb21haW4ubworb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hLm8KIG9iai0kKENPTkZJR19QRVJGTU9OKQkJKz0gcGVyZm1vbl9kZWZhdWx0X3NtcGwubwogb2JqLSQoQ09ORklHX0lBNjRfQ1lDTE9ORSkJKz0gY3ljbG9uZS5vCiBvYmotJChDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlkpCSs9IG1jYV9yZWNvdmVyeS5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCmluZGV4IGNkYTA2ZjguLjU0MjI1NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCkBAIC02NDAsOSArNjQwLDExIEBACiAJCQlpZiAoc21wX2Jvb3RfZGF0YS5jcHVfcGh5c19pZFtjcHVdICE9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQkJCW5vZGVfY3B1aWRbaSsrXS5waHlzX2lkID0gc21wX2Jvb3RfZGF0YS5jcHVfcGh5c19pZFtjcHVdOwogCX0KLQlidWlsZF9jcHVfdG9fbm9kZV9tYXAoKTsKICMgZW5kaWYKICNlbmRpZgorI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKKwlidWlsZF9jcHVfdG9fbm9kZV9tYXAoKTsKKyNlbmRpZgogCS8qIE1ha2UgYm9vdC11cCBsb29rIHByZXR0eSAqLwogCXByaW50ayhLRVJOX0lORk8gIiVkIENQVXMgYXZhaWxhYmxlLCAlZCBDUFVzIHRvdGFsXG4iLCBhdmFpbGFibGVfY3B1cywgdG90YWxfY3B1cyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL251bWEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbnVtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OGNlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL251bWEuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBpYTY0IGtlcm5lbCBOVU1BIHNwZWNpZmljIHN0dWZmCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEVyaWNoIEZvY2h0IDxlZm9jaHRAZXNzLm5lYy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiAgIEplc3NlIEJhcm5lcyA8amJhcm5lc0BzZ2kuY29tPgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCit1OCBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKK0VYUE9SVF9TWU1CT0woY3B1X3RvX25vZGVfbWFwKTsKKworY3B1bWFza190IG5vZGVfdG9fY3B1X21hc2tbTUFYX05VTU5PREVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOworCisvKioKKyAqIGJ1aWxkX2NwdV90b19ub2RlX21hcCAtIHNldHVwIGNwdSB0byBub2RlIGFuZCBub2RlIHRvIGNwdW1hc2sgYXJyYXlzCisgKgorICogQnVpbGQgY3B1IHRvIG5vZGUgbWFwcGluZyBhbmQgaW5pdGlhbGl6ZSB0aGUgcGVyIG5vZGUgY3B1IG1hc2tzIHVzaW5nCisgKiBpbmZvIGZyb20gdGhlIG5vZGVfY3B1aWQgYXJyYXkgaGFuZGVkIHRvIHVzIGJ5IEFDUEkuCisgKi8KK3ZvaWQgX19pbml0IGJ1aWxkX2NwdV90b19ub2RlX21hcCh2b2lkKQoreworCWludCBjcHUsIGksIG5vZGU7CisKKwlmb3Iobm9kZT0wOyBub2RlIDwgTUFYX05VTU5PREVTOyBub2RlKyspCisJCWNwdXNfY2xlYXIobm9kZV90b19jcHVfbWFza1tub2RlXSk7CisKKwlmb3IoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgKytjcHUpIHsKKwkJbm9kZSA9IC0xOworCQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgKytpKQorCQkJaWYgKGNwdV9waHlzaWNhbF9pZChjcHUpID09IG5vZGVfY3B1aWRbaV0ucGh5c19pZCkgeworCQkJCW5vZGUgPSBub2RlX2NwdWlkW2ldLm5pZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJY3B1X3RvX25vZGVfbWFwW2NwdV0gPSAobm9kZSA+PSAwKSA/IG5vZGUgOiAwOworCQlpZiAobm9kZSA+PSAwKQorCQkJY3B1X3NldChjcHUsIG5vZGVfdG9fY3B1X21hc2tbbm9kZV0pOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCmluZGV4IGVkZDlmMDcuLmI4YTBhN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiAKIAkJX19jb3B5X2Zyb21fdXNlcihjdXJyZW50LT50aHJlYWQuZnBoLCAmc2MtPnNjX2ZyWzMyXSwgOTYqMTYpOwogCQlwc3ItPm1maCA9IDA7CS8qIGRyb3Agc2lnbmFsIGhhbmRsZXIncyBmcGggY29udGVudHMuLi4gKi8KKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWlmIChwc3ItPmRmaCkKIAkJCWlhNjRfZHJvcF9mcHUoY3VycmVudCk7CiAJCWVsc2UgewpAQCAtMTUwLDYgKzE1MSw3IEBACiAJCQlfX2lhNjRfbG9hZF9mcHUoY3VycmVudC0+dGhyZWFkLmZwaCk7CiAJCQlpYTY0X3NldF9sb2NhbF9mcHVfb3duZXIoY3VycmVudCk7CiAJCX0KKwkJcHJlZW1wdF9lbmFibGUoKTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKaW5kZXggNjIzYjBhNS4uN2Q3MmMwZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKQEAgLTUyNSw0NyArNTI1LDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfTlVNQQotCi0vKiBvbiB3aGljaCBub2RlIGlzIGVhY2ggbG9naWNhbCBDUFUgKG9uZSBjYWNoZWxpbmUgZXZlbiBmb3IgNjQgQ1BVcykgKi8KLXU4IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwotRVhQT1JUX1NZTUJPTChjcHVfdG9fbm9kZV9tYXApOwotLyogd2hpY2ggbG9naWNhbCBDUFVzIGFyZSBvbiB3aGljaCBub2RlcyAqLwotY3B1bWFza190IG5vZGVfdG9fY3B1X21hc2tbTUFYX05VTU5PREVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwotCi0vKgotICogQnVpbGQgY3B1IHRvIG5vZGUgbWFwcGluZyBhbmQgaW5pdGlhbGl6ZSB0aGUgcGVyIG5vZGUgY3B1IG1hc2tzLgotICovCi12b2lkIF9faW5pdAotYnVpbGRfY3B1X3RvX25vZGVfbWFwICh2b2lkKQotewotCWludCBjcHUsIGksIG5vZGU7Ci0KLQlmb3Iobm9kZT0wOyBub2RlPE1BWF9OVU1OT0RFUzsgbm9kZSsrKQotCQljcHVzX2NsZWFyKG5vZGVfdG9fY3B1X21hc2tbbm9kZV0pOwotCWZvcihjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkgewotCQkvKgotCQkgKiBBbGwgSXRhbml1bSBOVU1BIHBsYXRmb3JtcyBJIGtub3cgdXNlIEFDUEksIHNvIG1heWJlIHdlCi0JCSAqIGNhbiBkcm9wIHRoaXMgaWZkZWYgY29tcGxldGVseS4gICAgICAgICAgICAgICAgICAgIFtFRl0KLQkJICovCi0jaWZkZWYgQ09ORklHX0FDUElfTlVNQQotCQlub2RlID0gLTE7Ci0JCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyArK2kpCi0JCQlpZiAoY3B1X3BoeXNpY2FsX2lkKGNwdSkgPT0gbm9kZV9jcHVpZFtpXS5waHlzX2lkKSB7Ci0JCQkJbm9kZSA9IG5vZGVfY3B1aWRbaV0ubmlkOwotCQkJCWJyZWFrOwotCQkJfQotI2Vsc2UKLSMJCWVycm9yIEZpeG1lOiBEdW5ubyBob3cgdG8gYnVpbGQgQ1BVLXRvLW5vZGUgbWFwLgotI2VuZGlmCi0JCWNwdV90b19ub2RlX21hcFtjcHVdID0gKG5vZGUgPj0gMCkgPyBub2RlIDogMDsKLQkJaWYgKG5vZGUgPj0gMCkKLQkJCWNwdV9zZXQoY3B1LCBub2RlX3RvX2NwdV9tYXNrW25vZGVdKTsKLQl9Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwotCiAvKgogICogQ3ljbGUgdGhyb3VnaCB0aGUgQVBzIHNlbmRpbmcgV2FrZXVwIElQSXMgdG8gYm9vdCBlYWNoLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZTdlNTIwZC4uNDQ0MGM4MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwpAQCAtOTAsMTQgKzkwLDE2IEBACiAJCS5sb2NrX293bmVyX2RlcHRoID0JMAogCX07CiAJc3RhdGljIGludCBkaWVfY291bnRlcjsKKwlpbnQgY3B1ID0gZ2V0X2NwdSgpOwogCi0JaWYgKGRpZS5sb2NrX293bmVyICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkgeworCWlmIChkaWUubG9ja19vd25lciAhPSBjcHUpIHsKIAkJY29uc29sZV92ZXJib3NlKCk7CiAJCXNwaW5fbG9ja19pcnEoJmRpZS5sb2NrKTsKLQkJZGllLmxvY2tfb3duZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCWRpZS5sb2NrX293bmVyID0gY3B1OwogCQlkaWUubG9ja19vd25lcl9kZXB0aCA9IDA7CiAJCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCX0KKwlwdXRfY3B1KCk7CiAKIAlpZiAoKytkaWUubG9ja19vd25lcl9kZXB0aCA8IDMpIHsKIAkJcHJpbnRrKCIlc1slZF06ICVzICVsZCBbJWRdXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCmluZGV4IGYzZmQ1MjguLmI1YzkwZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKQEAgLTQ0LDE1MCArNDQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBlYXJseV9ub2RlX2RhdGEgbWVtX2RhdGFbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOwotCi0vKioKLSAqIHJlYXNzaWduX2NwdV9vbmx5X25vZGVzIC0gY2FsbGVkIGZyb20gZmluZF9tZW1vcnkgdG8gbW92ZSBDUFUtb25seSBub2RlcyB0byBhIG1lbW9yeSBub2RlCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIG1vdmUgbm9kZXMgd2l0aCBvbmx5IENQVXMgKG5vIG1lbW9yeSkKLSAqIHRvIGEgbm9kZSB3aXRoIG1lbW9yeSB3aGljaCBpcyBhdCB0aGUgbWluaW11bSBudW1hX3NsaXQgZGlzdGFuY2UuCi0gKiBBbnkgcmVhc3NpZ21lbnRzIHdpbGwgcmVzdWx0IGluIHRoZSBjb21wcmVzc2lvbiBvZiB0aGUgbm9kZXMKLSAqIGFuZCByZW51bWJlcmluZyB0aGUgbmlkIHZhbHVlcyB3aGVyZSBhcHByb3ByaWF0ZS4KLSAqIFRoZSBzdGF0aWMgZGVjbGFyYXRpb25zIGJlbG93IGFyZSB0byBhdm9pZCBsYXJnZSBzdGFjayBzaXplIHdoaWNoCi0gKiBtYWtlcyB0aGUgY29kZSBub3QgcmUtZW50cmFudC4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHJlYXNzaWduX2NwdV9vbmx5X25vZGVzKHZvaWQpCi17Ci0Jc3RydWN0IG5vZGVfbWVtYmxrX3MgKnA7Ci0JaW50IGksIGosIGssIG5ub2RlLCBuaWQsIGNwdSwgY3B1bmlkLCBweG07Ci0JdTggY3NsaXQsIHNsaXQ7Ci0Jc3RhdGljIERFQ0xBUkVfQklUTUFQKG5vZGVzX3dpdGhfbWVtLCBNQVhfTlVNTk9ERVMpIF9faW5pdGRhdGE7Ci0Jc3RhdGljIHU4IG51bWFfc2xpdF9maXhbTUFYX05VTU5PREVTICogTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOwotCXN0YXRpYyBpbnQgbm9kZV9mbGlwW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTsKLQlzdGF0aWMgaW50IG9sZF9uaWRfbWFwW05SX0NQVVNdIF9faW5pdGRhdGE7Ci0KLQlmb3IgKG5ub2RlID0gMCwgcCA9ICZub2RlX21lbWJsa1swXTsgcCA8ICZub2RlX21lbWJsa1tudW1fbm9kZV9tZW1ibGtzXTsgcCsrKQotCQlpZiAoIXRlc3RfYml0KHAtPm5pZCwgKHZvaWQgKikgbm9kZXNfd2l0aF9tZW0pKSB7Ci0JCQlzZXRfYml0KHAtPm5pZCwgKHZvaWQgKikgbm9kZXNfd2l0aF9tZW0pOwotCQkJbm5vZGUrKzsKLQkJfQotCi0JLyoKLQkgKiBBbGwgbmlkcyB3aXRoIG1lbW9yeS4KLQkgKi8KLQlpZiAobm5vZGUgPT0gbnVtX29ubGluZV9ub2RlcygpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIENoYW5nZSBuaWRzIGFuZCBhdHRlbXB0IHRvIG1pZ3JhdGUgQ1BVLW9ubHkgbm9kZXMKLQkgKiB0byB0aGUgYmVzdCBudW1hX3NsaXQgKGNsb3Nlc3QgbmVpZ2hib3IpIHBvc3NpYmxlLgotCSAqIEZvciByZWFzc2lnbmVkIENQVSBub2RlcyBhIG5pZCBjYW4ndCBiZSBhcnJpdmVkIGF0Ci0JICogdW50aWwgYWZ0ZXIgdGhpcyBsb29wIGJlY2F1c2UgdGhlIHRhcmdldCBuaWQncyBuZXcKLQkgKiBpZGVudGl0eSBtaWdodCBub3QgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIHlldC4gU28KLQkgKiBuZXcgbmlkIHZhbHVlcyBhcmUgZmFicmljYXRlZCBhYm92ZSBudW1fb25saW5lX25vZGVzKCkgYW5kCi0JICogbWFwcGVkIGJhY2sgbGF0ZXIgdG8gdGhlaXIgdHJ1ZSB2YWx1ZS4KLQkgKi8KLQkvKiBNQ0QgLSBUaGlzIGNvZGUgaXMgYSBiaXQgY29tcGxpY2F0ZWQsIGJ1dCBtYXkgYmUgdW5uZWNlc3Nhcnkgbm93LgotCSAqIFdlIGNhbiBub3cgaGFuZGxlIG11Y2ggbW9yZSBpbnRlcmVzdGluZyBub2RlLW51bWJlcmluZy4KLQkgKiBUaGUgb2xkIHJlcXVpcmVtZW50IHRoYXQgMCA8PSBuaWQgPD0gbnVtbm9kZXMgPD0gTUFYX05VTU5PREVTCi0JICogYW5kIHRoYXQgdGhlcmUgYmUgbm8gaG9sZXMgaW4gdGhlIG51bWJlcmluZyAwLi5udW1ub2RlcwotCSAqIGhhcyBiZWNvbWUgc2ltcGx5IDAgPD0gbmlkIDw9IE1BWF9OVU1OT0RFUy4KLQkgKi8KLQluaWQgPSAwOwotCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpICB7Ci0JCWlmICh0ZXN0X2JpdChpLCAodm9pZCAqKSBub2Rlc193aXRoX21lbSkpIHsKLQkJCS8qCi0JCQkgKiBTYXZlIG9yaWdpbmFsIG5pZCB2YWx1ZSBmb3IgbnVtYV9zbGl0Ci0JCQkgKiBmaXh1cCBhbmQgbm9kZV9jcHVpZCByZWFzc2lnbm1lbnRzLgotCQkJICovCi0JCQlub2RlX2ZsaXBbbmlkXSA9IGk7Ci0KLQkJCWlmIChpID09IG5pZCkgewotCQkJCW5pZCsrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlmb3IgKHAgPSAmbm9kZV9tZW1ibGtbMF07IHAgPCAmbm9kZV9tZW1ibGtbbnVtX25vZGVfbWVtYmxrc107IHArKykKLQkJCQlpZiAocC0+bmlkID09IGkpCi0JCQkJCXAtPm5pZCA9IG5pZDsKLQotCQkJY3B1bmlkID0gbmlkOwotCQkJbmlkKys7Ci0JCX0gZWxzZQotCQkJY3B1bmlkID0gTUFYX05VTU5PREVTOwotCi0JCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspCi0JCQlpZiAobm9kZV9jcHVpZFtjcHVdLm5pZCA9PSBpKSB7Ci0JCQkJLyoKLQkJCQkgKiBGb3Igbm9kZXMgbm90IGJlaW5nIHJlYXNzaWduZWQganVzdAotCQkJCSAqIGZpeCB0aGUgY3B1J3MgbmlkIGFuZCByZXZlcnNlIHB4bSBtYXAKLQkJCQkgKi8KLQkJCQlpZiAoY3B1bmlkIDwgTUFYX05VTU5PREVTKSB7Ci0JCQkJCXB4bSA9IG5pZF90b19weG1fbWFwW2ldOwotCQkJCQlweG1fdG9fbmlkX21hcFtweG1dID0KLQkJCQkJICAgICAgICAgIG5vZGVfY3B1aWRbY3B1XS5uaWQgPSBjcHVuaWQ7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCS8qCi0JCQkJICogRm9yIG5vZGVzIGJlaW5nIHJlYXNzaWduZWQsIGZpbmQgYmVzdCBub2RlIGJ5Ci0JCQkJICogbnVtYV9zbGl0IGluZm9ybWF0aW9uIGFuZCB0aGVuIG1ha2UgYSB0ZW1wb3JhcnkKLQkJCQkgKiBuaWQgdmFsdWUgYmFzZWQgb24gY3VycmVudCBuaWQgYW5kIG51bV9vbmxpbmVfbm9kZXMoKS4KLQkJCQkgKi8KLQkJCQlzbGl0ID0gMHhmZjsKLQkJCQlrID0gMipudW1fb25saW5lX25vZGVzKCk7Ci0JCQkJZm9yX2VhY2hfb25saW5lX25vZGUoaikgewotCQkJCQlpZiAoaSA9PSBqKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWVsc2UgaWYgKHRlc3RfYml0KGosICh2b2lkICopIG5vZGVzX3dpdGhfbWVtKSkgewotCQkJCQkJY3NsaXQgPSBudW1hX3NsaXRbaSAqIG51bV9vbmxpbmVfbm9kZXMoKSArIGpdOwotCQkJCQkJaWYgKGNzbGl0IDwgc2xpdCkgewotCQkJCQkJCWsgPSBudW1fb25saW5lX25vZGVzKCkgKyBqOwotCQkJCQkJCXNsaXQgPSBjc2xpdDsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQotCQkJCS8qIHNhdmUgb2xkIG5pZCBtYXAgc28gd2UgY2FuIHVwZGF0ZSB0aGUgcHhtICovCi0JCQkJb2xkX25pZF9tYXBbY3B1XSA9IG5vZGVfY3B1aWRbY3B1XS5uaWQ7Ci0JCQkJbm9kZV9jcHVpZFtjcHVdLm5pZCA9IGs7Ci0JCQl9Ci0JfQotCi0JLyoKLQkgKiBGaXh1cCB0ZW1wb3JhcnkgbmlkIHZhbHVlcyBmb3IgQ1BVLW9ubHkgbm9kZXMuCi0JICovCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykKLQkJaWYgKG5vZGVfY3B1aWRbY3B1XS5uaWQgPT0gKDIqbnVtX29ubGluZV9ub2RlcygpKSkgewotCQkJcHhtID0gbmlkX3RvX3B4bV9tYXBbb2xkX25pZF9tYXBbY3B1XV07Ci0JCQlweG1fdG9fbmlkX21hcFtweG1dID0gbm9kZV9jcHVpZFtjcHVdLm5pZCA9IG5ub2RlIC0gMTsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBubm9kZTsgaSsrKSB7Ci0JCQkJaWYgKG5vZGVfZmxpcFtpXSAhPSAobm9kZV9jcHVpZFtjcHVdLm5pZCAtIG51bV9vbmxpbmVfbm9kZXMoKSkpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJcHhtID0gbmlkX3RvX3B4bV9tYXBbb2xkX25pZF9tYXBbY3B1XV07Ci0JCQkJcHhtX3RvX25pZF9tYXBbcHhtXSA9IG5vZGVfY3B1aWRbY3B1XS5uaWQgPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkvKgotCSAqIEZpeCBudW1hX3NsaXQgYnkgY29tcHJlc3NpbmcgZnJvbSBsYXJnZXIKLQkgKiBuaWQgYXJyYXkgdG8gcmVkdWNlZCBuaWQgYXJyYXkuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG5ub2RlOyBpKyspCi0JCWZvciAoaiA9IDA7IGogPCBubm9kZTsgaisrKQotCQkJbnVtYV9zbGl0X2ZpeFtpICogbm5vZGUgKyBqXSA9Ci0JCQkJbnVtYV9zbGl0W25vZGVfZmxpcFtpXSAqIG51bV9vbmxpbmVfbm9kZXMoKSArIG5vZGVfZmxpcFtqXV07Ci0KLQltZW1jcHkobnVtYV9zbGl0LCBudW1hX3NsaXRfZml4LCBzaXplb2YgKG51bWFfc2xpdCkpOwotCi0Jbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKLQlmb3IgKGkgPSAwOyBpIDwgbm5vZGU7IGkrKykKLQkJbm9kZV9zZXRfb25saW5lKGkpOwotCi0JcmV0dXJuOwotfQorc3RhdGljIG5vZGVtYXNrX3QgbWVtb3J5X2xlc3NfbWFzayBfX2luaXRkYXRhOwogCiAvKgogICogVG8gcHJldmVudCBjYWNoZSBhbGlhc2luZyBlZmZlY3RzLCBhbGlnbiBwZXItbm9kZSBzdHJ1Y3R1cmVzIHNvIHRoYXQgdGhleQpAQCAtMjMzLDI4ICs5MCw2IEBACiB9CiAKIC8qKgotICogZWFybHlfbnJfcGh5c19jcHVzX25vZGUgLSByZXR1cm4gbnVtYmVyIG9mIHBoeXNpY2FsIGNwdXMgb24gYSBnaXZlbiBub2RlCi0gKiBAbm9kZTogbm9kZSB0byBjaGVjawotICoKLSAqIENvdW50IHRoZSBudW1iZXIgb2YgcGh5c2ljYWwgY3B1cyBvbiBAbm9kZS4gIFRoZXNlIGFyZSBjcHVzIHRoYXQgYWN0dWFsbHkKLSAqIGV4aXN0LiAgV2UgY2FuJ3QgdXNlIG5yX2NwdXNfbm9kZSgpIHlldCBiZWNhdXNlCi0gKiBhY3BpX2Jvb3RfaW5pdCgpICh3aGljaCBidWlsZHMgdGhlIG5vZGVfdG9fY3B1X21hc2sgYXJyYXkpIGhhc24ndCBiZWVuCi0gKiBjYWxsZWQgeWV0LgotICovCi1zdGF0aWMgaW50IGVhcmx5X25yX3BoeXNfY3B1c19ub2RlKGludCBub2RlKQotewotCWludCBjcHUsIG4gPSAwOwotCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykKLQkJaWYgKG5vZGUgPT0gbm9kZV9jcHVpZFtjcHVdLm5pZCkKLQkJCWlmICgoY3B1ID09IDApIHx8IG5vZGVfY3B1aWRbY3B1XS5waHlzX2lkKQotCQkJCW4rKzsKLQotCXJldHVybiBuOwotfQotCi0KLS8qKgogICogZWFybHlfbnJfY3B1c19ub2RlIC0gcmV0dXJuIG51bWJlciBvZiBjcHVzIG9uIGEgZ2l2ZW4gbm9kZQogICogQG5vZGU6IG5vZGUgdG8gY2hlY2sKICAqCkBAIC0yNjIsNyArOTcsNyBAQAogICogYWNwaV9ib290X2luaXQoKSAod2hpY2ggYnVpbGRzIHRoZSBub2RlX3RvX2NwdV9tYXNrIGFycmF5KSBoYXNuJ3QgYmVlbgogICogY2FsbGVkIHlldC4gIE5vdGUgdGhhdCBub2RlIDAgd2lsbCBhbHNvIGNvdW50IGFsbCBub24tZXhpc3RlbnQgY3B1cy4KICAqLwotc3RhdGljIGludCBlYXJseV9ucl9jcHVzX25vZGUoaW50IG5vZGUpCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9ucl9jcHVzX25vZGUoaW50IG5vZGUpCiB7CiAJaW50IGNwdSwgbiA9IDA7CiAKQEAgLTI3NCw2ICsxMDksODUgQEAKIH0KIAogLyoqCisgKiBjb21wdXRlX3Blcm5vZGVzaXplIC0gY29tcHV0ZSBzaXplIG9mIHBlcm5vZGUgZGF0YQorICogQG5vZGU6IHRoZSBub2RlIGlkLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgY29tcHV0ZV9wZXJub2Rlc2l6ZShpbnQgbm9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBlcm5vZGVzaXplID0gMCwgY3B1czsKKworCWNwdXMgPSBlYXJseV9ucl9jcHVzX25vZGUobm9kZSk7CisJcGVybm9kZXNpemUgKz0gUEVSQ1BVX1BBR0VfU0laRSAqIGNwdXM7CisJcGVybm9kZXNpemUgKz0gbm9kZSAqIEwxX0NBQ0hFX0JZVEVTOworCXBlcm5vZGVzaXplICs9IEwxX0NBQ0hFX0FMSUdOKHNpemVvZihwZ19kYXRhX3QpKTsKKwlwZXJub2Rlc2l6ZSArPSBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IGlhNjRfbm9kZV9kYXRhKSk7CisJcGVybm9kZXNpemUgPSBQQUdFX0FMSUdOKHBlcm5vZGVzaXplKTsKKwlyZXR1cm4gcGVybm9kZXNpemU7Cit9CisKKy8qKgorICogcGVyX2NwdV9ub2RlX3NldHVwIC0gc2V0dXAgcGVyLWNwdSBhcmVhcyBvbiBlYWNoIG5vZGUKKyAqIEBjcHVfZGF0YTogcGVyLWNwdSBhcmVhIG9uIHRoaXMgbm9kZQorICogQG5vZGU6IG5vZGUgdG8gc2V0dXAKKyAqCisgKiBDb3B5IHRoZSBzdGF0aWMgcGVyLWNwdSBkYXRhIGludG8gdGhlIHJlZ2lvbiB3ZSBqdXN0IHNldCBhc2lkZSBhbmQgdGhlbgorICogc2V0dXAgX19wZXJfY3B1X29mZnNldCBmb3IgZWFjaCBDUFUgb24gdGhpcyBub2RlLiAgUmV0dXJuIGEgcG9pbnRlciB0bworICogdGhlIGVuZCBvZiB0aGUgYXJlYS4KKyAqLworc3RhdGljIHZvaWQgKnBlcl9jcHVfbm9kZV9zZXR1cCh2b2lkICpjcHVfZGF0YSwgaW50IG5vZGUpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWludCBjcHU7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7CisJCWlmIChub2RlID09IG5vZGVfY3B1aWRbY3B1XS5uaWQpIHsKKwkJCW1lbWNweShfX3ZhKGNwdV9kYXRhKSwgX19waHlzX3Blcl9jcHVfc3RhcnQsCisJCQkgICAgICAgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7CisJCQlfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gPSAoY2hhciopX192YShjcHVfZGF0YSkgLQorCQkJCV9fcGVyX2NwdV9zdGFydDsKKwkJCWNwdV9kYXRhICs9IFBFUkNQVV9QQUdFX1NJWkU7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gY3B1X2RhdGE7Cit9CisKKy8qKgorICogZmlsbF9wZXJub2RlIC0gaW5pdGlhbGl6ZSBwZXJub2RlIGRhdGEuCisgKiBAbm9kZTogdGhlIG5vZGUgaWQuCisgKiBAcGVybm9kZTogcGh5c2ljYWwgYWRkcmVzcyBvZiBwZXJub2RlIGRhdGEKKyAqIEBwZXJub2Rlc2l6ZTogc2l6ZSBvZiB0aGUgcGVybm9kZSBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBmaWxsX3Blcm5vZGUoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgcGVybm9kZSwKKwl1bnNpZ25lZCBsb25nIHBlcm5vZGVzaXplKQoreworCXZvaWQgKmNwdV9kYXRhOworCWludCBjcHVzID0gZWFybHlfbnJfY3B1c19ub2RlKG5vZGUpOworCXN0cnVjdCBib290bWVtX2RhdGEgKmJkcCA9ICZtZW1fZGF0YVtub2RlXS5ib290bWVtX2RhdGE7CisKKwltZW1fZGF0YVtub2RlXS5wZXJub2RlX2FkZHIgPSBwZXJub2RlOworCW1lbV9kYXRhW25vZGVdLnBlcm5vZGVfc2l6ZSA9IHBlcm5vZGVzaXplOworCW1lbXNldChfX3ZhKHBlcm5vZGUpLCAwLCBwZXJub2Rlc2l6ZSk7CisKKwljcHVfZGF0YSA9ICh2b2lkICopcGVybm9kZTsKKwlwZXJub2RlICs9IFBFUkNQVV9QQUdFX1NJWkUgKiBjcHVzOworCXBlcm5vZGUgKz0gbm9kZSAqIEwxX0NBQ0hFX0JZVEVTOworCisJbWVtX2RhdGFbbm9kZV0ucGdkYXQgPSBfX3ZhKHBlcm5vZGUpOworCXBlcm5vZGUgKz0gTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHBnX2RhdGFfdCkpOworCisJbWVtX2RhdGFbbm9kZV0ubm9kZV9kYXRhID0gX192YShwZXJub2RlKTsKKwlwZXJub2RlICs9IEwxX0NBQ0hFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEpKTsKKworCW1lbV9kYXRhW25vZGVdLnBnZGF0LT5iZGF0YSA9IGJkcDsKKwlwZXJub2RlICs9IEwxX0NBQ0hFX0FMSUdOKHNpemVvZihwZ19kYXRhX3QpKTsKKworCWNwdV9kYXRhID0gcGVyX2NwdV9ub2RlX3NldHVwKGNwdV9kYXRhLCBub2RlKTsKKworCXJldHVybjsKK30KKworLyoqCiAgKiBmaW5kX3Blcm5vZGVfc3BhY2UgLSBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1lbW9yeSBtYXAgYW5kIHBlci1ub2RlIHN0cnVjdHVyZXMKICAqIEBzdGFydDogcGh5c2ljYWwgc3RhcnQgb2YgcmFuZ2UKICAqIEBsZW46IGxlbmd0aCBvZiByYW5nZQpAQCAtMzA0LDkgKzIxOCw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBmaW5kX3Blcm5vZGVfc3BhY2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCQkJICAgICBpbnQgbm9kZSkKIHsKLQl1bnNpZ25lZCBsb25nIGVwZm4sIGNwdSwgY3B1cywgcGh5c19jcHVzOworCXVuc2lnbmVkIGxvbmcgZXBmbjsKIAl1bnNpZ25lZCBsb25nIHBlcm5vZGVzaXplID0gMCwgcGVybm9kZSwgcGFnZXMsIG1hcHNpemU7Ci0Jdm9pZCAqY3B1X2RhdGE7CiAJc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRwID0gJm1lbV9kYXRhW25vZGVdLmJvb3RtZW1fZGF0YTsKIAogCWVwZm4gPSAoc3RhcnQgKyBsZW4pID4+IFBBR0VfU0hJRlQ7CkBAIC0zMjksNDkgKzI0MiwxMiBAQAogCSAqIENhbGN1bGF0ZSB0b3RhbCBzaXplIG5lZWRlZCwgaW5jbC4gd2hhdCdzIG5lY2Vzc2FyeQogCSAqIGZvciBnb29kIGFsaWdubWVudCBhbmQgYWxpYXMgcHJldmVudGlvbi4KIAkgKi8KLQljcHVzID0gZWFybHlfbnJfY3B1c19ub2RlKG5vZGUpOwotCXBoeXNfY3B1cyA9IGVhcmx5X25yX3BoeXNfY3B1c19ub2RlKG5vZGUpOwotCXBlcm5vZGVzaXplICs9IFBFUkNQVV9QQUdFX1NJWkUgKiBjcHVzOwotCXBlcm5vZGVzaXplICs9IG5vZGUgKiBMMV9DQUNIRV9CWVRFUzsKLQlwZXJub2Rlc2l6ZSArPSBMMV9DQUNIRV9BTElHTihzaXplb2YocGdfZGF0YV90KSk7Ci0JcGVybm9kZXNpemUgKz0gTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHN0cnVjdCBpYTY0X25vZGVfZGF0YSkpOwotCXBlcm5vZGVzaXplID0gUEFHRV9BTElHTihwZXJub2Rlc2l6ZSk7CisJcGVybm9kZXNpemUgPSBjb21wdXRlX3Blcm5vZGVzaXplKG5vZGUpOwogCXBlcm5vZGUgPSBOT0RFREFUQV9BTElHTihzdGFydCwgbm9kZSk7CiAKIAkvKiBJcyB0aGlzIHJhbmdlIGJpZyBlbm91Z2ggZm9yIHdoYXQgd2Ugd2FudCB0byBzdG9yZSBoZXJlPyAqLwotCWlmIChzdGFydCArIGxlbiA+IChwZXJub2RlICsgcGVybm9kZXNpemUgKyBtYXBzaXplKSkgewotCQltZW1fZGF0YVtub2RlXS5wZXJub2RlX2FkZHIgPSBwZXJub2RlOwotCQltZW1fZGF0YVtub2RlXS5wZXJub2RlX3NpemUgPSBwZXJub2Rlc2l6ZTsKLQkJbWVtc2V0KF9fdmEocGVybm9kZSksIDAsIHBlcm5vZGVzaXplKTsKLQotCQljcHVfZGF0YSA9ICh2b2lkICopcGVybm9kZTsKLQkJcGVybm9kZSArPSBQRVJDUFVfUEFHRV9TSVpFICogY3B1czsKLQkJcGVybm9kZSArPSBub2RlICogTDFfQ0FDSEVfQllURVM7Ci0KLQkJbWVtX2RhdGFbbm9kZV0ucGdkYXQgPSBfX3ZhKHBlcm5vZGUpOwotCQlwZXJub2RlICs9IEwxX0NBQ0hFX0FMSUdOKHNpemVvZihwZ19kYXRhX3QpKTsKLQotCQltZW1fZGF0YVtub2RlXS5ub2RlX2RhdGEgPSBfX3ZhKHBlcm5vZGUpOwotCQlwZXJub2RlICs9IEwxX0NBQ0hFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEpKTsKLQotCQltZW1fZGF0YVtub2RlXS5wZ2RhdC0+YmRhdGEgPSBiZHA7Ci0JCXBlcm5vZGUgKz0gTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHBnX2RhdGFfdCkpOwotCi0JCS8qCi0JCSAqIENvcHkgdGhlIHN0YXRpYyBwZXItY3B1IGRhdGEgaW50byB0aGUgcmVnaW9uIHdlCi0JCSAqIGp1c3Qgc2V0IGFzaWRlIGFuZCB0aGVuIHNldHVwIF9fcGVyX2NwdV9vZmZzZXQKLQkJICogZm9yIGVhY2ggQ1BVIG9uIHRoaXMgbm9kZS4KLQkJICovCi0JCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKLQkJCWlmIChub2RlID09IG5vZGVfY3B1aWRbY3B1XS5uaWQpIHsKLQkJCQltZW1jcHkoX192YShjcHVfZGF0YSksIF9fcGh5c19wZXJfY3B1X3N0YXJ0LAotCQkJCSAgICAgICBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0KTsKLQkJCQlfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gPSAoY2hhciopX192YShjcHVfZGF0YSkgLQotCQkJCQlfX3Blcl9jcHVfc3RhcnQ7Ci0JCQkJY3B1X2RhdGEgKz0gUEVSQ1BVX1BBR0VfU0laRTsKLQkJCX0KLQkJfQotCX0KKwlpZiAoc3RhcnQgKyBsZW4gPiAocGVybm9kZSArIHBlcm5vZGVzaXplICsgbWFwc2l6ZSkpCisJCWZpbGxfcGVybm9kZShub2RlLCBwZXJub2RlLCBwZXJub2Rlc2l6ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQxMSw2ICsyODcsOSBAQAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKIAkJcGdfZGF0YV90ICpwZHAgPSBtZW1fZGF0YVtub2RlXS5wZ2RhdDsKIAorCQlpZiAobm9kZV9pc3NldChub2RlLCBtZW1vcnlfbGVzc19tYXNrKSkKKwkJCWNvbnRpbnVlOworCiAJCWJkcCA9IHBkcC0+YmRhdGE7CiAKIAkJLyogRmlyc3QgdGhlIGJvb3RtZW1fbWFwIGl0c2VsZiAqLwpAQCAtNDM2LDggKzMxNSw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0aWFsaXplX3Blcm5vZGVfZGF0YSh2b2lkKQogewotCWludCBjcHUsIG5vZGU7CiAJcGdfZGF0YV90ICpwZ2RhdF9saXN0W01BWF9OVU1OT0RFU107CisJaW50IGNwdSwgbm9kZTsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpCiAJCXBnZGF0X2xpc3Rbbm9kZV0gPSBtZW1fZGF0YVtub2RlXS5wZ2RhdDsKQEAgLTQ0NywxMiArMzI2LDk5IEBACiAJCW1lbWNweShtZW1fZGF0YVtub2RlXS5ub2RlX2RhdGEtPnBnX2RhdGFfcHRycywgcGdkYXRfbGlzdCwKIAkJICAgICAgIHNpemVvZihwZ2RhdF9saXN0KSk7CiAJfQotCisjaWZkZWYgQ09ORklHX1NNUAogCS8qIFNldCB0aGUgbm9kZV9kYXRhIHBvaW50ZXIgZm9yIGVhY2ggcGVyLWNwdSBzdHJ1Y3QgKi8KIAlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7CiAJCW5vZGUgPSBub2RlX2NwdWlkW2NwdV0ubmlkOwogCQlwZXJfY3B1KGNwdV9pbmZvLCBjcHUpLm5vZGVfZGF0YSA9IG1lbV9kYXRhW25vZGVdLm5vZGVfZGF0YTsKIAl9CisjZWxzZQorCXsKKwkJc3RydWN0IGNwdWluZm9faWE2NCAqY3B1MF9jcHVfaW5mbzsKKwkJY3B1ID0gMDsKKwkJbm9kZSA9IG5vZGVfY3B1aWRbY3B1XS5uaWQ7CisJCWNwdTBfY3B1X2luZm8gPSAoc3RydWN0IGNwdWluZm9faWE2NCAqKShfX3BoeXNfcGVyX2NwdV9zdGFydCArCisJCQkoKGNoYXIgKikmcGVyX2NwdV9fY3B1X2luZm8gLSBfX3Blcl9jcHVfc3RhcnQpKTsKKwkJY3B1MF9jcHVfaW5mby0+bm9kZV9kYXRhID0gbWVtX2RhdGFbbm9kZV0ubm9kZV9kYXRhOworCX0KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCit9CisKKy8qKgorICogbWVtb3J5X2xlc3Nfbm9kZV9hbGxvYyAtICogYXR0ZW1wdCB0byBhbGxvY2F0ZSBtZW1vcnkgb24gdGhlIGJlc3QgTlVNQSBzbGl0CisgKiAJbm9kZSBidXQgZmFsbCBiYWNrIHRvIGFueSBvdGhlciBub2RlIHdoZW4gX19hbGxvY19ib290bWVtX25vZGUgZmFpbHMKKyAqCWZvciBiZXN0LgorICogQG5pZDogbm9kZSBpZAorICogQHBlcm5vZGVzaXplOiBzaXplIG9mIHRoaXMgbm9kZSdzIHBlcm5vZGUgZGF0YQorICogQGFsaWduOiBhbGlnbm1lbnQgdG8gdXNlIGZvciB0aGlzIG5vZGUncyBwZXJub2RlIGRhdGEKKyAqLworc3RhdGljIHZvaWQgX19pbml0ICptZW1vcnlfbGVzc19ub2RlX2FsbG9jKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGVybm9kZXNpemUsCisJdW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKwl2b2lkICpwdHIgPSBOVUxMOworCXU4IGJlc3QgPSAweGZmOworCWludCBiZXN0bm9kZSA9IC0xLCBub2RlOworCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQlpZiAobm9kZV9pc3NldChub2RlLCBtZW1vcnlfbGVzc19tYXNrKSkKKwkJCWNvbnRpbnVlOworCQllbHNlIGlmIChub2RlX2Rpc3RhbmNlKG5pZCwgbm9kZSkgPCBiZXN0KSB7CisJCQliZXN0ID0gbm9kZV9kaXN0YW5jZShuaWQsIG5vZGUpOworCQkJYmVzdG5vZGUgPSBub2RlOworCQl9CisJfQorCisJcHRyID0gX19hbGxvY19ib290bWVtX25vZGUobWVtX2RhdGFbYmVzdG5vZGVdLnBnZGF0LAorCQlwZXJub2Rlc2l6ZSwgYWxpZ24sIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisKKwlpZiAoIXB0cikKKwkJcGFuaWMoIk5PIG1lbW9yeSBmb3IgbWVtb3J5IGxlc3Mgbm9kZVxuIik7CisJcmV0dXJuIHB0cjsKK30KKworLyoqCisgKiBwZ2RhdF9pbnNlcnQgLSBpbnNlcnQgdGhlIHBnZGF0IGludG8gZ2xvYmFsIHBnZGF0X2xpc3QKKyAqIEBwZ2RhdDogdGhlIHBnZGF0IGZvciBhIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwZ2RhdF9pbnNlcnQocGdfZGF0YV90ICpwZ2RhdCkKK3sKKwlwZ19kYXRhX3QgKnByZXYgPSBOVUxMLCAqbmV4dDsKKworCWZvcl9lYWNoX3BnZGF0KG5leHQpCisJCWlmIChwZ2RhdC0+bm9kZV9pZCA8IG5leHQtPm5vZGVfaWQpCisJCQlicmVhazsKKwkJZWxzZQorCQkJcHJldiA9IG5leHQ7CisKKwlpZiAocHJldikgeworCQlwcmV2LT5wZ2RhdF9uZXh0ID0gcGdkYXQ7CisJCXBnZGF0LT5wZ2RhdF9uZXh0ID0gbmV4dDsKKwl9IGVsc2UgeworCQlwZ2RhdC0+cGdkYXRfbmV4dCA9IHBnZGF0X2xpc3Q7CisJCXBnZGF0X2xpc3QgPSBwZ2RhdDsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogbWVtb3J5X2xlc3Nfbm9kZXMgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBDUFUgb25seSBub2RlcyBwZXJub2RlCisgKglpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG1lbW9yeV9sZXNzX25vZGVzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwZXJub2Rlc2l6ZTsKKwl2b2lkICpwZXJub2RlOworCWludCBub2RlOworCisJZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG1lbW9yeV9sZXNzX21hc2spIHsKKwkJcGVybm9kZXNpemUgPSBjb21wdXRlX3Blcm5vZGVzaXplKG5vZGUpOworCQlwZXJub2RlID0gbWVtb3J5X2xlc3Nfbm9kZV9hbGxvYyhub2RlLCBwZXJub2Rlc2l6ZSwKKwkJCShub2RlKSA/IChub2RlICogUEVSQ1BVX1BBR0VfU0laRSkgOiAoMTAyNCoxMDI0KSk7CisJCWZpbGxfcGVybm9kZShub2RlLCBfX3BhKHBlcm5vZGUpLCBwZXJub2Rlc2l6ZSk7CisJfQorCisJcmV0dXJuOwogfQogCiAvKioKQEAgLTQ3MiwxNiArNDM4LDE5IEBACiAJCW5vZGVfc2V0X29ubGluZSgwKTsKIAl9CiAKKwlub2Rlc19vcihtZW1vcnlfbGVzc19tYXNrLCBtZW1vcnlfbGVzc19tYXNrLCBub2RlX29ubGluZV9tYXApOwogCW1pbl9sb3dfcGZuID0gLTE7CiAJbWF4X2xvd19wZm4gPSAwOwogCi0JaWYgKG51bV9vbmxpbmVfbm9kZXMoKSA+IDEpCi0JCXJlYXNzaWduX2NwdV9vbmx5X25vZGVzKCk7Ci0KIAkvKiBUaGVzZSBhY3R1YWxseSBlbmQgdXAgZ2V0dGluZyBjYWxsZWQgYnkgY2FsbF9wZXJub2RlX21lbW9yeSgpICovCiAJZWZpX21lbW1hcF93YWxrKGZpbHRlcl9yc3ZkX21lbW9yeSwgYnVpbGRfbm9kZV9tYXBzKTsKIAllZmlfbWVtbWFwX3dhbGsoZmlsdGVyX3JzdmRfbWVtb3J5LCBmaW5kX3Blcm5vZGVfc3BhY2UpOwogCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkKKwkJaWYgKG1lbV9kYXRhW25vZGVdLmJvb3RtZW1fZGF0YS5ub2RlX2xvd19wZm4pIHsKKwkJCW5vZGVfY2xlYXIobm9kZSwgbWVtb3J5X2xlc3NfbWFzayk7CisJCQltZW1fZGF0YVtub2RlXS5taW5fcGZuID0gfjBVTDsKKwkJfQogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgYm9vdCBtZW1vcnkgbWFwcyBpbiByZXZlcnNlIG9yZGVyIHNpbmNlIHRoYXQncwogCSAqIHdoYXQgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIGV4cGVjdHMKQEAgLTQ5MiwxNyArNDYxLDE0IEBACiAKIAkJaWYgKCFub2RlX29ubGluZShub2RlKSkKIAkJCWNvbnRpbnVlOworCQllbHNlIGlmIChub2RlX2lzc2V0KG5vZGUsIG1lbW9yeV9sZXNzX21hc2spKQorCQkJY29udGludWU7CiAKIAkJYmRwID0gJm1lbV9kYXRhW25vZGVdLmJvb3RtZW1fZGF0YTsKIAkJcGVybm9kZSA9IG1lbV9kYXRhW25vZGVdLnBlcm5vZGVfYWRkcjsKIAkJcGVybm9kZXNpemUgPSBtZW1fZGF0YVtub2RlXS5wZXJub2RlX3NpemU7CiAJCW1hcCA9IHBlcm5vZGUgKyBwZXJub2Rlc2l6ZTsKIAotCQkvKiBTYW5pdHkgY2hlY2suLi4gKi8KLQkJaWYgKCFwZXJub2RlKQotCQkJcGFuaWMoInBlcm5vZGUgc3BhY2UgZm9yIG5vZGUgJWQgIgotCQkJICAgICAgImNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQhIiwgbm9kZSk7Ci0KIAkJaW5pdF9ib290bWVtX25vZGUobWVtX2RhdGFbbm9kZV0ucGdkYXQsCiAJCQkJICBtYXA+PlBBR0VfU0hJRlQsCiAJCQkJICBiZHAtPm5vZGVfYm9vdF9zdGFydD4+UEFHRV9TSElGVCwKQEAgLTUxMiw2ICs0NzgsNyBAQAogCWVmaV9tZW1tYXBfd2FsayhmaWx0ZXJfcnN2ZF9tZW1vcnksIGZyZWVfbm9kZV9ib290bWVtKTsKIAogCXJlc2VydmVfcGVybm9kZV9zcGFjZSgpOworCW1lbW9yeV9sZXNzX25vZGVzKCk7CiAJaW5pdGlhbGl6ZV9wZXJub2RlX2RhdGEoKTsKIAogCW1heF9wZm4gPSBtYXhfbG93X3BmbjsKQEAgLTUxOSw2ICs0ODYsNyBAQAogCWZpbmRfaW5pdHJkKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCiAvKioKICAqIHBlcl9jcHVfaW5pdCAtIHNldHVwIHBlci1jcHUgdmFyaWFibGVzCiAgKgpAQCAtNTI5LDE1ICs0OTcsMTUgQEAKIHsKIAlpbnQgY3B1OwogCi0JaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKSB7Ci0JCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKLQkJCXBlcl9jcHUobG9jYWxfcGVyX2NwdV9vZmZzZXQsIGNwdSkgPQotCQkJCV9fcGVyX2NwdV9vZmZzZXRbY3B1XTsKLQkJfQotCX0KKwlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDApCisJCXJldHVybiBfX3Blcl9jcHVfc3RhcnQgKyBfX3Blcl9jcHVfb2Zmc2V0W3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKQorCQlwZXJfY3B1KGxvY2FsX3Blcl9jcHVfb2Zmc2V0LCBjcHUpID0gX19wZXJfY3B1X29mZnNldFtjcHVdOwogCiAJcmV0dXJuIF9fcGVyX2NwdV9zdGFydCArIF9fcGVyX2NwdV9vZmZzZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qKgogICogc2hvd19tZW0gLSBnaXZlIHNob3J0IHN1bW1hcnkgb2YgbWVtb3J5IHN0YXRzCkBAIC02ODAsMTIgKzY0OCwxMyBAQAogCiAJbWF4X2RtYSA9IHZpcnRfdG9fcGh5cygodm9pZCAqKSBNQVhfRE1BX0FERFJFU1MpID4+IFBBR0VfU0hJRlQ7CiAKLQkvKiBzbyBtaW4oKSB3aWxsIHdvcmsgaW4gY291bnRfbm9kZV9wYWdlcyAqLwotCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpCi0JCW1lbV9kYXRhW25vZGVdLm1pbl9wZm4gPSB+MFVMOwotCiAJZWZpX21lbW1hcF93YWxrKGZpbHRlcl9yc3ZkX21lbW9yeSwgY291bnRfbm9kZV9wYWdlcyk7CiAKKwl2bWFsbG9jX2VuZCAtPSBQQUdFX0FMSUdOKG1heF9sb3dfcGZuICogc2l6ZW9mKHN0cnVjdCBwYWdlKSk7CisJdm1lbV9tYXAgPSAoc3RydWN0IHBhZ2UgKikgdm1hbGxvY19lbmQ7CisJZWZpX21lbW1hcF93YWxrKGNyZWF0ZV9tZW1fbWFwX3BhZ2VfdGFibGUsIE5VTEwpOworCXByaW50aygiVmlydHVhbCBtZW1fbWFwIHN0YXJ0cyBhdCAweCVwXG4iLCB2bWVtX21hcCk7CisKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CiAJCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOwogCQltZW1zZXQoemhvbGVzX3NpemUsIDAsIHNpemVvZih6aG9sZXNfc2l6ZSkpOwpAQCAtNzE5LDE1ICs2ODgsNiBAQAogCQkJCSBtZW1fZGF0YVtub2RlXS5udW1fZG1hX3BoeXNwYWdlcyk7CiAJCX0KIAotCQlpZiAobm9kZSA9PSAwKSB7Ci0JCQl2bWFsbG9jX2VuZCAtPQotCQkJCVBBR0VfQUxJR04obWF4X2xvd19wZm4gKiBzaXplb2Yoc3RydWN0IHBhZ2UpKTsKLQkJCXZtZW1fbWFwID0gKHN0cnVjdCBwYWdlICopIHZtYWxsb2NfZW5kOwotCi0JCQllZmlfbWVtbWFwX3dhbGsoY3JlYXRlX21lbV9tYXBfcGFnZV90YWJsZSwgTlVMTCk7Ci0JCQlwcmludGsoIlZpcnR1YWwgbWVtX21hcCBzdGFydHMgYXQgMHglcFxuIiwgdm1lbV9tYXApOwotCQl9Ci0KIAkJcGZuX29mZnNldCA9IG1lbV9kYXRhW25vZGVdLm1pbl9wZm47CiAKIAkJTk9ERV9EQVRBKG5vZGUpLT5ub2RlX21lbV9tYXAgPSB2bWVtX21hcCArIHBmbl9vZmZzZXQ7CkBAIC03MzUsNSArNjk1LDExIEBACiAJCQkJICAgIHBmbl9vZmZzZXQsIHpob2xlc19zaXplKTsKIAl9CiAKKwkvKgorCSAqIE1ha2UgbWVtb3J5IGxlc3Mgbm9kZXMgYmVjb21lIGEgbWVtYmVyIG9mIHRoZSBrbm93biBub2Rlcy4KKwkgKi8KKwlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbWVtb3J5X2xlc3NfbWFzaykKKwkJcGdkYXRfaW5zZXJ0KG1lbV9kYXRhW25vZGVdLnBnZGF0KTsKKwogCXplcm9fcGFnZV9tZW1tYXBfcHRyID0gdmlydF90b19wYWdlKGlhNjRfaW12YShlbXB0eV96ZXJvX3BhZ2UpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDRlYjJmNTIuLjY1Zjk5NTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNTk3LDcgKzU5Nyw4IEBACiAJa2NsaXN0X2FkZCgma2NvcmVfa2VybmVsLCBfc3RleHQsIF9lbmQgLSBfc3RleHQpOwogCiAJZm9yX2VhY2hfcGdkYXQocGdkYXQpCi0JCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYWxsX2Jvb3RtZW1fbm9kZShwZ2RhdCk7CisJCWlmIChwZ2RhdC0+YmRhdGEtPm5vZGVfYm9vdG1lbV9tYXApCisJCQl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FsbF9ib290bWVtX25vZGUocGdkYXQpOwogCiAJcmVzZXJ2ZWRfcGFnZXMgPSAwOwogCWVmaV9tZW1tYXBfd2Fsayhjb3VudF9yZXNlcnZlZF9wYWdlcywgJnJlc2VydmVkX3BhZ2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL2h1YmRldi5oIGIvYXJjaC9pYTY0L3NuL2luY2x1ZGUveHRhbGsvaHViZGV2LmgKaW5kZXggODY4ZTdlYy4uNTgwYTFjMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2luY2x1ZGUveHRhbGsvaHViZGV2LmgKKysrIGIvYXJjaC9pYTY0L3NuL2luY2x1ZGUveHRhbGsvaHViZGV2LmgKQEAgLTgsNiArOCw4IEBACiAjaWZuZGVmIF9BU01fSUE2NF9TTl9YVEFMS19IVUJERVZfSAogI2RlZmluZSBfQVNNX0lBNjRfU05fWFRBTEtfSFVCREVWX0gKIAorI2luY2x1ZGUgInh0YWxrL3h3aWRnZXRkZXYuaCIKKwogI2RlZmluZSBIVUJfV0lER0VUX0lEX01BWCAweGYKICNkZWZpbmUgREVWX1BFUl9XSURHRVQgKDIqMio4KQogI2RlZmluZSBJSU9fSVRURV9XSURHRVRfQklUUyAgICA0ICAgICAgIC8qIHNpemUgb2Ygd2lkZ2V0IGZpZWxkICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCmluZGV4IDc4M2ViNDMuLmE2N2YzOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCkBAIC05LDIxICs5LDI4IEBACiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgogI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zbi9nZW8uaD4KKyNpbmNsdWRlIDxhc20vc24vaW8uaD4KKyNpbmNsdWRlIDxhc20vc24vcGNpYnJfcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+Ci0jaW5jbHVkZSAicGNpL3BjaWJyX3Byb3ZpZGVyLmgiCi0jaW5jbHVkZSAieHRhbGsveHdpZGdldGRldi5oIgotI2luY2x1ZGUgPGFzbS9zbi9nZW8uaD4KLSNpbmNsdWRlICJ4dGFsay9odWJkZXYuaCIKLSNpbmNsdWRlIDxhc20vc24vaW8uaD4KICNpbmNsdWRlIDxhc20vc24vc2ltdWxhdG9yLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgogI2luY2x1ZGUgPGFzbS9zbi90aW9jYV9wcm92aWRlci5oPgorI2luY2x1ZGUgInh0YWxrL2h1YmRldi5oIgorI2luY2x1ZGUgInh0YWxrL3h3aWRnZXRkZXYuaCIKIAotY2hhciBtYXN0ZXJfYmFzZWlvX3dpZDsKIG5hc2lkX3QgbWFzdGVyX25hc2lkID0gSU5WQUxJRF9OQVNJRDsJLyogUGFydGl0aW9uIE1hc3RlciAqLwogCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBzbl9zeXNkYXRhX2xpc3Q7CisKKy8qIHN5c2RhdGEgbGlzdCBzdHJ1Y3QgKi8KK3N0cnVjdCBzeXNkYXRhX2VsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXZvaWQgKnN5c2RhdGE7Cit9OworCiBzdHJ1Y3Qgc2xhYl9pbmZvIHsKIAlzdHJ1Y3QgaHViZGV2X2luZm8gaHViZGV2OwogfTsKQEAgLTEzOCwyMyArMTQ1LDYgQEAKIH0KIAogLyoKLSAqIHNuX2FsbG9jX3BjaV9zeXNkYXRhKCkgLSBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGEgcGNpIGNvbnRyb2xsZXIKLSAqCXdoaWNoIGlzIGV4cGVjdGVkIGFzIHRoZSBwY2lfZGV2IGFuZCBwY2lfYnVzIHN5c2RhdGEgYnkgdGhlIExpbnV4Ci0gKglQQ0kgaW5mcmFzdHJ1Y3R1cmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9jb250cm9sbGVyICpzbl9hbGxvY19wY2lfc3lzZGF0YSh2b2lkKQotewotCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGNpX3N5c2RhdGE7Ci0KLQlwY2lfc3lzZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpwY2lfc3lzZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghcGNpX3N5c2RhdGEpCi0JCUJVRygpOwotCi0JbWVtc2V0KHBjaV9zeXNkYXRhLCAwLCBzaXplb2YoKnBjaV9zeXNkYXRhKSk7Ci0JcmV0dXJuIHBjaV9zeXNkYXRhOwotfQotCi0vKgogICogc25fZml4dXBfaW9ub2RlcygpIC0gVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSBIVUIgZGF0YSBzdHJjdXR1cmUgZm9yIAogICoJZWFjaCBub2RlIGluIHRoZSBzeXN0ZW0uCiAgKi8KQEAgLTIyMSwyMiArMjExLDM0IEBACiAKIH0KIAordm9pZCBzbl9wY2lfdW5maXh1cF9zbG90KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKmhvc3RfcGNpX2RldiA9IFNOX1BDSURFVl9JTkZPKGRldiktPmhvc3RfcGNpX2RldjsKKworCXNuX2lycV91bmZpeHVwKGRldik7CisJcGNpX2Rldl9wdXQoaG9zdF9wY2lfZGV2KTsKKwlwY2lfZGV2X3B1dChkZXYpOworfQorCiAvKgogICogc25fcGNpX2ZpeHVwX3Nsb3QoKSAtIFRoaXMgcm91dGluZSBzZXRzIHVwIGEgc2xvdCdzIHJlc291cmNlcwogICogY29uc2lzdGVudCB3aXRoIHRoZSBMaW51eCBQQ0kgYWJzdHJhY3Rpb24gbGF5ZXIuICBSZXNvdXJjZXMgYWNxdWlyZWQKICAqIGZyb20gb3VyIFBDSSBwcm92aWRlciBpbmNsdWRlIFBJTyBtYXBzIHRvIEJBUiBzcGFjZSBhbmQgaW50ZXJydXB0CiAgKiBvYmplY3RzLgogICovCi1zdGF0aWMgdm9pZCBzbl9wY2lfZml4dXBfc2xvdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQordm9pZCBzbl9wY2lfZml4dXBfc2xvdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWludCBpZHg7CiAJaW50IHNlZ21lbnQgPSAwOwotCXVpbnQ2NF90IHNpemU7Ci0Jc3RydWN0IHNuX2lycV9pbmZvICpzbl9pcnFfaW5mbzsKLQlzdHJ1Y3QgcGNpX2RldiAqaG9zdF9wY2lfZGV2OwogCWludCBzdGF0dXMgPSAwOwogCXN0cnVjdCBwY2lidXNfYnVzc29mdCAqYnM7CisgCXN0cnVjdCBwY2lfYnVzICpob3N0X3BjaV9idXM7CisgCXN0cnVjdCBwY2lfZGV2ICpob3N0X3BjaV9kZXY7CisgCXN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm87CisgCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKyAJdW5zaWduZWQgaW50IGJ1c19ubywgZGV2Zm47CiAKKwlwY2lfZGV2X2dldChkZXYpOyAvKiBmb3IgdGhlIHN5c2RhdGEgcG9pbnRlciAqLwogCWRldi0+c3lzZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lkZXZfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChTTl9QQ0lERVZfSU5GTyhkZXYpIDw9IDApCiAJCUJVRygpOwkJLyogQ2Fubm90IGFmZm9yZCB0byBydW4gb3V0IG9mIG1lbW9yeSAqLwpAQCAtMjUzLDcgKzI1NSw3IEBACiAJCQkJICAgICAodTY0KSBfX3BhKFNOX1BDSURFVl9JTkZPKGRldikpLAogCQkJCSAgICAgKHU2NCkgX19wYShzbl9pcnFfaW5mbykpOwogCWlmIChzdGF0dXMpCi0JCUJVRygpOwkJLyogQ2Fubm90IGdldCBwbGF0Zm9ybSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGluZm9ybWF0aW9uICovCisJCUJVRygpOyAvKiBDYW5ub3QgZ2V0IHBsYXRmb3JtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gKi8KIAogCS8qIENvcHkgb3ZlciBQSU8gTWFwcGVkIEFkZHJlc3NlcyAqLwogCWZvciAoaWR4ID0gMDsgaWR4IDw9IFBDSV9ST01fUkVTT1VSQ0U7IGlkeCsrKSB7CkBAIC0yNzUsMTUgKzI3NywyMSBAQAogCQkJZGV2LT5yZXNvdXJjZVtpZHhdLnBhcmVudCA9ICZpb21lbV9yZXNvdXJjZTsKIAl9CiAKLQkvKiBzZXQgdXAgaG9zdCBidXMgbGlua2FnZXMgKi8KLQlicyA9IFNOX1BDSUJVU19CVVNTT0ZUKGRldi0+YnVzKTsKLQlob3N0X3BjaV9kZXYgPQotCSAgICBwY2lfZmluZF9zbG90KFNOX1BDSURFVl9JTkZPKGRldiktPnBkaV9zbG90X2hvc3RfaGFuZGxlID4+IDMyLAotCQkJICBTTl9QQ0lERVZfSU5GTyhkZXYpLT4KLQkJCSAgcGRpX3Nsb3RfaG9zdF9oYW5kbGUgJiAweGZmZmZmZmZmKTsKKwkvKgorCSAqIFVzaW5nIHRoZSBQUk9NcyB2YWx1ZXMgZm9yIHRoZSBQQ0kgaG9zdCBidXMsIGdldCB0aGUgTGludXgKKyAJICogUENJIGhvc3RfcGNpX2RldiBzdHJ1Y3QgYW5kIHNldCB1cCBob3N0IGJ1cyBsaW5rYWdlcworIAkgKi8KKworIAlidXNfbm8gPSBTTl9QQ0lERVZfSU5GTyhkZXYpLT5wZGlfc2xvdF9ob3N0X2hhbmRsZSA+PiAzMjsKKyAJZGV2Zm4gPSBTTl9QQ0lERVZfSU5GTyhkZXYpLT5wZGlfc2xvdF9ob3N0X2hhbmRsZSAmIDB4ZmZmZmZmZmY7CisgCWhvc3RfcGNpX2J1cyA9IHBjaV9maW5kX2J1cyhwY2lfZG9tYWluX25yKGRldi0+YnVzKSwgYnVzX25vKTsKKyAJaG9zdF9wY2lfZGV2ID0gcGNpX2dldF9zbG90KGhvc3RfcGNpX2J1cywgZGV2Zm4pOworCisJU05fUENJREVWX0lORk8oZGV2KS0+aG9zdF9wY2lfZGV2ID0gaG9zdF9wY2lfZGV2OwogCVNOX1BDSURFVl9JTkZPKGRldiktPnBkaV9ob3N0X3BjaWRldl9pbmZvID0KLQkgICAgU05fUENJREVWX0lORk8oaG9zdF9wY2lfZGV2KTsKKwkgICAgCQkJCQlTTl9QQ0lERVZfSU5GTyhob3N0X3BjaV9kZXYpOwogCVNOX1BDSURFVl9JTkZPKGRldiktPnBkaV9saW51eF9wY2lkZXYgPSBkZXY7CisJYnMgPSBTTl9QQ0lCVVNfQlVTU09GVChkZXYtPmJ1cyk7CiAJU05fUENJREVWX0lORk8oZGV2KS0+cGRpX3BjaWJ1c19pbmZvID0gYnM7CiAKIAlpZiAoYnMgJiYgYnMtPmJzX2FzaWNfdHlwZSA8IFBDSUlPX0FTSUNfTUFYX1RZUEVTKSB7CkBAIC0yOTcsNiArMzA1LDkgQEAKIAkJU05fUENJREVWX0lORk8oZGV2KS0+cGRpX3NuX2lycV9pbmZvID0gc25faXJxX2luZm87CiAJCWRldi0+aXJxID0gU05fUENJREVWX0lORk8oZGV2KS0+cGRpX3NuX2lycV9pbmZvLT5pcnFfaXJxOwogCQlzbl9pcnFfZml4dXAoZGV2LCBzbl9pcnFfaW5mbyk7CisJfSBlbHNlIHsKKwkJU05fUENJREVWX0lORk8oZGV2KS0+cGRpX3NuX2lycV9pbmZvID0gTlVMTDsKKwkJa2ZyZWUoc25faXJxX2luZm8pOwogCX0KIH0KIApAQCAtMzA0LDU1ICszMTUsNTcgQEAKICAqIHNuX3BjaV9jb250cm9sbGVyX2ZpeHVwKCkgLSBUaGlzIHJvdXRpbmUgc2V0cyB1cCBhIGJ1cydzIHJlc291cmNlcwogICogY29uc2lzdGVudCB3aXRoIHRoZSBMaW51eCBQQ0kgYWJzdHJhY3Rpb24gbGF5ZXIuCiAgKi8KLXN0YXRpYyB2b2lkIHNuX3BjaV9jb250cm9sbGVyX2ZpeHVwKGludCBzZWdtZW50LCBpbnQgYnVzbnVtKQordm9pZCBzbl9wY2lfY29udHJvbGxlcl9maXh1cChpbnQgc2VnbWVudCwgaW50IGJ1c251bSwgc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgbmFzaWQsIGNub2RlOwotCXN0cnVjdCBwY2lfYnVzICpidXM7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpjb250cm9sbGVyOwogCXN0cnVjdCBwY2lidXNfYnVzc29mdCAqcHJvbV9idXNzb2Z0X3B0cjsKIAlzdHJ1Y3QgaHViZGV2X2luZm8gKmh1YmRldl9pbmZvOwogCXZvaWQgKnByb3ZpZGVyX3NvZnQ7CiAJc3RydWN0IHNuX3BjaWJ1c19wcm92aWRlciAqcHJvdmlkZXI7CiAKLQlzdGF0dXMgPQotCSAgICBzYWxfZ2V0X3BjaWJ1c19pbmZvKCh1NjQpIHNlZ21lbnQsICh1NjQpIGJ1c251bSwKLQkJCQkodTY0KSBpYTY0X3RwYSgmcHJvbV9idXNzb2Z0X3B0cikpOwotCWlmIChzdGF0dXMgPiAwKSB7Ci0JCXJldHVybjsJCS8qIGJ1cyAjIGRvZXMgbm90IGV4aXN0ICovCi0JfQotCisgCXN0YXR1cyA9IHNhbF9nZXRfcGNpYnVzX2luZm8oKHU2NCkgc2VnbWVudCwgKHU2NCkgYnVzbnVtLAorIAkJCQkgICAgICh1NjQpIGlhNjRfdHBhKCZwcm9tX2J1c3NvZnRfcHRyKSk7CisgCWlmIChzdGF0dXMgPiAwKQorCQlyZXR1cm47CQkvKmJ1cyAjIGRvZXMgbm90IGV4aXN0ICovCiAJcHJvbV9idXNzb2Z0X3B0ciA9IF9fdmEocHJvbV9idXNzb2Z0X3B0cik7Ci0JY29udHJvbGxlciA9IHNuX2FsbG9jX3BjaV9zeXNkYXRhKCk7Ci0JLyogY29udHJvbGxlciBub24temVybyBpcyBCVUcnZCBpbiBzbl9hbGxvY19wY2lfc3lzZGF0YSAqLwogCi0JYnVzID0gcGNpX3NjYW5fYnVzKGJ1c251bSwgJnBjaV9yb290X29wcywgY29udHJvbGxlcik7CisgCWNvbnRyb2xsZXIgPSBrY2FsbG9jKDEsc2l6ZW9mKHN0cnVjdCBwY2lfY29udHJvbGxlciksIEdGUF9LRVJORUwpOworIAlpZiAoIWNvbnRyb2xsZXIpCisgCQlCVUcoKTsKKwogCWlmIChidXMgPT0gTlVMTCkgewotCQlyZXR1cm47CQkvKiBlcnJvciwgb3IgYnVzIGFscmVhZHkgc2Nhbm5lZCAqLworIAkJYnVzID0gcGNpX3NjYW5fYnVzKGJ1c251bSwgJnBjaV9yb290X29wcywgY29udHJvbGxlcik7CisgCQlpZiAoYnVzID09IE5VTEwpCisgCQkJcmV0dXJuOwkvKiBlcnJvciwgb3IgYnVzIGFscmVhZHkgc2Nhbm5lZCAqLworIAkJYnVzLT5zeXNkYXRhID0gTlVMTDsKIAl9CiAKKwlpZiAoYnVzLT5zeXNkYXRhKQorCQlnb3RvIGVycm9yX3JldHVybjsgLyogc3lzZGF0YSBhbHJlYWR5IGFsbG9jJ2QgKi8KKwogCS8qCiAJICogUGVyLXByb3ZpZGVyIGZpeHVwLiAgQ29waWVzIHRoZSBjb250ZW50cyBmcm9tIHByb20gdG8gbG9jYWwKIAkgKiBhcmVhIGFuZCBsaW5rcyBTTl9QQ0lCVVNfQlVTU09GVCgpLgogCSAqLwogCi0JaWYgKHByb21fYnVzc29mdF9wdHItPmJzX2FzaWNfdHlwZSA+PSBQQ0lJT19BU0lDX01BWF9UWVBFUykgeworCWlmIChwcm9tX2J1c3NvZnRfcHRyLT5ic19hc2ljX3R5cGUgPj0gUENJSU9fQVNJQ19NQVhfVFlQRVMpCiAJCXJldHVybjsJCS8qIHVuc3VwcG9ydGVkIGFzaWMgdHlwZSAqLwotCX0KKworCWlmIChwcm9tX2J1c3NvZnRfcHRyLT5ic19hc2ljX3R5cGUgPT0gUENJSU9fQVNJQ19UWVBFX1BQQikKKwkJZ290byBlcnJvcl9yZXR1cm47IC8qIG5vIGZ1cnRoZXIgZml4dXAgbmVjZXNzYXJ5ICovCiAKIAlwcm92aWRlciA9IHNuX3BjaV9wcm92aWRlcltwcm9tX2J1c3NvZnRfcHRyLT5ic19hc2ljX3R5cGVdOwotCWlmIChwcm92aWRlciA9PSBOVUxMKSB7CisJaWYgKHByb3ZpZGVyID09IE5VTEwpCiAJCXJldHVybjsJCS8qIG5vIHByb3ZpZGVyIHJlZ2lzdGVyZCBmb3IgdGhpcyBhc2ljICovCi0JfQogCiAJcHJvdmlkZXJfc29mdCA9IE5VTEw7Ci0JaWYgKHByb3ZpZGVyLT5idXNfZml4dXApIHsKKwlpZiAocHJvdmlkZXItPmJ1c19maXh1cCkKIAkJcHJvdmlkZXJfc29mdCA9ICgqcHJvdmlkZXItPmJ1c19maXh1cCkgKHByb21fYnVzc29mdF9wdHIpOwotCX0KIAotCWlmIChwcm92aWRlcl9zb2Z0ID09IE5VTEwpIHsKKwlpZiAocHJvdmlkZXJfc29mdCA9PSBOVUxMKQogCQlyZXR1cm47CQkvKiBmaXh1cCBmYWlsZWQgb3Igbm90IGFwcGxpY2FibGUgKi8KLQl9CiAKIAkvKgogCSAqIEdlbmVyaWMgYnVzIGZpeHVwIGdvZXMgaGVyZS4gIERvbid0IHJlZmVyZW5jZSBwcm9tX2J1c3NvZnRfcHRyCkBAIC0zNjEsMTIgKzM3NCw0NyBAQAogCiAJYnVzLT5zeXNkYXRhID0gY29udHJvbGxlcjsKIAlQQ0lfQ09OVFJPTExFUihidXMpLT5wbGF0Zm9ybV9kYXRhID0gcHJvdmlkZXJfc29mdDsKLQogCW5hc2lkID0gTkFTSURfR0VUKFNOX1BDSUJVU19CVVNTT0ZUKGJ1cyktPmJzX2Jhc2UpOwogCWNub2RlID0gbmFzaWRfdG9fY25vZGVpZChuYXNpZCk7CiAJaHViZGV2X2luZm8gPSAoc3RydWN0IGh1YmRldl9pbmZvICopKE5PREVQREEoY25vZGUpLT5wZGluZm8pOwogCVNOX1BDSUJVU19CVVNTT0ZUKGJ1cyktPmJzX3h3aWRnZXRfaW5mbyA9CiAJICAgICYoaHViZGV2X2luZm8tPmhkaV94d2lkZ2V0X2luZm9bU05fUENJQlVTX0JVU1NPRlQoYnVzKS0+YnNfeGlkXSk7CisKKwlyZXR1cm47CisKK2Vycm9yX3JldHVybjoKKworCWtmcmVlKGNvbnRyb2xsZXIpOworCXJldHVybjsKK30KKwordm9pZCBzbl9idXNfc3RvcmVfc3lzZGF0YShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBzeXNkYXRhX2VsICplbGVtZW50OworCisJZWxlbWVudCA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzeXNkYXRhX2VsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbGVtZW50KSB7CisJCWRldl9kYmcoZGV2LCAiJXM6IG91dCBvZiBtZW1vcnkhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWVsZW1lbnQtPnN5c2RhdGEgPSBkZXYtPnN5c2RhdGE7CisJbGlzdF9hZGQoJmVsZW1lbnQtPmVudHJ5LCAmc25fc3lzZGF0YV9saXN0KTsKK30KKwordm9pZCBzbl9idXNfZnJlZV9zeXNkYXRhKHZvaWQpCit7CisJc3RydWN0IHN5c2RhdGFfZWwgKmVsZW1lbnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworc25fc3lzZGF0YV9mcmVlX3N0YXJ0OgorCWxpc3RfZm9yX2VhY2gobGlzdCwgJnNuX3N5c2RhdGFfbGlzdCkgeworCQllbGVtZW50ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgc3lzZGF0YV9lbCwgZW50cnkpOworCQlsaXN0X2RlbCgmZWxlbWVudC0+ZW50cnkpOworCQlrZnJlZShlbGVtZW50LT5zeXNkYXRhKTsKKwkJa2ZyZWUoZWxlbWVudCk7CisJCWdvdG8gc25fc3lzZGF0YV9mcmVlX3N0YXJ0OworCX0KKwlyZXR1cm47CiB9CiAKIC8qCkBAIC00MDMsMjAgKzQ1MSwxNyBAQAogCSAqLwogCWlhNjRfbWF4X2lvbW11X21lcmdlX21hc2sgPSB+UEFHRV9NQVNLOwogCXNuX2ZpeHVwX2lvbm9kZXMoKTsKLQlzbl9pcnEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25faXJxX2luZm8gKikgKiBOUl9JUlFTLCBHRlBfS0VSTkVMKTsKLQlpZiAoc25faXJxIDw9IDApCi0JCUJVRygpOwkJLyogQ2Fubm8gYWZmb3JkIHRvIHJ1biBvdXQgb2YgbWVtb3J5LiAqLwotCW1lbXNldChzbl9pcnEsIDAsIHNpemVvZihzdHJ1Y3Qgc25faXJxX2luZm8gKikgKiBOUl9JUlFTKTsKLQorCXNuX2lycV9saF9pbml0KCk7CisJSU5JVF9MSVNUX0hFQUQoJnNuX3N5c2RhdGFfbGlzdCk7CiAJc25faW5pdF9jcGVpX3RpbWVyKCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXJlZ2lzdGVyX3NuX3Byb2NmcygpOwogI2VuZGlmCiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU0VTX1RPX1NDQU47IGkrKykgewotCQlzbl9wY2lfY29udHJvbGxlcl9maXh1cCgwLCBpKTsKLQl9CisJLyogYnVzc2VzIGFyZSBub3Qga25vd24geWV0IC4uLiAqLworCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTRVNfVE9fU0NBTjsgaSsrKQorCQlzbl9wY2lfY29udHJvbGxlcl9maXh1cCgwLCBpLCBOVUxMKTsKIAogCS8qCiAJICogR2VuZXJpYyBMaW51eCBQQ0kgTGF5ZXIgaGFzIGNyZWF0ZWQgdGhlIHBjaV9idXMgYW5kIHBjaV9kZXYgCkBAIC00MjUsOSArNDcwLDggQEAKIAkgKi8KIAogCXdoaWxlICgocGNpX2RldiA9Ci0JCXBjaV9maW5kX2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgIT0gTlVMTCkgeworCQlwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgIT0gTlVMTCkKIAkJc25fcGNpX2ZpeHVwX3Nsb3QocGNpX2Rldik7Ci0JfQogCiAJc25faW9pZl9pbml0ZWQgPSAxOwkvKiBzbiBJL08gaW5mcmFzdHJ1Y3R1cmUgbm93IGluaXRpYWxpemVkICovCiAKQEAgLTQ2OSwzICs1MTMsOCBAQAogfQogCiBzdWJzeXNfaW5pdGNhbGwoc25fcGNpX2luaXQpOworRVhQT1JUX1NZTUJPTChzbl9wY2lfZml4dXBfc2xvdCk7CitFWFBPUlRfU1lNQk9MKHNuX3BjaV91bmZpeHVwX3Nsb3QpOworRVhQT1JUX1NZTUJPTChzbl9wY2lfY29udHJvbGxlcl9maXh1cCk7CitFWFBPUlRfU1lNQk9MKHNuX2J1c19zdG9yZV9zeXNkYXRhKTsKK0VYUE9SVF9TWU1CT0woc25fYnVzX2ZyZWVfc3lzZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pcnEuYwppbmRleCAwZjRlODEzOC4uODRkMjc2YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jCkBAIC05LDEzICs5LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS9zbi9pbnRyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KICNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgotI2luY2x1ZGUgInh0YWxrL3h3aWRnZXRkZXYuaCIKKyNpbmNsdWRlIDxhc20vc24vaW50ci5oPgorI2luY2x1ZGUgPGFzbS9zbi9wY2licl9wcm92aWRlci5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lkZXYuaD4KLSNpbmNsdWRlICJwY2kvcGNpYnJfcHJvdmlkZXIuaCIKICNpbmNsdWRlIDxhc20vc24vc2h1Yl9tbXIuaD4KICNpbmNsdWRlIDxhc20vc24vc25fc2FsLmg+CiAKQEAgLTI1LDcgKzI1LDggQEAKIAogZXh0ZXJuIGludCBzbl9mb3JjZV9pbnRlcnJ1cHRfZmxhZzsKIGV4dGVybiBpbnQgc25faW9pZl9pbml0ZWQ7Ci1zdHJ1Y3Qgc25faXJxX2luZm8gKipzbl9pcnE7CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqKnNuX2lycV9saDsKK3N0YXRpYyBzcGlubG9ja190IHNuX2lycV9pbmZvX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7IC8qIG5vbi1JUlEgbG9jayAqLwogCiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHNuX2ludHJfYWxsb2MobmFzaWRfdCBsb2NhbF9uYXNpZCwgaW50IGxvY2FsX3dpZGdldCwKIAkJCQkgICAgIHU2NCBzbl9pcnFfaW5mbywKQEAgLTEwMSw3ICsxMDIsNyBAQAogCQluYXNpZCA9IGdldF9uYXNpZCgpOwogCQlldmVudF9vY2N1cnJlZCA9IEhVQl9MKCh1aW50NjRfdCAqKSBHTE9CQUxfTU1SX0FERFIKIAkJCQkgICAgICAgKG5hc2lkLCBTSF9FVkVOVF9PQ0NVUlJFRCkpOwotCQkvKiBJZiB0aGUgVUFSVCBiaXQgaXMgc2V0IGhlcmUsIHdlIG1heSBoYXZlIHJlY2VpdmVkIGFuIAorCQkvKiBJZiB0aGUgVUFSVCBiaXQgaXMgc2V0IGhlcmUsIHdlIG1heSBoYXZlIHJlY2VpdmVkIGFuCiAJCSAqIGludGVycnVwdCBmcm9tIHRoZSBVQVJUIHRoYXQgdGhlIGRyaXZlciBtaXNzZWQuICBUbwogCQkgKiBtYWtlIHN1cmUsIHdlIElQSSBvdXJzZWx2ZXMgdG8gZm9yY2UgdXMgdG8gbG9vayBhZ2Fpbi4KIAkJICovCkBAIC0xMTUsODIgKzExNiw4NCBAQAogCQlmb3JjZV9pbnRlcnJ1cHQoaXJxKTsKIH0KIAorc3RhdGljIHZvaWQgc25faXJxX2luZm9fZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpOworCiBzdGF0aWMgdm9pZCBzbl9zZXRfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogewotCXN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm8gPSBzbl9pcnFbaXJxXTsKLQlzdHJ1Y3Qgc25faXJxX2luZm8gKnRtcF9zbl9pcnFfaW5mbzsKKwlzdHJ1Y3Qgc25faXJxX2luZm8gKnNuX2lycV9pbmZvLCAqc25faXJxX2luZm9fc2FmZTsKIAlpbnQgY3B1aWQsIGNwdXBoeXM7Ci0JbmFzaWRfdCB0X25hc2lkOwkvKiBuYXNpZCB0byB0YXJnZXQgKi8KLQlpbnQgdF9zbGljZTsJCS8qIHNsaWNlIHRvIHRhcmdldCAqLwotCi0JLyogYWxsb2NhdGUgYSB0ZW1wIHNuX2lycV9pbmZvIHN0cnVjdCB0byBnZXQgbmV3IHRhcmdldCBpbmZvICovCi0JdG1wX3NuX2lycV9pbmZvID0ga21hbGxvYyhzaXplb2YoKnRtcF9zbl9pcnFfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghdG1wX3NuX2lycV9pbmZvKQotCQlyZXR1cm47CiAKIAljcHVpZCA9IGZpcnN0X2NwdShtYXNrKTsKIAljcHVwaHlzID0gY3B1X3BoeXNpY2FsX2lkKGNwdWlkKTsKLQl0X25hc2lkID0gY3B1aWRfdG9fbmFzaWQoY3B1aWQpOwotCXRfc2xpY2UgPSBjcHVpZF90b19zbGljZShjcHVpZCk7CiAKLQl3aGlsZSAoc25faXJxX2luZm8pIHsKLQkJaW50IHN0YXR1czsKLQkJaW50IGxvY2FsX3dpZGdldDsKLQkJdWludDY0X3QgYnJpZGdlID0gKHVpbnQ2NF90KSBzbl9pcnFfaW5mby0+aXJxX2JyaWRnZTsKLQkJbmFzaWRfdCBsb2NhbF9uYXNpZCA9IE5BU0lEX0dFVChicmlkZ2UpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbl9pcnFfaW5mbywgc25faXJxX2luZm9fc2FmZSwKKwkJCQkgc25faXJxX2xoW2lycV0sIGxpc3QpIHsKKwkJdWludDY0X3QgYnJpZGdlOworCQlpbnQgbG9jYWxfd2lkZ2V0LCBzdGF0dXM7CisJCW5hc2lkX3QgbG9jYWxfbmFzaWQ7CisJCXN0cnVjdCBzbl9pcnFfaW5mbyAqbmV3X2lycV9pbmZvOwogCi0JCWlmICghYnJpZGdlKQotCQkJYnJlYWs7CS8qIGlycSBpcyBub3QgYSBkZXZpY2UgaW50ZXJydXB0ICovCisJCW5ld19pcnFfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbl9pcnFfaW5mbyksIEdGUF9BVE9NSUMpOworCQlpZiAobmV3X2lycV9pbmZvID09IE5VTEwpCisJCQlicmVhazsKKwkJbWVtY3B5KG5ld19pcnFfaW5mbywgc25faXJxX2luZm8sIHNpemVvZihzdHJ1Y3Qgc25faXJxX2luZm8pKTsKKworCQlicmlkZ2UgPSAodWludDY0X3QpIG5ld19pcnFfaW5mby0+aXJxX2JyaWRnZTsKKwkJaWYgKCFicmlkZ2UpIHsKKwkJCWtmcmVlKG5ld19pcnFfaW5mbyk7CisJCQlicmVhazsgLyogaXJxIGlzIG5vdCBhIGRldmljZSBpbnRlcnJ1cHQgKi8KKwkJfQorCisJCWxvY2FsX25hc2lkID0gTkFTSURfR0VUKGJyaWRnZSk7CiAKIAkJaWYgKGxvY2FsX25hc2lkICYgMSkKIAkJCWxvY2FsX3dpZGdldCA9IFRJT19TV0lOX1dJREdFVE5VTShicmlkZ2UpOwogCQllbHNlCiAJCQlsb2NhbF93aWRnZXQgPSBTV0lOX1dJREdFVE5VTShicmlkZ2UpOwogCi0JCS8qIEZyZWUgdGhlIG9sZCBQUk9NIHNuX2lycV9pbmZvIHN0cnVjdHVyZSAqLwotCQlzbl9pbnRyX2ZyZWUobG9jYWxfbmFzaWQsIGxvY2FsX3dpZGdldCwgc25faXJxX2luZm8pOworCQkvKiBGcmVlIHRoZSBvbGQgUFJPTSBuZXdfaXJxX2luZm8gc3RydWN0dXJlICovCisJCXNuX2ludHJfZnJlZShsb2NhbF9uYXNpZCwgbG9jYWxfd2lkZ2V0LCBuZXdfaXJxX2luZm8pOworCQkvKiBVcGRhdGUga2VybmVscyBuZXdfaXJxX2luZm8gd2l0aCBuZXcgdGFyZ2V0IGluZm8gKi8KKwkJdW5yZWdpc3Rlcl9pbnRyX3BkYShuZXdfaXJxX2luZm8pOwogCi0JCS8qIGFsbG9jYXRlIGEgbmV3IFBST00gc25faXJxX2luZm8gc3RydWN0ICovCisJCS8qIGFsbG9jYXRlIGEgbmV3IFBST00gbmV3X2lycV9pbmZvIHN0cnVjdCAqLwogCQlzdGF0dXMgPSBzbl9pbnRyX2FsbG9jKGxvY2FsX25hc2lkLCBsb2NhbF93aWRnZXQsCi0JCQkJICAgICAgIF9fcGEodG1wX3NuX2lycV9pbmZvKSwgaXJxLCB0X25hc2lkLAotCQkJCSAgICAgICB0X3NsaWNlKTsKKwkJCQkgICAgICAgX19wYShuZXdfaXJxX2luZm8pLCBpcnEsCisJCQkJICAgICAgIGNwdWlkX3RvX25hc2lkKGNwdWlkKSwKKwkJCQkgICAgICAgY3B1aWRfdG9fc2xpY2UoY3B1aWQpKTsKIAotCQlpZiAoc3RhdHVzID09IDApIHsKLQkJCS8qIFVwZGF0ZSBrZXJuZWxzIHNuX2lycV9pbmZvIHdpdGggbmV3IHRhcmdldCBpbmZvICovCi0JCQl1bnJlZ2lzdGVyX2ludHJfcGRhKHNuX2lycV9pbmZvKTsKLQkJCXNuX2lycV9pbmZvLT5pcnFfY3B1aWQgPSBjcHVpZDsKLQkJCXNuX2lycV9pbmZvLT5pcnFfbmFzaWQgPSB0X25hc2lkOwotCQkJc25faXJxX2luZm8tPmlycV9zbGljZSA9IHRfc2xpY2U7Ci0JCQlzbl9pcnFfaW5mby0+aXJxX3h0YWxrYWRkciA9Ci0JCQkgICAgdG1wX3NuX2lycV9pbmZvLT5pcnFfeHRhbGthZGRyOwotCQkJc25faXJxX2luZm8tPmlycV9jb29raWUgPSB0bXBfc25faXJxX2luZm8tPmlycV9jb29raWU7Ci0JCQlyZWdpc3Rlcl9pbnRyX3BkYShzbl9pcnFfaW5mbyk7CisJCS8qIFNBTCBjYWxsIGZhaWxlZCAqLworCQlpZiAoc3RhdHVzKSB7CisJCQlrZnJlZShuZXdfaXJxX2luZm8pOworCQkJYnJlYWs7CisJCX0KIAotCQkJaWYgKElTX1BDSV9CUklER0VfQVNJQyhzbl9pcnFfaW5mby0+aXJxX2JyaWRnZV90eXBlKSkgewotCQkJCXBjaWJyX2NoYW5nZV9kZXZpY2VzX2lycShzbl9pcnFfaW5mbyk7Ci0JCQl9CisJCW5ld19pcnFfaW5mby0+aXJxX2NwdWlkID0gY3B1aWQ7CisJCXJlZ2lzdGVyX2ludHJfcGRhKG5ld19pcnFfaW5mbyk7CiAKLQkJCXNuX2lycV9pbmZvID0gc25faXJxX2luZm8tPmlycV9uZXh0OworCQlpZiAoSVNfUENJX0JSSURHRV9BU0lDKG5ld19pcnFfaW5mby0+aXJxX2JyaWRnZV90eXBlKSkKKwkJCXBjaWJyX2NoYW5nZV9kZXZpY2VzX2lycShuZXdfaXJxX2luZm8pOworCisJCXNwaW5fbG9jaygmc25faXJxX2luZm9fbG9jayk7CisJCWxpc3RfcmVwbGFjZV9yY3UoJnNuX2lycV9pbmZvLT5saXN0LCAmbmV3X2lycV9pbmZvLT5saXN0KTsKKwkJc3Bpbl91bmxvY2soJnNuX2lycV9pbmZvX2xvY2spOworCQljYWxsX3JjdSgmc25faXJxX2luZm8tPnJjdSwgc25faXJxX2luZm9fZnJlZSk7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JCQlzZXRfaXJxX2FmZmluaXR5X2luZm8oKGlycSAmIDB4ZmYpLCBjcHVwaHlzLCAwKTsKKwkJc2V0X2lycV9hZmZpbml0eV9pbmZvKChpcnEgJiAweGZmKSwgY3B1cGh5cywgMCk7CiAjZW5kaWYKLQkJfSBlbHNlIHsKLQkJCWJyZWFrOwkvKiBzbnBfYWZmaW5pdHkgZmFpbGVkIHRoZSBpbnRyX2FsbG9jICovCi0JCX0KIAl9Ci0Ja2ZyZWUodG1wX3NuX2lycV9pbmZvKTsKIH0KIAogc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGlycV90eXBlX3NuID0gewotCSJTTiBodWIiLAotCXNuX3N0YXJ0dXBfaXJxLAotCXNuX3NodXRkb3duX2lycSwKLQlzbl9lbmFibGVfaXJxLAotCXNuX2Rpc2FibGVfaXJxLAotCXNuX2Fja19pcnEsCi0Jc25fZW5kX2lycSwKLQlzbl9zZXRfYWZmaW5pdHlfaXJxCisJLnR5cGVuYW1lCT0gIlNOIGh1YiIsCisJLnN0YXJ0dXAJPSBzbl9zdGFydHVwX2lycSwKKwkuc2h1dGRvd24JPSBzbl9zaHV0ZG93bl9pcnEsCisJLmVuYWJsZQkJPSBzbl9lbmFibGVfaXJxLAorCS5kaXNhYmxlCT0gc25fZGlzYWJsZV9pcnEsCisJLmFjawkJPSBzbl9hY2tfaXJxLAorCS5lbmQJCT0gc25fZW5kX2lycSwKKwkuc2V0X2FmZmluaXR5CT0gc25fc2V0X2FmZmluaXR5X2lycQogfTsKIAogdW5zaWduZWQgaW50IHNuX2xvY2FsX3ZlY3Rvcl90b19pcnEodTggdmVjdG9yKQpAQCAtMjMxLDE5ICsyMzQsMTggQEAKIAlzdHJ1Y3Qgc25faXJxX2luZm8gKnRtcF9pcnFfaW5mbzsKIAlpbnQgaSwgZm91bmRtYXRjaDsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAlpZiAocGRhY3B1KGNwdSktPnNuX2xhc3RfaXJxID09IGlycSkgewogCQlmb3VuZG1hdGNoID0gMDsKLQkJZm9yIChpID0gcGRhY3B1KGNwdSktPnNuX2xhc3RfaXJxIC0gMTsgaTsgaS0tKSB7Ci0JCQl0bXBfaXJxX2luZm8gPSBzbl9pcnFbaV07Ci0JCQl3aGlsZSAodG1wX2lycV9pbmZvKSB7CisJCWZvciAoaSA9IHBkYWNwdShjcHUpLT5zbl9sYXN0X2lycSAtIDE7CisJCSAgICAgaSAmJiAhZm91bmRtYXRjaDsgaS0tKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXBfaXJxX2luZm8sCisJCQkJCQlzbl9pcnFfbGhbaV0sCisJCQkJCQlsaXN0KSB7CiAJCQkJaWYgKHRtcF9pcnFfaW5mby0+aXJxX2NwdWlkID09IGNwdSkgewotCQkJCQlmb3VuZG1hdGNoKys7CisJCQkJCWZvdW5kbWF0Y2ggPSAxOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJdG1wX2lycV9pbmZvID0gdG1wX2lycV9pbmZvLT5pcnFfbmV4dDsKLQkJCX0KLQkJCWlmIChmb3VuZG1hdGNoKSB7Ci0JCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJcGRhY3B1KGNwdSktPnNuX2xhc3RfaXJxID0gaTsKQEAgLTI1MSw2MCArMjUzLDI3IEBACiAKIAlpZiAocGRhY3B1KGNwdSktPnNuX2ZpcnN0X2lycSA9PSBpcnEpIHsKIAkJZm91bmRtYXRjaCA9IDA7Ci0JCWZvciAoaSA9IHBkYWNwdShjcHUpLT5zbl9maXJzdF9pcnEgKyAxOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCQl0bXBfaXJxX2luZm8gPSBzbl9pcnFbaV07Ci0JCQl3aGlsZSAodG1wX2lycV9pbmZvKSB7CisJCWZvciAoaSA9IHBkYWNwdShjcHUpLT5zbl9maXJzdF9pcnEgKyAxOworCQkgICAgIGkgPCBOUl9JUlFTICYmICFmb3VuZG1hdGNoOyBpKyspIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcF9pcnFfaW5mbywKKwkJCQkJCXNuX2lycV9saFtpXSwKKwkJCQkJCWxpc3QpIHsKIAkJCQlpZiAodG1wX2lycV9pbmZvLT5pcnFfY3B1aWQgPT0gY3B1KSB7Ci0JCQkJCWZvdW5kbWF0Y2grKzsKKwkJCQkJZm91bmRtYXRjaCA9IDE7CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQl0bXBfaXJxX2luZm8gPSB0bXBfaXJxX2luZm8tPmlycV9uZXh0OwotCQkJfQotCQkJaWYgKGZvdW5kbWF0Y2gpIHsKLQkJCQlicmVhazsKIAkJCX0KIAkJfQogCQlwZGFjcHUoY3B1KS0+c25fZmlyc3RfaXJxID0gKChpID09IE5SX0lSUVMpID8gMCA6IGkpOwogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RydWN0IHNuX2lycV9pbmZvICpzbl9pcnFfYWxsb2MobmFzaWRfdCBsb2NhbF9uYXNpZCwgaW50IGxvY2FsX3dpZGdldCwgaW50IGlycSwKLQkJCQkgbmFzaWRfdCBuYXNpZCwgaW50IHNsaWNlKQorc3RhdGljIHZvaWQgc25faXJxX2luZm9fZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHNuX2lycV9pbmZvICpzbl9pcnFfaW5mbzsKLQlpbnQgc3RhdHVzOwogCi0Jc25faXJxX2luZm8gPSBrbWFsbG9jKHNpemVvZigqc25faXJxX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoc25faXJxX2luZm8gPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltZW1zZXQoc25faXJxX2luZm8sIDB4MCwgc2l6ZW9mKCpzbl9pcnFfaW5mbykpOwotCi0Jc3RhdHVzID0KLQkgICAgc25faW50cl9hbGxvYyhsb2NhbF9uYXNpZCwgbG9jYWxfd2lkZ2V0LCBfX3BhKHNuX2lycV9pbmZvKSwgaXJxLAotCQkJICBuYXNpZCwgc2xpY2UpOwotCi0JaWYgKHN0YXR1cykgewotCQlrZnJlZShzbl9pcnFfaW5mbyk7Ci0JCXJldHVybiBOVUxMOwotCX0gZWxzZSB7Ci0JCXJldHVybiBzbl9pcnFfaW5mbzsKLQl9Ci19Ci0KLXZvaWQgc25faXJxX2ZyZWUoc3RydWN0IHNuX2lycV9pbmZvICpzbl9pcnFfaW5mbykKLXsKLQl1aW50NjRfdCBicmlkZ2UgPSAodWludDY0X3QpIHNuX2lycV9pbmZvLT5pcnFfYnJpZGdlOwotCW5hc2lkX3QgbG9jYWxfbmFzaWQgPSBOQVNJRF9HRVQoYnJpZGdlKTsKLQlpbnQgbG9jYWxfd2lkZ2V0OwotCi0JaWYgKGxvY2FsX25hc2lkICYgMSkJLyogdGlvIGNoZWNrICovCi0JCWxvY2FsX3dpZGdldCA9IFRJT19TV0lOX1dJREdFVE5VTShicmlkZ2UpOwotCWVsc2UKLQkJbG9jYWxfd2lkZ2V0ID0gU1dJTl9XSURHRVROVU0oYnJpZGdlKTsKLQotCXNuX2ludHJfZnJlZShsb2NhbF9uYXNpZCwgbG9jYWxfd2lkZ2V0LCBzbl9pcnFfaW5mbyk7Ci0KKwlzbl9pcnFfaW5mbyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgc25faXJxX2luZm8sIHJjdSk7CiAJa2ZyZWUoc25faXJxX2luZm8pOwogfQogCkBAIC0zMTQsMzAgKzI4Myw1NCBAQAogCWludCBzbGljZSA9IHNuX2lycV9pbmZvLT5pcnFfc2xpY2U7CiAJaW50IGNwdSA9IG5hc2lkX3NsaWNlX3RvX2NwdWlkKG5hc2lkLCBzbGljZSk7CiAKKwlwY2lfZGV2X2dldChwY2lfZGV2KTsKIAlzbl9pcnFfaW5mby0+aXJxX2NwdWlkID0gY3B1OwogCXNuX2lycV9pbmZvLT5pcnFfcGNpaW9pbmZvID0gU05fUENJREVWX0lORk8ocGNpX2Rldik7CiAKIAkvKiBsaW5rIGl0IGludG8gdGhlIHNuX2lycVtpcnFdIGxpc3QgKi8KLQlzbl9pcnFfaW5mby0+aXJxX25leHQgPSBzbl9pcnFbc25faXJxX2luZm8tPmlycV9pcnFdOwotCXNuX2lycVtzbl9pcnFfaW5mby0+aXJxX2lycV0gPSBzbl9pcnFfaW5mbzsKKwlzcGluX2xvY2soJnNuX2lycV9pbmZvX2xvY2spOworCWxpc3RfYWRkX3JjdSgmc25faXJxX2luZm8tPmxpc3QsIHNuX2lycV9saFtzbl9pcnFfaW5mby0+aXJxX2lycV0pOworCXNwaW5fdW5sb2NrKCZzbl9pcnFfaW5mb19sb2NrKTsKIAogCSh2b2lkKXJlZ2lzdGVyX2ludHJfcGRhKHNuX2lycV9pbmZvKTsKIH0KIAordm9pZCBzbl9pcnFfdW5maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3sKKwlzdHJ1Y3Qgc25faXJxX2luZm8gKnNuX2lycV9pbmZvOworCisJLyogT25seSBjbGVhbnVwIElSUSBzdHVmZiBpZiB0aGlzIGRldmljZSBoYXMgYSBob3N0IGJ1cyBjb250ZXh0ICovCisJaWYgKCFTTl9QQ0lERVZfQlVTU09GVChwY2lfZGV2KSkKKwkJcmV0dXJuOworCisJc25faXJxX2luZm8gPSBTTl9QQ0lERVZfSU5GTyhwY2lfZGV2KS0+cGRpX3NuX2lycV9pbmZvOworCWlmICghc25faXJxX2luZm8gfHwgIXNuX2lycV9pbmZvLT5pcnFfaXJxKSB7CisJCWtmcmVlKHNuX2lycV9pbmZvKTsKKwkJcmV0dXJuOworCX0KKworCXVucmVnaXN0ZXJfaW50cl9wZGEoc25faXJxX2luZm8pOworCXNwaW5fbG9jaygmc25faXJxX2luZm9fbG9jayk7CisJbGlzdF9kZWxfcmN1KCZzbl9pcnFfaW5mby0+bGlzdCk7CisJc3Bpbl91bmxvY2soJnNuX2lycV9pbmZvX2xvY2spOworCWNhbGxfcmN1KCZzbl9pcnFfaW5mby0+cmN1LCBzbl9pcnFfaW5mb19mcmVlKTsKKwlwY2lfZGV2X3B1dChwY2lfZGV2KTsKK30KKwogc3RhdGljIHZvaWQgZm9yY2VfaW50ZXJydXB0KGludCBpcnEpCiB7CiAJc3RydWN0IHNuX2lycV9pbmZvICpzbl9pcnFfaW5mbzsKIAogCWlmICghc25faW9pZl9pbml0ZWQpCiAJCXJldHVybjsKLQlzbl9pcnFfaW5mbyA9IHNuX2lycVtpcnFdOwotCXdoaWxlIChzbl9pcnFfaW5mbykgeworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNuX2lycV9pbmZvLCBzbl9pcnFfbGhbaXJxXSwgbGlzdCkgewogCQlpZiAoSVNfUENJX0JSSURHRV9BU0lDKHNuX2lycV9pbmZvLT5pcnFfYnJpZGdlX3R5cGUpICYmCi0JCSAgICAoc25faXJxX2luZm8tPmlycV9icmlkZ2UgIT0gTlVMTCkpIHsKKwkJICAgIChzbl9pcnFfaW5mby0+aXJxX2JyaWRnZSAhPSBOVUxMKSkKIAkJCXBjaWJyX2ZvcmNlX2ludGVycnVwdChzbl9pcnFfaW5mbyk7Ci0JCX0KLQkJc25faXJxX2luZm8gPSBzbl9pcnFfaW5mby0+aXJxX25leHQ7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKgpAQCAtNDAyLDE5ICszOTUsNDEgQEAKIAogdm9pZCBzbl9sYl9pbnRfd2FyX2NoZWNrKHZvaWQpCiB7CisJc3RydWN0IHNuX2lycV9pbmZvICpzbl9pcnFfaW5mbzsKIAlpbnQgaTsKIAogCWlmICghc25faW9pZl9pbml0ZWQgfHwgcGRhLT5zbl9maXJzdF9pcnEgPT0gMCkKIAkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IHBkYS0+c25fZmlyc3RfaXJxOyBpIDw9IHBkYS0+c25fbGFzdF9pcnE7IGkrKykgewotCQlzdHJ1Y3Qgc25faXJxX2luZm8gKnNuX2lycV9pbmZvID0gc25faXJxW2ldOwotCQl3aGlsZSAoc25faXJxX2luZm8pIHsKLQkJCS8qIE9ubHkgY2FsbCBmb3IgUENJIGJyaWRnZXMgdGhhdCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNuX2lycV9pbmZvLCBzbl9pcnFfbGhbaV0sIGxpc3QpIHsKKwkJCS8qCisJCQkgKiBPbmx5IGNhbGwgZm9yIFBDSSBicmlkZ2VzIHRoYXQgYXJlIGZ1bGx5CisJCQkgKiBpbml0aWFsaXplZC4KKwkJCSAqLwogCQkJaWYgKElTX1BDSV9CUklER0VfQVNJQyhzbl9pcnFfaW5mby0+aXJxX2JyaWRnZV90eXBlKSAmJgotCQkJICAgIChzbl9pcnFfaW5mby0+aXJxX2JyaWRnZSAhPSBOVUxMKSkgeworCQkJICAgIChzbl9pcnFfaW5mby0+aXJxX2JyaWRnZSAhPSBOVUxMKSkKIAkJCQlzbl9jaGVja19pbnRyKGksIHNuX2lycV9pbmZvKTsKLQkJCX0KLQkJCXNuX2lycV9pbmZvID0gc25faXJxX2luZm8tPmlycV9uZXh0OwogCQl9CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOworfQorCit2b2lkIHNuX2lycV9saF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlzbl9pcnFfbGggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkICopICogTlJfSVJRUywgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbl9pcnFfbGgpCisJCXBhbmljKCJTTiBQQ0kgSU5JVDogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgUENJIGluaXRcbiIpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgeworCQlzbl9pcnFfbGhbaV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc25faXJxX2xoW2ldKQorCQkJcGFuaWMoIlNOIFBDSSBJTklUOiBGYWlsZWQgSVJRIG1lbW9yeSBhbGxvY2F0aW9uXG4iKTsKKworCQlJTklUX0xJU1RfSEVBRChzbl9pcnFfbGhbaV0pOworCX0KKwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCmluZGV4IDIyZTEwZDIuLjdjN2ZlNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKQEAgLTI3MCw3ICsyNzAsNyBAQAogewogCWxvbmcgc3RhdHVzLCB0aWNrc19wZXJfc2VjLCBkcmlmdDsKIAlpbnQgcHhtOwotCWludCBtYWpvciA9IHNuX3NhbF9yZXZfbWFqb3IoKSwgbWlub3IgPSBzbl9zYWxfcmV2X21pbm9yKCk7CisJdTMyIHZlcnNpb24gPSBzbl9zYWxfcmV2KCk7CiAJZXh0ZXJuIHZvaWQgc25fY3B1X2luaXQodm9pZCk7CiAKIAlpYTY0X3NuX3BsYXRfc2V0X2Vycm9yX2hhbmRsaW5nX2ZlYXR1cmVzKCk7CkBAIC0zMDgsMjIgKzMwOCwyMSBAQAogCSAqIHN1cHBvcnQgaGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGxpc3RlbiB0byBmYWlsZWQga2V5Ym9hcmQgcHJvYmUKIAkgKiBtZXNzYWdlcy4KIAkgKi8KLQlpZiAoKG1ham9yIDwgMiB8fCAobWFqb3IgPT0gMiAmJiBtaW5vciA8PSA5KSkgJiYKLQkgICAgYWNwaV9rYmRfY29udHJvbGxlcl9wcmVzZW50KSB7CisJaWYgKHZlcnNpb24gPD0gMHgwMjA5ICYmIGFjcGlfa2JkX2NvbnRyb2xsZXJfcHJlc2VudCkgewogCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgbGVnYWN5IGtleWJvYXJkIHN1cHBvcnQgYXMgcHJvbSAiCiAJCSAgICAgICAiaXMgdG9vIG9sZCBhbmQgZG9lc24ndCBwcm92aWRlIEZBRFRcbiIpOwogCQlhY3BpX2tiZF9jb250cm9sbGVyX3ByZXNlbnQgPSAwOwogCX0KIAotCXByaW50aygiU0dJIFNBTCB2ZXJzaW9uICV4LiUwMnhcbiIsIG1ham9yLCBtaW5vcik7CisJcHJpbnRrKCJTR0kgU0FMIHZlcnNpb24gJXguJTAyeFxuIiwgdmVyc2lvbiA+PiA4LCB2ZXJzaW9uICYgMHgwMEZGKTsKIAogCS8qCiAJICogQ29uZmlybSB0aGUgU0FMIHdlJ3JlIHJ1bm5pbmcgb24gaXMgcmVjZW50IGVub3VnaC4uLgogCSAqLwotCWlmICgobWFqb3IgPCBTTl9TQUxfTUlOX01BSk9SKSB8fCAobWFqb3IgPT0gU05fU0FMX01JTl9NQUpPUiAmJgotCQkJCQkgICBtaW5vciA8IFNOX1NBTF9NSU5fTUlOT1IpKSB7CisJaWYgKHZlcnNpb24gPCBTTl9TQUxfTUlOX1ZFUlNJT04pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJUaGlzIGtlcm5lbCBuZWVkcyBTR0kgU0FMIHZlcnNpb24gPj0gIgotCQkgICAgICAgIiV4LiUwMnhcbiIsIFNOX1NBTF9NSU5fTUFKT1IsIFNOX1NBTF9NSU5fTUlOT1IpOworCQkgICAgICAgIiV4LiUwMnhcbiIsIFNOX1NBTF9NSU5fVkVSU0lPTiA+PiA4LAorCQkgICAgICAgIFNOX1NBTF9NSU5fVkVSU0lPTiAmIDB4MDBGRik7CiAJCXBhbmljKCJQUk9NIHZlcnNpb24gdG9vIG9sZFxuIik7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMKaW5kZXggODcxNmY0ZC4uYzFjYmNkMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC90aW9jeC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvdGlvY3guYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KQEAgLTQ4MSw2ICs0ODIsOSBAQAogCWNub2RlaWRfdCBjbm9kZWlkOwogCWludCBmb3VuZF90aW9jeF9kZXZpY2UgPSAwOwogCisJaWYgKCFpYTY0X3BsYXRmb3JtX2lzKCJzbjIiKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlidXNfcmVnaXN0ZXIoJnRpb2N4X2J1c190eXBlKTsKIAogCWZvciAoY25vZGVpZCA9IDA7IGNub2RlaWQgPCBNQVhfQ09NUEFDVF9OT0RFUzsgY25vZGVpZCsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaV9kbWEuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCmluZGV4IDVkYTliZGIuLmEyZjdhODggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCkBAIC0xMSw5ICsxMSwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KKyNpbmNsdWRlIDxhc20vc24vcGNpYnJfcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgogCiAjZGVmaW5lIFNHX0VOVF9WSVJUX0FERFJFU1Moc2cpCShwYWdlX2FkZHJlc3MoKHNnKS0+cGFnZSkgKyAoc2cpLT5vZmZzZXQpCiAjZGVmaW5lIFNHX0VOVF9QSFlTX0FERFJFU1MoU0cpCXZpcnRfdG9fcGh5cyhTR19FTlRfVklSVF9BRERSRVNTKFNHKSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfYXRlLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2F0ZS5jCmluZGV4IDBlNDdiY2U4Li5kMTY0N2I4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2F0ZS5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfYXRlLmMKQEAgLTgsOSArOCw5IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KKyNpbmNsdWRlIDxhc20vc24vcGNpYnJfcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+Ci0jaW5jbHVkZSAicGNpL3BjaWJyX3Byb3ZpZGVyLmgiCiAKIGludCBwY2licl9pbnZhbGlkYXRlX2F0ZSA9IDA7CS8qIGJ5IGRlZmF1bHQgZG9uJ3QgaW52YWxpZGF0ZSBBVEUgb24gZnJlZSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYwppbmRleCA2NGFmMmIyLi5iMDU4ZGMyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKQEAgLTgsMTggKzgsMTcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgorI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgogI2luY2x1ZGUgPGFzbS9zbi9nZW8uaD4KLSNpbmNsdWRlICJ4dGFsay94d2lkZ2V0ZGV2LmgiCi0jaW5jbHVkZSAieHRhbGsvaHViZGV2LmgiCisjaW5jbHVkZSA8YXNtL3NuL3BjaWJyX3Byb3ZpZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3BjaWRldi5oPgotI2luY2x1ZGUgInBjaS90aW9jcC5oIgotI2luY2x1ZGUgInBjaS9waWMuaCIKLSNpbmNsdWRlICJwY2kvcGNpYnJfcHJvdmlkZXIuaCIKLSNpbmNsdWRlICJwY2kvdGlvY3AuaCIKKyNpbmNsdWRlIDxhc20vc24vcGljLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgorI2luY2x1ZGUgPGFzbS9zbi90aW9jcC5oPgogI2luY2x1ZGUgInRpby5oIgotI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgInh0YWxrL3h3aWRnZXRkZXYuaCIKKyNpbmNsdWRlICJ4dGFsay9odWJkZXYuaCIKIAogZXh0ZXJuIGludCBzbl9pb2lmX2luaXRlZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jCmluZGV4IDM4OTM5OTkuLjk4MTNkYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcHJvdmlkZXIuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3Byb3ZpZGVyLmMKQEAgLTYsMTggKzYsNTEgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KLSNpbmNsdWRlICJ4dGFsay94d2lkZ2V0ZGV2LmgiCisjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2dlby5oPgotI2luY2x1ZGUgInh0YWxrL2h1YmRldi5oIgorI2luY2x1ZGUgPGFzbS9zbi9wY2licl9wcm92aWRlci5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lkZXYuaD4KLSNpbmNsdWRlICJwY2kvcGNpYnJfcHJvdmlkZXIuaCIKLSNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KKyNpbmNsdWRlIDxhc20vc24vc25fc2FsLmg+CisjaW5jbHVkZSAieHRhbGsveHdpZGdldGRldi5oIgorI2luY2x1ZGUgInh0YWxrL2h1YmRldi5oIgogCitpbnQKK3NhbF9wY2licl9zbG90X2VuYWJsZShzdHJ1Y3QgcGNpYnVzX2luZm8gKnNvZnQsIGludCBkZXZpY2UsIHZvaWQgKnJlc3ApCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisJdWludDY0X3QgYnVzbnVtOworCisJcmV0X3N0dWZmLnN0YXR1cyA9IDA7CisJcmV0X3N0dWZmLnYwID0gMDsKKworCWJ1c251bSA9IHNvZnQtPnBiaV9idXNjb21tb24uYnNfcGVyc2lzdF9idXNudW07CisJU0FMX0NBTExfTk9MT0NLKHJldF9zdHVmZiwgKHU2NCkgU05fU0FMX0lPSUZfU0xPVF9FTkFCTEUsICh1NjQpIGJ1c251bSwKKwkJCSh1NjQpIGRldmljZSwgKHU2NCkgcmVzcCwgMCwgMCwgMCwgMCk7CisKKwlyZXR1cm4gKGludClyZXRfc3R1ZmYudjA7Cit9CisKK2ludAorc2FsX3BjaWJyX3Nsb3RfZGlzYWJsZShzdHJ1Y3QgcGNpYnVzX2luZm8gKnNvZnQsIGludCBkZXZpY2UsIGludCBhY3Rpb24sCisJCSAgICAgICB2b2lkICpyZXNwKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCXVpbnQ2NF90IGJ1c251bTsKKworCXJldF9zdHVmZi5zdGF0dXMgPSAwOworCXJldF9zdHVmZi52MCA9IDA7CisKKwlidXNudW0gPSBzb2Z0LT5wYmlfYnVzY29tbW9uLmJzX3BlcnNpc3RfYnVzbnVtOworCVNBTF9DQUxMX05PTE9DSyhyZXRfc3R1ZmYsICh1NjQpIFNOX1NBTF9JT0lGX1NMT1RfRElTQUJMRSwKKwkJCSh1NjQpIGJ1c251bSwgKHU2NCkgZGV2aWNlLCAodTY0KSBhY3Rpb24sCisJCQkodTY0KSByZXNwLCAwLCAwLCAwKTsKKworCXJldHVybiAoaW50KXJldF9zdHVmZi52MDsKK30KIAogc3RhdGljIGludCBzYWxfcGNpYnJfZXJyb3JfaW50ZXJydXB0KHN0cnVjdCBwY2lidXNfaW5mbyAqc29mdCkKIHsKQEAgLTE4OCwzICsyMjEsNiBAQAogCiAJcmV0dXJuIDA7CiB9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHNhbF9wY2licl9zbG90X2VuYWJsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChzYWxfcGNpYnJfc2xvdF9kaXNhYmxlKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcmVnLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3JlZy5jCmluZGV4IDg2NWMxMWMuLjIxNDI2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcmVnLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYwpAQCAtNiwxMyArNiwxMyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zbi9wY2licl9wcm92aWRlci5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lkZXYuaD4KLSNpbmNsdWRlICJwY2kvdGlvY3AuaCIKLSNpbmNsdWRlICJwY2kvcGljLmgiCi0jaW5jbHVkZSAicGNpL3BjaWJyX3Byb3ZpZGVyLmgiCisjaW5jbHVkZSA8YXNtL3NuL3BpYy5oPgorI2luY2x1ZGUgPGFzbS9zbi90aW9jcC5oPgogCiB1bmlvbiBicl9wdHIgewogCXN0cnVjdCB0aW9jcCB0aW87CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKaW5kZXggMDVhYThjMmYuLjUxY2M0ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKQEAgLTU4OSw4ICs1ODksNyBAQAogCiAJLyogc2FuaXR5IGNoZWNrIHByb20gcmV2ICovCiAKLQlpZiAoc25fc2FsX3Jldl9tYWpvcigpIDwgNCB8fAotCSAgICAoc25fc2FsX3Jldl9tYWpvcigpID09IDQgJiYgc25fc2FsX3Jldl9taW5vcigpIDwgNikpIHsKKwlpZiAoc25fc2FsX3JldigpIDwgMHgwNDA2KSB7CiAJCXByaW50awogCQkgICAgKEtFUk5fRVJSICIlczogIFNHSSBwcm9tIHJldiA0LjA2IG9yIGdyZWF0ZXIgcmVxdWlyZWQgIgogCQkgICAgICJmb3IgdGlvY2Egc3VwcG9ydFxuIiwgX19GVU5DVElPTl9fKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbTMyNzAwdXQuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbTMyNzAwdXQuYwppbmRleCBiMDE0ZTJjLi5hMTQ2YjI0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX20zMjcwMHV0LmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tMzI3MDB1dC5jCkBAIC0zLDggKzMsOCBAQAogICoKICAqICBTZXR1cCByb3V0aW5lcyBmb3IgUmVuZXNhcyBNMzI3MDBVVCBCb2FyZAogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDIgCUhpcm95dWtpIEtvbmRvLCBIaXJva2F6dSBUYWthdGEsCi0gKiAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBUYWtlbyBUYWthaGFzaGkKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bywgVGFrZW8gVGFrYWhhc2hpCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKICAqICBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKQEAgLTQzNSw3ICs0MzUsNyBAQAogCWljdV9kYXRhW00zMlJfSVJRX0lOVDJdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDAxOwogCWVuYWJsZV9tMzI3MDB1dF9pcnEoTTMyUl9JUlFfSU5UMik7CiAKLS8vI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX00zMlJfQVIpCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fTTMyUl9BUikKIAkvKgogCSAqIElOVDMjIGlzIHVzZWQgZm9yIEFSCiAJICovCkBAIC00NDUsOSArNDQ1LDExIEBACiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX0lOVDNdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDEwOwogCWRpc2FibGVfbTMyNzAwdXRfaXJxKE0zMlJfSVJRX0lOVDMpOwotLy8jZW5kaWYJLyogQ09ORklHX1ZJREVPX00zMlJfQVIgKi8KKyNlbmRpZgkvKiBDT05GSUdfVklERU9fTTMyUl9BUiAqLwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKQorCiAjZGVmaW5lIExBTl9JT1NUQVJUICAgICAweDMwMAogI2RlZmluZSBMQU5fSU9FTkQgICAgICAgMHgzMjAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewpAQCAtNDY5LDEwICs0NzEsNTUgQEAKIAkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZSAgICAgICA9IHNtYzkxeF9yZXNvdXJjZXMsCiB9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9TMUQxM1hYWCkKKworI2luY2x1ZGUgPHZpZGVvL3MxZDEzeHh4ZmIuaD4KKyNpbmNsdWRlIDxhc20vczFkMTM4MDYuaD4KKworc3RhdGljIHN0cnVjdCBzMWQxM3h4eGZiX3BkYXRhIHMxZDEzeHh4ZmJfZGF0YSA9IHsKKwkuaW5pdHJlZ3MJCT0gczFkMTN4eHhmYl9pbml0cmVncywKKwkuaW5pdHJlZ3NzaXplCQk9IEFSUkFZX1NJWkUoczFkMTN4eHhmYl9pbml0cmVncyksCisJLnBsYXRmb3JtX2luaXRfdmlkZW8JPSBOVUxMLAorI2lmZGVmIENPTkZJR19QTQorCS5wbGF0Zm9ybV9zdXNwZW5kX3ZpZGVvCT0gTlVMTCwKKwkucGxhdGZvcm1fcmVzdW1lX3ZpZGVvCT0gTlVMTCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzMWQxM3h4eGZiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IDB4MTA2MDAwMDBVTCwKKwkJLmVuZCAgICA9IDB4MTA3M0ZGRkZVTCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMHgxMDQwMDAwMFVMLAorCQkuZW5kICAgID0gMHgxMDQwMDFGRlVMLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczFkMTN4eHhmYl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gUzFEX0RFVklDRU5BTUUsCisJLmlkCQk9IDAsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmczFkMTN4eHhmYl9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzMWQxM3h4eGZiX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gczFkMTN4eHhmYl9yZXNvdXJjZXMsCit9OworI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IHBsYXRmb3JtX2luaXQodm9pZCkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0ZCX1MxRDEzWFhYKQorCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmczFkMTN4eHhmYl9kZXZpY2UpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKHBsYXRmb3JtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaS5jCmluZGV4IGFhZjhlNTYuLjRlNzA5ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpLmMKQEAgLTMsMTQgKzMsMTUgQEAKICAqCiAgKiAgU2V0dXAgcm91dGluZXMgZm9yIFJlbmVzYXMgTUFQUEkgQm9hcmQKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bworICogIENvcHlyaWdodCAoYykgMjAwMS0yMDA1ICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbTMyci5oPgpAQCAtMTU4LDMgKzE1OSw0OSBAQAogCWRpc2FibGVfbWFwcGlfaXJxKE0zMlJfSVJRX0lOVDIpOwogI2VuZGlmIC8qIENPTkZJR19NMzJSUENDICovCiB9CisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9TMUQxM1hYWCkKKworI2luY2x1ZGUgPHZpZGVvL3MxZDEzeHh4ZmIuaD4KKyNpbmNsdWRlIDxhc20vczFkMTM4MDYuaD4KKworc3RhdGljIHN0cnVjdCBzMWQxM3h4eGZiX3BkYXRhIHMxZDEzeHh4ZmJfZGF0YSA9IHsKKwkuaW5pdHJlZ3MJCT0gczFkMTN4eHhmYl9pbml0cmVncywKKwkuaW5pdHJlZ3NzaXplCQk9IEFSUkFZX1NJWkUoczFkMTN4eHhmYl9pbml0cmVncyksCisJLnBsYXRmb3JtX2luaXRfdmlkZW8JPSBOVUxMLAorI2lmZGVmIENPTkZJR19QTQorCS5wbGF0Zm9ybV9zdXNwZW5kX3ZpZGVvCT0gTlVMTCwKKwkucGxhdGZvcm1fcmVzdW1lX3ZpZGVvCT0gTlVMTCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzMWQxM3h4eGZiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IDB4MTAyMDAwMDBVTCwKKwkJLmVuZCAgICA9IDB4MTAzM0ZGRkZVTCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMHgxMDAwMDAwMFVMLAorCQkuZW5kICAgID0gMHgxMDAwMDFGRlVMLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczFkMTN4eHhmYl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gUzFEX0RFVklDRU5BTUUsCisJLmlkCQk9IDAsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmczFkMTN4eHhmYl9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzMWQxM3h4eGZiX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gczFkMTN4eHhmYl9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzMWQxM3h4eGZiX2RldmljZSk7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBsYXRmb3JtX2luaXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpMi5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaTIuYwppbmRleCAzOGQ1ZTlhLi5hMWQ4MDE1IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpMi5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkyLmMKQEAgLTMsOCArMyw4IEBACiAgKgogICogIFNldHVwIHJvdXRpbmVzIGZvciBSZW5lc2FzIE1BUFBJLUlJKE0zQS1aQTM2KSBCb2FyZAogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIgIEhpcm95dWtpIEtvbmRvLCBIaXJva2F6dSBUYWthdGEsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBNYW1vcnUgU2FrdWdhd2EKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bywgTWFtb3J1IFNha3VnYXdhCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaTMuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkzLmMKaW5kZXggM2Q2MGE4NS4uYTc2NDEyZSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaTMuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpMy5jCkBAIC0zLDggKzMsOCBAQAogICoKICAqICBTZXR1cCByb3V0aW5lcyBmb3IgUmVuZXNhcyBNQVBQSS1JSUkoTTNBLTIxNzApIEJvYXJkCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwMS0yMDA1ICAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8sIE1hbW9ydSBTYWt1Z2F3YQorICogIENvcHlyaWdodCAoYykgMjAwMS0yMDA1ICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBNYW1vcnUgU2FrdWdhd2EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0xNzgsNiArMTc4LDggQEAKICNlbmRpZiAvKiBDT05GSUdfTTMyUl9DRkMgKi8KIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkKKwogI2RlZmluZSBMQU5fSU9TVEFSVCAgICAgMHgzMDAKICNkZWZpbmUgTEFOX0lPRU5EICAgICAgIDB4MzIwCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKQEAgLTIwMCw5ICsyMDIsNTUgQEAKIAkucmVzb3VyY2UgICAgICAgPSBzbWM5MXhfcmVzb3VyY2VzLAogfTsKIAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9TMUQxM1hYWCkKKworI2luY2x1ZGUgPHZpZGVvL3MxZDEzeHh4ZmIuaD4KKyNpbmNsdWRlIDxhc20vczFkMTM4MDYuaD4KKworc3RhdGljIHN0cnVjdCBzMWQxM3h4eGZiX3BkYXRhIHMxZDEzeHh4ZmJfZGF0YSA9IHsKKwkuaW5pdHJlZ3MJCT0gczFkMTN4eHhmYl9pbml0cmVncywKKwkuaW5pdHJlZ3NzaXplCQk9IEFSUkFZX1NJWkUoczFkMTN4eHhmYl9pbml0cmVncyksCisJLnBsYXRmb3JtX2luaXRfdmlkZW8JPSBOVUxMLAorI2lmZGVmIENPTkZJR19QTQorCS5wbGF0Zm9ybV9zdXNwZW5kX3ZpZGVvCT0gTlVMTCwKKwkucGxhdGZvcm1fcmVzdW1lX3ZpZGVvCT0gTlVMTCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzMWQxM3h4eGZiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IDB4MWQ2MDAwMDBVTCwKKwkJLmVuZCAgICA9IDB4MWQ3M0ZGRkZVTCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMHgxZDQwMDAwMFVMLAorCQkuZW5kICAgID0gMHgxZDQwMDFGRlVMLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczFkMTN4eHhmYl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gUzFEX0RFVklDRU5BTUUsCisJLmlkCQk9IDAsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmczFkMTN4eHhmYl9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzMWQxM3h4eGZiX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gczFkMTN4eHhmYl9yZXNvdXJjZXMsCit9OworI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IHBsYXRmb3JtX2luaXQodm9pZCkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0ZCX1MxRDEzWFhYKQorCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmczFkMTN4eHhmYl9kZXZpY2UpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKHBsYXRmb3JtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9vYWtzMzJyLmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX29ha3MzMnIuYwppbmRleCBkNjU2NjQwLi40NWFkZDViIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX29ha3MzMnIuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX29ha3MzMnIuYwpAQCAtMyw4ICszLDggQEAKICAqCiAgKiAgU2V0dXAgcm91dGluZXMgZm9yIE9BS1MzMlIgQm9hcmQKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bywgTWFtb3J1IFNha3VnYXdhCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgIEhpcm95dWtpIEtvbmRvLCBIaXJva2F6dSBUYWthdGEsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8sIE1hbW9ydSBTYWt1Z2F3YQogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTEzOSw1ICsxMzksNCBAQAogCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfU10uaWN1Y3IgPSAwOwogCWRpc2FibGVfb2FrczMycl9pcnEoTTMyUl9JUlFfU0lPMV9TKTsKICNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX00zMlJfU0lPICovCi0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfb3BzcHV0LmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX29wc3B1dC5jCmluZGV4IDg2ZjRjZjIuLmYwMzAxZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfb3BzcHV0LmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9vcHNwdXQuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgU2V0dXAgcm91dGluZXMgZm9yIFJlbmVzYXMgT1BTUFVUIEJvYXJkCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA0CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUKICAqIAlIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAogICogICAgICBIaXRvc2hpIFlhbWFtb3RvLCBUYWtlbyBUYWthaGFzaGksIE1hbW9ydSBTYWt1Z2F3YQogICoKQEAgLTQzOSw3ICs0MzksNyBAQAogCWljdV9kYXRhW00zMlJfSVJRX0lOVDJdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDAxOwogCWVuYWJsZV9vcHNwdXRfaXJxKE0zMlJfSVJRX0lOVDIpOwogCi0vLyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19NMzJSX0FSKQorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX00zMlJfQVIpCiAJLyoKIAkgKiBJTlQzIyBpcyB1c2VkIGZvciBBUgogCSAqLwpAQCAtNDQ5LDkgKzQ0OSwxMSBAQAogCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQzXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QxMDsKIAlkaXNhYmxlX29wc3B1dF9pcnEoTTMyUl9JUlFfSU5UMyk7Ci0vLyNlbmRpZgkvKiBDT05GSUdfVklERU9fTTMyUl9BUiAqLworI2VuZGlmIC8qIENPTkZJR19WSURFT19NMzJSX0FSICovCiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpCisKICNkZWZpbmUgTEFOX0lPU1RBUlQgICAgIDB4MzAwCiAjZGVmaW5lIExBTl9JT0VORCAgICAgICAweDMyMAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CkBAIC00NzMsMTAgKzQ3NSw1NSBAQAogCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCiAJLnJlc291cmNlICAgICAgID0gc21jOTF4X3Jlc291cmNlcywKIH07CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0ZCX1MxRDEzWFhYKQorCisjaW5jbHVkZSA8dmlkZW8vczFkMTN4eHhmYi5oPgorI2luY2x1ZGUgPGFzbS9zMWQxMzgwNi5oPgorCitzdGF0aWMgc3RydWN0IHMxZDEzeHh4ZmJfcGRhdGEgczFkMTN4eHhmYl9kYXRhID0geworCS5pbml0cmVncwkJPSBzMWQxM3h4eGZiX2luaXRyZWdzLAorCS5pbml0cmVnc3NpemUJCT0gQVJSQVlfU0laRShzMWQxM3h4eGZiX2luaXRyZWdzKSwKKwkucGxhdGZvcm1faW5pdF92aWRlbwk9IE5VTEwsCisjaWZkZWYgQ09ORklHX1BNCisJLnBsYXRmb3JtX3N1c3BlbmRfdmlkZW8JPSBOVUxMLAorCS5wbGF0Zm9ybV9yZXN1bWVfdmlkZW8JPSBOVUxMLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMxZDEzeHh4ZmJfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgID0gMHgxMDYwMDAwMFVMLAorCQkuZW5kICAgID0gMHgxMDczRkZGRlVMLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAweDEwNDAwMDAwVUwsCisJCS5lbmQgICAgPSAweDEwNDAwMUZGVUwsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzMWQxM3h4eGZiX2RldmljZSA9IHsKKwkubmFtZQkJPSBTMURfREVWSUNFTkFNRSwKKwkuaWQJCT0gMCwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZzMWQxM3h4eGZiX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHMxZDEzeHh4ZmJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSBzMWQxM3h4eGZiX3Jlc291cmNlcywKK307CisjZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgcGxhdGZvcm1faW5pdCh2b2lkKQogeworI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtYzkxeF9kZXZpY2UpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfUzFEMTNYWFgpCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzMWQxM3h4eGZiX2RldmljZSk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIGFyY2hfaW5pdGNhbGwocGxhdGZvcm1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19jcHVmcmVxLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19jcHVmcmVxLmMKaW5kZXggNWZkZDRmNi4uYzA2MDUyNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfY3B1ZnJlcS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2NwdWZyZXEuYwpAQCAtNDUyLDcgKzQ1Miw3IEBACiAJcmV0dXJuIG9mZnNldDsKIH0KIAotc3RhdGljIGludCBfX3BtYWMgcG1hY19jcHVmcmVxX3N1c3BlbmQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHUzMiBzdGF0ZSkKK3N0YXRpYyBpbnQgX19wbWFjIHBtYWNfY3B1ZnJlcV9zdXNwZW5kKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBwbV9tZXNzYWdlX3QgcG1zZykKIHsKIAkvKiBPaywgdGhpcyBjb3VsZCBiZSBtYWRlIGEgYml0IHNtYXJ0ZXIsIGJ1dCBsZXQncyBiZSByb2J1c3QgZm9yIG5vdy4gV2UKIAkgKiBhbHdheXMgZm9yY2UgYSBzcGVlZCBjaGFuZ2UgdG8gaGlnaCBzcGVlZCBiZWZvcmUgc2xlZXAsIHRvIG1ha2Ugc3VyZQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL29mX2RldmljZS5jIGIvYXJjaC9wcGMvc3lzbGliL29mX2RldmljZS5jCmluZGV4IDQ5YzBlMzQuLjFlYjRmNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9vZl9kZXZpY2UuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvb2ZfZGV2aWNlLmMKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KIApAQCAtMTUsMjAgKzE2LDIwIEBACiAgKiBVc2VkIGJ5IGEgZHJpdmVyIHRvIGNoZWNrIHdoZXRoZXIgYW4gb2ZfZGV2aWNlIHByZXNlbnQgaW4gdGhlCiAgKiBzeXN0ZW0gaXMgaW4gaXRzIGxpc3Qgb2Ygc3VwcG9ydGVkIGRldmljZXMuCiAgKi8KLWNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqIG9mX21hdGNoX2RldmljZShjb25zdCBzdHJ1Y3Qgb2ZfbWF0Y2ggKm1hdGNoZXMsCitjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICogb2ZfbWF0Y2hfZGV2aWNlKGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoZXMsCiAJCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2UgKmRldikKIHsKIAlpZiAoIWRldi0+bm9kZSkKIAkJcmV0dXJuIE5VTEw7Ci0Jd2hpbGUgKG1hdGNoZXMtPm5hbWUgfHwgbWF0Y2hlcy0+dHlwZSB8fCBtYXRjaGVzLT5jb21wYXRpYmxlKSB7CisJd2hpbGUgKG1hdGNoZXMtPm5hbWVbMF0gfHwgbWF0Y2hlcy0+dHlwZVswXSB8fCBtYXRjaGVzLT5jb21wYXRpYmxlWzBdKSB7CiAJCWludCBtYXRjaCA9IDE7Ci0JCWlmIChtYXRjaGVzLT5uYW1lICYmIG1hdGNoZXMtPm5hbWUgIT0gT0ZfQU5ZX01BVENIKQorCQlpZiAobWF0Y2hlcy0+bmFtZVswXSkKIAkJCW1hdGNoICY9IGRldi0+bm9kZS0+bmFtZQogCQkJCSYmICFzdHJjbXAobWF0Y2hlcy0+bmFtZSwgZGV2LT5ub2RlLT5uYW1lKTsKLQkJaWYgKG1hdGNoZXMtPnR5cGUgJiYgbWF0Y2hlcy0+dHlwZSAhPSBPRl9BTllfTUFUQ0gpCisJCWlmIChtYXRjaGVzLT50eXBlWzBdKQogCQkJbWF0Y2ggJj0gZGV2LT5ub2RlLT50eXBlCiAJCQkJJiYgIXN0cmNtcChtYXRjaGVzLT50eXBlLCBkZXYtPm5vZGUtPnR5cGUpOwotCQlpZiAobWF0Y2hlcy0+Y29tcGF0aWJsZSAmJiBtYXRjaGVzLT5jb21wYXRpYmxlICE9IE9GX0FOWV9NQVRDSCkKKwkJaWYgKG1hdGNoZXMtPmNvbXBhdGlibGVbMF0pCiAJCQltYXRjaCAmPSBkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtPm5vZGUsCiAJCQkJbWF0Y2hlcy0+Y29tcGF0aWJsZSk7CiAJCWlmIChtYXRjaCkKQEAgLTQyLDcgKzQzLDcgQEAKIHsKIAlzdHJ1Y3Qgb2ZfZGV2aWNlICogb2ZfZGV2ID0gdG9fb2ZfZGV2aWNlKGRldik7CiAJc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqIG9mX2RydiA9IHRvX29mX3BsYXRmb3JtX2RyaXZlcihkcnYpOwotCWNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqIG1hdGNoZXMgPSBvZl9kcnYtPm1hdGNoX3RhYmxlOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKiBtYXRjaGVzID0gb2ZfZHJ2LT5tYXRjaF90YWJsZTsKIAogCWlmICghbWF0Y2hlcykKIAkJcmV0dXJuIDA7CkBAIC03NSw3ICs3Niw3IEBACiAJaW50IGVycm9yID0gLUVOT0RFVjsKIAlzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnY7CiAJc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2OwotCWNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqbWF0Y2g7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAKIAlkcnYgPSB0b19vZl9wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCW9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcHBjNjQva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggMWQxNjJjNy4uOGQ0YzQ2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9jcHV0YWJsZS5jCkBAIC00OSwxNjAgKzQ5LDIxOSBAQAogI2VuZGlmCiAKIHN0cnVjdCBjcHVfc3BlYwljcHVfc3BlY3NbXSA9IHsKLSAgICB7CS8qIFBvd2VyMyAqLwotCSAgICAweGZmZmYwMDAwLCAweDAwNDAwMDAwLCAiUE9XRVIzICg2MzApIiwKLQkgICAgQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwKLQkJICAgIENQVV9GVFJfSUFCUiB8IENQVV9GVFJfUE1DOCwKLQkgICAgQ09NTU9OX1VTRVJfUFBDNjQsCi0JICAgIDEyOCwgMTI4LAotCSAgICBfX3NldHVwX2NwdV9wb3dlcjMsCi0JICAgIENPTU1PTl9QUEM2NF9GVwotICAgIH0sCi0gICAgewkvKiBQb3dlcjMrICovCi0JICAgIDB4ZmZmZjAwMDAsIDB4MDA0MTAwMDAsICJQT1dFUjMgKDYzMCspIiwKLQkgICAgQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwKLQkJICAgIENQVV9GVFJfSUFCUiB8IENQVV9GVFJfUE1DOCwKLQkgICAgQ09NTU9OX1VTRVJfUFBDNjQsCi0JICAgIDEyOCwgMTI4LAotCSAgICBfX3NldHVwX2NwdV9wb3dlcjMsCi0JICAgIENPTU1PTl9QUEM2NF9GVwotICAgIH0sCi0gICAgewkvKiBOb3J0aHN0YXIgKi8KLQkgICAgMHhmZmZmMDAwMCwgMHgwMDMzMDAwMCwgIlJTNjQtSUkgKG5vcnRoc3RhcikiLAotCSAgICBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAotCQkgICAgQ1BVX0ZUUl9JQUJSIHwgQ1BVX0ZUUl9QTUM4IHwgQ1BVX0ZUUl9NTUNSQSwKLQkgICAgQ09NTU9OX1VTRVJfUFBDNjQsCi0JICAgIDEyOCwgMTI4LAotCSAgICBfX3NldHVwX2NwdV9wb3dlcjMsCi0JICAgIENPTU1PTl9QUEM2NF9GVwotICAgIH0sCi0gICAgewkvKiBQdWxzYXIgKi8KLQkgICAgMHhmZmZmMDAwMCwgMHgwMDM0MDAwMCwgIlJTNjQtSUlJIChwdWxzYXIpIiwKLQkgICAgQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwKLQkJICAgIENQVV9GVFJfSUFCUiB8IENQVV9GVFJfUE1DOCB8IENQVV9GVFJfTU1DUkEsCi0JICAgIENPTU1PTl9VU0VSX1BQQzY0LAotCSAgICAxMjgsIDEyOCwKLQkgICAgX19zZXR1cF9jcHVfcG93ZXIzLAotCSAgICBDT01NT05fUFBDNjRfRlcKLSAgICB9LAotICAgIHsJLyogSS1zdGFyICovCi0JICAgIDB4ZmZmZjAwMDAsIDB4MDAzNjAwMDAsICJSUzY0LUlJSSAoaWNlc3RhcikiLAotCSAgICBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAotCQkgICAgQ1BVX0ZUUl9JQUJSIHwgQ1BVX0ZUUl9QTUM4IHwgQ1BVX0ZUUl9NTUNSQSwKLQkgICAgQ09NTU9OX1VTRVJfUFBDNjQsCi0JICAgIDEyOCwgMTI4LAotCSAgICBfX3NldHVwX2NwdV9wb3dlcjMsCi0JICAgIENPTU1PTl9QUEM2NF9GVwotICAgIH0sCi0gICAgewkvKiBTLXN0YXIgKi8KLQkgICAgMHhmZmZmMDAwMCwgMHgwMDM3MDAwMCwgIlJTNjQtSVYgKHNzdGFyKSIsCi0JICAgIENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfSFBURV9UQUJMRSB8Ci0JCSAgICBDUFVfRlRSX0lBQlIgfCBDUFVfRlRSX1BNQzggfCBDUFVfRlRSX01NQ1JBLAotCSAgICBDT01NT05fVVNFUl9QUEM2NCwKLQkgICAgMTI4LCAxMjgsCi0JICAgIF9fc2V0dXBfY3B1X3Bvd2VyMywKLQkgICAgQ09NTU9OX1BQQzY0X0ZXCi0gICAgfSwKLSAgICB7CS8qIFBvd2VyNCAqLwotCSAgICAweGZmZmYwMDAwLCAweDAwMzUwMDAwLCAiUE9XRVI0IChncCkiLAotCSAgICBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAotCQkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9QTUM4IHwgQ1BVX0ZUUl9NTUNSQSwKLQkgICAgQ09NTU9OX1VTRVJfUFBDNjQsCi0JICAgIDEyOCwgMTI4LAotCSAgICBfX3NldHVwX2NwdV9wb3dlcjQsCi0JICAgIENPTU1PTl9QUEM2NF9GVwotICAgIH0sCi0gICAgewkvKiBQb3dlcjQrICovCi0JICAgIDB4ZmZmZjAwMDAsIDB4MDAzODAwMDAsICJQT1dFUjQrIChncSkiLAotCSAgICBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAotCQkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9QTUM4IHwgQ1BVX0ZUUl9NTUNSQSwKLQkgICAgQ09NTU9OX1VTRVJfUFBDNjQsCi0JICAgIDEyOCwgMTI4LAotCSAgICBfX3NldHVwX2NwdV9wb3dlcjQsCi0JICAgIENPTU1PTl9QUEM2NF9GVwotICAgIH0sCi0gICAgewkvKiBQUEM5NzAgKi8KLQkgICAgMHhmZmZmMDAwMCwgMHgwMDM5MDAwMCwgIlBQQzk3MCIsCi0JICAgIENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfSFBURV9UQUJMRSB8Ci0JCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0FMVElWRUNfQ09NUCB8Ci0JCSAgICBDUFVfRlRSX0NBTl9OQVAgfCBDUFVfRlRSX1BNQzggfCBDUFVfRlRSX01NQ1JBLAotCSAgICBDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCi0JICAgIDEyOCwgMTI4LAotCSAgICBfX3NldHVwX2NwdV9wcGM5NzAsCi0JICAgIENPTU1PTl9QUEM2NF9GVwotICAgIH0sCi0gICAgewkvKiBQUEM5NzBGWCAqLwotCSAgICAweGZmZmYwMDAwLCAweDAwM2MwMDAwLCAiUFBDOTcwRlgiLAotCSAgICBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAotCQkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfAotCQkgICAgQ1BVX0ZUUl9DQU5fTkFQIHwgQ1BVX0ZUUl9QTUM4IHwgQ1BVX0ZUUl9NTUNSQSwKLQkgICAgQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAotCSAgICAxMjgsIDEyOCwKLQkgICAgX19zZXR1cF9jcHVfcHBjOTcwLAotCSAgICBDT01NT05fUFBDNjRfRlcKLSAgICB9LAotICAgIHsJLyogUG93ZXI1ICovCi0JICAgIDB4ZmZmZjAwMDAsIDB4MDAzYTAwMDAsICJQT1dFUjUgKGdyKSIsCi0JICAgIENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfSFBURV9UQUJMRSB8Ci0JCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfAotCQkgICAgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgfCBDUFVfRlRSX0xPQ0tMRVNTX1RMQklFIHwKLQkJICAgIENQVV9GVFJfTU1DUkFfU0lIViwKLQkgICAgQ09NTU9OX1VTRVJfUFBDNjQsCi0JICAgIDEyOCwgMTI4LAotCSAgICBfX3NldHVwX2NwdV9wb3dlcjQsCi0JICAgIENPTU1PTl9QUEM2NF9GVwotICAgIH0sCi0gICAgewkvKiBQb3dlcjUgKi8KLQkgICAgMHhmZmZmMDAwMCwgMHgwMDNiMDAwMCwgIlBPV0VSNSAoZ3MpIiwKLQkgICAgQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwKLQkJICAgIENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8Ci0JCSAgICBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSB8IENQVV9GVFJfTE9DS0xFU1NfVExCSUUgfAotCQkgICAgQ1BVX0ZUUl9NTUNSQV9TSUhWLAotCSAgICBDT01NT05fVVNFUl9QUEM2NCwKLQkgICAgMTI4LCAxMjgsCi0JICAgIF9fc2V0dXBfY3B1X3Bvd2VyNCwKLQkgICAgQ09NTU9OX1BQQzY0X0ZXCi0gICAgfSwKLSAgICB7CS8qIEJFIEREMS54ICAqLwotCSAgICAweGZmZmYwMDAwLCAweDAwNzAwMDAwLCAiQnJvYWRiYW5kIEVuZ2luZSIsCi0JICAgIENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfSFBURV9UQUJMRSB8Ci0JCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0FMVElWRUNfQ09NUCB8Ci0JCSAgICBDUFVfRlRSX1NNVCwKLQkgICAgQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAotCSAgICAxMjgsIDEyOCwKLQkgICAgX19zZXR1cF9jcHVfYmUsCi0JICAgIENPTU1PTl9QUEM2NF9GVwotICAgIH0sCi0gICAgewkvKiBkZWZhdWx0IG1hdGNoICovCi0JICAgIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsICJQT1dFUjQgKGNvbXBhdGlibGUpIiwKLSAgCSAgICBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAotCQkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyLAotCSAgICBDT01NT05fVVNFUl9QUEM2NCwKLQkgICAgMTI4LCAxMjgsCi0JICAgIF9fc2V0dXBfY3B1X3Bvd2VyNCwKLQkgICAgQ09NTU9OX1BQQzY0X0ZXCi0gICAgfQorCXsJLyogUG93ZXIzICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAorCQkucHZyX3ZhbHVlCQk9IDB4MDA0MDAwMDAsCisJCS5jcHVfbmFtZQkJPSAiUE9XRVIzICg2MzApIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwKKwkJCUNQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9JQUJSIHwKKwkJCUNQVV9GVFJfUE1DOCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzID0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9wb3dlcjMsCisJCS5maXJtd2FyZV9mZWF0dXJlcwk9IENPTU1PTl9QUEM2NF9GVywKKwl9LAorCXsJLyogUG93ZXIzKyAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwNDEwMDAwLAorCQkuY3B1X25hbWUJCT0gIlBPV0VSMyAoNjMwKykiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfAorCQkJQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX0lBQlIgfAorCQkJQ1BVX0ZUUl9QTUM4LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X3Bvd2VyMywKKwkJLmZpcm13YXJlX2ZlYXR1cmVzCT0gQ09NTU9OX1BQQzY0X0ZXLAorCX0sCisJewkvKiBOb3J0aHN0YXIgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCisJCS5wdnJfdmFsdWUJCT0gMHgwMDMzMDAwMCwKKwkJLmNwdV9uYW1lCQk9ICJSUzY0LUlJIChub3J0aHN0YXIpIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwKKwkJCUNQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9JQUJSIHwKKwkJCUNQVV9GVFJfUE1DOCB8IENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX0NUUkwsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcG93ZXIzLAorCQkuZmlybXdhcmVfZmVhdHVyZXMJPSBDT01NT05fUFBDNjRfRlcsCisJfSwKKwl7CS8qIFB1bHNhciAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwMzQwMDAwLAorCQkuY3B1X25hbWUJCT0gIlJTNjQtSUlJIChwdWxzYXIpIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwKKwkJCUNQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9JQUJSIHwKKwkJCUNQVV9GVFJfUE1DOCB8IENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX0NUUkwsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcG93ZXIzLAorCQkuZmlybXdhcmVfZmVhdHVyZXMJPSBDT01NT05fUFBDNjRfRlcsCisJfSwKKwl7CS8qIEktc3RhciAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwMzYwMDAwLAorCQkuY3B1X25hbWUJCT0gIlJTNjQtSUlJIChpY2VzdGFyKSIsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8CisJCQlDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfSUFCUiB8CisJCQlDUFVfRlRSX1BNQzggfCBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9DVFJMLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X3Bvd2VyMywKKwkJLmZpcm13YXJlX2ZlYXR1cmVzCT0gQ09NTU9OX1BQQzY0X0ZXLAorCX0sCisJewkvKiBTLXN0YXIgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCisJCS5wdnJfdmFsdWUJCT0gMHgwMDM3MDAwMCwKKwkJLmNwdV9uYW1lCQk9ICJSUzY0LUlWIChzc3RhcikiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfAorCQkJQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX0lBQlIgfAorCQkJQ1BVX0ZUUl9QTUM4IHwgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfQ1RSTCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9wb3dlcjMsCisJCS5maXJtd2FyZV9mZWF0dXJlcwk9IENPTU1PTl9QUEM2NF9GVywKKwl9LAorCXsJLyogUG93ZXI0ICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAorCQkucHZyX3ZhbHVlCQk9IDB4MDAzNTAwMDAsCisJCS5jcHVfbmFtZQkJPSAiUE9XRVI0IChncCkiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfAorCQkJQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAorCQkJQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9QTUM4IHwgQ1BVX0ZUUl9NTUNSQSwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9wb3dlcjQsCisJCS5maXJtd2FyZV9mZWF0dXJlcwk9IENPTU1PTl9QUEM2NF9GVywKKwl9LAorCXsJLyogUG93ZXI0KyAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwMzgwMDAwLAorCQkuY3B1X25hbWUJCT0gIlBPV0VSNCsgKGdxKSIsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8CisJCQlDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfSFBURV9UQUJMRSB8CisJCQlDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX1BNQzggfCBDUFVfRlRSX01NQ1JBLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X3Bvd2VyNCwKKwkJLmZpcm13YXJlX2ZlYXR1cmVzCT0gQ09NTU9OX1BQQzY0X0ZXLAorCX0sCisJewkvKiBQUEM5NzAgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCisJCS5wdnJfdmFsdWUJCT0gMHgwMDM5MDAwMCwKKwkJLmNwdV9uYW1lCQk9ICJQUEM5NzAiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfAorCQkJQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAorCQkJQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfAorCQkJQ1BVX0ZUUl9DQU5fTkFQIHwgQ1BVX0ZUUl9QTUM4IHwgQ1BVX0ZUUl9NTUNSQSwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQgfAorCQkJUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCwKKwkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X3BwYzk3MCwKKwkJLmZpcm13YXJlX2ZlYXR1cmVzCT0gQ09NTU9OX1BQQzY0X0ZXLAorCX0sCisJewkvKiBQUEM5NzBGWCAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwM2MwMDAwLAorCQkuY3B1X25hbWUJCT0gIlBQQzk3MEZYIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwKKwkJCUNQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwKKwkJCUNQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQUxUSVZFQ19DT01QIHwKKwkJCUNQVV9GVFJfQ0FOX05BUCB8IENQVV9GVFJfUE1DOCB8IENQVV9GVFJfTU1DUkEsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0IHwKKwkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCisJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9wcGM5NzAsCisJCS5maXJtd2FyZV9mZWF0dXJlcwk9IENPTU1PTl9QUEM2NF9GVywKKwl9LAorCXsJLyogUG93ZXI1ICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAorCQkucHZyX3ZhbHVlCQk9IDB4MDAzYTAwMDAsCisJCS5jcHVfbmFtZQkJPSAiUE9XRVI1IChncikiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfAorCQkJQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAorCQkJQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwKKwkJCUNQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8CisJCQlDUFVfRlRSX01NQ1JBX1NJSFYsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcG93ZXI0LAorCQkuZmlybXdhcmVfZmVhdHVyZXMJPSBDT01NT05fUFBDNjRfRlcsCisJfSwKKwl7CS8qIFBvd2VyNSAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwM2IwMDAwLAorCQkuY3B1X25hbWUJCT0gIlBPV0VSNSAoZ3MpIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwKKwkJCUNQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwKKwkJCUNQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8CisJCQlDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSB8IENQVV9GVFJfTE9DS0xFU1NfVExCSUUgfAorCQkJQ1BVX0ZUUl9NTUNSQV9TSUhWLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X3Bvd2VyNCwKKwkJLmZpcm13YXJlX2ZlYXR1cmVzCT0gQ09NTU9OX1BQQzY0X0ZXLAorCX0sCisJewkvKiBCRSBERDEueCAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwNzAwMDAwLAorCQkuY3B1X25hbWUJCT0gIkJyb2FkYmFuZCBFbmdpbmUiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfAorCQkJQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0hQVEVfVEFCTEUgfAorCQkJQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfAorCQkJQ1BVX0ZUUl9TTVQsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0IHwKKwkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCisJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9iZSwKKwkJLmZpcm13YXJlX2ZlYXR1cmVzCT0gQ09NTU9OX1BQQzY0X0ZXLAorCX0sCisJewkvKiBkZWZhdWx0IG1hdGNoICovCisJCS5wdnJfbWFzawkJPSAweDAwMDAwMDAwLAorCQkucHZyX3ZhbHVlCQk9IDB4MDAwMDAwMDAsCisJCS5jcHVfbmFtZQkJPSAiUE9XRVI0IChjb21wYXRpYmxlKSIsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8CisJCQlDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfSFBURV9UQUJMRSB8CisJCQlDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcG93ZXI0LAorCQkuZmlybXdhcmVfZmVhdHVyZXMJPSBDT01NT05fUFBDNjRfRlcsCisJfQogfTsKIAogZmlybXdhcmVfZmVhdHVyZV90IGZpcm13YXJlX2ZlYXR1cmVzX3RhYmxlW0ZJUk1XQVJFX01BWF9GRUFUVVJFU10gPSB7Ci0gICAge0ZXX0ZFQVRVUkVfUEZULAkJImhjYWxsLXBmdCJ9LAotICAgIHtGV19GRUFUVVJFX1RDRSwJCSJoY2FsbC10Y2UifSwKLSAgICB7RldfRkVBVFVSRV9TUFJHMCwJCSJoY2FsbC1zcHJnMCJ9LAotICAgIHtGV19GRUFUVVJFX0RBQlIsCQkiaGNhbGwtZGFiciJ9LAotICAgIHtGV19GRUFUVVJFX0NPUFksCQkiaGNhbGwtY29weSJ9LAotICAgIHtGV19GRUFUVVJFX0FTUiwJCSJoY2FsbC1hc3IifSwKLSAgICB7RldfRkVBVFVSRV9ERUJVRywJCSJoY2FsbC1kZWJ1ZyJ9LAotICAgIHtGV19GRUFUVVJFX1BFUkYsCQkiaGNhbGwtcGVyZiJ9LAotICAgIHtGV19GRUFUVVJFX0RVTVAsCQkiaGNhbGwtZHVtcCJ9LAotICAgIHtGV19GRUFUVVJFX0lOVEVSUlVQVCwJImhjYWxsLWludGVycnVwdCJ9LAotICAgIHtGV19GRUFUVVJFX01JR1JBVEUsCSJoY2FsbC1taWdyYXRlIn0sCi0gICAge0ZXX0ZFQVRVUkVfUEVSRk1PTiwJImhjYWxsLXBlcmZtb24ifSwKLSAgICB7RldfRkVBVFVSRV9DUlEsICAgIAkiaGNhbGwtY3JxIn0sCi0gICAge0ZXX0ZFQVRVUkVfVklPLAkgICAgICAgICJoY2FsbC12aW8ifSwKLSAgICB7RldfRkVBVFVSRV9SRE1BLAkgICAgICAgICJoY2FsbC1yZG1hIn0sCi0gICAge0ZXX0ZFQVRVUkVfTExBTiwJICAgICAgICAiaGNhbGwtbExBTiJ9LAotICAgIHtGV19GRUFUVVJFX0JVTEssICAgCSJoY2FsbC1idWxrIn0sCi0gICAge0ZXX0ZFQVRVUkVfWERBQlIsICAJImhjYWxsLXhkYWJyIn0sCi0gICAge0ZXX0ZFQVRVUkVfTVVMVElUQ0UsCSJoY2FsbC1tdWx0aS10Y2UifSwKLSAgICB7RldfRkVBVFVSRV9TUExQQVIsCSAgICAgICAgImhjYWxsLXNwbHBhciJ9LAorCXtGV19GRUFUVVJFX1BGVCwJCSJoY2FsbC1wZnQifSwKKwl7RldfRkVBVFVSRV9UQ0UsCQkiaGNhbGwtdGNlIn0sCisJe0ZXX0ZFQVRVUkVfU1BSRzAsCQkiaGNhbGwtc3ByZzAifSwKKwl7RldfRkVBVFVSRV9EQUJSLAkJImhjYWxsLWRhYnIifSwKKwl7RldfRkVBVFVSRV9DT1BZLAkJImhjYWxsLWNvcHkifSwKKwl7RldfRkVBVFVSRV9BU1IsCQkiaGNhbGwtYXNyIn0sCisJe0ZXX0ZFQVRVUkVfREVCVUcsCQkiaGNhbGwtZGVidWcifSwKKwl7RldfRkVBVFVSRV9QRVJGLAkJImhjYWxsLXBlcmYifSwKKwl7RldfRkVBVFVSRV9EVU1QLAkJImhjYWxsLWR1bXAifSwKKwl7RldfRkVBVFVSRV9JTlRFUlJVUFQsCQkiaGNhbGwtaW50ZXJydXB0In0sCisJe0ZXX0ZFQVRVUkVfTUlHUkFURSwJCSJoY2FsbC1taWdyYXRlIn0sCisJe0ZXX0ZFQVRVUkVfUEVSRk1PTiwJCSJoY2FsbC1wZXJmbW9uIn0sCisJe0ZXX0ZFQVRVUkVfQ1JRLAkJImhjYWxsLWNycSJ9LAorCXtGV19GRUFUVVJFX1ZJTywJCSJoY2FsbC12aW8ifSwKKwl7RldfRkVBVFVSRV9SRE1BLAkJImhjYWxsLXJkbWEifSwKKwl7RldfRkVBVFVSRV9MTEFOLAkJImhjYWxsLWxMQU4ifSwKKwl7RldfRkVBVFVSRV9CVUxLLAkJImhjYWxsLWJ1bGsifSwKKwl7RldfRkVBVFVSRV9YREFCUiwJCSJoY2FsbC14ZGFiciJ9LAorCXtGV19GRUFUVVJFX01VTFRJVENFLAkJImhjYWxsLW11bHRpLXRjZSJ9LAorCXtGV19GRUFUVVJFX1NQTFBBUiwJCSJoY2FsbC1zcGxwYXIifSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3BwYzY0L2tlcm5lbC9oZWFkLlMKaW5kZXggNjc1YzI3MC4uOTNlYmNhYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9oZWFkLlMKQEAgLTMwOCw2ICszMDgsNyBAQAogbGFiZWwjI19wU2VyaWVzOgkJCQkJXAogCUhNVF9NRURJVU07CQkJCQlcCiAJbXRzcHIJU1BSRzEscjEzOwkJLyogc2F2ZSByMTMgKi8JXAorCVJVTkxBVENIX09OKHIxMyk7CQkJCVwKIAlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWEdFTiwgbGFiZWwjI19jb21tb24pCiAKICNkZWZpbmUgU1REX0VYQ0VQVElPTl9JU0VSSUVTKG4sIGxhYmVsLCBhcmVhKQkJXApAQCAtMzE1LDYgKzMxNiw3IEBACiBsYWJlbCMjX2lTZXJpZXM6CQkJCQlcCiAJSE1UX01FRElVTTsJCQkJCVwKIAltdHNwcglTUFJHMSxyMTM7CQkvKiBzYXZlIHIxMyAqLwlcCisJUlVOTEFUQ0hfT04ocjEzKTsJCQkJXAogCUVYQ0VQVElPTl9QUk9MT0dfSVNFUklFU18xKGFyZWEpOwkJXAogCUVYQ0VQVElPTl9QUk9MT0dfSVNFUklFU18yOwkJCVwKIAliCWxhYmVsIyNfY29tbW9uCkBAIC0zMjQsNiArMzI2LDcgQEAKIGxhYmVsIyNfaVNlcmllczoJCQkJCQkJXAogCUhNVF9NRURJVU07CQkJCQkJCVwKIAltdHNwcglTUFJHMSxyMTM7CQkvKiBzYXZlIHIxMyAqLwkJCVwKKwlSVU5MQVRDSF9PTihyMTMpOwkJCQkJCVwKIAlFWENFUFRJT05fUFJPTE9HX0lTRVJJRVNfMShQQUNBX0VYR0VOKTsJCQkJXAogCWxieglyMTAsUEFDQVBST0NFTkFCTEVEKHIxMyk7CQkJCVwKIAljbXB3aQkwLHIxMCwwOwkJCQkJCVwKQEAgLTM5Myw2ICszOTYsNyBAQAogX21hY2hpbmVfY2hlY2tfcFNlcmllczoKIAlITVRfTUVESVVNCiAJbXRzcHIJU1BSRzEscjEzCQkvKiBzYXZlIHIxMyAqLworCVJVTkxBVENIX09OKHIxMykKIAlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWE1DLCBtYWNoaW5lX2NoZWNrX2NvbW1vbikKIAogCS4gPSAweDMwMApAQCAtNDE5LDYgKzQyMyw3IEBACiBkYXRhX2FjY2Vzc19zbGJfcFNlcmllczoKIAlITVRfTUVESVVNCiAJbXRzcHIJU1BSRzEscjEzCisJUlVOTEFUQ0hfT04ocjEzKQogCW1mc3ByCXIxMyxTUFJHMwkJLyogZ2V0IHBhY2EgYWRkcmVzcyBpbnRvIHIxMyAqLwogCXN0ZAlyOSxQQUNBX0VYU0xCK0VYX1I5KHIxMykJLyogc2F2ZSByOSAtIHIxMiAqLwogCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTAocjEzKQpAQCAtNDM5LDYgKzQ0NCw3IEBACiBpbnN0cnVjdGlvbl9hY2Nlc3Nfc2xiX3BTZXJpZXM6CiAJSE1UX01FRElVTQogCW10c3ByCVNQUkcxLHIxMworCVJVTkxBVENIX09OKHIxMykKIAltZnNwcglyMTMsU1BSRzMJCS8qIGdldCBwYWNhIGFkZHJlc3MgaW50byByMTMgKi8KIAlzdGQJcjksUEFDQV9FWFNMQitFWF9SOShyMTMpCS8qIHNhdmUgcjkgLSByMTIgKi8KIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEwKHIxMykKQEAgLTQ2NCw2ICs0NzAsNyBAQAogCS5nbG9ibAlzeXN0ZW1fY2FsbF9wU2VyaWVzCiBzeXN0ZW1fY2FsbF9wU2VyaWVzOgogCUhNVF9NRURJVU0KKwlSVU5MQVRDSF9PTihyOSkKIAltcglyOSxyMTMKIAltZm1zcglyMTAKIAltZnNwcglyMTMsU1BSRzMKQEAgLTcwNywxMSArNzE0LDEzIEBACiBzeXN0ZW1fcmVzZXRfZndubWk6CiAJSE1UX01FRElVTQogCW10c3ByCVNQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KKwlSVU5MQVRDSF9PTihyMTMpCiAJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIHN5c3RlbV9yZXNldF9jb21tb24pCiAJLmdsb2JsIG1hY2hpbmVfY2hlY2tfZndubWkKIG1hY2hpbmVfY2hlY2tfZndubWk6CiAJSE1UX01FRElVTQogCW10c3ByCVNQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KKwlSVU5MQVRDSF9PTihyMTMpCiAJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24pCiAKIAkvKgpAQCAtODQ4LDYgKzg1Nyw3IEBACiAJLmFsaWduCTcKIAkuZ2xvYmwgZGF0YV9hY2Nlc3NfY29tbW9uCiBkYXRhX2FjY2Vzc19jb21tb246CisJUlVOTEFUQ0hfT04ocjEwKQkJLyogSXQgd29udCBmaXQgaW4gdGhlIDB4MzAwIGhhbmRsZXIgKi8KIAltZnNwcglyMTAsREFSCiAJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX0RBUihyMTMpCiAJbWZzcHIJcjEwLERTSVNSCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9odmNvbnNvbGUuYyBiL2FyY2gvcHBjNjQva2VybmVsL2h2Y29uc29sZS5jCmluZGV4IGM3MmZiOGYuLjEzOGUxMjggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2h2Y29uc29sZS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2h2Y29uc29sZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgogI2luY2x1ZGUgPGFzbS9odmNvbnNvbGUuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgogCiAvKioKICAqIGh2Y19nZXRfY2hhcnMgLSByZXRyaWV2ZSBjaGFyYWN0ZXJzIGZyb20gZmlybXdhcmUgZm9yIGRlbm90ZWQgdnRlcm0gYWRhdHBlcgpAQCAtNDIsMjkgKzQxLDE0IEBACiAJdW5zaWduZWQgbG9uZyBnb3Q7CiAKIAlpZiAocGxwYXJfaGNhbGwoSF9HRVRfVEVSTV9DSEFSLCB2dGVybW5vLCAwLCAwLCAwLCAmZ290LAotCQkodW5zaWduZWQgbG9uZyAqKWJ1ZiwgKHVuc2lnbmVkIGxvbmcgKilidWYrMSkgPT0gSF9TdWNjZXNzKSB7Ci0JCS8qCi0JCSAqIFdvcmsgYXJvdW5kIGEgSFYgYnVnIHdoZXJlIGl0IGdpdmVzIHVzIGEgbnVsbAotCQkgKiBhZnRlciBldmVyeSBcci4gIC0tIHBhdWx1cwotCQkgKi8KLQkJaWYgKGdvdCA+IDApIHsKLQkJCWludCBpOwotCQkJZm9yIChpID0gMTsgaSA8IGdvdDsgKytpKSB7Ci0JCQkJaWYgKGJ1ZltpXSA9PSAwICYmIGJ1ZltpLTFdID09ICdccicpIHsKLQkJCQkJLS1nb3Q7Ci0JCQkJCWlmIChpIDwgZ290KQotCQkJCQkJbWVtbW92ZSgmYnVmW2ldLCAmYnVmW2krMV0sCi0JCQkJCQkJZ290IC0gaSk7Ci0JCQkJfQotCQkJfQotCQl9CisJCSh1bnNpZ25lZCBsb25nICopYnVmLCAodW5zaWduZWQgbG9uZyAqKWJ1ZisxKSA9PSBIX1N1Y2Nlc3MpCiAJCXJldHVybiBnb3Q7Ci0JfQogCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGh2Y19nZXRfY2hhcnMpOwogCisKIC8qKgogICogaHZjX3B1dF9jaGFyczogc2VuZCBjaGFyYWN0ZXJzIHRvIGZpcm13YXJlIGZvciBkZW5vdGVkIHZ0ZXJtIGFkYXB0ZXIKICAqIEB2dGVybW5vOiBUaGUgdnRlcm1ubyBvciB1bml0X2FkZHJlc3Mgb2YgdGhlIGFkYXB0ZXIgZnJvbSB3aGljaCB0aGUgZGF0YQpAQCAtODgsMzQgKzcyLDMgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChodmNfcHV0X2NoYXJzKTsKLQotLyoKLSAqIFdlIGhvcGUvYXNzdW1lIHRoYXQgdGhlIGZpcnN0IHZ0eSBmb3VuZCBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgY29uc29sZQotICogZGV2aWNlLgotICovCi1pbnQgaHZjX2ZpbmRfdnR5cyh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdnR5OwotCWludCBudW1fZm91bmQgPSAwOwotCi0JZm9yICh2dHkgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAidnR5Iik7IHZ0eSAhPSBOVUxMOwotCQkJdnR5ID0gb2ZfZmluZF9ub2RlX2J5X25hbWUodnR5LCAidnR5IikpIHsKLQkJdWludDMyX3QgKnZ0ZXJtbm87Ci0KLQkJLyogV2UgaGF2ZSBzdGF0aWNhbGx5IGRlZmluZWQgc3BhY2UgZm9yIG9ubHkgYSBjZXJ0YWluIG51bWJlciBvZgotCQkgKiBjb25zb2xlIGFkYXB0ZXJzLiAqLwotCQlpZiAobnVtX2ZvdW5kID49IE1BWF9OUl9IVkNfQ09OU09MRVMpCi0JCQlicmVhazsKLQotCQl2dGVybW5vID0gKHVpbnQzMl90ICopZ2V0X3Byb3BlcnR5KHZ0eSwgInJlZyIsIE5VTEwpOwotCQlpZiAoIXZ0ZXJtbm8pCi0JCQljb250aW51ZTsKLQotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUodnR5LCAiaHZ0ZXJtMSIpKSB7Ci0JCQlodmNfaW5zdGFudGlhdGUoKnZ0ZXJtbm8sIG51bV9mb3VuZCk7Ci0JCQkrK251bV9mb3VuZDsKLQkJfQotCX0KLQotCXJldHVybiBudW1fZm91bmQ7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX3NldHVwLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX3NldHVwLmMKaW5kZXggYjNmNzcwZi4uMDc3YzgyZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19zZXR1cC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfc2V0dXAuYwpAQCAtODM0LDYgKzgzNCw5MiBAQAogCiBsYXRlX2luaXRjYWxsKGlTZXJpZXNfc3JjX2luaXQpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc19pU2VyaWVzX2V2ZW50cyh2b2lkKQoreworCWFzbSB2b2xhdGlsZSAoImxpIDAsMHg1NTU1OyBzYyIgOiA6IDogInIwIiwgInIzIik7Cit9CisKK3N0YXRpYyB2b2lkIHlpZWxkX3NoYXJlZF9wcm9jZXNzb3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRiOworCisJSHZDYWxsX3NldEVuYWJsZWRJbnRlcnJ1cHRzKEh2Q2FsbF9NYXNrSVBJIHwKKwkJCQkgICAgSHZDYWxsX01hc2tMcEV2ZW50IHwKKwkJCQkgICAgSHZDYWxsX01hc2tMcFByb2QgfAorCQkJCSAgICBIdkNhbGxfTWFza1RpbWVvdXQpOworCisJdGIgPSBnZXRfdGIoKTsKKwkvKiBDb21wdXRlIGZ1dHVyZSB0YiB2YWx1ZSB3aGVuIHlpZWxkIHNob3VsZCBleHBpcmUgKi8KKwlIdkNhbGxfeWllbGRQcm9jZXNzb3IoSHZDYWxsX1lpZWxkVGltZWQsIHRiK3RiX3RpY2tzX3Blcl9qaWZmeSk7CisKKwkvKgorCSAqIFRoZSBkZWNyZW1lbnRlciBzdG9wcyBkdXJpbmcgdGhlIHlpZWxkLiAgRm9yY2UgYSBmYWtlIGRlY3JlbWVudGVyCisJICogaGVyZSBhbmQgbGV0IHRoZSB0aW1lcl9pbnRlcnJ1cHQgY29kZSBzb3J0IG91dCB0aGUgYWN0dWFsIHRpbWUuCisJICovCisJZ2V0X3BhY2EoKS0+bHBwYWNhLmludF9kd29yZC5maWVsZHMuZGVjcl9pbnQgPSAxOworCXByb2Nlc3NfaVNlcmllc19ldmVudHMoKTsKK30KKworc3RhdGljIGludCBpc2VyaWVzX3NoYXJlZF9pZGxlKHZvaWQpCit7CisJd2hpbGUgKDEpIHsKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSAmJiAhaHZscGV2ZW50X2lzX3BlbmRpbmcoKSkgeworCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCXBwYzY0X3J1bmxhdGNoX29mZigpOworCisJCQkvKiBSZWNoZWNrIHdpdGggaXJxcyBvZmYgKi8KKwkJCWlmICghbmVlZF9yZXNjaGVkKCkgJiYgIWh2bHBldmVudF9pc19wZW5kaW5nKCkpCisJCQkJeWllbGRfc2hhcmVkX3Byb2Nlc3NvcigpOworCisJCQlITVRfbWVkaXVtKCk7CisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCX0KKworCQlwcGM2NF9ydW5sYXRjaF9vbigpOworCisJCWlmIChodmxwZXZlbnRfaXNfcGVuZGluZygpKQorCQkJcHJvY2Vzc19pU2VyaWVzX2V2ZW50cygpOworCisJCXNjaGVkdWxlKCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNlcmllc19kZWRpY2F0ZWRfaWRsZSh2b2lkKQoreworCWxvbmcgb2xkdmFsOworCisJd2hpbGUgKDEpIHsKKwkJb2xkdmFsID0gdGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCk7CisKKwkJaWYgKCFvbGR2YWwpIHsKKwkJCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCisJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCQkJcHBjNjRfcnVubGF0Y2hfb2ZmKCk7CisJCQkJSE1UX2xvdygpOworCisJCQkJaWYgKGh2bHBldmVudF9pc19wZW5kaW5nKCkpIHsKKwkJCQkJSE1UX21lZGl1bSgpOworCQkJCQlwcGM2NF9ydW5sYXRjaF9vbigpOworCQkJCQlwcm9jZXNzX2lTZXJpZXNfZXZlbnRzKCk7CisJCQkJfQorCQkJfQorCisJCQlITVRfbWVkaXVtKCk7CisJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCQl9IGVsc2UgeworCQkJc2V0X25lZWRfcmVzY2hlZCgpOworCQl9CisKKwkJcHBjNjRfcnVubGF0Y2hfb24oKTsKKwkJc2NoZWR1bGUoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogI2lmbmRlZiBDT05GSUdfUENJCiB2b2lkIF9faW5pdCBpU2VyaWVzX2luaXRfSVJRKHZvaWQpIHsgfQogI2VuZGlmCkBAIC04NTksNSArOTQ1LDEzIEBACiAJcHBjX21kLmdldF9ydGNfdGltZSA9IGlTZXJpZXNfZ2V0X3J0Y190aW1lOwogCXBwY19tZC5jYWxpYnJhdGVfZGVjciA9IGlTZXJpZXNfY2FsaWJyYXRlX2RlY3I7CiAJcHBjX21kLnByb2dyZXNzID0gaVNlcmllc19wcm9ncmVzczsKKworCWlmIChnZXRfcGFjYSgpLT5scHBhY2Euc2hhcmVkX3Byb2MpIHsKKwkJcHBjX21kLmlkbGVfbG9vcCA9IGlzZXJpZXNfc2hhcmVkX2lkbGU7CisJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHNoYXJlZCBwcm9jZXNzb3IgaWRsZSBsb29wXG4iKTsKKwl9IGVsc2UgeworCQlwcGNfbWQuaWRsZV9sb29wID0gaXNlcmllc19kZWRpY2F0ZWRfaWRsZTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgZGVkaWNhdGVkIGlkbGUgbG9vcFxuIik7CisJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pZGxlLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9pZGxlLmMKaW5kZXggMDg5NTJjNy4uOTU0Mzk1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2lkbGUuYwpAQCAtMjAsMTA5ICsyMCwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGwuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9JdExwUXVldWUuaD4KLSNpbmNsdWRlIDxhc20vcGxwYXJfd3JhcHBlcnMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KIAogZXh0ZXJuIHZvaWQgcG93ZXI0X2lkbGUodm9pZCk7CiAKLXN0YXRpYyBpbnQgKCppZGxlX2xvb3ApKHZvaWQpOwotCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhZaWVsZFRpbWUgPSAwOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWluWWllbGRUaW1lID0gMHhmZmZmZmZmZmZmZmZmZmZmVUw7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX2lTZXJpZXNfZXZlbnRzKHZvaWQpCi17Ci0JYXNtIHZvbGF0aWxlICgibGkgMCwweDU1NTU7IHNjIiA6IDogOiAicjAiLCAicjMiKTsKLX0KLQotc3RhdGljIHZvaWQgeWllbGRfc2hhcmVkX3Byb2Nlc3Nvcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdGI7Ci0JdW5zaWduZWQgbG9uZyB5aWVsZFRpbWU7Ci0KLQlIdkNhbGxfc2V0RW5hYmxlZEludGVycnVwdHMoSHZDYWxsX01hc2tJUEkgfAotCQkJCSAgICBIdkNhbGxfTWFza0xwRXZlbnQgfAotCQkJCSAgICBIdkNhbGxfTWFza0xwUHJvZCB8Ci0JCQkJICAgIEh2Q2FsbF9NYXNrVGltZW91dCk7Ci0KLQl0YiA9IGdldF90YigpOwotCS8qIENvbXB1dGUgZnV0dXJlIHRiIHZhbHVlIHdoZW4geWllbGQgc2hvdWxkIGV4cGlyZSAqLwotCUh2Q2FsbF95aWVsZFByb2Nlc3NvcihIdkNhbGxfWWllbGRUaW1lZCwgdGIrdGJfdGlja3NfcGVyX2ppZmZ5KTsKLQotCXlpZWxkVGltZSA9IGdldF90YigpIC0gdGI7Ci0JaWYgKHlpZWxkVGltZSA+IG1heFlpZWxkVGltZSkKLQkJbWF4WWllbGRUaW1lID0geWllbGRUaW1lOwotCi0JaWYgKHlpZWxkVGltZSA8IG1pbllpZWxkVGltZSkKLQkJbWluWWllbGRUaW1lID0geWllbGRUaW1lOwotCQotCS8qCi0JICogVGhlIGRlY3JlbWVudGVyIHN0b3BzIGR1cmluZyB0aGUgeWllbGQuICBGb3JjZSBhIGZha2UgZGVjcmVtZW50ZXIKLQkgKiBoZXJlIGFuZCBsZXQgdGhlIHRpbWVyX2ludGVycnVwdCBjb2RlIHNvcnQgb3V0IHRoZSBhY3R1YWwgdGltZS4KLQkgKi8KLQlnZXRfcGFjYSgpLT5scHBhY2EuaW50X2R3b3JkLmZpZWxkcy5kZWNyX2ludCA9IDE7Ci0JcHJvY2Vzc19pU2VyaWVzX2V2ZW50cygpOwotfQotCi1zdGF0aWMgaW50IGlTZXJpZXNfaWRsZSh2b2lkKQotewotCXN0cnVjdCBwYWNhX3N0cnVjdCAqbHBhY2E7Ci0JbG9uZyBvbGR2YWw7Ci0KLQkvKiBlbnN1cmUgaVNlcmllcyBydW4gbGlnaHQgd2lsbCBiZSBvdXQgd2hlbiBpZGxlICovCi0JcHBjNjRfcnVubGF0Y2hfb2ZmKCk7Ci0KLQlscGFjYSA9IGdldF9wYWNhKCk7Ci0KLQl3aGlsZSAoMSkgewotCQlpZiAobHBhY2EtPmxwcGFjYS5zaGFyZWRfcHJvYykgewotCQkJaWYgKGh2bHBldmVudF9pc19wZW5kaW5nKCkpCi0JCQkJcHJvY2Vzc19pU2VyaWVzX2V2ZW50cygpOwotCQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJCQl5aWVsZF9zaGFyZWRfcHJvY2Vzc29yKCk7Ci0JCX0gZWxzZSB7Ci0JCQlvbGR2YWwgPSB0ZXN0X2FuZF9jbGVhcl90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKTsKLQotCQkJaWYgKCFvbGR2YWwpIHsKLQkJCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQotCQkJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJCQkJSE1UX21lZGl1bSgpOwotCQkJCQlpZiAoaHZscGV2ZW50X2lzX3BlbmRpbmcoKSkKLQkJCQkJCXByb2Nlc3NfaVNlcmllc19ldmVudHMoKTsKLQkJCQkJSE1UX2xvdygpOwotCQkJCX0KLQotCQkJCUhNVF9tZWRpdW0oKTsKLQkJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwotCQkJfSBlbHNlIHsKLQkJCQlzZXRfbmVlZF9yZXNjaGVkKCk7Ci0JCQl9Ci0JCX0KLQotCQlwcGM2NF9ydW5sYXRjaF9vbigpOwotCQlzY2hlZHVsZSgpOwotCQlwcGM2NF9ydW5sYXRjaF9vZmYoKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGludCBkZWZhdWx0X2lkbGUodm9pZCkKK2ludCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAlsb25nIG9sZHZhbDsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMTM0LDcgKzQzLDggQEAKIAkJCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCiAJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpICYmICFjcHVfaXNfb2ZmbGluZShjcHUpKSB7Ci0JCQkJYmFycmllcigpOworCQkJCXBwYzY0X3J1bmxhdGNoX29mZigpOworCiAJCQkJLyoKIAkJCQkgKiBHbyBpbnRvIGxvdyB0aHJlYWQgcHJpb3JpdHkgYW5kIHBvc3NpYmx5CiAJCQkJICogbG93IHBvd2VyIG1vZGUuCkBAIC0xNDksNiArNTksNyBAQAogCQkJc2V0X25lZWRfcmVzY2hlZCgpOwogCQl9CiAKKwkJcHBjNjRfcnVubGF0Y2hfb24oKTsKIAkJc2NoZWR1bGUoKTsKIAkJaWYgKGNwdV9pc19vZmZsaW5lKGNwdSkgJiYgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SVU5OSU5HKQogCQkJY3B1X2RpZSgpOwpAQCAtMTU3LDEyNyArNjgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwotCi1ERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc210X3Nub296ZV9kZWxheSk7Ci0KLWludCBkZWRpY2F0ZWRfaWRsZSh2b2lkKQoraW50IG5hdGl2ZV9pZGxlKHZvaWQpCiB7Ci0JbG9uZyBvbGR2YWw7Ci0Jc3RydWN0IHBhY2Ffc3RydWN0ICpscGFjYSA9IGdldF9wYWNhKCksICpwcGFjYTsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3Nub296ZTsKLQl1bnNpZ25lZCBsb25nICpzbXRfc25vb3plX2RlbGF5ID0gJl9fZ2V0X2NwdV92YXIoc210X3Nub296ZV9kZWxheSk7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXBwYWNhID0gJnBhY2FbY3B1IF4gMV07Ci0KIAl3aGlsZSAoMSkgewotCQkvKgotCQkgKiBJbmRpY2F0ZSB0byB0aGUgSFYgdGhhdCB3ZSBhcmUgaWRsZS4gTm93IHdvdWxkIGJlCi0JCSAqIGEgZ29vZCB0aW1lIHRvIGZpbmQgb3RoZXIgd29yayB0byBkaXNwYXRjaC4KLQkJICovCi0JCWxwYWNhLT5scHBhY2EuaWRsZSA9IDE7CisJCXBwYzY0X3J1bmxhdGNoX29mZigpOwogCi0JCW9sZHZhbCA9IHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpOwotCQlpZiAoIW9sZHZhbCkgewotCQkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7Ci0JCQlzdGFydF9zbm9vemUgPSBfX2dldF90YigpICsKLQkJCQkqc210X3Nub296ZV9kZWxheSAqIHRiX3RpY2tzX3Blcl91c2VjOwotCQkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSAmJiAhY3B1X2lzX29mZmxpbmUoY3B1KSkgewotCQkJCS8qCi0JCQkJICogR28gaW50byBsb3cgdGhyZWFkIHByaW9yaXR5IGFuZCBwb3NzaWJseQotCQkJCSAqIGxvdyBwb3dlciBtb2RlLgotCQkJCSAqLwotCQkJCUhNVF9sb3coKTsKLQkJCQlITVRfdmVyeV9sb3coKTsKKwkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCXBvd2VyNF9pZGxlKCk7CiAKLQkJCQlpZiAoKnNtdF9zbm9vemVfZGVsYXkgPT0gMCB8fAotCQkJCSAgICBfX2dldF90YigpIDwgc3RhcnRfc25vb3plKQotCQkJCQljb250aW51ZTsKLQotCQkJCUhNVF9tZWRpdW0oKTsKLQotCQkJCWlmICghKHBwYWNhLT5scHBhY2EuaWRsZSkpIHsKLQkJCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCQkJCQkvKgotCQkJCQkgKiBXZSBhcmUgYWJvdXQgdG8gc2xlZXAgdGhlIHRocmVhZAotCQkJCQkgKiBhbmQgc28gd29udCBiZSBwb2xsaW5nIGFueQotCQkJCQkgKiBtb3JlLgotCQkJCQkgKi8KLQkJCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQotCQkJCQkvKgotCQkJCQkgKiBTTVQgZHluYW1pYyBtb2RlLiBDZWRlIHdpbGwgcmVzdWx0Ci0JCQkJCSAqIGluIHRoaXMgdGhyZWFkIGdvaW5nIGRvcm1hbnQsIGlmIHRoZQotCQkJCQkgKiBwYXJ0bmVyIHRocmVhZCBpcyBzdGlsbCBkb2luZyB3b3JrLgotCQkJCQkgKiBUaHJlYWQgd2FrZXMgdXAgaWYgcGFydG5lciBnb2VzIGlkbGUsCi0JCQkJCSAqIGFuIGludGVycnVwdCBpcyBwcmVzZW50ZWQsIG9yIGEgcHJvZAotCQkJCQkgKiBvY2N1cnMuICBSZXR1cm5pbmcgZnJvbSB0aGUgY2VkZQotCQkJCQkgKiBlbmFibGVzIGV4dGVybmFsIGludGVycnVwdHMuCi0JCQkJCSAqLwotCQkJCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQotCQkJCQkJY2VkZV9wcm9jZXNzb3IoKTsKLQkJCQkJZWxzZQotCQkJCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qCi0JCQkJCSAqIEdpdmUgdGhlIEhWIGFuIG9wcG9ydHVuaXR5IGF0IHRoZQotCQkJCQkgKiBwcm9jZXNzb3IsIHNpbmNlIHdlIGFyZSBub3QgZG9pbmcKLQkJCQkJICogYW55IHdvcmsuCi0JCQkJCSAqLwotCQkJCQlwb2xsX3BlbmRpbmcoKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7Ci0JCX0gZWxzZSB7Ci0JCQlzZXRfbmVlZF9yZXNjaGVkKCk7CisJCWlmIChuZWVkX3Jlc2NoZWQoKSkgeworCQkJcHBjNjRfcnVubGF0Y2hfb24oKTsKKwkJCXNjaGVkdWxlKCk7CiAJCX0KIAotCQlITVRfbWVkaXVtKCk7Ci0JCWxwYWNhLT5scHBhY2EuaWRsZSA9IDA7Ci0JCXNjaGVkdWxlKCk7Ci0JCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKLQkJCWNwdV9kaWUoKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2hhcmVkX2lkbGUodm9pZCkKLXsKLQlzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKmxwYWNhID0gZ2V0X3BhY2EoKTsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0Jd2hpbGUgKDEpIHsKLQkJLyoKLQkJICogSW5kaWNhdGUgdG8gdGhlIEhWIHRoYXQgd2UgYXJlIGlkbGUuIE5vdyB3b3VsZCBiZQotCQkgKiBhIGdvb2QgdGltZSB0byBmaW5kIG90aGVyIHdvcmsgdG8gZGlzcGF0Y2guCi0JCSAqLwotCQlscGFjYS0+bHBwYWNhLmlkbGUgPSAxOwotCi0JCXdoaWxlICghbmVlZF9yZXNjaGVkKCkgJiYgIWNwdV9pc19vZmZsaW5lKGNwdSkpIHsKLQkJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQkJCS8qCi0JCQkgKiBZaWVsZCB0aGUgcHJvY2Vzc29yIHRvIHRoZSBoeXBlcnZpc29yLiAgV2UgcmV0dXJuIGlmCi0JCQkgKiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQgb2NjdXJzICh3aGljaCBhcmUgZHJpdmVuIHByaW9yCi0JCQkgKiB0byByZXR1cm5pbmcgaGVyZSkgb3IgaWYgYSBwcm9kIG9jY3VycyBmcm9tIGFub3RoZXIgCi0JCQkgKiBwcm9jZXNzb3IuIFdoZW4gcmV0dXJuaW5nIGhlcmUsIGV4dGVybmFsIGludGVycnVwdHMKLQkJCSAqIGFyZSBlbmFibGVkLgotCQkJICoKLQkJCSAqIENoZWNrIG5lZWRfcmVzY2hlZCgpIGFnYWluIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAotCQkJICogdG8gYXZvaWQgYSByYWNlLgotCQkJICovCi0JCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQotCQkJCWNlZGVfcHJvY2Vzc29yKCk7Ci0JCQllbHNlCi0JCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQl9Ci0KLQkJSE1UX21lZGl1bSgpOwotCQlscGFjYS0+bHBwYWNhLmlkbGUgPSAwOwotCQlzY2hlZHVsZSgpOwogCQlpZiAoY3B1X2lzX29mZmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSAmJgogCQkgICAgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SVU5OSU5HKQogCQkJY3B1X2RpZSgpOwpAQCAtMjg2LDI5ICs4OSwxMCBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1BQQ19QU0VSSUVTICovCi0KLXN0YXRpYyBpbnQgbmF0aXZlX2lkbGUodm9pZCkKLXsKLQl3aGlsZSgxKSB7Ci0JCS8qIGNoZWNrIENQVSB0eXBlIGhlcmUgKi8KLQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJCXBvd2VyNF9pZGxlKCk7Ci0JCWlmIChuZWVkX3Jlc2NoZWQoKSkKLQkJCXNjaGVkdWxlKCk7Ci0KLQkJaWYgKGNwdV9pc19vZmZsaW5lKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpICYmCi0JCSAgICBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpCi0JCQljcHVfZGllKCk7Ci0JfQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCi0KIHZvaWQgY3B1X2lkbGUodm9pZCkKIHsKLQlpZGxlX2xvb3AoKTsKKwlCVUdfT04oTlVMTCA9PSBwcGNfbWQuaWRsZV9sb29wKTsKKwlwcGNfbWQuaWRsZV9sb29wKCk7CiB9CiAKIGludCBwb3dlcnNhdmVfbmFwOwpAQCAtMzQyLDQyICsxMjYsMyBAQAogfQogX19pbml0Y2FsbChyZWdpc3Rlcl9wb3dlcnNhdmVfbmFwX3N5c2N0bCk7CiAjZW5kaWYKLQotaW50IGlkbGVfc2V0dXAodm9pZCkKLXsKLQkvKgotCSAqIE1vdmUgdGhhdCBqdW5rIHRvIGVhY2ggcGxhdGZvcm0gc3BlY2lmaWMgZmlsZSwgZXZlbnR1YWxseSBkZWZpbmUKLQkgKiBhIHBTZXJpZXNfaWRsZSBmb3Igc2hhcmVkIHByb2Nlc3NvciBzdHVmZgotCSAqLwotI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotCWlkbGVfbG9vcCA9IGlTZXJpZXNfaWRsZTsKLQlyZXR1cm4gMTsKLSNlbHNlCi0JaWRsZV9sb29wID0gZGVmYXVsdF9pZGxlOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9QU0VSSUVTKSB7Ci0JCWlmIChjdXJfY3B1X3NwZWMtPmZpcm13YXJlX2ZlYXR1cmVzICYgRldfRkVBVFVSRV9TUExQQVIpIHsKLQkJCWlmIChnZXRfcGFjYSgpLT5scHBhY2Euc2hhcmVkX3Byb2MpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBzaGFyZWQgcHJvY2Vzc29yIGlkbGUgbG9vcFxuIik7Ci0JCQkJaWRsZV9sb29wID0gc2hhcmVkX2lkbGU7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIGRlZGljYXRlZCBpZGxlIGxvb3BcbiIpOwotCQkJCWlkbGVfbG9vcCA9IGRlZGljYXRlZF9pZGxlOwotCQkJfQotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgZGVmYXVsdCBpZGxlIGxvb3BcbiIpOwotCQkJaWRsZV9sb29wID0gZGVmYXVsdF9pZGxlOwotCQl9Ci0JfQotI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLwotI2lmbmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QT1dFUk1BQyB8fAotCSAgICBzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX01BUExFKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIG5hdGl2ZS9OQVAgaWRsZSBsb29wXG4iKTsKLQkJaWRsZV9sb29wID0gbmF0aXZlX2lkbGU7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLwotCi0JcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9tYXBsZV9zZXR1cC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvbWFwbGVfc2V0dXAuYwppbmRleCBkYTg5MDBiLi5iYjU1YjVhIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9tYXBsZV9zZXR1cC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL21hcGxlX3NldHVwLmMKQEAgLTE3Nyw2ICsxNzcsOCBAQAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CiAjZW5kaWYKKworCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIG5hdGl2ZS9OQVAgaWRsZSBsb29wXG4iKTsKIH0KIAogLyogCkBAIC0yOTcsNCArMjk5LDUgQEAKICAgICAgICAJLmdldF9ydGNfdGltZQkJPSBtYXBsZV9nZXRfcnRjX3RpbWUsCiAgICAgICAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiAJLnByb2dyZXNzCQk9IG1hcGxlX3Byb2dyZXNzLAorCS5pZGxlX2xvb3AJCT0gbmF0aXZlX2lkbGUsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvbWlzYy5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvbWlzYy5TCmluZGV4IGYzZGVhMGMuLjU5ZjRmOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL21pc2MuUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9taXNjLlMKQEAgLTExMjQsOSArMTEyNCwxMSBAQAogCS5sbG9uZyAuY29tcGF0X3N5c19tcV9nZXRzZXRhdHRyCiAJLmxsb25nIC5jb21wYXRfc3lzX2tleGVjX2xvYWQKIAkubGxvbmcgLnN5czMyX2FkZF9rZXkKLQkubGxvbmcgLnN5czMyX3JlcXVlc3Rfa2V5CisJLmxsb25nIC5zeXMzMl9yZXF1ZXN0X2tleQkvKiAyNzAgKi8KIAkubGxvbmcgLmNvbXBhdF9zeXNfa2V5Y3RsCiAJLmxsb25nIC5jb21wYXRfc3lzX3dhaXRpZAorCS5sbG9uZyAuc3lzMzJfaW9wcmlvX3NldAorCS5sbG9uZyAuc3lzMzJfaW9wcmlvX2dldAogCiAJLmJhbGlnbiA4CiBfR0xPQkFMKHN5c19jYWxsX3RhYmxlKQpAQCAtMTQwMywzICsxNDA1LDUgQEAKIAkubGxvbmcgLnN5c19yZXF1ZXN0X2tleQkJLyogMjcwICovCiAJLmxsb25nIC5zeXNfa2V5Y3RsCiAJLmxsb25nIC5zeXNfd2FpdGlkCisJLmxsb25nIC5zeXNfaW9wcmlvX3NldAorCS5sbG9uZyAuc3lzX2lvcHJpb19nZXQKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMKaW5kZXggNjZiZDVhYjcuLmI4MGU4MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL29mX2RldmljZS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL29mX2RldmljZS5jCkBAIC0zLDYgKzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAKQEAgLTE1LDIwICsxNiwyMCBAQAogICogVXNlZCBieSBhIGRyaXZlciB0byBjaGVjayB3aGV0aGVyIGFuIG9mX2RldmljZSBwcmVzZW50IGluIHRoZQogICogc3lzdGVtIGlzIGluIGl0cyBsaXN0IG9mIHN1cHBvcnRlZCBkZXZpY2VzLgogICovCi1jb25zdCBzdHJ1Y3Qgb2ZfbWF0Y2ggKiBvZl9tYXRjaF9kZXZpY2UoY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaGVzLAorY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfbWF0Y2hfZGV2aWNlKGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoZXMsCiAJCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2UgKmRldikKIHsKIAlpZiAoIWRldi0+bm9kZSkKIAkJcmV0dXJuIE5VTEw7Ci0Jd2hpbGUgKG1hdGNoZXMtPm5hbWUgfHwgbWF0Y2hlcy0+dHlwZSB8fCBtYXRjaGVzLT5jb21wYXRpYmxlKSB7CisJd2hpbGUgKG1hdGNoZXMtPm5hbWVbMF0gfHwgbWF0Y2hlcy0+dHlwZVswXSB8fCBtYXRjaGVzLT5jb21wYXRpYmxlWzBdKSB7CiAJCWludCBtYXRjaCA9IDE7Ci0JCWlmIChtYXRjaGVzLT5uYW1lICYmIG1hdGNoZXMtPm5hbWUgIT0gT0ZfQU5ZX01BVENIKQorCQlpZiAobWF0Y2hlcy0+bmFtZVswXSkKIAkJCW1hdGNoICY9IGRldi0+bm9kZS0+bmFtZQogCQkJCSYmICFzdHJjbXAobWF0Y2hlcy0+bmFtZSwgZGV2LT5ub2RlLT5uYW1lKTsKLQkJaWYgKG1hdGNoZXMtPnR5cGUgJiYgbWF0Y2hlcy0+dHlwZSAhPSBPRl9BTllfTUFUQ0gpCisJCWlmIChtYXRjaGVzLT50eXBlWzBdKQogCQkJbWF0Y2ggJj0gZGV2LT5ub2RlLT50eXBlCiAJCQkJJiYgIXN0cmNtcChtYXRjaGVzLT50eXBlLCBkZXYtPm5vZGUtPnR5cGUpOwotCQlpZiAobWF0Y2hlcy0+Y29tcGF0aWJsZSAmJiBtYXRjaGVzLT5jb21wYXRpYmxlICE9IE9GX0FOWV9NQVRDSCkKKwkJaWYgKG1hdGNoZXMtPmNvbXBhdGlibGVbMF0pCiAJCQltYXRjaCAmPSBkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtPm5vZGUsCiAJCQkJbWF0Y2hlcy0+Y29tcGF0aWJsZSk7CiAJCWlmIChtYXRjaCkKQEAgLTQyLDcgKzQzLDcgQEAKIHsKIAlzdHJ1Y3Qgb2ZfZGV2aWNlICogb2ZfZGV2ID0gdG9fb2ZfZGV2aWNlKGRldik7CiAJc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqIG9mX2RydiA9IHRvX29mX3BsYXRmb3JtX2RyaXZlcihkcnYpOwotCWNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqIG1hdGNoZXMgPSBvZl9kcnYtPm1hdGNoX3RhYmxlOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKiBtYXRjaGVzID0gb2ZfZHJ2LT5tYXRjaF90YWJsZTsKIAogCWlmICghbWF0Y2hlcykKIAkJcmV0dXJuIDA7CkBAIC03NSw3ICs3Niw3IEBACiAJaW50IGVycm9yID0gLUVOT0RFVjsKIAlzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnY7CiAJc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2OwotCWNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqbWF0Y2g7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAKIAlkcnYgPSB0b19vZl9wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCW9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19zZXR1cC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19zZXR1cC5jCmluZGV4IDQ0ZDlhZjcuLjViZWM5NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfc2V0dXAuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX3NldHVwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICN1bmRlZiBERUJVRwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtODIsNiArODMsOSBAQAogZXh0ZXJuIHZvaWQgcFNlcmllc19zeXN0ZW1fcmVzZXRfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiBpbnQgcFNlcmllc19tYWNoaW5lX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKK3N0YXRpYyBpbnQgcHNlcmllc19zaGFyZWRfaWRsZSh2b2lkKTsKK3N0YXRpYyBpbnQgcHNlcmllc19kZWRpY2F0ZWRfaWRsZSh2b2lkKTsKKwogc3RhdGljIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqIGNocnBfaW50X2Fja19zcGVjaWFsOwogc3RydWN0IG1waWMgKnBTZXJpZXNfbXBpYzsKIApAQCAtMjI5LDYgKzIzMywyMCBAQAogCiAJaWYgKGN1cl9jcHVfc3BlYy0+ZmlybXdhcmVfZmVhdHVyZXMgJiBGV19GRUFUVVJFX1NQTFBBUikKIAkJdnBhX2luaXQoYm9vdF9jcHVpZCk7CisKKwkvKiBDaG9vc2UgYW4gaWRsZSBsb29wICovCisJaWYgKGN1cl9jcHVfc3BlYy0+ZmlybXdhcmVfZmVhdHVyZXMgJiBGV19GRUFUVVJFX1NQTFBBUikgeworCQlpZiAoZ2V0X3BhY2EoKS0+bHBwYWNhLnNoYXJlZF9wcm9jKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBzaGFyZWQgcHJvY2Vzc29yIGlkbGUgbG9vcFxuIik7CisJCQlwcGNfbWQuaWRsZV9sb29wID0gcHNlcmllc19zaGFyZWRfaWRsZTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIGRlZGljYXRlZCBpZGxlIGxvb3BcbiIpOworCQkJcHBjX21kLmlkbGVfbG9vcCA9IHBzZXJpZXNfZGVkaWNhdGVkX2lkbGU7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBkZWZhdWx0IGlkbGUgbG9vcFxuIik7CisJCXBwY19tZC5pZGxlX2xvb3AgPSBkZWZhdWx0X2lkbGU7CisJfQogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwU2VyaWVzX2luaXRfcGFuZWwodm9pZCkKQEAgLTQxOCw2ICs0MzYsMTQ0IEBACiAJcmV0dXJuIDE7CiB9CiAKK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzbXRfc25vb3plX2RlbGF5KTsKKworc3RhdGljIGlubGluZSB2b2lkIGRlZGljYXRlZF9pZGxlX3NsZWVwKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHBhY2Ffc3RydWN0ICpwcGFjYSA9ICZwYWNhW2NwdSBeIDFdOworCisJLyogT25seSBzbGVlcCBpZiB0aGUgb3RoZXIgdGhyZWFkIGlzIG5vdCBpZGxlICovCisJaWYgKCEocHBhY2EtPmxwcGFjYS5pZGxlKSkgeworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJCS8qCisJCSAqIFdlIGFyZSBhYm91dCB0byBzbGVlcCB0aGUgdGhyZWFkIGFuZCBzbyB3b250IGJlIHBvbGxpbmcgYW55CisJCSAqIG1vcmUuCisJCSAqLworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCisJCS8qCisJCSAqIFNNVCBkeW5hbWljIG1vZGUuIENlZGUgd2lsbCByZXN1bHQgaW4gdGhpcyB0aHJlYWQgZ29pbmcKKwkJICogZG9ybWFudCwgaWYgdGhlIHBhcnRuZXIgdGhyZWFkIGlzIHN0aWxsIGRvaW5nIHdvcmsuICBUaHJlYWQKKwkJICogd2FrZXMgdXAgaWYgcGFydG5lciBnb2VzIGlkbGUsIGFuIGludGVycnVwdCBpcyBwcmVzZW50ZWQsIG9yCisJCSAqIGEgcHJvZCBvY2N1cnMuICBSZXR1cm5pbmcgZnJvbSB0aGUgY2VkZSBlbmFibGVzIGV4dGVybmFsCisJCSAqIGludGVycnVwdHMuCisJCSAqLworCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQorCQkJY2VkZV9wcm9jZXNzb3IoKTsKKwkJZWxzZQorCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEdpdmUgdGhlIEhWIGFuIG9wcG9ydHVuaXR5IGF0IHRoZSBwcm9jZXNzb3IsIHNpbmNlIHdlIGFyZQorCQkgKiBub3QgZG9pbmcgYW55IHdvcmsuCisJCSAqLworCQlwb2xsX3BlbmRpbmcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHNlcmllc19kZWRpY2F0ZWRfaWRsZSh2b2lkKQoreworCWxvbmcgb2xkdmFsOworCXN0cnVjdCBwYWNhX3N0cnVjdCAqbHBhY2EgPSBnZXRfcGFjYSgpOworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgbG9uZyBzdGFydF9zbm9vemU7CisJdW5zaWduZWQgbG9uZyAqc210X3Nub296ZV9kZWxheSA9ICZfX2dldF9jcHVfdmFyKHNtdF9zbm9vemVfZGVsYXkpOworCisJd2hpbGUgKDEpIHsKKwkJLyoKKwkJICogSW5kaWNhdGUgdG8gdGhlIEhWIHRoYXQgd2UgYXJlIGlkbGUuIE5vdyB3b3VsZCBiZQorCQkgKiBhIGdvb2QgdGltZSB0byBmaW5kIG90aGVyIHdvcmsgdG8gZGlzcGF0Y2guCisJCSAqLworCQlscGFjYS0+bHBwYWNhLmlkbGUgPSAxOworCisJCW9sZHZhbCA9IHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpOworCQlpZiAoIW9sZHZhbCkgeworCQkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisKKwkJCXN0YXJ0X3Nub296ZSA9IF9fZ2V0X3RiKCkgKworCQkJCSpzbXRfc25vb3plX2RlbGF5ICogdGJfdGlja3NfcGVyX3VzZWM7CisKKwkJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkgJiYgIWNwdV9pc19vZmZsaW5lKGNwdSkpIHsKKwkJCQlwcGM2NF9ydW5sYXRjaF9vZmYoKTsKKworCQkJCS8qCisJCQkJICogR28gaW50byBsb3cgdGhyZWFkIHByaW9yaXR5IGFuZCBwb3NzaWJseQorCQkJCSAqIGxvdyBwb3dlciBtb2RlLgorCQkJCSAqLworCQkJCUhNVF9sb3coKTsKKwkJCQlITVRfdmVyeV9sb3coKTsKKworCQkJCWlmICgqc210X3Nub296ZV9kZWxheSAhPSAwICYmCisJCQkJICAgIF9fZ2V0X3RiKCkgPiBzdGFydF9zbm9vemUpIHsKKwkJCQkJSE1UX21lZGl1bSgpOworCQkJCQlkZWRpY2F0ZWRfaWRsZV9zbGVlcChjcHUpOworCQkJCX0KKworCQkJfQorCisJCQlITVRfbWVkaXVtKCk7CisJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCQl9IGVsc2UgeworCQkJc2V0X25lZWRfcmVzY2hlZCgpOworCQl9CisKKwkJbHBhY2EtPmxwcGFjYS5pZGxlID0gMDsKKwkJcHBjNjRfcnVubGF0Y2hfb24oKTsKKworCQlzY2hlZHVsZSgpOworCisJCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKKwkJCWNwdV9kaWUoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHNlcmllc19zaGFyZWRfaWRsZSh2b2lkKQoreworCXN0cnVjdCBwYWNhX3N0cnVjdCAqbHBhY2EgPSBnZXRfcGFjYSgpOworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwl3aGlsZSAoMSkgeworCQkvKgorCQkgKiBJbmRpY2F0ZSB0byB0aGUgSFYgdGhhdCB3ZSBhcmUgaWRsZS4gTm93IHdvdWxkIGJlCisJCSAqIGEgZ29vZCB0aW1lIHRvIGZpbmQgb3RoZXIgd29yayB0byBkaXNwYXRjaC4KKwkJICovCisJCWxwYWNhLT5scHBhY2EuaWRsZSA9IDE7CisKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSAmJiAhY3B1X2lzX29mZmxpbmUoY3B1KSkgeworCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCXBwYzY0X3J1bmxhdGNoX29mZigpOworCisJCQkvKgorCQkJICogWWllbGQgdGhlIHByb2Nlc3NvciB0byB0aGUgaHlwZXJ2aXNvci4gIFdlIHJldHVybiBpZgorCQkJICogYW4gZXh0ZXJuYWwgaW50ZXJydXB0IG9jY3VycyAod2hpY2ggYXJlIGRyaXZlbiBwcmlvcgorCQkJICogdG8gcmV0dXJuaW5nIGhlcmUpIG9yIGlmIGEgcHJvZCBvY2N1cnMgZnJvbSBhbm90aGVyCisJCQkgKiBwcm9jZXNzb3IuIFdoZW4gcmV0dXJuaW5nIGhlcmUsIGV4dGVybmFsIGludGVycnVwdHMKKwkJCSAqIGFyZSBlbmFibGVkLgorCQkJICoKKwkJCSAqIENoZWNrIG5lZWRfcmVzY2hlZCgpIGFnYWluIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAorCQkJICogdG8gYXZvaWQgYSByYWNlLgorCQkJICovCisJCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQorCQkJCWNlZGVfcHJvY2Vzc29yKCk7CisJCQllbHNlCisJCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCQlITVRfbWVkaXVtKCk7CisJCX0KKworCQlscGFjYS0+bHBwYWNhLmlkbGUgPSAwOworCQlwcGM2NF9ydW5sYXRjaF9vbigpOworCisJCXNjaGVkdWxlKCk7CisKKwkJaWYgKGNwdV9pc19vZmZsaW5lKGNwdSkgJiYgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SVU5OSU5HKQorCQkJY3B1X2RpZSgpOworCX0KKworCXJldHVybiAwOworfQorCiBzdHJ1Y3QgbWFjaGRlcF9jYWxscyBfX2luaXRkYXRhIHBTZXJpZXNfbWQgPSB7CiAJLnByb2JlCQkJPSBwU2VyaWVzX3Byb2JlLAogCS5zZXR1cF9hcmNoCQk9IHBTZXJpZXNfc2V0dXBfYXJjaCwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3BtYWNfc2V0dXAuYyBiL2FyY2gvcHBjNjQva2VybmVsL3BtYWNfc2V0dXAuYwppbmRleCA2Y2YwM2QzLi4zMDEzY2RiIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wbWFjX3NldHVwLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcG1hY19zZXR1cC5jCkBAIC0xODYsNiArMTg2LDggQEAKICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwogI2VuZGlmCisKKwlwcmludGsoS0VSTl9JTkZPICJVc2luZyBuYXRpdmUvTkFQIGlkbGUgbG9vcFxuIik7CiB9CiAKICNpZmRlZiBDT05GSUdfU0NTSQpAQCAtNTA3LDUgKzUwOSw2IEBACiAgICAgICAJLmNhbGlicmF0ZV9kZWNyCQk9IHBtYWNfY2FsaWJyYXRlX2RlY3IsCiAJLmZlYXR1cmVfY2FsbAkJPSBwbWFjX2RvX2ZlYXR1cmVfY2FsbCwKIAkucHJvZ3Jlc3MJCT0gcG1hY19wcm9ncmVzcywKLQkuY2hlY2tfbGVnYWN5X2lvcG9ydAk9IHBtYWNfY2hlY2tfbGVnYWN5X2lvcG9ydAorCS5jaGVja19sZWdhY3lfaW9wb3J0CT0gcG1hY19jaGVja19sZWdhY3lfaW9wb3J0LAorCS5pZGxlX2xvb3AJCT0gbmF0aXZlX2lkbGUsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvcHBjNjQva2VybmVsL3NldHVwLmMKaW5kZXggZDVlNDg2Ni4uZDFiMzNmMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9zZXR1cC5jCkBAIC05Niw3ICs5Niw2IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBrbGltaXQ7CiAKIGV4dGVybiB2b2lkIG1tX2luaXRfcHBjNjQodm9pZCk7Ci1leHRlcm4gaW50ICBpZGxlX3NldHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgc3RhYl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgc3RhYik7CiBleHRlcm4gdm9pZCBodGFiX2luaXRpYWxpemUodm9pZCk7CiBleHRlcm4gdm9pZCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqZmxhdF9kdCk7CkBAIC0xMDgxLDggKzEwODAsMTEgQEAKIAogCXBwY19tZC5zZXR1cF9hcmNoKCk7CiAKLQkvKiBTZWxlY3QgdGhlIGNvcnJlY3QgaWRsZSBsb29wIGZvciB0aGUgcGxhdGZvcm0uICovCi0JaWRsZV9zZXR1cCgpOworCS8qIFVzZSB0aGUgZGVmYXVsdCBpZGxlIGxvb3AgaWYgdGhlIHBsYXRmb3JtIGhhc24ndCBwcm92aWRlZCBvbmUuICovCisJaWYgKE5VTEwgPT0gcHBjX21kLmlkbGVfbG9vcCkgeworCQlwcGNfbWQuaWRsZV9sb29wID0gZGVmYXVsdF9pZGxlOworCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBkZWZhdWx0IGlkbGUgbG9vcFxuIik7CisJfQogCiAJcGFnaW5nX2luaXQoKTsKIAlwcGM2NF9ib290X21zZygweDE1LCAiU2V0dXAgRG9uZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvc3lzX3BwYzMyLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9zeXNfcHBjMzIuYwppbmRleCAxMTg0MzZlLi4yMDY2MTkwIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9zeXNfcHBjMzIuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9zeXNfcHBjMzIuYwpAQCAtMzAsNDcgKzMwLDI2IEBACiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgotI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgotI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL2NhY2hlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC94ZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+Ci0jaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+Ci0jaW5jbHVkZSA8bGludXgvZG5vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvYWlvX2FiaS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogCi0jaW5jbHVkZSA8bmV0L3NjbS5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lwYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxhc20vcHBjZGVidWcuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KQEAgLTM1MCw4ICszMjksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQotLyogVGhlc2UgYXJlIGhlcmUganVzdCBpbiBjYXNlIHNvbWUgb2xkIHNwYXJjMzIgYmluYXJ5IGNhbGxzIGl0LiAqLwogYXNtbGlua2FnZSBsb25nIHN5czMyX3BhdXNlKHZvaWQpCiB7CiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CkBAIC0zNjAsOCArMzM3LDYgQEAKIAlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwogfQogCi0KLQogc3RhdGljIGlubGluZSBsb25nIGdldF90czMyKHN0cnVjdCB0aW1lc3BlYyAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKIHsKIAlsb25nIHVzZWM7CkBAIC04NDcsMTYgKzgyMiw2IEBACiB9CiAKIAotLyogTm90ZTogaXQgaXMgbmVjZXNzYXJ5IHRvIHRyZWF0IHdoaWNoIGFuZCB3aG8gYXMgdW5zaWduZWQgaW50cywKLSAqIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2FzdCB0byBhIHNpZ25lZCBpbnQgdG8gaW5zdXJlIHRoYXQgdGhlIAotICogcHJvcGVyIGNvbnZlcnNpb24gKHNpZ24gZXh0ZW5zaW9uKSBiZXR3ZWVuIHRoZSByZWdpc3RlciByZXByZXNlbnRhdGlvbiBvZiBhIHNpZ25lZCBpbnQgKG1zciBpbiAzMi1iaXQgbW9kZSkKLSAqIGFuZCB0aGUgcmVnaXN0ZXIgcmVwcmVzZW50YXRpb24gb2YgYSBzaWduZWQgaW50IChtc3IgaW4gNjQtYml0IG1vZGUpIGlzIHBlcmZvcm1lZC4KLSAqLwotYXNtbGlua2FnZSBsb25nIHN5czMyX2dldHByaW9yaXR5KHUzMiB3aGljaCwgdTMyIHdobykKLXsKLQlyZXR1cm4gc3lzX2dldHByaW9yaXR5KChpbnQpd2hpY2gsIChpbnQpd2hvKTsKLX0KLQogCiAvKiBOb3RlOiBpdCBpcyBuZWNlc3NhcnkgdG8gdHJlYXQgcGlkIGFzIGFuIHVuc2lnbmVkIGludCwKICAqIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2FzdCB0byBhIHNpZ25lZCBpbnQgdG8gaW5zdXJlIHRoYXQgdGhlIApAQCAtMTA0OCw2ICsxMDEzLDExIEBACiAJcmV0dXJuIHN5c19zZXRwZ2lkKChpbnQpcGlkLCAoaW50KXBnaWQpOwogfQogCitsb25nIHN5czMyX2dldHByaW9yaXR5KHUzMiB3aGljaCwgdTMyIHdobykKK3sKKwkvKiBzaWduIGV4dGVuZCB3aGljaCBhbmQgd2hvICovCisJcmV0dXJuIHN5c19nZXRwcmlvcml0eSgoaW50KXdoaWNoLCAoaW50KXdobyk7Cit9CiAKIGxvbmcgc3lzMzJfc2V0cHJpb3JpdHkodTMyIHdoaWNoLCB1MzIgd2hvLCB1MzIgbmljZXZhbCkKIHsKQEAgLTEwNTUsNiArMTAyNSwxOCBAQAogCXJldHVybiBzeXNfc2V0cHJpb3JpdHkoKGludCl3aGljaCwgKGludCl3aG8sIChpbnQpbmljZXZhbCk7CiB9CiAKK2xvbmcgc3lzMzJfaW9wcmlvX2dldCh1MzIgd2hpY2gsIHUzMiB3aG8pCit7CisJLyogc2lnbiBleHRlbmQgd2hpY2ggYW5kIHdobyAqLworCXJldHVybiBzeXNfaW9wcmlvX2dldCgoaW50KXdoaWNoLCAoaW50KXdobyk7Cit9CisKK2xvbmcgc3lzMzJfaW9wcmlvX3NldCh1MzIgd2hpY2gsIHUzMiB3aG8sIHUzMiBpb3ByaW8pCit7CisJLyogc2lnbiBleHRlbmQgd2hpY2gsIHdobyBhbmQgaW9wcmlvICovCisJcmV0dXJuIHN5c19pb3ByaW9fc2V0KChpbnQpd2hpY2gsIChpbnQpd2hvLCAoaW50KWlvcHJpbyk7Cit9CisKIC8qIE5vdGU6IGl0IGlzIG5lY2Vzc2FyeSB0byB0cmVhdCBuZXdtYXNrIGFzIGFuIHVuc2lnbmVkIGludCwKICAqIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2FzdCB0byBhIHNpZ25lZCBpbnQgdG8gaW5zdXJlIHRoYXQgdGhlIAogICogcHJvcGVyIGNvbnZlcnNpb24gKHNpZ24gZXh0ZW5zaW9uKSBiZXR3ZWVuIHRoZSByZWdpc3RlciByZXByZXNlbnRhdGlvbiBvZiBhIHNpZ25lZCBpbnQgKG1zciBpbiAzMi1iaXQgbW9kZSkKQEAgLTEyNzMsOCArMTI1NSw2IEBACiAJCQkgICAgICh1NjQpbGVuX2hpZ2ggPDwgMzIgfCBsZW5fbG93LCBhZHZpY2UpOwogfQogCi1leHRlcm4gYXNtbGlua2FnZSBsb25nIHN5c190aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzaWdldmVudF90IF9fdXNlciAqLCB0aW1lcl90IF9fdXNlciAqKTsKLQogbG9uZyBwcGMzMl90aW1lcl9jcmVhdGUoY2xvY2tpZF90IGNsb2NrLAogCQkJc3RydWN0IGNvbXBhdF9zaWdldmVudCBfX3VzZXIgKmV2MzIsCiAJCQl0aW1lcl90IF9fdXNlciAqdGltZXJfaWQpCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvc3lzZnMuYwppbmRleCAyZjcwNGEyLi4wMmI4YWM0IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3N5c2ZzLmMKQEAgLTExMiw3ICsxMTIsNiBAQAogCXVuc2lnbmVkIGxvbmcgaGlkMDsKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKIAl1bnNpZ25lZCBsb25nIHNldCwgcmVzZXQ7Ci0JaW50IHJldDsKICNlbmRpZiAvKiBDT05GSUdfUFBDX1BTRVJJRVMgKi8KIAogCS8qIE9ubHkgbmVlZCB0byBlbmFibGUgdGhlbSBvbmNlICovCkBAIC0xNDUsMTEgKzE0NCw3IEBACiAJY2FzZSBQTEFURk9STV9QU0VSSUVTX0xQQVI6CiAJCXNldCA9IDFVTCA8PCA2MzsKIAkJcmVzZXQgPSAwOwotCQlyZXQgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9QRVJGTU9OLCBzZXQsIHJlc2V0KTsKLQkJaWYgKHJldCkKLQkJCXByaW50ayhLRVJOX0VSUiAiSF9QRVJGTU9OIGNhbGwgb24gY3B1ICV1ICIKLQkJCSAgICAgICAicmV0dXJuZWQgJWRcbiIsCi0JCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCByZXQpOworCQlwbHBhcl9oY2FsbF9ub3JldHMoSF9QRVJGTU9OLCBzZXQsIHJlc2V0KTsKIAkJYnJlYWs7CiAjZW5kaWYgLyogQ09ORklHX1BQQ19QU0VSSUVTICovCiAKQEAgLTE2MSwxMyArMTU2LDYgQEAKIAkvKiBpbnN0cnVjdCBoeXBlcnZpc29yIHRvIG1haW50YWluIFBNQ3MgKi8KIAlpZiAoY3VyX2NwdV9zcGVjLT5maXJtd2FyZV9mZWF0dXJlcyAmIEZXX0ZFQVRVUkVfU1BMUEFSKQogCQlnZXRfcGFjYSgpLT5scHBhY2EucG1jcmVnc19pbl91c2UgPSAxOwotCi0JLyoKLQkgKiBPbiBTTVQgbWFjaGluZXMgd2UgaGF2ZSB0byBzZXQgdGhlIHJ1biBsYXRjaCBpbiB0aGUgY3RybCByZWdpc3RlcgotCSAqIGluIG9yZGVyIHRvIG1ha2UgUE1DNiBzcGluLgotCSAqLwotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTVQpKQotCQlwcGM2NF9ydW5sYXRjaF9vbigpOwogI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwppbmRleCAxMTI5MGM5Li42Zjg3YTkxIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKQEAgLTQwLDkgKzQwLDkgQEAKICAgLmdjY19leGNlcHRfdGFibGUJOiB7ICooLmdjY19leGNlcHRfdGFibGUpIH0KICAgLmZpeHVwCQk6IHsgKiguZml4dXApIH0KIAotICAuZ290IEFMSUdOKDQpCQk6IHsgKiguZ290LnBsdCkgKiguZ290KSB9Ci0KICAgLmR5bmFtaWMJCTogeyAqKC5keW5hbWljKSB9CQk6dGV4dAk6ZHluYW1pYworICAuZ290IDogeyAqKC5nb3QpIH0KKyAgLnBsdCA6IHsgKigucGx0KSB9CiAKICAgX2VuZCA9IC47CiAgIF9fZW5kID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUwppbmRleCA5MjhmZmViLi4wMjVmNDUxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TCkBAIC01NywxMSArNTcsMTEgQEAKIC8qMTgwKi8JLmxvbmcgc3lzX2ZsaXN0eGF0dHIsIHN5c19yZW1vdmV4YXR0ciwgc3lzX2xyZW1vdmV4YXR0ciwgc3lzX3NpZ3BlbmRpbmcsIHN5c19uaV9zeXNjYWxsCiAvKjE4NSovCS5sb25nIHN5c19zZXRwZ2lkLCBzeXNfZnJlbW92ZXhhdHRyLCBzeXNfdGtpbGwsIHN5c19leGl0X2dyb3VwLCBzeXNfbmV3dW5hbWUKIC8qMTkwKi8JLmxvbmcgc3lzX2luaXRfbW9kdWxlLCBzeXNfcGVyc29uYWxpdHksIHNwYXJjX3JlbWFwX2ZpbGVfcGFnZXMsIHN5c19lcG9sbF9jcmVhdGUsIHN5c19lcG9sbF9jdGwKLS8qMTk1Ki8JLmxvbmcgc3lzX2Vwb2xsX3dhaXQsIHN5c19uaXNfc3lzY2FsbCwgc3lzX2dldHBwaWQsIHNwYXJjX3NpZ2FjdGlvbiwgc3lzX3NnZXRtYXNrCisvKjE5NSovCS5sb25nIHN5c19lcG9sbF93YWl0LCBzeXNfaW9wcmlvX3NldCwgc3lzX2dldHBwaWQsIHNwYXJjX3NpZ2FjdGlvbiwgc3lzX3NnZXRtYXNrCiAvKjIwMCovCS5sb25nIHN5c19zc2V0bWFzaywgc3lzX3NpZ3N1c3BlbmQsIHN5c19uZXdsc3RhdCwgc3lzX3VzZWxpYiwgb2xkX3JlYWRkaXIKIC8qMjA1Ki8JLmxvbmcgc3lzX3JlYWRhaGVhZCwgc3lzX3NvY2tldGNhbGwsIHN5c19zeXNsb2csIHN5c19sb29rdXBfZGNvb2tpZSwgc3lzX2ZhZHZpc2U2NAogLyoyMTAqLwkubG9uZyBzeXNfZmFkdmlzZTY0XzY0LCBzeXNfdGdraWxsLCBzeXNfd2FpdHBpZCwgc3lzX3N3YXBvZmYsIHN5c19zeXNpbmZvCi0vKjIxNSovCS5sb25nIHN5c19pcGMsIHN5c19zaWdyZXR1cm4sIHN5c19jbG9uZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfYWRqdGltZXgKKy8qMjE1Ki8JLmxvbmcgc3lzX2lwYywgc3lzX3NpZ3JldHVybiwgc3lzX2Nsb25lLCBzeXNfaW9wcmlvX2dldCwgc3lzX2FkanRpbWV4CiAvKjIyMCovCS5sb25nIHN5c19zaWdwcm9jbWFzaywgc3lzX25pX3N5c2NhbGwsIHN5c19kZWxldGVfbW9kdWxlLCBzeXNfbmlfc3lzY2FsbCwgc3lzX2dldHBnaWQKIC8qMjI1Ki8JLmxvbmcgc3lzX2JkZmx1c2gsIHN5c19zeXNmcywgc3lzX25pc19zeXNjYWxsLCBzeXNfc2V0ZnN1aWQxNiwgc3lzX3NldGZzZ2lkMTYKIC8qMjMwKi8JLmxvbmcgc3lzX3NlbGVjdCwgc3lzX3RpbWUsIHN5c19uaXNfc3lzY2FsbCwgc3lzX3N0aW1lLCBzeXNfc3RhdGZzNjQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9LY29uZmlnIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKaW5kZXggZDc4YmMxMy4uNmE0NzMzNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L0tjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKQEAgLTQzLDYgKzQzLDI1IEBACiAKIGVuZGNob2ljZQogCitjb25maWcgU0VDQ09NUAorCWJvb2wgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKKwlkZXBlbmRzIG9uIFBST0NfRlMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIGtlcm5lbCBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgbnVtYmVyIGNydW5jaGluZyBhcHBsaWNhdGlvbnMKKwkgIHRoYXQgbWF5IG5lZWQgdG8gY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUgZHVyaW5nIHRoZWlyCisJICBleGVjdXRpb24uIEJ5IHVzaW5nIHBpcGVzIG9yIG90aGVyIHRyYW5zcG9ydHMgbWFkZSBhdmFpbGFibGUgdG8KKwkgIHRoZSBwcm9jZXNzIGFzIGZpbGUgZGVzY3JpcHRvcnMgc3VwcG9ydGluZyB0aGUgcmVhZC93cml0ZQorCSAgc3lzY2FsbHMsIGl0J3MgcG9zc2libGUgdG8gaXNvbGF0ZSB0aG9zZSBhcHBsaWNhdGlvbnMgaW4KKwkgIHRoZWlyIG93biBhZGRyZXNzIHNwYWNlIHVzaW5nIHNlY2NvbXAuIE9uY2Ugc2VjY29tcCBpcworCSAgZW5hYmxlZCB2aWEgL3Byb2MvPHBpZD4vc2VjY29tcCwgaXQgY2Fubm90IGJlIGRpc2FibGVkCisJICBhbmQgdGhlIHRhc2sgaXMgb25seSBhbGxvd2VkIHRvIGV4ZWN1dGUgYSBmZXcgc2FmZSBzeXNjYWxscworCSAgZGVmaW5lZCBieSBlYWNoIHNlY2NvbXAgbW9kZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4gT25seSBlbWJlZGRlZCBzaG91bGQgc2F5IE4gaGVyZS4KKworc291cmNlIGtlcm5lbC9LY29uZmlnLmh6CisKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCiBjb25maWcgU1lTVklQQ19DT01QQVQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHRsYl9iYWNrZW5kLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfYmFja2VuZC5TCmluZGV4IGI3M2EzYzguLjUzODUyMjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHRsYl9iYWNrZW5kLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9kdGxiX2JhY2tlbmQuUwpAQCAtMTYsNyArMTYsNyBAQAogI2VsaWYgUEFHRV9TSElGVCA9PSAxOQogI2RlZmluZSBTWl9CSVRTCQlfUEFHRV9TWjUxMksKICNlbGlmIFBBR0VfU0hJRlQgPT0gMjIKLSNkZWZpbmUgU1pfQklUUwkJX1BBR0VfU1o0TQorI2RlZmluZSBTWl9CSVRTCQlfUEFHRV9TWjRNQgogI2VuZGlmCiAKICNkZWZpbmUgVkFMSURfU1pfQklUUwkoX1BBR0VfVkFMSUQgfCBTWl9CSVRTKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IGQzOTczZDguLmQ3ODFmMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKQEAgLTIyLDggKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vZXN0YXRlLmg+CiAjaW5jbHVkZSA8YXNtL2F1eGlvLmg+CiAKLS8qICNkZWZpbmUgU1lTQ0FMTF9UUkFDSU5HCTEgKi8KLQogI2RlZmluZSBjdXJwdHIgICAgICBnNgogCiAjZGVmaW5lIE5SX1NZU0NBTExTIDI4NCAgICAgIC8qIEVhY2ggT1MgaXMgZGlmZmVyZW50Li4uICovCkBAIC0xNTU0LDExICsxNTUyLDEyIEBACiAJCW5vcAogCQkuYWxpZ24JCTMyCiAxOgkJbGR4CQlbJWN1cnB0ciArIFRJX0ZMQUdTXSwgJWw1Ci0JCWFuZGNjCQklbDUsIF9USUZfU1lTQ0FMTF9UUkFDRSwgJWcwCisJCWFuZGNjCQklbDUsIChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9BVURJVCksICVnMAogCQliZSxwdAkJJWljYywgcnRyYXAKIAkJIGNscgkJJWw2CisJCWFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKIAkJY2FsbAkJc3lzY2FsbF90cmFjZQotCQkgbm9wCisJCSBtb3YJCTEsICVvMQogCiAJCWJhLHB0CQkleGNjLCBydHJhcAogCQkgY2xyCQklbDYKQEAgLTE2NDIsMTggKzE2NDEsMjAgQEAKIAkgb3IJCSVsNywgJWxvKHN5c19uaV9zeXNjYWxsKSwgJWw3CiAKIGxpbnV4X3N5c2NhbGxfdHJhY2UzMjoKKwlhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8wCiAJY2FsbAkJc3lzY2FsbF90cmFjZQotCSBub3AKKwkgY2xyCQklbzEKIAlzcmwJCSVpMCwgMCwgJW8wCi0JbW92CQklaTQsICVvNAorCXNybAkJJWk0LCAwLCAlbzQKIAlzcmwJCSVpMSwgMCwgJW8xCiAJc3JsCQklaTIsIDAsICVvMgogCWIscHQJCSV4Y2MsIDJmCiAJIHNybAkJJWkzLCAwLCAlbzMKIAogbGludXhfc3lzY2FsbF90cmFjZToKKwlhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8wCiAJY2FsbAkJc3lzY2FsbF90cmFjZQotCSBub3AKKwkgY2xyCQklbzEKIAltb3YJCSVpMCwgJW8wCiAJbW92CQklaTEsICVvMQogCW1vdgkJJWkyLCAlbzIKQEAgLTE2NzEsMTEgKzE2NzIsNiBAQAogCWJnZXUscG4JCSV4Y2MsIGxpbnV4X3NwYXJjX25pX3N5c2NhbGwJCSEgQ1RJCiAJIHNybAkJJWkwLCAwLCAlbzAJCQkJISBJRVUwCiAJc2xsCQklZzEsIDIsICVsNAkJCQkhIElFVTAJR3JvdXAKLSNpZmRlZiBTWVNDQUxMX1RSQUNJTkcKLQljYWxsCQlzeXNjYWxsX3RyYWNlX2VudHJ5Ci0JIGFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKLQlzcmwJCSVpMCwgMCwgJW8wCi0jZW5kaWYKIAlzcmwJCSVpNCwgMCwgJW80CQkJCSEgSUVVMQogCWxkdXcJCVslbDcgKyAlbDRdLCAlbDcJCQkhIExvYWQKIAlzcmwJCSVpMSwgMCwgJW8xCQkJCSEgSUVVMAlHcm91cApAQCAtMTY4Myw3ICsxNjc5LDcgQEAKIAogCXNybAkJJWk1LCAwLCAlbzUJCQkJISBJRVUxCiAJc3JsCQklaTIsIDAsICVvMgkJCQkhIElFVTAJR3JvdXAKLQlhbmRjYwkJJWwwLCBfVElGX1NZU0NBTExfVFJBQ0UsICVnMAkJISBJRVUwCUdyb3VwCisJYW5kY2MJCSVsMCwgKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NFQ0NPTVB8X1RJRl9TWVNDQUxMX0FVRElUKSwgJWcwCiAJYm5lLHBuCQklaWNjLCBsaW51eF9zeXNjYWxsX3RyYWNlMzIJCSEgQ1RJCiAJIG1vdgkJJWkwLCAlbDUJCQkJISBJRVUxCiAJY2FsbAkJJWw3CQkJCQkhIENUSQlHcm91cCBicmsgZm9yY2VkCkBAIC0xNjk5LDExICsxNjk1LDYgQEAKIAliZ2V1LHBuCQkleGNjLCBsaW51eF9zcGFyY19uaV9zeXNjYWxsCQkhIENUSQogCSBtb3YJCSVpMCwgJW8wCQkJCSEgSUVVMAogCXNsbAkJJWcxLCAyLCAlbDQJCQkJISBJRVUwCUdyb3VwCi0jaWZkZWYgU1lTQ0FMTF9UUkFDSU5HCi0JY2FsbAkJc3lzY2FsbF90cmFjZV9lbnRyeQotCSBhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8wCi0JbW92CQklaTAsICVvMAotI2VuZGlmCiAJbW92CQklaTEsICVvMQkJCQkhIElFVTEKIAlsZHV3CQlbJWw3ICsgJWw0XSwgJWw3CQkJISBMb2FkCiA0Ogltb3YJCSVpMiwgJW8yCQkJCSEgSUVVMAlHcm91cApAQCAtMTcxMSw3ICsxNzAyLDcgQEAKIAogCW1vdgkJJWkzLCAlbzMJCQkJISBJRVUxCiAJbW92CQklaTQsICVvNAkJCQkhIElFVTAJR3JvdXAKLQlhbmRjYwkJJWwwLCBfVElGX1NZU0NBTExfVFJBQ0UsICVnMAkJISBJRVUxCUdyb3VwKzEgYnViYmxlCisJYW5kY2MJCSVsMCwgKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NFQ0NPTVB8X1RJRl9TWVNDQUxMX0FVRElUKSwgJWcwCiAJYm5lLHBuCQklaWNjLCBsaW51eF9zeXNjYWxsX3RyYWNlCQkhIENUSQlHcm91cAogCSBtb3YJCSVpMCwgJWw1CQkJCSEgSUVVMAogMjoJY2FsbAkJJWw3CQkJCQkhIENUSQlHcm91cCBicmsgZm9yY2VkCkBAIC0xNzIwLDEyICsxNzExLDYgQEAKIAogMzoJc3R4CQklbzAsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTBdCiByZXRfc3lzX2NhbGw6Ci0jaWZkZWYgU1lTQ0FMTF9UUkFDSU5HCi0JbW92CQklbzAsICVvMQotCWNhbGwJCXN5c2NhbGxfdHJhY2VfZXhpdAotCSBhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8wCi0JbW92CQklbzEsICVvMAotI2VuZGlmCiAJbGR4CQlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1RTVEFURV0sICVnMwogCWxkeAkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UTlBDXSwgJWwxICEgcGMgPSBucGMKIAlzcmEJCSVvMCwgMCwgJW8wCkBAIC0xNzQ1LDcgKzE3MzAsNyBAQAogMToKIAljbXAJCSVvMCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSwogCWJnZXUscG4JCSV4Y2MsIDFmCi0JIGFuZGNjCQklbDAsIF9USUZfU1lTQ0FMTF9UUkFDRSwgJWw2CQorCSBhbmRjYwkJJWwwLCAoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfQVVESVQpLCAlbDYKIDgwOgogCS8qIFN5c3RlbSBjYWxsIHN1Y2Nlc3MsIGNsZWFyIENhcnJ5IGNvbmRpdGlvbiBjb2RlLiAqLwogCWFuZG4JCSVnMywgJWcyLCAlZzMKQEAgLTE3NjAsNyArMTc0NSw3IEBACiAJLyogU3lzdGVtIGNhbGwgZmFpbHVyZSwgc2V0IENhcnJ5IGNvbmRpdGlvbiBjb2RlLgogCSAqIEFsc28sIGdldCBhYnMoZXJybm8pIHRvIHJldHVybiB0byB0aGUgcHJvY2Vzcy4KIAkgKi8KLQlhbmRjYwkJJWwwLCBfVElGX1NZU0NBTExfVFJBQ0UsICVsNgkKKwlhbmRjYwkJJWwwLCAoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfQVVESVQpLCAlbDYJCiAJc3ViCQklZzAsICVvMCwgJW8wCiAJb3IJCSVnMywgJWcyLCAlZzMKIAlzdHgJCSVvMCwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9JMF0KQEAgLTE3NzMsOCArMTc1OCw5IEBACiAJYixwdAkJJXhjYywgcnRyYXAKIAkgc3R4CQklbDIsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfVE5QQ10KIGxpbnV4X3N5c2NhbGxfdHJhY2UyOgorCWFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKIAljYWxsCQlzeXNjYWxsX3RyYWNlCi0JIG5vcAorCSBtb3YJCTEsICVvMQogCXN0eAkJJWwxLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1RQQ10KIAliYSxwdAkJJXhjYywgcnRyYXAKIAkgc3R4CQklbDIsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfVE5QQ10KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jCmluZGV4IDc0YTJlMDguLmRhYTJmYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYwpAQCAtOTE3LDcgKzkxNyw4IEBACiAJCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBpbm9fYnVja2V0ICpicCA9IGl2ZWN0b3JfdGFibGUgKyAobG9uZylkYXRhOwotCXN0cnVjdCBpcnFhY3Rpb24gKmFwID0gYnAtPmlycV9pbmZvOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGJwLT5pcnFfaW5mbzsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphcCA9IGRlc2MtPmFjdGlvbjsKIAljcHVtYXNrX3QgbWFzazsKIAlpbnQgbGVuOwogCkBAIC05MzUsMTEgKzkzNiwxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHNldF9pbnRyX2FmZmluaXR5KGludCBpcnEsIGNwdW1hc2tfdCBod19hZmYpCiB7CiAJc3RydWN0IGlub19idWNrZXQgKmJwID0gaXZlY3Rvcl90YWJsZSArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBicC0+aXJxX2luZm87CisJc3RydWN0IGlycWFjdGlvbiAqYXAgPSBkZXNjLT5hY3Rpb247CiAKIAkvKiBVc2VycyBzcGVjaWZ5IGFmZmluaXR5IGluIHRlcm1zIG9mIGh3IGNwdSBpZHMuCiAJICogQXMgc29vbiBhcyB3ZSBkbyB0aGlzLCBoYW5kbGVyX2lycSgpIG1pZ2h0IHNlZSBhbmQgdGFrZSBhY3Rpb24uCiAJICovCi0JcHV0X3NtcGFmZl9pbl9pcnFhY3Rpb24oKHN0cnVjdCBpcnFhY3Rpb24gKilicC0+aXJxX2luZm8sIGh3X2FmZik7CisJcHV0X3NtcGFmZl9pbl9pcnFhY3Rpb24oYXAsIGh3X2FmZik7CiAKIAkvKiBNaWdyYXRpb24gaXMgc2ltcGx5IGRvbmUgYnkgdGhlIG5leHQgY3B1IHRvIHNlcnZpY2UgdGhpcwogCSAqIGludGVycnVwdC4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYwppbmRleCA1MmYxNGUzLi41MzMxMDRjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wb3dlci5jCkBAIC00LDYgKzQsOCBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqLwogCisjZGVmaW5lIF9fS0VSTkVMX1NZU0NBTExTX18KKwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTcsNyArMTksNiBAQAogI2luY2x1ZGUgPGFzbS9lYnVzLmg+CiAjaW5jbHVkZSA8YXNtL2F1eGlvLmg+CiAKLSNkZWZpbmUgX19LRVJORUxfU1lTQ0FMTFNfXwogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggODBhNzZlMi4uMjNhZDgzOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY2NvbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL2FzaS5oPgpAQCAtNjI4LDE1ICs2MzAsMjcgQEAKIAl1bmxvY2tfa2VybmVsKCk7CiB9CiAKLWFzbWxpbmthZ2Ugdm9pZCBzeXNjYWxsX3RyYWNlKHZvaWQpCithc21saW5rYWdlIHZvaWQgc3lzY2FsbF90cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHN5c2NhbGxfZXhpdF9wKQogewotI2lmZGVmIERFQlVHX1BUUkFDRQotCXByaW50aygiJXMgWyVkXTogc3lzY2FsbF90cmFjZVxuIiwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKLSNlbmRpZgotCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCi0JCXJldHVybjsKKwkvKiBkbyB0aGUgc2VjdXJlIGNvbXB1dGluZyBjaGVjayBmaXJzdCAqLworCXNlY3VyZV9jb21wdXRpbmcocmVncy0+dV9yZWdzW1VSRUdfRzFdKTsKKworCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiBzeXNjYWxsX2V4aXRfcCkgeworCQl1bnNpZ25lZCBsb25nIHRzdGF0ZSA9IHJlZ3MtPnRzdGF0ZTsKKwkJaW50IHJlc3VsdCA9IEFVRElUU0NfU1VDQ0VTUzsKKworCQlpZiAodW5saWtlbHkodHN0YXRlICYgKFRTVEFURV9YQ0FSUlkgfCBUU1RBVEVfSUNBUlJZKSkpCisJCQlyZXN1bHQgPSBBVURJVFNDX0ZBSUxVUkU7CisKKwkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsIHJlc3VsdCwgcmVncy0+dV9yZWdzW1VSRUdfSTBdKTsKKwl9CisKIAlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKKworCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJCWdvdG8gb3V0OworCiAJcHRyYWNlX25vdGlmeShTSUdUUkFQIHwgKChjdXJyZW50LT5wdHJhY2UgJiBQVF9UUkFDRVNZU0dPT0QpCiAJCQkJID8gMHg4MCA6IDApKTsKIApAQCAtNjQ1LDEyICs2NTksMjAgQEAKIAkgKiBmb3Igbm9ybWFsIHVzZS4gIHN0cmFjZSBvbmx5IGNvbnRpbnVlcyB3aXRoIGEgc2lnbmFsIGlmIHRoZQogCSAqIHN0b3BwaW5nIHNpZ25hbCBpcyBub3QgU0lHVFJBUC4gIC1icmwKIAkgKi8KLSNpZmRlZiBERUJVR19QVFJBQ0UKLQlwcmludGsoIiVzIFslZF06IHN5c2NhbGxfdHJhY2UgZXhpdD0gJXhcbiIsIGN1cnJlbnQtPmNvbW0sCi0JCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+ZXhpdF9jb2RlKTsKLSNlbmRpZgogCWlmIChjdXJyZW50LT5leGl0X2NvZGUpIHsKLQkJc2VuZF9zaWcgKGN1cnJlbnQtPmV4aXRfY29kZSwgY3VycmVudCwgMSk7CisJCXNlbmRfc2lnKGN1cnJlbnQtPmV4aXRfY29kZSwgY3VycmVudCwgMSk7CiAJCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CiAJfQorCitvdXQ6CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpICYmICFzeXNjYWxsX2V4aXRfcCkKKwkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LAorCQkJCSAgICAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpID8KKwkJCQkgICAgIEFVRElUX0FSQ0hfU1BBUkMgOgorCQkJCSAgICAgQVVESVRfQVJDSF9TUEFSQzY0KSwKKwkJCQkgICAgcmVncy0+dV9yZWdzW1VSRUdfRzFdLAorCQkJCSAgICByZWdzLT51X3JlZ3NbVVJFR19JMF0sCisJCQkJICAgIHJlZ3MtPnVfcmVnc1tVUkVHX0kxXSwKKwkJCQkgICAgcmVncy0+dV9yZWdzW1VSRUdfSTJdLAorCQkJCSAgICByZWdzLT51X3JlZ3NbVVJFR19JM10pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKaW5kZXggZTViOWM3YS4uNDQxZmMyZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCkBAIC00NSw4ICs0NSw4IEBACiAvKiBQbGVhc2UgZG9uJ3QgbWFrZSB0aGlzIHN0dWZmIGluaXRkYXRhISEhICAtLURhdmVNICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBib290X2NwdV9pZDsKIAotY3B1bWFza190IGNwdV9vbmxpbmVfbWFwID0gQ1BVX01BU0tfTk9ORTsKLWNwdW1hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcCA9IENQVV9NQVNLX05PTkU7CitjcHVtYXNrX3QgY3B1X29ubGluZV9tYXAgPSBDUFVfTUFTS19OT05FIF9fcmVhZF9tb3N0bHk7CitjcHVtYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXAgPSBDUFVfTUFTS19OT05FIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgY3B1bWFza190IHNtcF9jb21tZW5jZWRfbWFzazsKIHN0YXRpYyBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwogCkBAIC0xNTUsNyArMTU1LDcgQEAKIAlwYW5pYygiU01QIGJvbGl4ZWRcbiIpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpY2tfb2Zmc2V0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VycmVudF90aWNrX29mZnNldCBfX3JlYWRfbW9zdGx5OwogCiAvKiBUaGlzIHRpY2sgcmVnaXN0ZXIgc3luY2hyb25pemF0aW9uIHNjaGVtZSBpcyB0YWtlbiBlbnRpcmVseSBmcm9tCiAgKiB0aGUgaWE2NCBwb3J0LCBzZWUgYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgZm9yIGRldGFpbHMgYW5kIGNyZWRpdC4KQEAgLTExOTMsOCArMTE5Myw4IEBACiB7CiB9CiAKLXVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X2Jhc2U7Ci11bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9zaGlmdDsKK3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X2Jhc2UgX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X3NoaWZ0IF9fcmVhZF9tb3N0bHk7CiAKIEVYUE9SVF9TWU1CT0woX19wZXJfY3B1X2Jhc2UpOwogRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfc2hpZnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwppbmRleCA1NmNkOTZmLi45MjAyZDkyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwpAQCAtNzksNyArNzksNyBAQAogZXh0ZXJuIHZvaWQgcnRyYXAodm9pZCk7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gdm9pZCBzb2xhcmlzX3N5c2NhbGwodm9pZCk7Ci1leHRlcm4gdm9pZCBzeXNjYWxsX3RyYWNlKHZvaWQpOworZXh0ZXJuIHZvaWQgc3lzY2FsbF90cmFjZShzdHJ1Y3QgcHRfcmVncyAqLCBpbnQpOwogZXh0ZXJuIHUzMiBzdW5vc19zeXNfdGFibGVbXSwgc3lzX2NhbGxfdGFibGUzMltdOwogZXh0ZXJuIHZvaWQgdGwwX3NvbGFyaXModm9pZCk7CiBleHRlcm4gdm9pZCBzeXNfc2lnc3VzcGVuZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzMzIuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzMzIuUwppbmRleCA1YTk1ZTk4Li41ZjllNGZhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXMzMi5TCkBAIC0xMzUsNiArMTM1LDggQEAKIFNJR04zKHN5czMyX3NvY2tldHBhaXIsIHN5c19zb2NrZXRwYWlyLCAlbzAsICVvMSwgJW8yKQogU0lHTjEoc3lzMzJfZ2V0cGVlcm5hbWUsIHN5c19nZXRwZWVybmFtZSwgJW8wKQogU0lHTjEoc3lzMzJfZ2V0c29ja25hbWUsIHN5c19nZXRzb2NrbmFtZSwgJW8wKQorU0lHTjIoc3lzMzJfaW9wcmlvX2dldCwgc3lzX2lvcHJpb19nZXQsICVvMCwgJW8xKQorU0lHTjMoc3lzMzJfaW9wcmlvX3NldCwgc3lzX2lvcHJpb19zZXQsICVvMCwgJW8xLCAlbzIpCiAKIAkuZ2xvYmwJCXN5czMyX21tYXAyCiBzeXMzMl9tbWFwMjoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggYTVlMzZhNC4uYmNlYjkxYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKQEAgLTU5LDExICs1OSwxMSBAQAogLyoxODAqLwkud29yZCBzeXMzMl9mbGlzdHhhdHRyLCBzeXNfcmVtb3ZleGF0dHIsIHN5c19scmVtb3ZleGF0dHIsIGNvbXBhdF9zeXNfc2lncGVuZGluZywgc3lzX25pX3N5c2NhbGwKIAkud29yZCBzeXMzMl9zZXRwZ2lkLCBzeXMzMl9mcmVtb3ZleGF0dHIsIHN5czMyX3RraWxsLCBzeXMzMl9leGl0X2dyb3VwLCBzcGFyYzY0X25ld3VuYW1lCiAvKjE5MCovCS53b3JkIHN5czMyX2luaXRfbW9kdWxlLCBzcGFyYzY0X3BlcnNvbmFsaXR5LCBzeXNfcmVtYXBfZmlsZV9wYWdlcywgc3lzMzJfZXBvbGxfY3JlYXRlLCBzeXMzMl9lcG9sbF9jdGwKLQkud29yZCBzeXMzMl9lcG9sbF93YWl0LCBzeXNfbmlzX3N5c2NhbGwsIHN5c19nZXRwcGlkLCBzeXMzMl9zaWdhY3Rpb24sIHN5c19zZ2V0bWFzaworCS53b3JkIHN5czMyX2Vwb2xsX3dhaXQsIHN5czMyX2lvcHJpb19zZXQsIHN5c19nZXRwcGlkLCBzeXMzMl9zaWdhY3Rpb24sIHN5c19zZ2V0bWFzawogLyoyMDAqLwkud29yZCBzeXMzMl9zc2V0bWFzaywgc3lzX3NpZ3N1c3BlbmQsIGNvbXBhdF9zeXNfbmV3bHN0YXQsIHN5c191c2VsaWIsIGNvbXBhdF9zeXNfb2xkX3JlYWRkaXIKIAkud29yZCBzeXMzMl9yZWFkYWhlYWQsIHN5czMyX3NvY2tldGNhbGwsIHN5czMyX3N5c2xvZywgc3lzMzJfbG9va3VwX2Rjb29raWUsIHN5czMyX2ZhZHZpc2U2NAogLyoyMTAqLwkud29yZCBzeXMzMl9mYWR2aXNlNjRfNjQsIHN5czMyX3Rna2lsbCwgc3lzMzJfd2FpdHBpZCwgc3lzX3N3YXBvZmYsIHN5czMyX3N5c2luZm8KLQkud29yZCBzeXMzMl9pcGMsIHN5czMyX3NpZ3JldHVybiwgc3lzX2Nsb25lLCBzeXNfbmlzX3N5c2NhbGwsIHN5czMyX2FkanRpbWV4CisJLndvcmQgc3lzMzJfaXBjLCBzeXMzMl9zaWdyZXR1cm4sIHN5c19jbG9uZSwgc3lzMzJfaW9wcmlvX2dldCwgc3lzMzJfYWRqdGltZXgKIC8qMjIwKi8JLndvcmQgc3lzMzJfc2lncHJvY21hc2ssIHN5c19uaV9zeXNjYWxsLCBzeXMzMl9kZWxldGVfbW9kdWxlLCBzeXNfbmlfc3lzY2FsbCwgc3lzMzJfZ2V0cGdpZAogCS53b3JkIHN5czMyX2JkZmx1c2gsIHN5czMyX3N5c2ZzLCBzeXNfbmlzX3N5c2NhbGwsIHN5czMyX3NldGZzdWlkMTYsIHN5czMyX3NldGZzZ2lkMTYKIC8qMjMwKi8JLndvcmQgc3lzMzJfc2VsZWN0LCBjb21wYXRfc3lzX3RpbWUsIHN5c19uaXNfc3lzY2FsbCwgY29tcGF0X3N5c19zdGltZSwgY29tcGF0X3N5c19zdGF0ZnM2NApAQCAtMTI1LDExICsxMjUsMTEgQEAKIC8qMTgwKi8JLndvcmQgc3lzX2ZsaXN0eGF0dHIsIHN5c19yZW1vdmV4YXR0ciwgc3lzX2xyZW1vdmV4YXR0ciwgc3lzX25pc19zeXNjYWxsLCBzeXNfbmlfc3lzY2FsbAogCS53b3JkIHN5c19zZXRwZ2lkLCBzeXNfZnJlbW92ZXhhdHRyLCBzeXNfdGtpbGwsIHN5c19leGl0X2dyb3VwLCBzcGFyYzY0X25ld3VuYW1lCiAvKjE5MCovCS53b3JkIHN5c19pbml0X21vZHVsZSwgc3BhcmM2NF9wZXJzb25hbGl0eSwgc3lzX3JlbWFwX2ZpbGVfcGFnZXMsIHN5c19lcG9sbF9jcmVhdGUsIHN5c19lcG9sbF9jdGwKLQkud29yZCBzeXNfZXBvbGxfd2FpdCwgc3lzX25pc19zeXNjYWxsLCBzeXNfZ2V0cHBpZCwgc3lzX25pc19zeXNjYWxsLCBzeXNfc2dldG1hc2sKKwkud29yZCBzeXNfZXBvbGxfd2FpdCwgc3lzX2lvcHJpb19zZXQsIHN5c19nZXRwcGlkLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19zZ2V0bWFzawogLyoyMDAqLwkud29yZCBzeXNfc3NldG1hc2ssIHN5c19uaXNfc3lzY2FsbCwgc3lzX25ld2xzdGF0LCBzeXNfdXNlbGliLCBzeXNfbmlzX3N5c2NhbGwKIAkud29yZCBzeXNfcmVhZGFoZWFkLCBzeXNfc29ja2V0Y2FsbCwgc3lzX3N5c2xvZywgc3lzX2xvb2t1cF9kY29va2llLCBzeXNfZmFkdmlzZTY0CiAvKjIxMCovCS53b3JkIHN5c19mYWR2aXNlNjRfNjQsIHN5c190Z2tpbGwsIHN5c193YWl0cGlkLCBzeXNfc3dhcG9mZiwgc3lzX3N5c2luZm8KLQkud29yZCBzeXNfaXBjLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19jbG9uZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfYWRqdGltZXgKKwkud29yZCBzeXNfaXBjLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19jbG9uZSwgc3lzX2lvcHJpb19nZXQsIHN5c19hZGp0aW1leAogLyoyMjAqLwkud29yZCBzeXNfbmlzX3N5c2NhbGwsIHN5c19uaV9zeXNjYWxsLCBzeXNfZGVsZXRlX21vZHVsZSwgc3lzX25pX3N5c2NhbGwsIHN5c19nZXRwZ2lkCiAJLndvcmQgc3lzX2JkZmx1c2gsIHN5c19zeXNmcywgc3lzX25pc19zeXNjYWxsLCBzeXNfc2V0ZnN1aWQsIHN5c19zZXRmc2dpZAogLyoyMzAqLwkud29yZCBzeXNfc2VsZWN0LCBzeXNfbmlzX3N5c2NhbGwsIHN5c19uaXNfc3lzY2FsbCwgc3lzX3N0aW1lLCBzeXNfc3RhdGZzNjQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKaW5kZXggYjQwZGIzOC4uMzYyYjljMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKQEAgLTczLDcgKzczLDcgQEAKIAkuZ2V0X3RpY2sJPSBkdW1teV9nZXRfdGljaywKIH07CiAKLXN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzICp0aWNrX29wcyA9ICZkdW1teV90aWNrX29wczsKK3N0cnVjdCBzcGFyYzY0X3RpY2tfb3BzICp0aWNrX29wcyBfX3JlYWRfbW9zdGx5ID0gJmR1bW15X3RpY2tfb3BzOwogCiAjZGVmaW5lIFRJQ0tfUFJJVl9CSVQJKDFVTCA8PCA2MykKIApAQCAtMTk1LDcgKzE5NSw3IEBACiAJcmV0dXJuIG5ld190aWNrOwogfQogCi1zdGF0aWMgc3RydWN0IHNwYXJjNjRfdGlja19vcHMgdGlja19vcGVyYXRpb25zID0geworc3RhdGljIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzIHRpY2tfb3BlcmF0aW9ucyBfX3JlYWRfbW9zdGx5ID0gewogCS5pbml0X3RpY2sJPQl0aWNrX2luaXRfdGljaywKIAkuZ2V0X3RpY2sJPQl0aWNrX2dldF90aWNrLAogCS5nZXRfY29tcGFyZQk9CXRpY2tfZ2V0X2NvbXBhcmUsCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlyZXR1cm4gbmV3X2NvbXBhcmU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BhcmM2NF90aWNrX29wcyBzdGlja19vcGVyYXRpb25zID0geworc3RhdGljIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzIHN0aWNrX29wZXJhdGlvbnMgX19yZWFkX21vc3RseSA9IHsKIAkuaW5pdF90aWNrCT0Jc3RpY2tfaW5pdF90aWNrLAogCS5nZXRfdGljawk9CXN0aWNrX2dldF90aWNrLAogCS5nZXRfY29tcGFyZQk9CXN0aWNrX2dldF9jb21wYXJlLApAQCAtNDIyLDcgKzQyMiw3IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzIGhidGlja19vcGVyYXRpb25zID0geworc3RhdGljIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzIGhidGlja19vcGVyYXRpb25zIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmluaXRfdGljawk9CWhidGlja19pbml0X3RpY2ssCiAJLmdldF90aWNrCT0JaGJ0aWNrX2dldF90aWNrLAogCS5nZXRfY29tcGFyZQk9CWhidGlja19nZXRfY29tcGFyZSwKQEAgLTQzNywxMCArNDM3LDkgQEAKICAqIE5PVEU6IE9uIFNVTjUgc3lzdGVtcyB0aGUgdGlja2VyIGludGVycnVwdCBjb21lcyBpbiB1c2luZyAyCiAgKiAgICAgICBpbnRlcnJ1cHRzLCBvbmUgYXQgbGV2ZWwxNCBhbmQgb25lIHdpdGggc29mdGludCBiaXQgMC4KICAqLwotdW5zaWduZWQgbG9uZyB0aW1lcl90aWNrX29mZnNldDsKLXVuc2lnbmVkIGxvbmcgdGltZXJfdGlja19jb21wYXJlOwordW5zaWduZWQgbG9uZyB0aW1lcl90aWNrX29mZnNldCBfX3JlYWRfbW9zdGx5OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl90aWNrc19wZXJfbnNlY19xdW90aWVudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50IF9fcmVhZF9tb3N0bHk7CiAKICNkZWZpbmUgVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQogCkBAIC00NjQsNyArNDYzLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKLQl1bnNpZ25lZCBsb25nIHRpY2tzLCBwc3RhdGU7CisJdW5zaWduZWQgbG9uZyB0aWNrcywgY29tcGFyZSwgcHN0YXRlOwogCiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAKQEAgLTQ4MywxNCArNDgyLDE0IEBACiAJCQkJICAgICA6ICI9ciIgKHBzdGF0ZSkKIAkJCQkgICAgIDogImkiIChQU1RBVEVfSUUpKTsKIAotCQl0aW1lcl90aWNrX2NvbXBhcmUgPSB0aWNrX29wcy0+YWRkX2NvbXBhcmUodGltZXJfdGlja19vZmZzZXQpOworCQljb21wYXJlID0gdGlja19vcHMtPmFkZF9jb21wYXJlKHRpbWVyX3RpY2tfb2Zmc2V0KTsKIAkJdGlja3MgPSB0aWNrX29wcy0+Z2V0X3RpY2soKTsKIAogCQkvKiBSZXN0b3JlIFBTVEFURV9JRS4gKi8KIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oIndycHIJJTAsIDB4MCwgJSVwc3RhdGUiCiAJCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KIAkJCQkgICAgIDogInIiIChwc3RhdGUpKTsKLQl9IHdoaWxlICh0aW1lX2FmdGVyX2VxKHRpY2tzLCB0aW1lcl90aWNrX2NvbXBhcmUpKTsKKwl9IHdoaWxlICh0aW1lX2FmdGVyX2VxKHRpY2tzLCBjb21wYXJlKSk7CiAKIAl0aW1lcl9jaGVja19ydGMoKTsKIApAQCAtNTA2LDExICs1MDUsNiBAQAogCiAJZG9fdGltZXIocmVncyk7CiAKLQkvKgotCSAqIE9ubHkga2VlcCB0aW1lcl90aWNrX29mZnNldCB1cHRvZGF0ZSwgYnV0IGRvbid0IHNldCBUSUNLX0NNUFIuCi0JICovCi0JdGltZXJfdGlja19jb21wYXJlID0gdGlja19vcHMtPmdldF9jb21wYXJlKCkgKyB0aW1lcl90aWNrX29mZnNldDsKLQogCXRpbWVyX2NoZWNrX3J0YygpOwogCiAJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAzODJmZDY3Li45NTA0MjNkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zMiw2ICszMiw4IEBACiAgIC5kYXRhMSAgIDogeyAqKC5kYXRhMSkgfQogICAuID0gQUxJR04oNjQpOwogICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsgKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgfQorICAuID0gQUxJR04oNjQpOworICAuZGF0YS5yZWFkX21vc3RseSA6IHsgKiguZGF0YS5yZWFkX21vc3RseSkgfQogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAgIC5maXh1cCAgIDogeyAqKC5maXh1cCkgfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL2ZhdWx0LmMgYi9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYwppbmRleCAzZmZlZTdiLi41MmU5Mzc1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYwpAQCAtMzQsMjIgKzM0LDYgQEAKIGV4dGVybiBzdHJ1Y3Qgc3BhcmNfcGh5c19iYW5rcyBzcF9iYW5rc1tTUEFSQ19QSFlTX0JBTktTXTsKIAogLyoKLSAqIFRvIGRlYnVnIGtlcm5lbCBkdXJpbmcgc3lzY2FsbCBlbnRyeS4KLSAqLwotdm9pZCBzeXNjYWxsX3RyYWNlX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXByaW50aygic2NhbGwgZW50cnk6ICVzWyVkXS9jcHUlZDogJWRcbiIsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc21wX3Byb2Nlc3Nvcl9pZCgpLCAoaW50KSByZWdzLT51X3JlZ3NbVVJFR19HMV0pOwotfQotCi0vKgotICogVG8gZGVidWcga2VybmVsIGR1cmluZyBzeXNjYWxsIGV4aXQuCi0gKi8KLXZvaWQgc3lzY2FsbF90cmFjZV9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXByaW50aygic2NhbGwgZXhpdDogJXNbJWRdL2NwdSVkOiAlZFxuIiwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBzbXBfcHJvY2Vzc29yX2lkKCksIChpbnQpIHJlZ3MtPnVfcmVnc1tVUkVHX0cxXSk7Ci19Ci0KLS8qCiAgKiBUbyBkZWJ1ZyBrZXJuZWwgdG8gY2F0Y2ggYWNjZXNzZXMgdG8gY2VydGFpbiB2aXJ0dWFsL3BoeXNpY2FsIGFkZHJlc3Nlcy4KICAqIE1vZGUgPSAwIHNlbGVjdHMgcGh5c2ljYWwgd2F0Y2hwb2ludHMsIG1vZGUgPSAxIHNlbGVjdHMgdmlydHVhbCB3YXRjaHBvaW50cy4KICAqIGZsYWdzID0gVk1fUkVBRCB3YXRjaGVzIG1lbXJlYWQgYWNjZXNzZXMsIGZsYWdzID0gVk1fV1JJVEUgd2F0Y2hlcyBtZW13cml0ZSBhY2Nlc3Nlcy4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2VudHJ5NjQuUyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2VudHJ5NjQuUwppbmRleCAwY2M5ZGFkLi40YjZhZTU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9lbnRyeTY0LlMKKysrIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvZW50cnk2NC5TCkBAIC0yNCw4ICsyNCw5IEBACiAKIAkudGV4dAogc29sYXJpc19zeXNjYWxsX3RyYWNlOgorCWFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKIAljYWxsCQlzeXNjYWxsX3RyYWNlCi0JIG5vcAorCSBtb3YJCTAsICVvMQogCXNybAkJJWkwLCAwLCAlbzAKIAltb3YJCSVpNCwgJW80CiAJc3JsCQklaTEsIDAsICVvMQpAQCAtMTU5LDggKzE2MCwxMCBAQAogCSBzdHgJCSVsMiwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UTlBDXSAhbnBjID0gbnBjKzQgCiAKIHNvbGFyaXNfc3lzY2FsbF90cmFjZTI6CisJYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMAogCWNhbGwJCXN5c2NhbGxfdHJhY2UKLQkgYWRkCQklbDEsIDB4NCwgJWwyCQkJLyogbnBjID0gbnBjKzQgKi8KKwkgbW92CQkxLCAlbzEKKwlhZGQJCSVsMSwgMHg0LCAlbDIJCQkvKiBucGMgPSBucGMrNCAqLwogCWFuZGNjCQklbDEsIDEsICVnMAogCWJuZSxwbgkJJWljYywgMmIKIAkgbm9wCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggOTQ2OWU3Ny4uNjY4MmM3OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCisrKyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtMTI4LDcgKzEyOCw2IEBACiAKIGNvbmZpZyBIUFBGUwogCXRyaXN0YXRlICJIb25leVBvdCBQcm9jRlMgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBCUk9LRU4KIAloZWxwCiAJaHBwZnMgKEhvbmV5UG90IFByb2NGUykgaXMgYSBmaWxlc3lzdGVtIHdoaWNoIGFsbG93cyBVTUwgL3Byb2MKIAllbnRyaWVzIHRvIGJlIG92ZXJyaWRkZW4sIHJlbW92ZWQsIG9yIGZhYnJpY2F0ZWQgZnJvbSB0aGUgaG9zdC4KQEAgLTE0MSw4ICsxNDAsOSBAQAogCVlvdSBvbmx5IG5lZWQgdGhpcyBpZiB5b3UgYXJlIHNldHRpbmcgdXAgYSBVTUwgaG9uZXlwb3QuICBPdGhlcndpc2UsCiAJaXQgaXMgc2FmZSB0byBzYXkgJ04nIGhlcmUuCiAKLQlJZiB5b3UgYXJlIGFjdGl2ZWx5IHVzaW5nIGl0LCBwbGVhc2UgYXNrIGZvciBpdCB0byBiZSBmaXhlZC4gSW4gdGhpcwotCW1vbWVudCwgaXQgZG9lcyBub3Qgd29yayBvbiAyLjYgKGl0IHdvcmtzIHNvbWVob3cgb24gMi40KS4KKwlJZiB5b3UgYXJlIGFjdGl2ZWx5IHVzaW5nIGl0LCBwbGVhc2UgcmVwb3J0IGFueSBwcm9ibGVtcywgc2luY2UgaXQncworCWdldHRpbmcgZml4ZWQuIEluIHRoaXMgbW9tZW50LCBpdCBpcyBleHBlcmltZW50YWwgb24gMi42IChpdCB3b3JrcyBvbgorCTIuNCkuCiAKIGNvbmZpZyBNQ09OU09MRQogCWJvb2wgIk1hbmFnZW1lbnQgY29uc29sZSIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZ19pMzg2IGIvYXJjaC91bS9LY29uZmlnX2kzODYKaW5kZXggZTQxZjM3NC4uMjdjMThhOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnX2kzODYKKysrIGIvYXJjaC91bS9LY29uZmlnX2kzODYKQEAgLTE5LDYgKzE5LDE4IEBACiAJbWVtb3J5LiAgQWxsIHRoZSBtZW1vcnkgdGhhdCBjYW4ndCBiZSBtYXBwZWQgZGlyZWN0bHkgd2lsbCBiZSB0cmVhdGVkCiAJYXMgaGlnaCBtZW1vcnkuCiAKK2NvbmZpZyBTVFVCX0NPREUKKwloZXgKKwlkZWZhdWx0IDB4YmZmZmUwMDAKKworY29uZmlnIFNUVUJfREFUQQorCWhleAorCWRlZmF1bHQgMHhiZmZmZjAwMAorCitjb25maWcgU1RVQl9TVEFSVAorCWhleAorCWRlZmF1bHQgU1RVQl9DT0RFCisKIGNvbmZpZyBBUkNIX0hBU19TQ19TSUdOQUxTCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnX3g4Nl82NCBiL2FyY2gvdW0vS2NvbmZpZ194ODZfNjQKaW5kZXggZjE2MmY1MC4uNzM1YTA0NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnX3g4Nl82NAorKysgYi9hcmNoL3VtL0tjb25maWdfeDg2XzY0CkBAIC0xNCw2ICsxNCwxOCBAQAogICAgICAgIGJvb2wKICAgICAgICBkZWZhdWx0IHkKIAorY29uZmlnIFNUVUJfQ09ERQorCWhleAorCWRlZmF1bHQgMHg3ZmJmZmZlMDAwCisKK2NvbmZpZyBTVFVCX0RBVEEKKwloZXgKKwlkZWZhdWx0IDB4N2ZiZmZmZjAwMAorCitjb25maWcgU1RVQl9TVEFSVAorCWhleAorCWRlZmF1bHQgU1RVQl9DT0RFCisKIGNvbmZpZyBBUkNIX0hBU19TQ19TSUdOQUxTCiAJYm9vbAogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9NYWtlZmlsZS1pMzg2IGIvYXJjaC91bS9NYWtlZmlsZS1pMzg2CmluZGV4IDI5ZTE4MmQuLjMwMTA1OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vTWFrZWZpbGUtaTM4NgorKysgYi9hcmNoL3VtL01ha2VmaWxlLWkzODYKQEAgLTgsNyArOCw3IEBACiAgIGVuZGlmCiBlbmRpZgogCi1DRkxBR1MgKz0gLVVfXyQoU1VCQVJDSClfXyAtVSQoU1VCQVJDSCkKK0NGTEFHUyArPSAtVV9fJChTVUJBUkNIKV9fIC1VJChTVUJBUkNIKSAkKFNUVUJfQ0ZMQUdTKQogQVJDSF9VU0VSX0NGTEFHUyA6PQogCiBpZm5lcSAoJChDT05GSUdfR1BST0YpLHkpCmRpZmYgLS1naXQgYS9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NCBiL2FyY2gvdW0vTWFrZWZpbGUteDg2XzY0CmluZGV4IDMyMTQ0NTYuLmQ4MGJkMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vTWFrZWZpbGUteDg2XzY0CisrKyBiL2FyY2gvdW0vTWFrZWZpbGUteDg2XzY0CkBAIC00LDcgKzQsNyBAQAogU1VCQVJDSF9MSUJTIDo9IGFyY2gvdW0vc3lzLXg4Nl82NC8KIFNUQVJUIDo9IDB4NjAwMDAwMDAKIAotQ0ZMQUdTICs9IC1VX18kKFNVQkFSQ0gpX18gLWZuby1idWlsdGluCitDRkxBR1MgKz0gLVVfXyQoU1VCQVJDSClfXyAtZm5vLWJ1aWx0aW4gJChTVFVCX0NGTEFHUykKIEFSQ0hfVVNFUl9DRkxBR1MgOj0gLURfX3g4Nl82NF9fCiAKIEVMRl9BUkNIIDo9IGkzODY6eDg2LTY0CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RlZmNvbmZpZyBiL2FyY2gvdW0vZGVmY29uZmlnCmluZGV4IDQwNjdjM2EuLjgwZDMwZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZGVmY29uZmlnCisrKyBiL2FyY2gvdW0vZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMy1za2FzMy12OS1wcmUyCi0jIFN1biBBcHIgMjQgMTk6NDY6MTAgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjNi1tbTEKKyMgVHVlIEp1biAxNCAxODoyMjoyMSAyMDA1CiAjCiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfVU1MPXkKQEAgLTEzLDIzICsxMywzMiBAQAogIwogIyBVTUwtc3BlY2lmaWMgb3B0aW9ucwogIwotQ09ORklHX01PREVfVFQ9eQorIyBDT05GSUdfTU9ERV9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFUSUNfTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfTU9ERV9TS0FTPXkKIENPTkZJR19VTUxfWDg2PXkKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19UT1BfQUREUj0weGMwMDAwMDAwCiAjIENPTkZJR18zX0xFVkVMX1BHVEFCTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19TVFVCX0NPREU9MHhiZmZmZTAwMAorQ09ORklHX1NUVUJfREFUQT0weGJmZmZmMDAwCitDT05GSUdfU1RVQl9TVEFSVD0weGJmZmZlMDAwCiBDT05GSUdfQVJDSF9IQVNfU0NfU0lHTkFMUz15CiBDT05GSUdfQVJDSF9SRVVTRV9IT1NUX1ZTWVNDQUxMX0FSRUE9eQotQ09ORklHX0xEX1NDUklQVF9TVEFUSUM9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX0xEX1NDUklQVF9EWU49eQogQ09ORklHX05FVD15CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9bQotQ09ORklHX0hPU1RGUz15CisjIENPTkZJR19IT1NURlMgaXMgbm90IHNldAogQ09ORklHX01DT05TT0xFPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RfMkdfMkcgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19ORVNUX0xFVkVMPTAKIENPTkZJR19LRVJORUxfSEFMRl9HSUdTPTEKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldApAQCAtNjMsNiArNzIsOCBAQAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKQEAgLTgxLDYgKzkyLDcgQEAKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKIApAQCAtMTE1LDYgKzEyNyw3IEBACiBDT05GSUdfU09VTkQ9bQogQ09ORklHX0hPU1RBVURJTz1tCiBDT05GSUdfVU1MX1JBTkRPTT15CisjIENPTkZJR19NTUFQUEVSIGlzIG5vdCBzZXQKIAogIwogIyBCbG9jayBkZXZpY2VzCkBAIC0xNzYsNiArMTg5LDE3IEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfVENQRElBRz15CiAjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorCisjCisjIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wKKyMKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPXkKK0NPTkZJR19UQ1BfQ09OR19IVENQPXkKKyMgQ09ORklHX1RDUF9DT05HX0hTVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0hZQkxBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX1ZFR0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIApAQCAtMjA2LDExICsyMzAsMTUgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tHREJPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZPW0KICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKQEAgLTIyNyw2ICsyNTUsNyBAQAogIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKIENPTkZJR19TTElQPW0KICMgQ09ORklHX1NMSVBfQ09NUFJFU1NFRCBpcyBub3Qgc2V0CkBAIC0yNDAsMTAgKzI2OSwxMiBAQAogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUjRfRlMgaXMgbm90IHNldAogQ09ORklHX1JFSVNFUkZTX0ZTPXkKICMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CkBAIC0yNTYsNiArMjg3LDcgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CiBDT05GSUdfUVVPVEE9eQogIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiAjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKQEAgLTI2NSw2ICsyOTcsMTIgQEAKIENPTkZJR19BVVRPRlM0X0ZTPW0KIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0lTTzk2NjBfRlM9bQpAQCAtMjkxLDYgKzMyOSw4IEBACiAjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTMxOSw2ICszNTksNyBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTQwNCwxNCArNDQ1LDE1IEBACiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TTEFCPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX1BUX1BST1hZPXkKKyMgQ09ORklHX0dQUk9GIGlzIG5vdCBzZXQKICMgQ09ORklHX0dDT1YgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ0FMTF9ERUJVRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwppbmRleCAyYmI0YzRmNS4uZTBmZGZmYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCkBAIC02NjMsMTEgKzY2MywxNSBAQAogCXJldHVybiBkcml2ZXI7CiB9CiAKK3N0YXRpYyBzcGlubG9ja190IHdpbmNoX2hhbmRsZXJfbG9jazsKK0xJU1RfSEVBRCh3aW5jaF9oYW5kbGVycyk7CisKIHZvaWQgbGluZXNfaW5pdChzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBubGluZXMpCiB7CiAJc3RydWN0IGxpbmUgKmxpbmU7CiAJaW50IGk7CiAKKwlzcGluX2xvY2tfaW5pdCgmd2luY2hfaGFuZGxlcl9sb2NrKTsKIAlmb3IoaSA9IDA7IGkgPCBubGluZXM7IGkrKyl7CiAJCWxpbmUgPSAmbGluZXNbaV07CiAJCUlOSVRfTElTVF9IRUFEKCZsaW5lLT5jaGFuX2xpc3QpOwpAQCAtNzI0LDMxICs3MjgsMzAgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLURFQ0xBUkVfTVVURVgod2luY2hfaGFuZGxlcl9zZW0pOwotTElTVF9IRUFEKHdpbmNoX2hhbmRsZXJzKTsKLQogdm9pZCByZWdpc3Rlcl93aW5jaF9pcnEoaW50IGZkLCBpbnQgdHR5X2ZkLCBpbnQgcGlkLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB3aW5jaCAqd2luY2g7CiAKLQlkb3duKCZ3aW5jaF9oYW5kbGVyX3NlbSk7CiAJd2luY2ggPSBrbWFsbG9jKHNpemVvZigqd2luY2gpLCBHRlBfS0VSTkVMKTsKIAlpZiAod2luY2ggPT0gTlVMTCkgewogCQlwcmludGsoInJlZ2lzdGVyX3dpbmNoX2lycSAtIGttYWxsb2MgZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAl9CisKIAkqd2luY2ggPSAoKHN0cnVjdCB3aW5jaCkgeyAubGlzdCAgCT0gTElTVF9IRUFEX0lOSVQod2luY2gtPmxpc3QpLAogCQkJCSAgIC5mZCAgCT0gZmQsCiAJCQkJICAgLnR0eV9mZCAJPSB0dHlfZmQsCiAJCQkJICAgLnBpZCAgCT0gcGlkLAogCQkJCSAgIC50dHkgCT0gdHR5IH0pOworCisJc3Bpbl9sb2NrKCZ3aW5jaF9oYW5kbGVyX2xvY2spOwogCWxpc3RfYWRkKCZ3aW5jaC0+bGlzdCwgJndpbmNoX2hhbmRsZXJzKTsKKwlzcGluX3VubG9jaygmd2luY2hfaGFuZGxlcl9sb2NrKTsKKwogCWlmKHVtX3JlcXVlc3RfaXJxKFdJTkNIX0lSUSwgZmQsIElSUV9SRUFELCB3aW5jaF9pbnRlcnJ1cHQsCiAJCQkgIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwgCiAJCQkgICJ3aW5jaCIsIHdpbmNoKSA8IDApCiAJCXByaW50aygicmVnaXN0ZXJfd2luY2hfaXJxIC0gZmFpbGVkIHRvIHJlZ2lzdGVyIElSUVxuIik7Ci0gb3V0OgotCXVwKCZ3aW5jaF9oYW5kbGVyX3NlbSk7CiB9CiAKIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfd2luY2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTc1Niw3ICs3NTksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZTsKIAlzdHJ1Y3Qgd2luY2ggKndpbmNoLCAqZm91bmQgPSBOVUxMOwogCi0JZG93bigmd2luY2hfaGFuZGxlcl9zZW0pOworCXNwaW5fbG9jaygmd2luY2hfaGFuZGxlcl9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoKGVsZSwgJndpbmNoX2hhbmRsZXJzKXsKIAkJd2luY2ggPSBsaXN0X2VudHJ5KGVsZSwgc3RydWN0IHdpbmNoLCBsaXN0KTsKICAgICAgICAgICAgICAgICBpZih3aW5jaC0+dHR5ID09IHR0eSl7CkBAIC03NjQsMjAgKzc2NywyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgaWYoZm91bmQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKKwkJZ290byBlcnI7CisKKwlsaXN0X2RlbCgmd2luY2gtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZ3aW5jaF9oYW5kbGVyX2xvY2spOwogCiAgICAgICAgIGlmKHdpbmNoLT5waWQgIT0gLTEpCiAgICAgICAgICAgICAgICAgb3Nfa2lsbF9wcm9jZXNzKHdpbmNoLT5waWQsIDEpOwogCiAgICAgICAgIGZyZWVfaXJxKFdJTkNIX0lSUSwgd2luY2gpOwotICAgICAgICBsaXN0X2RlbCgmd2luY2gtPmxpc3QpOwogICAgICAgICBrZnJlZSh3aW5jaCk7Ci0gb3V0OgotCXVwKCZ3aW5jaF9oYW5kbGVyX3NlbSk7CisKKwlyZXR1cm47CitlcnI6CisJc3Bpbl91bmxvY2soJndpbmNoX2hhbmRsZXJfbG9jayk7CiB9CiAKKy8qIFhYWDogTm8gbG9jayBhcyBpdCdzIGFuIGV4aXRjYWxsLi4uIGlzIHRoaXMgdmFsaWQ/IERlcGVuZGluZyBvbiBjbGVhbnVwCisgKiBvcmRlci4uLiBhcmUgd2Ugc3VyZSB0aGF0IG5vdGhpbmcgZWxzZSBpcyBkb25lIG9uIHRoZSBsaXN0PyAqLwogc3RhdGljIHZvaWQgd2luY2hfY2xlYW51cCh2b2lkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZTsKQEAgLTc4Niw2ICs3OTQsOSBAQAogCWxpc3RfZm9yX2VhY2goZWxlLCAmd2luY2hfaGFuZGxlcnMpewogCQl3aW5jaCA9IGxpc3RfZW50cnkoZWxlLCBzdHJ1Y3Qgd2luY2gsIGxpc3QpOwogCQlpZih3aW5jaC0+ZmQgIT0gLTEpeworCQkJLyogV2h5IGlzIHRoaXMgZGlmZmVyZW50IGZyb20gdGhlIGFib3ZlIGZyZWVfaXJxKCksCisJCQkgKiB3aGljaCBkZWFjdGl2YXRlcyBTSUdJTz8gVGhpcyBzZWFyY2hlcyB0aGUgRkQKKwkJCSAqIHNvbWV3aGVyZSBlbHNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGxpc3QuLi4gKi8KIAkJCWRlYWN0aXZhdGVfZmQod2luY2gtPmZkLCBXSU5DSF9JUlEpOwogCQkJb3NfY2xvc2VfZmlsZSh3aW5jaC0+ZmQpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvbWVtLmggYi9hcmNoL3VtL2luY2x1ZGUvbWVtLmgKaW5kZXggMTBjNDZjMy4uOTlkM2FkNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL21lbS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9tZW0uaApAQCAtMTMsNiArMTMsNyBAQAogZXh0ZXJuIGludCBpc19yZW1hcHBlZCh2b2lkICp2aXJ0KTsKIGV4dGVybiBpbnQgcGh5c21lbV9yZW1vdmVfbWFwcGluZyh2b2lkICp2aXJ0KTsKIGV4dGVybiB2b2lkIHBoeXNtZW1fZm9yZ2V0X2Rlc2NyaXB0b3IoaW50IGZkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRvX3BoeXModm9pZCAqdmlydCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvcmVnaXN0ZXJzLmggYi9hcmNoL3VtL2luY2x1ZGUvcmVnaXN0ZXJzLmgKaW5kZXggODc0NGFiYi4uMGEzNWU2ZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3JlZ2lzdGVycy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9yZWdpc3RlcnMuaApAQCAtMTQsNiArMTQsNyBAQAogZXh0ZXJuIHZvaWQgc2F2ZV9yZWdpc3RlcnMoaW50IHBpZCwgdW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgcmVzdG9yZV9yZWdpc3RlcnMoaW50IHBpZCwgdW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgaW5pdF9yZWdpc3RlcnMoaW50IHBpZCk7CitleHRlcm4gdm9pZCBnZXRfc2FmZV9yZWdpc3RlcnModW5zaWduZWQgbG9uZyAqIHJlZ3MpOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3B0cmFjZV91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlX3VzZXIuaAppbmRleCBlY2E4MDY2Li44OTlhYTRiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlX3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlX3VzZXIuaApAQCAtMjAsMTEgKzIwLDI0IEBACiAjZGVmaW5lIFBUX1NZU0NBTExfQVJHM19PRkZTRVQgUFRfT0ZGU0VUKEVEWCkKICNkZWZpbmUgUFRfU1lTQ0FMTF9BUkc0X09GRlNFVCBQVF9PRkZTRVQoRVNJKQogI2RlZmluZSBQVF9TWVNDQUxMX0FSRzVfT0ZGU0VUIFBUX09GRlNFVChFREkpCisjZGVmaW5lIFBUX1NZU0NBTExfQVJHNl9PRkZTRVQgUFRfT0ZGU0VUKEVCUCkKIAogI2RlZmluZSBQVF9TWVNDQUxMX1JFVF9PRkZTRVQgUFRfT0ZGU0VUKEVBWCkKIAorI2RlZmluZSBSRUdTX1NZU0NBTExfTlIgRUFYIC8qIFRoaXMgaXMgdXNlZCBiZWZvcmUgYSBzeXN0ZW0gY2FsbCAqLworI2RlZmluZSBSRUdTX1NZU0NBTExfQVJHMSBFQlgKKyNkZWZpbmUgUkVHU19TWVNDQUxMX0FSRzIgRUNYCisjZGVmaW5lIFJFR1NfU1lTQ0FMTF9BUkczIEVEWAorI2RlZmluZSBSRUdTX1NZU0NBTExfQVJHNCBFU0kKKyNkZWZpbmUgUkVHU19TWVNDQUxMX0FSRzUgRURJCisjZGVmaW5lIFJFR1NfU1lTQ0FMTF9BUkc2IEVCUAorCisjZGVmaW5lIFJFR1NfSVBfSU5ERVggRUlQCisjZGVmaW5lIFJFR1NfU1BfSU5ERVggVUVTUAorCiAjZGVmaW5lIFBUX0lQX09GRlNFVCBQVF9PRkZTRVQoRUlQKQogI2RlZmluZSBQVF9JUChyZWdzKSAoKHJlZ3MpW0VJUF0pCisjZGVmaW5lIFBUX1NQX09GRlNFVCBQVF9PRkZTRVQoVUVTUCkKICNkZWZpbmUgUFRfU1AocmVncykgKChyZWdzKVtVRVNQXSkKIAogI2lmbmRlZiBGUkFNRV9TSVpFCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvc3R1Yi5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3N0dWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzY5OWZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3N0dWIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEplZmYgRGlrZSAoamRpa2VAYWRkdG9pdC5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1NZU0RFUF9TVFVCX0gKKyNkZWZpbmUgX19TWVNERVBfU1RVQl9ICisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitleHRlcm4gdm9pZCBzdHViX3NlZ3ZfaGFuZGxlcihpbnQgc2lnKTsKK2V4dGVybiB2b2lkIHN0dWJfY2xvbmVfaGFuZGxlcih2b2lkKTsKKworI2RlZmluZSBTVFVCX1NZU0NBTExfUkVUIEVBWAorI2RlZmluZSBTVFVCX01NQVBfTlIgX19OUl9tbWFwMgorI2RlZmluZSBNTUFQX09GRlNFVChvKSAoKG8pID4+IFBBR0VfU0hJRlQpCisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGwyKGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpCit7CisJbG9uZyByZXQ7CisKKwlfX2FzbV9fKCJtb3ZsICUwLCAlJWVjeDsgIiA6IDogImciIChhcmcyKSA6ICIlZWN4Iik7CisJX19hc21fXygibW92bCAlMCwgJSVlYng7ICIgOiA6ICJnIiAoYXJnMSkgOiAiJWVieCIpOworCV9fYXNtX18oIm1vdmwgJTAsICUlZWF4OyAiIDogOiAiZyIgKHN5c2NhbGwpIDogIiVlYXgiKTsKKwlfX2FzbV9fKCJpbnQgJDB4ODA7IiA6IDogOiAiJWVheCIpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZsICUlZWF4LCAlMDsgIiA6ICI9ZyIgKHJldCkgOik7CisJcmV0dXJuKHJldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHViX3N5c2NhbGwzKGxvbmcgc3lzY2FsbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMykKK3sKKwlfX2FzbV9fKCJtb3ZsICUwLCAlJWVkeDsgIiA6IDogImciIChhcmczKSA6ICIlZWR4Iik7CisJcmV0dXJuKHN0dWJfc3lzY2FsbDIoc3lzY2FsbCwgYXJnMSwgYXJnMikpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3R1Yl9zeXNjYWxsNChsb25nIHN5c2NhbGwsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLCBsb25nIGFyZzMsCisJCQkJIGxvbmcgYXJnNCkKK3sKKwlfX2FzbV9fKCJtb3ZsICUwLCAlJWVzaTsgIiA6IDogImciIChhcmc0KSA6ICIlZXNpIik7CisJcmV0dXJuKHN0dWJfc3lzY2FsbDMoc3lzY2FsbCwgYXJnMSwgYXJnMiwgYXJnMykpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3R1Yl9zeXNjYWxsNihsb25nIHN5c2NhbGwsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLCBsb25nIGFyZzMsCisJCQkJIGxvbmcgYXJnNCwgbG9uZyBhcmc1LCBsb25nIGFyZzYpCit7CisJbG9uZyByZXQ7CisJX19hc21fXygibW92bCAlMCwgJSVlYXg7ICIgOiA6ICJnIiAoc3lzY2FsbCkgOiAiJWVheCIpOworCV9fYXNtX18oIm1vdmwgJTAsICUlZWJ4OyAiIDogOiAiZyIgKGFyZzEpIDogIiVlYngiKTsKKwlfX2FzbV9fKCJtb3ZsICUwLCAlJWVjeDsgIiA6IDogImciIChhcmcyKSA6ICIlZWN4Iik7CisJX19hc21fXygibW92bCAlMCwgJSVlZHg7ICIgOiA6ICJnIiAoYXJnMykgOiAiJWVkeCIpOworCV9fYXNtX18oIm1vdmwgJTAsICUlZXNpOyAiIDogOiAiZyIgKGFyZzQpIDogIiVlc2kiKTsKKwlfX2FzbV9fKCJtb3ZsICUwLCAlJWVkaTsgIiA6IDogImciIChhcmc1KSA6ICIlZWRpIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUlZWJwIDsgbW92bCAlMSwgJSVlYnA7ICIKKwkJImludCAkMHg4MDsgcG9wbCAlJWVicCA7ICIKKwkJIm1vdmwgJSVlYXgsICUwOyAiIDogIj1nIiAocmV0KSA6ICJnIiAoYXJnNikgOiAiJWVheCIpOworCXJldHVybihyZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhcF9teXNlbGYodm9pZCkKK3sKKwlfX2FzbSgiaW50MyIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZV91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9wdHJhY2VfdXNlci5oCmluZGV4IDMxNzI5OTcuLjEyOGZhZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZV91c2VyLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvcHRyYWNlX3VzZXIuaApAQCAtNTUsNiArNTUsMjAgQEAKICNkZWZpbmUgUFRSQUNFX09MRFNFVE9QVElPTlMgMjEKICNlbmRpZgogCisvKiBUaGVzZSBhcmUgYmVmb3JlIHRoZSBzeXN0ZW0gY2FsbCwgc28gdGhlIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgaXMgUkFYCisgKiByYXRoZXIgdGhhbiBPUklHX1JBWCwgYW5kIGFyZzQgaXMgUjEwIHJhdGhlciB0aGFuIFJDWAorICovCisjZGVmaW5lIFJFR1NfU1lTQ0FMTF9OUiBQVF9JTkRFWChSQVgpCisjZGVmaW5lIFJFR1NfU1lTQ0FMTF9BUkcxIFBUX0lOREVYKFJESSkKKyNkZWZpbmUgUkVHU19TWVNDQUxMX0FSRzIgUFRfSU5ERVgoUlNJKQorI2RlZmluZSBSRUdTX1NZU0NBTExfQVJHMyBQVF9JTkRFWChSRFgpCisjZGVmaW5lIFJFR1NfU1lTQ0FMTF9BUkc0IFBUX0lOREVYKFIxMCkKKyNkZWZpbmUgUkVHU19TWVNDQUxMX0FSRzUgUFRfSU5ERVgoUjgpCisjZGVmaW5lIFJFR1NfU1lTQ0FMTF9BUkc2IFBUX0lOREVYKFI5KQorCisjZGVmaW5lIFJFR1NfSVBfSU5ERVggUFRfSU5ERVgoUklQKQorI2RlZmluZSBSRUdTX1NQX0lOREVYIFBUX0lOREVYKFJTUCkKKwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zdHViLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zdHViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5OTA1OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3N0dWIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEplZmYgRGlrZSAoamRpa2VAYWRkdG9pdC5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1NZU0RFUF9TVFVCX0gKKyNkZWZpbmUgX19TWVNERVBfU1RVQl9ICisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPHN5c2RlcC9wdHJhY2VfdXNlci5oPgorCitleHRlcm4gdm9pZCBzdHViX3NlZ3ZfaGFuZGxlcihpbnQgc2lnKTsKK2V4dGVybiB2b2lkIHN0dWJfY2xvbmVfaGFuZGxlcih2b2lkKTsKKworI2RlZmluZSBTVFVCX1NZU0NBTExfUkVUIFBUX0lOREVYKFJBWCkKKyNkZWZpbmUgU1RVQl9NTUFQX05SIF9fTlJfbW1hcAorI2RlZmluZSBNTUFQX09GRlNFVChvKSAobykKKworc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDIobG9uZyBzeXNjYWxsLCBsb25nIGFyZzEsIGxvbmcgYXJnMikKK3sKKwlsb25nIHJldDsKKworCV9fYXNtX18oIm1vdnEgJTAsICUlcnNpOyAiIDogOiAiZyIgKGFyZzIpIDogIiVyc2kiKTsKKwlfX2FzbV9fKCJtb3ZxICUwLCAlJXJkaTsgIiA6IDogImciIChhcmcxKSA6ICIlcmRpIik7CisJX19hc21fXygibW92cSAlMCwgJSVyYXg7ICIgOiA6ICJnIiAoc3lzY2FsbCkgOiAiJXJheCIpOworCV9fYXNtX18oInN5c2NhbGw7IiA6IDogOiAiJXJheCIsICIlcjExIiwgIiVyY3giKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92cSAlJXJheCwgJTA7ICIgOiAiPWciIChyZXQpIDopOworCXJldHVybihyZXQpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3R1Yl9zeXNjYWxsMyhsb25nIHN5c2NhbGwsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLCBsb25nIGFyZzMpCit7CisJX19hc21fXygibW92cSAlMCwgJSVyZHg7ICIgOiA6ICJnIiAoYXJnMykgOiAiJXJkeCIpOworCXJldHVybihzdHViX3N5c2NhbGwyKHN5c2NhbGwsIGFyZzEsIGFyZzIpKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDQobG9uZyBzeXNjYWxsLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwgbG9uZyBhcmczLAorCQkJCSBsb25nIGFyZzQpCit7CisJX19hc21fXygibW92cSAlMCwgJSVyMTA7ICIgOiA6ICJnIiAoYXJnNCkgOiAiJXIxMCIpOworCXJldHVybihzdHViX3N5c2NhbGwzKHN5c2NhbGwsIGFyZzEsIGFyZzIsIGFyZzMpKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN0dWJfc3lzY2FsbDYobG9uZyBzeXNjYWxsLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwgbG9uZyBhcmczLAorCQkJCSBsb25nIGFyZzQsIGxvbmcgYXJnNSwgbG9uZyBhcmc2KQoreworCV9fYXNtX18oIm1vdnEgJTAsICUlcjk7ICIgOiA6ICJnIiAoYXJnNikgOiAiJXI5Iik7CisJX19hc21fXygibW92cSAlMCwgJSVyODsgIiA6IDogImciIChhcmc1KSA6ICIlcjgiKTsKKwlyZXR1cm4oc3R1Yl9zeXNjYWxsNChzeXNjYWxsLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFwX215c2VsZih2b2lkKQoreworCV9fYXNtKCJpbnQzIik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3RpbWVfdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL3RpbWVfdXNlci5oCmluZGV4IGY2NGVmNzcuLjE3ZDdlZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS90aW1lX3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvdGltZV91c2VyLmgKQEAgLTEwLDYgKzEwLDcgQEAKIGV4dGVybiB2b2lkIHN3aXRjaF90aW1lcnMoaW50IHRvX3JlYWwpOwogZXh0ZXJuIHZvaWQgaWRsZV9zbGVlcChpbnQgc2Vjcyk7CiBleHRlcm4gdm9pZCBlbmFibGVfdGltZXIodm9pZCk7CitleHRlcm4gdm9pZCBwcmVwYXJlX3RpbWVyKHZvaWQgKiBwdHIpOwogZXh0ZXJuIHZvaWQgZGlzYWJsZV90aW1lcih2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRpbWVfbG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIHRpbWVfdW5sb2NrKHVuc2lnbmVkIGxvbmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3RsYi5oIGIvYXJjaC91bS9pbmNsdWRlL3RsYi5oCmluZGV4IGRhMTA5NzIuLmM2Zjk2MjggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS90bGIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvdGxiLmgKQEAgLTM3LDMxICszNywyNSBAQAogZXh0ZXJuIHZvaWQgbXByb3RlY3Rfa2VybmVsX3ZtKGludCB3KTsKIGV4dGVybiB2b2lkIGZvcmNlX2ZsdXNoX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIGZpeF9yYW5nZV9jb21tb24oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmRfYWRkciwgaW50IGZvcmNlLCBpbnQgZGF0YSwKLQkJCSAgICAgdm9pZCAoKmRvX29wcykoaW50LCBzdHJ1Y3QgaG9zdF92bV9vcCAqLCBpbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlbmRfYWRkciwgaW50IGZvcmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZG9fb3BzKSh1bmlvbiBtbV9jb250ZXh0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0X3ZtX29wICosIGludCkpOwogZXh0ZXJuIGludCBmbHVzaF90bGJfa2VybmVsX3JhbmdlX2NvbW1vbih1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQpOwogCiBleHRlcm4gaW50IGFkZF9tbWFwKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJICAgIGludCByLCBpbnQgdywgaW50IHgsIHN0cnVjdCBob3N0X3ZtX29wICpvcHMsIGludCBpbmRleCwKLQkJICAgIGludCBsYXN0X2ZpbGxlZCwgaW50IGRhdGEsCi0JCSAgICB2b2lkICgqZG9fb3BzKShpbnQsIHN0cnVjdCBob3N0X3ZtX29wICosIGludCkpOworICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdF9maWxsZWQsIHVuaW9uIG1tX2NvbnRleHQgKm1tdSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmRvX29wcykodW5pb24gbW1fY29udGV4dCAqLCBzdHJ1Y3QgaG9zdF92bV9vcCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpKTsKIGV4dGVybiBpbnQgYWRkX211bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkgICAgICBzdHJ1Y3QgaG9zdF92bV9vcCAqb3BzLCBpbnQgaW5kZXgsIGludCBsYXN0X2ZpbGxlZCwKLQkJICAgICAgaW50IGRhdGEsIHZvaWQgKCpkb19vcHMpKGludCwgc3RydWN0IGhvc3Rfdm1fb3AgKiwgaW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgdW5pb24gbW1fY29udGV4dCAqbW11LAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpkb19vcHMpKHVuaW9uIG1tX2NvbnRleHQgKiwgc3RydWN0IGhvc3Rfdm1fb3AgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpKTsKIGV4dGVybiBpbnQgYWRkX21wcm90ZWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCByLCBpbnQgdywKIAkJCWludCB4LCBzdHJ1Y3QgaG9zdF92bV9vcCAqb3BzLCBpbnQgaW5kZXgsCi0JCQlpbnQgbGFzdF9maWxsZWQsIGludCBkYXRhLAotCQkJdm9pZCAoKmRvX29wcykoaW50LCBzdHJ1Y3QgaG9zdF92bV9vcCAqLCBpbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXN0X2ZpbGxlZCwgdW5pb24gbW1fY29udGV4dCAqbW11LAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmRvX29wcykodW5pb24gbW1fY29udGV4dCAqLCBzdHJ1Y3QgaG9zdF92bV9vcCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSk7CiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUyBiL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUwppbmRleCA3MTViMDgzLi4zOTQyYTVmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKKysrIGIvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCkBAIC02Nyw2ICs2NywxMiBAQAogICAgICooLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKICAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KICAgICAqKC5nbnUud2FybmluZykKKworICAgIC4gPSBBTElHTig0MDk2KTsKKyAgICBfX3N5c2NhbGxfc3R1Yl9zdGFydCA9IC47CisgICAgKiguX19zeXNjYWxsX3N0dWIqKQorICAgIF9fc3lzY2FsbF9zdHViX2VuZCA9IC47CisgICAgLiA9IEFMSUdOKDQwOTYpOwogICB9ID0weDkwOTA5MDkwCiAgIC5maW5pICAgICAgICAgICA6IHsKICAgICBLRUVQICgqKC5maW5pKSkKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYyBiL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYwppbmRleCA0MjBlNmQ1Li5hMjRlM2I3IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9waHlzbWVtLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcGh5c21lbS5jCkBAIC0zNTMsNiArMzUzLDggQEAKIAogI2RlZmluZSBQRk5fVVAoeCkgKCgoeCkgKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVCkKIAorZXh0ZXJuIGludCBfX3N5c2NhbGxfc3R1Yl9zdGFydCwgX19iaW5hcnlfc3RhcnQ7CisKIHZvaWQgc2V0dXBfcGh5c21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHJlc2VydmVfZW5kLAogCQkgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBoaWdobWVtKQogewpAQCAtMzcxLDYgKzM3MywxMiBAQAogCQlleGl0KDEpOwogCX0KIAorCS8qIFNwZWNpYWwga2x1ZGdlIC0gVGhpcyBwYWdlIHdpbGwgYmUgbWFwcGVkIGluIHRvIHVzZXJzcGFjZSBwcm9jZXNzZXMKKwkgKiBmcm9tIHBoeXNtZW1fZmQsIHNvIGl0IG5lZWRzIHRvIGJlIHdyaXR0ZW4gb3V0IHRoZXJlLgorCSAqLworCW9zX3NlZWtfZmlsZShwaHlzbWVtX2ZkLCBfX3BhKCZfX3N5c2NhbGxfc3R1Yl9zdGFydCkpOworCW9zX3dyaXRlX2ZpbGUocGh5c21lbV9mZCwgJl9fc3lzY2FsbF9zdHViX3N0YXJ0LCBQQUdFX1NJWkUpOworCiAJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtKHBmbiwgcGZuICsgZGVsdGEpOwogCWZyZWVfYm9vdG1lbShfX3BhKHJlc2VydmVfZW5kKSArIGJvb3RtYXBfc2l6ZSwKIAkJICAgICBsZW4gLSBib290bWFwX3NpemUgLSByZXNlcnZlKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYwppbmRleCAxYjVlZjNlLi5jNDVhNjBlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAidW1sLWNvbmZpZy5oIgogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCiAjaW5jbHVkZSAibW9kZS5oIgorI2luY2x1ZGUgInRlbXBmaWxlLmgiCiAjaWZkZWYgVU1MX0NPTkZJR19NT0RFX1NLQVMKICNpbmNsdWRlICJza2FzLmgiCiAjaW5jbHVkZSAic2thc19wdHJhY2UuaCIKQEAgLTM1OCwxMSArMzU5LDE2IEBACiAJCWtpbGwodGFyZ2V0LCBTSUdJTyk7CiB9CiAKK2ludCBwdHJhY2VfZmF1bHRpbmZvID0gMDsKK2ludCBwcm9jX21tID0gMTsKKworZXh0ZXJuIHZvaWQgKl9fc3lzY2FsbF9zdHViX3N0YXJ0LCBfX3N5c2NhbGxfc3R1Yl9lbmQ7CisKICNpZmRlZiBVTUxfQ09ORklHX01PREVfU0tBUwotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc2thczNfcHRyYWNlX3N1cHBvcnQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19za2FzM19wdHJhY2Vfc3VwcG9ydCh2b2lkKQogewogCXN0cnVjdCBwdHJhY2VfZmF1bHRpbmZvIGZpOwotCWludCBwaWQsIG4sIHJldCA9IDE7CisJaW50IHBpZCwgbjsKIAogCXByaW50ZigiQ2hlY2tpbmcgZm9yIHRoZSBza2FzMyBwYXRjaCBpbiB0aGUgaG9zdC4uLiIpOwogCXBpZCA9IHN0YXJ0X3B0cmFjZWRfY2hpbGQoKTsKQEAgLTM3NCwzMyArMzgwLDMxIEBACiAJCWVsc2UgewogCQkJcGVycm9yKCJub3QgZm91bmQiKTsKIAkJfQotCQlyZXQgPSAwOwotCX0gZWxzZSB7CisJfQorCWVsc2UgeworCQlwdHJhY2VfZmF1bHRpbmZvID0gMTsKIAkJcHJpbnRmKCJmb3VuZFxuIik7CiAJfQogCiAJaW5pdF9yZWdpc3RlcnMocGlkKTsKIAlzdG9wX3B0cmFjZWRfY2hpbGQocGlkLCAxLCAxKTsKLQotCXJldHVybihyZXQpOwogfQogCiBpbnQgY2FuX2RvX3NrYXModm9pZCkKIHsKLQlpbnQgcmV0ID0gMTsKLQogCXByaW50ZigiQ2hlY2tpbmcgZm9yIC9wcm9jL21tLi4uIik7CiAJaWYgKG9zX2FjY2VzcygiL3Byb2MvbW0iLCBPU19BQ0NfV19PSykgPCAwKSB7CisJCXByb2NfbW0gPSAwOwogCQlwcmludGYoIm5vdCBmb3VuZFxuIik7Ci0JCXJldCA9IDA7CiAJCWdvdG8gb3V0OwotCX0gZWxzZSB7CisJfQorCWVsc2UgewogCQlwcmludGYoImZvdW5kXG4iKTsKIAl9CiAKLQlyZXQgPSBjaGVja19za2FzM19wdHJhY2Vfc3VwcG9ydCgpOwogb3V0OgotCXJldHVybiByZXQ7CisJY2hlY2tfc2thczNfcHRyYWNlX3N1cHBvcnQoKTsKKwlyZXR1cm4gMTsKIH0KICNlbHNlCiBpbnQgY2FuX2RvX3NrYXModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUgYi9hcmNoL3VtL2tlcm5lbC9za2FzL01ha2VmaWxlCmluZGV4IGZmNjljNGIuLmQyOTZkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9NYWtlZmlsZQpAQCAtMywxMSArMywxNCBAQAogIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAjCiAKLW9iai15IDo9IGV4ZWNfa2Vybi5vIG1lbS5vIG1lbV91c2VyLm8gbW11Lm8gcHJvY2Vzcy5vIHByb2Nlc3Nfa2Vybi5vIFwKK29iai15IDo9IGNsb25lLm8gZXhlY19rZXJuLm8gbWVtLm8gbWVtX3VzZXIubyBtbXUubyBwcm9jZXNzLm8gcHJvY2Vzc19rZXJuLm8gXAogCXN5c2NhbGxfa2Vybi5vIHN5c2NhbGxfdXNlci5vIHRsYi5vIHRyYXBfdXNlci5vIHVhY2Nlc3MubyBcCiAKIHN1YmRpci0gOj0gdXRpbAogCi1VU0VSX09CSlMgOj0gcHJvY2Vzcy5vCitVU0VSX09CSlMgOj0gcHJvY2Vzcy5vIGNsb25lLm8KIAogaW5jbHVkZSBhcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKKworIyBjbG9uZS5vIGlzIGluIHRoZSBzdHViLCBzbyBpdCBjYW4ndCBiZSBidWlsdCB3aXRoIHByb2ZpbGluZworJChvYmopL2Nsb25lLm8gOiBjX2ZsYWdzID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoY2FsbCB1bnByb2ZpbGUsJChVU0VSX0NGTEFHUykpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL2Nsb25lLmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL2Nsb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjNTVmMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvY2xvbmUuYwpAQCAtMCwwICsxLDQ0IEBACisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSAicHRyYWNlX3VzZXIuaCIKKyNpbmNsdWRlICJza2FzLmgiCisjaW5jbHVkZSAic3R1Yi1kYXRhLmgiCisjaW5jbHVkZSAidW1sLWNvbmZpZy5oIgorI2luY2x1ZGUgInN5c2RlcC9zdHViLmgiCisKKy8qIFRoaXMgaXMgaW4gYSBzZXBhcmF0ZSBmaWxlIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCBhbnkKKyAqIGV4dHJhbmVvdXMgZ2NjIGZsYWdzICgtcGcsIC1mcHJvZmlsZS1hcmNzLCAtZnRlc3QtY292ZXJhZ2UpIGRpc2FibGVkCisgKi8KK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLl9fc3lzY2FsbF9zdHViIikpKQorc3R1Yl9jbG9uZV9oYW5kbGVyKHZvaWQpCit7CisJbG9uZyBlcnI7CisJc3RydWN0IHN0dWJfZGF0YSAqZnJvbSA9IChzdHJ1Y3Qgc3R1Yl9kYXRhICopIFVNTF9DT05GSUdfU1RVQl9EQVRBOworCisJZXJyID0gc3R1Yl9zeXNjYWxsMihfX05SX2Nsb25lLCBDTE9ORV9QQVJFTlQgfCBDTE9ORV9GSUxFUyB8IFNJR0NITEQsCisJCQkgICAgVU1MX0NPTkZJR19TVFVCX0RBVEEgKyBQQUdFX1NJWkUgLyAyIC0KKwkJCSAgICBzaXplb2Yodm9pZCAqKSk7CisJaWYoZXJyICE9IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gc3R1Yl9zeXNjYWxsNChfX05SX3B0cmFjZSwgUFRSQUNFX1RSQUNFTUUsIDAsIDAsIDApOworCWlmKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBzdHViX3N5c2NhbGwzKF9fTlJfc2V0aXRpbWVyLCBJVElNRVJfVklSVFVBTCwKKwkJCSAgICAobG9uZykgJmZyb20tPnRpbWVyLCAwKTsKKwlpZihlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gc3R1Yl9zeXNjYWxsNihTVFVCX01NQVBfTlIsIFVNTF9DT05GSUdfU1RVQl9EQVRBLCBQQUdFX1NJWkUsCisJCQkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1NIQVJFRCwKKwkJCSAgICBmcm9tLT5mZCwgZnJvbS0+b2Zmc2V0KTsKKyBvdXQ6CisJLyogc2F2ZSBjdXJyZW50IHJlc3VsdC4gUGFyZW50OiBwaWQ7IGNoaWxkOiByZXRjb2RlIG9mIG1tYXAgKi8KKwlmcm9tLT5lcnIgPSBlcnI7CisJdHJhcF9teXNlbGYoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvZXhlY19rZXJuLmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL2V4ZWNfa2Vybi5jCmluZGV4IGM2YjRkNWQuLjc3ZWQ3YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvZXhlY19rZXJuLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9leGVjX2tlcm4uYwpAQCAtMTgsNyArMTgsNyBAQAogdm9pZCBmbHVzaF90aHJlYWRfc2thcyh2b2lkKQogewogCWZvcmNlX2ZsdXNoX2FsbCgpOwotCXN3aXRjaF9tbV9za2FzKGN1cnJlbnQtPm1tLT5jb250ZXh0LnNrYXMubW1fZmQpOworICAgICAgICBzd2l0Y2hfbW1fc2thcygmY3VycmVudC0+bW0tPmNvbnRleHQuc2thcy5pZCk7CiB9CiAKIHZvaWQgc3RhcnRfdGhyZWFkX3NrYXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZWlwLCAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tbV9pZC5oIGIvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL21tX2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkZDA5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tbV9pZC5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19NTV9JRF9ICisjZGVmaW5lIF9fTU1fSURfSAorCitzdHJ1Y3QgbW1faWQgeworCXVuaW9uIHsKKwkJaW50IG1tX2ZkOworCQlpbnQgcGlkOworCX0gdTsKKwl1bnNpZ25lZCBsb25nIHN0YWNrOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvbW11LXNrYXMuaCBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tbXUtc2thcy5oCmluZGV4IDRjZDYwZDcuLjI3OGI3MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tbXUtc2thcy5oCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tbXUtc2thcy5oCkBAIC02LDEwICs2LDE1IEBACiAjaWZuZGVmIF9fU0tBU19NTVVfSAogI2RlZmluZSBfX1NLQVNfTU1VX0gKIAorI2luY2x1ZGUgIm1tX2lkLmgiCisKIHN0cnVjdCBtbXVfY29udGV4dF9za2FzIHsKLQlpbnQgbW1fZmQ7CisJc3RydWN0IG1tX2lkIGlkOworICAgICAgICB1bnNpZ25lZCBsb25nIGxhc3RfcGFnZV90YWJsZTsKIH07CiAKK2V4dGVybiB2b2lkIHN3aXRjaF9tbV9za2FzKHN0cnVjdCBtbV9pZCAqIG1tX2lkcCk7CisKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL3NrYXMuaCBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9za2FzLmgKaW5kZXggOTZiNTFkYi4uZDk4M2VhOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL3NrYXMuaAorKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvc2thcy5oCkBAIC02LDkgKzYsMTEgQEAKICNpZm5kZWYgX19TS0FTX0gKICNkZWZpbmUgX19TS0FTX0gKIAorI2luY2x1ZGUgIm1tX2lkLmgiCiAjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgogCiBleHRlcm4gaW50IHVzZXJzcGFjZV9waWRbXTsKK2V4dGVybiBpbnQgcHJvY19tbSwgcHRyYWNlX2ZhdWx0aW5mbzsKIAogZXh0ZXJuIHZvaWQgc3dpdGNoX3RocmVhZHModm9pZCAqbWUsIHZvaWQgKm5leHQpOwogZXh0ZXJuIHZvaWQgdGhyZWFkX3dhaXQodm9pZCAqc3csIHZvaWQgKmZiKTsKQEAgLTIyLDE2ICsyNCwxOCBAQAogZXh0ZXJuIHZvaWQgcmVtb3ZlX3NpZ3N0YWNrKHZvaWQpOwogZXh0ZXJuIHZvaWQgbmV3X3RocmVhZF9oYW5kbGVyKGludCBzaWcpOwogZXh0ZXJuIHZvaWQgaGFuZGxlX3N5c2NhbGwodW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHZvaWQgbWFwKGludCBmZCwgdW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHIsIGludCB3LAotCQlpbnQgeCwgaW50IHBoeXNfZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQpOwotZXh0ZXJuIGludCB1bm1hcChpbnQgZmQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKLWV4dGVybiBpbnQgcHJvdGVjdChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIAotCQkgICBpbnQgciwgaW50IHcsIGludCB4KTsKK2V4dGVybiBpbnQgbWFwKHN0cnVjdCBtbV9pZCAqIG1tX2lkcCwgdW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgIGludCByLCBpbnQgdywgaW50IHgsIGludCBwaHlzX2ZkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0KTsKK2V4dGVybiBpbnQgdW5tYXAoc3RydWN0IG1tX2lkICogbW1faWRwLCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CitleHRlcm4gaW50IHByb3RlY3Qoc3RydWN0IG1tX2lkICogbW1faWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCSAgIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgciwgaW50IHcsIGludCB4KTsKIGV4dGVybiB2b2lkIHVzZXJfc2lnbmFsKGludCBzaWcsIHVuaW9uIHVtbF9wdF9yZWdzICpyZWdzLCBpbnQgcGlkKTsKIGV4dGVybiBpbnQgbmV3X21tKGludCBmcm9tKTsKLWV4dGVybiB2b2lkIHN0YXJ0X3VzZXJzcGFjZShpbnQgY3B1KTsKK2V4dGVybiBpbnQgc3RhcnRfdXNlcnNwYWNlKHVuc2lnbmVkIGxvbmcgc3R1Yl9zdGFjayk7CitleHRlcm4gaW50IGNvcHlfY29udGV4dF9za2FzMCh1bnNpZ25lZCBsb25nIHN0YWNrLCBpbnQgcGlkKTsKIGV4dGVybiB2b2lkIGdldF9za2FzX2ZhdWx0aW5mbyhpbnQgcGlkLCBzdHJ1Y3QgZmF1bHRpbmZvICogZmkpOwogZXh0ZXJuIGxvbmcgZXhlY3V0ZV9zeXNjYWxsX3NrYXModm9pZCAqcik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBjdXJyZW50X3N0dWJfc3RhY2sodm9pZCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvc3R1Yi1kYXRhLmggYi9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvc3R1Yi1kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlZDkyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9zdHViLWRhdGEuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fU1RVQl9EQVRBX0gKKyNkZWZpbmUgX19TVFVCX0RBVEFfSAorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworc3RydWN0IHN0dWJfZGF0YSB7CisJbG9uZyBvZmZzZXQ7CisJaW50IGZkOworCXN0cnVjdCBpdGltZXJ2YWwgdGltZXI7CisJbG9uZyBlcnI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvbWVtLmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL21lbS5jCmluZGV4IDQzOGRiMmYuLjE0NzQ2NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvbWVtLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9tZW0uYwpAQCAtNSw3ICs1LDkgQEAKIAogI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgogI2luY2x1ZGUgImxpbnV4L21tLmgiCisjaW5jbHVkZSAiYXNtL3BndGFibGUuaCIKICNpbmNsdWRlICJtZW1fdXNlci5oIgorI2luY2x1ZGUgInNrYXMuaCIKIAogdW5zaWduZWQgbG9uZyBzZXRfdGFza19zaXplc19za2FzKGludCBhcmcsIHVuc2lnbmVkIGxvbmcgKmhvc3Rfc2l6ZV9vdXQsIAogCQkJCSAgdW5zaWduZWQgbG9uZyAqdGFza19zaXplX291dCkKQEAgLTE4LDcgKzIwLDkgQEAKIAkqdGFza19zaXplX291dCA9IENPTkZJR19IT1NUX1RBU0tfU0laRTsKICNlbHNlCiAJKmhvc3Rfc2l6ZV9vdXQgPSB0b3A7Ci0JKnRhc2tfc2l6ZV9vdXQgPSB0b3A7CisJaWYgKHByb2NfbW0gJiYgcHRyYWNlX2ZhdWx0aW5mbykKKwkJKnRhc2tfc2l6ZV9vdXQgPSB0b3A7CisJZWxzZSAqdGFza19zaXplX291dCA9IENPTkZJR19TVFVCX1NUQVJUICYgUEdESVJfTUFTSzsKICNlbmRpZgogCXJldHVybigoKHVuc2lnbmVkIGxvbmcpIHNldF90YXNrX3NpemVzX3NrYXMpICYgfjB4ZmZmZmZmKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvbWVtX3VzZXIuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvbWVtX3VzZXIuYwppbmRleCAxMzEwYmYxLi5iMDk4MGZmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL21lbV91c2VyLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9tZW1fdXNlci5jCkBAIC0zLDEwMCArMywxNzEgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKICAqLwogCisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSAibWVtX3VzZXIuaCIKICNpbmNsdWRlICJtZW0uaCIKKyNpbmNsdWRlICJtbV9pZC5oIgogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJvcy5oIgogI2luY2x1ZGUgInByb2NfbW0uaCIKKyNpbmNsdWRlICJwdHJhY2VfdXNlci5oIgorI2luY2x1ZGUgInVzZXJfdXRpbC5oIgorI2luY2x1ZGUgImtlcm5fdXRpbC5oIgorI2luY2x1ZGUgInRhc2suaCIKKyNpbmNsdWRlICJyZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCisjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgorI2luY2x1ZGUgInN5c2RlcC9zdHViLmgiCisjaW5jbHVkZSAic2thcy5oIgogCi12b2lkIG1hcChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBsZW4sIGludCByLCBpbnQgdywKLQkgaW50IHgsIGludCBwaHlzX2ZkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0KQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzY2FsbF9zdHViLCBfX3N5c2NhbGxfc3R1Yl9zdGFydDsKKworZXh0ZXJuIHZvaWQgd2FpdF9zdHViX2RvbmUoaW50IHBpZCwgaW50IHNpZywgY2hhciAqIGZuYW1lKTsKKworc3RhdGljIGxvbmcgcnVuX3N5c2NhbGxfc3R1YihzdHJ1Y3QgbW1faWQgKiBtbV9pZHAsIGludCBzeXNjYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICphcmdzKQogewotCXN0cnVjdCBwcm9jX21tX29wIG1hcDsKLQlpbnQgcHJvdCwgbjsKKyAgICAgICAgaW50IG4sIHBpZCA9IG1tX2lkcC0+dS5waWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVnc1tNQVhfUkVHX05SXTsKIAotCXByb3QgPSAociA/IFBST1RfUkVBRCA6IDApIHwgKHcgPyBQUk9UX1dSSVRFIDogMCkgfCAKLQkJKHggPyBQUk9UX0VYRUMgOiAwKTsKKyAgICAgICAgZ2V0X3NhZmVfcmVnaXN0ZXJzKHJlZ3MpOworICAgICAgICByZWdzW1JFR1NfSVBfSU5ERVhdID0gVU1MX0NPTkZJR19TVFVCX0NPREUgKworICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZykgJnN5c2NhbGxfc3R1YiAtCisgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAmX19zeXNjYWxsX3N0dWJfc3RhcnQpOworICAgICAgICAvKiBYWFggRG9uJ3QgaGF2ZSBhIGRlZmluZSBmb3Igc3RhcnRpbmcgYSBzeXNjYWxsICovCisgICAgICAgIHJlZ3NbUkVHU19TWVNDQUxMX05SXSA9IHN5c2NhbGw7CisgICAgICAgIHJlZ3NbUkVHU19TWVNDQUxMX0FSRzFdID0gYXJnc1swXTsKKyAgICAgICAgcmVnc1tSRUdTX1NZU0NBTExfQVJHMl0gPSBhcmdzWzFdOworICAgICAgICByZWdzW1JFR1NfU1lTQ0FMTF9BUkczXSA9IGFyZ3NbMl07CisgICAgICAgIHJlZ3NbUkVHU19TWVNDQUxMX0FSRzRdID0gYXJnc1szXTsKKyAgICAgICAgcmVnc1tSRUdTX1NZU0NBTExfQVJHNV0gPSBhcmdzWzRdOworICAgICAgICByZWdzW1JFR1NfU1lTQ0FMTF9BUkc2XSA9IGFyZ3NbNV07CisgICAgICAgIG4gPSBwdHJhY2Vfc2V0cmVncyhwaWQsIHJlZ3MpOworICAgICAgICBpZihuIDwgMCl7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJydW5fc3lzY2FsbF9zdHViIDogUFRSQUNFX1NFVFJFR1MgZmFpbGVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICJlcnJubyA9ICVkXG4iLCBuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4obik7CisgICAgICAgIH0KIAotCW1hcCA9ICgoc3RydWN0IHByb2NfbW1fb3ApIHsgLm9wIAk9IE1NX01NQVAsCi0JCQkJICAgICAudSAJPSAKLQkJCQkgICAgIHsgLm1tYXAJPSAKLQkJCQkgICAgICAgeyAuYWRkciAJCT0gdmlydCwKLQkJCQkJIC5sZW4JCT0gbGVuLAotCQkJCQkgLnByb3QJCT0gcHJvdCwKLQkJCQkJIC5mbGFncwkJPSBNQVBfU0hBUkVEIHwgCi0JCQkJCSAgICAgICAgICAgICAgICAgIE1BUF9GSVhFRCwKLQkJCQkJIC5mZAkJPSBwaHlzX2ZkLAotCQkJCQkgLm9mZnNldAk9IG9mZnNldAotCQkJCSAgICAgICB9IH0gfSApOwotCW4gPSBvc193cml0ZV9maWxlKGZkLCAmbWFwLCBzaXplb2YobWFwKSk7Ci0JaWYobiAhPSBzaXplb2YobWFwKSkgCi0JCXByaW50aygibWFwIDogL3Byb2MvbW0gbWFwIGZhaWxlZCwgZXJyID0gJWRcbiIsIC1uKTsKKyAgICAgICAgd2FpdF9zdHViX2RvbmUocGlkLCAwLCAicnVuX3N5c2NhbGxfc3R1YiIpOworCisgICAgICAgIHJldHVybigqKCh1bnNpZ25lZCBsb25nICopIG1tX2lkcC0+c3RhY2spKTsKIH0KIAotaW50IHVubWFwKGludCBmZCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCitpbnQgbWFwKHN0cnVjdCBtbV9pZCAqbW1faWRwLCB1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgbGVuLAorICAgICAgICBpbnQgciwgaW50IHcsIGludCB4LCBpbnQgcGh5c19mZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcHJvY19tbV9vcCB1bm1hcDsKLQlpbnQgbjsKKyAgICAgICAgaW50IHByb3QsIG47CiAKLQl1bm1hcCA9ICgoc3RydWN0IHByb2NfbW1fb3ApIHsgLm9wIAk9IE1NX01VTk1BUCwKLQkJCQkgICAgICAgLnUgCT0gCi0JCQkJICAgICAgIHsgLm11bm1hcAk9IAotCQkJCQkgeyAuYWRkciAJPSAodW5zaWduZWQgbG9uZykgYWRkciwKLQkJCQkJICAgLmxlbgkJPSBsZW4gfSB9IH0gKTsKLQluID0gb3Nfd3JpdGVfZmlsZShmZCwgJnVubWFwLCBzaXplb2YodW5tYXApKTsKLQlpZihuICE9IHNpemVvZih1bm1hcCkpIHsKLQkJaWYobiA8IDApCi0JCQlyZXR1cm4obik7Ci0JCWVsc2UgaWYobiA+IDApCi0JCQlyZXR1cm4oLUVJTyk7Ci0JfQorICAgICAgICBwcm90ID0gKHIgPyBQUk9UX1JFQUQgOiAwKSB8ICh3ID8gUFJPVF9XUklURSA6IDApIHwKKyAgICAgICAgICAgICAgICAoeCA/IFBST1RfRVhFQyA6IDApOwogCi0JcmV0dXJuKDApOworICAgICAgICBpZihwcm9jX21tKXsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvY19tbV9vcCBtYXA7CisgICAgICAgICAgICAgICAgaW50IGZkID0gbW1faWRwLT51Lm1tX2ZkOworICAgICAgICAgICAgICAgIG1hcCA9ICgoc3RydWN0IHByb2NfbW1fb3ApIHsgLm9wCT0gTU1fTU1BUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51CQk9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IC5tbWFwCT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAuYWRkcgk9IHZpcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxlbgk9IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvdAk9IHByb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZsYWdzCT0gTUFQX1NIQVJFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX0ZJWEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mZAk9IHBoeXNfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9mZnNldD0gb2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSB9ICk7CisgICAgICAgICAgICAgICAgbiA9IG9zX3dyaXRlX2ZpbGUoZmQsICZtYXAsIHNpemVvZihtYXApKTsKKyAgICAgICAgICAgICAgICBpZihuICE9IHNpemVvZihtYXApKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJtYXAgOiAvcHJvYy9tbSBtYXAgZmFpbGVkLCBlcnIgPSAlZFxuIiwgLW4pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxvbmcgcmVzOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnc1tdID0geyB2aXJ0LCBsZW4sIHByb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9TSEFSRUQgfCBNQVBfRklYRUQsIHBoeXNfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1NQVBfT0ZGU0VUKG9mZnNldCkgfTsKKworICAgICAgICAgICAgICAgIHJlcyA9IHJ1bl9zeXNjYWxsX3N0dWIobW1faWRwLCBTVFVCX01NQVBfTlIsIGFyZ3MpOworICAgICAgICAgICAgICAgIGlmKCh2b2lkICopIHJlcyA9PSBNQVBfRkFJTEVEKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJtbWFwIHN0dWIgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCByZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBwcm90ZWN0KGludCBmZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHIsIGludCB3LCAKLQkgICAgaW50IHgsIGludCBtdXN0X3N1Y2NlZWQpCitpbnQgdW5tYXAoc3RydWN0IG1tX2lkICptbV9pZHAsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQogewotCXN0cnVjdCBwcm9jX21tX29wIHByb3RlY3Q7Ci0JaW50IHByb3QsIG47CisgICAgICAgIGludCBuOwogCi0JcHJvdCA9IChyID8gUFJPVF9SRUFEIDogMCkgfCAodyA/IFBST1RfV1JJVEUgOiAwKSB8IAotCQkoeCA/IFBST1RfRVhFQyA6IDApOworICAgICAgICBpZihwcm9jX21tKXsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvY19tbV9vcCB1bm1hcDsKKyAgICAgICAgICAgICAgICBpbnQgZmQgPSBtbV9pZHAtPnUubW1fZmQ7CisgICAgICAgICAgICAgICAgdW5tYXAgPSAoKHN0cnVjdCBwcm9jX21tX29wKSB7IC5vcAk9IE1NX01VTk1BUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnUJPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IC5tdW5tYXAJPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLmFkZHIJPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubGVuCQk9IGxlbiB9IH0gfSApOworICAgICAgICAgICAgICAgIG4gPSBvc193cml0ZV9maWxlKGZkLCAmdW5tYXAsIHNpemVvZih1bm1hcCkpOworICAgICAgICAgICAgICAgIGlmKG4gIT0gc2l6ZW9mKHVubWFwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYobiA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobiA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtRUlPKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZ3NbXSA9IHsgKHVuc2lnbmVkIGxvbmcpIGFkZHIsIGxlbiwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9OwogCi0JcHJvdGVjdCA9ICgoc3RydWN0IHByb2NfbW1fb3ApIHsgLm9wIAk9IE1NX01QUk9URUNULAotCQkJCSAgICAgICAudSAJPSAKLQkJCQkgICAgICAgeyAubXByb3RlY3QJPSAKLQkJCQkJIHsgLmFkZHIgCT0gKHVuc2lnbmVkIGxvbmcpIGFkZHIsCi0JCQkJCSAgIC5sZW4JCT0gbGVuLAotCQkJCQkgICAucHJvdAk9IHByb3QgfSB9IH0gKTsKKyAgICAgICAgICAgICAgICByZXMgPSBydW5fc3lzY2FsbF9zdHViKG1tX2lkcCwgX19OUl9tdW5tYXAsIGFyZ3MpOworICAgICAgICAgICAgICAgIGlmKHJlcyA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIm11bm1hcCBzdHViIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgcmVzKTsKKyAgICAgICAgfQogCi0JbiA9IG9zX3dyaXRlX2ZpbGUoZmQsICZwcm90ZWN0LCBzaXplb2YocHJvdGVjdCkpOwotCWlmKG4gIT0gc2l6ZW9mKHByb3RlY3QpKSB7Ci0JCWlmKG4gPT0gMCkgcmV0dXJuKDApOworICAgICAgICByZXR1cm4oMCk7Cit9CiAKLQkJaWYobXVzdF9zdWNjZWVkKQotCQkJcGFuaWMoInByb3RlY3QgZmFpbGVkLCBlcnIgPSAlZCIsIC1uKTsKK2ludCBwcm90ZWN0KHN0cnVjdCBtbV9pZCAqbW1faWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCSAgICBpbnQgciwgaW50IHcsIGludCB4KQoreworICAgICAgICBzdHJ1Y3QgcHJvY19tbV9vcCBwcm90ZWN0OworICAgICAgICBpbnQgcHJvdCwgbjsKIAotCQlyZXR1cm4oLUVJTyk7Ci0JfQorICAgICAgICBwcm90ID0gKHIgPyBQUk9UX1JFQUQgOiAwKSB8ICh3ID8gUFJPVF9XUklURSA6IDApIHwKKyAgICAgICAgICAgICAgICAoeCA/IFBST1RfRVhFQyA6IDApOwogCi0JcmV0dXJuKDApOworICAgICAgICBpZihwcm9jX21tKXsKKyAgICAgICAgICAgICAgICBpbnQgZmQgPSBtbV9pZHAtPnUubW1fZmQ7CisgICAgICAgICAgICAgICAgcHJvdGVjdCA9ICgoc3RydWN0IHByb2NfbW1fb3ApIHsgLm9wCT0gTU1fTVBST1RFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnUJPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLm1wcm90ZWN0CT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLmFkZHIJPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxlbgk9IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3QJPSBwcm90IH0gfSB9ICk7CisKKyAgICAgICAgICAgICAgICBuID0gb3Nfd3JpdGVfZmlsZShmZCwgJnByb3RlY3QsIHNpemVvZihwcm90ZWN0KSk7CisgICAgICAgICAgICAgICAgaWYobiAhPSBzaXplb2YocHJvdGVjdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBwYW5pYygicHJvdGVjdCBmYWlsZWQsIGVyciA9ICVkIiwgLW4pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmdzW10gPSB7IGFkZHIsIGxlbiwgcHJvdCwgMCwgMCwgMCB9OworCisgICAgICAgICAgICAgICAgcmVzID0gcnVuX3N5c2NhbGxfc3R1YihtbV9pZHAsIF9fTlJfbXByb3RlY3QsIGFyZ3MpOworICAgICAgICAgICAgICAgIGlmKHJlcyA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBwYW5pYygibXByb3RlY3Qgc3R1YiBmYWlsZWQsIGVycm5vID0gJWRcbiIsIHJlcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oMCk7CiB9CiAKIHZvaWQgYmVmb3JlX21lbV9za2FzKHVuc2lnbmVkIGxvbmcgdW51c2VkKQogewogfQotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9tbXUuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvbW11LmMKaW5kZXggNmNiOWE2ZC4uZDIzMmRhYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9tbXUuYworKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL21tdS5jCkBAIC0zLDQ2ICszLDE0MyBAQAogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICovCiAKKyNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKICNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgogI2luY2x1ZGUgImxpbnV4L2xpc3QuaCIKICNpbmNsdWRlICJsaW51eC9zcGlubG9jay5oIgogI2luY2x1ZGUgImxpbnV4L3NsYWIuaCIKKyNpbmNsdWRlICJsaW51eC9lcnJuby5oIgorI2luY2x1ZGUgImxpbnV4L21tLmgiCiAjaW5jbHVkZSAiYXNtL2N1cnJlbnQuaCIKICNpbmNsdWRlICJhc20vc2VnbWVudC5oIgogI2luY2x1ZGUgImFzbS9tbXUuaCIKKyNpbmNsdWRlICJhc20vcGdhbGxvYy5oIgorI2luY2x1ZGUgImFzbS9wZ3RhYmxlLmgiCiAjaW5jbHVkZSAib3MuaCIKICNpbmNsdWRlICJza2FzLmgiCiAKK2V4dGVybiBpbnQgX19zeXNjYWxsX3N0dWJfc3RhcnQ7CisKK3N0YXRpYyBpbnQgaW5pdF9zdHViX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwcm9jLAorCQkJIHVuc2lnbmVkIGxvbmcga2VybmVsKQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7CisKKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXBnZCA9IHBnZF9vZmZzZXQobW0sIHByb2MpOworCXB1ZCA9IHB1ZF9hbGxvYyhtbSwgcGdkLCBwcm9jKTsKKwlpZiAoIXB1ZCkKKwkJZ290byBvdXQ7CisKKwlwbWQgPSBwbWRfYWxsb2MobW0sIHB1ZCwgcHJvYyk7CisJaWYgKCFwbWQpCisJCWdvdG8gb3V0X3BtZDsKKworCXB0ZSA9IHB0ZV9hbGxvY19tYXAobW0sIHBtZCwgcHJvYyk7CisJaWYgKCFwdGUpCisJCWdvdG8gb3V0X3B0ZTsKKworCS8qIFRoZXJlJ3MgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc2thczAgc3R1YiBwYWdlcywgc3RhY2sKKwkgKiByYW5kb21pemF0aW9uLCBhbmQgdGhlIEJVRyBhdCB0aGUgZW5kIG9mIGV4aXRfbW1hcC4gIGV4aXRfbW1hcAorICAgICAgICAgKiBjaGVja3MgdGhhdCB0aGUgbnVtYmVyIG9mIHBhZ2UgdGFibGVzIGZyZWVkIGlzIHRoZSBzYW1lIGFzIGhhZAorICAgICAgICAgKiBiZWVuIGFsbG9jYXRlZC4gIElmIHRoZSBzdGFjayBpcyBvbiB0aGUgbGFzdCBwYWdlIHRhYmxlIHBhZ2UsCisJICogdGhlbiB0aGUgc3RhY2sgcHRlIHBhZ2Ugd2lsbCBiZSBmcmVlZCwgYW5kIGlmIG5vdCwgaXQgd29uJ3QuICBUbworCSAqIGF2b2lkIGhhdmluZyB0byBrbm93IHdoZXJlIHRoZSBzdGFjayBpcywgb3IgaWYgdGhlIHByb2Nlc3MgbWFwcGVkCisJICogc29tZXRoaW5nIGF0IHRoZSB0b3Agb2YgaXRzIGFkZHJlc3Mgc3BhY2UgZm9yIHNvbWUgb3RoZXIgcmVhc29uLAorCSAqIHdlIHNldCBUQVNLX1NJWkUgdG8gZW5kIGF0IHRoZSBzdGFydCBvZiB0aGUgbGFzdCBwYWdlIHRhYmxlLgorCSAqIFRoaXMga2VlcHMgZXhpdF9tbWFwIG9mZiB0aGUgbGFzdCBwYWdlLCBidXQgaW50cm9kdWNlcyBhIGxlYWsKKwkgKiBvZiB0aGF0IHBhZ2UuICBTbywgd2UgaGFuZyBvbnRvIGl0IGhlcmUgYW5kIGZyZWUgaXQgaW4KKwkgKiBkZXN0cm95X2NvbnRleHRfc2thcy4KKwkgKi8KKworICAgICAgICBtbS0+Y29udGV4dC5za2FzLmxhc3RfcGFnZV90YWJsZSA9IHBtZF9wYWdlX2tlcm5lbCgqcG1kKTsKKworCSpwdGUgPSBta19wdGUodmlydF90b19wYWdlKGtlcm5lbCksIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQpKTsKKwkqcHRlID0gcHRlX21rZXhlYygqcHRlKTsKKwkqcHRlID0gcHRlX3dycHJvdGVjdCgqcHRlKTsKKwlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcmV0dXJuKDApOworCisgb3V0X3BtZDoKKwlwdWRfZnJlZShwdWQpOworIG91dF9wdGU6CisJcG1kX2ZyZWUocG1kKTsKKyBvdXQ6CisJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXJldHVybigtRU5PTUVNKTsKK30KKwogaW50IGluaXRfbmV3X2NvbnRleHRfc2thcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCWludCBmcm9tOworCXN0cnVjdCBtbV9zdHJ1Y3QgKmN1cl9tbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCBtbV9pZCAqY3VyX21tX2lkID0gJmN1cl9tbS0+Y29udGV4dC5za2FzLmlkOworCXN0cnVjdCBtbV9pZCAqbW1faWQgPSAmbW0tPmNvbnRleHQuc2thcy5pZDsKKwl1bnNpZ25lZCBsb25nIHN0YWNrOworCWludCBmcm9tLCByZXQ7CiAKLQlpZigoY3VycmVudC0+bW0gIT0gTlVMTCkgJiYgKGN1cnJlbnQtPm1tICE9ICZpbml0X21tKSkKLQkJZnJvbSA9IGN1cnJlbnQtPm1tLT5jb250ZXh0LnNrYXMubW1fZmQ7Ci0JZWxzZSBmcm9tID0gLTE7CisJaWYocHJvY19tbSl7CisJCWlmKChjdXJfbW0gIT0gTlVMTCkgJiYgKGN1cl9tbSAhPSAmaW5pdF9tbSkpCisJCQlmcm9tID0gY3VyX21tLT5jb250ZXh0LnNrYXMuaWQudS5tbV9mZDsKKwkJZWxzZSBmcm9tID0gLTE7CiAKLQltbS0+Y29udGV4dC5za2FzLm1tX2ZkID0gbmV3X21tKGZyb20pOwotCWlmKG1tLT5jb250ZXh0LnNrYXMubW1fZmQgPCAwKXsKLQkJcHJpbnRrKCJpbml0X25ld19jb250ZXh0X3NrYXMgLSBuZXdfbW0gZmFpbGVkLCBlcnJubyA9ICVkXG4iLAotCQkgICAgICAgbW0tPmNvbnRleHQuc2thcy5tbV9mZCk7Ci0JCXJldHVybihtbS0+Y29udGV4dC5za2FzLm1tX2ZkKTsKKwkJcmV0ID0gbmV3X21tKGZyb20pOworCQlpZihyZXQgPCAwKXsKKwkJCXByaW50aygiaW5pdF9uZXdfY29udGV4dF9za2FzIC0gbmV3X21tIGZhaWxlZCwgIgorCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQltbV9pZC0+dS5tbV9mZCA9IHJldDsKKwl9CisJZWxzZSB7CisJCS8qIFRoaXMgemVyb3MgdGhlIGVudHJ5IHRoYXQgcGdkX2FsbG9jIGRpZG4ndCwgbmVlZGVkIHNpbmNlCisJCSAqIHdlIGFyZSBhYm91dCB0byByZWluaXRpYWxpemUgaXQsIGFuZCB3YW50IG1tLm5yX3B0ZXMgdG8KKwkJICogYmUgYWNjdXJhdGUuCisJCSAqLworCQltbS0+cGdkW1VTRVJfUFRSU19QRVJfUEdEXSA9IF9fcGdkKDApOworCisJCXJldCA9IGluaXRfc3R1Yl9wdGUobW0sIENPTkZJR19TVFVCX0NPREUsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKSAmX19zeXNjYWxsX3N0dWJfc3RhcnQpOworCQlpZihyZXQpCisJCQlnb3RvIG91dDsKKworCQlyZXQgPSAtRU5PTUVNOworCQlzdGFjayA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYoc3RhY2sgPT0gMCkKKwkJCWdvdG8gb3V0OworCQltbV9pZC0+c3RhY2sgPSBzdGFjazsKKworCQlyZXQgPSBpbml0X3N0dWJfcHRlKG1tLCBDT05GSUdfU1RVQl9EQVRBLCBzdGFjayk7CisJCWlmKHJldCkKKwkJCWdvdG8gb3V0X2ZyZWU7CisKKwkJbW0tPm5yX3B0ZXMtLTsKKworCQlpZigoY3VyX21tICE9IE5VTEwpICYmIChjdXJfbW0gIT0gJmluaXRfbW0pKQorCQkJbW1faWQtPnUucGlkID0gY29weV9jb250ZXh0X3NrYXMwKHN0YWNrLAorCQkJCQkJCSAgY3VyX21tX2lkLT51LnBpZCk7CisJCWVsc2UgbW1faWQtPnUucGlkID0gc3RhcnRfdXNlcnNwYWNlKHN0YWNrKTsKIAl9CiAKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZToKKwlmcmVlX3BhZ2UobW1faWQtPnN0YWNrKTsKKyBvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBkZXN0cm95X2NvbnRleHRfc2thcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlvc19jbG9zZV9maWxlKG1tLT5jb250ZXh0LnNrYXMubW1fZmQpOwotfQorCXN0cnVjdCBtbXVfY29udGV4dF9za2FzICptbXUgPSAmbW0tPmNvbnRleHQuc2thczsKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KKwlpZihwcm9jX21tKQorCQlvc19jbG9zZV9maWxlKG1tdS0+aWQudS5tbV9mZCk7CisJZWxzZSB7CisJCW9zX2tpbGxfcHRyYWNlZF9wcm9jZXNzKG1tdS0+aWQudS5waWQsIDEpOworCQlmcmVlX3BhZ2UobW11LT5pZC5zdGFjayk7CisJCWZyZWVfcGFnZShtbXUtPmxhc3RfcGFnZV90YWJsZSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9wcm9jZXNzLmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3MuYwppbmRleCA3NzNjZDJiLi5iYTY3MWRhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3MuYworKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3MuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIAotICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0gMjAwNCBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICovCiAKQEAgLTEzLDcgKzEzLDkgQEAKICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3lzL3VzZXIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAicHRyYWNlX3VzZXIuaCIKICNpbmNsdWRlICJ0aW1lX3VzZXIuaCIKQEAgLTIxLDEzICsyMywxOCBAQAogI2luY2x1ZGUgInVzZXJfdXRpbC5oIgogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgogI2luY2x1ZGUgInNrYXMuaCIKKyNpbmNsdWRlICJzdHViLWRhdGEuaCIKKyNpbmNsdWRlICJtbV9pZC5oIgogI2luY2x1ZGUgInN5c2RlcC9zaWdjb250ZXh0LmgiCisjaW5jbHVkZSAic3lzZGVwL3N0dWIuaCIKICNpbmNsdWRlICJvcy5oIgogI2luY2x1ZGUgInByb2NfbW0uaCIKICNpbmNsdWRlICJza2FzX3B0cmFjZS5oIgogI2luY2x1ZGUgImNoYW5fdXNlci5oIgogI2luY2x1ZGUgInNpZ25hbF91c2VyLmgiCiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAibWVtLmgiCisjaW5jbHVkZSAidW1sLWNvbmZpZy5oIgogI2luY2x1ZGUgInByb2Nlc3MuaCIKIAogaW50IGlzX3NrYXNfd2luY2goaW50IHBpZCwgaW50IGZkLCB2b2lkICpkYXRhKQpAQCAtMzksMjAgKzQ2LDU1IEBACiAJcmV0dXJuKDEpOwogfQogCit2b2lkIHdhaXRfc3R1Yl9kb25lKGludCBwaWQsIGludCBzaWcsIGNoYXIgKiBmbmFtZSkKK3sKKyAgICAgICAgaW50IG4sIHN0YXR1cywgZXJyOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoIHNpZyAhPSAtMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHB0cmFjZShQVFJBQ0VfQ09OVCwgcGlkLCAwLCBzaWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pYygiJXMgOiBjb250aW51ZSBmYWlsZWQsIGVycm5vID0gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBlcnJubyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNpZyA9IDA7CisKKyAgICAgICAgICAgICAgICBDQVRDSF9FSU5UUihuID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIFdVTlRSQUNFRCkpOworICAgICAgICB9IHdoaWxlKChuID49IDApICYmIFdJRlNUT1BQRUQoc3RhdHVzKSAmJgorICAgICAgICAgICAgICAgIChXU1RPUFNJRyhzdGF0dXMpID09IFNJR1ZUQUxSTSkpOworCisgICAgICAgIGlmKChuIDwgMCkgfHwgIVdJRlNUT1BQRUQoc3RhdHVzKSB8fAorICAgICAgICAgICAoV1NUT1BTSUcoc3RhdHVzKSAhPSBTSUdVU1IxICYmIFdTVE9QU0lHKHN0YXR1cyAhPSBTSUdUUkFQKSkpeworICAgICAgICAgICAgICAgIHBhbmljKCIlcyA6IGZhaWxlZCB0byB3YWl0IGZvciBTSUdVU1IxL1NJR1RSQVAsICIKKyAgICAgICAgICAgICAgICAgICAgICAicGlkID0gJWQsIG4gPSAlZCwgZXJybm8gPSAlZCwgc3RhdHVzID0gMHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgcGlkLCBuLCBlcnJubywgc3RhdHVzKTsKKyAgICAgICAgfQorfQorCiB2b2lkIGdldF9za2FzX2ZhdWx0aW5mbyhpbnQgcGlkLCBzdHJ1Y3QgZmF1bHRpbmZvICogZmkpCiB7Ci0JaW50IGVycjsKKyAgICAgICAgaW50IGVycjsKIAotICAgICAgICBlcnIgPSBwdHJhY2UoUFRSQUNFX0ZBVUxUSU5GTywgcGlkLCAwLCBmaSk7Ci0JaWYoZXJyKQotICAgICAgICAgICAgICAgIHBhbmljKCJnZXRfc2thc19mYXVsdGluZm8gLSBQVFJBQ0VfRkFVTFRJTkZPIGZhaWxlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICJlcnJubyA9ICVkXG4iLCBlcnJubyk7CisgICAgICAgIGlmKHB0cmFjZV9mYXVsdGluZm8peworICAgICAgICAgICAgICAgIGVyciA9IHB0cmFjZShQVFJBQ0VfRkFVTFRJTkZPLCBwaWQsIDAsIGZpKTsKKyAgICAgICAgICAgICAgICBpZihlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICBwYW5pYygiZ2V0X3NrYXNfZmF1bHRpbmZvIC0gUFRSQUNFX0ZBVUxUSU5GTyBmYWlsZWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAKLSAgICAgICAgLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgaTM4Niwgd2hpY2ggaGFzIGRpZmZlcmVudCBzdHJ1Y3RzICovCi0gICAgICAgIGlmIChzaXplb2Yoc3RydWN0IHB0cmFjZV9mYXVsdGluZm8pIDwgc2l6ZW9mKHN0cnVjdCBmYXVsdGluZm8pKQotICAgICAgICAgICAgICAgIG1lbXNldCgoY2hhciAqKWZpICsgc2l6ZW9mKHN0cnVjdCBwdHJhY2VfZmF1bHRpbmZvKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBmYXVsdGluZm8pIC0KLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBwdHJhY2VfZmF1bHRpbmZvKSk7CisgICAgICAgICAgICAgICAgLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgaTM4Niwgd2hpY2ggaGFzIGRpZmZlcmVudCBzdHJ1Y3RzICovCisgICAgICAgICAgICAgICAgaWYgKHNpemVvZihzdHJ1Y3QgcHRyYWNlX2ZhdWx0aW5mbykgPCBzaXplb2Yoc3RydWN0IGZhdWx0aW5mbykpCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKGNoYXIgKilmaSArIHNpemVvZihzdHJ1Y3QgcHRyYWNlX2ZhdWx0aW5mbyksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBmYXVsdGluZm8pIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHB0cmFjZV9mYXVsdGluZm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB3YWl0X3N0dWJfZG9uZShwaWQsIFNJR1NFR1YsICJnZXRfc2thc19mYXVsdGluZm8iKTsKKworICAgICAgICAgICAgICAgIC8qIGZhdWx0aW5mbyBpcyBwcmVwYXJlZCBieSB0aGUgc3R1Yi1zZWd2LWhhbmRsZXIgYXQgc3RhcnQgb2YKKyAgICAgICAgICAgICAgICAgKiB0aGUgc3R1YiBzdGFjayBwYWdlLiBXZSBqdXN0IGhhdmUgdG8gY29weSBpdC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBtZW1jcHkoZmksICh2b2lkICopY3VycmVudF9zdHViX3N0YWNrKCksIHNpemVvZigqZmkpKTsKKyAgICAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfc2VndihpbnQgcGlkLCB1bmlvbiB1bWxfcHRfcmVncyAqIHJlZ3MpCkBAIC05MSwxMSArMTMzLDU2IEBACiAJaGFuZGxlX3N5c2NhbGwocmVncyk7CiB9CiAKLXN0YXRpYyBpbnQgdXNlcnNwYWNlX3RyYW1wKHZvaWQgKmFyZykKK2V4dGVybiBpbnQgX19zeXNjYWxsX3N0dWJfc3RhcnQ7CisKK3N0YXRpYyBpbnQgdXNlcnNwYWNlX3RyYW1wKHZvaWQgKnN0YWNrKQogewotCWluaXRfbmV3X3RocmVhZF9zaWduYWxzKDApOwotCWVuYWJsZV90aW1lcigpOworCXZvaWQgKmFkZHI7CisKIAlwdHJhY2UoUFRSQUNFX1RSQUNFTUUsIDAsIDAsIDApOworCisJaW5pdF9uZXdfdGhyZWFkX3NpZ25hbHMoMSk7CisJZW5hYmxlX3RpbWVyKCk7CisKKwlpZighcHJvY19tbSl7CisJCS8qIFRoaXMgaGFzIGEgcHRlLCBidXQgaXQgY2FuJ3QgYmUgbWFwcGVkIGluIHdpdGggdGhlIHVzdWFsCisJCSAqIHRsYl9mbHVzaCBtZWNoYW5pc20gYmVjYXVzZSB0aGlzIGlzIHBhcnQgb2YgdGhhdCBtZWNoYW5pc20KKwkJICovCisJCWludCBmZDsKKwkJX191NjQgb2Zmc2V0OworCisJCWZkID0gcGh5c19tYXBwaW5nKHRvX3BoeXMoJl9fc3lzY2FsbF9zdHViX3N0YXJ0KSwgJm9mZnNldCk7CisJCWFkZHIgPSBtbWFwNjQoKHZvaWQgKikgVU1MX0NPTkZJR19TVFVCX0NPREUsIHBhZ2Vfc2l6ZSgpLAorCQkJICAgICAgUFJPVF9FWEVDLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmQsIG9mZnNldCk7CisJCWlmKGFkZHIgPT0gTUFQX0ZBSUxFRCl7CisJCQlwcmludGsoIm1hcHBpbmcgbW1hcCBzdHViIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwKKwkJCSAgICAgICBlcnJubyk7CisJCQlleGl0KDEpOworCQl9CisKKwkJaWYoc3RhY2sgIT0gTlVMTCl7CisJCQlmZCA9IHBoeXNfbWFwcGluZyh0b19waHlzKHN0YWNrKSwgJm9mZnNldCk7CisJCQlhZGRyID0gbW1hcCgodm9pZCAqKSBVTUxfQ09ORklHX1NUVUJfREFUQSwgcGFnZV9zaXplKCksCisJCQkJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCQkJICAgIE1BUF9GSVhFRCB8IE1BUF9TSEFSRUQsIGZkLCBvZmZzZXQpOworCQkJaWYoYWRkciA9PSBNQVBfRkFJTEVEKXsKKwkJCQlwcmludGsoIm1hcHBpbmcgc2VnZmF1bHQgc3RhY2sgZmFpbGVkLCAiCisJCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCBlcnJubyk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJfQorCX0KKwlpZighcHRyYWNlX2ZhdWx0aW5mbyAmJiAoc3RhY2sgIT0gTlVMTCkpeworCQl1bnNpZ25lZCBsb25nIHYgPSBVTUxfQ09ORklHX1NUVUJfQ09ERSArCisJCQkJICAodW5zaWduZWQgbG9uZykgc3R1Yl9zZWd2X2hhbmRsZXIgLQorCQkJCSAgKHVuc2lnbmVkIGxvbmcpICZfX3N5c2NhbGxfc3R1Yl9zdGFydDsKKworCQlzZXRfc2lnc3RhY2soKHZvaWQgKikgVU1MX0NPTkZJR19TVFVCX0RBVEEsIHBhZ2Vfc2l6ZSgpKTsKKwkJc2V0X2hhbmRsZXIoU0lHU0VHViwgKHZvaWQgKikgdiwgU0FfT05TVEFDSywKKwkJCSAgICBTSUdJTywgU0lHV0lOQ0gsIFNJR0FMUk0sIFNJR1ZUQUxSTSwKKwkJCSAgICBTSUdVU1IxLCAtMSk7CisJfQorCiAJb3Nfc3RvcF9wcm9jZXNzKG9zX2dldHBpZCgpKTsKIAlyZXR1cm4oMCk7CiB9CkBAIC0xMDUsMTEgKzE5MiwxMSBAQAogI2RlZmluZSBOUl9DUFVTIDEKIGludCB1c2Vyc3BhY2VfcGlkW05SX0NQVVNdOwogCi12b2lkIHN0YXJ0X3VzZXJzcGFjZShpbnQgY3B1KQoraW50IHN0YXJ0X3VzZXJzcGFjZSh1bnNpZ25lZCBsb25nIHN0dWJfc3RhY2spCiB7CiAJdm9pZCAqc3RhY2s7CiAJdW5zaWduZWQgbG9uZyBzcDsKLQlpbnQgcGlkLCBzdGF0dXMsIG47CisJaW50IHBpZCwgc3RhdHVzLCBuLCBmbGFnczsKIAogCXN0YWNrID0gbW1hcChOVUxMLCBQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsCiAJCSAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CkBAIC0xMTcsOCArMjA0LDkgQEAKIAkJcGFuaWMoInN0YXJ0X3VzZXJzcGFjZSA6IG1tYXAgZmFpbGVkLCBlcnJubyA9ICVkIiwgZXJybm8pOwogCXNwID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrICsgUEFHRV9TSVpFIC0gc2l6ZW9mKHZvaWQgKik7CiAKLQlwaWQgPSBjbG9uZSh1c2Vyc3BhY2VfdHJhbXAsICh2b2lkICopIHNwLCAKLQkJICAgIENMT05FX0ZJTEVTIHwgQ0xPTkVfVk0gfCBTSUdDSExELCBOVUxMKTsKKwlmbGFncyA9IENMT05FX0ZJTEVTIHwgU0lHQ0hMRDsKKwlpZihwcm9jX21tKSBmbGFncyB8PSBDTE9ORV9WTTsKKwlwaWQgPSBjbG9uZSh1c2Vyc3BhY2VfdHJhbXAsICh2b2lkICopIHNwLCBmbGFncywgKHZvaWQgKikgc3R1Yl9zdGFjayk7CiAJaWYocGlkIDwgMCkKIAkJcGFuaWMoInN0YXJ0X3VzZXJzcGFjZSA6IGNsb25lIGZhaWxlZCwgZXJybm8gPSAlZCIsIGVycm5vKTsKIApAQCAtMTQwLDcgKzIyOCw3IEBACiAJaWYobXVubWFwKHN0YWNrLCBQQUdFX1NJWkUpIDwgMCkKIAkJcGFuaWMoInN0YXJ0X3VzZXJzcGFjZSA6IG11bm1hcCBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAotCXVzZXJzcGFjZV9waWRbY3B1XSA9IHBpZDsKKwlyZXR1cm4ocGlkKTsKIH0KIAogdm9pZCB1c2Vyc3BhY2UodW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpCkBAIC0xNzQsNyArMjYyLDkgQEAKIAkJaWYoV0lGU1RPUFBFRChzdGF0dXMpKXsKIAkJICAJc3dpdGNoKFdTVE9QU0lHKHN0YXR1cykpewogCQkJY2FzZSBTSUdTRUdWOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfc2VndihwaWQsIHJlZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihQVFJBQ0VfRlVMTF9GQVVMVElORk8gfHwgIXB0cmFjZV9mYXVsdGluZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9zaWduYWwoU0lHU0VHViwgcmVncywgcGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBoYW5kbGVfc2VndihwaWQsIHJlZ3MpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBTSUdUUkFQICsgMHg4MDoKIAkJCSAgICAgICAgaGFuZGxlX3RyYXAocGlkLCByZWdzLCBsb2NhbF91c2luZ19zeXNlbXUpOwpAQCAtMTk0LDYgKzI4NCw3IEBACiAJCQkgICAgICAgIHByaW50aygidXNlcnNwYWNlIC0gY2hpbGQgc3RvcHBlZCB3aXRoIHNpZ25hbCAiCiAJCQkJICAgICAgICIlZFxuIiwgV1NUT1BTSUcoc3RhdHVzKSk7CiAJCQl9CisJCQlwaWQgPSB1c2Vyc3BhY2VfcGlkWzBdOwogCQkJaW50ZXJydXB0X2VuZCgpOwogCiAJCQkvKiBBdm9pZCAtRVJFU1RBUlRTWVMgaGFuZGxpbmcgaW4gaG9zdCAqLwpAQCAtMjA3LDYgKzI5OCw2NyBAQAogI2RlZmluZSBJTklUX0pNUF9IQUxUIDMKICNkZWZpbmUgSU5JVF9KTVBfUkVCT09UIDQKIAorCitpbnQgY29weV9jb250ZXh0X3NrYXMwKHVuc2lnbmVkIGxvbmcgbmV3X3N0YWNrLCBpbnQgcGlkKQoreworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyByZWdzW01BWF9SRUdfTlJdOworCXVuc2lnbmVkIGxvbmcgY3VycmVudF9zdGFjayA9IGN1cnJlbnRfc3R1Yl9zdGFjaygpOworCXN0cnVjdCBzdHViX2RhdGEgKmRhdGEgPSAoc3RydWN0IHN0dWJfZGF0YSAqKSBjdXJyZW50X3N0YWNrOworCXN0cnVjdCBzdHViX2RhdGEgKmNoaWxkX2RhdGEgPSAoc3RydWN0IHN0dWJfZGF0YSAqKSBuZXdfc3RhY2s7CisJX191NjQgbmV3X29mZnNldDsKKwlpbnQgbmV3X2ZkID0gcGh5c19tYXBwaW5nKHRvX3BoeXMoKHZvaWQgKiluZXdfc3RhY2spLCAmbmV3X29mZnNldCk7CisKKwkvKiBwcmVwYXJlIG9mZnNldCBhbmQgZmQgb2YgY2hpbGQncyBzdGFjayBhcyBhcmd1bWVudCBmb3IgcGFyZW50J3MKKwkgKiBhbmQgY2hpbGQncyBtbWFwMiBjYWxscworCSAqLworCSpkYXRhID0gKChzdHJ1Y3Qgc3R1Yl9kYXRhKSB7IC5vZmZzZXQJPSBNTUFQX09GRlNFVChuZXdfb2Zmc2V0KSwKKwkJCQkgICAgICAuZmQJPSBuZXdfZmQsCisJCQkJICAgICAgLnRpbWVyCT0gKChzdHJ1Y3QgaXRpbWVydmFsKQorCQkJCQkgICAgICAgICAgIHsgeyAwLCAxMDAwMDAwIC8gaHooKSB9LAorCQkJCQkJICAgICB7IDAsIDEwMDAwMDAgLyBoeigpIH19KX0pOworCWdldF9zYWZlX3JlZ2lzdGVycyhyZWdzKTsKKworCS8qIFNldCBwYXJlbnQncyBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHN0YXJ0IG9mIGNsb25lLXN0dWIgKi8KKwlyZWdzW1JFR1NfSVBfSU5ERVhdID0gVU1MX0NPTkZJR19TVFVCX0NPREUgKworCQkJCSh1bnNpZ25lZCBsb25nKSBzdHViX2Nsb25lX2hhbmRsZXIgLQorCQkJCSh1bnNpZ25lZCBsb25nKSAmX19zeXNjYWxsX3N0dWJfc3RhcnQ7CisJcmVnc1tSRUdTX1NQX0lOREVYXSA9IFVNTF9DT05GSUdfU1RVQl9EQVRBICsgUEFHRV9TSVpFIC0KKwkJc2l6ZW9mKHZvaWQgKik7CisJZXJyID0gcHRyYWNlX3NldHJlZ3MocGlkLCByZWdzKTsKKwlpZihlcnIgPCAwKQorCQlwYW5pYygiY29weV9jb250ZXh0X3NrYXMwIDogUFRSQUNFX1NFVFJFR1MgZmFpbGVkLCAiCisJCSAgICAgICJwaWQgPSAlZCwgZXJybm8gPSAlZFxuIiwgcGlkLCBlcnJubyk7CisKKwkvKiBzZXQgYSB3ZWxsIGtub3duIHJldHVybiBjb2RlIGZvciBkZXRlY3Rpb24gb2YgY2hpbGQgd3JpdGUgZmFpbHVyZSAqLworCWNoaWxkX2RhdGEtPmVyciA9IDEyMzQ1Njc4OworCisJLyogV2FpdCwgdW50aWwgcGFyZW50IGhhcyBmaW5pc2hlZCBpdHMgd29yazogcmVhZCBjaGlsZCdzIHBpZCBmcm9tCisJICogcGFyZW50J3Mgc3RhY2ssIGFuZCBjaGVjaywgaWYgYmFkIHJlc3VsdC4KKwkgKi8KKwl3YWl0X3N0dWJfZG9uZShwaWQsIDAsICJjb3B5X2NvbnRleHRfc2thczAiKTsKKworCXBpZCA9IGRhdGEtPmVycjsKKwlpZihwaWQgPCAwKQorCQlwYW5pYygiY29weV9jb250ZXh0X3NrYXMwIC0gc3R1Yi1wYXJlbnQgcmVwb3J0cyBlcnJvciAlZFxuIiwKKwkJICAgICAgcGlkKTsKKworCS8qIFdhaXQsIHVudGlsIGNoaWxkIGhhcyBmaW5pc2hlZCB0b286IHJlYWQgY2hpbGQncyByZXN1bHQgZnJvbQorCSAqIGNoaWxkJ3Mgc3RhY2sgYW5kIGNoZWNrIGl0LgorCSAqLworCXdhaXRfc3R1Yl9kb25lKHBpZCwgLTEsICJjb3B5X2NvbnRleHRfc2thczAiKTsKKwlpZiAoY2hpbGRfZGF0YS0+ZXJyICE9IFVNTF9DT05GSUdfU1RVQl9EQVRBKQorCQlwYW5pYygiY29weV9jb250ZXh0X3NrYXMwIC0gc3R1Yi1jaGlsZCByZXBvcnRzIGVycm9yICVkXG4iLAorCQkgICAgICBjaGlsZF9kYXRhLT5lcnIpOworCisJaWYgKHB0cmFjZShQVFJBQ0VfT0xEU0VUT1BUSU9OUywgcGlkLCBOVUxMLAorCQkgICAodm9pZCAqKVBUUkFDRV9PX1RSQUNFU1lTR09PRCkgPCAwKQorCQlwYW5pYygiY29weV9jb250ZXh0X3NrYXMwIDogUFRSQUNFX1NFVE9QVElPTlMgZmFpbGVkLCAiCisJCSAgICAgICJlcnJubyA9ICVkXG4iLCBlcnJubyk7CisKKwlyZXR1cm4gcGlkOworfQorCiB2b2lkIG5ld190aHJlYWQodm9pZCAqc3RhY2ssIHZvaWQgKipzd2l0Y2hfYnVmX3B0ciwgdm9pZCAqKmZvcmtfYnVmX3B0ciwKIAkJdm9pZCAoKmhhbmRsZXIpKGludCkpCiB7CkBAIC0zMzQsMjEgKzQ4NiwxOSBAQAogCXNpZ2xvbmdqbXAoaW5pdGlhbF9qbXBidWYsIElOSVRfSk1QX1JFQk9PVCk7CiB9CiAKLXZvaWQgc3dpdGNoX21tX3NrYXMoaW50IG1tX2ZkKQordm9pZCBzd2l0Y2hfbW1fc2thcyhzdHJ1Y3QgbW1faWQgKm1tX2lkcCkKIHsKIAlpbnQgZXJyOwogCiAjd2FybmluZyBuZWVkIGNwdSBwaWQgaW4gc3dpdGNoX21tX3NrYXMKLQllcnIgPSBwdHJhY2UoUFRSQUNFX1NXSVRDSF9NTSwgdXNlcnNwYWNlX3BpZFswXSwgMCwgbW1fZmQpOwotCWlmKGVycikKLQkJcGFuaWMoInN3aXRjaF9tbV9za2FzIC0gUFRSQUNFX1NXSVRDSF9NTSBmYWlsZWQsIGVycm5vID0gJWRcbiIsCi0JCSAgICAgIGVycm5vKTsKLX0KLQotdm9pZCBraWxsX29mZl9wcm9jZXNzZXNfc2thcyh2b2lkKQotewotI3dhcm5pbmcgbmVlZCB0byBsb29wIG92ZXIgdXNlcnNwYWNlX3BpZHMgaW4ga2lsbF9vZmZfcHJvY2Vzc2VzX3NrYXMKLQlvc19raWxsX3B0cmFjZWRfcHJvY2Vzcyh1c2Vyc3BhY2VfcGlkWzBdLCAxKTsKKwlpZihwcm9jX21tKXsKKwkJZXJyID0gcHRyYWNlKFBUUkFDRV9TV0lUQ0hfTU0sIHVzZXJzcGFjZV9waWRbMF0sIDAsCisJCQkgICAgIG1tX2lkcC0+dS5tbV9mZCk7CisJCWlmKGVycikKKwkJCXBhbmljKCJzd2l0Y2hfbW1fc2thcyAtIFBUUkFDRV9TV0lUQ0hfTU0gZmFpbGVkLCAiCisJCQkgICAgICAiZXJybm8gPSAlZFxuIiwgZXJybm8pOworCX0KKwllbHNlIHVzZXJzcGFjZV9waWRbMF0gPSBtbV9pZHAtPnUucGlkOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9wcm9jZXNzX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvcHJvY2Vzc19rZXJuLmMKaW5kZXggMGE3YjhhYS4uY2JhYmFiMSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9wcm9jZXNzX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3Nfa2Vybi5jCkBAIC0xNzUsOSArMTc1LDEyIEBACiAJcmV0dXJuKDApOwogfQogCitleHRlcm4gaW50IHVzZXJzcGFjZV9waWRbXTsKKwogaW50IHN0YXJ0X3VtbF9za2FzKHZvaWQpCiB7Ci0Jc3RhcnRfdXNlcnNwYWNlKDApOworCWlmKHByb2NfbW0pCisJCXVzZXJzcGFjZV9waWRbMF0gPSBzdGFydF91c2Vyc3BhY2UoMCk7CiAKIAlpbml0X25ld190aHJlYWRfc2lnbmFscygxKTsKIApAQCAtMTk5LDMgKzIwMiwzMSBAQAogI3dhcm5pbmcgTmVlZCB0byBsb29rIHVwIHVzZXJzcGFjZV9waWQgYnkgY3B1CiAJcmV0dXJuKHVzZXJzcGFjZV9waWRbMF0pOwogfQorCit2b2lkIGtpbGxfb2ZmX3Byb2Nlc3Nlc19za2FzKHZvaWQpCit7CisJaWYocHJvY19tbSkKKyN3YXJuaW5nIG5lZWQgdG8gbG9vcCBvdmVyIHVzZXJzcGFjZV9waWRzIGluIGtpbGxfb2ZmX3Byb2Nlc3Nlc19za2FzCisJCW9zX2tpbGxfcHRyYWNlZF9wcm9jZXNzKHVzZXJzcGFjZV9waWRbMF0sIDEpOworCWVsc2UgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCWludCBwaWQsIG1lOworCisJCW1lID0gb3NfZ2V0cGlkKCk7CisJCWZvcl9lYWNoX3Byb2Nlc3MocCl7CisJCQlpZihwLT5tbSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlwaWQgPSBwLT5tbS0+Y29udGV4dC5za2FzLmlkLnUucGlkOworCQkJb3Nfa2lsbF9wdHJhY2VkX3Byb2Nlc3MocGlkLCAxKTsKKwkJfQorCX0KK30KKwordW5zaWduZWQgbG9uZyBjdXJyZW50X3N0dWJfc3RhY2sodm9pZCkKK3sKKwlpZihjdXJyZW50LT5tbSA9PSBOVUxMKQorCQlyZXR1cm4oMCk7CisKKwlyZXR1cm4oY3VycmVudC0+bW0tPmNvbnRleHQuc2thcy5pZC5zdGFjayk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3RsYi5jIGIvYXJjaC91bS9rZXJuZWwvc2thcy90bGIuYwppbmRleCBiOGM1ZTcxNy4uNjIzMDk5OSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy90bGIuYworKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3RsYi5jCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSAibGludXgvc3RkZGVmLmgiCiAjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKKyNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKICNpbmNsdWRlICJsaW51eC9tbS5oIgogI2luY2x1ZGUgImFzbS9wYWdlLmgiCiAjaW5jbHVkZSAiYXNtL3BndGFibGUuaCIKQEAgLTE3LDcgKzE4LDcgQEAKICNpbmNsdWRlICJvcy5oIgogI2luY2x1ZGUgInRsYi5oIgogCi1zdGF0aWMgdm9pZCBkb19vcHMoaW50IGZkLCBzdHJ1Y3QgaG9zdF92bV9vcCAqb3BzLCBpbnQgbGFzdCkKK3N0YXRpYyB2b2lkIGRvX29wcyh1bmlvbiBtbV9jb250ZXh0ICptbXUsIHN0cnVjdCBob3N0X3ZtX29wICpvcHMsIGludCBsYXN0KQogewogCXN0cnVjdCBob3N0X3ZtX29wICpvcDsKIAlpbnQgaTsKQEAgLTI2LDE4ICsyNywxOCBAQAogCQlvcCA9ICZvcHNbaV07CiAJCXN3aXRjaChvcC0+dHlwZSl7CiAJCWNhc2UgTU1BUDoKLQkJCW1hcChmZCwgb3AtPnUubW1hcC5hZGRyLCBvcC0+dS5tbWFwLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgmbW11LT5za2FzLmlkLCBvcC0+dS5tbWFwLmFkZHIsIG9wLT51Lm1tYXAubGVuLAogCQkJICAgIG9wLT51Lm1tYXAuciwgb3AtPnUubW1hcC53LCBvcC0+dS5tbWFwLngsCiAJCQkgICAgb3AtPnUubW1hcC5mZCwgb3AtPnUubW1hcC5vZmZzZXQpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVVOTUFQOgotCQkJdW5tYXAoZmQsICh2b2lkICopIG9wLT51Lm11bm1hcC5hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXAoJm1tdS0+c2thcy5pZCwgKHZvaWQgKikgb3AtPnUubXVubWFwLmFkZHIsCiAJCQkgICAgICBvcC0+dS5tdW5tYXAubGVuKTsKIAkJCWJyZWFrOwogCQljYXNlIE1QUk9URUNUOgotCQkJcHJvdGVjdChmZCwgb3AtPnUubXByb3RlY3QuYWRkciwgb3AtPnUubXByb3RlY3QubGVuLAotCQkJCW9wLT51Lm1wcm90ZWN0LnIsIG9wLT51Lm1wcm90ZWN0LncsCi0JCQkJb3AtPnUubXByb3RlY3QueCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0KCZtbXUtPnNrYXMuaWQsIG9wLT51Lm1wcm90ZWN0LmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLT51Lm1wcm90ZWN0Lmxlbiwgb3AtPnUubXByb3RlY3QuciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AtPnUubXByb3RlY3Qudywgb3AtPnUubXByb3RlY3QueCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50aygiVW5rbm93biBvcCB0eXBlICVkIGluIGRvX29wc1xuIiwgb3AtPnR5cGUpOwpAQCAtNDYsMTIgKzQ3LDE1IEBACiAJfQogfQogCitleHRlcm4gaW50IHByb2NfbW07CisKIHN0YXRpYyB2b2lkIGZpeF9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZF9hZGRyLCBpbnQgZm9yY2UpCiB7Ci0gICAgICAgIGludCBmZCA9IG1tLT5jb250ZXh0LnNrYXMubW1fZmQ7CisgICAgICAgIGlmKCFwcm9jX21tICYmIChlbmRfYWRkciA+IENPTkZJR19TVFVCX1NUQVJUKSkKKyAgICAgICAgICAgICAgICBlbmRfYWRkciA9IENPTkZJR19TVFVCX1NUQVJUOwogCi0gICAgICAgIGZpeF9yYW5nZV9jb21tb24obW0sIHN0YXJ0X2FkZHIsIGVuZF9hZGRyLCBmb3JjZSwgZmQsIGRvX29wcyk7CisgICAgICAgIGZpeF9yYW5nZV9jb21tb24obW0sIHN0YXJ0X2FkZHIsIGVuZF9hZGRyLCBmb3JjZSwgZG9fb3BzKTsKIH0KIAogdm9pZCBfX2ZsdXNoX3RsYl9vbmVfc2thcyh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC02OSwxNyArNzMsMjAgQEAKIAogdm9pZCBmbHVzaF90bGJfbW1fc2thcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwogCS8qIERvbid0IGJvdGhlciBmbHVzaGluZyBpZiB0aGlzIGFkZHJlc3Mgc3BhY2UgaXMgYWJvdXQgdG8gYmUKICAgICAgICAgICogZGVzdHJveWVkLgogICAgICAgICAgKi8KICAgICAgICAgaWYoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPT0gMCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZml4X3JhbmdlKG1tLCAwLCBob3N0X3Rhc2tfc2l6ZSwgMCk7Ci0gICAgICAgIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2VfY29tbW9uKHN0YXJ0X3ZtLCBlbmRfdm0pOworCWVuZCA9IHByb2NfbW0gPyB0YXNrX3NpemUgOiBDT05GSUdfU1RVQl9TVEFSVDsKKyAgICAgICAgZml4X3JhbmdlKG1tLCAwLCBlbmQsIDApOwogfQogCiB2b2lkIGZvcmNlX2ZsdXNoX2FsbF9za2FzKHZvaWQpCiB7Ci0gICAgICAgIGZpeF9yYW5nZShjdXJyZW50LT5tbSwgMCwgaG9zdF90YXNrX3NpemUsIDEpOworCXVuc2lnbmVkIGxvbmcgZW5kID0gcHJvY19tbSA/IHRhc2tfc2l6ZSA6IENPTkZJR19TVFVCX1NUQVJUOworICAgICAgICBmaXhfcmFuZ2UoY3VycmVudC0+bW0sIDAsIGVuZCwgMSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90aW1lLmMgYi9hcmNoL3VtL2tlcm5lbC90aW1lLmMKaW5kZXggZjgyOWIzMC4uYzQwYjYxMSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvdW0va2VybmVsL3RpbWUuYwpAQCAtNDgsNiArNDgsMTMgQEAKIAlzZXRfaW50ZXJ2YWwoSVRJTUVSX1ZJUlRVQUwpOwogfQogCit2b2lkIHByZXBhcmVfdGltZXIodm9pZCAqIHB0cikKK3sKKwlpbnQgdXNlYyA9IDEwMDAwMDAvaHooKTsKKwkqKHN0cnVjdCBpdGltZXJ2YWwgKilwdHIgPSAoKHN0cnVjdCBpdGltZXJ2YWwpIHsgeyAwLCB1c2VjIH0sCisJCQkJCQkJIHsgMCwgdXNlYyB9fSk7Cit9CisKIHZvaWQgZGlzYWJsZV90aW1lcih2b2lkKQogewogCXN0cnVjdCBpdGltZXJ2YWwgZGlzYWJsZSA9ICgoc3RydWN0IGl0aW1lcnZhbCkgeyB7IDAsIDAgfSwgeyAwLCAwIH19KTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RsYi5jIGIvYXJjaC91bS9rZXJuZWwvdGxiLmMKaW5kZXggZWRhNDc3ZS4uODNlYzhkNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3RsYi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3RsYi5jCkBAIC0xOCwxMyArMTgsMTUgQEAKICNkZWZpbmUgQUREX1JPVU5EKG4sIGluYykgKCgobikgKyAoaW5jKSkgJiB+KChpbmMpIC0gMSkpCiAKIHZvaWQgZml4X3JhbmdlX2NvbW1vbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHIsIGludCBmb3JjZSwgaW50IGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmRvX29wcykoaW50LCBzdHJ1Y3QgaG9zdF92bV9vcCAqLCBpbnQpKQorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHIsIGludCBmb3JjZSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZG9fb3BzKSh1bmlvbiBtbV9jb250ZXh0ICosIHN0cnVjdCBob3N0X3ZtX29wICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSkKIHsKICAgICAgICAgcGdkX3QgKm5wZ2Q7CiAgICAgICAgIHB1ZF90ICpucHVkOwogICAgICAgICBwbWRfdCAqbnBtZDsKICAgICAgICAgcHRlX3QgKm5wdGU7CisgICAgICAgIHVuaW9uIG1tX2NvbnRleHQgKm1tdSA9ICZtbS0+Y29udGV4dDsKICAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7CiAgICAgICAgIGludCByLCB3LCB4OwogICAgICAgICBzdHJ1Y3QgaG9zdF92bV9vcCBvcHNbMTZdOwpAQCAtNDAsNyArNDIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBlbmRfYWRkcjsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcmNlIHx8IHBnZF9uZXdwYWdlKCpucGdkKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX2luZGV4ID0gYWRkX211bm1hcChhZGRyLCBlbmQgLSBhZGRyLCBvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9pbmRleCwgbGFzdF9vcCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX2luZGV4LCBsYXN0X29wLCBtbXUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19vcHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ2RfbWt1cHRvZGF0ZSgqbnBnZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC01NSw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IGVuZF9hZGRyOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9yY2UgfHwgcHVkX25ld3BhZ2UoKm5wdWQpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BfaW5kZXggPSBhZGRfbXVubWFwKGFkZHIsIGVuZCAtIGFkZHIsIG9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX2luZGV4LCBsYXN0X29wLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BfaW5kZXgsIGxhc3Rfb3AsIG1tdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX29wcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1ZF9ta3VwdG9kYXRlKCpucHVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTcwLDcgKzcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gZW5kX2FkZHI7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZihmb3JjZSB8fCBwbWRfbmV3cGFnZSgqbnBtZCkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9pbmRleCA9IGFkZF9tdW5tYXAoYWRkciwgZW5kIC0gYWRkciwgb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BfaW5kZXgsIGxhc3Rfb3AsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9pbmRleCwgbGFzdF9vcCwgbW11LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fb3BzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1kX21rdXB0b2RhdGUoKm5wbWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtOTMsMjEgKzk1LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX2luZGV4ID0gYWRkX21tYXAoYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGVfdmFsKCpucHRlKSAmIFBBR0VfTUFTSywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUsIHIsIHcsIHgsIG9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9pbmRleCwgbGFzdF9vcCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9pbmRleCwgbGFzdF9vcCwgbW11LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX29wcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIG9wX2luZGV4ID0gYWRkX211bm1hcChhZGRyLCBQQUdFX1NJWkUsIG9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX2luZGV4LCBsYXN0X29wLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BfaW5kZXgsIGxhc3Rfb3AsIG1tdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX29wcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYocHRlX25ld3Byb3QoKm5wdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgb3BfaW5kZXggPSBhZGRfbXByb3RlY3QoYWRkciwgUEFHRV9TSVpFLCByLCB3LCB4LCBvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9pbmRleCwgbGFzdF9vcCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX2luZGV4LCBsYXN0X29wLCBtbXUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19vcHMpOwogCiAgICAgICAgICAgICAgICAgKm5wdGUgPSBwdGVfbWt1cHRvZGF0ZSgqbnB0ZSk7CiAgICAgICAgICAgICAgICAgYWRkciArPSBQQUdFX1NJWkU7CiAgICAgICAgIH0KLSAgICAgICAgKCpkb19vcHMpKGRhdGEsIG9wcywgb3BfaW5kZXgpOworICAgICAgICAoKmRvX29wcykobW11LCBvcHMsIG9wX2luZGV4KTsKIH0KIAogaW50IGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQpAQCAtMTk1LDUxICsxOTcsNiBAQAogICAgICAgICByZXR1cm4odXBkYXRlZCk7CiB9CiAKLXZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLSAgICAgICAgYWRkcmVzcyAmPSBQQUdFX01BU0s7Ci0gICAgICAgIGZsdXNoX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgKyBQQUdFX1NJWkUpOwotfQotCi12b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKLXsKLSAgICAgICAgZmx1c2hfdGxiX21tKGN1cnJlbnQtPm1tKTsKLX0KLSAgCi12b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0gICAgICAgIENIT09TRV9NT0RFX1BST0MoZmx1c2hfdGxiX2tlcm5lbF9yYW5nZV90dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaF90bGJfa2VybmVsX3JhbmdlX2NvbW1vbiwgc3RhcnQsIGVuZCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX2tlcm5lbF92bSh2b2lkKQotewotICAgICAgICBDSE9PU0VfTU9ERShmbHVzaF90bGJfa2VybmVsX3ZtX3R0KCksCi0gICAgICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2VfY29tbW9uKHN0YXJ0X3ZtLCBlbmRfdm0pKTsKLX0KLQotdm9pZCBfX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQotewotICAgICAgICBDSE9PU0VfTU9ERV9QUk9DKF9fZmx1c2hfdGxiX29uZV90dCwgX19mbHVzaF90bGJfb25lX3NrYXMsIGFkZHIpOwotfQotCi12b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgCi0gICAgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotICAgICAgICBDSE9PU0VfTU9ERV9QUk9DKGZsdXNoX3RsYl9yYW5nZV90dCwgZmx1c2hfdGxiX3JhbmdlX3NrYXMsIHZtYSwgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZW5kKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0gICAgICAgIENIT09TRV9NT0RFX1BST0MoZmx1c2hfdGxiX21tX3R0LCBmbHVzaF90bGJfbW1fc2thcywgbW0pOwotfQotCi12b2lkIGZvcmNlX2ZsdXNoX2FsbCh2b2lkKQotewotICAgICAgICBDSE9PU0VfTU9ERShmb3JjZV9mbHVzaF9hbGxfdHQoKSwgZm9yY2VfZmx1c2hfYWxsX3NrYXMoKSk7Ci19Ci0KIHBnZF90ICpwZ2Rfb2Zmc2V0X3Byb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKICAgICAgICAgcmV0dXJuKHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpKTsKQEAgLTI3MCw5ICsyMjcsOSBAQAogfQogCiBpbnQgYWRkX21tYXAodW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgbGVuLAotICAgICBpbnQgciwgaW50IHcsIGludCB4LCBzdHJ1Y3QgaG9zdF92bV9vcCAqb3BzLCBpbnQgaW5kZXgsCi0gICAgIGludCBsYXN0X2ZpbGxlZCwgaW50IGRhdGEsCi0gICAgIHZvaWQgKCpkb19vcHMpKGludCwgc3RydWN0IGhvc3Rfdm1fb3AgKiwgaW50KSkKKyAgICAgICAgICAgICBpbnQgciwgaW50IHcsIGludCB4LCBzdHJ1Y3QgaG9zdF92bV9vcCAqb3BzLCBpbnQgaW5kZXgsCisgICAgICAgICAgICAgaW50IGxhc3RfZmlsbGVkLCB1bmlvbiBtbV9jb250ZXh0ICptbXUsCisgICAgICAgICAgICAgdm9pZCAoKmRvX29wcykodW5pb24gbW1fY29udGV4dCAqLCBzdHJ1Y3QgaG9zdF92bV9vcCAqLCBpbnQpKQogewogICAgICAgICBfX3U2NCBvZmZzZXQ7CiAJc3RydWN0IGhvc3Rfdm1fb3AgKmxhc3Q7CkBAIC0yOTIsNyArMjQ5LDcgQEAKIAl9CiAKIAlpZihpbmRleCA9PSBsYXN0X2ZpbGxlZCl7Ci0JCSgqZG9fb3BzKShkYXRhLCBvcHMsIGxhc3RfZmlsbGVkKTsKKwkJKCpkb19vcHMpKG1tdSwgb3BzLCBsYXN0X2ZpbGxlZCk7CiAJCWluZGV4ID0gLTE7CiAJfQogCkBAIC0zMTAsOCArMjY3LDggQEAKIH0KIAogaW50IGFkZF9tdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgc3RydWN0IGhvc3Rfdm1fb3AgKm9wcywKLQkgICAgICAgaW50IGluZGV4LCBpbnQgbGFzdF9maWxsZWQsIGludCBkYXRhLAotCSAgICAgICB2b2lkICgqZG9fb3BzKShpbnQsIHN0cnVjdCBob3N0X3ZtX29wICosIGludCkpCisJICAgICAgIGludCBpbmRleCwgaW50IGxhc3RfZmlsbGVkLCB1bmlvbiBtbV9jb250ZXh0ICptbXUsCisJICAgICAgIHZvaWQgKCpkb19vcHMpKHVuaW9uIG1tX2NvbnRleHQgKiwgc3RydWN0IGhvc3Rfdm1fb3AgKiwgaW50KSkKIHsKIAlzdHJ1Y3QgaG9zdF92bV9vcCAqbGFzdDsKIApAQCAtMzI1LDcgKzI4Miw3IEBACiAJfQogCiAJaWYoaW5kZXggPT0gbGFzdF9maWxsZWQpewotCQkoKmRvX29wcykoZGF0YSwgb3BzLCBsYXN0X2ZpbGxlZCk7CisJCSgqZG9fb3BzKShtbXUsIG9wcywgbGFzdF9maWxsZWQpOwogCQlpbmRleCA9IC0xOwogCX0KIApAQCAtMzM3LDggKzI5NCw5IEBACiB9CiAKIGludCBhZGRfbXByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHIsIGludCB3LCBpbnQgeCwKLQkJIHN0cnVjdCBob3N0X3ZtX29wICpvcHMsIGludCBpbmRleCwgaW50IGxhc3RfZmlsbGVkLCBpbnQgZGF0YSwKLQkJIHZvaWQgKCpkb19vcHMpKGludCwgc3RydWN0IGhvc3Rfdm1fb3AgKiwgaW50KSkKKyAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3Rfdm1fb3AgKm9wcywgaW50IGluZGV4LCBpbnQgbGFzdF9maWxsZWQsCisgICAgICAgICAgICAgICAgIHVuaW9uIG1tX2NvbnRleHQgKm1tdSwKKyAgICAgICAgICAgICAgICAgdm9pZCAoKmRvX29wcykodW5pb24gbW1fY29udGV4dCAqLCBzdHJ1Y3QgaG9zdF92bV9vcCAqLCBpbnQpKQogewogCXN0cnVjdCBob3N0X3ZtX29wICpsYXN0OwogCkBAIC0zNTQsNyArMzEyLDcgQEAKIAl9CiAKIAlpZihpbmRleCA9PSBsYXN0X2ZpbGxlZCl7Ci0JCSgqZG9fb3BzKShkYXRhLCBvcHMsIGxhc3RfZmlsbGVkKTsKKwkJKCpkb19vcHMpKG1tdSwgb3BzLCBsYXN0X2ZpbGxlZCk7CiAJCWluZGV4ID0gLTE7CiAJfQogCkBAIC0zNjcsMyArMzI1LDQ5IEBACiAJCQkJCQkgICAgICAueAk9IHggfSB9IH0pOwogCXJldHVybihpbmRleCk7CiB9CisKK3ZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKyAgICAgICAgYWRkcmVzcyAmPSBQQUdFX01BU0s7CisgICAgICAgIGZsdXNoX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgKyBQQUdFX1NJWkUpOworfQorCit2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKyAgICAgICAgZmx1c2hfdGxiX21tKGN1cnJlbnQtPm1tKTsKK30KKwordm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworICAgICAgICBDSE9PU0VfTU9ERV9QUk9DKGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2VfdHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZV9jb21tb24sIHN0YXJ0LCBlbmQpOworfQorCit2b2lkIGZsdXNoX3RsYl9rZXJuZWxfdm0odm9pZCkKK3sKKyAgICAgICAgQ0hPT1NFX01PREUoZmx1c2hfdGxiX2tlcm5lbF92bV90dCgpLAorICAgICAgICAgICAgICAgICAgICBmbHVzaF90bGJfa2VybmVsX3JhbmdlX2NvbW1vbihzdGFydF92bSwgZW5kX3ZtKSk7Cit9CisKK3ZvaWQgX19mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgICAgICAgQ0hPT1NFX01PREVfUFJPQyhfX2ZsdXNoX3RsYl9vbmVfdHQsIF9fZmx1c2hfdGxiX29uZV9za2FzLCBhZGRyKTsKK30KKwordm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisgICAgICAgIENIT09TRV9NT0RFX1BST0MoZmx1c2hfdGxiX3JhbmdlX3R0LCBmbHVzaF90bGJfcmFuZ2Vfc2thcywgdm1hLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbmQpOworfQorCit2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKyAgICAgICAgQ0hPT1NFX01PREVfUFJPQyhmbHVzaF90bGJfbW1fdHQsIGZsdXNoX3RsYl9tbV9za2FzLCBtbSk7Cit9CisKK3ZvaWQgZm9yY2VfZmx1c2hfYWxsKHZvaWQpCit7CisgICAgICAgIENIT09TRV9NT0RFKGZvcmNlX2ZsdXNoX2FsbF90dCgpLCBmb3JjZV9mbHVzaF9hbGxfc2thcygpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdHQvdGxiLmMgYi9hcmNoL3VtL2tlcm5lbC90dC90bGIuYwppbmRleCAyMDMyMTZhLi4yZWVmYjQzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90dC90bGIuYworKysgYi9hcmNoL3VtL2tlcm5lbC90dC90bGIuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgIm9zLmgiCiAjaW5jbHVkZSAidGxiLmgiCiAKLXN0YXRpYyB2b2lkIGRvX29wcyhpbnQgdW51c2VkLCBzdHJ1Y3QgaG9zdF92bV9vcCAqb3BzLCBpbnQgbGFzdCkKK3N0YXRpYyB2b2lkIGRvX29wcyh1bmlvbiBtbV9jb250ZXh0ICptbXUsIHN0cnVjdCBob3N0X3ZtX29wICpvcHMsIGludCBsYXN0KQogewogCXN0cnVjdCBob3N0X3ZtX29wICpvcDsKIAlpbnQgaTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgICAgICBwYW5pYygiZml4X3JhbmdlIGZpeGluZyB3cm9uZyBhZGRyZXNzIHNwYWNlLCBjdXJyZW50ID0gMHglcCIsCiAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCk7CiAKLSAgICAgICAgZml4X3JhbmdlX2NvbW1vbihtbSwgc3RhcnRfYWRkciwgZW5kX2FkZHIsIGZvcmNlLCAwLCBkb19vcHMpOworICAgICAgICBmaXhfcmFuZ2VfY29tbW9uKG1tLCBzdGFydF9hZGRyLCBlbmRfYWRkciwgZm9yY2UsIGRvX29wcyk7CiB9CiAKIGF0b21pY190IHZtY2hhbmdlX3NlcSA9IEFUT01JQ19JTklUKDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TIGIvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCmluZGV4IDYxZGZkNGYuLjE2MzQ3NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUworKysgYi9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKQEAgLTMwLDYgKzMwLDcgQEAKIAlfZWluaXR0ZXh0ID0gLjsKICAgfQogICAuID0gQUxJR04oNDA5Nik7CisKICAgLnRleHQgICAgICA6CiAgIHsKICAgICAqKC50ZXh0KQpAQCAtMzksNiArNDAsMTIgQEAKICAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KICAgICAqKC5nbnUud2FybmluZykKICAgICAqKC5nbnUubGlua29uY2UudCopCisKKyAgICAuID0gQUxJR04oNDA5Nik7CisgICAgX19zeXNjYWxsX3N0dWJfc3RhcnQgPSAuOworICAgICooLl9fc3lzY2FsbF9zdHViKikKKyAgICBfX3N5c2NhbGxfc3R1Yl9lbmQgPSAuOworICAgIC4gPSBBTElHTig0MDk2KTsKICAgfQogCiAgICNpbmNsdWRlICJhc20vY29tbW9uLmxkcy5TIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvcmVnaXN0ZXJzLmMKaW5kZXggOWEwYWQwOS4uMzEyNWQzMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3JlZ2lzdGVycy5jCkBAIC0xMjEsNiArMTIxLDExIEBACiAJCSAgICAgIGVycik7CiB9CiAKK3ZvaWQgZ2V0X3NhZmVfcmVnaXN0ZXJzKHVuc2lnbmVkIGxvbmcgKnJlZ3MpCit7CisJbWVtY3B5KHJlZ3MsIGV4ZWNfcmVncywgSE9TVF9GUkFNRV9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKK30KKwogLyoKICAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgogICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N5cy14ODZfNjQvcmVnaXN0ZXJzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy14ODZfNjQvcmVnaXN0ZXJzLmMKaW5kZXggNjI4NmM5Ny4uNDQ0MzhkMSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zeXMteDg2XzY0L3JlZ2lzdGVycy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLXg4Nl82NC9yZWdpc3RlcnMuYwpAQCAtNjksNiArNjksMTEgQEAKIAkJICAgICAgZXJyKTsKIH0KIAordm9pZCBnZXRfc2FmZV9yZWdpc3RlcnModW5zaWduZWQgbG9uZyAqcmVncykKK3sKKwltZW1jcHkocmVncywgZXhlY19yZWdzLCBIT1NUX0ZSQU1FX1NJWkUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworfQorCiAvKgogICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCiAgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcyBiL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwppbmRleCA3NDU5ZDA5Li4xN2YzMDViIDEwMDY0NAotLS0gYS9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKKysrIGIvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCkBAIC0xNiw2ICsxNiwxMSBAQAogZW5kZWYKIAogCisjIFRoZSBzdHVicyBhbmQgdW5tYXAubyBjYW4ndCB0cnkgdG8gY2FsbCBtY291bnQgb3IgdXBkYXRlIGJhc2ljIGJsb2NrIGRhdGEKK2RlZmluZSB1bnByb2ZpbGUKKwkkKHBhdHN1YnN0IC1wZywsJChwYXRzdWJzdCAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UsLCQoMSkpKQorZW5kZWYKKwogcXVpZXRfY21kX21ha2VfbGluayA9IFNZTUxJTksgJEAKIGNtZF9tYWtlX2xpbmsgICAgICAgPSBsbiAtc2YgJChzcmN0cmVlKS9hcmNoLyQoU1VCQVJDSCkvJCgkKG5vdGRpciAkQCktZGlyKS8kKG5vdGRpciAkQCkgJEAKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZSBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKaW5kZXggMDk1YmNkYi4uNzdjM2M0ZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogb2JqLXkgPSBiaXRvcHMubyBidWdzLm8gY2hlY2tzdW0ubyBkZWxheS5vIGZhdWx0Lm8ga3N5bXMubyBsZHQubyBwdHJhY2UubyBcCi0JcHRyYWNlX3VzZXIubyBzZW1hcGhvcmUubyBzaWduYWwubyBzaWdjb250ZXh0Lm8gc3lzY2FsbHMubyBzeXNycS5vIFwKLQlzeXNfY2FsbF90YWJsZS5vCisJcHRyYWNlX3VzZXIubyBzZW1hcGhvcmUubyBzaWduYWwubyBzaWdjb250ZXh0Lm8gc3R1Yi5vIHN0dWJfc2Vndi5vIFwKKwlzeXNjYWxscy5vIHN5c3JxLm8gc3lzX2NhbGxfdGFibGUubwogCiBvYmotJChDT05GSUdfSElHSE1FTSkgKz0gaGlnaG1lbS5vCiBvYmotJChDT05GSUdfTU9EVUxFUykgKz0gbW9kdWxlLm8KQEAgLTE2LDYgKzE2LDE0IEBACiBoaWdobWVtLmMtZGlyID0gbW0KIG1vZHVsZS5jLWRpciA9IGtlcm5lbAogCitTVFVCX0NGTEFHUyA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKGNhbGwgdW5wcm9maWxlLCQoVVNFUl9DRkxBR1MpKQorCisjIF9jZmxhZ3Mgd29ya3Mgd2l0aCBrZXJuZWwgZmlsZXMsIG5vdCB3aXRoIHVzZXJzcGFjZSBvbmVzLCBidXQgY19mbGFncyBkb2VzLAorIyB3aHkgYXNrIHdoeT8KKyQob2JqKS9zdHViX3NlZ3YubyA6IGNfZmxhZ3MgPSAkKFNUVUJfQ0ZMQUdTKQorCiskKG9iaikvc3R1Yi5vIDogYV9mbGFncyA9ICQoU1RVQl9DRkxBR1MpCisKIHN1YmRpci0gOj0gdXRpbAogCiBpbmNsdWRlIGFyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS51bm1hcApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zdHViLlMgYi9hcmNoL3VtL3N5cy1pMzg2L3N0dWIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjJjNzBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zdHViLlMKQEAgLTAsMCArMSw4IEBACisjaW5jbHVkZSAidW1sLWNvbmZpZy5oIgorCisJLmdsb2JsIHN5c2NhbGxfc3R1YgorLnNlY3Rpb24gLl9fc3lzY2FsbF9zdHViLCAieCIKK3N5c2NhbGxfc3R1YjoKKwlpbnQgCSQweDgwCisJbW92CSVlYXgsIFVNTF9DT05GSUdfU1RVQl9EQVRBCisJaW50MwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zdHViX3NlZ3YuYyBiL2FyY2gvdW0vc3lzLWkzODYvc3R1Yl9zZWd2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1MTQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc3R1Yl9zZWd2LmMKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCisjaW5jbHVkZSAic3lzZGVwL3NpZ2NvbnRleHQuaCIKKyNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLl9fc3lzY2FsbF9zdHViIikpKQorc3R1Yl9zZWd2X2hhbmRsZXIoaW50IHNpZykKK3sKKwlzdHJ1Y3Qgc2lnY29udGV4dCAqc2MgPSAoc3RydWN0IHNpZ2NvbnRleHQgKikgKCZzaWcgKyAxKTsKKworCUdFVF9GQVVMVElORk9fRlJPTV9TQygqKChzdHJ1Y3QgZmF1bHRpbmZvICopIFVNTF9DT05GSUdfU1RVQl9EQVRBKSwKKwkJCSAgICAgIHNjKTsKKworCV9fYXNtX18oIm1vdmwgJTAsICUlZWF4IDsgaW50ICQweDgwIjogOiAiZyIgKF9fTlJfZ2V0cGlkKSk7CisJX19hc21fXygibW92bCAlJWVheCwgJSVlYnggOyBtb3ZsICUwLCAlJWVheCA7IG1vdmwgJTEsICUlZWN4IDsiCisJCSJpbnQgJDB4ODAiOiA6ICJnIiAoX19OUl9raWxsKSwgImciIChTSUdVU1IxKSk7CisJLyogUG9wIHRoZSBmcmFtZSBwb2ludGVyIGFuZCByZXR1cm4gYWRkcmVzcyBzaW5jZSB3ZSBuZWVkIHRvIGxlYXZlCisJICogdGhlIHN0YWNrIGluIGl0cyBvcmlnaW5hbCBmb3JtIHdoZW4gd2UgZG8gdGhlIHNpZ3JldHVybiBoZXJlLCBieQorCSAqIGhhbmQuCisJICovCisJX19hc21fXygicG9wbCAlJWVheCA7IHBvcGwgJSVlYXggOyBwb3BsICUlZWF4IDsgbW92bCAlMCwgJSVlYXggOyAiCisJCSJpbnQgJDB4ODAiIDogOiAiZyIgKF9fTlJfc2lncmV0dXJuKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKaW5kZXggMmJjNmY2OC4uNzQ4ODIwNiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQpAQCAtNiw4ICs2LDggQEAKIAogI1hYWDogd2h5IGludG8gbGliLXk/CiBsaWIteSA9IGJpdG9wcy5vIGJ1Z3MubyBjc3VtLXBhcnRpYWwubyBkZWxheS5vIGZhdWx0Lm8gbWVtLm8gbWVtY3B5Lm8gXAotCXB0cmFjZS5vIHB0cmFjZV91c2VyLm8gc2VtYXBob3JlLm8gc2lnY29udGV4dC5vIHNpZ25hbC5vIFwKLQlzeXNjYWxscy5vIHN5c3JxLm8gdGh1bmsubyBzeXNjYWxsX3RhYmxlLm8KKwlwdHJhY2UubyBwdHJhY2VfdXNlci5vIHNlbWFwaG9yZS5vIHNpZ2NvbnRleHQubyBzaWduYWwubyBzdHViLm8gXAorCXN0dWJfc2Vndi5vIHN5c2NhbGxzLm8gc3lzY2FsbF90YWJsZS5vIHN5c3JxLm8gdGh1bmsubwogCiBvYmoteSA6PSBrc3ltcy5vCiBvYmotJChDT05GSUdfTU9EVUxFUykgKz0gbW9kdWxlLm8gdW1fbW9kdWxlLm8KQEAgLTI4LDYgKzI4LDE0IEBACiB0aHVuay5TLWRpciA9IGxpYgogbW9kdWxlLmMtZGlyID0ga2VybmVsCiAKK1NUVUJfQ0ZMQUdTID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoY2FsbCB1bnByb2ZpbGUsJChVU0VSX0NGTEFHUykpCisKKyMgX2NmbGFncyB3b3JrcyB3aXRoIGtlcm5lbCBmaWxlcywgbm90IHdpdGggdXNlcnNwYWNlIG9uZXMsIGJ1dCBjX2ZsYWdzIGRvZXMsCisjIHdoeSBhc2sgd2h5PworJChvYmopL3N0dWJfc2Vndi5vIDogY19mbGFncyA9ICQoU1RVQl9DRkxBR1MpCisKKyQob2JqKS9zdHViLm8gOiBhX2ZsYWdzID0gJChTVFVCX0NGTEFHUykKKwogc3ViZGlyLSA6PSB1dGlsCiAKIGluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnVubWFwCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvc3R1Yi5TIGIvYXJjaC91bS9zeXMteDg2XzY0L3N0dWIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWMxNDkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3N0dWIuUwpAQCAtMCwwICsxLDE1IEBACisjaW5jbHVkZSAidW1sLWNvbmZpZy5oIgorCisJLmdsb2JsIHN5c2NhbGxfc3R1YgorLnNlY3Rpb24gLl9fc3lzY2FsbF9zdHViLCAieCIKK3N5c2NhbGxfc3R1YjoKKwlzeXNjYWxsCisJLyogV2UgZG9uJ3QgaGF2ZSA2NC1iaXQgY29uc3RhbnRzLCBzbyB0aGlzIGNvbnN0cnVjdHMgdGhlIGFkZHJlc3MKKwkgKiB3ZSBuZWVkLgorCSAqLworCW1vdnEJJChVTUxfQ09ORklHX1NUVUJfREFUQSA+PiAzMiksICVyYngKKwlzYWxxCSQzMiwgJXJieAorCW1vdnEJJChVTUxfQ09ORklHX1NUVUJfREFUQSAmIDB4ZmZmZmZmZmYpLCAlcmN4CisJb3IJJXJjeCwgJXJieAorCW1vdnEJJXJheCwgKCVyYngpCisJaW50MwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N0dWJfc2Vndi5jIGIvYXJjaC91bS9zeXMteDg2XzY0L3N0dWJfc2Vndi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MWQxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3R1Yl9zZWd2LmMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCisjaW5jbHVkZSAic3lzZGVwL3NpZ2NvbnRleHQuaCIKKyNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLl9fc3lzY2FsbF9zdHViIikpKQorc3R1Yl9zZWd2X2hhbmRsZXIoaW50IHNpZykKK3sKKwlzdHJ1Y3QgdWNvbnRleHQgKnVjOworCisJX19hc21fXygibW92cSAlJXJkeCwgJTAiIDogIj1nIiAodWMpIDopOworICAgICAgICBHRVRfRkFVTFRJTkZPX0ZST01fU0MoKigoc3RydWN0IGZhdWx0aW5mbyAqKSBVTUxfQ09ORklHX1NUVUJfREFUQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdWMtPnVjX21jb250ZXh0KTsKKworCV9fYXNtX18oIm1vdnEgJTAsICUlcmF4IDsgc3lzY2FsbCI6IDogImciIChfX05SX2dldHBpZCkpOworCV9fYXNtX18oIm1vdnEgJSVyYXgsICUlcmRpIDsgbW92cSAlMCwgJSVyYXggOyBtb3ZxICUxLCAlJXJzaSA7IgorCQkic3lzY2FsbCI6IDogImciIChfX05SX2tpbGwpLCAiZyIgKFNJR1VTUjEpKTsKKwkvKiBUd28gcG9wcXMgdG8gcmVzdG9yZSB0aGUgc3RhY2sgdG8gdGhlIHN0YXRlIGp1c3QgYmVmb3JlIGVudGVyaW5nCisJICogdGhlIGhhbmRsZXIsIG9uZSBwb3BzIHRoZSByZXR1cm4gYWRkcmVzcywgdGhlIG90aGVyIHBvcHMgdGhlIGZyYW1lCisJICogcG9pbnRlci4KKwkgKi8KKwlfX2FzbV9fKCJwb3BxICUlcmF4IDsgcG9wcSAlJXJheCA7IG1vdnEgJTAsICUlcmF4IDsgc3lzY2FsbCIgOiA6ICJnIgorCQkoX19OUl9ydF9zaWdyZXR1cm4pKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L01ha2VmaWxlIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKaW5kZXggOGE3Mzc5NC4uNDI4OTE1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKQEAgLTY1LDcgKzY1LDkgQEAKIGhlYWQteSA6PSBhcmNoL3g4Nl82NC9rZXJuZWwvaGVhZC5vIGFyY2gveDg2XzY0L2tlcm5lbC9oZWFkNjQubyBhcmNoL3g4Nl82NC9rZXJuZWwvaW5pdF90YXNrLm8KIAogbGlicy15IAkJCQkJKz0gYXJjaC94ODZfNjQvbGliLwotY29yZS15CQkJCQkrPSBhcmNoL3g4Nl82NC9rZXJuZWwvIGFyY2gveDg2XzY0L21tLworY29yZS15CQkJCQkrPSBhcmNoL3g4Nl82NC9rZXJuZWwvIFwKKwkJCQkJICAgYXJjaC94ODZfNjQvbW0vIFwKKwkJCQkJICAgYXJjaC94ODZfNjQvY3J5cHRvLwogY29yZS0kKENPTkZJR19JQTMyX0VNVUxBVElPTikJCSs9IGFyY2gveDg2XzY0L2lhMzIvCiBkcml2ZXJzLSQoQ09ORklHX1BDSSkJCQkrPSBhcmNoL3g4Nl82NC9wY2kvCiBkcml2ZXJzLSQoQ09ORklHX09QUk9GSUxFKQkJKz0gYXJjaC94ODZfNjQvb3Byb2ZpbGUvCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9jcnlwdG8vTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9jcnlwdG8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2ZDIwZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2XzY0L2NyeXB0by9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKyMgCisjIHg4Nl82NC9jcnlwdG8vTWFrZWZpbGUgCisjIAorIyBBcmNoLXNwZWNpZmljIENyeXB0b0FQSSBtb2R1bGVzLgorIyAKKworb2JqLSQoQ09ORklHX0NSWVBUT19BRVNfWDg2XzY0KSArPSBhZXMteDg2XzY0Lm8KKworYWVzLXg4Nl82NC15IDo9IGFlcy14ODZfNjQtYXNtLm8gYWVzLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2NyeXB0by9hZXMteDg2XzY0LWFzbS5TIGIvYXJjaC94ODZfNjQvY3J5cHRvL2Flcy14ODZfNjQtYXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzY2JiMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2XzY0L2NyeXB0by9hZXMteDg2XzY0LWFzbS5TCkBAIC0wLDAgKzEsMTg2IEBACisvKiBBRVMgKFJpam5kYWVsKSBpbXBsZW1lbnRhdGlvbiAoRklQUyBQVUIgMTk3KSBmb3IgeDg2XzY0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHJlYXMgU3RlaW5tZXR6LCA8YXN0QGRvbWR2LmRlPgorICoKKyAqIExpY2Vuc2U6CisgKiBUaGlzIGNvZGUgY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBoZWFkZXIgZG93biB0byBhbmQKKyAqIGluY2x1ZGluZyB0aGlzIHNlbnRlbmNlIGlzIHJldGFpbmVkIGluIGZ1bGwuCisgKi8KKworLmV4dGVybiBhZXNfZnRfdGFiCisuZXh0ZXJuIGFlc19pdF90YWIKKy5leHRlcm4gYWVzX2ZsX3RhYgorLmV4dGVybiBhZXNfaWxfdGFiCisKKy50ZXh0CisKKyNkZWZpbmUgUjEJJXJheAorI2RlZmluZSBSMUUJJWVheAorI2RlZmluZSBSMVgJJWF4CisjZGVmaW5lIFIxSAklYWgKKyNkZWZpbmUgUjFMCSVhbAorI2RlZmluZSBSMgklcmJ4CisjZGVmaW5lIFIyRQklZWJ4CisjZGVmaW5lIFIyWAklYngKKyNkZWZpbmUgUjJICSViaAorI2RlZmluZSBSMkwJJWJsCisjZGVmaW5lIFIzCSVyY3gKKyNkZWZpbmUgUjNFCSVlY3gKKyNkZWZpbmUgUjNYCSVjeAorI2RlZmluZSBSM0gJJWNoCisjZGVmaW5lIFIzTAklY2wKKyNkZWZpbmUgUjQJJXJkeAorI2RlZmluZSBSNEUJJWVkeAorI2RlZmluZSBSNFgJJWR4CisjZGVmaW5lIFI0SAklZGgKKyNkZWZpbmUgUjRMCSVkbAorI2RlZmluZSBSNQklcnNpCisjZGVmaW5lIFI1RQklZXNpCisjZGVmaW5lIFI2CSVyZGkKKyNkZWZpbmUgUjZFCSVlZGkKKyNkZWZpbmUgUjcJJXJicAorI2RlZmluZSBSN0UJJWVicAorI2RlZmluZSBSOAklcjgKKyNkZWZpbmUgUjkJJXI5CisjZGVmaW5lIFIxMAklcjEwCisjZGVmaW5lIFIxMQklcjExCisKKyNkZWZpbmUgcHJvbG9ndWUoRlVOQyxCQVNFLEIxMjgsQjE5MixyMSxyMixyMyxyNCxyNSxyNixyNyxyOCxyOSxyMTAscjExKSBcCisJLmdsb2JhbAlGVU5DOwkJCVwKKwkudHlwZQlGVU5DLEBmdW5jdGlvbjsJCVwKKwkuYWxpZ24JODsJCQlcCitGVU5DOgltb3ZxCXIxLHIyOwkJCVwKKwltb3ZxCXIzLHI0OwkJCVwKKwlsZWFxCUJBU0UrNTIocjgpLHI5OwkJXAorCW1vdnEJcjEwLHIxMTsJCVwKKwltb3ZsCShyNykscjUgIyMgRTsJCVwKKwltb3ZsCTQocjcpLHIxICMjIEU7CQlcCisJbW92bAk4KHI3KSxyNiAjIyBFOwkJXAorCW1vdmwJMTIocjcpLHI3ICMjIEU7CQlcCisJbW92bAkocjgpLHIxMCAjIyBFOwkJXAorCXhvcmwJLTQ4KHI5KSxyNSAjIyBFOwlcCisJeG9ybAktNDQocjkpLHIxICMjIEU7CVwKKwl4b3JsCS00MChyOSkscjYgIyMgRTsJXAorCXhvcmwJLTM2KHI5KSxyNyAjIyBFOwlcCisJY21wbAkkMjQscjEwICMjIEU7CQlcCisJamIJQjEyODsJCQlcCisJbGVhcQkzMihyOSkscjk7CQlcCisJamUJQjE5MjsJCQlcCisJbGVhcQkzMihyOSkscjk7CisKKyNkZWZpbmUgZXBpbG9ndWUocjEscjIscjMscjQscjUscjYscjcscjgscjkpIFwKKwltb3ZxCXIxLHIyOwkJCVwKKwltb3ZxCXIzLHI0OwkJCVwKKwltb3ZsCXI1ICMjIEUsKHI5KTsJCVwKKwltb3ZsCXI2ICMjIEUsNChyOSk7CQlcCisJbW92bAlyNyAjIyBFLDgocjkpOwkJXAorCW1vdmwJcjggIyMgRSwxMihyOSk7CQlcCisJcmV0OworCisjZGVmaW5lIHJvdW5kKFRBQixPRkZTRVQscjEscjIscjMscjQscjUscjYscjcscjgscmEscmIscmMscmQpIFwKKwltb3Z6YmwJcjIgIyMgSCxyNSAjIyBFOwlcCisJbW92emJsCXIyICMjIEwscjYgIyMgRTsJXAorCW1vdmwJVEFCKzEwMjQoLHI1LDQpLHI1ICMjIEU7XAorCW1vdncJcjQgIyMgWCxyMiAjIyBYOwlcCisJbW92bAlUQUIoLHI2LDQpLHI2ICMjIEU7CVwKKwlyb2xsCSQxNixyMiAjIyBFOwkJXAorCXNocmwJJDE2LHI0ICMjIEU7CQlcCisJbW92emJsCXI0ICMjIEgscjcgIyMgRTsJXAorCW1vdnpibAlyNCAjIyBMLHI0ICMjIEU7CVwKKwl4b3JsCU9GRlNFVChyOCkscmEgIyMgRTsJXAorCXhvcmwJT0ZGU0VUKzQocjgpLHJiICMjIEU7CVwKKwl4b3JsCVRBQiszMDcyKCxyNyw0KSxyNSAjIyBFO1wKKwl4b3JsCVRBQisyMDQ4KCxyNCw0KSxyNiAjIyBFO1wKKwltb3Z6YmwJcjEgIyMgTCxyNyAjIyBFOwlcCisJbW92emJsCXIxICMjIEgscjQgIyMgRTsJXAorCW1vdmwJVEFCKzEwMjQoLHI0LDQpLHI0ICMjIEU7XAorCW1vdncJcjMgIyMgWCxyMSAjIyBYOwlcCisJcm9sbAkkMTYscjEgIyMgRTsJCVwKKwlzaHJsCSQxNixyMyAjIyBFOwkJXAorCXhvcmwJVEFCKCxyNyw0KSxyNSAjIyBFOwlcCisJbW92emJsCXIzICMjIEgscjcgIyMgRTsJXAorCW1vdnpibAlyMyAjIyBMLHIzICMjIEU7CVwKKwl4b3JsCVRBQiszMDcyKCxyNyw0KSxyNCAjIyBFO1wKKwl4b3JsCVRBQisyMDQ4KCxyMyw0KSxyNSAjIyBFO1wKKwltb3Z6YmwJcjEgIyMgSCxyNyAjIyBFOwlcCisJbW92emJsCXIxICMjIEwscjMgIyMgRTsJXAorCXNocmwJJDE2LHIxICMjIEU7CQlcCisJeG9ybAlUQUIrMzA3MigscjcsNCkscjYgIyMgRTtcCisJbW92bAlUQUIrMjA0OCgscjMsNCkscjMgIyMgRTtcCisJbW92emJsCXIxICMjIEgscjcgIyMgRTsJXAorCW1vdnpibAlyMSAjIyBMLHIxICMjIEU7CVwKKwl4b3JsCVRBQisxMDI0KCxyNyw0KSxyNiAjIyBFO1wKKwl4b3JsCVRBQigscjEsNCkscjMgIyMgRTsJXAorCW1vdnpibAlyMiAjIyBILHIxICMjIEU7CVwKKwltb3Z6YmwJcjIgIyMgTCxyNyAjIyBFOwlcCisJc2hybAkkMTYscjIgIyMgRTsJCVwKKwl4b3JsCVRBQiszMDcyKCxyMSw0KSxyMyAjIyBFO1wKKwl4b3JsCVRBQisyMDQ4KCxyNyw0KSxyNCAjIyBFO1wKKwltb3Z6YmwJcjIgIyMgSCxyMSAjIyBFOwlcCisJbW92emJsCXIyICMjIEwscjIgIyMgRTsJXAorCXhvcmwJT0ZGU0VUKzgocjgpLHJjICMjIEU7CVwKKwl4b3JsCU9GRlNFVCsxMihyOCkscmQgIyMgRTsJXAorCXhvcmwJVEFCKzEwMjQoLHIxLDQpLHIzICMjIEU7XAorCXhvcmwJVEFCKCxyMiw0KSxyNCAjIyBFOworCisjZGVmaW5lIG1vdmVfcmVncyhyMSxyMixyMyxyNCkgXAorCW1vdmwJcjMgIyMgRSxyMSAjIyBFOwlcCisJbW92bAlyNCAjIyBFLHIyICMjIEU7CisKKyNkZWZpbmUgZW50cnkoRlVOQyxCQVNFLEIxMjgsQjE5MikgXAorCXByb2xvZ3VlKEZVTkMsQkFTRSxCMTI4LEIxOTIsUjIsUjgsUjcsUjksUjEsUjMsUjQsUjYsUjEwLFI1LFIxMSkKKworI2RlZmluZSByZXR1cm4gZXBpbG9ndWUoUjgsUjIsUjksUjcsUjUsUjYsUjMsUjQsUjExKQorCisjZGVmaW5lIGVuY3J5cHRfcm91bmQoVEFCLE9GRlNFVCkgXAorCXJvdW5kKFRBQixPRkZTRVQsUjEsUjIsUjMsUjQsUjUsUjYsUjcsUjEwLFI1LFI2LFIzLFI0KSBcCisJbW92ZV9yZWdzKFIxLFIyLFI1LFI2KQorCisjZGVmaW5lIGVuY3J5cHRfZmluYWwoVEFCLE9GRlNFVCkgXAorCXJvdW5kKFRBQixPRkZTRVQsUjEsUjIsUjMsUjQsUjUsUjYsUjcsUjEwLFI1LFI2LFIzLFI0KQorCisjZGVmaW5lIGRlY3J5cHRfcm91bmQoVEFCLE9GRlNFVCkgXAorCXJvdW5kKFRBQixPRkZTRVQsUjIsUjEsUjQsUjMsUjYsUjUsUjcsUjEwLFI1LFI2LFIzLFI0KSBcCisJbW92ZV9yZWdzKFIxLFIyLFI1LFI2KQorCisjZGVmaW5lIGRlY3J5cHRfZmluYWwoVEFCLE9GRlNFVCkgXAorCXJvdW5kKFRBQixPRkZTRVQsUjIsUjEsUjQsUjMsUjYsUjUsUjcsUjEwLFI1LFI2LFIzLFI0KQorCisvKiB2b2lkIGFlc19lbmNyeXB0KHZvaWQgKmN0eCwgdTggKm91dCwgY29uc3QgdTggKmluKSAqLworCisJZW50cnkoYWVzX2VuY3J5cHQsMCxlbmMxMjgsZW5jMTkyKQorCWVuY3J5cHRfcm91bmQoYWVzX2Z0X3RhYiwtOTYpCisJZW5jcnlwdF9yb3VuZChhZXNfZnRfdGFiLC04MCkKK2VuYzE5MjoJZW5jcnlwdF9yb3VuZChhZXNfZnRfdGFiLC02NCkKKwllbmNyeXB0X3JvdW5kKGFlc19mdF90YWIsLTQ4KQorZW5jMTI4OgllbmNyeXB0X3JvdW5kKGFlc19mdF90YWIsLTMyKQorCWVuY3J5cHRfcm91bmQoYWVzX2Z0X3RhYiwtMTYpCisJZW5jcnlwdF9yb3VuZChhZXNfZnRfdGFiLCAgMCkKKwllbmNyeXB0X3JvdW5kKGFlc19mdF90YWIsIDE2KQorCWVuY3J5cHRfcm91bmQoYWVzX2Z0X3RhYiwgMzIpCisJZW5jcnlwdF9yb3VuZChhZXNfZnRfdGFiLCA0OCkKKwllbmNyeXB0X3JvdW5kKGFlc19mdF90YWIsIDY0KQorCWVuY3J5cHRfcm91bmQoYWVzX2Z0X3RhYiwgODApCisJZW5jcnlwdF9yb3VuZChhZXNfZnRfdGFiLCA5NikKKwllbmNyeXB0X2ZpbmFsKGFlc19mbF90YWIsMTEyKQorCXJldHVybgorCisvKiB2b2lkIGFlc19kZWNyeXB0KHZvaWQgKmN0eCwgdTggKm91dCwgY29uc3QgdTggKmluKSAqLworCisJZW50cnkoYWVzX2RlY3J5cHQsMjQwLGRlYzEyOCxkZWMxOTIpCisJZGVjcnlwdF9yb3VuZChhZXNfaXRfdGFiLC05NikKKwlkZWNyeXB0X3JvdW5kKGFlc19pdF90YWIsLTgwKQorZGVjMTkyOglkZWNyeXB0X3JvdW5kKGFlc19pdF90YWIsLTY0KQorCWRlY3J5cHRfcm91bmQoYWVzX2l0X3RhYiwtNDgpCitkZWMxMjg6CWRlY3J5cHRfcm91bmQoYWVzX2l0X3RhYiwtMzIpCisJZGVjcnlwdF9yb3VuZChhZXNfaXRfdGFiLC0xNikKKwlkZWNyeXB0X3JvdW5kKGFlc19pdF90YWIsICAwKQorCWRlY3J5cHRfcm91bmQoYWVzX2l0X3RhYiwgMTYpCisJZGVjcnlwdF9yb3VuZChhZXNfaXRfdGFiLCAzMikKKwlkZWNyeXB0X3JvdW5kKGFlc19pdF90YWIsIDQ4KQorCWRlY3J5cHRfcm91bmQoYWVzX2l0X3RhYiwgNjQpCisJZGVjcnlwdF9yb3VuZChhZXNfaXRfdGFiLCA4MCkKKwlkZWNyeXB0X3JvdW5kKGFlc19pdF90YWIsIDk2KQorCWRlY3J5cHRfZmluYWwoYWVzX2lsX3RhYiwxMTIpCisJcmV0dXJuCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9jcnlwdG8vYWVzLmMgYi9hcmNoL3g4Nl82NC9jcnlwdG8vYWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1YzQwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2XzY0L2NyeXB0by9hZXMuYwpAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIEFFUyBDaXBoZXIgQWxnb3JpdGhtLgorICoKKyAqIEJhc2VkIG9uIEJyaWFuIEdsYWRtYW4ncyBjb2RlLgorICoKKyAqIExpbnV4IGRldmVsb3BlcnM6CisgKiAgQWxleGFuZGVyIEtqZWxkYWFzIDxhc3RvckBmYXN0Lm5vPgorICogIEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBodnJsYWIub3JnPgorICogIEt5bGUgTWNNYXJ0aW4gPGt5bGVAZGViaWFuLm9yZz4KKyAqICBBZGFtIEouIFJpY2h0ZXIgPGFkYW1AeWdnZHJhc2lsLmNvbT4gKGNvbnZlcnNpb24gdG8gMi41IEFQSSkuCisgKiAgQW5kcmVhcyBTdGVpbm1ldHogPGFzdEBkb21kdi5kZT4gKGFkYXB0ZWQgdG8geDg2XzY0IGFzc2VtYmxlcikKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weXJpZ2h0IChjKSAyMDAyLCBEciBCcmlhbiBHbGFkbWFuIDxicmdAZ2xhZG1hbi5tZS51az4sIFdvcmNlc3RlciwgVUsuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExJQ0VOU0UgVEVSTVMKKyAqCisgKiBUaGUgZnJlZSBkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGluIGJvdGggc291cmNlIGFuZCBiaW5hcnkKKyAqIGZvcm0gaXMgYWxsb3dlZCAod2l0aCBvciB3aXRob3V0IGNoYW5nZXMpIHByb3ZpZGVkIHRoYXQ6CisgKgorICogICAxLiBkaXN0cmlidXRpb25zIG9mIHRoaXMgc291cmNlIGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcjsKKyAqCisgKiAgIDIuIGRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgYXNzb2NpYXRlZCBtYXRlcmlhbHM7CisgKgorICogICAzLiB0aGUgY29weXJpZ2h0IGhvbGRlcidzIG5hbWUgaXMgbm90IHVzZWQgdG8gZW5kb3JzZSBwcm9kdWN0cworICogICAgICBidWlsdCB1c2luZyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgaXMgcmV0YWluZWQgaW4gZnVsbCwgdGhpcyBwcm9kdWN0CisgKiBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcHBseSBJTlNURUFEIE9GIHRob3NlIGdpdmVuIGFib3ZlLgorICoKKyAqIERJU0NMQUlNRVIKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcyBpcycgd2l0aCBubyBleHBsaWNpdCBvciBpbXBsaWVkIHdhcnJhbnRpZXMKKyAqIGluIHJlc3BlY3Qgb2YgaXRzIHByb3BlcnRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBjb3JyZWN0bmVzcworICogYW5kL29yIGZpdG5lc3MgZm9yIHB1cnBvc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBTb21lIGNoYW5nZXMgZnJvbSB0aGUgR2xhZG1hbiB2ZXJzaW9uOgorICAgIHMvUklKTkRBRUwoZV9rZXkpL0VfS0VZL2cKKyAgICBzL1JJSk5EQUVMKGRfa2V5KS9EX0tFWS9nCisqLworCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgQUVTX01JTl9LRVlfU0laRQkxNgorI2RlZmluZSBBRVNfTUFYX0tFWV9TSVpFCTMyCisKKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUJCTE2CisKKy8qCisgKiAjZGVmaW5lIGJ5dGUoeCwgbnIpICgodW5zaWduZWQgY2hhcikoKHgpID4+IChucio4KSkpCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggYnl0ZShjb25zdCB1MzIgeCwgY29uc3QgdW5zaWduZWQgbikKK3sKKwlyZXR1cm4geCA+PiAobiA8PCAzKTsKK30KKworI2RlZmluZSB1MzJfaW4oeCkgbGUzMl90b19jcHUoKihjb25zdCBfX2xlMzIgKikoeCkpCisKK3N0cnVjdCBhZXNfY3R4Cit7CisJdTMyIGtleV9sZW5ndGg7CisJdTMyIEVbNjBdOworCXUzMiBEWzYwXTsKK307CisKKyNkZWZpbmUgRV9LRVkgY3R4LT5FCisjZGVmaW5lIERfS0VZIGN0eC0+RAorCitzdGF0aWMgdTggcG93X3RhYlsyNTZdIF9faW5pdGRhdGE7CitzdGF0aWMgdTggbG9nX3RhYlsyNTZdIF9faW5pdGRhdGE7CitzdGF0aWMgdTggc2J4X3RhYlsyNTZdIF9faW5pdGRhdGE7CitzdGF0aWMgdTggaXNiX3RhYlsyNTZdIF9faW5pdGRhdGE7CitzdGF0aWMgdTMyIHJjb190YWJbMTBdOwordTMyIGFlc19mdF90YWJbNF1bMjU2XTsKK3UzMiBhZXNfaXRfdGFiWzRdWzI1Nl07CisKK3UzMiBhZXNfZmxfdGFiWzRdWzI1Nl07Cit1MzIgYWVzX2lsX3RhYls0XVsyNTZdOworCitzdGF0aWMgaW5saW5lIHU4IGZfbXVsdCh1OCBhLCB1OCBiKQoreworCXU4IGFhID0gbG9nX3RhYlthXSwgY2MgPSBhYSArIGxvZ190YWJbYl07CisKKwlyZXR1cm4gcG93X3RhYltjYyArIChjYyA8IGFhID8gMSA6IDApXTsKK30KKworI2RlZmluZSBmZl9tdWx0KGEsIGIpIChhICYmIGIgPyBmX211bHQoYSwgYikgOiAwKQorCisjZGVmaW5lIGxzX2JveCh4KQkJCQlcCisJKGFlc19mbF90YWJbMF1bYnl0ZSh4LCAwKV0gXgkJXAorCSBhZXNfZmxfdGFiWzFdW2J5dGUoeCwgMSldIF4JCVwKKwkgYWVzX2ZsX3RhYlsyXVtieXRlKHgsIDIpXSBeCQlcCisJIGFlc19mbF90YWJbM11bYnl0ZSh4LCAzKV0pCisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZW5fdGFicyh2b2lkKQoreworCXUzMiBpLCB0OworCXU4IHAsIHE7CisKKwkvKiBsb2cgYW5kIHBvd2VyIHRhYmxlcyBmb3IgR0YoMioqOCkgZmluaXRlIGZpZWxkIHdpdGgKKwkgICAweDAxMWIgYXMgbW9kdWxhciBwb2x5bm9taWFsIC0gdGhlIHNpbXBsZXN0IHByaW1pdGl2ZQorCSAgIHJvb3QgaXMgMHgwMywgdXNlZCBoZXJlIHRvIGdlbmVyYXRlIHRoZSB0YWJsZXMgKi8KKworCWZvciAoaSA9IDAsIHAgPSAxOyBpIDwgMjU2OyArK2kpIHsKKwkJcG93X3RhYltpXSA9ICh1OClwOworCQlsb2dfdGFiW3BdID0gKHU4KWk7CisKKwkJcCBePSAocCA8PCAxKSBeIChwICYgMHg4MCA/IDB4MDFiIDogMCk7CisJfQorCisJbG9nX3RhYlsxXSA9IDA7CisKKwlmb3IgKGkgPSAwLCBwID0gMTsgaSA8IDEwOyArK2kpIHsKKwkJcmNvX3RhYltpXSA9IHA7CisKKwkJcCA9IChwIDw8IDEpIF4gKHAgJiAweDgwID8gMHgwMWIgOiAwKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpIHsKKwkJcCA9IChpID8gcG93X3RhYlsyNTUgLSBsb2dfdGFiW2ldXSA6IDApOworCQlxID0gKChwID4+IDcpIHwgKHAgPDwgMSkpIF4gKChwID4+IDYpIHwgKHAgPDwgMikpOworCQlwIF49IDB4NjMgXiBxIF4gKChxID4+IDYpIHwgKHEgPDwgMikpOworCQlzYnhfdGFiW2ldID0gcDsKKwkJaXNiX3RhYltwXSA9ICh1OClpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkgeworCQlwID0gc2J4X3RhYltpXTsKKworCQl0ID0gcDsKKwkJYWVzX2ZsX3RhYlswXVtpXSA9IHQ7CisJCWFlc19mbF90YWJbMV1baV0gPSByb2wzMih0LCA4KTsKKwkJYWVzX2ZsX3RhYlsyXVtpXSA9IHJvbDMyKHQsIDE2KTsKKwkJYWVzX2ZsX3RhYlszXVtpXSA9IHJvbDMyKHQsIDI0KTsKKworCQl0ID0gKCh1MzIpZmZfbXVsdCgyLCBwKSkgfAorCQkgICAgKCh1MzIpcCA8PCA4KSB8CisJCSAgICAoKHUzMilwIDw8IDE2KSB8ICgodTMyKWZmX211bHQoMywgcCkgPDwgMjQpOworCisJCWFlc19mdF90YWJbMF1baV0gPSB0OworCQlhZXNfZnRfdGFiWzFdW2ldID0gcm9sMzIodCwgOCk7CisJCWFlc19mdF90YWJbMl1baV0gPSByb2wzMih0LCAxNik7CisJCWFlc19mdF90YWJbM11baV0gPSByb2wzMih0LCAyNCk7CisKKwkJcCA9IGlzYl90YWJbaV07CisKKwkJdCA9IHA7CisJCWFlc19pbF90YWJbMF1baV0gPSB0OworCQlhZXNfaWxfdGFiWzFdW2ldID0gcm9sMzIodCwgOCk7CisJCWFlc19pbF90YWJbMl1baV0gPSByb2wzMih0LCAxNik7CisJCWFlc19pbF90YWJbM11baV0gPSByb2wzMih0LCAyNCk7CisKKwkJdCA9ICgodTMyKWZmX211bHQoMTQsIHApKSB8CisJCSAgICAoKHUzMilmZl9tdWx0KDksIHApIDw8IDgpIHwKKwkJICAgICgodTMyKWZmX211bHQoMTMsIHApIDw8IDE2KSB8CisJCSAgICAoKHUzMilmZl9tdWx0KDExLCBwKSA8PCAyNCk7CisKKwkJYWVzX2l0X3RhYlswXVtpXSA9IHQ7CisJCWFlc19pdF90YWJbMV1baV0gPSByb2wzMih0LCA4KTsKKwkJYWVzX2l0X3RhYlsyXVtpXSA9IHJvbDMyKHQsIDE2KTsKKwkJYWVzX2l0X3RhYlszXVtpXSA9IHJvbDMyKHQsIDI0KTsKKwl9Cit9CisKKyNkZWZpbmUgc3Rhcl94KHgpICgoKHgpICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXiAoKCgoeCkgJiAweDgwODA4MDgwKSA+PiA3KSAqIDB4MWIpCisKKyNkZWZpbmUgaW1peF9jb2woeSwgeCkJCQlcCisJdSAgICA9IHN0YXJfeCh4KTsJCVwKKwl2ICAgID0gc3Rhcl94KHUpOwkJXAorCXcgICAgPSBzdGFyX3godik7CQlcCisJdCAgICA9IHcgXiAoeCk7CQkJXAorCSh5KSAgPSB1IF4gdiBeIHc7CQlcCisJKHkpIF49IHJvcjMyKHUgXiB0LCAgOCkgXglcCisJICAgICAgIHJvcjMyKHYgXiB0LCAxNikgXglcCisJICAgICAgIHJvcjMyKHQsIDI0KQorCisvKiBpbml0aWFsaXNlIHRoZSBrZXkgc2NoZWR1bGUgZnJvbSB0aGUgdXNlciBzdXBwbGllZCBrZXkgKi8KKworI2RlZmluZSBsb29wNChpKQkJCQkJXAorewkJCQkJCQlcCisJdCA9IHJvcjMyKHQsICA4KTsgdCA9IGxzX2JveCh0KSBeIHJjb190YWJbaV07CVwKKwl0IF49IEVfS0VZWzQgKiBpXTsgICAgIEVfS0VZWzQgKiBpICsgNF0gPSB0OwlcCisJdCBePSBFX0tFWVs0ICogaSArIDFdOyBFX0tFWVs0ICogaSArIDVdID0gdDsJXAorCXQgXj0gRV9LRVlbNCAqIGkgKyAyXTsgRV9LRVlbNCAqIGkgKyA2XSA9IHQ7CVwKKwl0IF49IEVfS0VZWzQgKiBpICsgM107IEVfS0VZWzQgKiBpICsgN10gPSB0OwlcCit9CisKKyNkZWZpbmUgbG9vcDYoaSkJCQkJCVwKK3sJCQkJCQkJXAorCXQgPSByb3IzMih0LCAgOCk7IHQgPSBsc19ib3godCkgXiByY29fdGFiW2ldOwlcCisJdCBePSBFX0tFWVs2ICogaV07ICAgICBFX0tFWVs2ICogaSArIDZdID0gdDsJXAorCXQgXj0gRV9LRVlbNiAqIGkgKyAxXTsgRV9LRVlbNiAqIGkgKyA3XSA9IHQ7CVwKKwl0IF49IEVfS0VZWzYgKiBpICsgMl07IEVfS0VZWzYgKiBpICsgOF0gPSB0OwlcCisJdCBePSBFX0tFWVs2ICogaSArIDNdOyBFX0tFWVs2ICogaSArIDldID0gdDsJXAorCXQgXj0gRV9LRVlbNiAqIGkgKyA0XTsgRV9LRVlbNiAqIGkgKyAxMF0gPSB0OwlcCisJdCBePSBFX0tFWVs2ICogaSArIDVdOyBFX0tFWVs2ICogaSArIDExXSA9IHQ7CVwKK30KKworI2RlZmluZSBsb29wOChpKQkJCQkJXAorewkJCQkJCQlcCisJdCA9IHJvcjMyKHQsICA4KTsgOyB0ID0gbHNfYm94KHQpIF4gcmNvX3RhYltpXTsJXAorCXQgXj0gRV9LRVlbOCAqIGldOyAgICAgRV9LRVlbOCAqIGkgKyA4XSA9IHQ7CVwKKwl0IF49IEVfS0VZWzggKiBpICsgMV07IEVfS0VZWzggKiBpICsgOV0gPSB0OwlcCisJdCBePSBFX0tFWVs4ICogaSArIDJdOyBFX0tFWVs4ICogaSArIDEwXSA9IHQ7CVwKKwl0IF49IEVfS0VZWzggKiBpICsgM107IEVfS0VZWzggKiBpICsgMTFdID0gdDsJXAorCXQgID0gRV9LRVlbOCAqIGkgKyA0XSBeIGxzX2JveCh0KTsJCVwKKwlFX0tFWVs4ICogaSArIDEyXSA9IHQ7CQkJCVwKKwl0IF49IEVfS0VZWzggKiBpICsgNV07IEVfS0VZWzggKiBpICsgMTNdID0gdDsJXAorCXQgXj0gRV9LRVlbOCAqIGkgKyA2XTsgRV9LRVlbOCAqIGkgKyAxNF0gPSB0OwlcCisJdCBePSBFX0tFWVs4ICogaSArIDddOyBFX0tFWVs4ICogaSArIDE1XSA9IHQ7CVwKK30KKworc3RhdGljIGludCBhZXNfc2V0X2tleSh2b2lkICpjdHhfYXJnLCBjb25zdCB1OCAqaW5fa2V5LCB1bnNpZ25lZCBpbnQga2V5X2xlbiwKKwkJICAgICAgIHUzMiAqZmxhZ3MpCit7CisJc3RydWN0IGFlc19jdHggKmN0eCA9IGN0eF9hcmc7CisJdTMyIGksIGosIHQsIHUsIHYsIHc7CisKKwlpZiAoa2V5X2xlbiAhPSAxNiAmJiBrZXlfbGVuICE9IDI0ICYmIGtleV9sZW4gIT0gMzIpIHsKKwkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljdHgtPmtleV9sZW5ndGggPSBrZXlfbGVuOworCisJRF9LRVlba2V5X2xlbiArIDI0XSA9IEVfS0VZWzBdID0gdTMyX2luKGluX2tleSk7CisJRF9LRVlba2V5X2xlbiArIDI1XSA9IEVfS0VZWzFdID0gdTMyX2luKGluX2tleSArIDQpOworCURfS0VZW2tleV9sZW4gKyAyNl0gPSBFX0tFWVsyXSA9IHUzMl9pbihpbl9rZXkgKyA4KTsKKwlEX0tFWVtrZXlfbGVuICsgMjddID0gRV9LRVlbM10gPSB1MzJfaW4oaW5fa2V5ICsgMTIpOworCisJc3dpdGNoIChrZXlfbGVuKSB7CisJY2FzZSAxNjoKKwkJdCA9IEVfS0VZWzNdOworCQlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkKKwkJCWxvb3A0KGkpOworCQlicmVhazsKKworCWNhc2UgMjQ6CisJCUVfS0VZWzRdID0gdTMyX2luKGluX2tleSArIDE2KTsKKwkJdCA9IEVfS0VZWzVdID0gdTMyX2luKGluX2tleSArIDIwKTsKKwkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJCWxvb3A2IChpKTsKKwkJYnJlYWs7CisKKwljYXNlIDMyOgorCQlFX0tFWVs0XSA9IHUzMl9pbihpbl9rZXkgKyAxNik7CisJCUVfS0VZWzVdID0gdTMyX2luKGluX2tleSArIDIwKTsKKwkJRV9LRVlbNl0gPSB1MzJfaW4oaW5fa2V5ICsgMjQpOworCQl0ID0gRV9LRVlbN10gPSB1MzJfaW4oaW5fa2V5ICsgMjgpOworCQlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQorCQkJbG9vcDgoaSk7CisJCWJyZWFrOworCX0KKworCURfS0VZWzBdID0gRV9LRVlba2V5X2xlbiArIDI0XTsKKwlEX0tFWVsxXSA9IEVfS0VZW2tleV9sZW4gKyAyNV07CisJRF9LRVlbMl0gPSBFX0tFWVtrZXlfbGVuICsgMjZdOworCURfS0VZWzNdID0gRV9LRVlba2V5X2xlbiArIDI3XTsKKworCWZvciAoaSA9IDQ7IGkgPCBrZXlfbGVuICsgMjQ7ICsraSkgeworCQlqID0ga2V5X2xlbiArIDI0IC0gKGkgJiB+MykgKyAoaSAmIDMpOworCQlpbWl4X2NvbChEX0tFWVtqXSwgRV9LRVlbaV0pOworCX0KKworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCBhZXNfZW5jcnlwdCh2b2lkICpjdHhfYXJnLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pOworZXh0ZXJuIHZvaWQgYWVzX2RlY3J5cHQodm9pZCAqY3R4X2FyZywgdTggKm91dCwgY29uc3QgdTggKmluKTsKKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFlc19hbGcgPSB7CisJLmNyYV9uYW1lCQk9CSJhZXMiLAorCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPQlBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBhZXNfY3R4KSwKKwkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoYWVzX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5jaXBoZXIgPSB7CisJCQkuY2lhX21pbl9rZXlzaXplCT0JQUVTX01JTl9LRVlfU0laRSwKKwkJCS5jaWFfbWF4X2tleXNpemUJPQlBRVNfTUFYX0tFWV9TSVpFLAorCQkJLmNpYV9zZXRrZXkJICAgCT0gCWFlc19zZXRfa2V5LAorCQkJLmNpYV9lbmNyeXB0CSAJPQlhZXNfZW5jcnlwdCwKKwkJCS5jaWFfZGVjcnlwdAkgIAk9CWFlc19kZWNyeXB0CisJCX0KKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZXNfaW5pdCh2b2lkKQoreworCWdlbl90YWJzKCk7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFlc19hbGcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWVzX2Zpbmkodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc19hbGcpOworfQorCittb2R1bGVfaW5pdChhZXNfaW5pdCk7Cittb2R1bGVfZXhpdChhZXNfZmluaSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUmlqbmRhZWwgKEFFUykgQ2lwaGVyIEFsZ29yaXRobSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwppbmRleCBiMDJkOTIxLi41ZmQwMzIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwpAQCAtMTA3Niw2ICsxMDc2LDEwIEBACiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKIAltY2hlY2tfaW5pdChjKTsKICNlbmRpZgorCWlmIChjID09ICZib290X2NwdV9kYXRhKQorCQltdHJyX2JwX2luaXQoKTsKKwllbHNlCisJCW10cnJfYXBfaW5pdCgpOwogI2lmZGVmIENPTkZJR19OVU1BCiAJaWYgKGMgIT0gJmJvb3RfY3B1X2RhdGEpCiAJCW51bWFfYWRkX2NwdShjIC0gY3B1X2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3N1c3BlbmQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zdXNwZW5kLmMKaW5kZXggNmMwZjQwMmUuLjA2MTI2NDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zdXNwZW5kLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3N1c3BlbmQuYwpAQCAtMTE5LDYgKzExOSw3IEBACiAJZml4X3Byb2Nlc3Nvcl9jb250ZXh0KCk7CiAKIAlkb19mcHVfZW5kKCk7CisJbXRycl9hcF9pbml0KCk7CiB9CiAKIHZvaWQgcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNzMzODlmNS4uNjFjMTI3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTU2LDYgKzU2LDEwIEBACiAgIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgewogCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCiAgIH0KKyAgLiA9IEFMSUdOKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpOworICAuZGF0YS5yZWFkX21vc3RseSA6IEFUKEFERFIoLmRhdGEucmVhZF9tb3N0bHkpIC0gTE9BRF9PRkZTRVQpIHsKKyAgCSooLmRhdGEucmVhZF9tb3N0bHkpCisgIH0KIAogI2RlZmluZSBWU1lTQ0FMTF9BRERSICgtMTAqMTAyNCoxMDI0KQogI2RlZmluZSBWU1lTQ0FMTF9QSFlTX0FERFIgKChMT0FEQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgKyBTSVpFT0YoLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpICsgNDA5NSkgJiB+KDQwOTUpKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMuYwppbmRleCBhYmM4ZWQ2Li43MjcwNTA5IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMuYwpAQCAtNDIsMTIgKzQyLDkgQEAKICNpbmNsdWRlIDxhc20vbW1hbi5oPgogI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2lwYy5oPgogCiBleHRlcm4gdm9pZCBkb19zeXNjYWxsX3RyYWNlKHZvaWQpOwogdHlwZWRlZiBpbnQgKCpzeXNjYWxsX3QpKHZvaWQgKmEwLC4uLik7Ci1leHRlcm4gaW50ICgqZG9fc3lzY2FsbHMpKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzeXNjYWxsX3QgZnVuLAotCQkJCSAgICAgaW50IG5hcmcpOwogZXh0ZXJuIHN5c2NhbGxfdCBzeXNfY2FsbF90YWJsZVtdOwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc3lzX25hcmdfdGFibGVbXTsKIApAQCAtNzIsMTAgKzY5LDggQEAKIC8qCiAgKiBDb21tb24gY29kZSBmb3Igb2xkIGFuZCBuZXcgbW1hcHMuCiAgKi8KLQotc3RhdGljIGlubGluZSBsb25nIGRvX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCi0gICAgCQkJICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCSAgICB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQorbG9uZyBzeXNfbW1hcDIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LAorCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQogewogCWludCBlcnJvciA9IC1FQkFERjsKIAlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBOVUxMOwpAQCAtOTcsMjkgKzkyLDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXVuc2lnbmVkIGxvbmcgb2xkX21tYXAodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3QgbGVuLCBpbnQgcHJvdCwKLQkJICAgICAgIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCi17Ci0JcmV0dXJuIGRvX21tYXAyKGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQgPj4gUEFHRV9TSElGVCk7Ci19Ci0KLWxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZikKLXsKLQlyZXR1cm4gZG9fbW1hcDIoYWRkciwgbGVuLCBwcm90LCBmbGFncywgZmQsIHBnb2ZmKTsKLX0KLQotaW50IHN5c19mb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiBkb19mb3JrKFNJR0NITEQsIHJlZ3MtPmFyZWdbMV0sIHJlZ3MsIDAsIE5VTEwsIE5VTEwpOwotfQotCi1pbnQgc3lzX3Zmb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiBkb19mb3JrKENMT05FX1ZGT1JLfENMT05FX1ZNfFNJR0NITEQsIHJlZ3MtPmFyZWdbMV0sCi0JCSAgICAgICByZWdzLCAwLCBOVUxMLCBOVUxMKTsKLX0KLQogaW50IHN5c19jbG9uZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzOwpAQCAtMTYyLDMwICsxMzQsNiBAQAogCXJldHVybiAtRUZBVUxUOwogfQogCi1pbnQgc3lzX29sZHVuYW1lKHN0cnVjdCBvbGRvbGRfdXRzbmFtZSAqIG5hbWUpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKCFuYW1lKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsbmFtZSxzaXplb2Yoc3RydWN0IG9sZG9sZF91dHNuYW1lKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyb3IgPSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+c3lzbmFtZSwmc3lzdGVtX3V0c25hbWUuc3lzbmFtZSxfX09MRF9VVFNfTEVOKTsKLQllcnJvciAtPSBfX3B1dF91c2VyKDAsbmFtZS0+c3lzbmFtZStfX09MRF9VVFNfTEVOKTsKLQllcnJvciAtPSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+bm9kZW5hbWUsJnN5c3RlbV91dHNuYW1lLm5vZGVuYW1lLF9fT0xEX1VUU19MRU4pOwotCWVycm9yIC09IF9fcHV0X3VzZXIoMCxuYW1lLT5ub2RlbmFtZStfX09MRF9VVFNfTEVOKTsKLQllcnJvciAtPSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+cmVsZWFzZSwmc3lzdGVtX3V0c25hbWUucmVsZWFzZSxfX09MRF9VVFNfTEVOKTsKLQllcnJvciAtPSBfX3B1dF91c2VyKDAsbmFtZS0+cmVsZWFzZStfX09MRF9VVFNfTEVOKTsKLQllcnJvciAtPSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+dmVyc2lvbiwmc3lzdGVtX3V0c25hbWUudmVyc2lvbixfX09MRF9VVFNfTEVOKTsKLQllcnJvciAtPSBfX3B1dF91c2VyKDAsbmFtZS0+dmVyc2lvbitfX09MRF9VVFNfTEVOKTsKLQllcnJvciAtPSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+bWFjaGluZSwmc3lzdGVtX3V0c25hbWUubWFjaGluZSxfX09MRF9VVFNfTEVOKTsKLQllcnJvciAtPSBfX3B1dF91c2VyKDAsbmFtZS0+bWFjaGluZStfX09MRF9VVFNfTEVOKTsKLQotCXJldHVybiBlcnJvciA/IC1FRkFVTFQgOiAwOwotfQotCi0KIC8qCiAgKiBCdWlsZCB0aGUgc3RyaW5nIHRhYmxlIGZvciB0aGUgYnVpbHRpbiAicG9vciBtYW4ncyBzdHJhY2UiLgogICovCkBAIC0zMTksMTAwICsyNjcsMyBAQAogCXJlZ3MtPmFyZWdbMl0gPSByZXM7CiAJZG9fc3lzY2FsbF90cmFjZSgpOwogfQotCi0vKgotICogc3lzX2lwYygpIGlzIHRoZSBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzLi4KLSAqCi0gKiBUaGlzIGlzIHJlYWxseSBob3JyaWJseSB1Z2x5LgotICovCi0KLWludCBzeXNfaXBjICh1aW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwKLQkJCWludCB0aGlyZCwgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCkKLXsKLQlpbnQgdmVyc2lvbiwgcmV0OwotCi0JdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQljYWxsICY9IDB4ZmZmZjsKLQlyZXQgPSAtRU5PU1lTOwotCi0Jc3dpdGNoIChjYWxsKSB7Ci0JY2FzZSBTRU1PUDoKLQkJcmV0ID0gc3lzX3NlbXRpbWVkb3AgKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsCi0JCQkJICAgICBzZWNvbmQsIE5VTEwpOwotCQlicmVhazsKLQotCWNhc2UgU0VNVElNRURPUDoKLQkJcmV0ID0gc3lzX3NlbXRpbWVkb3AgKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsCi0JCQkJICAgICAgc2Vjb25kLCAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICopIGZpZnRoKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNFTUdFVDoKLQkJcmV0ID0gc3lzX3NlbWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOwotCQlicmVhazsKLQotCWNhc2UgU0VNQ1RMOiB7Ci0JCXVuaW9uIHNlbXVuIGZvdXJ0aDsKLQotCQlpZiAocHRyICYmICFnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkICpfX3VzZXIgKikgcHRyKSkKLQkJCXJldCA9IHN5c19zZW1jdGwgKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgpOwotCQlicmVhazsKLQkJfQotCi0JY2FzZSBNU0dTTkQ6Ci0JCXJldCA9IHN5c19tc2dzbmQgKGZpcnN0LCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIqKSBwdHIsCi0JCQkJICBzZWNvbmQsIHRoaXJkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1TR1JDVjoKLQkJc3dpdGNoICh2ZXJzaW9uKSB7Ci0JCWNhc2UgMDogewotCQkJc3RydWN0IGlwY19rbHVkZ2UgdG1wOwotCi0JCQlpZiAocHRyICYmICFjb3B5X2Zyb21fdXNlcigmdG1wLAotCQkJCQkgICAoc3RydWN0IGlwY19rbHVkZ2UgKikgcHRyLAotCQkJCQkgICBzaXplb2YgKHRtcCkpKQotCQkJCXJldCA9IHN5c19tc2dyY3YgKGZpcnN0LCB0bXAubXNncCwgc2Vjb25kLAotCQkJCQkJICB0bXAubXNndHlwLCB0aGlyZCk7Ci0JCQlicmVhazsKLQkJCX0KLQotCQlkZWZhdWx0OgotCQkJcmV0ID0gc3lzX21zZ3JjdiAoZmlyc3QsIChzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqKSBwdHIsCi0JCQkJCSAgc2Vjb25kLCAwLCB0aGlyZCk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgTVNHR0VUOgotCQlyZXQgPSBzeXNfbXNnZ2V0ICgoa2V5X3QpIGZpcnN0LCBzZWNvbmQpOwotCQlicmVhazsKLQotCWNhc2UgTVNHQ1RMOgotCQlyZXQgPSBzeXNfbXNnY3RsIChmaXJzdCwgc2Vjb25kLCAoc3RydWN0IG1zcWlkX2RzIF9fdXNlciopIHB0cik7Ci0JCWJyZWFrOwotCi0JY2FzZSBTSE1BVDogewotCQl1bG9uZyByYWRkcjsKLQkJcmV0ID0gZG9fc2htYXQgKGZpcnN0LCAoY2hhciBfX3VzZXIgKikgcHRyLCBzZWNvbmQsICZyYWRkcik7Ci0KLQkJaWYgKCFyZXQpCi0JCQlyZXQgPSBwdXRfdXNlciAocmFkZHIsICh1bG9uZyBfX3VzZXIgKikgdGhpcmQpOwotCi0JCWJyZWFrOwotCQl9Ci0KLQljYXNlIFNITURUOgotCQlyZXQgPSBzeXNfc2htZHQgKChjaGFyIF9fdXNlciAqKXB0cik7Ci0JCWJyZWFrOwotCi0JY2FzZSBTSE1HRVQ6Ci0JCXJldCA9IHN5c19zaG1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNITUNUTDoKLQkJcmV0ID0gc3lzX3NobWN0bCAoZmlyc3QsIHNlY29uZCwgKHN0cnVjdCBzaG1pZF9kcyBfX3VzZXIqKSBwdHIpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzLmggYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMuaAppbmRleCA1YjNmNzVmLi4wNzU4MDY5IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMuaAorKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMuaApAQCAtMjUsMjAgKzI1LDE5IEBACiAgKi8KIAogU1lTQ0FMTCgwLCAwKQkJICAgICAgICAgICAgICAgIC8qIDAwICovCi0KIFNZU0NBTEwoc3lzX2V4aXQsIDEpCi1TWVNDQUxMKHN5c19mb3JrLCAwKQorU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkKIFNZU0NBTEwoc3lzX3JlYWQsIDMpCiBTWVNDQUxMKHN5c193cml0ZSwgMykKIFNZU0NBTEwoc3lzX29wZW4sIDMpCQkJLyogMDUgKi8KIFNZU0NBTEwoc3lzX2Nsb3NlLCAxKQotU1lTQ0FMTChzeXNfd2FpdHBpZCwgMykKK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDMpCiBTWVNDQUxMKHN5c19jcmVhdCwgMikKIFNZU0NBTEwoc3lzX2xpbmssIDIpCiBTWVNDQUxMKHN5c191bmxpbmssIDEpCQkJLyogMTAgKi8KIFNZU0NBTEwoc3lzX2V4ZWN2ZSwgMCkKIFNZU0NBTEwoc3lzX2NoZGlyLCAxKQotU1lTQ0FMTChzeXNfdGltZSwgMSkKK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDEpCiBTWVNDQUxMKHN5c19ta25vZCwgMykKIFNZU0NBTEwoc3lzX2NobW9kLCAyKQkJCS8qIDE1ICovCiBTWVNDQUxMKHN5c19sY2hvd24sIDMpCkBAIC00NywxOSArNDYsMTkgQEAKIFNZU0NBTEwoc3lzX2xzZWVrLCAzKQogU1lTQ0FMTChzeXNfZ2V0cGlkLCAwKQkJCS8qIDIwICovCiBTWVNDQUxMKHN5c19tb3VudCwgNSkKLVNZU0NBTEwoc3lzX29sZHVtb3VudCwgMSkKK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDEpCiBTWVNDQUxMKHN5c19zZXR1aWQsIDEpCiBTWVNDQUxMKHN5c19nZXR1aWQsIDApCi1TWVNDQUxMKHN5c19zdGltZSwgMSkJCQkvKiAyNSAqLworU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMSkJCS8qIDI1ICovCiBTWVNDQUxMKHN5c19wdHJhY2UsIDQpCi1TWVNDQUxMKHN5c19hbGFybSwgMSkKK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDEpCiBTWVNDQUxMKHN5c19mc3RhdCwgMikKLVNZU0NBTEwoc3lzX3BhdXNlLCAwKQorU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkKIFNZU0NBTEwoc3lzX3V0aW1lLCAyKQkJCS8qIDMwICovCiBTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQogU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkKIFNZU0NBTEwoc3lzX2FjY2VzcywgMikKLVNZU0NBTEwoc3lzX25pY2UsIDEpCitTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAxKQogU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkJCS8qIDM1ICovCiBTWVNDQUxMKHN5c19zeW5jLCAwKQogU1lTQ0FMTChzeXNfa2lsbCwgMikKQEAgLTczLDcgKzcyLDcgQEAKIFNZU0NBTEwoc3lzX2JyaywgMSkJCQkvKiA0NSAqLwogU1lTQ0FMTChzeXNfc2V0Z2lkLCAxKQogU1lTQ0FMTChzeXNfZ2V0Z2lkLCAwKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkJCS8qIHdhcyBzaWduYWwoMikgKi8KK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCiBTWVNDQUxMKHN5c19nZXRldWlkLCAwKQogU1lTQ0FMTChzeXNfZ2V0ZWdpZCwgMCkJCQkvKiA1MCAqLwogU1lTQ0FMTChzeXNfYWNjdCwgMSkKQEAgLTg0LDIxICs4MywyMSBAQAogU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMikKIFNZU0NBTEwoc3lzX3NldHBnaWQsIDIpCiBTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQotU1lTQ0FMTChzeXNfb2xkdW5hbWUsIDEpCitTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQogU1lTQ0FMTChzeXNfdW1hc2ssIDEpCQkJLyogNjAgKi8KIFNZU0NBTEwoc3lzX2Nocm9vdCwgMSkKIFNZU0NBTEwoc3lzX3VzdGF0LCAyKQogU1lTQ0FMTChzeXNfZHVwMiwgMikKIFNZU0NBTEwoc3lzX2dldHBwaWQsIDApCi1TWVNDQUxMKHN5c19nZXRwZ3JwLCAwKQkJCS8qIDY1ICovCitTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQkJLyogNjUgKi8KIFNZU0NBTEwoc3lzX3NldHNpZCwgMCkKIFNZU0NBTEwoc3lzX3NpZ2FjdGlvbiwgMykKLVNZU0NBTEwoc3lzX3NnZXRtYXNrLCAwKQotU1lTQ0FMTChzeXNfc3NldG1hc2ssIDEpCitTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQorU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMSkKIFNZU0NBTEwoc3lzX3NldHJldWlkLCAyKQkJLyogNzAgKi8KIFNZU0NBTEwoc3lzX3NldHJlZ2lkLCAyKQogU1lTQ0FMTChzeXNfc2lnc3VzcGVuZCwgMCkKLVNZU0NBTEwoc3lzX3NpZ3BlbmRpbmcsIDEpCitTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAxKQogU1lTQ0FMTChzeXNfc2V0aG9zdG5hbWUsIDIpCiBTWVNDQUxMKHN5c19zZXRybGltaXQsIDIpCQkvKiA3NSAqLwogU1lTQ0FMTChzeXNfZ2V0cmxpbWl0LCAyKQpAQCAtMTA3LDE1ICsxMDYsMTUgQEAKIFNZU0NBTEwoc3lzX3NldHRpbWVvZmRheSwgMikKIFNZU0NBTEwoc3lzX2dldGdyb3VwcywgMikJCS8qIDgwICovCiBTWVNDQUxMKHN5c19zZXRncm91cHMsIDIpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQkJIC8qIG9sZF9zZWxlY3QgKi8KK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCiBTWVNDQUxMKHN5c19zeW1saW5rLCAyKQogU1lTQ0FMTChzeXNfbHN0YXQsIDIpCiBTWVNDQUxMKHN5c19yZWFkbGluaywgMykJCS8qIDg1ICovCiBTWVNDQUxMKHN5c191c2VsaWIsIDEpCiBTWVNDQUxMKHN5c19zd2Fwb24sIDIpCiBTWVNDQUxMKHN5c19yZWJvb3QsIDMpCi1TWVNDQUxMKG9sZF9yZWFkZGlyLCAzKQotU1lTQ0FMTChvbGRfbW1hcCwgNikJCQkvKiA5MCAqLworU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMykKK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDYpCQkvKiA5MCAqLwogU1lTQ0FMTChzeXNfbXVubWFwLCAyKQogU1lTQ0FMTChzeXNfdHJ1bmNhdGUsIDIpCiBTWVNDQUxMKHN5c19mdHJ1bmNhdGUsIDIpCkBAIC0xMjcsNyArMTI2LDcgQEAKIFNZU0NBTEwoc3lzX3N0YXRmcywgMikKIFNZU0NBTEwoc3lzX2ZzdGF0ZnMsIDIpCQkJLyogMTAwICovCiBTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAzKQotU1lTQ0FMTChzeXNfc29ja2V0Y2FsbCwgMikKK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDIpCiBTWVNDQUxMKHN5c19zeXNsb2csIDMpCiBTWVNDQUxMKHN5c19zZXRpdGltZXIsIDMpCiBTWVNDQUxMKHN5c19nZXRpdGltZXIsIDIpCQkvKiAxMDUgKi8KQEAgLTEzNywzMiArMTM2LDMyIEBACiBTWVNDQUxMKHN5c191bmFtZSwgMSkKIFNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCQkvKiAxMTAgKi8KIFNZU0NBTEwoc3lzX3ZoYW5ndXAsIDApCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQkJLyogd2FzIHN5c19pZGxlKCkgKi8KK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCiBTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQogU1lTQ0FMTChzeXNfd2FpdDQsIDQpCiBTWVNDQUxMKHN5c19zd2Fwb2ZmLCAxKQkJCS8qIDExNSAqLwogU1lTQ0FMTChzeXNfc3lzaW5mbywgMSkKLVNZU0NBTEwoc3lzX2lwYywgNSkgICAJCQkvKiA2IHJlYWxseSwgYnV0IGdsaWJjIHVzZXMgb25seSA1KSAqLworU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkKIFNZU0NBTEwoc3lzX2ZzeW5jLCAxKQogU1lTQ0FMTChzeXNfc2lncmV0dXJuLCAwKQogU1lTQ0FMTChzeXNfY2xvbmUsIDApCQkJLyogMTIwICovCiBTWVNDQUxMKHN5c19zZXRkb21haW5uYW1lLCAyKQogU1lTQ0FMTChzeXNfbmV3dW5hbWUsIDEpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKSAJCS8qIHN5c19tb2RpZnlfbGR0ICovCitTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQogU1lTQ0FMTChzeXNfYWRqdGltZXgsIDEpCiBTWVNDQUxMKHN5c19tcHJvdGVjdCwgMykJCS8qIDEyNSAqLwotU1lTQ0FMTChzeXNfc2lncHJvY21hc2ssIDMpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAyKQkJLyogb2xkIHN5c19jcmVhdGVfbW9kdWxlICovCitTWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAzKQorU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMikKIFNZU0NBTEwoc3lzX2luaXRfbW9kdWxlLCAyKQogU1lTQ0FMTChzeXNfZGVsZXRlX21vZHVsZSwgMSkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDEpCQkvKiBvbGQgc3lzX2dldF9rZXJuZWxfc3lzbSAqLwkvKiAxMzAgKi8KK1NZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDEpCQkvKiAxMzAgKi8KIFNZU0NBTEwoc3lzX3F1b3RhY3RsLCAwKQogU1lTQ0FMTChzeXNfZ2V0cGdpZCwgMSkKIFNZU0NBTEwoc3lzX2ZjaGRpciwgMSkKIFNZU0NBTEwoc3lzX2JkZmx1c2gsIDIpCiBTWVNDQUxMKHN5c19zeXNmcywgMykJCQkvKiAxMzUgKi8KIFNZU0NBTEwoc3lzX3BlcnNvbmFsaXR5LCAxKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkJCS8qIGZvciBhZnNfc3lzY2FsbCAqLworU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkKIFNZU0NBTEwoc3lzX3NldGZzdWlkLCAxKQogU1lTQ0FMTChzeXNfc2V0ZnNnaWQsIDEpCiBTWVNDQUxMKHN5c19sbHNlZWssIDUpCQkJLyogMTQwICovCkBAIC0yMTIsNyArMjExLDcgQEAKIFNZU0NBTEwoc3lzX3NvY2tldHBhaXIsIDQpCiBTWVNDQUxMKHN5c19zZXRyZXN1aWQsIDMpCQkvKiAxODUgKi8KIFNZU0NBTEwoc3lzX2dldHJlc3VpZCwgMykKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDUpCQkvKiBvbGQgc3lzX3F1ZXJ5X21vZHVsZSAqLworU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgNSkKIFNZU0NBTEwoc3lzX3BvbGwsIDMpCiBTWVNDQUxMKHN5c19uZnNzZXJ2Y3RsLCAzKQogU1lTQ0FMTChzeXNfc2V0cmVzZ2lkLCAzKQkJLyogMTkwICovCkBAIC0yMzUsNyArMjM0LDcgQEAKIFNZU0NBTEwoc3lzX3NlbmRmaWxlLCA0KQogU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkKIFNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19tbWFwMiwgNikJCQkvKiAyMTAgKi8KK1NZU0NBTEwoc3lzX21tYXAsIDYpCQkJLyogMjEwICovCiBTWVNDQUxMKHN5c190cnVuY2F0ZTY0LCAyKQogU1lTQ0FMTChzeXNfZnRydW5jYXRlNjQsIDIpCiBTWVNDQUxMKHN5c19zdGF0NjQsIDIpCkBAIC0yNDUsNCArMjQ0LDQgQEAKIFNZU0NBTEwoc3lzX21pbmNvcmUsIDMpCiBTWVNDQUxMKHN5c19tYWR2aXNlLCAzKQogU1lTQ0FMTChzeXNfZ2V0ZGVudHM2NCwgMykKLVNZU0NBTEwoc3lzX3Zmb3JrLCAwKQkJCS8qIDIyMCAqLworU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkJCS8qIDIyMCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCA5MGQ2MDg5Li4yNTZjMGIxIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKIGNvbmZpZyBDUllQVE9fQUVTCiAJdHJpc3RhdGUgIkFFUyBjaXBoZXIgYWxnb3JpdGhtcyIKLQlkZXBlbmRzIG9uIENSWVBUTyAmJiAhKChYODYgfHwgVU1MX1g4NikgJiYgITY0QklUKQorCWRlcGVuZHMgb24gQ1JZUFRPICYmICEoWDg2IHx8IFVNTF9YODYpCiAJaGVscAogCSAgQUVTIGNpcGhlciBhbGdvcml0aG1zIChGSVBTLTE5NykuIEFFUyB1c2VzIHRoZSBSaWpuZGFlbCAKIAkgIGFsZ29yaXRobS4KQEAgLTE4NCw2ICsxODQsMjYgQEAKIAogCSAgU2VlIDxodHRwOi8vY3NyYy5uaXN0Lmdvdi9lbmNyeXB0aW9uL2Flcy8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCitjb25maWcgQ1JZUFRPX0FFU19YODZfNjQKKwl0cmlzdGF0ZSAiQUVTIGNpcGhlciBhbGdvcml0aG1zICh4ODZfNjQpIgorCWRlcGVuZHMgb24gQ1JZUFRPICYmICgoWDg2IHx8IFVNTF9YODYpICYmIDY0QklUKQorCWhlbHAKKwkgIEFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoRklQUy0xOTcpLiBBRVMgdXNlcyB0aGUgUmlqbmRhZWwgCisJICBhbGdvcml0aG0uCisKKwkgIFJpam5kYWVsIGFwcGVhcnMgdG8gYmUgY29uc2lzdGVudGx5IGEgdmVyeSBnb29kIHBlcmZvcm1lciBpbgorCSAgYm90aCBoYXJkd2FyZSBhbmQgc29mdHdhcmUgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBjb21wdXRpbmcgCisJICBlbnZpcm9ubWVudHMgcmVnYXJkbGVzcyBvZiBpdHMgdXNlIGluIGZlZWRiYWNrIG9yIG5vbi1mZWVkYmFjayAKKwkgIG1vZGVzLiBJdHMga2V5IHNldHVwIHRpbWUgaXMgZXhjZWxsZW50LCBhbmQgaXRzIGtleSBhZ2lsaXR5IGlzIAorCSAgZ29vZC4gUmlqbmRhZWwncyB2ZXJ5IGxvdyBtZW1vcnkgcmVxdWlyZW1lbnRzIG1ha2UgaXQgdmVyeSB3ZWxsIAorCSAgc3VpdGVkIGZvciByZXN0cmljdGVkLXNwYWNlIGVudmlyb25tZW50cywgaW4gd2hpY2ggaXQgYWxzbyAKKwkgIGRlbW9uc3RyYXRlcyBleGNlbGxlbnQgcGVyZm9ybWFuY2UuIFJpam5kYWVsJ3Mgb3BlcmF0aW9ucyBhcmUgCisJICBhbW9uZyB0aGUgZWFzaWVzdCB0byBkZWZlbmQgYWdhaW5zdCBwb3dlciBhbmQgdGltaW5nIGF0dGFja3MuCQorCisJICBUaGUgQUVTIHNwZWNpZmllcyB0aHJlZSBrZXkgc2l6ZXM6IDEyOCwgMTkyIGFuZCAyNTYgYml0cwkgIAorCisJICBTZWUgPGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vYWVzLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKIGNvbmZpZyBDUllQVE9fQ0FTVDUKIAl0cmlzdGF0ZSAiQ0FTVDUgKENBU1QtMTI4KSBjaXBoZXIgYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gQ1JZUFRPCmRpZmYgLS1naXQgYS9jcnlwdG8vYXBpLmMgYi9jcnlwdG8vYXBpLmMKaW5kZXggMzk0MTY5YS4uYjQ3Mjg4MSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FwaS5jCisrKyBiL2NyeXB0by9hcGkuYwpAQCAtMTMsOSArMTMsMTIgQEAKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKQEAgLTMzLDcgKzM2LDcgQEAKIAltb2R1bGVfcHV0KGFsZy0+Y3JhX21vZHVsZSk7CiB9CiAKLXN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBjcnlwdG9fYWxnICpxLCAqYWxnID0gTlVMTDsKIApAQCAtNTQsNiArNTcsMTMgQEAKIAlyZXR1cm4gYWxnOwogfQogCisvKiBBIGZhciBtb3JlIGludGVsbGlnZW50IHZlcnNpb24gb2YgdGhpcyBpcyBwbGFubmVkLiAgRm9yIG5vdywganVzdAorICogdHJ5IGFuIGV4YWN0IG1hdGNoIG9uIHRoZSBuYW1lIG9mIHRoZSBhbGdvcml0aG0uICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnX21vZF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoY3J5cHRvX2FsZ19sb29rdXAobmFtZSksIG5hbWUpOworfQorCiBzdGF0aWMgaW50IGNyeXB0b19pbml0X2ZsYWdzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHUzMiBmbGFncykKIHsKIAl0Zm0tPmNydF9mbGFncyA9IDA7CkBAIC0xMTcsMjAgKzEyNyw0NiBAQAogCX0KIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdG9fY3R4c2l6ZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCXN3aXRjaCAoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgeworCWRlZmF1bHQ6CisJCUJVRygpOworCisJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSOgorCQlsZW4gPSBjcnlwdG9fY2lwaGVyX2N0eHNpemUoYWxnLCBmbGFncyk7CisJCWJyZWFrOworCQkKKwljYXNlIENSWVBUT19BTEdfVFlQRV9ESUdFU1Q6CisJCWxlbiA9IGNyeXB0b19kaWdlc3RfY3R4c2l6ZShhbGcsIGZsYWdzKTsKKwkJYnJlYWs7CisJCQorCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTOgorCQlsZW4gPSBjcnlwdG9fY29tcHJlc3NfY3R4c2l6ZShhbGcsIGZsYWdzKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxlbiArIGFsZy0+Y3JhX2FsaWdubWFzazsKK30KKwogc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19hbGxvY190Zm0oY29uc3QgY2hhciAqbmFtZSwgdTMyIGZsYWdzKQogewogCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBOVUxMOwogCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisJdW5zaWduZWQgaW50IHRmbV9zaXplOwogCiAJYWxnID0gY3J5cHRvX2FsZ19tb2RfbG9va3VwKG5hbWUpOwogCWlmIChhbGcgPT0gTlVMTCkKIAkJZ290byBvdXQ7Ci0JCi0JdGZtID0ga21hbGxvYyhzaXplb2YoKnRmbSkgKyBhbGctPmNyYV9jdHhzaXplLCBHRlBfS0VSTkVMKTsKKworCXRmbV9zaXplID0gc2l6ZW9mKCp0Zm0pICsgY3J5cHRvX2N0eHNpemUoYWxnLCBmbGFncyk7CisJdGZtID0ga21hbGxvYyh0Zm1fc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHRmbSA9PSBOVUxMKQogCQlnb3RvIG91dF9wdXQ7CiAKLQltZW1zZXQodGZtLCAwLCBzaXplb2YoKnRmbSkgKyBhbGctPmNyYV9jdHhzaXplKTsKKwltZW1zZXQodGZtLCAwLCB0Zm1fc2l6ZSk7CiAJCiAJdGZtLT5fX2NydF9hbGcgPSBhbGc7CiAJCkBAIC0xNTUsOCArMTkxLDE0IEBACiAKIHZvaWQgY3J5cHRvX2ZyZWVfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7Ci0Jc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IHRmbS0+X19jcnRfYWxnOwotCWludCBzaXplID0gc2l6ZW9mKCp0Zm0pICsgYWxnLT5jcmFfY3R4c2l6ZTsKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOworCWludCBzaXplOworCisJaWYgKHVubGlrZWx5KCF0Zm0pKQorCQlyZXR1cm47CisKKwlhbGcgPSB0Zm0tPl9fY3J0X2FsZzsKKwlzaXplID0gc2l6ZW9mKCp0Zm0pICsgYWxnLT5jcmFfY3R4c2l6ZTsKIAogCWNyeXB0b19leGl0X29wcyh0Zm0pOwogCWNyeXB0b19hbGdfcHV0KGFsZyk7CkBAIC0xNjgsNiArMjEwLDEyIEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGNyeXB0b19hbGcgKnE7CisKKwlpZiAoYWxnLT5jcmFfYWxpZ25tYXNrICYgKGFsZy0+Y3JhX2FsaWdubWFzayArIDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhbGctPmNyYV9hbGlnbm1hc2sgPiBQQUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOwogCQogCWRvd25fd3JpdGUoJmNyeXB0b19hbGdfc2VtKTsKIAkKZGlmZiAtLWdpdCBhL2NyeXB0by9jaXBoZXIuYyBiL2NyeXB0by9jaXBoZXIuYwppbmRleCBmNDM0Y2U3Li4xYzkyYzZiIDEwMDY0NAotLS0gYS9jcnlwdG8vY2lwaGVyLmMKKysrIGIvY3J5cHRvL2NpcGhlci5jCkBAIC00LDYgKzQsNyBAQAogICogQ2lwaGVyIG9wZXJhdGlvbnMuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICogQ29weXJpZ2h0IChjKSAyMDA1IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKQEAgLTIyLDEwICsyMyw2IEBACiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJzY2F0dGVyd2Fsay5oIgogCi10eXBlZGVmIHZvaWQgKGNyeXB0Zm5fdCkodm9pZCAqLCB1OCAqLCBjb25zdCB1OCAqKTsKLXR5cGVkZWYgdm9pZCAocHJvY2ZuX3QpKHN0cnVjdCBjcnlwdG9fdGZtICosIHU4ICosCi0gICAgICAgICAgICAgICAgICAgICAgICB1OCosIGNyeXB0Zm5fdCwgdm9pZCAqKTsKLQogc3RhdGljIGlubGluZSB2b2lkIHhvcl82NCh1OCAqYSwgY29uc3QgdTggKmIpCiB7CiAJKCh1MzIgKilhKVswXSBePSAoKHUzMiAqKWIpWzBdOwpAQCAtMzksNjMgKzM2LDcwIEBACiAJKCh1MzIgKilhKVsyXSBePSAoKHUzMiAqKWIpWzJdOwogCSgodTMyICopYSlbM10gXj0gKCh1MzIgKiliKVszXTsKIH0KLSAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqcHJlcGFyZV9zcmMoc3RydWN0IHNjYXR0ZXJfd2FsayAqd2FsaywgaW50IGJzaXplLAotCQkJCXZvaWQgKnRtcCwgaW50IGluX3BsYWNlKQotewotCXZvaWQgKnNyYyA9IHdhbGstPmRhdGE7Ci0JaW50IG4gPSBic2l6ZTsKIAotCWlmICh1bmxpa2VseShzY2F0dGVyd2Fsa19hY3Jvc3NfcGFnZXMod2FsaywgYnNpemUpKSkgeworc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdF9zbG93KGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcl93YWxrICppbiwKKwkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcl93YWxrICpvdXQsIHVuc2lnbmVkIGludCBic2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgYWxpZ25tYXNrID0gY3J5cHRvX3RmbV9hbGdfYWxpZ25tYXNrKGRlc2MtPnRmbSk7CisJdTggYnVmZmVyW2JzaXplICogMiArIGFsaWdubWFza107CisJdTggKnNyYyA9ICh1OCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKWJ1ZmZlciwgYWxpZ25tYXNrICsgMSk7CisJdTggKmRzdCA9IHNyYyArIGJzaXplOworCXVuc2lnbmVkIGludCBuOworCisJbiA9IHNjYXR0ZXJ3YWxrX2NvcHljaHVua3Moc3JjLCBpbiwgYnNpemUsIDApOworCXNjYXR0ZXJ3YWxrX2FkdmFuY2UoaW4sIG4pOworCisJZGVzYy0+cHJmbihkZXNjLCBkc3QsIHNyYywgYnNpemUpOworCisJbiA9IHNjYXR0ZXJ3YWxrX2NvcHljaHVua3MoZHN0LCBvdXQsIGJzaXplLCAxKTsKKwlzY2F0dGVyd2Fsa19hZHZhbmNlKG91dCwgbik7CisKKwlyZXR1cm4gYnNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0X2Zhc3QoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLAorCQkJCSAgICAgIHN0cnVjdCBzY2F0dGVyX3dhbGsgKmluLAorCQkJCSAgICAgIHN0cnVjdCBzY2F0dGVyX3dhbGsgKm91dCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLCB1OCAqdG1wKQoreworCXU4ICpzcmMsICpkc3Q7CisKKwlzcmMgPSBpbi0+ZGF0YTsKKwlkc3QgPSBzY2F0dGVyd2Fsa19zYW1lYnVmKGluLCBvdXQpID8gc3JjIDogb3V0LT5kYXRhOworCisJaWYgKHRtcCkgeworCQltZW1jcHkodG1wLCBpbi0+ZGF0YSwgbmJ5dGVzKTsKIAkJc3JjID0gdG1wOwotCQluID0gc2NhdHRlcndhbGtfY29weWNodW5rcyhzcmMsIHdhbGssIGJzaXplLCAwKTsKLQl9Ci0Jc2NhdHRlcndhbGtfYWR2YW5jZSh3YWxrLCBuKTsKLQlyZXR1cm4gc3JjOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKnByZXBhcmVfZHN0KHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssIGludCBic2l6ZSwKLQkJCQl2b2lkICp0bXAsIGludCBpbl9wbGFjZSkKLXsKLQl2b2lkICpkc3QgPSB3YWxrLT5kYXRhOwotCi0JaWYgKHVubGlrZWx5KHNjYXR0ZXJ3YWxrX2Fjcm9zc19wYWdlcyh3YWxrLCBic2l6ZSkpIHx8IGluX3BsYWNlKQogCQlkc3QgPSB0bXA7Ci0JcmV0dXJuIGRzdDsKLX0KKwl9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wbGV0ZV9zcmMoc3RydWN0IHNjYXR0ZXJfd2FsayAqd2FsaywgaW50IGJzaXplLAotCQkJCXZvaWQgKnNyYywgaW50IGluX3BsYWNlKQotewotfQorCW5ieXRlcyA9IGRlc2MtPnByZm4oZGVzYywgZHN0LCBzcmMsIG5ieXRlcyk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wbGV0ZV9kc3Qoc3RydWN0IHNjYXR0ZXJfd2FsayAqd2FsaywgaW50IGJzaXplLAotCQkJCXZvaWQgKmRzdCwgaW50IGluX3BsYWNlKQotewotCWludCBuID0gYnNpemU7CisJaWYgKHRtcCkKKwkJbWVtY3B5KG91dC0+ZGF0YSwgdG1wLCBuYnl0ZXMpOwogCi0JaWYgKHVubGlrZWx5KHNjYXR0ZXJ3YWxrX2Fjcm9zc19wYWdlcyh3YWxrLCBic2l6ZSkpKQotCQluID0gc2NhdHRlcndhbGtfY29weWNodW5rcyhkc3QsIHdhbGssIGJzaXplLCAxKTsKLQllbHNlIGlmIChpbl9wbGFjZSkKLQkJbWVtY3B5KHdhbGstPmRhdGEsIGRzdCwgYnNpemUpOwotCXNjYXR0ZXJ3YWxrX2FkdmFuY2Uod2Fsaywgbik7CisJc2NhdHRlcndhbGtfYWR2YW5jZShpbiwgbmJ5dGVzKTsKKwlzY2F0dGVyd2Fsa19hZHZhbmNlKG91dCwgbmJ5dGVzKTsKKworCXJldHVybiBuYnl0ZXM7CiB9CiAKIC8qIAogICogR2VuZXJpYyBlbmNyeXB0L2RlY3J5cHQgd3JhcHBlciBmb3IgY2lwaGVycywgaGFuZGxlcyBvcGVyYXRpb25zIGFjcm9zcwogICogbXVsdGlwbGUgcGFnZSBib3VuZGFyaWVzIGJ5IHVzaW5nIHRlbXBvcmFyeSBibG9ja3MuICBJbiB1c2VyIGNvbnRleHQsCi0gKiB0aGUga2VybmVsIGlzIGdpdmVuIGEgY2hhbmNlIHRvIHNjaGVkdWxlIHVzIG9uY2UgcGVyIGJsb2NrLgorICogdGhlIGtlcm5lbCBpcyBnaXZlbiBhIGNoYW5jZSB0byBzY2hlZHVsZSB1cyBvbmNlIHBlciBwYWdlLgogICovCi1zdGF0aWMgaW50IGNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCitzdGF0aWMgaW50IGNyeXB0KGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywKIAkJIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAogCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIGNyeXB0Zm5fdCBjcmZuLAotICAgICAgICAgICAgICAgICBwcm9jZm5fdCBwcmZuLCB2b2lkICppbmZvKQorCQkgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAlzdHJ1Y3Qgc2NhdHRlcl93YWxrIHdhbGtfaW4sIHdhbGtfb3V0OworCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBkZXNjLT50Zm07CiAJY29uc3QgdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7Ci0JdTggdG1wX3NyY1tic2l6ZV07Ci0JdTggdG1wX2RzdFtic2l6ZV07CisJdW5zaWduZWQgaW50IGFsaWdubWFzayA9IGNyeXB0b190Zm1fYWxnX2FsaWdubWFzayh0Zm0pOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyID0gMDsKIAogCWlmICghbmJ5dGVzKQogCQlyZXR1cm4gMDsKQEAgLTEwOSw2NCArMTEzLDE0NCBAQAogCXNjYXR0ZXJ3YWxrX3N0YXJ0KCZ3YWxrX291dCwgZHN0KTsKIAogCWZvcig7OykgewotCQl1OCAqc3JjX3AsICpkc3RfcDsKLQkJaW50IGluX3BsYWNlOworCQl1bnNpZ25lZCBpbnQgbiA9IG5ieXRlczsKKwkJdTggKnRtcCA9IE5VTEw7CisKKwkJaWYgKCFzY2F0dGVyd2Fsa19hbGlnbmVkKCZ3YWxrX2luLCBhbGlnbm1hc2spIHx8CisJCSAgICAhc2NhdHRlcndhbGtfYWxpZ25lZCgmd2Fsa19vdXQsIGFsaWdubWFzaykpIHsKKwkJCWlmICghYnVmZmVyKSB7CisJCQkJYnVmZmVyID0gX19nZXRfZnJlZV9wYWdlKEdGUF9BVE9NSUMpOworCQkJCWlmICghYnVmZmVyKQorCQkJCQluID0gMDsKKwkJCX0KKwkJCXRtcCA9ICh1OCAqKWJ1ZmZlcjsKKwkJfQogCiAJCXNjYXR0ZXJ3YWxrX21hcCgmd2Fsa19pbiwgMCk7CiAJCXNjYXR0ZXJ3YWxrX21hcCgmd2Fsa19vdXQsIDEpOwogCi0JCWluX3BsYWNlID0gc2NhdHRlcndhbGtfc2FtZWJ1Zigmd2Fsa19pbiwgJndhbGtfb3V0KTsKKwkJbiA9IHNjYXR0ZXJ3YWxrX2NsYW1wKCZ3YWxrX2luLCBuKTsKKwkJbiA9IHNjYXR0ZXJ3YWxrX2NsYW1wKCZ3YWxrX291dCwgbik7CiAKLQkJZG8gewotCQkJc3JjX3AgPSBwcmVwYXJlX3NyYygmd2Fsa19pbiwgYnNpemUsIHRtcF9zcmMsCi0JCQkJCSAgICBpbl9wbGFjZSk7Ci0JCQlkc3RfcCA9IHByZXBhcmVfZHN0KCZ3YWxrX291dCwgYnNpemUsIHRtcF9kc3QsCi0JCQkJCSAgICBpbl9wbGFjZSk7CisJCWlmIChsaWtlbHkobiA+PSBic2l6ZSkpCisJCQluID0gY3J5cHRfZmFzdChkZXNjLCAmd2Fsa19pbiwgJndhbGtfb3V0LCBuLCB0bXApOworCQllbHNlCisJCQluID0gY3J5cHRfc2xvdyhkZXNjLCAmd2Fsa19pbiwgJndhbGtfb3V0LCBic2l6ZSk7CiAKLQkJCXByZm4odGZtLCBkc3RfcCwgc3JjX3AsIGNyZm4sIGluZm8pOwotCi0JCQljb21wbGV0ZV9zcmMoJndhbGtfaW4sIGJzaXplLCBzcmNfcCwgaW5fcGxhY2UpOwotCQkJY29tcGxldGVfZHN0KCZ3YWxrX291dCwgYnNpemUsIGRzdF9wLCBpbl9wbGFjZSk7Ci0KLQkJCW5ieXRlcyAtPSBic2l6ZTsKLQkJfSB3aGlsZSAobmJ5dGVzICYmCi0JCQkgIXNjYXR0ZXJ3YWxrX2Fjcm9zc19wYWdlcygmd2Fsa19pbiwgYnNpemUpICYmCi0JCQkgIXNjYXR0ZXJ3YWxrX2Fjcm9zc19wYWdlcygmd2Fsa19vdXQsIGJzaXplKSk7CisJCW5ieXRlcyAtPSBuOwogCiAJCXNjYXR0ZXJ3YWxrX2RvbmUoJndhbGtfaW4sIDAsIG5ieXRlcyk7CiAJCXNjYXR0ZXJ3YWxrX2RvbmUoJndhbGtfb3V0LCAxLCBuYnl0ZXMpOwogCiAJCWlmICghbmJ5dGVzKQotCQkJcmV0dXJuIDA7CisJCQlicmVhazsKIAogCQljcnlwdG9feWllbGQodGZtKTsKIAl9CisKKwlpZiAoYnVmZmVyKQorCQlmcmVlX3BhZ2UoYnVmZmVyKTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjYmNfcHJvY2Vzc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIHU4ICpzcmMsCi0JCQkJY3J5cHRmbl90IGZuLCB2b2lkICppbmZvKQorc3RhdGljIGludCBjcnlwdF9pdl91bmFsaWduZWQoc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0JdTggKml2ID0gaW5mbzsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gZGVzYy0+dGZtOworCXVuc2lnbmVkIGludCBhbGlnbm1hc2sgPSBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2sodGZtKTsKKwl1OCAqaXYgPSBkZXNjLT5pbmZvOwogCi0JdGZtLT5jcnRfdS5jaXBoZXIuY2l0X3hvcl9ibG9jayhpdiwgc3JjKTsKLQlmbihjcnlwdG9fdGZtX2N0eCh0Zm0pLCBkc3QsIGl2KTsKLQltZW1jcHkoaXYsIGRzdCwgY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkpOworCWlmICh1bmxpa2VseSgoKHVuc2lnbmVkIGxvbmcpaXYgJiBhbGlnbm1hc2spKSkgeworCQl1bnNpZ25lZCBpbnQgaXZzaXplID0gdGZtLT5jcnRfY2lwaGVyLmNpdF9pdnNpemU7CisJCXU4IGJ1ZmZlcltpdnNpemUgKyBhbGlnbm1hc2tdOworCQl1OCAqdG1wID0gKHU4ICopQUxJR04oKHVuc2lnbmVkIGxvbmcpYnVmZmVyLCBhbGlnbm1hc2sgKyAxKTsKKwkJaW50IGVycjsKKworCQlkZXNjLT5pbmZvID0gbWVtY3B5KHRtcCwgaXYsIGl2c2l6ZSk7CisJCWVyciA9IGNyeXB0KGRlc2MsIGRzdCwgc3JjLCBuYnl0ZXMpOworCQltZW1jcHkoaXYsIHRtcCwgaXZzaXplKTsKKworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBjcnlwdChkZXNjLCBkc3QsIHNyYywgbmJ5dGVzKTsKIH0KIAotc3RhdGljIHZvaWQgY2JjX3Byb2Nlc3NfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCB1OCAqc3JjLAotCQkJCWNyeXB0Zm5fdCBmbiwgdm9pZCAqaW5mbykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2JjX3Byb2Nlc3NfZW5jcnlwdChjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJCXU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisJCQkJCXVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0JdTggKml2ID0gaW5mbzsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gZGVzYy0+dGZtOworCXZvaWQgKCp4b3IpKHU4ICosIGNvbnN0IHU4ICopID0gdGZtLT5jcnRfdS5jaXBoZXIuY2l0X3hvcl9ibG9jazsKKwlpbnQgYnNpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsKIAotCWZuKGNyeXB0b190Zm1fY3R4KHRmbSksIGRzdCwgc3JjKTsKLQl0Zm0tPmNydF91LmNpcGhlci5jaXRfeG9yX2Jsb2NrKGRzdCwgaXYpOwotCW1lbWNweShpdiwgc3JjLCBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKSk7CisJdm9pZCAoKmZuKSh2b2lkICosIHU4ICosIGNvbnN0IHU4ICopID0gZGVzYy0+Y3JmbjsKKwl1OCAqaXYgPSBkZXNjLT5pbmZvOworCXVuc2lnbmVkIGludCBkb25lID0gMDsKKworCWRvIHsKKwkJeG9yKGl2LCBzcmMpOworCQlmbihjcnlwdG9fdGZtX2N0eCh0Zm0pLCBkc3QsIGl2KTsKKwkJbWVtY3B5KGl2LCBkc3QsIGJzaXplKTsKKworCQlzcmMgKz0gYnNpemU7CisJCWRzdCArPSBic2l6ZTsKKwl9IHdoaWxlICgoZG9uZSArPSBic2l6ZSkgPCBuYnl0ZXMpOworCisJcmV0dXJuIGRvbmU7CiB9CiAKLXN0YXRpYyB2b2lkIGVjYl9wcm9jZXNzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIHU4ICpzcmMsCi0JCQljcnlwdGZuX3QgZm4sIHZvaWQgKmluZm8pCitzdGF0aWMgdW5zaWduZWQgaW50IGNiY19wcm9jZXNzX2RlY3J5cHQoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLAorCQkJCQl1OCAqZHN0LCBjb25zdCB1OCAqc3JjLAorCQkJCQl1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewotCWZuKGNyeXB0b190Zm1fY3R4KHRmbSksIGRzdCwgc3JjKTsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gZGVzYy0+dGZtOworCXZvaWQgKCp4b3IpKHU4ICosIGNvbnN0IHU4ICopID0gdGZtLT5jcnRfdS5jaXBoZXIuY2l0X3hvcl9ibG9jazsKKwlpbnQgYnNpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsKKworCXU4IHN0YWNrW3NyYyA9PSBkc3QgPyBic2l6ZSA6IDBdOworCXU4ICpidWYgPSBzdGFjazsKKwl1OCAqKmRzdF9wID0gc3JjID09IGRzdCA/ICZidWYgOiAmZHN0OworCisJdm9pZCAoKmZuKSh2b2lkICosIHU4ICosIGNvbnN0IHU4ICopID0gZGVzYy0+Y3JmbjsKKwl1OCAqaXYgPSBkZXNjLT5pbmZvOworCXVuc2lnbmVkIGludCBkb25lID0gMDsKKworCWRvIHsKKwkJdTggKnRtcF9kc3QgPSAqZHN0X3A7CisKKwkJZm4oY3J5cHRvX3RmbV9jdHgodGZtKSwgdG1wX2RzdCwgc3JjKTsKKwkJeG9yKHRtcF9kc3QsIGl2KTsKKwkJbWVtY3B5KGl2LCBzcmMsIGJzaXplKTsKKwkJaWYgKHRtcF9kc3QgIT0gZHN0KQorCQkJbWVtY3B5KGRzdCwgdG1wX2RzdCwgYnNpemUpOworCisJCXNyYyArPSBic2l6ZTsKKwkJZHN0ICs9IGJzaXplOworCX0gd2hpbGUgKChkb25lICs9IGJzaXplKSA8IG5ieXRlcyk7CisKKwlyZXR1cm4gZG9uZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlY2JfcHJvY2Vzcyhjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsIHU4ICpkc3QsCisJCQkJY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gZGVzYy0+dGZtOworCWludCBic2l6ZSA9IGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pOworCXZvaWQgKCpmbikodm9pZCAqLCB1OCAqLCBjb25zdCB1OCAqKSA9IGRlc2MtPmNyZm47CisJdW5zaWduZWQgaW50IGRvbmUgPSAwOworCisJZG8geworCQlmbihjcnlwdG9fdGZtX2N0eCh0Zm0pLCBkc3QsIHNyYyk7CisKKwkJc3JjICs9IGJzaXplOworCQlkc3QgKz0gYnNpemU7CisJfSB3aGlsZSAoKGRvbmUgKz0gYnNpemUpIDwgbmJ5dGVzKTsKKworCXJldHVybiBkb25lOwogfQogCiBzdGF0aWMgaW50IHNldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQpAQCAtMTg1LDkgKzI2OSwxNCBAQAogCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewotCXJldHVybiBjcnlwdCh0Zm0sIGRzdCwgc3JjLCBuYnl0ZXMsCi0JICAgICAgICAgICAgIHRmbS0+X19jcnRfYWxnLT5jcmFfY2lwaGVyLmNpYV9lbmNyeXB0LAotCSAgICAgICAgICAgICBlY2JfcHJvY2VzcywgTlVMTCk7CisJc3RydWN0IGNpcGhlcl9kZXNjIGRlc2M7CisJc3RydWN0IGNpcGhlcl9hbGcgKmNpcGhlciA9ICZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlcjsKKworCWRlc2MudGZtID0gdGZtOworCWRlc2MuY3JmbiA9IGNpcGhlci0+Y2lhX2VuY3J5cHQ7CisJZGVzYy5wcmZuID0gY2lwaGVyLT5jaWFfZW5jcnlwdF9lY2IgPzogZWNiX3Byb2Nlc3M7CisKKwlyZXR1cm4gY3J5cHQoJmRlc2MsIGRzdCwgc3JjLCBuYnl0ZXMpOwogfQogCiBzdGF0aWMgaW50IGVjYl9kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCkBAIC0xOTUsOSArMjg0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAogCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQlyZXR1cm4gY3J5cHQodGZtLCBkc3QsIHNyYywgbmJ5dGVzLAotCSAgICAgICAgICAgICB0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlci5jaWFfZGVjcnlwdCwKLQkgICAgICAgICAgICAgZWNiX3Byb2Nlc3MsIE5VTEwpOworCXN0cnVjdCBjaXBoZXJfZGVzYyBkZXNjOworCXN0cnVjdCBjaXBoZXJfYWxnICpjaXBoZXIgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CisKKwlkZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmNyZm4gPSBjaXBoZXItPmNpYV9kZWNyeXB0OworCWRlc2MucHJmbiA9IGNpcGhlci0+Y2lhX2RlY3J5cHRfZWNiID86IGVjYl9wcm9jZXNzOworCisJcmV0dXJuIGNyeXB0KCZkZXNjLCBkc3QsIHNyYywgbmJ5dGVzKTsKIH0KIAogc3RhdGljIGludCBjYmNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLApAQCAtMjA1LDkgKzI5OSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKIAkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0JcmV0dXJuIGNyeXB0KHRmbSwgZHN0LCBzcmMsIG5ieXRlcywKLQkgICAgICAgICAgICAgdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXIuY2lhX2VuY3J5cHQsCi0JICAgICAgICAgICAgIGNiY19wcm9jZXNzX2VuY3J5cHQsIHRmbS0+Y3J0X2NpcGhlci5jaXRfaXYpOworCXN0cnVjdCBjaXBoZXJfZGVzYyBkZXNjOworCXN0cnVjdCBjaXBoZXJfYWxnICpjaXBoZXIgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CisKKwlkZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmNyZm4gPSBjaXBoZXItPmNpYV9lbmNyeXB0OworCWRlc2MucHJmbiA9IGNpcGhlci0+Y2lhX2VuY3J5cHRfY2JjID86IGNiY19wcm9jZXNzX2VuY3J5cHQ7CisJZGVzYy5pbmZvID0gdGZtLT5jcnRfY2lwaGVyLmNpdF9pdjsKKworCXJldHVybiBjcnlwdCgmZGVzYywgZHN0LCBzcmMsIG5ieXRlcyk7CiB9CiAKIHN0YXRpYyBpbnQgY2JjX2VuY3J5cHRfaXYoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKQEAgLTIxNSw5ICszMTUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHU4ICppdikKIHsKLQlyZXR1cm4gY3J5cHQodGZtLCBkc3QsIHNyYywgbmJ5dGVzLAotCSAgICAgICAgICAgICB0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlci5jaWFfZW5jcnlwdCwKLQkgICAgICAgICAgICAgY2JjX3Byb2Nlc3NfZW5jcnlwdCwgaXYpOworCXN0cnVjdCBjaXBoZXJfZGVzYyBkZXNjOworCXN0cnVjdCBjaXBoZXJfYWxnICpjaXBoZXIgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CisKKwlkZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmNyZm4gPSBjaXBoZXItPmNpYV9lbmNyeXB0OworCWRlc2MucHJmbiA9IGNpcGhlci0+Y2lhX2VuY3J5cHRfY2JjID86IGNiY19wcm9jZXNzX2VuY3J5cHQ7CisJZGVzYy5pbmZvID0gaXY7CisKKwlyZXR1cm4gY3J5cHRfaXZfdW5hbGlnbmVkKCZkZXNjLCBkc3QsIHNyYywgbmJ5dGVzKTsKIH0KIAogc3RhdGljIGludCBjYmNfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLApAQCAtMjI1LDkgKzMzMSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKIAkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0JcmV0dXJuIGNyeXB0KHRmbSwgZHN0LCBzcmMsIG5ieXRlcywKLQkgICAgICAgICAgICAgdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXIuY2lhX2RlY3J5cHQsCi0JICAgICAgICAgICAgIGNiY19wcm9jZXNzX2RlY3J5cHQsIHRmbS0+Y3J0X2NpcGhlci5jaXRfaXYpOworCXN0cnVjdCBjaXBoZXJfZGVzYyBkZXNjOworCXN0cnVjdCBjaXBoZXJfYWxnICpjaXBoZXIgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CisKKwlkZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmNyZm4gPSBjaXBoZXItPmNpYV9kZWNyeXB0OworCWRlc2MucHJmbiA9IGNpcGhlci0+Y2lhX2RlY3J5cHRfY2JjID86IGNiY19wcm9jZXNzX2RlY3J5cHQ7CisJZGVzYy5pbmZvID0gdGZtLT5jcnRfY2lwaGVyLmNpdF9pdjsKKworCXJldHVybiBjcnlwdCgmZGVzYywgZHN0LCBzcmMsIG5ieXRlcyk7CiB9CiAKIHN0YXRpYyBpbnQgY2JjX2RlY3J5cHRfaXYoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKQEAgLTIzNSw5ICszNDcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHU4ICppdikKIHsKLQlyZXR1cm4gY3J5cHQodGZtLCBkc3QsIHNyYywgbmJ5dGVzLAotCSAgICAgICAgICAgICB0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlci5jaWFfZGVjcnlwdCwKLQkgICAgICAgICAgICAgY2JjX3Byb2Nlc3NfZGVjcnlwdCwgaXYpOworCXN0cnVjdCBjaXBoZXJfZGVzYyBkZXNjOworCXN0cnVjdCBjaXBoZXJfYWxnICpjaXBoZXIgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CisKKwlkZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmNyZm4gPSBjaXBoZXItPmNpYV9kZWNyeXB0OworCWRlc2MucHJmbiA9IGNpcGhlci0+Y2lhX2RlY3J5cHRfY2JjID86IGNiY19wcm9jZXNzX2RlY3J5cHQ7CisJZGVzYy5pbmZvID0gaXY7CisKKwlyZXR1cm4gY3J5cHRfaXZfdW5hbGlnbmVkKCZkZXNjLCBkc3QsIHNyYywgbmJ5dGVzKTsKIH0KIAogc3RhdGljIGludCBub2NyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCkBAIC0zMDYsNiArNDI0LDggQEAKIAl9CiAJCiAJaWYgKG9wcy0+Y2l0X21vZGUgPT0gQ1JZUFRPX1RGTV9NT0RFX0NCQykgeworCQl1bnNpZ25lZCBpbnQgYWxpZ247CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAkgICAgCQogCSAgICAJc3dpdGNoIChjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKSkgewogCSAgICAJY2FzZSA4OgpAQCAtMzI1LDkgKzQ0NSwxMSBAQAogCSAgICAJfQogCSAgICAJCiAJCW9wcy0+Y2l0X2l2c2l6ZSA9IGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pOwotCSAgICAJb3BzLT5jaXRfaXYgPSBrbWFsbG9jKG9wcy0+Y2l0X2l2c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChvcHMtPmNpdF9pdiA9PSBOVUxMKQotCQkJcmV0ID0gLUVOT01FTTsKKwkJYWxpZ24gPSBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2sodGZtKSArIDE7CisJCWFkZHIgPSAodW5zaWduZWQgbG9uZyljcnlwdG9fdGZtX2N0eCh0Zm0pOworCQlhZGRyID0gQUxJR04oYWRkciwgYWxpZ24pOworCQlhZGRyICs9IEFMSUdOKHRmbS0+X19jcnRfYWxnLT5jcmFfY3R4c2l6ZSwgYWxpZ24pOworCQlvcHMtPmNpdF9pdiA9ICh2b2lkICopYWRkcjsKIAl9CiAKIG91dDoJCkBAIC0zMzYsNiArNDU4LDQgQEAKIAogdm9pZCBjcnlwdG9fZXhpdF9jaXBoZXJfb3BzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7Ci0JaWYgKHRmbS0+Y3J0X2NpcGhlci5jaXRfaXYpCi0JCWtmcmVlKHRmbS0+Y3J0X2NpcGhlci5jaXRfaXYpOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rlcy5jIGIvY3J5cHRvL2Rlcy5jCmluZGV4IDFjN2U2ZGUuLmEzYzg2M2QgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kZXMuYworKysgYi9jcnlwdG8vZGVzLmMKQEAgLTEsMTggKzEsOSBAQAotLyogCisvKgogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogREVTICYgVHJpcGxlIERFUyBFREUgQ2lwaGVyIEFsZ29yaXRobXMuCiAgKgotICogT3JpZ2luYWxseSByZWxlYXNlZCBhcyBkZXNjb3JlIGJ5IERhbmEgTC4gSG93IDxob3dAaXNsLnN0YW5mb3JkLmVkdT4uCi0gKiBNb2RpZmllZCBieSBSYWltYXIgRmFsa2UgPHJmMTNAaW5mLnR1LWRyZXNkZW4uZGU+IGZvciB0aGUgTGludXgtS2VybmVsLgotICogRGVyaXZlZCBmcm9tIENyeXB0b2FwaSBhbmQgTmV0dGxlIGltcGxlbWVudGF0aW9ucywgYWRhcHRlZCBmb3IgaW4tcGxhY2UKLSAqIHNjYXR0ZXJsaXN0IGludGVyZmFjZS4gIENoYW5nZWQgTEdQTCB0byBHUEwgcGVyIHNlY3Rpb24gMyBvZiB0aGUgTEdQTC4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIgRGFuYSBMLiBIb3cuCi0gKiBDb3B5cmlnaHQgKGMpIFJhaW1hciBGYWxrZSA8cmYxM0BpbmYudHUtZHJlc2Rlbi5kZT4gCi0gKiBDb3B5cmlnaHQgKGMpIEdpc2xlIFPmbGVuc21pbmRlIDxnaXNsZUBpaS51aWIubm8+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgTmllbHMgTfZsbGVyLgotICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICogQ29weXJpZ2h0IChjKSAyMDA1IERhZyBBcm5lIE9zdmlrIDxkYUBvc3Zpay5ubz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIwLDExICsxMSwxMSBAQAogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAKICNkZWZpbmUgREVTX0tFWV9TSVpFCQk4CkBAIC0zNSwxMTU3ICsyNiw4MjYgQEAKICNkZWZpbmUgREVTM19FREVfRVhQS0VZX1dPUkRTCSgzICogREVTX0VYUEtFWV9XT1JEUykKICNkZWZpbmUgREVTM19FREVfQkxPQ0tfU0laRQlERVNfQkxPQ0tfU0laRQogCi0jZGVmaW5lIFJPUihkLGMsbykJKChkKSA9IChkKSA+PiAoYykgfCAoZCkgPDwgKG8pKQorI2RlZmluZSBST0woeCwgcikgKCh4KSA9IHJvbDMyKCh4KSwgKHIpKSkKKyNkZWZpbmUgUk9SKHgsIHIpICgoeCkgPSByb3IzMigoeCksIChyKSkpCiAKIHN0cnVjdCBkZXNfY3R4IHsKLQl1OCBpdltERVNfQkxPQ0tfU0laRV07CiAJdTMyIGV4cGtleVtERVNfRVhQS0VZX1dPUkRTXTsKIH07CiAKIHN0cnVjdCBkZXMzX2VkZV9jdHggewotCXU4IGl2W0RFU19CTE9DS19TSVpFXTsKIAl1MzIgZXhwa2V5W0RFUzNfRURFX0VYUEtFWV9XT1JEU107CiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGRlc19rZXltYXBbXSA9IHsKLQkweDAyMDgwMDA4LCAweDAyMDgyMDAwLCAweDAwMDAyMDA4LCAweDAwMDAwMDAwLAotCTB4MDIwMDIwMDAsIDB4MDAwODAwMDgsIDB4MDIwODAwMDAsIDB4MDIwODIwMDgsCi0JMHgwMDAwMDAwOCwgMHgwMjAwMDAwMCwgMHgwMDA4MjAwMCwgMHgwMDAwMjAwOCwKLQkweDAwMDgyMDA4LCAweDAyMDAyMDA4LCAweDAyMDAwMDA4LCAweDAyMDgwMDAwLAotCTB4MDAwMDIwMDAsIDB4MDAwODIwMDgsIDB4MDAwODAwMDgsIDB4MDIwMDIwMDAsCi0JMHgwMjA4MjAwOCwgMHgwMjAwMDAwOCwgMHgwMDAwMDAwMCwgMHgwMDA4MjAwMCwKLQkweDAyMDAwMDAwLCAweDAwMDgwMDAwLCAweDAyMDAyMDA4LCAweDAyMDgwMDA4LAotCTB4MDAwODAwMDAsIDB4MDAwMDIwMDAsIDB4MDIwODIwMDAsIDB4MDAwMDAwMDgsCi0JMHgwMDA4MDAwMCwgMHgwMDAwMjAwMCwgMHgwMjAwMDAwOCwgMHgwMjA4MjAwOCwKLQkweDAwMDAyMDA4LCAweDAyMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDgyMDAwLAotCTB4MDIwODAwMDgsIDB4MDIwMDIwMDgsIDB4MDIwMDIwMDAsIDB4MDAwODAwMDgsCi0JMHgwMjA4MjAwMCwgMHgwMDAwMDAwOCwgMHgwMDA4MDAwOCwgMHgwMjAwMjAwMCwKLQkweDAyMDgyMDA4LCAweDAwMDgwMDAwLCAweDAyMDgwMDAwLCAweDAyMDAwMDA4LAotCTB4MDAwODIwMDAsIDB4MDAwMDIwMDgsIDB4MDIwMDIwMDgsIDB4MDIwODAwMDAsCi0JMHgwMDAwMDAwOCwgMHgwMjA4MjAwMCwgMHgwMDA4MjAwOCwgMHgwMDAwMDAwMCwKLQkweDAyMDAwMDAwLCAweDAyMDgwMDA4LCAweDAwMDAyMDAwLCAweDAwMDgyMDA4LAorLyogTG9va3VwIHRhYmxlcyBmb3Iga2V5IGV4cGFuc2lvbiAqLwogCi0JMHgwODAwMDAwNCwgMHgwMDAyMDAwNCwgMHgwMDAwMDAwMCwgMHgwODAyMDIwMCwKLQkweDAwMDIwMDA0LCAweDAwMDAwMjAwLCAweDA4MDAwMjA0LCAweDAwMDIwMDAwLAotCTB4MDAwMDAyMDQsIDB4MDgwMjAyMDQsIDB4MDAwMjAyMDAsIDB4MDgwMDAwMDAsCi0JMHgwODAwMDIwMCwgMHgwODAwMDAwNCwgMHgwODAyMDAwMCwgMHgwMDAyMDIwNCwKLQkweDAwMDIwMDAwLCAweDA4MDAwMjA0LCAweDA4MDIwMDA0LCAweDAwMDAwMDAwLAotCTB4MDAwMDAyMDAsIDB4MDAwMDAwMDQsIDB4MDgwMjAyMDAsIDB4MDgwMjAwMDQsCi0JMHgwODAyMDIwNCwgMHgwODAyMDAwMCwgMHgwODAwMDAwMCwgMHgwMDAwMDIwNCwKLQkweDAwMDAwMDA0LCAweDAwMDIwMjAwLCAweDAwMDIwMjA0LCAweDA4MDAwMjAwLAotCTB4MDAwMDAyMDQsIDB4MDgwMDAwMDAsIDB4MDgwMDAyMDAsIDB4MDAwMjAyMDQsCi0JMHgwODAyMDIwMCwgMHgwMDAyMDAwNCwgMHgwMDAwMDAwMCwgMHgwODAwMDIwMCwKLQkweDA4MDAwMDAwLCAweDAwMDAwMjAwLCAweDA4MDIwMDA0LCAweDAwMDIwMDAwLAotCTB4MDAwMjAwMDQsIDB4MDgwMjAyMDQsIDB4MDAwMjAyMDAsIDB4MDAwMDAwMDQsCi0JMHgwODAyMDIwNCwgMHgwMDAyMDIwMCwgMHgwMDAyMDAwMCwgMHgwODAwMDIwNCwKLQkweDA4MDAwMDA0LCAweDA4MDIwMDAwLCAweDAwMDIwMjA0LCAweDAwMDAwMDAwLAotCTB4MDAwMDAyMDAsIDB4MDgwMDAwMDQsIDB4MDgwMDAyMDQsIDB4MDgwMjAyMDAsCi0JMHgwODAyMDAwMCwgMHgwMDAwMDIwNCwgMHgwMDAwMDAwNCwgMHgwODAyMDAwNCwKLQotCTB4ODAwNDAxMDAsIDB4MDEwMDAxMDAsIDB4ODAwMDAwMDAsIDB4ODEwNDAxMDAsCi0JMHgwMDAwMDAwMCwgMHgwMTA0MDAwMCwgMHg4MTAwMDEwMCwgMHg4MDA0MDAwMCwKLQkweDAxMDQwMTAwLCAweDgxMDAwMDAwLCAweDAxMDAwMDAwLCAweDgwMDAwMTAwLAotCTB4ODEwMDAwMDAsIDB4ODAwNDAxMDAsIDB4MDAwNDAwMDAsIDB4MDEwMDAwMDAsCi0JMHg4MTA0MDAwMCwgMHgwMDA0MDEwMCwgMHgwMDAwMDEwMCwgMHg4MDAwMDAwMCwKLQkweDAwMDQwMTAwLCAweDgxMDAwMTAwLCAweDAxMDQwMDAwLCAweDAwMDAwMTAwLAotCTB4ODAwMDAxMDAsIDB4MDAwMDAwMDAsIDB4ODAwNDAwMDAsIDB4MDEwNDAxMDAsCi0JMHgwMTAwMDEwMCwgMHg4MTA0MDAwMCwgMHg4MTA0MDEwMCwgMHgwMDA0MDAwMCwKLQkweDgxMDQwMDAwLCAweDgwMDAwMTAwLCAweDAwMDQwMDAwLCAweDgxMDAwMDAwLAotCTB4MDAwNDAxMDAsIDB4MDEwMDAxMDAsIDB4ODAwMDAwMDAsIDB4MDEwNDAwMDAsCi0JMHg4MTAwMDEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDEwMCwgMHg4MDA0MDAwMCwKLQkweDAwMDAwMDAwLCAweDgxMDQwMDAwLCAweDAxMDQwMTAwLCAweDAwMDAwMTAwLAotCTB4MDEwMDAwMDAsIDB4ODEwNDAxMDAsIDB4ODAwNDAxMDAsIDB4MDAwNDAwMDAsCi0JMHg4MTA0MDEwMCwgMHg4MDAwMDAwMCwgMHgwMTAwMDEwMCwgMHg4MDA0MDEwMCwKLQkweDgwMDQwMDAwLCAweDAwMDQwMTAwLCAweDAxMDQwMDAwLCAweDgxMDAwMTAwLAotCTB4ODAwMDAxMDAsIDB4MDEwMDAwMDAsIDB4ODEwMDAwMDAsIDB4MDEwNDAxMDAsCi0KLQkweDA0MDEwODAxLCAweDAwMDAwMDAwLCAweDAwMDEwODAwLCAweDA0MDEwMDAwLAotCTB4MDQwMDAwMDEsIDB4MDAwMDA4MDEsIDB4MDQwMDA4MDAsIDB4MDAwMTA4MDAsCi0JMHgwMDAwMDgwMCwgMHgwNDAxMDAwMSwgMHgwMDAwMDAwMSwgMHgwNDAwMDgwMCwKLQkweDAwMDEwMDAxLCAweDA0MDEwODAwLCAweDA0MDEwMDAwLCAweDAwMDAwMDAxLAotCTB4MDAwMTAwMDAsIDB4MDQwMDA4MDEsIDB4MDQwMTAwMDEsIDB4MDAwMDA4MDAsCi0JMHgwMDAxMDgwMSwgMHgwNDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMSwKLQkweDA0MDAwODAxLCAweDAwMDEwODAxLCAweDA0MDEwODAwLCAweDA0MDAwMDAxLAotCTB4MDQwMDAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMDA4MDEsIDB4MDQwMTA4MDEsCi0JMHgwMDAxMDAwMSwgMHgwNDAxMDgwMCwgMHgwNDAwMDgwMCwgMHgwMDAxMDgwMSwKLQkweDA0MDEwODAxLCAweDAwMDEwMDAxLCAweDA0MDAwMDAxLCAweDAwMDAwMDAwLAotCTB4MDQwMDAwMDAsIDB4MDAwMDA4MDEsIDB4MDAwMTAwMDAsIDB4MDQwMTAwMDEsCi0JMHgwMDAwMDgwMCwgMHgwNDAwMDAwMCwgMHgwMDAxMDgwMSwgMHgwNDAwMDgwMSwKLQkweDA0MDEwODAwLCAweDAwMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDAwMDAxLAotCTB4MDAwMDAwMDEsIDB4MDQwMTA4MDEsIDB4MDAwMTA4MDAsIDB4MDQwMTAwMDAsCi0JMHgwNDAxMDAwMSwgMHgwMDAxMDAwMCwgMHgwMDAwMDgwMSwgMHgwNDAwMDgwMCwKLQkweDA0MDAwODAxLCAweDAwMDAwMDAxLCAweDA0MDEwMDAwLCAweDAwMDEwODAwLAotCi0JMHgwMDAwMDQwMCwgMHgwMDAwMDAyMCwgMHgwMDEwMDAyMCwgMHg0MDEwMDAwMCwKLQkweDQwMTAwNDIwLCAweDQwMDAwNDAwLCAweDAwMDAwNDIwLCAweDAwMDAwMDAwLAotCTB4MDAxMDAwMDAsIDB4NDAxMDAwMjAsIDB4NDAwMDAwMjAsIDB4MDAxMDA0MDAsCi0JMHg0MDAwMDAwMCwgMHgwMDEwMDQyMCwgMHgwMDEwMDQwMCwgMHg0MDAwMDAyMCwKLQkweDQwMTAwMDIwLCAweDAwMDAwNDAwLCAweDQwMDAwNDAwLCAweDQwMTAwNDIwLAotCTB4MDAwMDAwMDAsIDB4MDAxMDAwMjAsIDB4NDAxMDAwMDAsIDB4MDAwMDA0MjAsCi0JMHg0MDEwMDQwMCwgMHg0MDAwMDQyMCwgMHgwMDEwMDQyMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwNDIwLCAweDQwMTAwNDAwLCAweDAwMDAwMDIwLCAweDAwMTAwMDAwLAotCTB4NDAwMDA0MjAsIDB4MDAxMDA0MDAsIDB4NDAxMDA0MDAsIDB4NDAwMDAwMjAsCi0JMHgwMDAwMDQwMCwgMHgwMDAwMDAyMCwgMHgwMDEwMDAwMCwgMHg0MDEwMDQwMCwKLQkweDQwMTAwMDIwLCAweDQwMDAwNDIwLCAweDAwMDAwNDIwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMjAsIDB4NDAxMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAxMDAwMjAsCi0JMHgwMDAwMDAwMCwgMHg0MDEwMDAyMCwgMHgwMDEwMDAyMCwgMHgwMDAwMDQyMCwKLQkweDQwMDAwMDIwLCAweDAwMDAwNDAwLCAweDQwMTAwNDIwLCAweDAwMTAwMDAwLAotCTB4MDAxMDA0MjAsIDB4NDAwMDAwMDAsIDB4NDAwMDA0MDAsIDB4NDAxMDA0MjAsCi0JMHg0MDEwMDAwMCwgMHgwMDEwMDQyMCwgMHgwMDEwMDQwMCwgMHg0MDAwMDQwMCwKLQotCTB4MDA4MDAwMDAsIDB4MDAwMDEwMDAsIDB4MDAwMDAwNDAsIDB4MDA4MDEwNDIsCi0JMHgwMDgwMTAwMiwgMHgwMDgwMDA0MCwgMHgwMDAwMTA0MiwgMHgwMDgwMTAwMCwKLQkweDAwMDAxMDAwLCAweDAwMDAwMDAyLCAweDAwODAwMDAyLCAweDAwMDAxMDQwLAotCTB4MDA4MDAwNDIsIDB4MDA4MDEwMDIsIDB4MDA4MDEwNDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMTA0MCwgMHgwMDgwMDAwMCwgMHgwMDAwMTAwMiwgMHgwMDAwMDA0MiwKLQkweDAwODAwMDQwLCAweDAwMDAxMDQyLCAweDAwMDAwMDAwLCAweDAwODAwMDAyLAotCTB4MDAwMDAwMDIsIDB4MDA4MDAwNDIsIDB4MDA4MDEwNDIsIDB4MDAwMDEwMDIsCi0JMHgwMDgwMTAwMCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MiwgMHgwMDgwMTA0MCwKLQkweDAwODAxMDQwLCAweDAwODAwMDQyLCAweDAwMDAxMDAyLCAweDAwODAxMDAwLAotCTB4MDAwMDEwMDAsIDB4MDAwMDAwMDIsIDB4MDA4MDAwMDIsIDB4MDA4MDAwNDAsCi0JMHgwMDgwMDAwMCwgMHgwMDAwMTA0MCwgMHgwMDgwMTA0MiwgMHgwMDAwMDAwMCwKLQkweDAwMDAxMDQyLCAweDAwODAwMDAwLCAweDAwMDAwMDQwLCAweDAwMDAxMDAyLAotCTB4MDA4MDAwNDIsIDB4MDAwMDAwNDAsIDB4MDAwMDAwMDAsIDB4MDA4MDEwNDIsCi0JMHgwMDgwMTAwMiwgMHgwMDgwMTA0MCwgMHgwMDAwMDA0MiwgMHgwMDAwMTAwMCwKLQkweDAwMDAxMDQwLCAweDAwODAxMDAyLCAweDAwODAwMDQwLCAweDAwMDAwMDQyLAotCTB4MDAwMDAwMDIsIDB4MDAwMDEwNDIsIDB4MDA4MDEwMDAsIDB4MDA4MDAwMDIsCi0KLQkweDEwNDAwMDAwLCAweDAwNDA0MDEwLCAweDAwMDAwMDEwLCAweDEwNDAwMDEwLAotCTB4MTAwMDQwMDAsIDB4MDA0MDAwMDAsIDB4MTA0MDAwMTAsIDB4MDAwMDQwMTAsCi0JMHgwMDQwMDAxMCwgMHgwMDAwNDAwMCwgMHgwMDQwNDAwMCwgMHgxMDAwMDAwMCwKLQkweDEwNDA0MDEwLCAweDEwMDAwMDEwLCAweDEwMDAwMDAwLCAweDEwNDA0MDAwLAotCTB4MDAwMDAwMDAsIDB4MTAwMDQwMDAsIDB4MDA0MDQwMTAsIDB4MDAwMDAwMTAsCi0JMHgxMDAwMDAxMCwgMHgxMDQwNDAxMCwgMHgwMDAwNDAwMCwgMHgxMDQwMDAwMCwKLQkweDEwNDA0MDAwLCAweDAwNDAwMDEwLCAweDEwMDA0MDEwLCAweDAwNDA0MDAwLAotCTB4MDAwMDQwMTAsIDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTAwMDQwMTAsCi0JMHgwMDQwNDAxMCwgMHgwMDAwMDAxMCwgMHgxMDAwMDAwMCwgMHgwMDAwNDAwMCwKLQkweDEwMDAwMDEwLCAweDEwMDA0MDAwLCAweDAwNDA0MDAwLCAweDEwNDAwMDEwLAotCTB4MDAwMDAwMDAsIDB4MDA0MDQwMTAsIDB4MDAwMDQwMTAsIDB4MTA0MDQwMDAsCi0JMHgxMDAwNDAwMCwgMHgwMDQwMDAwMCwgMHgxMDQwNDAxMCwgMHgxMDAwMDAwMCwKLQkweDEwMDA0MDEwLCAweDEwNDAwMDAwLCAweDAwNDAwMDAwLCAweDEwNDA0MDEwLAotCTB4MDAwMDQwMDAsIDB4MDA0MDAwMTAsIDB4MTA0MDAwMTAsIDB4MDAwMDQwMTAsCi0JMHgwMDQwMDAxMCwgMHgwMDAwMDAwMCwgMHgxMDQwNDAwMCwgMHgxMDAwMDAxMCwKLQkweDEwNDAwMDAwLCAweDEwMDA0MDEwLCAweDAwMDAwMDEwLCAweDAwNDA0MDAwLAotCi0JMHgwMDIwODA4MCwgMHgwMDAwODAwMCwgMHgyMDIwMDAwMCwgMHgyMDIwODA4MCwKLQkweDAwMjAwMDAwLCAweDIwMDA4MDgwLCAweDIwMDA4MDAwLCAweDIwMjAwMDAwLAotCTB4MjAwMDgwODAsIDB4MDAyMDgwODAsIDB4MDAyMDgwMDAsIDB4MjAwMDAwODAsCi0JMHgyMDIwMDA4MCwgMHgwMDIwMDAwMCwgMHgwMDAwMDAwMCwgMHgyMDAwODAwMCwKLQkweDAwMDA4MDAwLCAweDIwMDAwMDAwLCAweDAwMjAwMDgwLCAweDAwMDA4MDgwLAotCTB4MjAyMDgwODAsIDB4MDAyMDgwMDAsIDB4MjAwMDAwODAsIDB4MDAyMDAwODAsCi0JMHgyMDAwMDAwMCwgMHgwMDAwMDA4MCwgMHgwMDAwODA4MCwgMHgyMDIwODAwMCwKLQkweDAwMDAwMDgwLCAweDIwMjAwMDgwLCAweDIwMjA4MDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MjAyMDgwODAsIDB4MDAyMDAwODAsIDB4MjAwMDgwMDAsCi0JMHgwMDIwODA4MCwgMHgwMDAwODAwMCwgMHgyMDAwMDA4MCwgMHgwMDIwMDA4MCwKLQkweDIwMjA4MDAwLCAweDAwMDAwMDgwLCAweDAwMDA4MDgwLCAweDIwMjAwMDAwLAotCTB4MjAwMDgwODAsIDB4MjAwMDAwMDAsIDB4MjAyMDAwMDAsIDB4MDAyMDgwMDAsCi0JMHgyMDIwODA4MCwgMHgwMDAwODA4MCwgMHgwMDIwODAwMCwgMHgyMDIwMDA4MCwKLQkweDAwMjAwMDAwLCAweDIwMDAwMDgwLCAweDIwMDA4MDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDgwMDAsIDB4MDAyMDAwMDAsIDB4MjAyMDAwODAsIDB4MDAyMDgwODAsCi0JMHgyMDAwMDAwMCwgMHgyMDIwODAwMCwgMHgwMDAwMDA4MCwgMHgyMDAwODA4MCwKK3N0YXRpYyBjb25zdCB1OCBwYzFbMjU2XSA9IHsKKwkweDAwLCAweDAwLCAweDQwLCAweDA0LCAweDEwLCAweDEwLCAweDUwLCAweDE0LAorCTB4MDQsIDB4NDAsIDB4NDQsIDB4NDQsIDB4MTQsIDB4NTAsIDB4NTQsIDB4NTQsCisJMHgwMiwgMHgwMiwgMHg0MiwgMHgwNiwgMHgxMiwgMHgxMiwgMHg1MiwgMHgxNiwKKwkweDA2LCAweDQyLCAweDQ2LCAweDQ2LCAweDE2LCAweDUyLCAweDU2LCAweDU2LAorCTB4ODAsIDB4MDgsIDB4YzAsIDB4MGMsIDB4OTAsIDB4MTgsIDB4ZDAsIDB4MWMsCisJMHg4NCwgMHg0OCwgMHhjNCwgMHg0YywgMHg5NCwgMHg1OCwgMHhkNCwgMHg1YywKKwkweDgyLCAweDBhLCAweGMyLCAweDBlLCAweDkyLCAweDFhLCAweGQyLCAweDFlLAorCTB4ODYsIDB4NGEsIDB4YzYsIDB4NGUsIDB4OTYsIDB4NWEsIDB4ZDYsIDB4NWUsCisJMHgyMCwgMHgyMCwgMHg2MCwgMHgyNCwgMHgzMCwgMHgzMCwgMHg3MCwgMHgzNCwKKwkweDI0LCAweDYwLCAweDY0LCAweDY0LCAweDM0LCAweDcwLCAweDc0LCAweDc0LAorCTB4MjIsIDB4MjIsIDB4NjIsIDB4MjYsIDB4MzIsIDB4MzIsIDB4NzIsIDB4MzYsCisJMHgyNiwgMHg2MiwgMHg2NiwgMHg2NiwgMHgzNiwgMHg3MiwgMHg3NiwgMHg3NiwKKwkweGEwLCAweDI4LCAweGUwLCAweDJjLCAweGIwLCAweDM4LCAweGYwLCAweDNjLAorCTB4YTQsIDB4NjgsIDB4ZTQsIDB4NmMsIDB4YjQsIDB4NzgsIDB4ZjQsIDB4N2MsCisJMHhhMiwgMHgyYSwgMHhlMiwgMHgyZSwgMHhiMiwgMHgzYSwgMHhmMiwgMHgzZSwKKwkweGE2LCAweDZhLCAweGU2LCAweDZlLCAweGI2LCAweDdhLCAweGY2LCAweDdlLAorCTB4MDgsIDB4ODAsIDB4NDgsIDB4ODQsIDB4MTgsIDB4OTAsIDB4NTgsIDB4OTQsCisJMHgwYywgMHhjMCwgMHg0YywgMHhjNCwgMHgxYywgMHhkMCwgMHg1YywgMHhkNCwKKwkweDBhLCAweDgyLCAweDRhLCAweDg2LCAweDFhLCAweDkyLCAweDVhLCAweDk2LAorCTB4MGUsIDB4YzIsIDB4NGUsIDB4YzYsIDB4MWUsIDB4ZDIsIDB4NWUsIDB4ZDYsCisJMHg4OCwgMHg4OCwgMHhjOCwgMHg4YywgMHg5OCwgMHg5OCwgMHhkOCwgMHg5YywKKwkweDhjLCAweGM4LCAweGNjLCAweGNjLCAweDljLCAweGQ4LCAweGRjLCAweGRjLAorCTB4OGEsIDB4OGEsIDB4Y2EsIDB4OGUsIDB4OWEsIDB4OWEsIDB4ZGEsIDB4OWUsCisJMHg4ZSwgMHhjYSwgMHhjZSwgMHhjZSwgMHg5ZSwgMHhkYSwgMHhkZSwgMHhkZSwKKwkweDI4LCAweGEwLCAweDY4LCAweGE0LCAweDM4LCAweGIwLCAweDc4LCAweGI0LAorCTB4MmMsIDB4ZTAsIDB4NmMsIDB4ZTQsIDB4M2MsIDB4ZjAsIDB4N2MsIDB4ZjQsCisJMHgyYSwgMHhhMiwgMHg2YSwgMHhhNiwgMHgzYSwgMHhiMiwgMHg3YSwgMHhiNiwKKwkweDJlLCAweGUyLCAweDZlLCAweGU2LCAweDNlLCAweGYyLCAweDdlLCAweGY2LAorCTB4YTgsIDB4YTgsIDB4ZTgsIDB4YWMsIDB4YjgsIDB4YjgsIDB4ZjgsIDB4YmMsCisJMHhhYywgMHhlOCwgMHhlYywgMHhlYywgMHhiYywgMHhmOCwgMHhmYywgMHhmYywKKwkweGFhLCAweGFhLCAweGVhLCAweGFlLCAweGJhLCAweGJhLCAweGZhLCAweGJlLAorCTB4YWUsIDB4ZWEsIDB4ZWUsIDB4ZWUsIDB4YmUsIDB4ZmEsIDB4ZmUsIDB4ZmUKIH07CiAKLXN0YXRpYyBjb25zdCB1OCByb3RvcnNbXSA9IHsKLQkzNCwgMTMsICA1LCA0NiwgNDcsIDE4LCAzMiwgNDEsIDExLCA1MywgMzMsIDIwLAotCTE0LCAzNiwgMzAsIDI0LCA0OSwgIDIsIDE1LCAzNywgNDIsIDUwLCAgMCwgMjEsCi0JMzgsIDQ4LCAgNiwgMjYsIDM5LCAgNCwgNTIsIDI1LCAxMiwgMjcsIDMxLCA0MCwKLQkxLCAxNywgMjgsIDI5LCAyMywgNTEsIDM1LCAgNywgIDMsIDIyLCAgOSwgNDMsCi0KLQk0MSwgMjAsIDEyLCA1MywgNTQsIDI1LCAzOSwgNDgsIDE4LCAzMSwgNDAsIDI3LAotCTIxLCA0MywgMzcsICAwLCAgMSwgIDksIDIyLCA0NCwgNDksICAyLCAgNywgMjgsCi0JNDUsIDU1LCAxMywgMzMsIDQ2LCAxMSwgIDYsIDMyLCAxOSwgMzQsIDM4LCA0NywKLQk4LCAyNCwgMzUsIDM2LCAzMCwgIDMsIDQyLCAxNCwgMTAsIDI5LCAxNiwgNTAsCi0KLQk1NSwgMzQsIDI2LCAzOCwgMTEsIDM5LCA1MywgIDUsIDMyLCA0NSwgNTQsIDQxLAotCTM1LCAgMiwgNTEsIDE0LCAxNSwgMjMsIDM2LCAgMywgIDgsIDE2LCAyMSwgNDIsCi0JNiwgMTIsIDI3LCA0NywgMzEsIDI1LCAyMCwgNDYsIDMzLCA0OCwgNTIsICA0LAotCTIyLCAgNywgNDksIDUwLCA0NCwgMTcsICAxLCAyOCwgMjQsIDQzLCAzMCwgIDksCi0KLQkxMiwgNDgsIDQwLCA1MiwgMjUsIDUzLCAzOCwgMTksIDQ2LCAgNiwgMTEsIDU1LAotCTQ5LCAxNiwgMTAsIDI4LCAyOSwgMzcsIDUwLCAxNywgMjIsIDMwLCAzNSwgIDEsCi0JMjAsIDI2LCA0MSwgIDQsIDQ1LCAzOSwgMzQsIDMxLCA0NywgIDUsIDEzLCAxOCwKLQkzNiwgMjEsICA4LCAgOSwgIDMsICAwLCAxNSwgNDIsICA3LCAgMiwgNDQsIDIzLAotCi0JMjYsICA1LCA1NCwgMTMsIDM5LCAzOCwgNTIsIDMzLCAzMSwgMjAsIDI1LCAxMiwKLQk4LCAzMCwgMjQsIDQyLCA0MywgNTEsICA5LCAgMCwgMzYsIDQ0LCA0OSwgMTUsCi0JMzQsIDQwLCA1NSwgMTgsICA2LCA1MywgNDgsIDQ1LCAgNCwgMTksIDI3LCAzMiwKLQk1MCwgMzUsIDIyLCAyMywgMTcsIDE0LCAyOSwgIDEsIDIxLCAxNiwgIDMsIDM3LAotCi0JNDAsIDE5LCAxMSwgMjcsIDUzLCA1MiwgMTMsIDQ3LCA0NSwgMzQsIDM5LCAyNiwKLQkyMiwgNDQsICA3LCAgMSwgIDIsIDEwLCAyMywgMTQsIDUwLCAgMywgIDgsIDI5LAotCTQ4LCA1NCwgMTIsIDMyLCAyMCwgMzgsICA1LCAgNiwgMTgsIDMzLCA0MSwgNDYsCi0JOSwgNDksIDM2LCAzNywgIDAsIDI4LCA0MywgMTUsIDM1LCAzMCwgMTcsIDUxLAotCi0JNTQsIDMzLCAyNSwgNDEsIDM4LCAxMywgMjcsICA0LCAgNiwgNDgsIDUzLCA0MCwKLQkzNiwgIDMsIDIxLCAxNSwgMTYsIDI0LCAzNywgMjgsICA5LCAxNywgMjIsIDQzLAotCTUsIDExLCAyNiwgNDYsIDM0LCA1MiwgMTksIDIwLCAzMiwgNDcsIDU1LCAzMSwKLQkyMywgIDgsIDUwLCA1MSwgMTQsIDQyLCAgMiwgMjksIDQ5LCA0NCwgIDAsIDEwLAotCi0JMTEsIDQ3LCAzOSwgNTUsIDUyLCAyNywgNDEsIDE4LCAyMCwgIDUsIDM4LCA1NCwKLQk1MCwgMTcsIDM1LCAyOSwgMzAsICA3LCA1MSwgNDIsIDIzLCAgMCwgMzYsICAyLAotCTE5LCAyNSwgNDAsIDMxLCA0OCwgMTMsIDMzLCAzNCwgNDYsICA0LCAxMiwgNDUsCi0JMzcsIDIyLCAgOSwgMTAsIDI4LCAgMSwgMTYsIDQzLCAgOCwgIDMsIDE0LCAyNCwKLQotCTE4LCA1NCwgNDYsICA1LCAgNiwgMzQsIDQ4LCAyNSwgMjcsIDEyLCA0NSwgIDQsCi0JMiwgMjQsIDQyLCAzNiwgMzcsIDE0LCAgMywgNDksIDMwLCAgNywgNDMsICA5LAotCTI2LCAzMiwgNDcsIDM4LCA1NSwgMjAsIDQwLCA0MSwgNTMsIDExLCAxOSwgNTIsCi0JNDQsIDI5LCAxNiwgMTcsIDM1LCAgOCwgMjMsIDUwLCAxNSwgMTAsIDIxLCAgMCwKLQotCTMyLCAxMSwgMzEsIDE5LCAyMCwgNDgsICA1LCAzOSwgNDEsIDI2LCAgNiwgMTgsCi0JMTYsICA3LCAgMSwgNTAsIDUxLCAyOCwgMTcsICA4LCA0NCwgMjEsICAyLCAyMywKLQk0MCwgNDYsICA0LCA1MiwgMTIsIDM0LCA1NCwgNTUsIDM4LCAyNSwgMzMsIDEzLAotCTMsIDQzLCAzMCwgIDAsIDQ5LCAyMiwgMzcsICA5LCAyOSwgMjQsIDM1LCAxNCwKLQotCTQ2LCAyNSwgNDUsIDMzLCAzNCwgIDUsIDE5LCA1MywgNTUsIDQwLCAyMCwgMzIsCi0JMzAsIDIxLCAxNSwgIDksIDEwLCA0MiwgIDAsIDIyLCAgMywgMzUsIDE2LCAzNywKLQk1NCwgMzEsIDE4LCAxMywgMjYsIDQ4LCAxMSwgMTIsIDUyLCAzOSwgNDcsIDI3LAotCTE3LCAgMiwgNDQsIDE0LCAgOCwgMzYsIDUxLCAyMywgNDMsICA3LCA0OSwgMjgsCi0KLQkzMSwgMzksICA2LCA0NywgNDgsIDE5LCAzMywgMzgsIDEyLCA1NCwgMzQsIDQ2LAotCTQ0LCAzNSwgMjksIDIzLCAyNCwgIDEsIDE0LCAzNiwgMTcsIDQ5LCAzMCwgNTEsCi0JMTEsIDQ1LCAzMiwgMjcsIDQwLCAgNSwgMjUsIDI2LCAxMywgNTMsICA0LCA0MSwKLQkwLCAxNiwgIDMsIDI4LCAyMiwgNTAsIDEwLCAzNywgIDIsIDIxLCAgOCwgNDIsCi0KLQk0NSwgNTMsIDIwLCAgNCwgIDUsIDMzLCA0NywgNTIsIDI2LCAxMSwgNDgsIDMxLAotCTMsIDQ5LCA0MywgMzcsICA3LCAxNSwgMjgsIDUwLCAgMCwgIDgsIDQ0LCAxMCwKLQkyNSwgIDYsIDQ2LCA0MSwgNTQsIDE5LCAzOSwgNDAsIDI3LCAzOCwgMTgsIDU1LAotCTE0LCAzMCwgMTcsIDQyLCAzNiwgIDksIDI0LCA1MSwgMTYsIDM1LCAyMiwgIDEsCi0KLQk2LCAzOCwgMzQsIDE4LCAxOSwgNDcsICA0LCAxMywgNDAsIDI1LCAgNSwgNDUsCi0JMTcsICA4LCAgMiwgNTEsIDIxLCAyOSwgNDIsICA5LCAxNCwgMjIsICAzLCAyNCwKLQkzOSwgMjAsIDMxLCA1NSwgMTEsIDMzLCA1MywgNTQsIDQxLCA1MiwgMzIsIDEyLAotCTI4LCA0NCwgIDAsICAxLCA1MCwgMjMsICA3LCAxMCwgMzAsIDQ5LCAzNiwgMTUsCi0KLQkyMCwgNTIsIDQ4LCAzMiwgMzMsICA0LCAxOCwgMjcsIDU0LCAzOSwgMTksICA2LAotCTAsIDIyLCAxNiwgMTAsIDM1LCA0MywgIDEsIDIzLCAyOCwgMzYsIDE3LCAgNywKLQk1MywgMzQsIDQ1LCAxMiwgMjUsIDQ3LCAzOCwgMTEsIDU1LCAxMywgNDYsIDI2LAotCTQyLCAgMywgMTQsIDE1LCAgOSwgMzcsIDIxLCAyNCwgNDQsICA4LCA1MCwgMjksCi0KLQkyNywgIDYsIDU1LCAzOSwgNDAsIDExLCAyNSwgMzQsICA0LCA0NiwgMjYsIDEzLAotCTcsIDI5LCAyMywgMTcsIDQyLCA1MCwgIDgsIDMwLCAzNSwgNDMsIDI0LCAxNCwKLQkzMSwgNDEsIDUyLCAxOSwgMzIsIDU0LCA0NSwgMTgsICA1LCAyMCwgNTMsIDMzLAotCTQ5LCAxMCwgMjEsIDIyLCAxNiwgNDQsIDI4LCAgMCwgNTEsIDE1LCAgMiwgMzYsCitzdGF0aWMgY29uc3QgdTggcnNbMjU2XSA9IHsKKwkweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDAyLCAweDAyLCAweDgyLCAweDgyLAorCTB4MDQsIDB4MDQsIDB4ODQsIDB4ODQsIDB4MDYsIDB4MDYsIDB4ODYsIDB4ODYsCisJMHgwOCwgMHgwOCwgMHg4OCwgMHg4OCwgMHgwYSwgMHgwYSwgMHg4YSwgMHg4YSwKKwkweDBjLCAweDBjLCAweDhjLCAweDhjLCAweDBlLCAweDBlLCAweDhlLCAweDhlLAorCTB4MTAsIDB4MTAsIDB4OTAsIDB4OTAsIDB4MTIsIDB4MTIsIDB4OTIsIDB4OTIsCisJMHgxNCwgMHgxNCwgMHg5NCwgMHg5NCwgMHgxNiwgMHgxNiwgMHg5NiwgMHg5NiwKKwkweDE4LCAweDE4LCAweDk4LCAweDk4LCAweDFhLCAweDFhLCAweDlhLCAweDlhLAorCTB4MWMsIDB4MWMsIDB4OWMsIDB4OWMsIDB4MWUsIDB4MWUsIDB4OWUsIDB4OWUsCisJMHgyMCwgMHgyMCwgMHhhMCwgMHhhMCwgMHgyMiwgMHgyMiwgMHhhMiwgMHhhMiwKKwkweDI0LCAweDI0LCAweGE0LCAweGE0LCAweDI2LCAweDI2LCAweGE2LCAweGE2LAorCTB4MjgsIDB4MjgsIDB4YTgsIDB4YTgsIDB4MmEsIDB4MmEsIDB4YWEsIDB4YWEsCisJMHgyYywgMHgyYywgMHhhYywgMHhhYywgMHgyZSwgMHgyZSwgMHhhZSwgMHhhZSwKKwkweDMwLCAweDMwLCAweGIwLCAweGIwLCAweDMyLCAweDMyLCAweGIyLCAweGIyLAorCTB4MzQsIDB4MzQsIDB4YjQsIDB4YjQsIDB4MzYsIDB4MzYsIDB4YjYsIDB4YjYsCisJMHgzOCwgMHgzOCwgMHhiOCwgMHhiOCwgMHgzYSwgMHgzYSwgMHhiYSwgMHhiYSwKKwkweDNjLCAweDNjLCAweGJjLCAweGJjLCAweDNlLCAweDNlLCAweGJlLCAweGJlLAorCTB4NDAsIDB4NDAsIDB4YzAsIDB4YzAsIDB4NDIsIDB4NDIsIDB4YzIsIDB4YzIsCisJMHg0NCwgMHg0NCwgMHhjNCwgMHhjNCwgMHg0NiwgMHg0NiwgMHhjNiwgMHhjNiwKKwkweDQ4LCAweDQ4LCAweGM4LCAweGM4LCAweDRhLCAweDRhLCAweGNhLCAweGNhLAorCTB4NGMsIDB4NGMsIDB4Y2MsIDB4Y2MsIDB4NGUsIDB4NGUsIDB4Y2UsIDB4Y2UsCisJMHg1MCwgMHg1MCwgMHhkMCwgMHhkMCwgMHg1MiwgMHg1MiwgMHhkMiwgMHhkMiwKKwkweDU0LCAweDU0LCAweGQ0LCAweGQ0LCAweDU2LCAweDU2LCAweGQ2LCAweGQ2LAorCTB4NTgsIDB4NTgsIDB4ZDgsIDB4ZDgsIDB4NWEsIDB4NWEsIDB4ZGEsIDB4ZGEsCisJMHg1YywgMHg1YywgMHhkYywgMHhkYywgMHg1ZSwgMHg1ZSwgMHhkZSwgMHhkZSwKKwkweDYwLCAweDYwLCAweGUwLCAweGUwLCAweDYyLCAweDYyLCAweGUyLCAweGUyLAorCTB4NjQsIDB4NjQsIDB4ZTQsIDB4ZTQsIDB4NjYsIDB4NjYsIDB4ZTYsIDB4ZTYsCisJMHg2OCwgMHg2OCwgMHhlOCwgMHhlOCwgMHg2YSwgMHg2YSwgMHhlYSwgMHhlYSwKKwkweDZjLCAweDZjLCAweGVjLCAweGVjLCAweDZlLCAweDZlLCAweGVlLCAweGVlLAorCTB4NzAsIDB4NzAsIDB4ZjAsIDB4ZjAsIDB4NzIsIDB4NzIsIDB4ZjIsIDB4ZjIsCisJMHg3NCwgMHg3NCwgMHhmNCwgMHhmNCwgMHg3NiwgMHg3NiwgMHhmNiwgMHhmNiwKKwkweDc4LCAweDc4LCAweGY4LCAweGY4LCAweDdhLCAweDdhLCAweGZhLCAweGZhLAorCTB4N2MsIDB4N2MsIDB4ZmMsIDB4ZmMsIDB4N2UsIDB4N2UsIDB4ZmUsIDB4ZmUKIH07CiAKLXN0YXRpYyBjb25zdCB1OCBwYXJpdHlbXSA9IHsKLQk4LDEsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMiw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDMsCi0JMCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LAotCTAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCwwLDgsOCwwLDAsOCw4LDAsOCwwLDAsOCwKLQk4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsCi0JMCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LAotCTgsMCwwLDgsMCw4LDgsMCwwLDgsOCwwLDgsMCwwLDgsMCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCwKLQk4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsCi0JNCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCw4LDUsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsNiw4LAorc3RhdGljIGNvbnN0IHUzMiBwYzJbMTAyNF0gPSB7CisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDQwMDAwLCAweDAwMDAwMDAwLCAweDA0MDAwMDAwLCAweDAwMTAwMDAwLAorCTB4MDA0MDAwMDAsIDB4MDAwMDAwMDgsIDB4MDAwMDA4MDAsIDB4NDAwMDAwMDAsCisJMHgwMDQ0MDAwMCwgMHgwMDAwMDAwOCwgMHgwNDAwMDgwMCwgMHg0MDEwMDAwMCwKKwkweDAwMDAwNDAwLCAweDAwMDAwMDIwLCAweDA4MDAwMDAwLCAweDAwMDAwMTAwLAorCTB4MDAwNDA0MDAsIDB4MDAwMDAwMjAsIDB4MGMwMDAwMDAsIDB4MDAxMDAxMDAsCisJMHgwMDQwMDQwMCwgMHgwMDAwMDAyOCwgMHgwODAwMDgwMCwgMHg0MDAwMDEwMCwKKwkweDAwNDQwNDAwLCAweDAwMDAwMDI4LCAweDBjMDAwODAwLCAweDQwMTAwMTAwLAorCTB4ODAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsCisJMHg4MDA0MDAwMCwgMHgwMDAwMDAxMCwgMHgwNDAwMDAwMCwgMHgwMDkwMDAwMCwKKwkweDgwNDAwMDAwLCAweDAwMDAwMDE4LCAweDAwMDAwODAwLCAweDQwODAwMDAwLAorCTB4ODA0NDAwMDAsIDB4MDAwMDAwMTgsIDB4MDQwMDA4MDAsIDB4NDA5MDAwMDAsCisJMHg4MDAwMDQwMCwgMHgwMDAwMDAzMCwgMHgwODAwMDAwMCwgMHgwMDgwMDEwMCwKKwkweDgwMDQwNDAwLCAweDAwMDAwMDMwLCAweDBjMDAwMDAwLCAweDAwOTAwMTAwLAorCTB4ODA0MDA0MDAsIDB4MDAwMDAwMzgsIDB4MDgwMDA4MDAsIDB4NDA4MDAxMDAsCisJMHg4MDQ0MDQwMCwgMHgwMDAwMDAzOCwgMHgwYzAwMDgwMCwgMHg0MDkwMDEwMCwKKwkweDEwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMjAwMDAwLCAweDAwMDAxMDAwLAorCTB4MTAwNDAwMDAsIDB4MDAwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDAxMDEwMDAsCisJMHgxMDQwMDAwMCwgMHgwMDAwMDAwOCwgMHgwMDIwMDgwMCwgMHg0MDAwMTAwMCwKKwkweDEwNDQwMDAwLCAweDAwMDAwMDA4LCAweDA0MjAwODAwLCAweDQwMTAxMDAwLAorCTB4MTAwMDA0MDAsIDB4MDAwMDAwMjAsIDB4MDgyMDAwMDAsIDB4MDAwMDExMDAsCisJMHgxMDA0MDQwMCwgMHgwMDAwMDAyMCwgMHgwYzIwMDAwMCwgMHgwMDEwMTEwMCwKKwkweDEwNDAwNDAwLCAweDAwMDAwMDI4LCAweDA4MjAwODAwLCAweDQwMDAxMTAwLAorCTB4MTA0NDA0MDAsIDB4MDAwMDAwMjgsIDB4MGMyMDA4MDAsIDB4NDAxMDExMDAsCisJMHg5MDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDIwMDAwMCwgMHgwMDgwMTAwMCwKKwkweDkwMDQwMDAwLCAweDAwMDAwMDEwLCAweDA0MjAwMDAwLCAweDAwOTAxMDAwLAorCTB4OTA0MDAwMDAsIDB4MDAwMDAwMTgsIDB4MDAyMDA4MDAsIDB4NDA4MDEwMDAsCisJMHg5MDQ0MDAwMCwgMHgwMDAwMDAxOCwgMHgwNDIwMDgwMCwgMHg0MDkwMTAwMCwKKwkweDkwMDAwNDAwLCAweDAwMDAwMDMwLCAweDA4MjAwMDAwLCAweDAwODAxMTAwLAorCTB4OTAwNDA0MDAsIDB4MDAwMDAwMzAsIDB4MGMyMDAwMDAsIDB4MDA5MDExMDAsCisJMHg5MDQwMDQwMCwgMHgwMDAwMDAzOCwgMHgwODIwMDgwMCwgMHg0MDgwMTEwMCwKKwkweDkwNDQwNDAwLCAweDAwMDAwMDM4LCAweDBjMjAwODAwLCAweDQwOTAxMTAwLAorCTB4MDAwMDAyMDAsIDB4MDAwODAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDQsCisJMHgwMDA0MDIwMCwgMHgwMDA4MDAwMCwgMHgwNDAwMDAwMCwgMHgwMDEwMDAwNCwKKwkweDAwNDAwMjAwLCAweDAwMDgwMDA4LCAweDAwMDAwODAwLCAweDQwMDAwMDA0LAorCTB4MDA0NDAyMDAsIDB4MDAwODAwMDgsIDB4MDQwMDA4MDAsIDB4NDAxMDAwMDQsCisJMHgwMDAwMDYwMCwgMHgwMDA4MDAyMCwgMHgwODAwMDAwMCwgMHgwMDAwMDEwNCwKKwkweDAwMDQwNjAwLCAweDAwMDgwMDIwLCAweDBjMDAwMDAwLCAweDAwMTAwMTA0LAorCTB4MDA0MDA2MDAsIDB4MDAwODAwMjgsIDB4MDgwMDA4MDAsIDB4NDAwMDAxMDQsCisJMHgwMDQ0MDYwMCwgMHgwMDA4MDAyOCwgMHgwYzAwMDgwMCwgMHg0MDEwMDEwNCwKKwkweDgwMDAwMjAwLCAweDAwMDgwMDEwLCAweDAwMDAwMDAwLCAweDAwODAwMDA0LAorCTB4ODAwNDAyMDAsIDB4MDAwODAwMTAsIDB4MDQwMDAwMDAsIDB4MDA5MDAwMDQsCisJMHg4MDQwMDIwMCwgMHgwMDA4MDAxOCwgMHgwMDAwMDgwMCwgMHg0MDgwMDAwNCwKKwkweDgwNDQwMjAwLCAweDAwMDgwMDE4LCAweDA0MDAwODAwLCAweDQwOTAwMDA0LAorCTB4ODAwMDA2MDAsIDB4MDAwODAwMzAsIDB4MDgwMDAwMDAsIDB4MDA4MDAxMDQsCisJMHg4MDA0MDYwMCwgMHgwMDA4MDAzMCwgMHgwYzAwMDAwMCwgMHgwMDkwMDEwNCwKKwkweDgwNDAwNjAwLCAweDAwMDgwMDM4LCAweDA4MDAwODAwLCAweDQwODAwMTA0LAorCTB4ODA0NDA2MDAsIDB4MDAwODAwMzgsIDB4MGMwMDA4MDAsIDB4NDA5MDAxMDQsCisJMHgxMDAwMDIwMCwgMHgwMDA4MDAwMCwgMHgwMDIwMDAwMCwgMHgwMDAwMTAwNCwKKwkweDEwMDQwMjAwLCAweDAwMDgwMDAwLCAweDA0MjAwMDAwLCAweDAwMTAxMDA0LAorCTB4MTA0MDAyMDAsIDB4MDAwODAwMDgsIDB4MDAyMDA4MDAsIDB4NDAwMDEwMDQsCisJMHgxMDQ0MDIwMCwgMHgwMDA4MDAwOCwgMHgwNDIwMDgwMCwgMHg0MDEwMTAwNCwKKwkweDEwMDAwNjAwLCAweDAwMDgwMDIwLCAweDA4MjAwMDAwLCAweDAwMDAxMTA0LAorCTB4MTAwNDA2MDAsIDB4MDAwODAwMjAsIDB4MGMyMDAwMDAsIDB4MDAxMDExMDQsCisJMHgxMDQwMDYwMCwgMHgwMDA4MDAyOCwgMHgwODIwMDgwMCwgMHg0MDAwMTEwNCwKKwkweDEwNDQwNjAwLCAweDAwMDgwMDI4LCAweDBjMjAwODAwLCAweDQwMTAxMTA0LAorCTB4OTAwMDAyMDAsIDB4MDAwODAwMTAsIDB4MDAyMDAwMDAsIDB4MDA4MDEwMDQsCisJMHg5MDA0MDIwMCwgMHgwMDA4MDAxMCwgMHgwNDIwMDAwMCwgMHgwMDkwMTAwNCwKKwkweDkwNDAwMjAwLCAweDAwMDgwMDE4LCAweDAwMjAwODAwLCAweDQwODAxMDA0LAorCTB4OTA0NDAyMDAsIDB4MDAwODAwMTgsIDB4MDQyMDA4MDAsIDB4NDA5MDEwMDQsCisJMHg5MDAwMDYwMCwgMHgwMDA4MDAzMCwgMHgwODIwMDAwMCwgMHgwMDgwMTEwNCwKKwkweDkwMDQwNjAwLCAweDAwMDgwMDMwLCAweDBjMjAwMDAwLCAweDAwOTAxMTA0LAorCTB4OTA0MDA2MDAsIDB4MDAwODAwMzgsIDB4MDgyMDA4MDAsIDB4NDA4MDExMDQsCisJMHg5MDQ0MDYwMCwgMHgwMDA4MDAzOCwgMHgwYzIwMDgwMCwgMHg0MDkwMTEwNCwKKwkweDAwMDAwMDAyLCAweDAwMDAyMDAwLCAweDIwMDAwMDAwLCAweDAwMDAwMDAxLAorCTB4MDAwNDAwMDIsIDB4MDAwMDIwMDAsIDB4MjQwMDAwMDAsIDB4MDAxMDAwMDEsCisJMHgwMDQwMDAwMiwgMHgwMDAwMjAwOCwgMHgyMDAwMDgwMCwgMHg0MDAwMDAwMSwKKwkweDAwNDQwMDAyLCAweDAwMDAyMDA4LCAweDI0MDAwODAwLCAweDQwMTAwMDAxLAorCTB4MDAwMDA0MDIsIDB4MDAwMDIwMjAsIDB4MjgwMDAwMDAsIDB4MDAwMDAxMDEsCisJMHgwMDA0MDQwMiwgMHgwMDAwMjAyMCwgMHgyYzAwMDAwMCwgMHgwMDEwMDEwMSwKKwkweDAwNDAwNDAyLCAweDAwMDAyMDI4LCAweDI4MDAwODAwLCAweDQwMDAwMTAxLAorCTB4MDA0NDA0MDIsIDB4MDAwMDIwMjgsIDB4MmMwMDA4MDAsIDB4NDAxMDAxMDEsCisJMHg4MDAwMDAwMiwgMHgwMDAwMjAxMCwgMHgyMDAwMDAwMCwgMHgwMDgwMDAwMSwKKwkweDgwMDQwMDAyLCAweDAwMDAyMDEwLCAweDI0MDAwMDAwLCAweDAwOTAwMDAxLAorCTB4ODA0MDAwMDIsIDB4MDAwMDIwMTgsIDB4MjAwMDA4MDAsIDB4NDA4MDAwMDEsCisJMHg4MDQ0MDAwMiwgMHgwMDAwMjAxOCwgMHgyNDAwMDgwMCwgMHg0MDkwMDAwMSwKKwkweDgwMDAwNDAyLCAweDAwMDAyMDMwLCAweDI4MDAwMDAwLCAweDAwODAwMTAxLAorCTB4ODAwNDA0MDIsIDB4MDAwMDIwMzAsIDB4MmMwMDAwMDAsIDB4MDA5MDAxMDEsCisJMHg4MDQwMDQwMiwgMHgwMDAwMjAzOCwgMHgyODAwMDgwMCwgMHg0MDgwMDEwMSwKKwkweDgwNDQwNDAyLCAweDAwMDAyMDM4LCAweDJjMDAwODAwLCAweDQwOTAwMTAxLAorCTB4MTAwMDAwMDIsIDB4MDAwMDIwMDAsIDB4MjAyMDAwMDAsIDB4MDAwMDEwMDEsCisJMHgxMDA0MDAwMiwgMHgwMDAwMjAwMCwgMHgyNDIwMDAwMCwgMHgwMDEwMTAwMSwKKwkweDEwNDAwMDAyLCAweDAwMDAyMDA4LCAweDIwMjAwODAwLCAweDQwMDAxMDAxLAorCTB4MTA0NDAwMDIsIDB4MDAwMDIwMDgsIDB4MjQyMDA4MDAsIDB4NDAxMDEwMDEsCisJMHgxMDAwMDQwMiwgMHgwMDAwMjAyMCwgMHgyODIwMDAwMCwgMHgwMDAwMTEwMSwKKwkweDEwMDQwNDAyLCAweDAwMDAyMDIwLCAweDJjMjAwMDAwLCAweDAwMTAxMTAxLAorCTB4MTA0MDA0MDIsIDB4MDAwMDIwMjgsIDB4MjgyMDA4MDAsIDB4NDAwMDExMDEsCisJMHgxMDQ0MDQwMiwgMHgwMDAwMjAyOCwgMHgyYzIwMDgwMCwgMHg0MDEwMTEwMSwKKwkweDkwMDAwMDAyLCAweDAwMDAyMDEwLCAweDIwMjAwMDAwLCAweDAwODAxMDAxLAorCTB4OTAwNDAwMDIsIDB4MDAwMDIwMTAsIDB4MjQyMDAwMDAsIDB4MDA5MDEwMDEsCisJMHg5MDQwMDAwMiwgMHgwMDAwMjAxOCwgMHgyMDIwMDgwMCwgMHg0MDgwMTAwMSwKKwkweDkwNDQwMDAyLCAweDAwMDAyMDE4LCAweDI0MjAwODAwLCAweDQwOTAxMDAxLAorCTB4OTAwMDA0MDIsIDB4MDAwMDIwMzAsIDB4MjgyMDAwMDAsIDB4MDA4MDExMDEsCisJMHg5MDA0MDQwMiwgMHgwMDAwMjAzMCwgMHgyYzIwMDAwMCwgMHgwMDkwMTEwMSwKKwkweDkwNDAwNDAyLCAweDAwMDAyMDM4LCAweDI4MjAwODAwLCAweDQwODAxMTAxLAorCTB4OTA0NDA0MDIsIDB4MDAwMDIwMzgsIDB4MmMyMDA4MDAsIDB4NDA5MDExMDEsCisJMHgwMDAwMDIwMiwgMHgwMDA4MjAwMCwgMHgyMDAwMDAwMCwgMHgwMDAwMDAwNSwKKwkweDAwMDQwMjAyLCAweDAwMDgyMDAwLCAweDI0MDAwMDAwLCAweDAwMTAwMDA1LAorCTB4MDA0MDAyMDIsIDB4MDAwODIwMDgsIDB4MjAwMDA4MDAsIDB4NDAwMDAwMDUsCisJMHgwMDQ0MDIwMiwgMHgwMDA4MjAwOCwgMHgyNDAwMDgwMCwgMHg0MDEwMDAwNSwKKwkweDAwMDAwNjAyLCAweDAwMDgyMDIwLCAweDI4MDAwMDAwLCAweDAwMDAwMTA1LAorCTB4MDAwNDA2MDIsIDB4MDAwODIwMjAsIDB4MmMwMDAwMDAsIDB4MDAxMDAxMDUsCisJMHgwMDQwMDYwMiwgMHgwMDA4MjAyOCwgMHgyODAwMDgwMCwgMHg0MDAwMDEwNSwKKwkweDAwNDQwNjAyLCAweDAwMDgyMDI4LCAweDJjMDAwODAwLCAweDQwMTAwMTA1LAorCTB4ODAwMDAyMDIsIDB4MDAwODIwMTAsIDB4MjAwMDAwMDAsIDB4MDA4MDAwMDUsCisJMHg4MDA0MDIwMiwgMHgwMDA4MjAxMCwgMHgyNDAwMDAwMCwgMHgwMDkwMDAwNSwKKwkweDgwNDAwMjAyLCAweDAwMDgyMDE4LCAweDIwMDAwODAwLCAweDQwODAwMDA1LAorCTB4ODA0NDAyMDIsIDB4MDAwODIwMTgsIDB4MjQwMDA4MDAsIDB4NDA5MDAwMDUsCisJMHg4MDAwMDYwMiwgMHgwMDA4MjAzMCwgMHgyODAwMDAwMCwgMHgwMDgwMDEwNSwKKwkweDgwMDQwNjAyLCAweDAwMDgyMDMwLCAweDJjMDAwMDAwLCAweDAwOTAwMTA1LAorCTB4ODA0MDA2MDIsIDB4MDAwODIwMzgsIDB4MjgwMDA4MDAsIDB4NDA4MDAxMDUsCisJMHg4MDQ0MDYwMiwgMHgwMDA4MjAzOCwgMHgyYzAwMDgwMCwgMHg0MDkwMDEwNSwKKwkweDEwMDAwMjAyLCAweDAwMDgyMDAwLCAweDIwMjAwMDAwLCAweDAwMDAxMDA1LAorCTB4MTAwNDAyMDIsIDB4MDAwODIwMDAsIDB4MjQyMDAwMDAsIDB4MDAxMDEwMDUsCisJMHgxMDQwMDIwMiwgMHgwMDA4MjAwOCwgMHgyMDIwMDgwMCwgMHg0MDAwMTAwNSwKKwkweDEwNDQwMjAyLCAweDAwMDgyMDA4LCAweDI0MjAwODAwLCAweDQwMTAxMDA1LAorCTB4MTAwMDA2MDIsIDB4MDAwODIwMjAsIDB4MjgyMDAwMDAsIDB4MDAwMDExMDUsCisJMHgxMDA0MDYwMiwgMHgwMDA4MjAyMCwgMHgyYzIwMDAwMCwgMHgwMDEwMTEwNSwKKwkweDEwNDAwNjAyLCAweDAwMDgyMDI4LCAweDI4MjAwODAwLCAweDQwMDAxMTA1LAorCTB4MTA0NDA2MDIsIDB4MDAwODIwMjgsIDB4MmMyMDA4MDAsIDB4NDAxMDExMDUsCisJMHg5MDAwMDIwMiwgMHgwMDA4MjAxMCwgMHgyMDIwMDAwMCwgMHgwMDgwMTAwNSwKKwkweDkwMDQwMjAyLCAweDAwMDgyMDEwLCAweDI0MjAwMDAwLCAweDAwOTAxMDA1LAorCTB4OTA0MDAyMDIsIDB4MDAwODIwMTgsIDB4MjAyMDA4MDAsIDB4NDA4MDEwMDUsCisJMHg5MDQ0MDIwMiwgMHgwMDA4MjAxOCwgMHgyNDIwMDgwMCwgMHg0MDkwMTAwNSwKKwkweDkwMDAwNjAyLCAweDAwMDgyMDMwLCAweDI4MjAwMDAwLCAweDAwODAxMTA1LAorCTB4OTAwNDA2MDIsIDB4MDAwODIwMzAsIDB4MmMyMDAwMDAsIDB4MDA5MDExMDUsCisJMHg5MDQwMDYwMiwgMHgwMDA4MjAzOCwgMHgyODIwMDgwMCwgMHg0MDgwMTEwNSwKKwkweDkwNDQwNjAyLCAweDAwMDgyMDM4LCAweDJjMjAwODAwLCAweDQwOTAxMTA1LAorCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDA4LCAweDAwMDgwMDAwLCAweDEwMDAwMDAwLAorCTB4MDIwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwODAsIDB4MDAwMDEwMDAsCisJMHgwMjAwMDAwMCwgMHgwMDAwMDAwOCwgMHgwMDA4MDA4MCwgMHgxMDAwMTAwMCwKKwkweDAwMDA0MDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDQwLCAweDAwMDQwMDAwLAorCTB4MDAwMDQwMDAsIDB4MDAwMDAwMDgsIDB4MDAwODAwNDAsIDB4MTAwNDAwMDAsCisJMHgwMjAwNDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDBjMCwgMHgwMDA0MTAwMCwKKwkweDAyMDA0MDAwLCAweDAwMDAwMDA4LCAweDAwMDgwMGMwLCAweDEwMDQxMDAwLAorCTB4MDAwMjAwMDAsIDB4MDAwMDgwMDAsIDB4MDgwMDAwMDAsIDB4MDAyMDAwMDAsCisJMHgwMDAyMDAwMCwgMHgwMDAwODAwOCwgMHgwODA4MDAwMCwgMHgxMDIwMDAwMCwKKwkweDAyMDIwMDAwLCAweDAwMDA4MDAwLCAweDA4MDAwMDgwLCAweDAwMjAxMDAwLAorCTB4MDIwMjAwMDAsIDB4MDAwMDgwMDgsIDB4MDgwODAwODAsIDB4MTAyMDEwMDAsCisJMHgwMDAyNDAwMCwgMHgwMDAwODAwMCwgMHgwODAwMDA0MCwgMHgwMDI0MDAwMCwKKwkweDAwMDI0MDAwLCAweDAwMDA4MDA4LCAweDA4MDgwMDQwLCAweDEwMjQwMDAwLAorCTB4MDIwMjQwMDAsIDB4MDAwMDgwMDAsIDB4MDgwMDAwYzAsIDB4MDAyNDEwMDAsCisJMHgwMjAyNDAwMCwgMHgwMDAwODAwOCwgMHgwODA4MDBjMCwgMHgxMDI0MTAwMCwKKwkweDAwMDAwMDAwLCAweDAxMDAwMDAwLCAweDAwMDAyMDAwLCAweDAwMDAwMDIwLAorCTB4MDAwMDAwMDAsIDB4MDEwMDAwMDgsIDB4MDAwODIwMDAsIDB4MTAwMDAwMjAsCisJMHgwMjAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMDAwMjA4MCwgMHgwMDAwMTAyMCwKKwkweDAyMDAwMDAwLCAweDAxMDAwMDA4LCAweDAwMDgyMDgwLCAweDEwMDAxMDIwLAorCTB4MDAwMDQwMDAsIDB4MDEwMDAwMDAsIDB4MDAwMDIwNDAsIDB4MDAwNDAwMjAsCisJMHgwMDAwNDAwMCwgMHgwMTAwMDAwOCwgMHgwMDA4MjA0MCwgMHgxMDA0MDAyMCwKKwkweDAyMDA0MDAwLCAweDAxMDAwMDAwLCAweDAwMDAyMGMwLCAweDAwMDQxMDIwLAorCTB4MDIwMDQwMDAsIDB4MDEwMDAwMDgsIDB4MDAwODIwYzAsIDB4MTAwNDEwMjAsCisJMHgwMDAyMDAwMCwgMHgwMTAwODAwMCwgMHgwODAwMjAwMCwgMHgwMDIwMDAyMCwKKwkweDAwMDIwMDAwLCAweDAxMDA4MDA4LCAweDA4MDgyMDAwLCAweDEwMjAwMDIwLAorCTB4MDIwMjAwMDAsIDB4MDEwMDgwMDAsIDB4MDgwMDIwODAsIDB4MDAyMDEwMjAsCisJMHgwMjAyMDAwMCwgMHgwMTAwODAwOCwgMHgwODA4MjA4MCwgMHgxMDIwMTAyMCwKKwkweDAwMDI0MDAwLCAweDAxMDA4MDAwLCAweDA4MDAyMDQwLCAweDAwMjQwMDIwLAorCTB4MDAwMjQwMDAsIDB4MDEwMDgwMDgsIDB4MDgwODIwNDAsIDB4MTAyNDAwMjAsCisJMHgwMjAyNDAwMCwgMHgwMTAwODAwMCwgMHgwODAwMjBjMCwgMHgwMDI0MTAyMCwKKwkweDAyMDI0MDAwLCAweDAxMDA4MDA4LCAweDA4MDgyMGMwLCAweDEwMjQxMDIwLAorCTB4MDAwMDA0MDAsIDB4MDQwMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDQsCisJMHgwMDAwMDQwMCwgMHgwNDAwMDAwOCwgMHgwMDE4MDAwMCwgMHgxMDAwMDAwNCwKKwkweDAyMDAwNDAwLCAweDA0MDAwMDAwLCAweDAwMTAwMDgwLCAweDAwMDAxMDA0LAorCTB4MDIwMDA0MDAsIDB4MDQwMDAwMDgsIDB4MDAxODAwODAsIDB4MTAwMDEwMDQsCisJMHgwMDAwNDQwMCwgMHgwNDAwMDAwMCwgMHgwMDEwMDA0MCwgMHgwMDA0MDAwNCwKKwkweDAwMDA0NDAwLCAweDA0MDAwMDA4LCAweDAwMTgwMDQwLCAweDEwMDQwMDA0LAorCTB4MDIwMDQ0MDAsIDB4MDQwMDAwMDAsIDB4MDAxMDAwYzAsIDB4MDAwNDEwMDQsCisJMHgwMjAwNDQwMCwgMHgwNDAwMDAwOCwgMHgwMDE4MDBjMCwgMHgxMDA0MTAwNCwKKwkweDAwMDIwNDAwLCAweDA0MDA4MDAwLCAweDA4MTAwMDAwLCAweDAwMjAwMDA0LAorCTB4MDAwMjA0MDAsIDB4MDQwMDgwMDgsIDB4MDgxODAwMDAsIDB4MTAyMDAwMDQsCisJMHgwMjAyMDQwMCwgMHgwNDAwODAwMCwgMHgwODEwMDA4MCwgMHgwMDIwMTAwNCwKKwkweDAyMDIwNDAwLCAweDA0MDA4MDA4LCAweDA4MTgwMDgwLCAweDEwMjAxMDA0LAorCTB4MDAwMjQ0MDAsIDB4MDQwMDgwMDAsIDB4MDgxMDAwNDAsIDB4MDAyNDAwMDQsCisJMHgwMDAyNDQwMCwgMHgwNDAwODAwOCwgMHgwODE4MDA0MCwgMHgxMDI0MDAwNCwKKwkweDAyMDI0NDAwLCAweDA0MDA4MDAwLCAweDA4MTAwMGMwLCAweDAwMjQxMDA0LAorCTB4MDIwMjQ0MDAsIDB4MDQwMDgwMDgsIDB4MDgxODAwYzAsIDB4MTAyNDEwMDQsCisJMHgwMDAwMDQwMCwgMHgwNTAwMDAwMCwgMHgwMDEwMjAwMCwgMHgwMDAwMDAyNCwKKwkweDAwMDAwNDAwLCAweDA1MDAwMDA4LCAweDAwMTgyMDAwLCAweDEwMDAwMDI0LAorCTB4MDIwMDA0MDAsIDB4MDUwMDAwMDAsIDB4MDAxMDIwODAsIDB4MDAwMDEwMjQsCisJMHgwMjAwMDQwMCwgMHgwNTAwMDAwOCwgMHgwMDE4MjA4MCwgMHgxMDAwMTAyNCwKKwkweDAwMDA0NDAwLCAweDA1MDAwMDAwLCAweDAwMTAyMDQwLCAweDAwMDQwMDI0LAorCTB4MDAwMDQ0MDAsIDB4MDUwMDAwMDgsIDB4MDAxODIwNDAsIDB4MTAwNDAwMjQsCisJMHgwMjAwNDQwMCwgMHgwNTAwMDAwMCwgMHgwMDEwMjBjMCwgMHgwMDA0MTAyNCwKKwkweDAyMDA0NDAwLCAweDA1MDAwMDA4LCAweDAwMTgyMGMwLCAweDEwMDQxMDI0LAorCTB4MDAwMjA0MDAsIDB4MDUwMDgwMDAsIDB4MDgxMDIwMDAsIDB4MDAyMDAwMjQsCisJMHgwMDAyMDQwMCwgMHgwNTAwODAwOCwgMHgwODE4MjAwMCwgMHgxMDIwMDAyNCwKKwkweDAyMDIwNDAwLCAweDA1MDA4MDAwLCAweDA4MTAyMDgwLCAweDAwMjAxMDI0LAorCTB4MDIwMjA0MDAsIDB4MDUwMDgwMDgsIDB4MDgxODIwODAsIDB4MTAyMDEwMjQsCisJMHgwMDAyNDQwMCwgMHgwNTAwODAwMCwgMHgwODEwMjA0MCwgMHgwMDI0MDAyNCwKKwkweDAwMDI0NDAwLCAweDA1MDA4MDA4LCAweDA4MTgyMDQwLCAweDEwMjQwMDI0LAorCTB4MDIwMjQ0MDAsIDB4MDUwMDgwMDAsIDB4MDgxMDIwYzAsIDB4MDAyNDEwMjQsCisJMHgwMjAyNDQwMCwgMHgwNTAwODAwOCwgMHgwODE4MjBjMCwgMHgxMDI0MTAyNCwKKwkweDAwMDAwODAwLCAweDAwMDEwMDAwLCAweDIwMDAwMDAwLCAweDAwMDAwMDEwLAorCTB4MDAwMDA4MDAsIDB4MDAwMTAwMDgsIDB4MjAwODAwMDAsIDB4MTAwMDAwMTAsCisJMHgwMjAwMDgwMCwgMHgwMDAxMDAwMCwgMHgyMDAwMDA4MCwgMHgwMDAwMTAxMCwKKwkweDAyMDAwODAwLCAweDAwMDEwMDA4LCAweDIwMDgwMDgwLCAweDEwMDAxMDEwLAorCTB4MDAwMDQ4MDAsIDB4MDAwMTAwMDAsIDB4MjAwMDAwNDAsIDB4MDAwNDAwMTAsCisJMHgwMDAwNDgwMCwgMHgwMDAxMDAwOCwgMHgyMDA4MDA0MCwgMHgxMDA0MDAxMCwKKwkweDAyMDA0ODAwLCAweDAwMDEwMDAwLCAweDIwMDAwMGMwLCAweDAwMDQxMDEwLAorCTB4MDIwMDQ4MDAsIDB4MDAwMTAwMDgsIDB4MjAwODAwYzAsIDB4MTAwNDEwMTAsCisJMHgwMDAyMDgwMCwgMHgwMDAxODAwMCwgMHgyODAwMDAwMCwgMHgwMDIwMDAxMCwKKwkweDAwMDIwODAwLCAweDAwMDE4MDA4LCAweDI4MDgwMDAwLCAweDEwMjAwMDEwLAorCTB4MDIwMjA4MDAsIDB4MDAwMTgwMDAsIDB4MjgwMDAwODAsIDB4MDAyMDEwMTAsCisJMHgwMjAyMDgwMCwgMHgwMDAxODAwOCwgMHgyODA4MDA4MCwgMHgxMDIwMTAxMCwKKwkweDAwMDI0ODAwLCAweDAwMDE4MDAwLCAweDI4MDAwMDQwLCAweDAwMjQwMDEwLAorCTB4MDAwMjQ4MDAsIDB4MDAwMTgwMDgsIDB4MjgwODAwNDAsIDB4MTAyNDAwMTAsCisJMHgwMjAyNDgwMCwgMHgwMDAxODAwMCwgMHgyODAwMDBjMCwgMHgwMDI0MTAxMCwKKwkweDAyMDI0ODAwLCAweDAwMDE4MDA4LCAweDI4MDgwMGMwLCAweDEwMjQxMDEwLAorCTB4MDAwMDA4MDAsIDB4MDEwMTAwMDAsIDB4MjAwMDIwMDAsIDB4MDAwMDAwMzAsCisJMHgwMDAwMDgwMCwgMHgwMTAxMDAwOCwgMHgyMDA4MjAwMCwgMHgxMDAwMDAzMCwKKwkweDAyMDAwODAwLCAweDAxMDEwMDAwLCAweDIwMDAyMDgwLCAweDAwMDAxMDMwLAorCTB4MDIwMDA4MDAsIDB4MDEwMTAwMDgsIDB4MjAwODIwODAsIDB4MTAwMDEwMzAsCisJMHgwMDAwNDgwMCwgMHgwMTAxMDAwMCwgMHgyMDAwMjA0MCwgMHgwMDA0MDAzMCwKKwkweDAwMDA0ODAwLCAweDAxMDEwMDA4LCAweDIwMDgyMDQwLCAweDEwMDQwMDMwLAorCTB4MDIwMDQ4MDAsIDB4MDEwMTAwMDAsIDB4MjAwMDIwYzAsIDB4MDAwNDEwMzAsCisJMHgwMjAwNDgwMCwgMHgwMTAxMDAwOCwgMHgyMDA4MjBjMCwgMHgxMDA0MTAzMCwKKwkweDAwMDIwODAwLCAweDAxMDE4MDAwLCAweDI4MDAyMDAwLCAweDAwMjAwMDMwLAorCTB4MDAwMjA4MDAsIDB4MDEwMTgwMDgsIDB4MjgwODIwMDAsIDB4MTAyMDAwMzAsCisJMHgwMjAyMDgwMCwgMHgwMTAxODAwMCwgMHgyODAwMjA4MCwgMHgwMDIwMTAzMCwKKwkweDAyMDIwODAwLCAweDAxMDE4MDA4LCAweDI4MDgyMDgwLCAweDEwMjAxMDMwLAorCTB4MDAwMjQ4MDAsIDB4MDEwMTgwMDAsIDB4MjgwMDIwNDAsIDB4MDAyNDAwMzAsCisJMHgwMDAyNDgwMCwgMHgwMTAxODAwOCwgMHgyODA4MjA0MCwgMHgxMDI0MDAzMCwKKwkweDAyMDI0ODAwLCAweDAxMDE4MDAwLCAweDI4MDAyMGMwLCAweDAwMjQxMDMwLAorCTB4MDIwMjQ4MDAsIDB4MDEwMTgwMDgsIDB4MjgwODIwYzAsIDB4MTAyNDEwMzAsCisJMHgwMDAwMGMwMCwgMHgwNDAxMDAwMCwgMHgyMDEwMDAwMCwgMHgwMDAwMDAxNCwKKwkweDAwMDAwYzAwLCAweDA0MDEwMDA4LCAweDIwMTgwMDAwLCAweDEwMDAwMDE0LAorCTB4MDIwMDBjMDAsIDB4MDQwMTAwMDAsIDB4MjAxMDAwODAsIDB4MDAwMDEwMTQsCisJMHgwMjAwMGMwMCwgMHgwNDAxMDAwOCwgMHgyMDE4MDA4MCwgMHgxMDAwMTAxNCwKKwkweDAwMDA0YzAwLCAweDA0MDEwMDAwLCAweDIwMTAwMDQwLCAweDAwMDQwMDE0LAorCTB4MDAwMDRjMDAsIDB4MDQwMTAwMDgsIDB4MjAxODAwNDAsIDB4MTAwNDAwMTQsCisJMHgwMjAwNGMwMCwgMHgwNDAxMDAwMCwgMHgyMDEwMDBjMCwgMHgwMDA0MTAxNCwKKwkweDAyMDA0YzAwLCAweDA0MDEwMDA4LCAweDIwMTgwMGMwLCAweDEwMDQxMDE0LAorCTB4MDAwMjBjMDAsIDB4MDQwMTgwMDAsIDB4MjgxMDAwMDAsIDB4MDAyMDAwMTQsCisJMHgwMDAyMGMwMCwgMHgwNDAxODAwOCwgMHgyODE4MDAwMCwgMHgxMDIwMDAxNCwKKwkweDAyMDIwYzAwLCAweDA0MDE4MDAwLCAweDI4MTAwMDgwLCAweDAwMjAxMDE0LAorCTB4MDIwMjBjMDAsIDB4MDQwMTgwMDgsIDB4MjgxODAwODAsIDB4MTAyMDEwMTQsCisJMHgwMDAyNGMwMCwgMHgwNDAxODAwMCwgMHgyODEwMDA0MCwgMHgwMDI0MDAxNCwKKwkweDAwMDI0YzAwLCAweDA0MDE4MDA4LCAweDI4MTgwMDQwLCAweDEwMjQwMDE0LAorCTB4MDIwMjRjMDAsIDB4MDQwMTgwMDAsIDB4MjgxMDAwYzAsIDB4MDAyNDEwMTQsCisJMHgwMjAyNGMwMCwgMHgwNDAxODAwOCwgMHgyODE4MDBjMCwgMHgxMDI0MTAxNCwKKwkweDAwMDAwYzAwLCAweDA1MDEwMDAwLCAweDIwMTAyMDAwLCAweDAwMDAwMDM0LAorCTB4MDAwMDBjMDAsIDB4MDUwMTAwMDgsIDB4MjAxODIwMDAsIDB4MTAwMDAwMzQsCisJMHgwMjAwMGMwMCwgMHgwNTAxMDAwMCwgMHgyMDEwMjA4MCwgMHgwMDAwMTAzNCwKKwkweDAyMDAwYzAwLCAweDA1MDEwMDA4LCAweDIwMTgyMDgwLCAweDEwMDAxMDM0LAorCTB4MDAwMDRjMDAsIDB4MDUwMTAwMDAsIDB4MjAxMDIwNDAsIDB4MDAwNDAwMzQsCisJMHgwMDAwNGMwMCwgMHgwNTAxMDAwOCwgMHgyMDE4MjA0MCwgMHgxMDA0MDAzNCwKKwkweDAyMDA0YzAwLCAweDA1MDEwMDAwLCAweDIwMTAyMGMwLCAweDAwMDQxMDM0LAorCTB4MDIwMDRjMDAsIDB4MDUwMTAwMDgsIDB4MjAxODIwYzAsIDB4MTAwNDEwMzQsCisJMHgwMDAyMGMwMCwgMHgwNTAxODAwMCwgMHgyODEwMjAwMCwgMHgwMDIwMDAzNCwKKwkweDAwMDIwYzAwLCAweDA1MDE4MDA4LCAweDI4MTgyMDAwLCAweDEwMjAwMDM0LAorCTB4MDIwMjBjMDAsIDB4MDUwMTgwMDAsIDB4MjgxMDIwODAsIDB4MDAyMDEwMzQsCisJMHgwMjAyMGMwMCwgMHgwNTAxODAwOCwgMHgyODE4MjA4MCwgMHgxMDIwMTAzNCwKKwkweDAwMDI0YzAwLCAweDA1MDE4MDAwLCAweDI4MTAyMDQwLCAweDAwMjQwMDM0LAorCTB4MDAwMjRjMDAsIDB4MDUwMTgwMDgsIDB4MjgxODIwNDAsIDB4MTAyNDAwMzQsCisJMHgwMjAyNGMwMCwgMHgwNTAxODAwMCwgMHgyODEwMjBjMCwgMHgwMDI0MTAzNCwKKwkweDAyMDI0YzAwLCAweDA1MDE4MDA4LCAweDI4MTgyMGMwLCAweDEwMjQxMDM0CiB9OwogCisvKiBTLWJveCBsb29rdXAgdGFibGVzICovCiAKLXN0YXRpYyB2b2lkIGRlc19zbWFsbF9maXBzX2VuY3J5cHQodTMyICpleHBrZXksIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCitzdGF0aWMgY29uc3QgdTMyIFMxWzY0XSA9IHsKKwkweDAxMDEwNDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMDAwLCAweDAxMDEwNDA0LAorCTB4MDEwMTAwMDQsIDB4MDAwMTA0MDQsIDB4MDAwMDAwMDQsIDB4MDAwMTAwMDAsCisJMHgwMDAwMDQwMCwgMHgwMTAxMDQwMCwgMHgwMTAxMDQwNCwgMHgwMDAwMDQwMCwKKwkweDAxMDAwNDA0LCAweDAxMDEwMDA0LCAweDAxMDAwMDAwLCAweDAwMDAwMDA0LAorCTB4MDAwMDA0MDQsIDB4MDEwMDA0MDAsIDB4MDEwMDA0MDAsIDB4MDAwMTA0MDAsCisJMHgwMDAxMDQwMCwgMHgwMTAxMDAwMCwgMHgwMTAxMDAwMCwgMHgwMTAwMDQwNCwKKwkweDAwMDEwMDA0LCAweDAxMDAwMDA0LCAweDAxMDAwMDA0LCAweDAwMDEwMDA0LAorCTB4MDAwMDAwMDAsIDB4MDAwMDA0MDQsIDB4MDAwMTA0MDQsIDB4MDEwMDAwMDAsCisJMHgwMDAxMDAwMCwgMHgwMTAxMDQwNCwgMHgwMDAwMDAwNCwgMHgwMTAxMDAwMCwKKwkweDAxMDEwNDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAwMDAwNDAwLAorCTB4MDEwMTAwMDQsIDB4MDAwMTAwMDAsIDB4MDAwMTA0MDAsIDB4MDEwMDAwMDQsCisJMHgwMDAwMDQwMCwgMHgwMDAwMDAwNCwgMHgwMTAwMDQwNCwgMHgwMDAxMDQwNCwKKwkweDAxMDEwNDA0LCAweDAwMDEwMDA0LCAweDAxMDEwMDAwLCAweDAxMDAwNDA0LAorCTB4MDEwMDAwMDQsIDB4MDAwMDA0MDQsIDB4MDAwMTA0MDQsIDB4MDEwMTA0MDAsCisJMHgwMDAwMDQwNCwgMHgwMTAwMDQwMCwgMHgwMTAwMDQwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDEwMDA0LCAweDAwMDEwNDAwLCAweDAwMDAwMDAwLCAweDAxMDEwMDA0Cit9OworCitzdGF0aWMgY29uc3QgdTMyIFMyWzY0XSA9IHsKKwkweDgwMTA4MDIwLCAweDgwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMTA4MDIwLAorCTB4MDAxMDAwMDAsIDB4MDAwMDAwMjAsIDB4ODAxMDAwMjAsIDB4ODAwMDgwMjAsCisJMHg4MDAwMDAyMCwgMHg4MDEwODAyMCwgMHg4MDEwODAwMCwgMHg4MDAwMDAwMCwKKwkweDgwMDA4MDAwLCAweDAwMTAwMDAwLCAweDAwMDAwMDIwLCAweDgwMTAwMDIwLAorCTB4MDAxMDgwMDAsIDB4MDAxMDAwMjAsIDB4ODAwMDgwMjAsIDB4MDAwMDAwMDAsCisJMHg4MDAwMDAwMCwgMHgwMDAwODAwMCwgMHgwMDEwODAyMCwgMHg4MDEwMDAwMCwKKwkweDAwMTAwMDIwLCAweDgwMDAwMDIwLCAweDAwMDAwMDAwLCAweDAwMTA4MDAwLAorCTB4MDAwMDgwMjAsIDB4ODAxMDgwMDAsIDB4ODAxMDAwMDAsIDB4MDAwMDgwMjAsCisJMHgwMDAwMDAwMCwgMHgwMDEwODAyMCwgMHg4MDEwMDAyMCwgMHgwMDEwMDAwMCwKKwkweDgwMDA4MDIwLCAweDgwMTAwMDAwLCAweDgwMTA4MDAwLCAweDAwMDA4MDAwLAorCTB4ODAxMDAwMDAsIDB4ODAwMDgwMDAsIDB4MDAwMDAwMjAsIDB4ODAxMDgwMjAsCisJMHgwMDEwODAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwODAwMCwgMHg4MDAwMDAwMCwKKwkweDAwMDA4MDIwLCAweDgwMTA4MDAwLCAweDAwMTAwMDAwLCAweDgwMDAwMDIwLAorCTB4MDAxMDAwMjAsIDB4ODAwMDgwMjAsIDB4ODAwMDAwMjAsIDB4MDAxMDAwMjAsCisJMHgwMDEwODAwMCwgMHgwMDAwMDAwMCwgMHg4MDAwODAwMCwgMHgwMDAwODAyMCwKKwkweDgwMDAwMDAwLCAweDgwMTAwMDIwLCAweDgwMTA4MDIwLCAweDAwMTA4MDAwCit9OworCitzdGF0aWMgY29uc3QgdTMyIFMzWzY0XSA9IHsKKwkweDAwMDAwMjA4LCAweDA4MDIwMjAwLCAweDAwMDAwMDAwLCAweDA4MDIwMDA4LAorCTB4MDgwMDAyMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjAyMDgsIDB4MDgwMDAyMDAsCisJMHgwMDAyMDAwOCwgMHgwODAwMDAwOCwgMHgwODAwMDAwOCwgMHgwMDAyMDAwMCwKKwkweDA4MDIwMjA4LCAweDAwMDIwMDA4LCAweDA4MDIwMDAwLCAweDAwMDAwMjA4LAorCTB4MDgwMDAwMDAsIDB4MDAwMDAwMDgsIDB4MDgwMjAyMDAsIDB4MDAwMDAyMDAsCisJMHgwMDAyMDIwMCwgMHgwODAyMDAwMCwgMHgwODAyMDAwOCwgMHgwMDAyMDIwOCwKKwkweDA4MDAwMjA4LCAweDAwMDIwMjAwLCAweDAwMDIwMDAwLCAweDA4MDAwMjA4LAorCTB4MDAwMDAwMDgsIDB4MDgwMjAyMDgsIDB4MDAwMDAyMDAsIDB4MDgwMDAwMDAsCisJMHgwODAyMDIwMCwgMHgwODAwMDAwMCwgMHgwMDAyMDAwOCwgMHgwMDAwMDIwOCwKKwkweDAwMDIwMDAwLCAweDA4MDIwMjAwLCAweDA4MDAwMjAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAyMDAsIDB4MDAwMjAwMDgsIDB4MDgwMjAyMDgsIDB4MDgwMDAyMDAsCisJMHgwODAwMDAwOCwgMHgwMDAwMDIwMCwgMHgwMDAwMDAwMCwgMHgwODAyMDAwOCwKKwkweDA4MDAwMjA4LCAweDAwMDIwMDAwLCAweDA4MDAwMDAwLCAweDA4MDIwMjA4LAorCTB4MDAwMDAwMDgsIDB4MDAwMjAyMDgsIDB4MDAwMjAyMDAsIDB4MDgwMDAwMDgsCisJMHgwODAyMDAwMCwgMHgwODAwMDIwOCwgMHgwMDAwMDIwOCwgMHgwODAyMDAwMCwKKwkweDAwMDIwMjA4LCAweDAwMDAwMDA4LCAweDA4MDIwMDA4LCAweDAwMDIwMjAwCit9OworCitzdGF0aWMgY29uc3QgdTMyIFM0WzY0XSA9IHsKKwkweDAwODAyMDAxLCAweDAwMDAyMDgxLCAweDAwMDAyMDgxLCAweDAwMDAwMDgwLAorCTB4MDA4MDIwODAsIDB4MDA4MDAwODEsIDB4MDA4MDAwMDEsIDB4MDAwMDIwMDEsCisJMHgwMDAwMDAwMCwgMHgwMDgwMjAwMCwgMHgwMDgwMjAwMCwgMHgwMDgwMjA4MSwKKwkweDAwMDAwMDgxLCAweDAwMDAwMDAwLCAweDAwODAwMDgwLCAweDAwODAwMDAxLAorCTB4MDAwMDAwMDEsIDB4MDAwMDIwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDIwMDEsCisJMHgwMDAwMDA4MCwgMHgwMDgwMDAwMCwgMHgwMDAwMjAwMSwgMHgwMDAwMjA4MCwKKwkweDAwODAwMDgxLCAweDAwMDAwMDAxLCAweDAwMDAyMDgwLCAweDAwODAwMDgwLAorCTB4MDAwMDIwMDAsIDB4MDA4MDIwODAsIDB4MDA4MDIwODEsIDB4MDAwMDAwODEsCisJMHgwMDgwMDA4MCwgMHgwMDgwMDAwMSwgMHgwMDgwMjAwMCwgMHgwMDgwMjA4MSwKKwkweDAwMDAwMDgxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwODAyMDAwLAorCTB4MDAwMDIwODAsIDB4MDA4MDAwODAsIDB4MDA4MDAwODEsIDB4MDAwMDAwMDEsCisJMHgwMDgwMjAwMSwgMHgwMDAwMjA4MSwgMHgwMDAwMjA4MSwgMHgwMDAwMDA4MCwKKwkweDAwODAyMDgxLCAweDAwMDAwMDgxLCAweDAwMDAwMDAxLCAweDAwMDAyMDAwLAorCTB4MDA4MDAwMDEsIDB4MDAwMDIwMDEsIDB4MDA4MDIwODAsIDB4MDA4MDAwODEsCisJMHgwMDAwMjAwMSwgMHgwMDAwMjA4MCwgMHgwMDgwMDAwMCwgMHgwMDgwMjAwMSwKKwkweDAwMDAwMDgwLCAweDAwODAwMDAwLCAweDAwMDAyMDAwLCAweDAwODAyMDgwCit9OworCitzdGF0aWMgY29uc3QgdTMyIFM1WzY0XSA9IHsKKwkweDAwMDAwMTAwLCAweDAyMDgwMTAwLCAweDAyMDgwMDAwLCAweDQyMDAwMTAwLAorCTB4MDAwODAwMDAsIDB4MDAwMDAxMDAsIDB4NDAwMDAwMDAsIDB4MDIwODAwMDAsCisJMHg0MDA4MDEwMCwgMHgwMDA4MDAwMCwgMHgwMjAwMDEwMCwgMHg0MDA4MDEwMCwKKwkweDQyMDAwMTAwLCAweDQyMDgwMDAwLCAweDAwMDgwMTAwLCAweDQwMDAwMDAwLAorCTB4MDIwMDAwMDAsIDB4NDAwODAwMDAsIDB4NDAwODAwMDAsIDB4MDAwMDAwMDAsCisJMHg0MDAwMDEwMCwgMHg0MjA4MDEwMCwgMHg0MjA4MDEwMCwgMHgwMjAwMDEwMCwKKwkweDQyMDgwMDAwLCAweDQwMDAwMTAwLCAweDAwMDAwMDAwLCAweDQyMDAwMDAwLAorCTB4MDIwODAxMDAsIDB4MDIwMDAwMDAsIDB4NDIwMDAwMDAsIDB4MDAwODAxMDAsCisJMHgwMDA4MDAwMCwgMHg0MjAwMDEwMCwgMHgwMDAwMDEwMCwgMHgwMjAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDAyMDgwMDAwLCAweDQyMDAwMTAwLCAweDQwMDgwMTAwLAorCTB4MDIwMDAxMDAsIDB4NDAwMDAwMDAsIDB4NDIwODAwMDAsIDB4MDIwODAxMDAsCisJMHg0MDA4MDEwMCwgMHgwMDAwMDEwMCwgMHgwMjAwMDAwMCwgMHg0MjA4MDAwMCwKKwkweDQyMDgwMTAwLCAweDAwMDgwMTAwLCAweDQyMDAwMDAwLCAweDQyMDgwMTAwLAorCTB4MDIwODAwMDAsIDB4MDAwMDAwMDAsIDB4NDAwODAwMDAsIDB4NDIwMDAwMDAsCisJMHgwMDA4MDEwMCwgMHgwMjAwMDEwMCwgMHg0MDAwMDEwMCwgMHgwMDA4MDAwMCwKKwkweDAwMDAwMDAwLCAweDQwMDgwMDAwLCAweDAyMDgwMTAwLCAweDQwMDAwMTAwCit9OworCitzdGF0aWMgY29uc3QgdTMyIFM2WzY0XSA9IHsKKwkweDIwMDAwMDEwLCAweDIwNDAwMDAwLCAweDAwMDA0MDAwLCAweDIwNDA0MDEwLAorCTB4MjA0MDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA0MDQwMTAsIDB4MDA0MDAwMDAsCisJMHgyMDAwNDAwMCwgMHgwMDQwNDAxMCwgMHgwMDQwMDAwMCwgMHgyMDAwMDAxMCwKKwkweDAwNDAwMDEwLCAweDIwMDA0MDAwLCAweDIwMDAwMDAwLCAweDAwMDA0MDEwLAorCTB4MDAwMDAwMDAsIDB4MDA0MDAwMTAsIDB4MjAwMDQwMTAsIDB4MDAwMDQwMDAsCisJMHgwMDQwNDAwMCwgMHgyMDAwNDAxMCwgMHgwMDAwMDAxMCwgMHgyMDQwMDAxMCwKKwkweDIwNDAwMDEwLCAweDAwMDAwMDAwLCAweDAwNDA0MDEwLCAweDIwNDA0MDAwLAorCTB4MDAwMDQwMTAsIDB4MDA0MDQwMDAsIDB4MjA0MDQwMDAsIDB4MjAwMDAwMDAsCisJMHgyMDAwNDAwMCwgMHgwMDAwMDAxMCwgMHgyMDQwMDAxMCwgMHgwMDQwNDAwMCwKKwkweDIwNDA0MDEwLCAweDAwNDAwMDAwLCAweDAwMDA0MDEwLCAweDIwMDAwMDEwLAorCTB4MDA0MDAwMDAsIDB4MjAwMDQwMDAsIDB4MjAwMDAwMDAsIDB4MDAwMDQwMTAsCisJMHgyMDAwMDAxMCwgMHgyMDQwNDAxMCwgMHgwMDQwNDAwMCwgMHgyMDQwMDAwMCwKKwkweDAwNDA0MDEwLCAweDIwNDA0MDAwLCAweDAwMDAwMDAwLCAweDIwNDAwMDEwLAorCTB4MDAwMDAwMTAsIDB4MDAwMDQwMDAsIDB4MjA0MDAwMDAsIDB4MDA0MDQwMTAsCisJMHgwMDAwNDAwMCwgMHgwMDQwMDAxMCwgMHgyMDAwNDAxMCwgMHgwMDAwMDAwMCwKKwkweDIwNDA0MDAwLCAweDIwMDAwMDAwLCAweDAwNDAwMDEwLCAweDIwMDA0MDEwCit9OworCitzdGF0aWMgY29uc3QgdTMyIFM3WzY0XSA9IHsKKwkweDAwMjAwMDAwLCAweDA0MjAwMDAyLCAweDA0MDAwODAyLCAweDAwMDAwMDAwLAorCTB4MDAwMDA4MDAsIDB4MDQwMDA4MDIsIDB4MDAyMDA4MDIsIDB4MDQyMDA4MDAsCisJMHgwNDIwMDgwMiwgMHgwMDIwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwMiwKKwkweDAwMDAwMDAyLCAweDA0MDAwMDAwLCAweDA0MjAwMDAyLCAweDAwMDAwODAyLAorCTB4MDQwMDA4MDAsIDB4MDAyMDA4MDIsIDB4MDAyMDAwMDIsIDB4MDQwMDA4MDAsCisJMHgwNDAwMDAwMiwgMHgwNDIwMDAwMCwgMHgwNDIwMDgwMCwgMHgwMDIwMDAwMiwKKwkweDA0MjAwMDAwLCAweDAwMDAwODAwLCAweDAwMDAwODAyLCAweDA0MjAwODAyLAorCTB4MDAyMDA4MDAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMDAsIDB4MDAyMDA4MDAsCisJMHgwNDAwMDAwMCwgMHgwMDIwMDgwMCwgMHgwMDIwMDAwMCwgMHgwNDAwMDgwMiwKKwkweDA0MDAwODAyLCAweDA0MjAwMDAyLCAweDA0MjAwMDAyLCAweDAwMDAwMDAyLAorCTB4MDAyMDAwMDIsIDB4MDQwMDAwMDAsIDB4MDQwMDA4MDAsIDB4MDAyMDAwMDAsCisJMHgwNDIwMDgwMCwgMHgwMDAwMDgwMiwgMHgwMDIwMDgwMiwgMHgwNDIwMDgwMCwKKwkweDAwMDAwODAyLCAweDA0MDAwMDAyLCAweDA0MjAwODAyLCAweDA0MjAwMDAwLAorCTB4MDAyMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDQyMDA4MDIsCisJMHgwMDAwMDAwMCwgMHgwMDIwMDgwMiwgMHgwNDIwMDAwMCwgMHgwMDAwMDgwMCwKKwkweDA0MDAwMDAyLCAweDA0MDAwODAwLCAweDAwMDAwODAwLCAweDAwMjAwMDAyCit9OworCitzdGF0aWMgY29uc3QgdTMyIFM4WzY0XSA9IHsKKwkweDEwMDAxMDQwLCAweDAwMDAxMDAwLCAweDAwMDQwMDAwLCAweDEwMDQxMDQwLAorCTB4MTAwMDAwMDAsIDB4MTAwMDEwNDAsIDB4MDAwMDAwNDAsIDB4MTAwMDAwMDAsCisJMHgwMDA0MDA0MCwgMHgxMDA0MDAwMCwgMHgxMDA0MTA0MCwgMHgwMDA0MTAwMCwKKwkweDEwMDQxMDAwLCAweDAwMDQxMDQwLCAweDAwMDAxMDAwLCAweDAwMDAwMDQwLAorCTB4MTAwNDAwMDAsIDB4MTAwMDAwNDAsIDB4MTAwMDEwMDAsIDB4MDAwMDEwNDAsCisJMHgwMDA0MTAwMCwgMHgwMDA0MDA0MCwgMHgxMDA0MDA0MCwgMHgxMDA0MTAwMCwKKwkweDAwMDAxMDQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEwMDQwMDQwLAorCTB4MTAwMDAwNDAsIDB4MTAwMDEwMDAsIDB4MDAwNDEwNDAsIDB4MDAwNDAwMDAsCisJMHgwMDA0MTA0MCwgMHgwMDA0MDAwMCwgMHgxMDA0MTAwMCwgMHgwMDAwMTAwMCwKKwkweDAwMDAwMDQwLCAweDEwMDQwMDQwLCAweDAwMDAxMDAwLCAweDAwMDQxMDQwLAorCTB4MTAwMDEwMDAsIDB4MDAwMDAwNDAsIDB4MTAwMDAwNDAsIDB4MTAwNDAwMDAsCisJMHgxMDA0MDA0MCwgMHgxMDAwMDAwMCwgMHgwMDA0MDAwMCwgMHgxMDAwMTA0MCwKKwkweDAwMDAwMDAwLCAweDEwMDQxMDQwLCAweDAwMDQwMDQwLCAweDEwMDAwMDQwLAorCTB4MTAwNDAwMDAsIDB4MTAwMDEwMDAsIDB4MTAwMDEwNDAsIDB4MDAwMDAwMDAsCisJMHgxMDA0MTA0MCwgMHgwMDA0MTAwMCwgMHgwMDA0MTAwMCwgMHgwMDAwMTA0MCwKKwkweDAwMDAxMDQwLCAweDAwMDQwMDQwLCAweDEwMDAwMDAwLCAweDEwMDQxMDAwCit9OworCisvKiBFbmNyeXB0aW9uIGNvbXBvbmVudHM6IElQLCBGUCwgYW5kIHJvdW5kIGZ1bmN0aW9uICovCisKKyNkZWZpbmUgSVAoTCwgUiwgVCkJCVwKKwlST0woUiwgNCk7CQlcCisJVCAgPSBMOwkJCVwKKwlMIF49IFI7CQkJXAorCUwgJj0gMHhmMGYwZjBmMDsJXAorCVIgXj0gTDsJCQlcCisJTCBePSBUOwkJCVwKKwlST0woUiwgMTIpOwkJXAorCVQgID0gTDsJCQlcCisJTCBePSBSOwkJCVwKKwlMICY9IDB4ZmZmZjAwMDA7CVwKKwlSIF49IEw7CQkJXAorCUwgXj0gVDsJCQlcCisJUk9SKFIsIDE0KTsJCVwKKwlUICA9IEw7CQkJXAorCUwgXj0gUjsJCQlcCisJTCAmPSAweGNjY2NjY2NjOwlcCisJUiBePSBMOwkJCVwKKwlMIF49IFQ7CQkJXAorCVJPTChSLCA2KTsJCVwKKwlUICA9IEw7CQkJXAorCUwgXj0gUjsJCQlcCisJTCAmPSAweGZmMDBmZjAwOwlcCisJUiBePSBMOwkJCVwKKwlMIF49IFQ7CQkJXAorCVJPUihSLCA3KTsJCVwKKwlUICA9IEw7CQkJXAorCUwgXj0gUjsJCQlcCisJTCAmPSAweGFhYWFhYWFhOwlcCisJUiBePSBMOwkJCVwKKwlMIF49IFQ7CQkJXAorCVJPTChMLCAxKTsKKworI2RlZmluZSBGUChMLCBSLCBUKQkJXAorCVJPUihMLCAxKTsJCVwKKwlUICA9IEw7CQkJXAorCUwgXj0gUjsJCQlcCisJTCAmPSAweGFhYWFhYWFhOwlcCisJUiBePSBMOwkJCVwKKwlMIF49IFQ7CQkJXAorCVJPTChSLCA3KTsJCVwKKwlUICA9IEw7CQkJXAorCUwgXj0gUjsJCQlcCisJTCAmPSAweGZmMDBmZjAwOwlcCisJUiBePSBMOwkJCVwKKwlMIF49IFQ7CQkJXAorCVJPUihSLCA2KTsJCVwKKwlUICA9IEw7CQkJXAorCUwgXj0gUjsJCQlcCisJTCAmPSAweGNjY2NjY2NjOwlcCisJUiBePSBMOwkJCVwKKwlMIF49IFQ7CQkJXAorCVJPTChSLCAxNCk7CQlcCisJVCAgPSBMOwkJCVwKKwlMIF49IFI7CQkJXAorCUwgJj0gMHhmZmZmMDAwMDsJXAorCVIgXj0gTDsJCQlcCisJTCBePSBUOwkJCVwKKwlST1IoUiwgMTIpOwkJXAorCVQgID0gTDsJCQlcCisJTCBePSBSOwkJCVwKKwlMICY9IDB4ZjBmMGYwZjA7CVwKKwlSIF49IEw7CQkJXAorCUwgXj0gVDsJCQlcCisJUk9SKFIsIDQpOworCisjZGVmaW5lIFJPVU5EKEwsIFIsIEEsIEIsIEssIGQpCQkJCQlcCisJQiA9IEtbMF07CQkJQSA9IEtbMV07CUsgKz0gZDsJXAorCUIgXj0gUjsJCQkJQSBePSBSOwkJCVwKKwlCICY9IDB4M2YzZjNmM2Y7CQlST1IoQSwgNCk7CQlcCisJTCBePSBTOFsweGZmICYgQl07CQlBICY9IDB4M2YzZjNmM2Y7CVwKKwlMIF49IFM2WzB4ZmYgJiAoQiA+PiA4KV07CUIgPj49IDE2OwkJXAorCUwgXj0gUzdbMHhmZiAmIEFdOwkJCQkJXAorCUwgXj0gUzVbMHhmZiAmIChBID4+IDgpXTsJQSA+Pj0gMTY7CQlcCisJTCBePSBTNFsweGZmICYgQl07CQkJCQlcCisJTCBePSBTMlsweGZmICYgKEIgPj4gOCldOwkJCQlcCisJTCBePSBTM1sweGZmICYgQV07CQkJCQlcCisJTCBePSBTMVsweGZmICYgKEEgPj4gOCldOworCisvKgorICogUEMyIGxvb2t1cCB0YWJsZXMgYXJlIG9yZ2FuaXplZCBhcyAyIGNvbnNlY3V0aXZlIHNldHMgb2YgNCBpbnRlcmxlYXZlZAorICogdGFibGVzIG9mIDEyOCBlbGVtZW50cy4gIE9uZSBzZXQgaXMgZm9yIENfaSBhbmQgdGhlIG90aGVyIGZvciBEX2ksIHdoaWxlCisgKiB0aGUgNCBpbnRlcmxlYXZlZCB0YWJsZXMgY29ycmVzcG9uZCB0byBmb3VyIDctYml0IHN1YnNldHMgb2YgQ19pIG9yIERfaS4KKyAqCisgKiBBZnRlciBQQzEgZWFjaCBvZiB0aGUgdmFyaWFibGVzIGEsYixjLGQgY29udGFpbnMgYSA3IGJpdCBzdWJzZXQgb2YgQ19pCisgKiBvciBEX2kgaW4gYml0cyA3LTEgKGJpdCAwIGJlaW5nIHRoZSBsZWFzdCBzaWduaWZpY2FudCkuCisgKi8KKworI2RlZmluZSBUMSh4KSBwdFsyICogKHgpICsgMF0KKyNkZWZpbmUgVDIoeCkgcHRbMiAqICh4KSArIDFdCisjZGVmaW5lIFQzKHgpIHB0WzIgKiAoeCkgKyAyXQorI2RlZmluZSBUNCh4KSBwdFsyICogKHgpICsgM10KKworI2RlZmluZSBQQzIoYSwgYiwgYywgZCkgKFQ0KGQpIHwgVDMoYykgfCBUMihiKSB8IFQxKGEpKQorCisvKgorICogRW5jcnlwdGlvbiBrZXkgZXhwYW5zaW9uCisgKgorICogUkZDMjQ1MTogV2VhayBrZXkgY2hlY2tzIFNIT1VMRCBiZSBwZXJmb3JtZWQuCisgKgorICogRklQUyA3NDoKKyAqCisgKiAgIEtleXMgaGF2aW5nIGR1YWxzIGFyZSBrZXlzIHdoaWNoIHByb2R1Y2UgYWxsIHplcm9zLCBhbGwgb25lcywgb3IKKyAqICAgYWx0ZXJuYXRpbmcgemVyby1vbmUgcGF0dGVybnMgaW4gdGhlIEMgYW5kIEQgcmVnaXN0ZXJzIGFmdGVyIFBlcm11dGVkCisgKiAgIENob2ljZSAxIGhhcyBvcGVyYXRlZCBvbiB0aGUga2V5LgorICoKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZWtleSh1MzIgKnBlLCBjb25zdCB1OCAqaykKIHsKLQl1MzIgeCwgeSwgejsKLQkKLQl4ICA9IHNyY1s3XTsKLQl4IDw8PSA4OwotCXggfD0gc3JjWzZdOwotCXggPDw9IDg7Ci0JeCB8PSBzcmNbNV07Ci0JeCA8PD0gODsKLQl4IHw9IHNyY1s0XTsKLQl5ICA9IHNyY1szXTsKLQl5IDw8PSA4OwotCXkgfD0gc3JjWzJdOwotCXkgPDw9IDg7Ci0JeSB8PSBzcmNbMV07Ci0JeSA8PD0gODsKLQl5IHw9IHNyY1swXTsKLQl6ICA9ICgoeCA+PiAwMDQpIF4geSkgJiAweDBGMEYwRjBGTDsKLQl4IF49IHogPDwgMDA0OwotCXkgXj0gejsKLQl6ICA9ICgoeSA+PiAwMjApIF4geCkgJiAweDAwMDBGRkZGTDsKLQl5IF49IHogPDwgMDIwOwotCXggXj0gejsKLQl6ICA9ICgoeCA+PiAwMDIpIF4geSkgJiAweDMzMzMzMzMzTDsKLQl4IF49IHogPDwgMDAyOwotCXkgXj0gejsKLQl6ICA9ICgoeSA+PiAwMTApIF4geCkgJiAweDAwRkYwMEZGTDsKLQl5IF49IHogPDwgMDEwOwotCXggXj0gejsKLQl4ICA9IHggPj4gMSB8IHggPDwgMzE7Ci0JeiAgPSAoeCBeIHkpICYgMHg1NTU1NTU1NUw7Ci0JeSBePSB6OwotCXggXj0gejsKLQl5ICA9IHkgPj4gMSB8IHkgPDwgMzE7Ci0JeiAgPSBleHBrZXlbMF07Ci0JeiBePSB5OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMV07Ci0JeiBePSB5OwotCXogID0geiA8PCA0IHwgeiA+PiAyODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzJdOwotCXogXj0geDsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzNdOwotCXogXj0geDsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVs0XTsKLQl6IF49IHk7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxMjgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVs1XTsKLQl6IF49IHk7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbNl07Ci0JeiBePSB4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbN107Ci0JeiBePSB4OwotCXogID0geiA8PCA0IHwgeiA+PiAyODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzhdOwotCXogXj0geTsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzldOwotCXogXj0geTsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsxMF07Ci0JeiBePSB4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMTFdOwotCXogXj0geDsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsxMl07Ci0JeiBePSB5OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMTNdOwotCXogXj0geTsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsxNF07Ci0JeiBePSB4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMTVdOwotCXogXj0geDsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsxNl07Ci0JeiBePSB5OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMTddOwotCXogXj0geTsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsxOF07Ci0JeiBePSB4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMTldOwotCXogXj0geDsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsyMF07Ci0JeiBePSB5OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjFdOwotCXogXj0geTsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsyMl07Ci0JeiBePSB4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjNdOwotCXogXj0geDsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsyNF07Ci0JeiBePSB5OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjVdOwotCXogXj0geTsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsyNl07Ci0JeiBePSB4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjddOwotCXogXj0geDsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsyOF07Ci0JeiBePSB5OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjldOwotCXogXj0geTsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVszMF07Ci0JeiBePSB4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMzFdOwotCXogXj0geDsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl4ICA9IHggPDwgMSB8IHggPj4gMzE7Ci0JeiAgPSAoeCBeIHkpICYgMHg1NTU1NTU1NUw7Ci0JeSBePSB6OwotCXggXj0gejsKLQl5ICA9IHkgPDwgMSB8IHkgPj4gMzE7Ci0JeiAgPSAoKHggPj4gMDEwKSBeIHkpICYgMHgwMEZGMDBGRkw7Ci0JeCBePSB6IDw8IDAxMDsKLQl5IF49IHo7Ci0JeiAgPSAoKHkgPj4gMDAyKSBeIHgpICYgMHgzMzMzMzMzM0w7Ci0JeSBePSB6IDw8IDAwMjsKLQl4IF49IHo7Ci0JeiAgPSAoKHggPj4gMDIwKSBeIHkpICYgMHgwMDAwRkZGRkw7Ci0JeCBePSB6IDw8IDAyMDsKLQl5IF49IHo7Ci0JeiAgPSAoKHkgPj4gMDA0KSBeIHgpICYgMHgwRjBGMEYwRkw7Ci0JeSBePSB6IDw8IDAwNDsKLQl4IF49IHo7Ci0JZHN0WzBdID0geDsKLQl4ID4+PSA4OwotCWRzdFsxXSA9IHg7Ci0JeCA+Pj0gODsKLQlkc3RbMl0gPSB4OwotCXggPj49IDg7Ci0JZHN0WzNdID0geDsKLQlkc3RbNF0gPSB5OwotCXkgPj49IDg7Ci0JZHN0WzVdID0geTsKLQl5ID4+PSA4OwotCWRzdFs2XSA9IHk7Ci0JeSA+Pj0gODsKLQlkc3RbN10gPSB5OwotfQorCS8qIEsmUjogbG9uZyBpcyBhdCBsZWFzdCAzMiBiaXRzICovCisJdW5zaWduZWQgbG9uZyBhLCBiLCBjLCBkLCB3OworCWNvbnN0IHUzMiAqcHQgPSBwYzI7CiAKLXN0YXRpYyB2b2lkIGRlc19zbWFsbF9maXBzX2RlY3J5cHQodTMyICpleHBrZXksIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCi17Ci0JdTMyIHgsIHksIHo7Ci0JCi0JeCAgPSBzcmNbN107Ci0JeCA8PD0gODsKLQl4IHw9IHNyY1s2XTsKLQl4IDw8PSA4OwotCXggfD0gc3JjWzVdOwotCXggPDw9IDg7Ci0JeCB8PSBzcmNbNF07Ci0JeSAgPSBzcmNbM107Ci0JeSA8PD0gODsKLQl5IHw9IHNyY1syXTsKLQl5IDw8PSA4OwotCXkgfD0gc3JjWzFdOwotCXkgPDw9IDg7Ci0JeSB8PSBzcmNbMF07Ci0JeiAgPSAoKHggPj4gMDA0KSBeIHkpICYgMHgwRjBGMEYwRkw7Ci0JeCBePSB6IDw8IDAwNDsKLQl5IF49IHo7Ci0JeiAgPSAoKHkgPj4gMDIwKSBeIHgpICYgMHgwMDAwRkZGRkw7Ci0JeSBePSB6IDw8IDAyMDsKLQl4IF49IHo7Ci0JeiAgPSAoKHggPj4gMDAyKSBeIHkpICYgMHgzMzMzMzMzM0w7Ci0JeCBePSB6IDw8IDAwMjsKLQl5IF49IHo7Ci0JeiAgPSAoKHkgPj4gMDEwKSBeIHgpICYgMHgwMEZGMDBGRkw7Ci0JeSBePSB6IDw8IDAxMDsKLQl4IF49IHo7Ci0JeCAgPSB4ID4+IDEgfCB4IDw8IDMxOwotCXogID0gKHggXiB5KSAmIDB4NTU1NTU1NTVMOwotCXkgXj0gejsKLQl4IF49IHo7Ci0JeSAgPSB5ID4+IDEgfCB5IDw8IDMxOwotCXogID0gZXhwa2V5WzMxXTsKLQl6IF49IHk7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMzBdOwotCXogXj0geTsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzI5XTsKLQl6IF49IHg7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjhdOwotCXogXj0geDsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzI3XTsKLQl6IF49IHk7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjZdOwotCXogXj0geTsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzI1XTsKLQl6IF49IHg7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjRdOwotCXogXj0geDsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzIzXTsKLQl6IF49IHk7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjJdOwotCXogXj0geTsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzIxXTsKLQl6IF49IHg7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMjBdOwotCXogXj0geDsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzE5XTsKLQl6IF49IHk7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMThdOwotCXogXj0geTsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzE3XTsKLQl6IF49IHg7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMTZdOwotCXogXj0geDsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzE1XTsKLQl6IF49IHk7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMTRdOwotCXogXj0geTsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzEzXTsKLQl6IF49IHg7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMTJdOwotCXogXj0geDsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzExXTsKLQl6IF49IHk7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMTBdOwotCXogXj0geTsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzldOwotCXogXj0geDsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVs4XTsKLQl6IF49IHg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxMjgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVs3XTsKLQl6IF49IHk7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbNl07Ci0JeiBePSB5OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbNV07Ci0JeiBePSB4OwotCXogID0geiA8PCA0IHwgeiA+PiAyODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzRdOwotCXogXj0geDsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwotCXogID0gZXhwa2V5WzNdOwotCXogXj0geTsKLQl6ICA9IHogPDwgNCB8IHogPj4gMjg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsyXTsKLQl6IF49IHk7Ci0JeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxMjgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKLQl6ICA9IGV4cGtleVsxXTsKLQl6IF49IHg7Ci0JeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKLQl6ID4+PSA4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Ci0JeiAgPSBleHBrZXlbMF07Ci0JeiBePSB4OwotCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Ci0JeiA+Pj0gODsKLQl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwotCXogPj49IDg7Ci0JeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Ci0JeCAgPSB4IDw8IDEgfCB4ID4+IDMxOwotCXogID0gKHggXiB5KSAmIDB4NTU1NTU1NTVMOwotCXkgXj0gejsKLQl4IF49IHo7Ci0JeSAgPSB5IDw8IDEgfCB5ID4+IDMxOwotCXogID0gKCh4ID4+IDAxMCkgXiB5KSAmIDB4MDBGRjAwRkZMOwotCXggXj0geiA8PCAwMTA7Ci0JeSBePSB6OwotCXogID0gKCh5ID4+IDAwMikgXiB4KSAmIDB4MzMzMzMzMzNMOwotCXkgXj0geiA8PCAwMDI7Ci0JeCBePSB6OwotCXogID0gKCh4ID4+IDAyMCkgXiB5KSAmIDB4MDAwMEZGRkZMOwotCXggXj0geiA8PCAwMjA7Ci0JeSBePSB6OwotCXogID0gKCh5ID4+IDAwNCkgXiB4KSAmIDB4MEYwRjBGMEZMOwotCXkgXj0geiA8PCAwMDQ7Ci0JeCBePSB6OwotCWRzdFswXSA9IHg7Ci0JeCA+Pj0gODsKLQlkc3RbMV0gPSB4OwotCXggPj49IDg7Ci0JZHN0WzJdID0geDsKLQl4ID4+PSA4OwotCWRzdFszXSA9IHg7Ci0JZHN0WzRdID0geTsKLQl5ID4+PSA4OwotCWRzdFs1XSA9IHk7Ci0JeSA+Pj0gODsKLQlkc3RbNl0gPSB5OwotCXkgPj49IDg7Ci0JZHN0WzddID0geTsKKwlkID0ga1s0XTsgZCAmPSAweDBlOyBkIDw8PSA0OyBkIHw9IGtbMF0gJiAweDFlOyBkID0gcGMxW2RdOworCWMgPSBrWzVdOyBjICY9IDB4MGU7IGMgPDw9IDQ7IGMgfD0ga1sxXSAmIDB4MWU7IGMgPSBwYzFbY107CisJYiA9IGtbNl07IGIgJj0gMHgwZTsgYiA8PD0gNDsgYiB8PSBrWzJdICYgMHgxZTsgYiA9IHBjMVtiXTsKKwlhID0ga1s3XTsgYSAmPSAweDBlOyBhIDw8PSA0OyBhIHw9IGtbM10gJiAweDFlOyBhID0gcGMxW2FdOworCisJcGVbMTUgKiAyICsgMF0gPSBQQzIoYSwgYiwgYywgZCk7IGQgPSByc1tkXTsKKwlwZVsxNCAqIDIgKyAwXSA9IFBDMihkLCBhLCBiLCBjKTsgYyA9IHJzW2NdOyBiID0gcnNbYl07CisJcGVbMTMgKiAyICsgMF0gPSBQQzIoYiwgYywgZCwgYSk7IGEgPSByc1thXTsgZCA9IHJzW2RdOworCXBlWzEyICogMiArIDBdID0gUEMyKGQsIGEsIGIsIGMpOyBjID0gcnNbY107IGIgPSByc1tiXTsKKwlwZVsxMSAqIDIgKyAwXSA9IFBDMihiLCBjLCBkLCBhKTsgYSA9IHJzW2FdOyBkID0gcnNbZF07CisJcGVbMTAgKiAyICsgMF0gPSBQQzIoZCwgYSwgYiwgYyk7IGMgPSByc1tjXTsgYiA9IHJzW2JdOworCXBlWyA5ICogMiArIDBdID0gUEMyKGIsIGMsIGQsIGEpOyBhID0gcnNbYV07IGQgPSByc1tkXTsKKwlwZVsgOCAqIDIgKyAwXSA9IFBDMihkLCBhLCBiLCBjKTsgYyA9IHJzW2NdOworCXBlWyA3ICogMiArIDBdID0gUEMyKGMsIGQsIGEsIGIpOyBiID0gcnNbYl07IGEgPSByc1thXTsKKwlwZVsgNiAqIDIgKyAwXSA9IFBDMihhLCBiLCBjLCBkKTsgZCA9IHJzW2RdOyBjID0gcnNbY107CisJcGVbIDUgKiAyICsgMF0gPSBQQzIoYywgZCwgYSwgYik7IGIgPSByc1tiXTsgYSA9IHJzW2FdOworCXBlWyA0ICogMiArIDBdID0gUEMyKGEsIGIsIGMsIGQpOyBkID0gcnNbZF07IGMgPSByc1tjXTsKKwlwZVsgMyAqIDIgKyAwXSA9IFBDMihjLCBkLCBhLCBiKTsgYiA9IHJzW2JdOyBhID0gcnNbYV07CisJcGVbIDIgKiAyICsgMF0gPSBQQzIoYSwgYiwgYywgZCk7IGQgPSByc1tkXTsgYyA9IHJzW2NdOworCXBlWyAxICogMiArIDBdID0gUEMyKGMsIGQsIGEsIGIpOyBiID0gcnNbYl07CisJcGVbIDAgKiAyICsgMF0gPSBQQzIoYiwgYywgZCwgYSk7CisKKwkvKiBDaGVjayBpZiBmaXJzdCBoYWxmIGlzIHdlYWsgKi8KKwl3ICA9IChhIF4gYykgfCAoYiBeIGQpIHwgKHJzW2FdIF4gYykgfCAoYiBeIHJzW2RdKTsKKworCS8qIFNraXAgdG8gbmV4dCB0YWJsZSBzZXQgKi8KKwlwdCArPSA1MTI7CisKKwlkID0ga1swXTsgZCAmPSAweGUwOyBkID4+PSA0OyBkIHw9IGtbNF0gJiAweGYwOyBkID0gcGMxW2QgKyAxXTsKKwljID0ga1sxXTsgYyAmPSAweGUwOyBjID4+PSA0OyBjIHw9IGtbNV0gJiAweGYwOyBjID0gcGMxW2MgKyAxXTsKKwliID0ga1syXTsgYiAmPSAweGUwOyBiID4+PSA0OyBiIHw9IGtbNl0gJiAweGYwOyBiID0gcGMxW2IgKyAxXTsKKwlhID0ga1szXTsgYSAmPSAweGUwOyBhID4+PSA0OyBhIHw9IGtbN10gJiAweGYwOyBhID0gcGMxW2EgKyAxXTsKKworCS8qIENoZWNrIGlmIHNlY29uZCBoYWxmIGlzIHdlYWsgKi8KKwl3IHw9IChhIF4gYykgfCAoYiBeIGQpIHwgKHJzW2FdIF4gYykgfCAoYiBeIHJzW2RdKTsKKworCXBlWzE1ICogMiArIDFdID0gUEMyKGEsIGIsIGMsIGQpOyBkID0gcnNbZF07CisJcGVbMTQgKiAyICsgMV0gPSBQQzIoZCwgYSwgYiwgYyk7IGMgPSByc1tjXTsgYiA9IHJzW2JdOworCXBlWzEzICogMiArIDFdID0gUEMyKGIsIGMsIGQsIGEpOyBhID0gcnNbYV07IGQgPSByc1tkXTsKKwlwZVsxMiAqIDIgKyAxXSA9IFBDMihkLCBhLCBiLCBjKTsgYyA9IHJzW2NdOyBiID0gcnNbYl07CisJcGVbMTEgKiAyICsgMV0gPSBQQzIoYiwgYywgZCwgYSk7IGEgPSByc1thXTsgZCA9IHJzW2RdOworCXBlWzEwICogMiArIDFdID0gUEMyKGQsIGEsIGIsIGMpOyBjID0gcnNbY107IGIgPSByc1tiXTsKKwlwZVsgOSAqIDIgKyAxXSA9IFBDMihiLCBjLCBkLCBhKTsgYSA9IHJzW2FdOyBkID0gcnNbZF07CisJcGVbIDggKiAyICsgMV0gPSBQQzIoZCwgYSwgYiwgYyk7IGMgPSByc1tjXTsKKwlwZVsgNyAqIDIgKyAxXSA9IFBDMihjLCBkLCBhLCBiKTsgYiA9IHJzW2JdOyBhID0gcnNbYV07CisJcGVbIDYgKiAyICsgMV0gPSBQQzIoYSwgYiwgYywgZCk7IGQgPSByc1tkXTsgYyA9IHJzW2NdOworCXBlWyA1ICogMiArIDFdID0gUEMyKGMsIGQsIGEsIGIpOyBiID0gcnNbYl07IGEgPSByc1thXTsKKwlwZVsgNCAqIDIgKyAxXSA9IFBDMihhLCBiLCBjLCBkKTsgZCA9IHJzW2RdOyBjID0gcnNbY107CisJcGVbIDMgKiAyICsgMV0gPSBQQzIoYywgZCwgYSwgYik7IGIgPSByc1tiXTsgYSA9IHJzW2FdOworCXBlWyAyICogMiArIDFdID0gUEMyKGEsIGIsIGMsIGQpOyBkID0gcnNbZF07IGMgPSByc1tjXTsKKwlwZVsgMSAqIDIgKyAxXSA9IFBDMihjLCBkLCBhLCBiKTsgYiA9IHJzW2JdOworCXBlWyAwICogMiArIDFdID0gUEMyKGIsIGMsIGQsIGEpOworCisJLyogRml4dXA6IDI0MTMgNTc2OCAtPiAxMzU3IDI0NjggKi8KKwlmb3IgKGQgPSAwOyBkIDwgMTY7ICsrZCkgeworCQlhID0gcGVbMiAqIGRdOworCQliID0gcGVbMiAqIGQgKyAxXTsKKwkJYyA9IGEgXiBiOworCQljICY9IDB4ZmZmZjAwMDA7CisJCWEgXj0gYzsKKwkJYiBePSBjOworCQlST0woYiwgMTgpOworCQlwZVsyICogZF0gPSBhOworCQlwZVsyICogZCArIDFdID0gYjsKKwl9CisKKwkvKiBaZXJvIGlmIHdlYWsga2V5ICovCisJcmV0dXJuIHc7CiB9CiAKIC8qCi0gKiBSRkMyNDUxOiBXZWFrIGtleSBjaGVja3MgU0hPVUxEIGJlIHBlcmZvcm1lZC4KKyAqIERlY3J5cHRpb24ga2V5IGV4cGFuc2lvbgorICoKKyAqIE5vIHdlYWsga2V5IGNoZWNraW5nIGlzIHBlcmZvcm1lZCwgYXMgdGhpcyBpcyBvbmx5IHVzZWQgYnkgdHJpcGxlIERFUworICoKICAqLwotc3RhdGljIGludCBzZXRrZXkodTMyICpleHBrZXksIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCitzdGF0aWMgdm9pZCBka2V5KHUzMiAqcGUsIGNvbnN0IHU4ICprKQogewotCWNvbnN0IHU4ICprOwotCXU4ICpiMCwgKmIxOwotCXUzMiBuLCB3OwotCXU4IGJpdHMwWzU2XSwgYml0czFbNTZdOworCS8qIEsmUjogbG9uZyBpcyBhdCBsZWFzdCAzMiBiaXRzICovCisJdW5zaWduZWQgbG9uZyBhLCBiLCBjLCBkOworCWNvbnN0IHUzMiAqcHQgPSBwYzI7CiAKLQluICA9IHBhcml0eVtrZXlbMF1dOyBuIDw8PSA0OwotCW4gfD0gcGFyaXR5W2tleVsxXV07IG4gPDw9IDQ7Ci0JbiB8PSBwYXJpdHlba2V5WzJdXTsgbiA8PD0gNDsKLQluIHw9IHBhcml0eVtrZXlbM11dOyBuIDw8PSA0OwotCW4gfD0gcGFyaXR5W2tleVs0XV07IG4gPDw9IDQ7Ci0JbiB8PSBwYXJpdHlba2V5WzVdXTsgbiA8PD0gNDsKLQluIHw9IHBhcml0eVtrZXlbNl1dOyBuIDw8PSA0OwotCW4gfD0gcGFyaXR5W2tleVs3XV07Ci0JdyA9IDB4ODg4ODg4ODhMOwotCQotCWlmICgoKmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkpCi0JICAgICYmICEoKG4gLSAodyA+PiAzKSkgJiB3KSkgeyAgLyogMSBpbiAxMF4xMCBrZXlzIHBhc3NlcyB0aGlzIHRlc3QgKi8KLQkJaWYgKG4gPCAweDQxNDE1MTUxKSB7Ci0JCQlpZiAobiA8IDB4MzEzMTIxMjEpIHsKLQkJCQlpZiAobiA8IDB4MTQxNDE1MTUpIHsKLQkJCQkJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KLQkJCQkJaWYgKG4gPT0gMHgxMTExMTExMSkgZ290byB3ZWFrOwotCQkJCQkvKiAwMSAxRiAwMSAxRiAwMSAwRSAwMSAwRSAqLwotCQkJCQlpZiAobiA9PSAweDEzMTMxMjEyKSBnb3RvIHdlYWs7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogMDEgRTAgMDEgRTAgMDEgRjEgMDEgRjEgKi8KLQkJCQkJaWYgKG4gPT0gMHgxNDE0MTUxNSkgZ290byB3ZWFrOwotCQkJCQkvKiAwMSBGRSAwMSBGRSAwMSBGRSAwMSBGRSAqLwotCQkJCQlpZiAobiA9PSAweDE2MTYxNjE2KSBnb3RvIHdlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAobiA8IDB4MzQzNDI1MjUpIHsKLQkJCQkJLyogMUYgMDEgMUYgMDEgMEUgMDEgMEUgMDEgKi8KLQkJCQkJaWYgKG4gPT0gMHgzMTMxMjEyMSkgZ290byB3ZWFrOwotCQkJCQkvKiAxRiAxRiAxRiAxRiAwRSAwRSAwRSAwRSAoPykgKi8KLQkJCQkJaWYgKG4gPT0gMHgzMzMzMjIyMikgZ290byB3ZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIDFGIEUwIDFGIEUwIDBFIEYxIDBFIEYxICovCi0JCQkJCWlmIChuID09IDB4MzQzNDI1MjUpIGdvdG8gd2VhazsKLQkJCQkJLyogMUYgRkUgMUYgRkUgMEUgRkUgMEUgRkUgKi8KLQkJCQkJaWYgKG4gPT0gMHgzNjM2MjYyNikgZ290byB3ZWFrOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChuIDwgMHg2MTYxNjE2MSkgewotCQkJCWlmIChuIDwgMHg0NDQ0NTU1NSkgewotCQkJCQkvKiBFMCAwMSBFMCAwMSBGMSAwMSBGMSAwMSAqLwotCQkJCQlpZiAobiA9PSAweDQxNDE1MTUxKSBnb3RvIHdlYWs7Ci0JCQkJCS8qIEUwIDFGIEUwIDFGIEYxIDBFIEYxIDBFICovCi0JCQkJCWlmIChuID09IDB4NDM0MzUyNTIpIGdvdG8gd2VhazsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBFMCBFMCBFMCBFMCBGMSBGMSBGMSBGMSAoPykgKi8KLQkJCQkJaWYgKG4gPT0gMHg0NDQ0NTU1NSkgZ290byB3ZWFrOwotCQkJCQkvKiBFMCBGRSBFMCBGRSBGMSBGRSBGMSBGRSAqLwotCQkJCQlpZiAobiA9PSAweDQ2NDY1NjU2KSBnb3RvIHdlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAobiA8IDB4NjQ2NDY1NjUpIHsKLQkJCQkJLyogRkUgMDEgRkUgMDEgRkUgMDEgRkUgMDEgKi8KLQkJCQkJaWYgKG4gPT0gMHg2MTYxNjE2MSkgZ290byB3ZWFrOwotCQkJCQkvKiBGRSAxRiBGRSAxRiBGRSAwRSBGRSAwRSAqLwotCQkJCQlpZiAobiA9PSAweDYzNjM2MjYyKSBnb3RvIHdlYWs7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogRkUgRTAgRkUgRTAgRkUgRjEgRkUgRjEgKi8KLQkJCQkJaWYgKG4gPT0gMHg2NDY0NjU2NSkgZ290byB3ZWFrOwotCQkJCQkvKiBGRSBGRSBGRSBGRSBGRSBGRSBGRSBGRSAqLwotCQkJCQlpZiAobiA9PSAweDY2NjY2NjY2KSBnb3RvIHdlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCi0JCWdvdG8gbm90X3dlYWs7Ci13ZWFrOgotCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfV0VBS19LRVk7Ci0JCXJldHVybiAtRUlOVkFMOworCWQgPSBrWzRdOyBkICY9IDB4MGU7IGQgPDw9IDQ7IGQgfD0ga1swXSAmIDB4MWU7IGQgPSBwYzFbZF07CisJYyA9IGtbNV07IGMgJj0gMHgwZTsgYyA8PD0gNDsgYyB8PSBrWzFdICYgMHgxZTsgYyA9IHBjMVtjXTsKKwliID0ga1s2XTsgYiAmPSAweDBlOyBiIDw8PSA0OyBiIHw9IGtbMl0gJiAweDFlOyBiID0gcGMxW2JdOworCWEgPSBrWzddOyBhICY9IDB4MGU7IGEgPDw9IDQ7IGEgfD0ga1szXSAmIDB4MWU7IGEgPSBwYzFbYV07CisKKwlwZVsgMCAqIDJdID0gUEMyKGEsIGIsIGMsIGQpOyBkID0gcnNbZF07CisJcGVbIDEgKiAyXSA9IFBDMihkLCBhLCBiLCBjKTsgYyA9IHJzW2NdOyBiID0gcnNbYl07CisJcGVbIDIgKiAyXSA9IFBDMihiLCBjLCBkLCBhKTsgYSA9IHJzW2FdOyBkID0gcnNbZF07CisJcGVbIDMgKiAyXSA9IFBDMihkLCBhLCBiLCBjKTsgYyA9IHJzW2NdOyBiID0gcnNbYl07CisJcGVbIDQgKiAyXSA9IFBDMihiLCBjLCBkLCBhKTsgYSA9IHJzW2FdOyBkID0gcnNbZF07CisJcGVbIDUgKiAyXSA9IFBDMihkLCBhLCBiLCBjKTsgYyA9IHJzW2NdOyBiID0gcnNbYl07CisJcGVbIDYgKiAyXSA9IFBDMihiLCBjLCBkLCBhKTsgYSA9IHJzW2FdOyBkID0gcnNbZF07CisJcGVbIDcgKiAyXSA9IFBDMihkLCBhLCBiLCBjKTsgYyA9IHJzW2NdOworCXBlWyA4ICogMl0gPSBQQzIoYywgZCwgYSwgYik7IGIgPSByc1tiXTsgYSA9IHJzW2FdOworCXBlWyA5ICogMl0gPSBQQzIoYSwgYiwgYywgZCk7IGQgPSByc1tkXTsgYyA9IHJzW2NdOworCXBlWzEwICogMl0gPSBQQzIoYywgZCwgYSwgYik7IGIgPSByc1tiXTsgYSA9IHJzW2FdOworCXBlWzExICogMl0gPSBQQzIoYSwgYiwgYywgZCk7IGQgPSByc1tkXTsgYyA9IHJzW2NdOworCXBlWzEyICogMl0gPSBQQzIoYywgZCwgYSwgYik7IGIgPSByc1tiXTsgYSA9IHJzW2FdOworCXBlWzEzICogMl0gPSBQQzIoYSwgYiwgYywgZCk7IGQgPSByc1tkXTsgYyA9IHJzW2NdOworCXBlWzE0ICogMl0gPSBQQzIoYywgZCwgYSwgYik7IGIgPSByc1tiXTsKKwlwZVsxNSAqIDJdID0gUEMyKGIsIGMsIGQsIGEpOworCisJLyogU2tpcCB0byBuZXh0IHRhYmxlIHNldCAqLworCXB0ICs9IDUxMjsKKworCWQgPSBrWzBdOyBkICY9IDB4ZTA7IGQgPj49IDQ7IGQgfD0ga1s0XSAmIDB4ZjA7IGQgPSBwYzFbZCArIDFdOworCWMgPSBrWzFdOyBjICY9IDB4ZTA7IGMgPj49IDQ7IGMgfD0ga1s1XSAmIDB4ZjA7IGMgPSBwYzFbYyArIDFdOworCWIgPSBrWzJdOyBiICY9IDB4ZTA7IGIgPj49IDQ7IGIgfD0ga1s2XSAmIDB4ZjA7IGIgPSBwYzFbYiArIDFdOworCWEgPSBrWzNdOyBhICY9IDB4ZTA7IGEgPj49IDQ7IGEgfD0ga1s3XSAmIDB4ZjA7IGEgPSBwYzFbYSArIDFdOworCisJcGVbIDAgKiAyICsgMV0gPSBQQzIoYSwgYiwgYywgZCk7IGQgPSByc1tkXTsKKwlwZVsgMSAqIDIgKyAxXSA9IFBDMihkLCBhLCBiLCBjKTsgYyA9IHJzW2NdOyBiID0gcnNbYl07CisJcGVbIDIgKiAyICsgMV0gPSBQQzIoYiwgYywgZCwgYSk7IGEgPSByc1thXTsgZCA9IHJzW2RdOworCXBlWyAzICogMiArIDFdID0gUEMyKGQsIGEsIGIsIGMpOyBjID0gcnNbY107IGIgPSByc1tiXTsKKwlwZVsgNCAqIDIgKyAxXSA9IFBDMihiLCBjLCBkLCBhKTsgYSA9IHJzW2FdOyBkID0gcnNbZF07CisJcGVbIDUgKiAyICsgMV0gPSBQQzIoZCwgYSwgYiwgYyk7IGMgPSByc1tjXTsgYiA9IHJzW2JdOworCXBlWyA2ICogMiArIDFdID0gUEMyKGIsIGMsIGQsIGEpOyBhID0gcnNbYV07IGQgPSByc1tkXTsKKwlwZVsgNyAqIDIgKyAxXSA9IFBDMihkLCBhLCBiLCBjKTsgYyA9IHJzW2NdOworCXBlWyA4ICogMiArIDFdID0gUEMyKGMsIGQsIGEsIGIpOyBiID0gcnNbYl07IGEgPSByc1thXTsKKwlwZVsgOSAqIDIgKyAxXSA9IFBDMihhLCBiLCBjLCBkKTsgZCA9IHJzW2RdOyBjID0gcnNbY107CisJcGVbMTAgKiAyICsgMV0gPSBQQzIoYywgZCwgYSwgYik7IGIgPSByc1tiXTsgYSA9IHJzW2FdOworCXBlWzExICogMiArIDFdID0gUEMyKGEsIGIsIGMsIGQpOyBkID0gcnNbZF07IGMgPSByc1tjXTsKKwlwZVsxMiAqIDIgKyAxXSA9IFBDMihjLCBkLCBhLCBiKTsgYiA9IHJzW2JdOyBhID0gcnNbYV07CisJcGVbMTMgKiAyICsgMV0gPSBQQzIoYSwgYiwgYywgZCk7IGQgPSByc1tkXTsgYyA9IHJzW2NdOworCXBlWzE0ICogMiArIDFdID0gUEMyKGMsIGQsIGEsIGIpOyBiID0gcnNbYl07CisJcGVbMTUgKiAyICsgMV0gPSBQQzIoYiwgYywgZCwgYSk7CisKKwkvKiBGaXh1cDogMjQxMyA1NzY4IC0+IDEzNTcgMjQ2OCAqLworCWZvciAoZCA9IDA7IGQgPCAxNjsgKytkKSB7CisJCWEgPSBwZVsyICogZF07CisJCWIgPSBwZVsyICogZCArIDFdOworCQljID0gYSBeIGI7CisJCWMgJj0gMHhmZmZmMDAwMDsKKwkJYSBePSBjOworCQliIF49IGM7CisJCVJPTChiLCAxOCk7CisJCXBlWzIgKiBkXSA9IGE7CisJCXBlWzIgKiBkICsgMV0gPSBiOwogCX0KLQotbm90X3dlYWs6Ci0KLQkvKiBleHBsb2RlIHRoZSBiaXRzICovCi0JbiA9IDU2OwotCWIwID0gYml0czA7Ci0JYjEgPSBiaXRzMTsKLQkKLQlkbyB7Ci0JCXcgPSAoMjU2IHwgKmtleSsrKSA8PCAyOwotCQlkbyB7Ci0JCQktLW47Ci0JCQliMVtuXSA9IDggJiB3OwotCQkJdyA+Pj0gMTsKLQkJCWIwW25dID0gNCAmIHc7Ci0JCX0gd2hpbGUgKCB3ID49IDE2ICk7Ci0JfSB3aGlsZSAoIG4gKTsKLQkKLQkvKiBwdXQgdGhlIGJpdHMgaW4gdGhlIGNvcnJlY3QgcGxhY2VzICovCi0JbiA9IDE2OwotCWsgPSByb3RvcnM7Ci0JCi0JZG8gewotCQl3ICAgPSAoYjFba1sgMCAgIF1dIHwgYjBba1sgMSAgIF1dKSA8PCA0OwotCQl3ICB8PSAoYjFba1sgMiAgIF1dIHwgYjBba1sgMyAgIF1dKSA8PCAyOwotCQl3ICB8PSAgYjFba1sgNCAgIF1dIHwgYjBba1sgNSAgIF1dOwotCQl3IDw8PSA4OwotCQl3ICB8PSAoYjFba1sgNiAgIF1dIHwgYjBba1sgNyAgIF1dKSA8PCA0OwotCQl3ICB8PSAoYjFba1sgOCAgIF1dIHwgYjBba1sgOSAgIF1dKSA8PCAyOwotCQl3ICB8PSAgYjFba1sxMCAgIF1dIHwgYjBba1sxMSAgIF1dOwotCQl3IDw8PSA4OwotCQl3ICB8PSAoYjFba1sxMiAgIF1dIHwgYjBba1sxMyAgIF1dKSA8PCA0OwotCQl3ICB8PSAoYjFba1sxNCAgIF1dIHwgYjBba1sxNSAgIF1dKSA8PCAyOwotCQl3ICB8PSAgYjFba1sxNiAgIF1dIHwgYjBba1sxNyAgIF1dOwotCQl3IDw8PSA4OwotCQl3ICB8PSAoYjFba1sxOCAgIF1dIHwgYjBba1sxOSAgIF1dKSA8PCA0OwotCQl3ICB8PSAoYjFba1syMCAgIF1dIHwgYjBba1syMSAgIF1dKSA8PCAyOwotCQl3ICB8PSAgYjFba1syMiAgIF1dIHwgYjBba1syMyAgIF1dOwotCQlleHBrZXlbMF0gPSB3OwotCQkKLQkJdyAgID0gKGIxW2tbIDArMjRdXSB8IGIwW2tbIDErMjRdXSkgPDwgNDsKLQkJdyAgfD0gKGIxW2tbIDIrMjRdXSB8IGIwW2tbIDMrMjRdXSkgPDwgMjsKLQkJdyAgfD0gIGIxW2tbIDQrMjRdXSB8IGIwW2tbIDUrMjRdXTsKLQkJdyA8PD0gODsKLQkJdyAgfD0gKGIxW2tbIDYrMjRdXSB8IGIwW2tbIDcrMjRdXSkgPDwgNDsKLQkJdyAgfD0gKGIxW2tbIDgrMjRdXSB8IGIwW2tbIDkrMjRdXSkgPDwgMjsKLQkJdyAgfD0gIGIxW2tbMTArMjRdXSB8IGIwW2tbMTErMjRdXTsKLQkJdyA8PD0gODsKLQkJdyAgfD0gKGIxW2tbMTIrMjRdXSB8IGIwW2tbMTMrMjRdXSkgPDwgNDsKLQkJdyAgfD0gKGIxW2tbMTQrMjRdXSB8IGIwW2tbMTUrMjRdXSkgPDwgMjsKLQkJdyAgfD0gIGIxW2tbMTYrMjRdXSB8IGIwW2tbMTcrMjRdXTsKLQkJdyA8PD0gODsKLQkJdyAgfD0gKGIxW2tbMTgrMjRdXSB8IGIwW2tbMTkrMjRdXSkgPDwgNDsKLQkJdyAgfD0gKGIxW2tbMjArMjRdXSB8IGIwW2tbMjErMjRdXSkgPDwgMjsKLQkJdyAgfD0gIGIxW2tbMjIrMjRdXSB8IGIwW2tbMjMrMjRdXTsKLQkJCi0JCVJPUih3LCA0LCAyOCk7ICAgICAgLyogY291bGQgYmUgZWxpbWluYXRlZCAqLwotCQlleHBrZXlbMV0gPSB3OwotCi0JCWsgKz0gNDg7Ci0JCWV4cGtleSArPSAyOwotCX0gd2hpbGUgKC0tbik7Ci0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkZXNfc2V0a2V5KHZvaWQgKmN0eCwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbiwgdTMyICpmbGFncykKIHsKLQlyZXR1cm4gc2V0a2V5KCgoc3RydWN0IGRlc19jdHggKiljdHgpLT5leHBrZXksIGtleSwga2V5bGVuLCBmbGFncyk7CisJc3RydWN0IGRlc19jdHggKmRjdHggPSBjdHg7CisJdTMyIHRtcFtERVNfRVhQS0VZX1dPUkRTXTsKKwlpbnQgcmV0OworCisJLyogRXhwYW5kIHRvIHRtcCAqLworCXJldCA9IGVrZXkodG1wLCBrZXkpOworCisJaWYgKHVubGlrZWx5KHJldCA9PSAwKSAmJiAoKmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkpKSB7CisJCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19XRUFLX0tFWTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29weSB0byBvdXRwdXQgKi8KKwltZW1jcHkoZGN0eC0+ZXhwa2V5LCB0bXAsIHNpemVvZihkY3R4LT5leHBrZXkpKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBkZXNfZW5jcnlwdCh2b2lkICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7Ci0JZGVzX3NtYWxsX2ZpcHNfZW5jcnlwdCgoKHN0cnVjdCBkZXNfY3R4ICopY3R4KS0+ZXhwa2V5LCBkc3QsIHNyYyk7CisJY29uc3QgdTMyICpLID0gKChzdHJ1Y3QgZGVzX2N0eCAqKWN0eCktPmV4cGtleTsKKwljb25zdCBfX2xlMzIgKnMgPSAoY29uc3QgX19sZTMyICopc3JjOworCV9fbGUzMiAqZCA9IChfX2xlMzIgKilkc3Q7CisJdTMyIEwsIFIsIEEsIEI7CisJaW50IGk7CisKKwlMID0gbGUzMl90b19jcHUoc1swXSk7CisJUiA9IGxlMzJfdG9fY3B1KHNbMV0pOworCisJSVAoTCwgUiwgQSk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlST1VORChMLCBSLCBBLCBCLCBLLCAyKTsKKwkJUk9VTkQoUiwgTCwgQSwgQiwgSywgMik7CisJfQorCUZQKFIsIEwsIEEpOworCisJZFswXSA9IGNwdV90b19sZTMyKFIpOworCWRbMV0gPSBjcHVfdG9fbGUzMihMKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzX2RlY3J5cHQodm9pZCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQogewotCWRlc19zbWFsbF9maXBzX2RlY3J5cHQoKChzdHJ1Y3QgZGVzX2N0eCAqKWN0eCktPmV4cGtleSwgZHN0LCBzcmMpOworCWNvbnN0IHUzMiAqSyA9ICgoc3RydWN0IGRlc19jdHggKiljdHgpLT5leHBrZXkgKyBERVNfRVhQS0VZX1dPUkRTIC0gMjsKKwljb25zdCBfX2xlMzIgKnMgPSAoY29uc3QgX19sZTMyICopc3JjOworCV9fbGUzMiAqZCA9IChfX2xlMzIgKilkc3Q7CisJdTMyIEwsIFIsIEEsIEI7CisJaW50IGk7CisKKwlMID0gbGUzMl90b19jcHUoc1swXSk7CisJUiA9IGxlMzJfdG9fY3B1KHNbMV0pOworCisJSVAoTCwgUiwgQSk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlST1VORChMLCBSLCBBLCBCLCBLLCAtMik7CisJCVJPVU5EKFIsIEwsIEEsIEIsIEssIC0yKTsKKwl9CisJRlAoUiwgTCwgQSk7CisKKwlkWzBdID0gY3B1X3RvX2xlMzIoUik7CisJZFsxXSA9IGNwdV90b19sZTMyKEwpOwogfQogCi0vKiAKKy8qCiAgKiBSRkMyNDUxOgogICoKICAqICAgRm9yIERFUy1FREUzLCB0aGVyZSBpcyBubyBrbm93biBuZWVkIHRvIHJlamVjdCB3ZWFrIG9yCkBAIC0xMTk5LDQ0ICs4NTksODYgQEAKICAqCiAgKi8KIHN0YXRpYyBpbnQgZGVzM19lZGVfc2V0a2V5KHZvaWQgKmN0eCwgY29uc3QgdTggKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCisJCQkgICB1bnNpZ25lZCBpbnQga2V5bGVuLCB1MzIgKmZsYWdzKQogewotCXVuc2lnbmVkIGludCBpLCBvZmY7CisJY29uc3QgdTMyICpLID0gKGNvbnN0IHUzMiAqKWtleTsKIAlzdHJ1Y3QgZGVzM19lZGVfY3R4ICpkY3R4ID0gY3R4OworCXUzMiAqZXhwa2V5ID0gZGN0eC0+ZXhwa2V5OwogCi0JaWYgKCEobWVtY21wKGtleSwgJmtleVtERVNfS0VZX1NJWkVdLCBERVNfS0VZX1NJWkUpICYmIAotCSAgICBtZW1jbXAoJmtleVtERVNfS0VZX1NJWkVdLCAma2V5W0RFU19LRVlfU0laRSAqIDJdLAotCSAgICAJCQkJCURFU19LRVlfU0laRSkpKSB7Ci0KKwlpZiAodW5saWtlbHkoISgoS1swXSBeIEtbMl0pIHwgKEtbMV0gXiBLWzNdKSkgfHwKKwkJICAgICAhKChLWzJdIF4gS1s0XSkgfCAoS1szXSBeIEtbNV0pKSkpCisJewogCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9TQ0hFRDsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCQotCWZvciAoaSA9IDAsIG9mZiA9IDA7IGkgPCAzOyBpKyssIG9mZiArPSBERVNfRVhQS0VZX1dPUkRTLAotCQkJCQkJCWtleSArPSBERVNfS0VZX1NJWkUpIHsKLQkJaW50IHJldCA9IHNldGtleSgmZGN0eC0+ZXhwa2V5W29mZl0sIGtleSwgREVTX0tFWV9TSVpFLCBmbGFncyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9CQorCisJZWtleShleHBrZXksIGtleSk7IGV4cGtleSArPSBERVNfRVhQS0VZX1dPUkRTOyBrZXkgKz0gREVTX0tFWV9TSVpFOworCWRrZXkoZXhwa2V5LCBrZXkpOyBleHBrZXkgKz0gREVTX0VYUEtFWV9XT1JEUzsga2V5ICs9IERFU19LRVlfU0laRTsKKwlla2V5KGV4cGtleSwga2V5KTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBkZXMzX2VkZV9lbmNyeXB0KHZvaWQgKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsKIAlzdHJ1Y3QgZGVzM19lZGVfY3R4ICpkY3R4ID0gY3R4OwotCQotCWRlc19zbWFsbF9maXBzX2VuY3J5cHQoZGN0eC0+ZXhwa2V5LCBkc3QsIHNyYyk7Ci0JZGVzX3NtYWxsX2ZpcHNfZGVjcnlwdCgmZGN0eC0+ZXhwa2V5W0RFU19FWFBLRVlfV09SRFNdLCBkc3QsIGRzdCk7Ci0JZGVzX3NtYWxsX2ZpcHNfZW5jcnlwdCgmZGN0eC0+ZXhwa2V5W0RFU19FWFBLRVlfV09SRFMgKiAyXSwgZHN0LCBkc3QpOworCWNvbnN0IHUzMiAqSyA9IGRjdHgtPmV4cGtleTsKKwljb25zdCBfX2xlMzIgKnMgPSAoY29uc3QgX19sZTMyICopc3JjOworCV9fbGUzMiAqZCA9IChfX2xlMzIgKilkc3Q7CisJdTMyIEwsIFIsIEEsIEI7CisJaW50IGk7CisKKwlMID0gbGUzMl90b19jcHUoc1swXSk7CisJUiA9IGxlMzJfdG9fY3B1KHNbMV0pOworCisJSVAoTCwgUiwgQSk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlST1VORChMLCBSLCBBLCBCLCBLLCAyKTsKKwkJUk9VTkQoUiwgTCwgQSwgQiwgSywgMik7CisJfQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJUk9VTkQoUiwgTCwgQSwgQiwgSywgMik7CisJCVJPVU5EKEwsIFIsIEEsIEIsIEssIDIpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCVJPVU5EKEwsIFIsIEEsIEIsIEssIDIpOworCQlST1VORChSLCBMLCBBLCBCLCBLLCAyKTsKKwl9CisJRlAoUiwgTCwgQSk7CisKKwlkWzBdID0gY3B1X3RvX2xlMzIoUik7CisJZFsxXSA9IGNwdV90b19sZTMyKEwpOwogfQogCiBzdGF0aWMgdm9pZCBkZXMzX2VkZV9kZWNyeXB0KHZvaWQgKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsKIAlzdHJ1Y3QgZGVzM19lZGVfY3R4ICpkY3R4ID0gY3R4OworCWNvbnN0IHUzMiAqSyA9IGRjdHgtPmV4cGtleSArIERFUzNfRURFX0VYUEtFWV9XT1JEUyAtIDI7CisJY29uc3QgX19sZTMyICpzID0gKGNvbnN0IF9fbGUzMiAqKXNyYzsKKwlfX2xlMzIgKmQgPSAoX19sZTMyICopZHN0OworCXUzMiBMLCBSLCBBLCBCOworCWludCBpOwogCi0JZGVzX3NtYWxsX2ZpcHNfZGVjcnlwdCgmZGN0eC0+ZXhwa2V5W0RFU19FWFBLRVlfV09SRFMgKiAyXSwgZHN0LCBzcmMpOwotCWRlc19zbWFsbF9maXBzX2VuY3J5cHQoJmRjdHgtPmV4cGtleVtERVNfRVhQS0VZX1dPUkRTXSwgZHN0LCBkc3QpOwotCWRlc19zbWFsbF9maXBzX2RlY3J5cHQoZGN0eC0+ZXhwa2V5LCBkc3QsIGRzdCk7CisJTCA9IGxlMzJfdG9fY3B1KHNbMF0pOworCVIgPSBsZTMyX3RvX2NwdShzWzFdKTsKKworCUlQKEwsIFIsIEEpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJUk9VTkQoTCwgUiwgQSwgQiwgSywgLTIpOworCQlST1VORChSLCBMLCBBLCBCLCBLLCAtMik7CisJfQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJUk9VTkQoUiwgTCwgQSwgQiwgSywgLTIpOworCQlST1VORChMLCBSLCBBLCBCLCBLLCAtMik7CisJfQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJUk9VTkQoTCwgUiwgQSwgQiwgSywgLTIpOworCQlST1VORChSLCBMLCBBLCBCLCBLLCAtMik7CisJfQorCUZQKFIsIEwsIEEpOworCisJZFswXSA9IGNwdV90b19sZTMyKFIpOworCWRbMV0gPSBjcHVfdG9fbGUzMihMKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGRlc19hbGcgPSB7CkBAIC0xMjQ5LDcgKzk1MSw3IEBACiAJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CiAJLmNpYV9taW5fa2V5c2l6ZQk9CURFU19LRVlfU0laRSwKIAkuY2lhX21heF9rZXlzaXplCT0JREVTX0tFWV9TSVpFLAotCS5jaWFfc2V0a2V5CQk9IAlkZXNfc2V0a2V5LAorCS5jaWFfc2V0a2V5CQk9CWRlc19zZXRrZXksCiAJLmNpYV9lbmNyeXB0CQk9CWRlc19lbmNyeXB0LAogCS5jaWFfZGVjcnlwdAkJPQlkZXNfZGVjcnlwdCB9IH0KIH07CkBAIC0xMjY0LDkgKzk2Niw5IEBACiAJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CiAJLmNpYV9taW5fa2V5c2l6ZQk9CURFUzNfRURFX0tFWV9TSVpFLAogCS5jaWFfbWF4X2tleXNpemUJPQlERVMzX0VERV9LRVlfU0laRSwKLQkuY2lhX3NldGtleQkgICAJPSAJZGVzM19lZGVfc2V0a2V5LAotCS5jaWFfZW5jcnlwdAkgCT0JZGVzM19lZGVfZW5jcnlwdCwKLQkuY2lhX2RlY3J5cHQJICAJPQlkZXMzX2VkZV9kZWNyeXB0IH0gfQorCS5jaWFfc2V0a2V5CQk9CWRlczNfZWRlX3NldGtleSwKKwkuY2lhX2VuY3J5cHQJCT0JZGVzM19lZGVfZW5jcnlwdCwKKwkuY2lhX2RlY3J5cHQJCT0JZGVzM19lZGVfZGVjcnlwdCB9IH0KIH07CiAKIE1PRFVMRV9BTElBUygiZGVzM19lZGUiKTsKQEAgLTEyNzQsNyArOTc2LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQkKKwogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmRlc19hbGcpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKQEAgLTEyODIsNyArOTg0LDcgQEAKIAlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZkZXMzX2VkZV9hbGcpOwogCWlmIChyZXQgPCAwKQogCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmRlc19hbGcpOwotb3V0OgkKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjk3LDMgKzk5OSw0IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiREVTICYgVHJpcGxlIERFUyBFREUgQ2lwaGVyIEFsZ29yaXRobXMiKTsKK01PRFVMRV9BVVRIT1IoIkRhZyBBcm5lIE9zdmlrIDxkYUBvc3Zpay5ubz4iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9obWFjLmMgYi9jcnlwdG8vaG1hYy5jCmluZGV4IDg0N2RmOTIuLmRhMDQ1NmIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9obWFjLmMKKysrIGIvY3J5cHRvL2htYWMuYwpAQCAtNDksOCArNDksNyBAQAogCiB2b2lkIGNyeXB0b19mcmVlX2htYWNfYmxvY2soc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKLQlpZiAodGZtLT5jcnRfZGlnZXN0LmRpdF9obWFjX2Jsb2NrKQotCQlrZnJlZSh0Zm0tPmNydF9kaWdlc3QuZGl0X2htYWNfYmxvY2spOworCWtmcmVlKHRmbS0+Y3J0X2RpZ2VzdC5kaXRfaG1hY19ibG9jayk7CiB9CiAKIHZvaWQgY3J5cHRvX2htYWNfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQgKmtleWxlbikKZGlmZiAtLWdpdCBhL2NyeXB0by9pbnRlcm5hbC5oIGIvY3J5cHRvL2ludGVybmFsLmgKaW5kZXggOTY0YjlhNi4uNjg2MTI4NyAxMDA2NDQKLS0tIGEvY3J5cHRvL2ludGVybmFsLmgKKysrIGIvY3J5cHRvL2ludGVybmFsLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgogCiBleHRlcm4gZW51bSBrbV90eXBlIGNyeXB0b19rbV90eXBlc1tdOwpAQCAtNDIsMjAgKzQyLDYgQEAKIAkJY29uZF9yZXNjaGVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqY3J5cHRvX3RmbV9jdHgoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKLXsKLQlyZXR1cm4gKHZvaWQgKikmdGZtWzFdOwotfQotCi1zdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2FsZ19sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7Ci0KLS8qIEEgZmFyIG1vcmUgaW50ZWxsaWdlbnQgdmVyc2lvbiBvZiB0aGlzIGlzIHBsYW5uZWQuICBGb3Igbm93LCBqdXN0Ci0gKiB0cnkgYW4gZXhhY3QgbWF0Y2ggb24gdGhlIG5hbWUgb2YgdGhlIGFsZ29yaXRobS4gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19hbGcgKmNyeXB0b19hbGdfbW9kX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQotewotCXJldHVybiB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShjcnlwdG9fYWxnX2xvb2t1cChuYW1lKSwgbmFtZSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfQ1JZUFRPX0hNQUMKIGludCBjcnlwdG9fYWxsb2NfaG1hY19ibG9jayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKIHZvaWQgY3J5cHRvX2ZyZWVfaG1hY19ibG9jayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKQEAgLTc2LDYgKzYyLDMzIEBACiB7IH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fZGlnZXN0X2N0eHNpemUoc3RydWN0IGNyeXB0b19hbGcgKmFsZywKKwkJCQkJCSBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGFsZy0+Y3JhX2N0eHNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19jaXBoZXJfY3R4c2l6ZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJCQkJIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBpbnQgbGVuID0gYWxnLT5jcmFfY3R4c2l6ZTsKKwkKKwlzd2l0Y2ggKGZsYWdzICYgQ1JZUFRPX1RGTV9NT0RFX01BU0spIHsKKwljYXNlIENSWVBUT19URk1fTU9ERV9DQkM6CisJCWxlbiA9IEFMSUdOKGxlbiwgYWxnLT5jcmFfYWxpZ25tYXNrICsgMSk7CisJCWxlbiArPSBhbGctPmNyYV9ibG9ja3NpemU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19jb21wcmVzc19jdHhzaXplKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCQkJCQkgICBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGFsZy0+Y3JhX2N0eHNpemU7Cit9CisKIGludCBjcnlwdG9faW5pdF9kaWdlc3RfZmxhZ3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTMyIGZsYWdzKTsKIGludCBjcnlwdG9faW5pdF9jaXBoZXJfZmxhZ3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTMyIGZsYWdzKTsKIGludCBjcnlwdG9faW5pdF9jb21wcmVzc19mbGFncyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1MzIgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NjYXR0ZXJ3YWxrLmMgYi9jcnlwdG8vc2NhdHRlcndhbGsuYwppbmRleCA1MGM5NDYxLi40N2FjOTBlIDEwMDY0NAotLS0gYS9jcnlwdG8vc2NhdHRlcndhbGsuYworKysgYi9jcnlwdG8vc2NhdHRlcndhbGsuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiBpbnQgc2NhdHRlcndhbGtfY29weWNodW5rcyh2b2lkICpidWYsIHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssCiAJCQkgICBzaXplX3QgbmJ5dGVzLCBpbnQgb3V0KQogewotCWRvIHsKKwl3aGlsZSAobmJ5dGVzID4gd2Fsay0+bGVuX3RoaXNfcGFnZSkgewogCQltZW1jcHlfZGlyKGJ1Ziwgd2Fsay0+ZGF0YSwgd2Fsay0+bGVuX3RoaXNfcGFnZSwgb3V0KTsKIAkJYnVmICs9IHdhbGstPmxlbl90aGlzX3BhZ2U7CiAJCW5ieXRlcyAtPSB3YWxrLT5sZW5fdGhpc19wYWdlOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJCXNjYXR0ZXJ3YWxrX3VubWFwKHdhbGssIG91dCk7CiAJCXNjYXR0ZXJ3YWxrX3BhZ2Vkb25lKHdhbGssIG91dCwgMSk7CiAJCXNjYXR0ZXJ3YWxrX21hcCh3YWxrLCBvdXQpOwotCX0gd2hpbGUgKG5ieXRlcyA+IHdhbGstPmxlbl90aGlzX3BhZ2UpOworCX0KIAogCW1lbWNweV9kaXIoYnVmLCB3YWxrLT5kYXRhLCBuYnl0ZXMsIG91dCk7CiAJcmV0dXJuIG5ieXRlczsKZGlmZiAtLWdpdCBhL2NyeXB0by9zY2F0dGVyd2Fsay5oIGIvY3J5cHRvL3NjYXR0ZXJ3YWxrLmgKaW5kZXggMDJhYTU2Yy4uZTc5OTI1YyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NjYXR0ZXJ3YWxrLmgKKysrIGIvY3J5cHRvL3NjYXR0ZXJ3YWxrLmgKQEAgLTQwLDEwICs0MCwxMCBAQAogCSAgICAgICB3YWxrX2luLT5vZmZzZXQgPT0gd2Fsa19vdXQtPm9mZnNldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2NhdHRlcndhbGtfYWNyb3NzX3BhZ2VzKHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssCi0JCQkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzY2F0dGVyd2Fsa19jbGFtcChzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0JcmV0dXJuIG5ieXRlcyA+IHdhbGstPmxlbl90aGlzX3BhZ2U7CisJcmV0dXJuIG5ieXRlcyA+IHdhbGstPmxlbl90aGlzX3BhZ2UgPyB3YWxrLT5sZW5fdGhpc19wYWdlIDogbmJ5dGVzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NhdHRlcndhbGtfYWR2YW5jZShzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLApAQCAtNTUsNiArNTUsMTIgQEAKIAl3YWxrLT5sZW5fdGhpc19zZWdtZW50IC09IG5ieXRlczsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NhdHRlcndhbGtfYWxpZ25lZChzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGFsaWdubWFzaykKK3sKKwlyZXR1cm4gISh3YWxrLT5vZmZzZXQgJiBhbGlnbm1hc2spOworfQorCiB2b2lkIHNjYXR0ZXJ3YWxrX3N0YXJ0KHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpOwogaW50IHNjYXR0ZXJ3YWxrX2NvcHljaHVua3Modm9pZCAqYnVmLCBzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLCBzaXplX3QgbmJ5dGVzLCBpbnQgb3V0KTsKIHZvaWQgc2NhdHRlcndhbGtfbWFwKHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssIGludCBvdXQpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NlcnBlbnQuYyBiL2NyeXB0by9zZXJwZW50LmMKaW5kZXggN2QxNTJlOC4uM2NmMmM1MCAxMDA2NDQKLS0tIGEvY3J5cHRvL3NlcnBlbnQuYworKysgYi9jcnlwdG8vc2VycGVudC5jCkBAIC0yMTAsNyArMjEwLDYgQEAKIAl4NCBePSB4MjsKIAogc3RydWN0IHNlcnBlbnRfY3R4IHsKLQl1OCBpdltTRVJQRU5UX0JMT0NLX1NJWkVdOwogCXUzMiBleHBrZXlbU0VSUEVOVF9FWFBLRVlfV09SRFNdOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKaW5kZXggNWVmOWFkYi4uYmQyZWM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTg5NSwxMSArODk0LDYgQEAKIAlsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAJZGV2X2xpc3QgPSBsaW5rOwogCWNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0JY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCQlDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0JCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JCUNTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0JY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJmJsdWVjYXJkX2V2ZW50OwogCWNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKIAljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogCkBAIC0xMTAzLDYgKzEwOTcsNyBAQAogCQkubmFtZQk9ICJibHVlY2FyZF9jcyIsCiAJfSwKIAkuYXR0YWNoCQk9IGJsdWVjYXJkX2F0dGFjaCwKKwkuZXZlbnQJCT0gYmx1ZWNhcmRfZXZlbnQsCiAJLmRldGFjaAkJPSBibHVlY2FyZF9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gYmx1ZWNhcmRfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwppbmRleCA5MDEzY2Q3Li5hZGYxNzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtNjk2LDExICs2OTUsNiBAQAogCWxpbmstPm5leHQgPSBkZXZfbGlzdDsKIAlkZXZfbGlzdCA9IGxpbms7CiAJY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JICAgIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQkgICAgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQkgICAgQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLQljbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmYnQzY19ldmVudDsKIAljbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAJY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKIApAQCAtOTQ3LDYgKzk0MSw3IEBACiAJCS5uYW1lCT0gImJ0M2NfY3MiLAogCX0sCiAJLmF0dGFjaAkJPSBidDNjX2F0dGFjaCwKKwkuZXZlbnQJCT0gYnQzY19ldmVudCwKIAkuZGV0YWNoCQk9IGJ0M2NfZGV0YWNoLAogCS5pZF90YWJsZQk9IGJ0M2NfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKaW5kZXggYzQ3OTQ4NC4uZTRjNTlmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTYxNSwxMSArNjE0LDYgQEAKIAlsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAJZGV2X2xpc3QgPSBsaW5rOwogCWNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0JY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCQlDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0JCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JCUNTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0JY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJmJ0dWFydF9ldmVudDsKIAljbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAJY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKIApAQCAtODY3LDYgKzg2MSw3IEBACiAJCS5uYW1lCT0gImJ0dWFydF9jcyIsCiAJfSwKIAkuYXR0YWNoCQk9IGJ0dWFydF9hdHRhY2gsCisJLmV2ZW50CQk9IGJ0dWFydF9ldmVudCwKIAkuZGV0YWNoCQk9IGJ0dWFydF9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gYnR1YXJ0X2lkcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKaW5kZXggYmIxMmY3ZC4uZTM5ODY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtNTk0LDExICs1OTMsNiBAQAogCWxpbmstPm5leHQgPSBkZXZfbGlzdDsKIAlkZXZfbGlzdCA9IGxpbms7CiAJY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQkJQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQkJQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLQljbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmZHRsMV9ldmVudDsKIAljbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAJY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKIApAQCAtODIwLDYgKzgxNCw3IEBACiAJCS5uYW1lCT0gImR0bDFfY3MiLAogCX0sCiAJLmF0dGFjaAkJPSBkdGwxX2F0dGFjaCwKKwkuZXZlbnQJCT0gZHRsMV9ldmVudCwKIAkuZGV0YWNoCQk9IGR0bDFfZGV0YWNoLAogCS5pZF90YWJsZQk9IGR0bDFfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV92aGNpLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfdmhjaS5jCmluZGV4IDMyNTYxOTIuLmY5Yjk1NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdmhjaS5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV92aGNpLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAJcG9sbF93YWl0KGZpbGUsICZoY2lfdmhjaS0+cmVhZF93YWl0LCB3YWl0KTsKICAKLQlpZiAoc2tiX3F1ZXVlX2xlbigmaGNpX3ZoY2ktPnJlYWRxKSkKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmaGNpX3ZoY2ktPnJlYWRxKSkKIAkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAKIAlyZXR1cm4gUE9MTE9VVCB8IFBPTExXUk5PUk07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggMWFmZjgxOS4uMDhmNjkyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtNDAsNyArNDAsNyBAQAogb2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSArPSBhbWlzZXJpYWwubwogb2JqLSQoQ09ORklHX1NYKQkJKz0gc3gubyBnZW5lcmljX3NlcmlhbC5vCiBvYmotJChDT05GSUdfUklPKQkJKz0gcmlvLyBnZW5lcmljX3NlcmlhbC5vCi1vYmotJChDT05GSUdfSFZDX0NPTlNPTEUpCSs9IGh2Y19jb25zb2xlLm8gaHZzaS5vCitvYmotJChDT05GSUdfSFZDX0NPTlNPTEUpCSs9IGh2Y19jb25zb2xlLm8gaHZjX3Zpby5vIGh2c2kubwogb2JqLSQoQ09ORklHX1JBV19EUklWRVIpCSs9IHJhdy5vCiBvYmotJChDT05GSUdfU0dJX1NOU0MpCQkrPSBzbnNjLm8gc25zY19ldmVudC5vCiBvYmotJChDT05GSUdfTU1USU1FUikJCSs9IG1tdGltZXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2RybS9LY29uZmlnCmluZGV4IGMyYjEyZWEuLjEyMzQxN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvZHJtL0tjb25maWcKQEAgLTk2LDMgKzk2LDEwIEBACiAgICAgICAgICAgY2hpcHNldC4gSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpcy4gQUdQCiAgICAgICAgICAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yay4KIAorY29uZmlnIERSTV9WSUEKKwl0cmlzdGF0ZSAiVmlhIHVuaWNocm9tZSB2aWRlbyBjYXJkcyIKKwlkZXBlbmRzIG9uIERSTQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFZpYSB1bmljaHJvbWUgb3IgY29tcGF0aWJsZSB2aWRlbworCSAgY2hpcHNldC4gSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpYS4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9kcm0vTWFrZWZpbGUKaW5kZXggNzQ0NGRlYy4uZGRkOTQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvZHJtL01ha2VmaWxlCkBAIC0xOCwxMCArMTgsMTQgQEAKIHJhZGVvbi1vYmpzIDo9IHJhZGVvbl9kcnYubyByYWRlb25fY3AubyByYWRlb25fc3RhdGUubyByYWRlb25fbWVtLm8gcmFkZW9uX2lycS5vCiBmZmItb2JqcyAgICA6PSBmZmJfZHJ2Lm8gZmZiX2NvbnRleHQubwogc2lzLW9ianMgICAgOj0gc2lzX2Rydi5vIHNpc19kcy5vIHNpc19tbS5vCit2aWEtb2JqcyAgICA6PSB2aWFfaXJxLm8gdmlhX2Rydi5vIHZpYV9kcy5vIHZpYV9tYXAubyB2aWFfbW0ubyB2aWFfZG1hLm8gdmlhX3ZlcmlmaWVyLm8gdmlhX3ZpZGVvLm8KIAogaWZlcSAoJChDT05GSUdfQ09NUEFUKSx5KQogZHJtLW9ianMgICAgKz0gZHJtX2lvYzMyLm8KIHJhZGVvbi1vYmpzICs9IHJhZGVvbl9pb2MzMi5vCittZ2Etb2JqcyAgICArPSBtZ2FfaW9jMzIubworcjEyOC1vYmpzICAgKz0gcjEyOF9pb2MzMi5vCitpOTE1LW9ianMgICArPSBpOTE1X2lvYzMyLm8KIGVuZGlmCiAKIG9iai0kKENPTkZJR19EUk0pCSs9IGRybS5vCkBAIC0zNSw0ICszOSw1IEBACiBvYmotJChDT05GSUdfRFJNX0k5MTUpICArPSBpOTE1Lm8KIG9iai0kKENPTkZJR19EUk1fRkZCKSAgICs9IGZmYi5vCiBvYmotJChDT05GSUdfRFJNX1NJUykgICArPSBzaXMubworb2JqLSQoQ09ORklHX0RSTV9WSUEpCSs9dmlhLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9hdGlfcGNpZ2FydC5jIGIvZHJpdmVycy9jaGFyL2RybS9hdGlfcGNpZ2FydC5jCmluZGV4IGZkY2ExODcuLjBhZWM1ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2F0aV9wY2lnYXJ0LmMKQEAgLTUyLDcgKzUyLDcgQEAKICMgZGVmaW5lIEFUSV9NQVhfUENJR0FSVF9QQUdFUwkJODE5MgkvKio8IDMyIE1CIGFwZXJ0dXJlLCA0SyBwYWdlcyAqLwogIyBkZWZpbmUgQVRJX1BDSUdBUlRfUEFHRV9TSVpFCQk0MDk2CS8qKjwgUENJIEdBUlQgcGFnZSBzaXplICovCiAKLXVuc2lnbmVkIGxvbmcgZHJtX2F0aV9hbGxvY19wY2lnYXJ0X3RhYmxlKCB2b2lkICkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZSggdm9pZCApCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXN0cnVjdCBwYWdlICpwYWdlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm0uaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtLmgKaW5kZXggNTg3MzA1Mi4uZTgzNzFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm0uaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybS5oCkBAIC0zOCw3ICszOCw5IEBACiAjZGVmaW5lIF9EUk1fSF8KIAogI2lmIGRlZmluZWQoX19saW51eF9fKQorI2lmIGRlZmluZWQoX19LRVJORUxfXykKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgkJLyogRm9yIF9JTyogbWFjcm9zICovCiAjZGVmaW5lIERSTV9JT0NUTF9OUihuKQkJX0lPQ19OUihuKQogI2RlZmluZSBEUk1fSU9DX1ZPSUQJCV9JT0NfTk9ORQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1QLmggYi9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaAppbmRleCBiMDRkZGYxLi41ZGYwOWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaApAQCAtNzc0LDggKzc3NCw2IEBACiAJCQkJLyogRHJpdmVyIHN1cHBvcnQgKGRybV9kcnYuaCkgKi8KIGV4dGVybiBpbnQgICAgICAgICAgIGRybV9pbml0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOwogZXh0ZXJuIHZvaWQgICAgICAgICAgZHJtX2V4aXQoc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7Ci1leHRlcm4gaW50ICAgICAgICAgICBkcm1fdmVyc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBpbnQgICAgICAgICAgIGRybV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gbG9uZwkgICAgIGRybV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCkBAIC03ODUsMjggKzc4MywxOSBAQAogCQkJCS8qIERldmljZSBzdXBwb3J0IChkcm1fZm9wcy5oKSAqLwogZXh0ZXJuIGludCAgICAgICAgICAgZHJtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwogZXh0ZXJuIGludCAgICAgICAgICAgZHJtX3N0dWJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1leHRlcm4gaW50CSAgICAgZHJtX29wZW5faGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICAgIGRybV9kZXZpY2VfdCAqZGV2KTsKIGV4dGVybiBpbnQJICAgICBkcm1fZmx1c2goc3RydWN0IGZpbGUgKmZpbHApOwogZXh0ZXJuIGludAkgICAgIGRybV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKTsKIGV4dGVybiBpbnQgICAgICAgICAgIGRybV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIAogCQkJCS8qIE1hcHBpbmcgc3VwcG9ydCAoZHJtX3ZtLmgpICovCi1leHRlcm4gdm9pZAkgICAgIGRybV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLWV4dGVybiB2b2lkCSAgICAgZHJtX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLWV4dGVybiB2b2lkCSAgICAgZHJtX3ZtX3NobV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci1leHRlcm4gaW50CSAgICAgZHJtX21tYXBfZG1hKHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIGV4dGVybiBpbnQJICAgICBkcm1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogZXh0ZXJuIHVuc2lnbmVkIGludCAgZHJtX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7Ci1leHRlcm4gc3NpemVfdCAgICAgICBkcm1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZik7CiAKIAkJCQkvKiBNZW1vcnkgbWFuYWdlbWVudCBzdXBwb3J0IChkcm1fbWVtb3J5LmgpICovCiAjaW5jbHVkZSAiZHJtX21lbW9yeS5oIgogZXh0ZXJuIHZvaWQJICAgICBkcm1fbWVtX2luaXQodm9pZCk7CiBleHRlcm4gaW50CSAgICAgZHJtX21lbV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCiAJCQkJICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkCSAgICAgKmRybV9jYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwgaW50IGFyZWEpOwogZXh0ZXJuIHZvaWQJICAgICAqZHJtX3JlYWxsb2Modm9pZCAqb2xkcHQsIHNpemVfdCBvbGRzaXplLCBzaXplX3Qgc2l6ZSwKIAkJCQkgICBpbnQgYXJlYSk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBkcm1fYWxsb2NfcGFnZXMoaW50IG9yZGVyLCBpbnQgYXJlYSk7CkBAIC04NTQsOSArODQzLDYgQEAKIGV4dGVybiBpbnQJICAgICBkcm1fcm1jdHgoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOwogCi1leHRlcm4gaW50CSAgICAgZHJtX2NvbnRleHRfc3dpdGNoKGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgb2xkLCBpbnQgbmV3KTsKLWV4dGVybiBpbnQJICAgICBkcm1fY29udGV4dF9zd2l0Y2hfY29tcGxldGUoZHJtX2RldmljZV90ICpkZXYsIGludCBuZXcpOwotCiBleHRlcm4gaW50CSAgICAgZHJtX2N0eGJpdG1hcF9pbml0KCBkcm1fZGV2aWNlX3QgKmRldiApOwogZXh0ZXJuIHZvaWQJICAgICBkcm1fY3R4Yml0bWFwX2NsZWFudXAoIGRybV9kZXZpY2VfdCAqZGV2ICk7CiBleHRlcm4gdm9pZCAgICAgICAgICBkcm1fY3R4Yml0bWFwX2ZyZWUoIGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgY3R4X2hhbmRsZSApOwpAQCAtODc0LDkgKzg2MCw2IEBACiAKIAogCQkJCS8qIEF1dGhlbnRpY2F0aW9uIElPQ1RMIHN1cHBvcnQgKGRybV9hdXRoLmgpICovCi1leHRlcm4gaW50CSAgICAgZHJtX2FkZF9tYWdpYyhkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2ZpbGVfdCAqcHJpdiwKLQkJCQkgICAgZHJtX21hZ2ljX3QgbWFnaWMpOwotZXh0ZXJuIGludAkgICAgIGRybV9yZW1vdmVfbWFnaWMoZHJtX2RldmljZV90ICpkZXYsIGRybV9tYWdpY190IG1hZ2ljKTsKIGV4dGVybiBpbnQJICAgICBkcm1fZ2V0bWFnaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogZXh0ZXJuIGludAkgICAgIGRybV9hdXRobWFnaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCkBAIC04OTMsMTMgKzg3Niw5IEBACiAJCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBpbnQJICAgICBkcm1fbG9ja190YWtlKF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKmxvY2ssCiAJCQkJICAgIHVuc2lnbmVkIGludCBjb250ZXh0KTsKLWV4dGVybiBpbnQJICAgICBkcm1fbG9ja190cmFuc2Zlcihkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkJX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCAqbG9jaywKLQkJCQkJdW5zaWduZWQgaW50IGNvbnRleHQpOwogZXh0ZXJuIGludAkgICAgIGRybV9sb2NrX2ZyZWUoZHJtX2RldmljZV90ICpkZXYsCiAJCQkJICAgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKmxvY2ssCiAJCQkJICAgIHVuc2lnbmVkIGludCBjb250ZXh0KTsKLWV4dGVybiBpbnQgICAgICAgICAgIGRybV9ub3RpZmllcih2b2lkICpwcml2KTsKIAogCQkJCS8qIEJ1ZmZlciBtYW5hZ2VtZW50IHN1cHBvcnQgKGRybV9idWZzLmgpICovCiBleHRlcm4gaW50CSAgICAgZHJtX29yZGVyKCB1bnNpZ25lZCBsb25nIHNpemUgKTsKQEAgLTkyNyw3ICs5MDYsNiBAQAogCQkJCS8qIElSUSBzdXBwb3J0IChkcm1faXJxLmgpICovCiBleHRlcm4gaW50ICAgICAgICAgICBkcm1fY29udHJvbCggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKTsKLWV4dGVybiBpbnQgICAgICAgICAgIGRybV9pcnFfaW5zdGFsbCggZHJtX2RldmljZV90ICpkZXYgKTsKIGV4dGVybiBpbnQgICAgICAgICAgIGRybV9pcnFfdW5pbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApOwogZXh0ZXJuIGlycXJldHVybl90ICAgZHJtX2lycV9oYW5kbGVyKCBEUk1fSVJRX0FSR1MgKTsKIGV4dGVybiB2b2lkICAgICAgICAgIGRybV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoIGRybV9kZXZpY2VfdCAqZGV2ICk7CkBAIC05NjcsNyArOTQ1LDYgQEAKIGV4dGVybiBpbnQgZHJtX2dldF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCiAJCSAgICAgc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7CiBleHRlcm4gaW50IGRybV9wdXRfZGV2KGRybV9kZXZpY2VfdCAqIGRldik7Ci1leHRlcm4gaW50IGRybV9nZXRfaGVhZChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9oZWFkX3QgKmhlYWQpOwogZXh0ZXJuIGludCBkcm1fcHV0X2hlYWQoZHJtX2hlYWRfdCAqIGhlYWQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCAgIGRybV9kZWJ1ZzsKIGV4dGVybiB1bnNpZ25lZCBpbnQgICBkcm1fY2FyZHNfbGltaXQ7CkBAIC0xMDY0LDkgKzEwNDEsMTYgQEAKIHsKIAlrZnJlZShwdCk7CiB9CisKKy8qKiBXcmFwcGVyIGFyb3VuZCBrY2FsbG9jKCkgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKmRybV9jYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwgaW50IGFyZWEpCit7CisJcmV0dXJuIGtjYWxsb2Mobm1lbWIsIHNpemUsIEdGUF9LRVJORUwpOworfQogI2Vsc2UKIGV4dGVybiB2b2lkICpkcm1fYWxsb2Moc2l6ZV90IHNpemUsIGludCBhcmVhKTsKIGV4dGVybiB2b2lkIGRybV9mcmVlKHZvaWQgKnB0LCBzaXplX3Qgc2l6ZSwgaW50IGFyZWEpOworZXh0ZXJuIHZvaWQgKmRybV9jYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwgaW50IGFyZWEpOwogI2VuZGlmCiAKIC8qQH0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYXV0aC5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fYXV0aC5jCmluZGV4IGI0Mjg3NjEuLmRkMTQwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2F1dGguYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9hdXRoLmMKQEAgLTg3LDcgKzg3LDcgQEAKICAqIGFzc29jaWF0ZWQgdGhlIG1hZ2ljIG51bWJlciBoYXNoIGtleSBpbiBkcm1fZGV2aWNlOjptYWdpY2xpc3QsIHdoaWxlIGhvbGRpbmcKICAqIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3Rfc2VtIGxvY2suCiAgKi8KLWludCBkcm1fYWRkX21hZ2ljKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fZmlsZV90ICpwcml2LCBkcm1fbWFnaWNfdCBtYWdpYykKK3N0YXRpYyBpbnQgZHJtX2FkZF9tYWdpYyhkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2ZpbGVfdCAqcHJpdiwgZHJtX21hZ2ljX3QgbWFnaWMpCiB7CiAJaW50CQkgIGhhc2g7CiAJZHJtX21hZ2ljX2VudHJ5X3QgKmVudHJ5OwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgKiBTZWFyY2hlcyBhbmQgdW5saW5rcyB0aGUgZW50cnkgaW4gZHJtX2RldmljZTo6bWFnaWNsaXN0IHdpdGggdGhlIG1hZ2ljCiAgKiBudW1iZXIgaGFzaCBrZXksIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9zZW0gbG9jay4KICAqLwotaW50IGRybV9yZW1vdmVfbWFnaWMoZHJtX2RldmljZV90ICpkZXYsIGRybV9tYWdpY190IG1hZ2ljKQorc3RhdGljIGludCBkcm1fcmVtb3ZlX21hZ2ljKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fbWFnaWNfdCBtYWdpYykKIHsKIAlkcm1fbWFnaWNfZW50cnlfdCAqcHJldiA9IE5VTEw7CiAJZHJtX21hZ2ljX2VudHJ5X3QgKnB0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jCmluZGV4IDM0MDczODAuLjRjNjE5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2J1ZnMuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMKQEAgLTM1Niw4ICszNTYsOCBAQAogICogcmVhbGxvY2F0ZXMgdGhlIGJ1ZmZlciBsaXN0IG9mIHRoZSBzYW1lIHNpemUgb3JkZXIgdG8gYWNjb21tb2RhdGUgdGhlIG5ldwogICogYnVmZmVycy4KICAqLwotaW50IGRybV9hZGRidWZzX2FncCggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK3N0YXRpYyBpbnQgZHJtX2FkZGJ1ZnNfYWdwKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCiB7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKQEAgLTUyMSw4ICs1MjEsOCBAQAogfQogI2VuZGlmIC8qIF9fT1NfSEFTX0FHUCAqLwogCi1pbnQgZHJtX2FkZGJ1ZnNfcGNpKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQorc3RhdGljIGludCBkcm1fYWRkYnVmc19wY2koIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKIHsKICAgIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwpAQCAtNzUxLDggKzc1MSw4IEBACiAKIH0KIAotaW50IGRybV9hZGRidWZzX3NnKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK3N0YXRpYyBpbnQgZHJtX2FkZGJ1ZnNfc2coIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9jb250ZXh0LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9jb250ZXh0LmMKaW5kZXggZmRmNjYxZi4uYTdjZmFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2NvbnRleHQuYwpAQCAtODQsNyArODQsNyBAQAogICogZHJtX2RldmljZTo6Y29udGV4dF9zYXJlYXMgdG8gYWNjb21tb2RhdGUgdGhlIG5ldyBlbnRyeSB3aGlsZSBob2xkaW5nIHRoZQogICogZHJtX2RldmljZTo6c3RydWN0X3NlbSBsb2NrLgogICovCi1pbnQgZHJtX2N0eGJpdG1hcF9uZXh0KCBkcm1fZGV2aWNlX3QgKmRldiApCitzdGF0aWMgaW50IGRybV9jdHhiaXRtYXBfbmV4dCggZHJtX2RldmljZV90ICpkZXYgKQogewogCWludCBiaXQ7CiAKQEAgLTMyNiw3ICszMjYsNyBAQAogICogaGFyZHdhcmUgbG9jayBpcyBoZWxkLCBjbGVhcnMgdGhlIGRybV9kZXZpY2U6OmNvbnRleHRfZmxhZyBhbmQgd2FrZXMgdXAKICAqIGRybV9kZXZpY2U6OmNvbnRleHRfd2FpdC4KICAqLwotaW50IGRybV9jb250ZXh0X3N3aXRjaF9jb21wbGV0ZSggZHJtX2RldmljZV90ICpkZXYsIGludCBuZXcgKQorc3RhdGljIGludCBkcm1fY29udGV4dF9zd2l0Y2hfY29tcGxldGUoIGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgbmV3ICkKIHsKICAgICAgICAgZGV2LT5sYXN0X2NvbnRleHQgPSBuZXc7ICAvKiBQUkUvUE9TVDogVGhpcyBpcyB0aGUgX29ubHlfIHdyaXRlci4gKi8KICAgICAgICAgZGV2LT5sYXN0X3N3aXRjaCAgPSBqaWZmaWVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYwppbmRleCAxZTM3ZWQwLi4zMzMzYzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYwpAQCAtNTEsOCArNTEsMTEgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2NvcmUuaCIKIAorc3RhdGljIGludCBkcm1fdmVyc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwogLyoqIElvY3RsIHRhYmxlICovCi1kcm1faW9jdGxfZGVzY190CQkgIGRybV9pb2N0bHNbXSA9IHsKK3N0YXRpYyBkcm1faW9jdGxfZGVzY190CQkgIGRybV9pb2N0bHNbXSA9IHsKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9WRVJTSU9OKV0gICAgICAgPSB7IGRybV92ZXJzaW9uLCAgICAgMCwgMCB9LAogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0dFVF9VTklRVUUpXSAgICA9IHsgZHJtX2dldHVuaXF1ZSwgICAwLCAwIH0sCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfR0VUX01BR0lDKV0gICAgID0geyBkcm1fZ2V0bWFnaWMsICAgIDAsIDAgfSwKQEAgLTQ0Nyw4ICs0NTAsOCBAQAogICoKICAqIEZpbGxzIGluIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIFxwIGFyZy4KICAqLwotaW50IGRybV92ZXJzaW9uKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitzdGF0aWMgaW50IGRybV92ZXJzaW9uKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZm9wcy5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZm9wcy5jCmluZGV4IDkwNjc5NDIuLjEwZTY0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9mb3BzLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogCitzdGF0aWMgaW50IGRybV9vcGVuX2hlbHBlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgZHJtX2RldmljZV90ICpkZXYpOworCiBzdGF0aWMgaW50IGRybV9zZXR1cCggZHJtX2RldmljZV90ICpkZXYgKQogewogCWludCBpOwpAQCAtMjUxLDcgKzI1Myw3IEBACiAJCX0KIAl9CiAJCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9ETUEpKQorCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfRE1BKSAmJiAhZGV2LT5kcml2ZXItPnJlbGVhc2UpCiAJewogCQlkZXYtPmRyaXZlci0+cmVjbGFpbV9idWZmZXJzKGRldiwgZmlscCk7CiAJfQpAQCAtMjU5LDcgKzI2MSw3IEBACiAJZHJtX2Zhc3luYyggLTEsIGZpbHAsIDAgKTsKIAogCWRvd24oICZkZXYtPmN0eGxpc3Rfc2VtICk7Ci0JaWYgKCAhbGlzdF9lbXB0eSggJmRldi0+Y3R4bGlzdC0+aGVhZCApICkgeworCWlmICggZGV2LT5jdHhsaXN0ICYmICghbGlzdF9lbXB0eSgmZGV2LT5jdHhsaXN0LT5oZWFkKSkpIHsKIAkJZHJtX2N0eF9saXN0X3QgKnBvcywgKm47CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCBwb3MsIG4sICZkZXYtPmN0eGxpc3QtPmhlYWQsIGhlYWQgKSB7CkBAIC0zNDEsNyArMzQzLDcgQEAKICAqIENyZWF0ZXMgYW5kIGluaXRpYWxpemVzIGEgZHJtX2ZpbGUgc3RydWN0dXJlIGZvciB0aGUgZmlsZSBwcml2YXRlIGRhdGEgaW4gXHAKICAqIGZpbHAgYW5kIGFkZCBpdCBpbnRvIHRoZSBkb3VibGUgbGlua2VkIGxpc3QgaW4gXHAgZGV2LgogICovCi1pbnQgZHJtX29wZW5faGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCBkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBpbnQgZHJtX29wZW5faGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCBkcm1fZGV2aWNlX3QgKmRldikKIHsKIAlpbnQJICAgICBtaW5vciA9IGltaW5vcihpbm9kZSk7CiAJZHJtX2ZpbGVfdCAgICpwcml2OwpAQCAtNDQzLDkgKzQ0NSwzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9wb2xsKTsKIAotCi0vKiogTm8tb3AuICovCi1zc2l6ZV90IGRybV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQotewotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9pcnEuYwppbmRleCAyZTIzNmViLi5jZGQ0YWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9pcnEuYwpAQCAtODksNyArODksNyBAQAogICogXGMgZHJtX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCgpIGFuZCBcYyBkcm1fZHJpdmVyX2lycV9wb3N0aW5zdGFsbCgpIGZ1bmN0aW9ucwogICogYmVmb3JlIGFuZCBhZnRlciB0aGUgaW5zdGFsbGF0aW9uLgogICovCi1pbnQgZHJtX2lycV9pbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApCitzdGF0aWMgaW50IGRybV9pcnFfaW5zdGFsbCggZHJtX2RldmljZV90ICpkZXYgKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBzaF9mbGFncz0wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbG9jay5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbG9jay5jCmluZGV4IGQwZDZmYzYuLjQ3MDJkODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2xvY2suYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9sb2NrLmMKQEAgLTM1LDYgKzM1LDExIEBACiAKICNpbmNsdWRlICJkcm1QLmgiCiAKK3N0YXRpYyBpbnQgZHJtX2xvY2tfdHJhbnNmZXIoZHJtX2RldmljZV90ICpkZXYsCisJCQkgICAgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKmxvY2ssCisJCQkgICAgIHVuc2lnbmVkIGludCBjb250ZXh0KTsKK3N0YXRpYyBpbnQgZHJtX25vdGlmaWVyKHZvaWQgKnByaXYpOworCiAvKiogCiAgKiBMb2NrIGlvY3RsLgogICoKQEAgLTIyNSw4ICsyMzAsOSBAQAogICogUmVzZXRzIHRoZSBsb2NrIGZpbGUgcG9pbnRlci4KICAqIE1hcmtzIHRoZSBsb2NrIGFzIGhlbGQgYnkgdGhlIGdpdmVuIGNvbnRleHQsIHZpYSB0aGUgXHAgY21weGNoZyBpbnN0cnVjdGlvbi4KICAqLwotaW50IGRybV9sb2NrX3RyYW5zZmVyKGRybV9kZXZpY2VfdCAqZGV2LAotCQkgICAgICAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCAqbG9jaywgdW5zaWduZWQgaW50IGNvbnRleHQpCitzdGF0aWMgaW50IGRybV9sb2NrX3RyYW5zZmVyKGRybV9kZXZpY2VfdCAqZGV2LAorCQkJICAgICBfX3ZvbGF0aWxlX18gdW5zaWduZWQgaW50ICpsb2NrLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY29udGV4dCkKIHsKIAl1bnNpZ25lZCBpbnQgb2xkLCBuZXcsIHByZXY7CiAKQEAgLTI4Miw3ICsyODgsNyBAQAogICogXHJldHVybiBvbmUgaWYgdGhlIHNpZ25hbCBzaG91bGQgYmUgZGVsaXZlcmVkIG5vcm1hbGx5LCBvciB6ZXJvIGlmIHRoZQogICogc2lnbmFsIHNob3VsZCBiZSBibG9ja2VkLgogICovCi1pbnQgZHJtX25vdGlmaWVyKHZvaWQgKnByaXYpCitzdGF0aWMgaW50IGRybV9ub3RpZmllcih2b2lkICpwcml2KQogewogCWRybV9zaWdkYXRhX3QgKnMgPSAoZHJtX3NpZ2RhdGFfdCAqKXByaXY7CiAJdW5zaWduZWQgaW50ICBvbGQsIG5ldywgcHJldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMKaW5kZXggN2Y1M2Y3NS4uYWNlM2Q0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMKQEAgLTY1LDE5ICs2NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKiBXcmFwcGVyIGFyb3VuZCBrbWFsbG9jKCkgKi8KLXZvaWQgKmRybV9jYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwgaW50IGFyZWEpCi17Ci0Jdm9pZCAqYWRkcjsKLQotCWFkZHIgPSBrbWFsbG9jKHNpemUgKiBubWVtYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGFkZHIgIT0gTlVMTCkKLQkJbWVtc2V0KCh2b2lkICopYWRkciwgMCwgc2l6ZSAqIG5tZW1iKTsKLQotCXJldHVybiBhZGRyOwotfQotRVhQT1JUX1NZTUJPTChkcm1fY2FsbG9jKTsKLQogLyoqIFdyYXBwZXIgYXJvdW5kIGttYWxsb2MoKSBhbmQga2ZyZWUoKSAqLwogdm9pZCAqZHJtX3JlYWxsb2Modm9pZCAqb2xkcHQsIHNpemVfdCBvbGRzaXplLCBzaXplX3Qgc2l6ZSwgaW50IGFyZWEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2lpZHMuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IDExYzY5NTAuLjcwY2E0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCkBAIC0yMjMsMyArMjIzLDEwIEBACiAJezB4ODA4NiwgMHgyNzcyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAogCXswLCAwLCAwfQogCisjZGVmaW5lIHZpYWRydl9QQ0lfSURTIFwKKwl7MHgxMTA2LCAweDMwMjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCisJezB4MTEwNiwgMHgzMTIyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAorCXsweDExMDYsIDB4NzIwNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKKwl7MHgxMTA2LCAweDcyMDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCisJezAsIDAsIDB9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3Byb2MuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3Byb2MuYwppbmRleCA2ZTA2ZThjLi40Nzc0MDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wcm9jLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fcHJvYy5jCkBAIC01Nyw3ICs1Nyw3IEBACiAvKioKICAqIFByb2MgZmlsZSBsaXN0LgogICovCi1zdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7CitzdGF0aWMgc3RydWN0IGRybV9wcm9jX2xpc3QgewogCWNvbnN0IGNoYXIgKm5hbWU7CS8qKjwgZmlsZSBuYW1lICovCiAJaW50CSAgICgqZikoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsJLyoqPCBwcm9jIGNhbGxiYWNrKi8KIH0gZHJtX3Byb2NfbGlzdFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3R1Yi5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fc3R1Yi5jCmluZGV4IDhjY2JkZWYuLjQ4ODI5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N0dWIuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMKQEAgLTE1Nyw1MiArMTU3LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0KLS8qKgotICogUmVnaXN0ZXIuCi0gKgotICogXHBhcmFtIHBkZXYgLSBQQ0kgZGV2aWNlIHN0cnVjdHVyZQotICogXHBhcmFtIGVudCBlbnRyeSBmcm9tIHRoZSBQQ0kgSUQgdGFibGUgd2l0aCBkZXZpY2UgdHlwZSBmbGFncwotICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KLSAqCi0gKiBBdHRlbXB0IHRvIGdldHMgaW50ZXIgbW9kdWxlICJkcm0iIGluZm9ybWF0aW9uLiBJZiB3ZSBhcmUgZmlyc3QKLSAqIHRoZW4gcmVnaXN0ZXIgdGhlIGNoYXJhY3RlciBkZXZpY2UgYW5kIGludGVyIG1vZHVsZSBpbmZvcm1hdGlvbi4KLSAqIFRyeSBhbmQgcmVnaXN0ZXIsIGlmIHdlIGZhaWwgdG8gcmVnaXN0ZXIsIGJhY2tvdXQgcHJldmlvdXMgd29yay4KLSAqLwotaW50IGRybV9nZXRfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50LAotCSAgICAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCi17Ci0JZHJtX2RldmljZV90ICpkZXY7Ci0JaW50IHJldDsKLQotCURSTV9ERUJVRygiXG4iKTsKLQotCWRldiA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKCpkZXYpLCBEUk1fTUVNX1NUVUIpOwotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCi0JaWYgKChyZXQgPSBkcm1fZmlsbF9pbl9kZXYoZGV2LCBwZGV2LCBlbnQsIGRyaXZlcikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRFJNOiBGaWxsX2luX2RldiBmYWlsZWQuXG4iKTsKLQkJZ290byBlcnJfZzE7Ci0JfQotCWlmICgocmV0ID0gZHJtX2dldF9oZWFkKGRldiwgJmRldi0+cHJpbWFyeSkpKQotCQlnb3RvIGVycl9nMTsKLQotCS8qIHBvc3Rpbml0IGlzIGEgcmVxdWlyZWQgZnVuY3Rpb24gdG8gZGlzcGxheSB0aGUgc2lnbm9uIGJhbm5lciAqLwotCS8qIGRyaXZlcnMgYWRkIHNlY29uZGFyeSBoZWFkcyBoZXJlIGlmIG5lZWRlZCAqLwotCWlmICgocmV0ID0gZGV2LT5kcml2ZXItPnBvc3Rpbml0KGRldiwgZW50LT5kcml2ZXJfZGF0YSkpKQotCQlnb3RvIGVycl9nMTsKLQotCXJldHVybiAwOwotCi1lcnJfZzE6Ci0JZHJtX2ZyZWUoZGV2LCBzaXplb2YoKmRldiksIERSTV9NRU1fU1RVQik7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2dldF9kZXYpOwotCiAvKioKICAqIEdldCBhIHNlY29uZGFyeSBtaW5vciBudW1iZXIuCiAgKgpAQCAtMjE0LDcgKzE2OCw3IEBACiAgKiBjcmVhdGUgdGhlIHByb2MgaW5pdCBlbnRyeSB2aWEgcHJvY19pbml0KCkuIFRoaXMgcm91dGluZXMgYXNzaWducwogICogbWlub3IgbnVtYmVycyB0byBzZWNvbmRhcnkgaGVhZHMgb2YgbXVsdGktaGVhZGVkIGNhcmRzCiAgKi8KLWludCBkcm1fZ2V0X2hlYWQoZHJtX2RldmljZV90ICpkZXYsIGRybV9oZWFkX3QgKmhlYWQpCitzdGF0aWMgaW50IGRybV9nZXRfaGVhZChkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2hlYWRfdCAqaGVhZCkKIHsKIAlkcm1faGVhZF90ICoqaGVhZHMgPSBkcm1faGVhZHM7CiAJaW50IHJldDsKQEAgLTI2Miw2ICsyMTYsNTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCQkKKy8qKgorICogUmVnaXN0ZXIuCisgKgorICogXHBhcmFtIHBkZXYgLSBQQ0kgZGV2aWNlIHN0cnVjdHVyZQorICogXHBhcmFtIGVudCBlbnRyeSBmcm9tIHRoZSBQQ0kgSUQgdGFibGUgd2l0aCBkZXZpY2UgdHlwZSBmbGFncworICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KKyAqCisgKiBBdHRlbXB0IHRvIGdldHMgaW50ZXIgbW9kdWxlICJkcm0iIGluZm9ybWF0aW9uLiBJZiB3ZSBhcmUgZmlyc3QKKyAqIHRoZW4gcmVnaXN0ZXIgdGhlIGNoYXJhY3RlciBkZXZpY2UgYW5kIGludGVyIG1vZHVsZSBpbmZvcm1hdGlvbi4KKyAqIFRyeSBhbmQgcmVnaXN0ZXIsIGlmIHdlIGZhaWwgdG8gcmVnaXN0ZXIsIGJhY2tvdXQgcHJldmlvdXMgd29yay4KKyAqLworaW50IGRybV9nZXRfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50LAorCSAgICAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCit7CisJZHJtX2RldmljZV90ICpkZXY7CisJaW50IHJldDsKKworCURSTV9ERUJVRygiXG4iKTsKKworCWRldiA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKCpkZXYpLCBEUk1fTUVNX1NUVUIpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCisJaWYgKChyZXQgPSBkcm1fZmlsbF9pbl9kZXYoZGV2LCBwZGV2LCBlbnQsIGRyaXZlcikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRFJNOiBGaWxsX2luX2RldiBmYWlsZWQuXG4iKTsKKwkJZ290byBlcnJfZzE7CisJfQorCWlmICgocmV0ID0gZHJtX2dldF9oZWFkKGRldiwgJmRldi0+cHJpbWFyeSkpKQorCQlnb3RvIGVycl9nMTsKKworCS8qIHBvc3Rpbml0IGlzIGEgcmVxdWlyZWQgZnVuY3Rpb24gdG8gZGlzcGxheSB0aGUgc2lnbm9uIGJhbm5lciAqLworCS8qIGRyaXZlcnMgYWRkIHNlY29uZGFyeSBoZWFkcyBoZXJlIGlmIG5lZWRlZCAqLworCWlmICgocmV0ID0gZGV2LT5kcml2ZXItPnBvc3Rpbml0KGRldiwgZW50LT5kcml2ZXJfZGF0YSkpKQorCQlnb3RvIGVycl9nMTsKKworCXJldHVybiAwOworCitlcnJfZzE6CisJZHJtX2ZyZWUoZGV2LCBzaXplb2YoKmRldiksIERSTV9NRU1fU1RVQik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dldF9kZXYpOwogCiAvKioKICAqIFB1dCBhIGRldmljZSBtaW5vciBudW1iZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYwppbmRleCBmYzcyZjMwLi42MjEyMjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3ZtLmMKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KICNlbmRpZgogCitzdGF0aWMgdm9pZCBkcm1fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitzdGF0aWMgdm9pZCBkcm1fdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCiAvKioKICAqIFxjIG5vcGFnZSBtZXRob2QgZm9yIEFHUCB2aXJ0dWFsIG1lbW9yeS4KQEAgLTE2Myw3ICsxNjUsNyBAQAogICogRGVsZXRlcyBtYXAgaW5mb3JtYXRpb24gaWYgd2UgYXJlIHRoZSBsYXN0CiAgKiBwZXJzb24gdG8gY2xvc2UgYSBtYXBwaW5nIGFuZCBpdCdzIG5vdCBpbiB0aGUgZ2xvYmFsIG1hcGxpc3QuCiAgKi8KLXZvaWQgZHJtX3ZtX3NobV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyB2b2lkIGRybV92bV9zaG1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJZHJtX2ZpbGVfdAkqcHJpdgk9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdAkqZGV2CT0gcHJpdi0+aGVhZC0+ZGV2OwpAQCAtMzk5LDcgKzQwMSw3IEBACiAgKiBDcmVhdGUgYSBuZXcgZHJtX3ZtYV9lbnRyeSBzdHJ1Y3R1cmUgYXMgdGhlIFxwIHZtYSBwcml2YXRlIGRhdGEgZW50cnkgYW5kCiAgKiBhZGQgaXQgdG8gZHJtX2RldmljZTo6dm1hbGlzdC4KICAqLwotdm9pZCBkcm1fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyB2b2lkIGRybV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCWRybV9maWxlX3QJKnByaXYJPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QJKmRldgk9IHByaXYtPmhlYWQtPmRldjsKQEAgLTQyOCw3ICs0MzAsNyBAQAogICogU2VhcmNoIHRoZSBccCB2bWEgcHJpdmF0ZSBkYXRhIGVudHJ5IGluIGRybV9kZXZpY2U6OnZtYWxpc3QsIHVubGluayBpdCwgYW5kCiAgKiBmcmVlIGl0LgogICovCi12b2lkIGRybV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyB2b2lkIGRybV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlkcm1fZmlsZV90CSpwcml2CT0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90CSpkZXYJPSBwcml2LT5oZWFkLT5kZXY7CkBAIC00NjMsNyArNDY1LDcgQEAKICAqIFNldHMgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgdG8gdm1fZG1hX29wcywgdGhlIGZpbGUKICAqIHBvaW50ZXIsIGFuZCBjYWxscyB2bV9vcGVuKCkuCiAgKi8KLWludCBkcm1fbW1hcF9kbWEoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGludCBkcm1fbW1hcF9kbWEoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCWRybV9maWxlX3QJICpwcml2CSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QJICpkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZG1hLmMKaW5kZXggMjQ4NTdjYy4uMThlMGI3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pODEwX2RtYS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kbWEuYwpAQCAtOTAsMTYgKzkwLDcgQEAKICAgIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgxMF9idWZmZXJfZm9wcyA9IHsKLQkub3BlbgkgPSBkcm1fb3BlbiwKLQkuZmx1c2gJID0gZHJtX2ZsdXNoLAotCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsCSA9IGRybV9pb2N0bCwKLQkubW1hcAkgPSBpODEwX21tYXBfYnVmZmVycywKLQkuZmFzeW5jICA9IGRybV9mYXN5bmMsCi19OwotCi1pbnQgaTgxMF9tbWFwX2J1ZmZlcnMoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGludCBpODEwX21tYXBfYnVmZmVycyhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJZHJtX2ZpbGVfdAkgICAgKnByaXYJICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QJICAgICpkZXY7CkBAIC0xMjYsNiArMTE3LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGk4MTBfYnVmZmVyX2ZvcHMgPSB7CisJLm9wZW4JID0gZHJtX29wZW4sCisJLmZsdXNoCSA9IGRybV9mbHVzaCwKKwkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCS5pb2N0bAkgPSBkcm1faW9jdGwsCisJLm1tYXAJID0gaTgxMF9tbWFwX2J1ZmZlcnMsCisJLmZhc3luYyAgPSBkcm1fZmFzeW5jLAorfTsKKwogc3RhdGljIGludCBpODEwX21hcF9idWZmZXIoZHJtX2J1Zl90ICpidWYsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWRybV9maWxlX3QJICAqcHJpdgkgID0gZmlscC0+cHJpdmF0ZV9kYXRhOwpAQCAtMTAwMyw4ICsxMDAzLDggQEAKIAl9CiB9CiAKLWludCBpODEwX2ZsdXNoX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBpODEwX2ZsdXNoX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogICAgCWRybV9maWxlX3QJICAqcHJpdgkgID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogICAgCWRybV9kZXZpY2VfdAkgICpkZXYJICA9IHByaXYtPmhlYWQtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kcnYuaAppbmRleCBmYTIzY2E0Li4xYjQwNTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pODEwX2Rydi5oCkBAIC0xMTUsNyArMTE1LDYgQEAKIAogCQkJCS8qIGk4MTBfZG1hLmMgKi8KIGV4dGVybiB2b2lkIGk4MTBfcmVjbGFpbV9idWZmZXJzKGRybV9kZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1leHRlcm4gaW50IGk4MTBfbW1hcF9idWZmZXJzKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKIGV4dGVybiBpbnQgaTgxMF9kcml2ZXJfZG1hX3F1aWVzY2VudChkcm1fZGV2aWNlX3QgKmRldik7CiBleHRlcm4gdm9pZCBpODEwX2RyaXZlcl9yZWxlYXNlKGRybV9kZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZG1hLmMKaW5kZXggOThhZGNjZi4uZGM3NzMzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pODMwX2RtYS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kbWEuYwpAQCAtOTIsMTYgKzkyLDcgQEAKICAgIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgzMF9idWZmZXJfZm9wcyA9IHsKLQkub3BlbgkgPSBkcm1fb3BlbiwKLQkuZmx1c2gJID0gZHJtX2ZsdXNoLAotCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsCSA9IGRybV9pb2N0bCwKLQkubW1hcAkgPSBpODMwX21tYXBfYnVmZmVycywKLQkuZmFzeW5jICA9IGRybV9mYXN5bmMsCi19OwotCi1pbnQgaTgzMF9tbWFwX2J1ZmZlcnMoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGludCBpODMwX21tYXBfYnVmZmVycyhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJZHJtX2ZpbGVfdAkgICAgKnByaXYJICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QJICAgICpkZXY7CkBAIC0xMjgsNiArMTE5LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGk4MzBfYnVmZmVyX2ZvcHMgPSB7CisJLm9wZW4JID0gZHJtX29wZW4sCisJLmZsdXNoCSA9IGRybV9mbHVzaCwKKwkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCS5pb2N0bAkgPSBkcm1faW9jdGwsCisJLm1tYXAJID0gaTgzMF9tbWFwX2J1ZmZlcnMsCisJLmZhc3luYyAgPSBkcm1fZmFzeW5jLAorfTsKKwogc3RhdGljIGludCBpODMwX21hcF9idWZmZXIoZHJtX2J1Zl90ICpidWYsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWRybV9maWxlX3QJICAqcHJpdgkgID0gZmlscC0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pODMwX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9pODMwX2Rydi5jCmluZGV4IGFhODBhZDYuLmJjMzZiZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZHJ2LmMKQEAgLTQwLDcgKzQwLDcgQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAotaW50IHBvc3Rpbml0KCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzICkKK3N0YXRpYyBpbnQgcG9zdGluaXQoIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MgKQogewogCWRldi0+Y291bnRlcnMgKz0gNDsKIAlkZXYtPnR5cGVzWzZdID0gX0RSTV9TVEFUX0lSUTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kcnYuaAppbmRleCBkNGIyZDA5Li5kZjc3NDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pODMwX2Rydi5oCkBAIC0xMjMsOCArMTIzLDYgQEAKIC8qIGk4MzBfZG1hLmMgKi8KIGV4dGVybiB2b2lkIGk4MzBfcmVjbGFpbV9idWZmZXJzKGRybV9kZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiAKLWV4dGVybiBpbnQgaTgzMF9tbWFwX2J1ZmZlcnMoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLQogLyogaTgzMF9pcnEuYyAqLwogZXh0ZXJuIGludCBpODMwX2lycV9lbWl0KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgCiAJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfaXJxLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfaXJxLmMKaW5kZXggNmQ3NzI5Zi4uYTU5MjNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pODMwX2lycS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9pcnEuYwpAQCAtNTQsOCArNTQsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotCi1pbnQgaTgzMF9lbWl0X2lycShkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBpbnQgaTgzMF9lbWl0X2lycShkcm1fZGV2aWNlX3QgKmRldikKIHsKIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlSSU5HX0xPQ0FMUzsKQEAgLTczLDcgKzcyLDcgQEAKIH0KIAogCi1pbnQgaTgzMF93YWl0X2lycShkcm1fZGV2aWNlX3QgKmRldiwgaW50IGlycV9ucikKK3N0YXRpYyBpbnQgaTgzMF93YWl0X2lycShkcm1fZGV2aWNlX3QgKmRldiwgaW50IGlycV9ucikKIHsKICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAKIAkgICAoZHJtX2k4MzBfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kbWEuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kbWEuYwppbmRleCBiNTkwM2Y5Li5hY2Y5ZTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RtYS5jCkBAIC0zMiwyMyArMzIsNiBAQAogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKIAotZHJtX2lvY3RsX2Rlc2NfdCBpOTE1X2lvY3Rsc1tdID0gewotCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfSU5JVCldID0ge2k5MTVfZG1hX2luaXQsIDEsIDF9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfRkxVU0gpXSA9IHtpOTE1X2ZsdXNoX2lvY3RsLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0ZMSVApXSA9IHtpOTE1X2ZsaXBfYnVmcywgMSwgMH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9CQVRDSEJVRkZFUildID0ge2k5MTVfYmF0Y2hidWZmZXIsIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfSVJRX0VNSVQpXSA9IHtpOTE1X2lycV9lbWl0LCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0lSUV9XQUlUKV0gPSB7aTkxNV9pcnFfd2FpdCwgMSwgMH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9HRVRQQVJBTSldID0ge2k5MTVfZ2V0cGFyYW0sIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfU0VUUEFSQU0pXSA9IHtpOTE1X3NldHBhcmFtLCAxLCAxfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0FMTE9DKV0gPSB7aTkxNV9tZW1fYWxsb2MsIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfRlJFRSldID0ge2k5MTVfbWVtX2ZyZWUsIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfSU5JVF9IRUFQKV0gPSB7aTkxNV9tZW1faW5pdF9oZWFwLCAxLCAxfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0NNREJVRkZFUildID0ge2k5MTVfY21kYnVmZmVyLCAxLCAwfQotfTsKLQotaW50IGk5MTVfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUoaTkxNV9pb2N0bHMpOwotCiAvKiBSZWFsbHkgd2FudCBhbiBPUy1pbmRlcGVuZGVudCByZXNldHRhYmxlIHRpbWVyLiAgV291bGQgbGlrZSB0byBoYXZlCiAgKiB0aGlzIGxvb3AgcnVuIGZvciAoZWcpIDMgc2VjLCBidXQgaGF2ZSB0aGUgdGltZXIgcmVzZXQgZXZlcnkgdGltZQogICogdGhlIGhlYWQgcG9pbnRlciBjaGFuZ2VzLCBzbyB0aGF0IEVCVVNZIG9ubHkgaGFwcGVucyBpZiB0aGUgcmluZwpAQCAtOTUsNyArNzgsNyBAQAogCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9SSU5HX0VNUFRZOwogfQogCi1pbnQgaTkxNV9kbWFfY2xlYW51cChkcm1fZGV2aWNlX3QgKiBkZXYpCitzdGF0aWMgaW50IGk5MTVfZG1hX2NsZWFudXAoZHJtX2RldmljZV90ICogZGV2KQogewogCS8qIE1ha2Ugc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBoZXJlIGJlY2F1c2UgdGhlIHVuaW5zdGFsbCBpb2N0bAogCSAqIG1heSBub3QgaGF2ZSBiZWVuIGNhbGxlZCBmcm9tIHVzZXJzcGFjZSBhbmQgYWZ0ZXIgZGV2X3ByaXZhdGUKQEAgLTI0Nyw3ICsyMzAsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaTkxNV9kbWFfaW5pdChEUk1fSU9DVExfQVJHUykKK3N0YXRpYyBpbnQgaTkxNV9kbWFfaW5pdChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXY7CkBAIC01NTgsNyArNTQxLDcgQEAKIAlyZXR1cm4gaTkxNV93YWl0X3JpbmcoZGV2LCBkZXZfcHJpdi0+cmluZy5TaXplIC0gOCwgX19GVU5DVElPTl9fKTsKIH0KIAotaW50IGk5MTVfZmx1c2hfaW9jdGwoRFJNX0lPQ1RMX0FSR1MpCitzdGF0aWMgaW50IGk5MTVfZmx1c2hfaW9jdGwoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIApAQCAtNTY3LDcgKzU1MCw3IEBACiAJcmV0dXJuIGk5MTVfcXVpZXNjZW50KGRldik7CiB9CiAKLWludCBpOTE1X2JhdGNoYnVmZmVyKERSTV9JT0NUTF9BUkdTKQorc3RhdGljIGludCBpOTE1X2JhdGNoYnVmZmVyKERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTYwMSw3ICs1ODQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBpOTE1X2NtZGJ1ZmZlcihEUk1fSU9DVExfQVJHUykKK3N0YXRpYyBpbnQgaTkxNV9jbWRidWZmZXIoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNjM3LDE4ICs2MjAsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaTkxNV9kb19jbGVhbnVwX3BhZ2VmbGlwKGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgIT0gMCkKLQkJaTkxNV9kaXNwYXRjaF9mbGlwKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGk5MTVfZmxpcF9idWZzKERSTV9JT0NUTF9BUkdTKQorc3RhdGljIGludCBpOTE1X2ZsaXBfYnVmcyhEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCkBAIC02NTksNyArNjMxLDcgQEAKIAlyZXR1cm4gaTkxNV9kaXNwYXRjaF9mbGlwKGRldik7CiB9CiAKLWludCBpOTE1X2dldHBhcmFtKERSTV9JT0NUTF9BUkdTKQorc3RhdGljIGludCBpOTE1X2dldHBhcmFtKERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC02OTQsNyArNjY2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGk5MTVfc2V0cGFyYW0oRFJNX0lPQ1RMX0FSR1MpCitzdGF0aWMgaW50IGk5MTVfc2V0cGFyYW0oRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTc0MywzICs3MTUsMTkgQEAKIAl9CiB9CiAKK2RybV9pb2N0bF9kZXNjX3QgaTkxNV9pb2N0bHNbXSA9IHsKKwlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0lOSVQpXSA9IHtpOTE1X2RtYV9pbml0LCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0ZMVVNIKV0gPSB7aTkxNV9mbHVzaF9pb2N0bCwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9GTElQKV0gPSB7aTkxNV9mbGlwX2J1ZnMsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfQkFUQ0hCVUZGRVIpXSA9IHtpOTE1X2JhdGNoYnVmZmVyLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0lSUV9FTUlUKV0gPSB7aTkxNV9pcnFfZW1pdCwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9JUlFfV0FJVCldID0ge2k5MTVfaXJxX3dhaXQsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfR0VUUEFSQU0pXSA9IHtpOTE1X2dldHBhcmFtLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X1NFVFBBUkFNKV0gPSB7aTkxNV9zZXRwYXJhbSwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9BTExPQyldID0ge2k5MTVfbWVtX2FsbG9jLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0ZSRUUpXSA9IHtpOTE1X21lbV9mcmVlLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0lOSVRfSEVBUCldID0ge2k5MTVfbWVtX2luaXRfaGVhcCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9DTURCVUZGRVIpXSA9IHtpOTE1X2NtZGJ1ZmZlciwgMSwgMH0KK307CisKK2ludCBpOTE1X21heF9pb2N0bCA9IERSTV9BUlJBWV9TSVpFKGk5MTVfaW9jdGxzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuYwppbmRleCBlNmE5ZTFkLi4xZjU5ZDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5jCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCiAKLWludCBwb3N0aW5pdCggc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyApCitzdGF0aWMgaW50IHBvc3Rpbml0KCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzICkKIHsKIAlkZXYtPmNvdW50ZXJzICs9IDQ7CiAJZGV2LT50eXBlc1s2XSA9IF9EUk1fU1RBVF9JUlE7CkBAIC05Nyw2ICs5Nyw5IEBACiAJCS5tbWFwID0gZHJtX21tYXAsCiAJCS5wb2xsID0gZHJtX3BvbGwsCiAJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkJLmNvbXBhdF9pb2N0bCA9IGk5MTVfY29tcGF0X2lvY3RsLAorI2VuZGlmCiAJfSwKIAkucGNpX2RyaXZlciA9IHsKIAkJLm5hbWUgICAgICAgICAgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuaAppbmRleCBmYTk0MGQ2Li45YzM3ZDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5oCkBAIC05OSwxNCArOTksNiBAQAogfSBkcm1faTkxNV9wcml2YXRlX3Q7CiAKIAkJCQkvKiBpOTE1X2RtYS5jICovCi1leHRlcm4gaW50IGk5MTVfZG1hX2luaXQoRFJNX0lPQ1RMX0FSR1MpOwotZXh0ZXJuIGludCBpOTE1X2RtYV9jbGVhbnVwKGRybV9kZXZpY2VfdCAqIGRldik7Ci1leHRlcm4gaW50IGk5MTVfZmx1c2hfaW9jdGwoRFJNX0lPQ1RMX0FSR1MpOwotZXh0ZXJuIGludCBpOTE1X2JhdGNoYnVmZmVyKERSTV9JT0NUTF9BUkdTKTsKLWV4dGVybiBpbnQgaTkxNV9mbGlwX2J1ZnMoRFJNX0lPQ1RMX0FSR1MpOwotZXh0ZXJuIGludCBpOTE1X2dldHBhcmFtKERSTV9JT0NUTF9BUkdTKTsKLWV4dGVybiBpbnQgaTkxNV9zZXRwYXJhbShEUk1fSU9DVExfQVJHUyk7Ci1leHRlcm4gaW50IGk5MTVfY21kYnVmZmVyKERSTV9JT0NUTF9BUkdTKTsKIGV4dGVybiB2b2lkIGk5MTVfa2VybmVsX2xvc3RfY29udGV4dChkcm1fZGV2aWNlX3QgKiBkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfcHJldGFrZWRvd24oZHJtX2RldmljZV90ICpkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfcHJlcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldiwgRFJNRklMRSBmaWxwKTsKQEAgLTExNCw4ICsxMDYsNiBAQAogLyogaTkxNV9pcnEuYyAqLwogZXh0ZXJuIGludCBpOTE1X2lycV9lbWl0KERSTV9JT0NUTF9BUkdTKTsKIGV4dGVybiBpbnQgaTkxNV9pcnFfd2FpdChEUk1fSU9DVExfQVJHUyk7Ci1leHRlcm4gaW50IGk5MTVfd2FpdF9pcnEoZHJtX2RldmljZV90ICogZGV2LCBpbnQgaXJxX25yKTsKLWV4dGVybiBpbnQgaTkxNV9lbWl0X2lycShkcm1fZGV2aWNlX3QgKiBkZXYpOwogCiBleHRlcm4gaXJxcmV0dXJuX3QgaTkxNV9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2lycV9wcmVpbnN0YWxsKGRybV9kZXZpY2VfdCAqZGV2KTsKQEAgLTEzMCw2ICsxMjAsMTAgQEAKIGV4dGVybiB2b2lkIGk5MTVfbWVtX3JlbGVhc2UoZHJtX2RldmljZV90ICogZGV2LAogCQkJICAgICBEUk1GSUxFIGZpbHAsIHN0cnVjdCBtZW1fYmxvY2sgKmhlYXApOwogCitleHRlcm4gbG9uZyBpOTE1X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKKworCiAjZGVmaW5lIEk5MTVfUkVBRChyZWcpICAgICAgICAgIERSTV9SRUFEMzIoZGV2X3ByaXYtPm1taW9fbWFwLCByZWcpCiAjZGVmaW5lIEk5MTVfV1JJVEUocmVnLHZhbCkgICAgIERSTV9XUklURTMyKGRldl9wcml2LT5tbWlvX21hcCwgcmVnLCB2YWwpCiAjZGVmaW5lIEk5MTVfUkVBRDE2KHJlZykgCURSTV9SRUFEMTYoZGV2X3ByaXYtPm1taW9fbWFwLCByZWcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfaW9jMzIuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pb2MzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDA5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfaW9jMzIuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoqCisgKiBcZmlsZSBpOTE1X2lvYzMyLmMKKyAqCisgKiAzMi1iaXQgaW9jdGwgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgdGhlIGk5MTUgRFJNLgorICoKKyAqIFxhdXRob3IgQWxhbiBIb3VyaWhhbmUgPGFsYW5oQGZhaXJsaXRlLmRlbW9uLmNvLnVrPiAKKyAqCisgKgorICogQ29weXJpZ2h0IChDKSBQYXVsIE1hY2tlcnJhcyAyMDA1CisgKiBDb3B5cmlnaHQgKEMpIEFsYW4gSG91cmloYW5lIDIwMDUKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X2JhdGNoYnVmZmVyMzIgeworCWludCBzdGFydDsJCS8qIGFncCBvZmZzZXQgKi8KKwlpbnQgdXNlZDsJCS8qIG5yIGJ5dGVzIGluIHVzZSAqLworCWludCBEUjE7CQkvKiBodyBmbGFncyBmb3IgR0ZYX09QX0RSQVdSRUNUX0lORk8gKi8KKwlpbnQgRFI0OwkJLyogd2luZG93IG9yaWdpbiBmb3IgR0ZYX09QX0RSQVdSRUNUX0lORk8gKi8KKwlpbnQgbnVtX2NsaXByZWN0czsJLyogbXVsaXRwYXNzIHdpdGggbXVsdGlwbGUgY2xpcHJlY3RzPyAqLworCXUzMiBjbGlwcmVjdHM7CS8qIHBvaW50ZXIgdG8gdXNlcnNwYWNlIGNsaXByZWN0cyAqLworfSBkcm1faTkxNV9iYXRjaGJ1ZmZlcjMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0X2k5MTVfYmF0Y2hidWZmZXIoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkcm1faTkxNV9iYXRjaGJ1ZmZlcjMyX3QgYmF0Y2hidWZmZXIzMjsKKwlkcm1faTkxNV9iYXRjaGJ1ZmZlcl90IF9fdXNlciAqYmF0Y2hidWZmZXI7CisJCisJaWYgKGNvcHlfZnJvbV91c2VyKCZiYXRjaGJ1ZmZlcjMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihiYXRjaGJ1ZmZlcjMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCQorCWJhdGNoYnVmZmVyID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpiYXRjaGJ1ZmZlcikpOworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYmF0Y2hidWZmZXIsIHNpemVvZigqYmF0Y2hidWZmZXIpKQorCSAgICB8fCBfX3B1dF91c2VyKGJhdGNoYnVmZmVyMzIuc3RhcnQsICZiYXRjaGJ1ZmZlci0+c3RhcnQpCisJICAgIHx8IF9fcHV0X3VzZXIoYmF0Y2hidWZmZXIzMi51c2VkLCAmYmF0Y2hidWZmZXItPnVzZWQpCisJICAgIHx8IF9fcHV0X3VzZXIoYmF0Y2hidWZmZXIzMi5EUjEsICZiYXRjaGJ1ZmZlci0+RFIxKQorCSAgICB8fCBfX3B1dF91c2VyKGJhdGNoYnVmZmVyMzIuRFI0LCAmYmF0Y2hidWZmZXItPkRSNCkKKwkgICAgfHwgX19wdXRfdXNlcihiYXRjaGJ1ZmZlcjMyLm51bV9jbGlwcmVjdHMsICZiYXRjaGJ1ZmZlci0+bnVtX2NsaXByZWN0cykKKwkgICAgfHwgX19wdXRfdXNlcigoaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWJhdGNoYnVmZmVyMzIuY2xpcHJlY3RzLAorCQkJICAmYmF0Y2hidWZmZXItPmNsaXByZWN0cykpCisJCXJldHVybiAtRUZBVUxUOworCQorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJCQkgRFJNX0lPQ1RMX0k5MTVfQkFUQ0hCVUZGRVIsICh1bnNpZ25lZCBsb25nKSBiYXRjaGJ1ZmZlcik7Cit9CisKK3R5cGVkZWYgc3RydWN0IF9kcm1faTkxNV9jbWRidWZmZXIzMiB7CisJdTMyIGJ1ZjsJLyogcG9pbnRlciB0byB1c2Vyc3BhY2UgY29tbWFuZCBidWZmZXIgKi8KKwlpbnQgc3o7CQkJLyogbnIgYnl0ZXMgaW4gYnVmICovCisJaW50IERSMTsJCS8qIGh3IGZsYWdzIGZvciBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAqLworCWludCBEUjQ7CQkvKiB3aW5kb3cgb3JpZ2luIGZvciBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAqLworCWludCBudW1fY2xpcHJlY3RzOwkvKiBtdWxpdHBhc3Mgd2l0aCBtdWx0aXBsZSBjbGlwcmVjdHM/ICovCisJdTMyIGNsaXByZWN0czsJLyogcG9pbnRlciB0byB1c2Vyc3BhY2UgY2xpcHJlY3RzICovCit9IGRybV9pOTE1X2NtZGJ1ZmZlcjMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0X2k5MTVfY21kYnVmZmVyKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJZHJtX2k5MTVfY21kYnVmZmVyMzJfdCBjbWRidWZmZXIzMjsKKwlkcm1faTkxNV9jbWRidWZmZXJfdCBfX3VzZXIgKmNtZGJ1ZmZlcjsKKwkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZGJ1ZmZlcjMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihjbWRidWZmZXIzMikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkKKwljbWRidWZmZXIgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmNtZGJ1ZmZlcikpOworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgY21kYnVmZmVyLCBzaXplb2YoKmNtZGJ1ZmZlcikpCisJICAgIHx8IF9fcHV0X3VzZXIoKGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljbWRidWZmZXIzMi5idWYsCisJCQkgICZjbWRidWZmZXItPmJ1ZikKKwkgICAgfHwgX19wdXRfdXNlcihjbWRidWZmZXIzMi5zeiwgJmNtZGJ1ZmZlci0+c3opCisJICAgIHx8IF9fcHV0X3VzZXIoY21kYnVmZmVyMzIuRFIxLCAmY21kYnVmZmVyLT5EUjEpCisJICAgIHx8IF9fcHV0X3VzZXIoY21kYnVmZmVyMzIuRFI0LCAmY21kYnVmZmVyLT5EUjQpCisJICAgIHx8IF9fcHV0X3VzZXIoY21kYnVmZmVyMzIubnVtX2NsaXByZWN0cywgJmNtZGJ1ZmZlci0+bnVtX2NsaXByZWN0cykKKwkgICAgfHwgX19wdXRfdXNlcigoaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWNtZGJ1ZmZlcjMyLmNsaXByZWN0cywKKwkJCSAgJmNtZGJ1ZmZlci0+Y2xpcHJlY3RzKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwkJCSBEUk1fSU9DVExfSTkxNV9DTURCVUZGRVIsICh1bnNpZ25lZCBsb25nKSBjbWRidWZmZXIpOworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfZW1pdDMyIHsKKwl1MzIgaXJxX3NlcTsKK30gZHJtX2k5MTVfaXJxX2VtaXQzMl90OworCitzdGF0aWMgaW50IGNvbXBhdF9pOTE1X2lycV9lbWl0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJZHJtX2k5MTVfaXJxX2VtaXQzMl90IHJlcTMyOworCWRybV9pOTE1X2lycV9lbWl0X3QgX191c2VyICpyZXF1ZXN0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEzMiwgKHZvaWQgX191c2VyICopIGFyZywgc2l6ZW9mKHJlcTMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmVxdWVzdCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqcmVxdWVzdCkpOworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgcmVxdWVzdCwgc2l6ZW9mKCpyZXF1ZXN0KSkKKwkgICAgfHwgX19wdXRfdXNlcigoaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXJlcTMyLmlycV9zZXEsCisJCQkgICZyZXF1ZXN0LT5pcnFfc2VxKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCQkJIERSTV9JT0NUTF9JOTE1X0lSUV9FTUlULCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7Cit9Cit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbTMyIHsKKwlpbnQgcGFyYW07CisJdTMyIHZhbHVlOworfSBkcm1faTkxNV9nZXRwYXJhbTMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0X2k5MTVfZ2V0cGFyYW0oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkcm1faTkxNV9nZXRwYXJhbTMyX3QgcmVxMzI7CisJZHJtX2k5MTVfZ2V0cGFyYW1fdCBfX3VzZXIgKnJlcXVlc3Q7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxMzIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXF1ZXN0ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpyZXF1ZXN0KSk7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCByZXF1ZXN0LCBzaXplb2YoKnJlcXVlc3QpKQorCSAgICB8fCBfX3B1dF91c2VyKHJlcTMyLnBhcmFtLCAmcmVxdWVzdC0+cGFyYW0pCisJICAgIHx8IF9fcHV0X3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpcmVxMzIudmFsdWUsCisJCQkgICZyZXF1ZXN0LT52YWx1ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwkJCSBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpIHJlcXVlc3QpOworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9tZW1fYWxsb2MzMiB7CisJaW50IHJlZ2lvbjsKKwlpbnQgYWxpZ25tZW50OworCWludCBzaXplOworCXUzMiByZWdpb25fb2Zmc2V0OwkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBmYiBvciBhZ3AgKi8KK30gZHJtX2k5MTVfbWVtX2FsbG9jMzJfdDsKKworc3RhdGljIGludCBjb21wYXRfaTkxNV9hbGxvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWRybV9pOTE1X21lbV9hbGxvYzMyX3QgcmVxMzI7CisJZHJtX2k5MTVfbWVtX2FsbG9jX3QgX191c2VyICpyZXF1ZXN0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEzMiwgKHZvaWQgX191c2VyICopIGFyZywgc2l6ZW9mKHJlcTMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmVxdWVzdCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqcmVxdWVzdCkpOworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgcmVxdWVzdCwgc2l6ZW9mKCpyZXF1ZXN0KSkKKwkgICAgfHwgX19wdXRfdXNlcihyZXEzMi5yZWdpb24sICZyZXF1ZXN0LT5yZWdpb24pCisJICAgIHx8IF9fcHV0X3VzZXIocmVxMzIuYWxpZ25tZW50LCAmcmVxdWVzdC0+YWxpZ25tZW50KQorCSAgICB8fCBfX3B1dF91c2VyKHJlcTMyLnNpemUsICZyZXF1ZXN0LT5zaXplKQorCSAgICB8fCBfX3B1dF91c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXJlcTMyLnJlZ2lvbl9vZmZzZXQsCisJCQkgICZyZXF1ZXN0LT5yZWdpb25fb2Zmc2V0KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCQkJIERSTV9JT0NUTF9JOTE1X0FMTE9DLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7Cit9CisKKworZHJtX2lvY3RsX2NvbXBhdF90ICppOTE1X2NvbXBhdF9pb2N0bHNbXSA9IHsKKwlbRFJNX0k5MTVfQkFUQ0hCVUZGRVJdID0gY29tcGF0X2k5MTVfYmF0Y2hidWZmZXIsCisJW0RSTV9JOTE1X0NNREJVRkZFUl0gPSBjb21wYXRfaTkxNV9jbWRidWZmZXIsCisJW0RSTV9JOTE1X0dFVFBBUkFNXSA9IGNvbXBhdF9pOTE1X2dldHBhcmFtLAorCVtEUk1fSTkxNV9JUlFfRU1JVF0gPSBjb21wYXRfaTkxNV9pcnFfZW1pdCwKKwlbRFJNX0k5MTVfQUxMT0NdID0gY29tcGF0X2k5MTVfYWxsb2MKK307CisKKy8qKgorICogQ2FsbGVkIHdoZW5ldmVyIGEgMzItYml0IHByb2Nlc3MgcnVubmluZyB1bmRlciBhIDY0LWJpdCBrZXJuZWwKKyAqIHBlcmZvcm1zIGFuIGlvY3RsIG9uIC9kZXYvZHJpL2NhcmQ8bj4uCisgKgorICogXHBhcmFtIGZpbHAgZmlsZSBwb2ludGVyLgorICogXHBhcmFtIGNtZCBjb21tYW5kLgorICogXHBhcmFtIGFyZyB1c2VyIGFyZ3VtZW50LgorICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCisgKi8KK2xvbmcgaTkxNV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgaW50IG5yID0gRFJNX0lPQ1RMX05SKGNtZCk7CisJZHJtX2lvY3RsX2NvbXBhdF90ICpmbiA9IE5VTEw7CisJaW50IHJldDsKKworCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UpCisJCXJldHVybiBkcm1fY29tcGF0X2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKKwkKKwlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUoaTkxNV9jb21wYXRfaW9jdGxzKSkKKwkJZm4gPSBpOTE1X2NvbXBhdF9pb2N0bHNbbnIgLSBEUk1fQ09NTUFORF9CQVNFXTsKKworCWxvY2tfa2VybmVsKCk7CQkvKiBYWFggZm9yIG5vdyAqLworCWlmIChmbiAhPSBOVUxMKQorCQlyZXQgPSAoKmZuKShmaWxwLCBjbWQsIGFyZyk7CisJZWxzZQorCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lycS5jCmluZGV4IGExMDFjYzkuLjRmYTQ0OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfaXJxLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWludCBpOTE1X2VtaXRfaXJxKGRybV9kZXZpY2VfdCAqIGRldikKK3N0YXRpYyBpbnQgaTkxNV9lbWl0X2lycShkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIHJldDsKQEAgLTc2LDcgKzc2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgaTkxNV93YWl0X2lycShkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBpcnFfbnIpCitzdGF0aWMgaW50IGk5MTVfd2FpdF9pcnEoZHJtX2RldmljZV90ICogZGV2LCBpbnQgaXJxX25yKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5jCmluZGV4IDIyZGFiM2UuLjg0NGNjYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5jCkBAIC0xMDEsNiArMTAxLDkgQEAKIAkJLm1tYXAgPSBkcm1fbW1hcCwKIAkJLnBvbGwgPSBkcm1fcG9sbCwKIAkJLmZhc3luYyA9IGRybV9mYXN5bmMsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQkuY29tcGF0X2lvY3RsID0gbWdhX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgogCX0sCiAJLnBjaV9kcml2ZXIgPSB7CiAJCS5uYW1lID0gRFJJVkVSX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5oCmluZGV4IDFkODRhMWUuLjk0MTJlMjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuaApAQCAtMTM3LDYgKzEzNyw4IEBACiBleHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2lycV9wcmVpbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApOwogZXh0ZXJuIHZvaWQgbWdhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoIGRybV9kZXZpY2VfdCAqZGV2ICk7CiBleHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwoIGRybV9kZXZpY2VfdCAqZGV2ICk7CitleHRlcm4gbG9uZyBtZ2FfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAKICNkZWZpbmUgbWdhX2ZsdXNoX3dyaXRlX2NvbWJpbmUoKQlEUk1fV1JJVEVNRU1PUllCQVJSSUVSKCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9tZ2FfaW9jMzIuYyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2lvYzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3NDVjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2lvYzMyLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qKgorICogXGZpbGUgbWdhX2lvYzMyLmMKKyAqCisgKiAzMi1iaXQgaW9jdGwgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgdGhlIE1HQSBEUk0uCisgKgorICogXGF1dGhvciBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4gd2l0aCBjb2RlIGZyb20gcGF0Y2hlcyBieSBFZ2JlcnQgRWljaAorICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIFBhdWwgTWFja2VycmFzIDIwMDUKKyAqIENvcHlyaWdodCAoQykgRWdiZXJ0IEVpY2ggMjAwMywyMDA0CisgKiBDb3B5cmlnaHQgKEMpIERhdmUgQWlybGllIDIwMDUKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAibWdhX2RybS5oIgorCit0eXBlZGVmIHN0cnVjdCBkcm0zMl9tZ2FfaW5pdCB7CisJaW50IGZ1bmM7CisgICAJdTMyIHNhcmVhX3ByaXZfb2Zmc2V0OworCWludCBjaGlwc2V0OworICAgCWludCBzZ3JhbTsKKwl1bnNpZ25lZCBpbnQgbWFjY2VzczsKKyAgIAl1bnNpZ25lZCBpbnQgZmJfY3BwOworCXVuc2lnbmVkIGludCBmcm9udF9vZmZzZXQsIGZyb250X3BpdGNoOworICAgCXVuc2lnbmVkIGludCBiYWNrX29mZnNldCwgYmFja19waXRjaDsKKyAgIAl1bnNpZ25lZCBpbnQgZGVwdGhfY3BwOworICAgCXVuc2lnbmVkIGludCBkZXB0aF9vZmZzZXQsIGRlcHRoX3BpdGNoOworICAgCXVuc2lnbmVkIGludCB0ZXh0dXJlX29mZnNldFtNR0FfTlJfVEVYX0hFQVBTXTsKKyAgIAl1bnNpZ25lZCBpbnQgdGV4dHVyZV9zaXplW01HQV9OUl9URVhfSEVBUFNdOworCXUzMiBmYl9vZmZzZXQ7CisJdTMyIG1taW9fb2Zmc2V0OworCXUzMiBzdGF0dXNfb2Zmc2V0OworCXUzMiB3YXJwX29mZnNldDsKKwl1MzIgcHJpbWFyeV9vZmZzZXQ7CisJdTMyIGJ1ZmZlcnNfb2Zmc2V0OworfSBkcm1fbWdhX2luaXQzMl90OworCitzdGF0aWMgaW50IGNvbXBhdF9tZ2FfaW5pdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWRybV9tZ2FfaW5pdDMyX3QgaW5pdDMyOworCWRybV9tZ2FfaW5pdF90IF9fdXNlciAqaW5pdDsKKwlpbnQgZXJyID0gMCwgaTsKKwkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluaXQzMiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoaW5pdDMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCQorCWluaXQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmluaXQpKTsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGluaXQsIHNpemVvZigqaW5pdCkpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmZ1bmMsICZpbml0LT5mdW5jKQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5zYXJlYV9wcml2X29mZnNldCwgJmluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5jaGlwc2V0LCAmaW5pdC0+Y2hpcHNldCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuc2dyYW0sICZpbml0LT5zZ3JhbSkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIubWFjY2VzcywgJmluaXQtPm1hY2Nlc3MpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmZiX2NwcCwgJmluaXQtPmZiX2NwcCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuZnJvbnRfb2Zmc2V0LCAmaW5pdC0+ZnJvbnRfb2Zmc2V0KQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5mcm9udF9waXRjaCwgJmluaXQtPmZyb250X3BpdGNoKQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5iYWNrX29mZnNldCwgJmluaXQtPmJhY2tfb2Zmc2V0KQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5iYWNrX3BpdGNoLCAmaW5pdC0+YmFja19waXRjaCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuZGVwdGhfY3BwLCAmaW5pdC0+ZGVwdGhfY3BwKQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5kZXB0aF9vZmZzZXQsICZpbml0LT5kZXB0aF9vZmZzZXQpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmRlcHRoX3BpdGNoLCAmaW5pdC0+ZGVwdGhfcGl0Y2gpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmZiX29mZnNldCwgJmluaXQtPmZiX29mZnNldCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIubW1pb19vZmZzZXQsICZpbml0LT5tbWlvX29mZnNldCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuc3RhdHVzX29mZnNldCwgJmluaXQtPnN0YXR1c19vZmZzZXQpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLndhcnBfb2Zmc2V0LCAmaW5pdC0+d2FycF9vZmZzZXQpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLnByaW1hcnlfb2Zmc2V0LCAmaW5pdC0+cHJpbWFyeV9vZmZzZXQpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmJ1ZmZlcnNfb2Zmc2V0LCAmaW5pdC0+YnVmZmVyc19vZmZzZXQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkKKwlmb3IgKGk9MDsgaTxNR0FfTlJfVEVYX0hFQVBTOyBpKyspCisJeworCQllcnIgfD0gX19wdXRfdXNlcihpbml0MzIudGV4dHVyZV9vZmZzZXRbaV0sICZpbml0LT50ZXh0dXJlX29mZnNldFtpXSk7CisJCWVyciB8PSBfX3B1dF91c2VyKGluaXQzMi50ZXh0dXJlX3NpemVbaV0sICZpbml0LT50ZXh0dXJlX3NpemVbaV0pOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCQkJIERSTV9JT0NUTF9NR0FfSU5JVCwgKHVuc2lnbmVkIGxvbmcpIGluaXQpOworfQorCisKK3R5cGVkZWYgc3RydWN0IGRybV9tZ2FfZ2V0cGFyYW0zMiB7CisJaW50IHBhcmFtOworCXUzMiB2YWx1ZTsKK30gZHJtX21nYV9nZXRwYXJhbTMyX3Q7CisKKworc3RhdGljIGludCBjb21wYXRfbWdhX2dldHBhcmFtKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWRybV9tZ2FfZ2V0cGFyYW0zMl90IGdldHBhcmFtMzI7CisJZHJtX21nYV9nZXRwYXJhbV90IF9fdXNlciAqZ2V0cGFyYW07CisJCisJaWYgKGNvcHlfZnJvbV91c2VyKCZnZXRwYXJhbTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihnZXRwYXJhbTMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZ2V0cGFyYW0gPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmdldHBhcmFtKSk7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBnZXRwYXJhbSwgc2l6ZW9mKCpnZXRwYXJhbSkpCisJICAgIHx8IF9fcHV0X3VzZXIoZ2V0cGFyYW0zMi5wYXJhbSwgJmdldHBhcmFtLT5wYXJhbSkKKwkgICAgfHwgX19wdXRfdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylnZXRwYXJhbTMyLnZhbHVlLCAmZ2V0cGFyYW0tPnZhbHVlKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLCAKKwkJCSBEUk1fSU9DVExfTUdBX0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylnZXRwYXJhbSk7Cit9CisKK2RybV9pb2N0bF9jb21wYXRfdCAqbWdhX2NvbXBhdF9pb2N0bHNbXSA9IHsKKwlbRFJNX01HQV9JTklUXSA9IGNvbXBhdF9tZ2FfaW5pdCwKKwlbRFJNX01HQV9HRVRQQVJBTV0gPSBjb21wYXRfbWdhX2dldHBhcmFtLAorfTsKKworLyoqCisgKiBDYWxsZWQgd2hlbmV2ZXIgYSAzMi1iaXQgcHJvY2VzcyBydW5uaW5nIHVuZGVyIGEgNjQtYml0IGtlcm5lbAorICogcGVyZm9ybXMgYW4gaW9jdGwgb24gL2Rldi9kcmkvY2FyZDxuPi4KKyAqCisgKiBccGFyYW0gZmlscCBmaWxlIHBvaW50ZXIuCisgKiBccGFyYW0gY21kIGNvbW1hbmQuCisgKiBccGFyYW0gYXJnIHVzZXIgYXJndW1lbnQuCisgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KKyAqLworbG9uZyBtZ2FfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXVuc2lnbmVkIGludCBuciA9IERSTV9JT0NUTF9OUihjbWQpOworCWRybV9pb2N0bF9jb21wYXRfdCAqZm4gPSBOVUxMOworCWludCByZXQ7CisKKwlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFKQorCQlyZXR1cm4gZHJtX2NvbXBhdF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CisJCisJaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9BUlJBWV9TSVpFKG1nYV9jb21wYXRfaW9jdGxzKSkKKwkJZm4gPSBtZ2FfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOworCisJbG9ja19rZXJuZWwoKTsJCS8qIFhYWCBmb3Igbm93ICovCisJaWYgKGZuICE9IE5VTEwpCisJCXJldCA9ICgqZm4pKGZpbHAsIGNtZCwgYXJnKTsKKwllbHNlCisJCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmMKaW5kZXggY2VkNjM4MS4uYmM0NDZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuYwpAQCAtOTYsNiArOTYsOSBAQAogCQkubW1hcCA9IGRybV9tbWFwLAogCQkucG9sbCA9IGRybV9wb2xsLAogCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCS5jb21wYXRfaW9jdGwgPSByMTI4X2NvbXBhdF9pb2N0bCwKKyNlbmRpZgogCX0sCiAJLnBjaV9kcml2ZXIgPSB7CiAJCS5uYW1lICAgICAgICAgID0gRFJJVkVSX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmggYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmgKaW5kZXggY2YxYWE1ZC4uMGZiNjg3YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmgKQEAgLTE1Niw2ICsxNTYsOSBAQAogZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfcHJldGFrZWRvd24oZHJtX2RldmljZV90ICpkZXYpOwogZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfcHJlcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldiwgRFJNRklMRSBmaWxwKTsKIAorZXh0ZXJuIGxvbmcgcjEyOF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CisKIC8qIFJlZ2lzdGVyIGRlZmluaXRpb25zLCByZWdpc3RlciBhY2Nlc3MgbWFjcm9zIGFuZCBkcm1BZGRNYXAgY29uc3RhbnRzCiAgKiBmb3IgUmFnZSAxMjgga2VybmVsIGRyaXZlci4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2lvYzMyLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfaW9jMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDU5OGVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2lvYzMyLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qKgorICogXGZpbGUgcjEyOF9pb2MzMi5jCisgKgorICogMzItYml0IGlvY3RsIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIHRoZSBSMTI4IERSTS4KKyAqCisgKiBcYXV0aG9yIERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPiB3aXRoIGNvZGUgZnJvbSBwYXRjaGVzIGJ5IEVnYmVydCBFaWNoCisgKgorICogQ29weXJpZ2h0IChDKSBQYXVsIE1hY2tlcnJhcyAyMDA1CisgKiBDb3B5cmlnaHQgKEMpIEVnYmVydCBFaWNoIDIwMDMsMjAwNAorICogQ29weXJpZ2h0IChDKSBEYXZlIEFpcmxpZSAyMDA1CisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwzMi5oPgorCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgInIxMjhfZHJtLmgiCisKK3R5cGVkZWYgc3RydWN0IGRybV9yMTI4X2luaXQzMiB7CisJaW50IGZ1bmM7CisJdW5zaWduZWQgaW50IHNhcmVhX3ByaXZfb2Zmc2V0OworCWludCBpc19wY2k7CisJaW50IGNjZV9tb2RlOworCWludCBjY2Vfc2VjdXJlOworCWludCByaW5nX3NpemU7CisJaW50IHVzZWNfdGltZW91dDsKKworCXVuc2lnbmVkIGludCBmYl9icHA7CisJdW5zaWduZWQgaW50IGZyb250X29mZnNldCwgZnJvbnRfcGl0Y2g7CisJdW5zaWduZWQgaW50IGJhY2tfb2Zmc2V0LCBiYWNrX3BpdGNoOworCXVuc2lnbmVkIGludCBkZXB0aF9icHA7CisJdW5zaWduZWQgaW50IGRlcHRoX29mZnNldCwgZGVwdGhfcGl0Y2g7CisJdW5zaWduZWQgaW50IHNwYW5fb2Zmc2V0OworCisJdW5zaWduZWQgaW50IGZiX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgbW1pb19vZmZzZXQ7CisJdW5zaWduZWQgaW50IHJpbmdfb2Zmc2V0OworCXVuc2lnbmVkIGludCByaW5nX3JwdHJfb2Zmc2V0OworCXVuc2lnbmVkIGludCBidWZmZXJzX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgYWdwX3RleHR1cmVzX29mZnNldDsKK30gZHJtX3IxMjhfaW5pdDMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0X3IxMjhfaW5pdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkcm1fcjEyOF9pbml0MzJfdCBpbml0MzI7CisJZHJtX3IxMjhfaW5pdF90IF9fdXNlciAqaW5pdDsKKwkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluaXQzMiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoaW5pdDMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCQorCWluaXQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmluaXQpKTsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGluaXQsIHNpemVvZigqaW5pdCkpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmZ1bmMsICZpbml0LT5mdW5jKQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5zYXJlYV9wcml2X29mZnNldCwgJmluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5pc19wY2ksICZpbml0LT5pc19wY2kpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmNjZV9tb2RlLCAmaW5pdC0+Y2NlX21vZGUpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmNjZV9zZWN1cmUsICZpbml0LT5jY2Vfc2VjdXJlKQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5yaW5nX3NpemUsICZpbml0LT5yaW5nX3NpemUpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLnVzZWNfdGltZW91dCwgJmluaXQtPnVzZWNfdGltZW91dCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuZmJfYnBwLCAmaW5pdC0+ZmJfYnBwKQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5mcm9udF9vZmZzZXQsICZpbml0LT5mcm9udF9vZmZzZXQpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmZyb250X3BpdGNoLCAmaW5pdC0+ZnJvbnRfcGl0Y2gpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmJhY2tfb2Zmc2V0LCAmaW5pdC0+YmFja19vZmZzZXQpCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmJhY2tfcGl0Y2gsICZpbml0LT5iYWNrX3BpdGNoKQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5kZXB0aF9icHAsICZpbml0LT5kZXB0aF9icHApCisJICAgIHx8IF9fcHV0X3VzZXIoaW5pdDMyLmRlcHRoX29mZnNldCwgJmluaXQtPmRlcHRoX29mZnNldCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuZGVwdGhfcGl0Y2gsICZpbml0LT5kZXB0aF9waXRjaCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuc3Bhbl9vZmZzZXQsICZpbml0LT5zcGFuX29mZnNldCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuZmJfb2Zmc2V0LCAmaW5pdC0+ZmJfb2Zmc2V0KQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5tbWlvX29mZnNldCwgJmluaXQtPm1taW9fb2Zmc2V0KQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5yaW5nX29mZnNldCwgJmluaXQtPnJpbmdfb2Zmc2V0KQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5yaW5nX3JwdHJfb2Zmc2V0LCAmaW5pdC0+cmluZ19ycHRyX29mZnNldCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuYnVmZmVyc19vZmZzZXQsICZpbml0LT5idWZmZXJzX29mZnNldCkKKwkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuYWdwX3RleHR1cmVzX29mZnNldCwgJmluaXQtPmFncF90ZXh0dXJlc19vZmZzZXQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCQkJIERSTV9JT0NUTF9SMTI4X0lOSVQsICh1bnNpZ25lZCBsb25nKWluaXQpOworfQorCisKK3R5cGVkZWYgc3RydWN0IGRybV9yMTI4X2RlcHRoMzIgeworCWludCBmdW5jOworCWludCBuOworCXUzMiB4OworCXUzMiB5OworCXUzMiBidWZmZXI7CisJdTMyIG1hc2s7Cit9IGRybV9yMTI4X2RlcHRoMzJfdDsKKworc3RhdGljIGludCBjb21wYXRfcjEyOF9kZXB0aChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJZHJtX3IxMjhfZGVwdGgzMl90IGRlcHRoMzI7CisJZHJtX3IxMjhfZGVwdGhfdCBfX3VzZXIgKmRlcHRoOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZkZXB0aDMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihkZXB0aDMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZGVwdGggPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmRlcHRoKSk7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkZXB0aCwgc2l6ZW9mKCpkZXB0aCkpCisJICAgIHx8IF9fcHV0X3VzZXIoZGVwdGgzMi5mdW5jLCAmZGVwdGgtPmZ1bmMpCisJICAgIHx8IF9fcHV0X3VzZXIoZGVwdGgzMi5uLCAmZGVwdGgtPm4pCisJICAgIHx8IF9fcHV0X3VzZXIoKGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylkZXB0aDMyLngsICZkZXB0aC0+eCkKKwkgICAgfHwgX19wdXRfdXNlcigoaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWRlcHRoMzIueSwgJmRlcHRoLT55KQorCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBpbnQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpZGVwdGgzMi5idWZmZXIsICZkZXB0aC0+YnVmZmVyKQorCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWRlcHRoMzIubWFzaywgJmRlcHRoLT5tYXNrKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwkJCSBEUk1fSU9DVExfUjEyOF9ERVBUSCwgKHVuc2lnbmVkIGxvbmcpZGVwdGgpOwkKKwkKK30KKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfc3RpcHBsZTMyIHsKKwl1MzIgbWFzazsKK30gZHJtX3IxMjhfc3RpcHBsZTMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0X3IxMjhfc3RpcHBsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkcm1fcjEyOF9zdGlwcGxlMzJfdCBzdGlwcGxlMzI7CisJZHJtX3IxMjhfc3RpcHBsZV90IF9fdXNlciAqc3RpcHBsZTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmc3RpcHBsZTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihzdGlwcGxlMzIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzdGlwcGxlID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpzdGlwcGxlKSk7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBzdGlwcGxlLCBzaXplb2YoKnN0aXBwbGUpKQorCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBpbnQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpc3RpcHBsZTMyLm1hc2ssICZzdGlwcGxlLT5tYXNrKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCQkJIERSTV9JT0NUTF9SMTI4X1NUSVBQTEUsICh1bnNpZ25lZCBsb25nKXN0aXBwbGUpOworfQorCit0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9nZXRwYXJhbTMyIHsKKwlpbnQgcGFyYW07CisJdTMyIHZhbHVlOworfSBkcm1fcjEyOF9nZXRwYXJhbTMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0X3IxMjhfZ2V0cGFyYW0oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJZHJtX3IxMjhfZ2V0cGFyYW0zMl90IGdldHBhcmFtMzI7CisJZHJtX3IxMjhfZ2V0cGFyYW1fdCBfX3VzZXIgKmdldHBhcmFtOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZnZXRwYXJhbTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihnZXRwYXJhbTMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZ2V0cGFyYW0gPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmdldHBhcmFtKSk7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBnZXRwYXJhbSwgc2l6ZW9mKCpnZXRwYXJhbSkpCisJICAgIHx8IF9fcHV0X3VzZXIoZ2V0cGFyYW0zMi5wYXJhbSwgJmdldHBhcmFtLT5wYXJhbSkKKwkgICAgfHwgX19wdXRfdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylnZXRwYXJhbTMyLnZhbHVlLCAmZ2V0cGFyYW0tPnZhbHVlKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwkJCSBEUk1fSU9DVExfUjEyOF9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpZ2V0cGFyYW0pOworfQorCitkcm1faW9jdGxfY29tcGF0X3QgKnIxMjhfY29tcGF0X2lvY3Rsc1tdID0geworCVtEUk1fUjEyOF9JTklUXSA9IGNvbXBhdF9yMTI4X2luaXQsCisJW0RSTV9SMTI4X0RFUFRIXSA9IGNvbXBhdF9yMTI4X2RlcHRoLAorCVtEUk1fUjEyOF9TVElQUExFXSA9IGNvbXBhdF9yMTI4X3N0aXBwbGUsCisJW0RSTV9SMTI4X0dFVFBBUkFNXSA9IGNvbXBhdF9yMTI4X2dldHBhcmFtLAorfTsKKworLyoqCisgKiBDYWxsZWQgd2hlbmV2ZXIgYSAzMi1iaXQgcHJvY2VzcyBydW5uaW5nIHVuZGVyIGEgNjQtYml0IGtlcm5lbAorICogcGVyZm9ybXMgYW4gaW9jdGwgb24gL2Rldi9kcmkvY2FyZDxuPi4KKyAqCisgKiBccGFyYW0gZmlscCBmaWxlIHBvaW50ZXIuCisgKiBccGFyYW0gY21kIGNvbW1hbmQuCisgKiBccGFyYW0gYXJnIHVzZXIgYXJndW1lbnQuCisgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KKyAqLworbG9uZyByMTI4X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBpbnQgbnIgPSBEUk1fSU9DVExfTlIoY21kKTsKKwlkcm1faW9jdGxfY29tcGF0X3QgKmZuID0gTlVMTDsKKwlpbnQgcmV0OworCisJaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSkKKwkJcmV0dXJuIGRybV9jb21wYXRfaW9jdGwoZmlscCwgY21kLCBhcmcpOworCisJaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9BUlJBWV9TSVpFKHIxMjhfY29tcGF0X2lvY3RscykpCisJCWZuID0gcjEyOF9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CisKKwlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KKwlpZiAoZm4gIT0gTlVMTCkKKwkJcmV0ID0gKCpmbikoZmlscCwgY21kLCBhcmcpOworCWVsc2UKKwkJcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9zdGF0ZS5jIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X3N0YXRlLmMKaW5kZXggNTNhZjY5MS4uNDI2YTcxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X3N0YXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X3N0YXRlLmMKQEAgLTEzMDcsNyArMTMwNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByMTI4X2RvX2NsZWFudXBfcGFnZWZsaXAoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyBpbnQgcjEyOF9kb19jbGVhbnVwX3BhZ2VmbGlwKCBkcm1fZGV2aWNlX3QgKmRldiApCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJRFJNX0RFQlVHKCAiXG4iICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV8zZF9yZWcuaCBiL2RyaXZlcnMvY2hhci9kcm0vdmlhXzNkX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjFiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV8zZF9yZWcuaApAQCAtMCwwICsxLDE2NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDAzIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDMgUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFZJQSwgUzMgR1JBUEhJQ1MsIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgVklBXzNEX1JFR19ICisjZGVmaW5lIFZJQV8zRF9SRUdfSAorI2RlZmluZSBIQ19SRUdfQkFTRSAgICAgICAgICAgICAweDA0MDAKKworI2RlZmluZSBIQ19SRUdfVFJBTlNfU1BBQ0UgICAgICAweDAwNDAKKworI2RlZmluZSBIQ19QYXJhTl9NQVNLICAgICAgICAgICAweGZmZmZmZmZmCisjZGVmaW5lIEhDX1BhcmFfTUFTSyAgICAgICAgICAgIDB4MDBmZmZmZmYKKyNkZWZpbmUgSENfU3ViQV9NQVNLICAgICAgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBIQ19TdWJBX1NISUZUICAgICAgICAgICAyNAorLyogVHJhbnNtaXNzaW9uIFNldHRpbmcKKyAqLworI2RlZmluZSBIQ19SRUdfVFJBTlNfU0VUICAgICAgICAweDAwM2MKKyNkZWZpbmUgSENfUGFyYVN1YlR5cGVfTUFTSyAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBIQ19QYXJhVHlwZV9NQVNLICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEhDX1BhcmFPU19NQVNLICAgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfUGFyYUFkcl9NQVNLICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19QYXJhU3ViVHlwZV9TSElGVCAgICAyNAorI2RlZmluZSBIQ19QYXJhVHlwZV9TSElGVCAgICAgICAxNgorI2RlZmluZSBIQ19QYXJhT1NfU0hJRlQgICAgICAgICA4CisjZGVmaW5lIEhDX1BhcmFBZHJfU0hJRlQgICAgICAgIDAKKworI2RlZmluZSBIQ19QYXJhVHlwZV9DbWRWZGF0YSAgICAweDAwMDAKKyNkZWZpbmUgSENfUGFyYVR5cGVfTm90VGV4ICAgICAgMHgwMDAxCisjZGVmaW5lIEhDX1BhcmFUeXBlX1RleCAgICAgICAgIDB4MDAwMgorI2RlZmluZSBIQ19QYXJhVHlwZV9QYWxldHRlICAgICAweDAwMDMKKyNkZWZpbmUgSENfUGFyYVR5cGVfUHJlQ1IgICAgICAgMHgwMDEwCisjZGVmaW5lIEhDX1BhcmFUeXBlX0F1dG8gICAgICAgIDB4MDBmZQorCisvKiBUcmFuc21pc3Npb24gU3BhY2UKKyAqLworI2RlZmluZSBIQ19SRUdfSHBhcmEwICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgSENfUkVHX0hwYXRhQUYgICAgICAgICAgMHgwMmZjCisKKy8qIFJlYWQKKyAqLworI2RlZmluZSBIQ19SRUdfSFJFbmdTdCAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgSENfUkVHX0hSRklGT2VtcHR5ICAgICAgMHgwMDA0CisjZGVmaW5lIEhDX1JFR19IUkZJRk9mdWxsICAgICAgIDB4MDAwOAorI2RlZmluZSBIQ19SRUdfSFJFcnIgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgSENfUkVHX0ZJRk9zdGF0dXMgICAgICAgMHgwMDEwCisvKiBIQ19SRUdfSFJFbmdTdCAgICAgICAgICAweDAwMDAKKyAqLworI2RlZmluZSBIQ19IREFTWkNfTUFTSyAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhDX0hTR0VNSV9NQVNLICAgICAgICAgIDB4MDAwMGYwMDAKKyNkZWZpbmUgSENfSExHRU1JU3RfTUFTSyAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBIQ19IQ1JTdF9NQVNLICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEhDX0hTRTBTdF9NQVNLICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSENfSFNFMVN0X01BU0sgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19IUEVTdF9NQVNLICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX0hYRVN0X01BU0sgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfSEJFU3RfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBIQ19IRTJTdF9NQVNLICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX0hFM1N0X01BU0sgICAgICAgICAgIDB4MDAwMDAwMDEKKy8qIEhDX1JFR19IUkZJRk9lbXB0eSAgICAgIDB4MDAwNAorICovCisjZGVmaW5lIEhDX0hSWkRlbXB0eV9NQVNLICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfSFJUWEFlbXB0eV9NQVNLICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19IUlRYRGVtcHR5X01BU0sgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX0hXWkRlbXB0eV9NQVNLICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSFdDRGVtcHR5X01BU0sgICAgICAgMHgwMDAwMDAwMQorLyogSENfUkVHX0hSRklGT2Z1bGwgICAgICAgMHgwMDA4CisgKi8KKyNkZWZpbmUgSENfSFJaRGZ1bGxfTUFTSyAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBIQ19IUlRYQWZ1bGxfTUFTSyAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX0hSVFhEZnVsbF9NQVNLICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSENfSFdaRGZ1bGxfTUFTSyAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19IV0NEZnVsbF9NQVNLICAgICAgICAweDAwMDAwMDAxCisvKiBIQ19SRUdfSFJFcnIgICAgICAgICAgICAweDAwMGMKKyAqLworI2RlZmluZSBIQ19IQUdQQ01FcnJfTUFTSyAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEhDX0hBR1BDTUVyckNfTUFTSyAgICAgIDB4NzAwMDAwMDAKKy8qIEhDX1JFR19GSUZPc3RhdHVzICAgICAgIDB4MDAxMAorICovCisjZGVmaW5lIEhDX0hSRklGT0FUYWxsX01BU0sgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSENfSFJGSUZPQVRidXN5X01BU0sgICAgMHg0MDAwMDAwMAorI2RlZmluZSBIQ19IUkFURkdNRG9fTUFTSyAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEhDX0hSQVRGR01EaV9NQVNLICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSENfSFJBVEZSWkRfTUFTSyAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBIQ19IUkFURlJUWEFfTUFTSyAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEhDX0hSQVRGUlRYRF9NQVNLICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfSFJBVEZXWkRfTUFTSyAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19IUkFURldDRF9NQVNLICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX0hSQVRUWFRBR19NQVNLICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSFJBVFRYQ0hfTUFTSyAgICAgICAgMHgwMDAwMDAwMQorCisvKiBBR1AgQ29tbWFuZCBTZXR0aW5nCisgKi8KKyNkZWZpbmUgSENfU3ViQV9IQUdQQnN0TCAgICAgICAgMHgwMDYwCisjZGVmaW5lIEhDX1N1YkFfSEFHUEJlbmRMICAgICAgIDB4MDA2MQorI2RlZmluZSBIQ19TdWJBX0hBR1BDTU5UICAgICAgICAweDAwNjIKKyNkZWZpbmUgSENfU3ViQV9IQUdQQnBMICAgICAgICAgMHgwMDYzCisjZGVmaW5lIEhDX1N1YkFfSEFHUEJwSCAgICAgICAgIDB4MDA2NAorLyogSENfU3ViQV9IQUdQQ01OVCAgICAgICAgMHgwMDYyCisgKi8KKyNkZWZpbmUgSENfSEFHUENNTlRfTUFTSyAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBIQ19IQ21kRXJyQ2xyX01BU0sgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEhDX0hBR1BCZW5kSF9NQVNLICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSEFHUEJzdEhfTUFTSyAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IQUdQQmVuZEhfU0hJRlQgICAgICA4CisjZGVmaW5lIEhDX0hBR1BCc3RIX1NISUZUICAgICAgIDAKKy8qIEhDX1N1YkFfSEFHUEJwTCAgICAgICAgIDB4MDA2MworICovCisjZGVmaW5lIEhDX0hBR1BCcExfTUFTSyAgICAgICAgIDB4MDBmZmZmZmMKKyNkZWZpbmUgSENfSEFHUEJwSURfTUFTSyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19IQUdQQnBJRF9QQVVTRSAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hBR1BCcElEX0pVTVAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfSEFHUEJwSURfU1RPUCAgICAgICAgMHgwMDAwMDAwMgorLyogSENfU3ViQV9IQUdQQnBIICAgICAgICAgMHgwMDY0CisgKi8KKyNkZWZpbmUgSENfSEFHUEJwSF9NQVNLICAgICAgICAgMHgwMGZmZmZmZgorCisvKiBNaXNjZWxsYW5lb3VzIFNldHRpbmdzCisgKi8KKyNkZWZpbmUgSENfU3ViQV9IQ2xpcFRCICAgICAgICAgMHgwMDcwCisjZGVmaW5lIEhDX1N1YkFfSENsaXBMUiAgICAgICAgIDB4MDA3MQorI2RlZmluZSBIQ19TdWJBX0hGUENsaXBUTCAgICAgICAweDAwNzIKKyNkZWZpbmUgSENfU3ViQV9IRlBDbGlwQkwgICAgICAgMHgwMDczCisjZGVmaW5lIEhDX1N1YkFfSEZQQ2xpcExMICAgICAgIDB4MDA3NAorI2RlZmluZSBIQ19TdWJBX0hGUENsaXBSTCAgICAgICAweDAwNzUKKyNkZWZpbmUgSENfU3ViQV9IRlBDbGlwVEJIICAgICAgMHgwMDc2CisjZGVmaW5lIEhDX1N1YkFfSEZQQ2xpcExSSCAgICAgIDB4MDA3NworI2RlZmluZSBIQ19TdWJBX0hMUCAgICAgICAgICAgICAweDAwNzgKKyNkZWZpbmUgSENfU3ViQV9ITFBSRiAgICAgICAgICAgMHgwMDc5CisjZGVmaW5lIEhDX1N1YkFfSFNvbGlkQ0wgICAgICAgIDB4MDA3YQorI2RlZmluZSBIQ19TdWJBX0hQaXhHQyAgICAgICAgICAweDAwN2IKKyNkZWZpbmUgSENfU3ViQV9IU1BYWU9TICAgICAgICAgMHgwMDdjCisjZGVmaW5lIEhDX1N1YkFfSFZlcnRleENOVCAgICAgIDB4MDA3ZAorCisjZGVmaW5lIEhDX0hDbGlwVF9NQVNLICAgICAgICAgIDB4MDBmZmYwMDAKKyNkZWZpbmUgSENfSENsaXBUX1NISUZUICAgICAgICAgMTIKKyNkZWZpbmUgSENfSENsaXBCX01BU0sgICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBIQ19IQ2xpcEJfU0hJRlQgICAgICAgICAwCisjZGVmaW5lIEhDX0hDbGlwTF9NQVNLICAgICAgICAgIDB4MDBmZmYwMDAKKyNkZWZpbmUgSENfSENsaXBMX1NISUZUICAgICAgICAgMTIKKyNkZWZpbmUgSENfSENsaXBSX01BU0sgICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBIQ19IQ2xpcFJfU0hJRlQgICAgICAgICAwCisjZGVmaW5lIEhDX0hGUENsaXBCSF9NQVNLICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSEZQQ2xpcEJIX1NISUZUICAgICAgOAorI2RlZmluZSBIQ19IRlBDbGlwVEhfTUFTSyAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hGUENsaXBUSF9TSElGVCAgICAgIDAKKyNkZWZpbmUgSENfSEZQQ2xpcFJIX01BU0sgICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBIQ19IRlBDbGlwUkhfU0hJRlQgICAgICA4CisjZGVmaW5lIEhDX0hGUENsaXBMSF9NQVNLICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSEZQQ2xpcExIX1NISUZUICAgICAgMAorI2RlZmluZSBIQ19IU29saWRDSF9NQVNLICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hQaXhHQ19NQVNLICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgSENfSFNQWE9TX01BU0sgICAgICAgICAgMHgwMGZmZjAwMAorI2RlZmluZSBIQ19IU1BYT1NfU0hJRlQgICAgICAgICAxMgorI2RlZmluZSBIQ19IU1BZT1NfTUFTSyAgICAgICAgICAweDAwMDAwZmZmCisKKy8qIENvbW1hbmQKKyAqIENvbW1hbmQgQQorICovCisjZGVmaW5lIEhDX0hDbWRIZWFkZXJfTUFTSyAgICAgIDB4ZmUwMDAwMDAJLyoweGZmZTAwMDAwICovCisjZGVmaW5lIEhDX0hFM0ZpcmVfTUFTSyAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgSENfSFBNVHlwZV9NQVNLICAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBIQ19IRUZsYWdfTUFTSyAgICAgICAgICAweDAwMDBlMDAwCisjZGVmaW5lIEhDX0hTaGFkaW5nX01BU0sgICAgICAgIDB4MDAwMDFjMDAKKyNkZWZpbmUgSENfSFBNVmFsaWROX01BU0sgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBIQ19IUExFTkRfTUFTSyAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEhDX0hWQ3ljbGVfTUFTSyAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSFZDeWNsZV9TdHlsZV9NQVNLICAgMHgwMDAwMDBjMAorI2RlZmluZSBIQ19IVkN5Y2xlX0NoZ0FfTUFTSyAgICAweDAwMDAwMDMwCisjZGVmaW5lIEhDX0hWQ3ljbGVfQ2hnQl9NQVNLICAgIDB4MDAwMDAwMGMKKyNkZWZpbmUgSENfSFZDeWNsZV9DaGdDX01BU0sgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19IUE1UeXBlX1BvaW50ICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hQTVR5cGVfTGluZSAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSFBNVHlwZV9UcmkgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBIQ19IUE1UeXBlX1RyaVdGICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEhDX0hFRmxhZ19Ob0FBICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSEVGbGFnX2FiICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBIQ19IRUZsYWdfYmMgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEhDX0hFRmxhZ19jYSAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgSENfSFNoYWRpbmdfU29saWQgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IU2hhZGluZ19GbGF0QSAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEhDX0hTaGFkaW5nX0ZsYXRCICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSENfSFNoYWRpbmdfRmxhdEMgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBIQ19IU2hhZGluZ19Hb3VyYXVkICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEhDX0hWQ3ljbGVfRnVsbCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFZDeWNsZV9BRlAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBIQ19IVkN5Y2xlX09uZSAgICAgICAgICAweDAwMDAwMGMwCisjZGVmaW5lIEhDX0hWQ3ljbGVfTmV3QSAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFZDeWNsZV9BQSAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBIQ19IVkN5Y2xlX0FCICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEhDX0hWQ3ljbGVfQUMgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSENfSFZDeWNsZV9OZXdCICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVkN5Y2xlX0JBICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX0hWQ3ljbGVfQkIgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfSFZDeWNsZV9CQyAgICAgICAgICAgMHgwMDAwMDAwYworI2RlZmluZSBIQ19IVkN5Y2xlX05ld0MgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hWQ3ljbGVfQ0EgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfSFZDeWNsZV9DQiAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19IVkN5Y2xlX0NDICAgICAgICAgICAweDAwMDAwMDAzCisKKy8qIENvbW1hbmQgQgorICovCisjZGVmaW5lIEhDX0hMUHJzdF9NQVNLICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSExMYXN0UF9NQVNLICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBIQ19IVlBNU0tfTUFTSyAgICAgICAgICAweDAwMDA3ZjgwCisjZGVmaW5lIEhDX0hCRmFjZV9NQVNLICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSENfSDJuZDFWVF9NQVNLICAgICAgICAgMHgwMDAwMDAzZgorI2RlZmluZSBIQ19IVlBNU0tfWCAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEhDX0hWUE1TS19ZICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgSENfSFZQTVNLX1ogICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBIQ19IVlBNU0tfVyAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEhDX0hWUE1TS19DZCAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSENfSFZQTVNLX0NzICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBIQ19IVlBNU0tfUyAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEhDX0hWUE1TS19UICAgICAgICAgICAgIDB4MDAwMDAwODAKKworLyogRW5hYmxlIFNldHRpbmcKKyAqLworI2RlZmluZSBIQ19TdWJBX0hFbmFibGUgICAgICAgICAweDAwMDAKKyNkZWZpbmUgSENfSGVuVFhFbnZNYXBfTUFTSyAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBIQ19IZW5WZXJ0ZXhDTlRfTUFTSyAgICAweDAwMTAwMDAwCisjZGVmaW5lIEhDX0hlbkNQVURBWl9NQVNLICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgSENfSGVuREFTWldDX01BU0sgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBIQ19IZW5GQkN1bGxfTUFTSyAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEhDX0hlbkNXX01BU0sgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSGVuQUFfTUFTSyAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBIQ19IZW5TVF9NQVNLICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEhDX0hlblpUX01BU0sgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgSENfSGVuWldfTUFTSyAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBIQ19IZW5BVF9NQVNLICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEhDX0hlbkFXX01BU0sgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSENfSGVuU1BfTUFTSyAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBIQ19IZW5MUF9NQVNLICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEhDX0hlblRYQ0hfTUFTSyAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSENfSGVuVFhNUF9NQVNLICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBIQ19IZW5UWFBQX01BU0sgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEhDX0hlblRYVFJfTUFTSyAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfSGVuQ1NfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19IZW5GT0dfTUFTSyAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX0hlbkFCTF9NQVNLICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSGVuRFRfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMQorCisvKiBaIFNldHRpbmcKKyAqLworI2RlZmluZSBIQ19TdWJBX0haV0JCYXNMICAgICAgICAweDAwMTAKKyNkZWZpbmUgSENfU3ViQV9IWldCQmFzSCAgICAgICAgMHgwMDExCisjZGVmaW5lIEhDX1N1YkFfSFpXQlR5cGUgICAgICAgIDB4MDAxMgorI2RlZmluZSBIQ19TdWJBX0haQmlhc0wgICAgICAgICAweDAwMTMKKyNkZWZpbmUgSENfU3ViQV9IWldCZW5kICAgICAgICAgMHgwMDE0CisjZGVmaW5lIEhDX1N1YkFfSFpXVE1EICAgICAgICAgIDB4MDAxNQorI2RlZmluZSBIQ19TdWJBX0haV0NETCAgICAgICAgICAweDAwMTYKKyNkZWZpbmUgSENfU3ViQV9IWldDVEFHbnVtICAgICAgMHgwMDE3CisjZGVmaW5lIEhDX1N1YkFfSFpDWU51bSAgICAgICAgIDB4MDAxOAorI2RlZmluZSBIQ19TdWJBX0haV0NGaXJlICAgICAgICAweDAwMTkKKy8qIEhDX1N1YkFfSFpXQlR5cGUKKyAqLworI2RlZmluZSBIQ19IWldCVHlwZV9NQVNLICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEhDX0haQmlhc2VkV0JfTUFTSyAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgSENfSFpPTkVhc0ZGX01BU0sgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBIQ19IWk9PTkVhc0ZGX01BU0sgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEhDX0haV0JGTV9NQVNLICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSENfSFpXQkxvY19NQVNLICAgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBIQ19IWldCUGl0X01BU0sgICAgICAgICAweDAwMDAzZmZmCisjZGVmaW5lIEhDX0haV0JGTV8xNiAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFpXQkZNXzMyICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBIQ19IWldCRk1fMjQgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEhDX0haV0JMb2NfTG9jYWwgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFpXQkxvY19TeVMgICAgICAgICAgMHgwMDAwNDAwMAorLyogSENfU3ViQV9IWldCZW5kCisgKi8KKyNkZWZpbmUgSENfSFpXQmVuZF9NQVNLICAgICAgICAgMHgwMGZmZTAwMAorI2RlZmluZSBIQ19IWkJpYXNIX01BU0sgICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0haV0JlbmRfU0hJRlQgICAgICAgIDEwCisvKiBIQ19TdWJBX0haV1RNRAorICovCisjZGVmaW5lIEhDX0haV1RNRF9NQVNLICAgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgSENfSEVCRUJpYXNfTUFTSyAgICAgICAgMHgwMDAwN2YwMAorI2RlZmluZSBIQ19IWk5GX01BU0sgICAgICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0haV1RNRF9OZXZlclBhc3MgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFpXVE1EX0xUICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBIQ19IWldUTURfRVEgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEhDX0haV1RNRF9MRSAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSENfSFpXVE1EX0dUICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBIQ19IWldUTURfTkUgICAgICAgICAgICAweDAwMDUwMDAwCisjZGVmaW5lIEhDX0haV1RNRF9HRSAgICAgICAgICAgIDB4MDAwNjAwMDAKKyNkZWZpbmUgSENfSFpXVE1EX0FsbFBhc3MgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBIQ19IRUJFQmlhc19TSElGVCAgICAgICA4CisvKiBIQ19TdWJBX0haV0NETCAgICAgICAgICAweDAwMTYKKyAqLworI2RlZmluZSBIQ19IWldDRExfTUFTSyAgICAgICAgICAweDAwZmZmZmZmCisvKiBIQ19TdWJBX0haV0NUQUdudW0gICAgICAweDAwMTcKKyAqLworI2RlZmluZSBIQ19IWldDVEFHbnVtX01BU0sgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEhDX0haV0NUQUdudW1fU0hJRlQgICAgIDE2CisjZGVmaW5lIEhDX0haV0NESF9NQVNLICAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSFpXQ0RIX1NISUZUICAgICAgICAgMAorLyogSENfU3ViQV9IWkNZTnVtICAgICAgICAgMHgwMDE4CisgKi8KKyNkZWZpbmUgSENfSFpDWU51bV9NQVNLICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBIQ19IWkNZTnVtX1NISUZUICAgICAgICAxNgorI2RlZmluZSBIQ19IWldDUVdudW1fTUFTSyAgICAgICAweDAwMDAzZmZmCisjZGVmaW5lIEhDX0haV0NRV251bV9TSElGVCAgICAgIDAKKy8qIEhDX1N1YkFfSFpXQ0ZpcmUgICAgICAgIDB4MDAxOQorICovCisjZGVmaW5lIEhDX1pXQ0ZpcmVfTUFTSyAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSFpXQ1FXbnVtTGFzdF9NQVNLICAgMHgwMDAwM2ZmZgorI2RlZmluZSBIQ19IWldDUVdudW1MYXN0X1NISUZUICAwCisKKy8qIFN0ZW5jaWwgU2V0dGluZworICovCisjZGVmaW5lIEhDX1N1YkFfSFNUUkVGICAgICAgICAgIDB4MDAyMworI2RlZmluZSBIQ19TdWJBX0hTVE1EICAgICAgICAgICAweDAwMjQKKy8qIEhDX1N1YkFfSFNCRk0KKyAqLworI2RlZmluZSBIQ19IU0JGTV9NQVNLICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEhDX0hTQkxvY19NQVNLICAgICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgSENfSFNCUGl0X01BU0sgICAgICAgICAgMHgwMDAwM2ZmZgorLyogSENfU3ViQV9IU1RSRUYKKyAqLworI2RlZmluZSBIQ19IU1RSRUZfTUFTSyAgICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEhDX0hTVE9QTVNLX01BU0sgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSFNUQk1TS19NQVNLICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IU1RSRUZfU0hJRlQgICAgICAgICAxNgorI2RlZmluZSBIQ19IU1RPUE1TS19TSElGVCAgICAgICA4CisvKiBIQ19TdWJBX0hTVE1ECisgKi8KKyNkZWZpbmUgSENfSFNUTURfTUFTSyAgICAgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBIQ19IU1RPUFNGX01BU0sgICAgICAgICAweDAwMDAwMWMwCisjZGVmaW5lIEhDX0hTVE9QU1BaRl9NQVNLICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSENfSFNUT1BTUFpQX01BU0sgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBIQ19IU1RNRF9OZXZlclBhc3MgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hTVE1EX0xUICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSFNUTURfRVEgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBIQ19IU1RNRF9MRSAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEhDX0hTVE1EX0dUICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSENfSFNUTURfTkUgICAgICAgICAgICAgMHgwMDA1MDAwMAorI2RlZmluZSBIQ19IU1RNRF9HRSAgICAgICAgICAgICAweDAwMDYwMDAwCisjZGVmaW5lIEhDX0hTVE1EX0FsbFBhc3MgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgSENfSFNUT1BTRl9LRUVQICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IU1RPUFNGX1pFUk8gICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEhDX0hTVE9QU0ZfUkVQTEFDRSAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSENfSFNUT1BTRl9JTkNSU0FUICAgICAgMHgwMDAwMDBjMAorI2RlZmluZSBIQ19IU1RPUFNGX0RFQ1JTQVQgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEhDX0hTVE9QU0ZfSU5WRVJUICAgICAgIDB4MDAwMDAxNDAKKyNkZWZpbmUgSENfSFNUT1BTRl9JTkNSICAgICAgICAgMHgwMDAwMDE4MAorI2RlZmluZSBIQ19IU1RPUFNGX0RFQ1IgICAgICAgICAweDAwMDAwMWMwCisjZGVmaW5lIEhDX0hTVE9QU1BaRl9LRUVQICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFNUT1BTUFpGX1pFUk8gICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19IU1RPUFNQWkZfUkVQTEFDRSAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX0hTVE9QU1BaRl9JTkNSU0FUICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSENfSFNUT1BTUFpGX0RFQ1JTQVQgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19IU1RPUFNQWkZfSU5WRVJUICAgICAweDAwMDAwMDI4CisjZGVmaW5lIEhDX0hTVE9QU1BaRl9JTkNSICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSENfSFNUT1BTUFpGX0RFQ1IgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBIQ19IU1RPUFNQWlBfS0VFUCAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hTVE9QU1BaUF9aRVJPICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfSFNUT1BTUFpQX1JFUExBQ0UgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19IU1RPUFNQWlBfSU5DUlNBVCAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX0hTVE9QU1BaUF9ERUNSU0FUICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSENfSFNUT1BTUFpQX0lOVkVSVCAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBIQ19IU1RPUFNQWlBfSU5DUiAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEhDX0hTVE9QU1BaUF9ERUNSICAgICAgIDB4MDAwMDAwMDcKKworLyogQWxwaGEgU2V0dGluZworICovCisjZGVmaW5lIEhDX1N1YkFfSEFCQmFzTCAgICAgICAgIDB4MDAzMAorI2RlZmluZSBIQ19TdWJBX0hBQkJhc0ggICAgICAgICAweDAwMzEKKyNkZWZpbmUgSENfU3ViQV9IQUJGTSAgICAgICAgICAgMHgwMDMyCisjZGVmaW5lIEhDX1N1YkFfSEFUTUQgICAgICAgICAgIDB4MDAzMworI2RlZmluZSBIQ19TdWJBX0hBQkxDc2F0ICAgICAgICAweDAwMzQKKyNkZWZpbmUgSENfU3ViQV9IQUJMQ29wICAgICAgICAgMHgwMDM1CisjZGVmaW5lIEhDX1N1YkFfSEFCTEFzYXQgICAgICAgIDB4MDAzNgorI2RlZmluZSBIQ19TdWJBX0hBQkxBb3AgICAgICAgICAweDAwMzcKKyNkZWZpbmUgSENfU3ViQV9IQUJMUkNhICAgICAgICAgMHgwMDM4CisjZGVmaW5lIEhDX1N1YkFfSEFCTFJGQ2EgICAgICAgIDB4MDAzOQorI2RlZmluZSBIQ19TdWJBX0hBQkxSQ2JpYXMgICAgICAweDAwM2EKKyNkZWZpbmUgSENfU3ViQV9IQUJMUkNiICAgICAgICAgMHgwMDNiCisjZGVmaW5lIEhDX1N1YkFfSEFCTFJGQ2IgICAgICAgIDB4MDAzYworI2RlZmluZSBIQ19TdWJBX0hBQkxSQWEgICAgICAgICAweDAwM2QKKyNkZWZpbmUgSENfU3ViQV9IQUJMUkFiICAgICAgICAgMHgwMDNlCisvKiBIQ19TdWJBX0hBQkZNCisgKi8KKyNkZWZpbmUgSENfSEFCRk1fTUFTSyAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBIQ19IQUJMb2NfTUFTSyAgICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIEhDX0hBQlBpdF9NQVNLICAgICAgICAgIDB4MDAwMDA3ZmYKKy8qIEhDX1N1YkFfSEFUTUQKKyAqLworI2RlZmluZSBIQ19IQVRNRF9NQVNLICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEhDX0hBVFJFRl9NQVNLICAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSEFUTURfTmV2ZXJQYXNzICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IQVRNRF9MVCAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEhDX0hBVE1EX0VRICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSENfSEFUTURfTEUgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBIQ19IQVRNRF9HVCAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEhDX0hBVE1EX05FICAgICAgICAgICAgIDB4MDAwMDA1MDAKKyNkZWZpbmUgSENfSEFUTURfR0UgICAgICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBIQ19IQVRNRF9BbGxQYXNzICAgICAgICAweDAwMDAwNzAwCisvKiBIQ19TdWJBX0hBQkxDc2F0CisgKi8KKyNkZWZpbmUgSENfSEFCTENzYXRfTUFTSyAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBIQ19IQUJMQ2FfTUFTSyAgICAgICAgICAweDAwMDBmYzAwCisjZGVmaW5lIEhDX0hBQkxDYV9DX01BU0sgICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgSENfSEFCTENhX09QQ19NQVNLICAgICAgMHgwMDAwM2MwMAorI2RlZmluZSBIQ19IQUJMRkNhX01BU0sgICAgICAgICAweDAwMDAwM2YwCisjZGVmaW5lIEhDX0hBQkxGQ2FfQ19NQVNLICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSENfSEFCTEZDYV9PUENfTUFTSyAgICAgMHgwMDAwMDBmMAorI2RlZmluZSBIQ19IQUJMQ2JpYXNfTUFTSyAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lIEhDX0hBQkxDYmlhc19DX01BU0sgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfSEFCTENiaWFzX09QQ19NQVNLICAgMHgwMDAwMDAwNworLyotLSBEZWZpbmUgdGhlIGlucHV0IGNvbG9yLgorICovCisjZGVmaW5lIEhDX1hDX0NzcmMgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfWENfQ2RzdCAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIQ19YQ19Bc3JjICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX1hDX0Fkc3QgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSENfWENfRm9nICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBIQ19YQ19IQUJMUkMgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIEhDX1hDX21pblNyY0RzdCAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgSENfWENfbWF4U3JjRHN0ICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBIQ19YQ19taW1Bc3JjSW52QWRzdCAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX1hDX09QQyAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfWENfSW52T1BDICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBIQ19YQ19PUENwNSAgICAgICAgICAgICAweDAwMDAwMDIwCisvKi0tIERlZmluZSB0aGUgaW5wdXQgQWxwaGEKKyAqLworI2RlZmluZSBIQ19YQV9PUEEgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1hBX0ludk9QQSAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfWEFfT1BBcDUgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19YQV8wICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1hBX0FzcmMgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfWEFfQWRzdCAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19YQV9Gb2cgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX1hBX21pbkFzcmNGb2cgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSENfWEFfbWluQXNyY0Fkc3QgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBIQ19YQV9tYXhBc3JjRm9nICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEhDX1hBX21heEFzcmNBZHN0ICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSENfWEFfSEFCTFJBICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19YQV9taW5Bc3JjSW52QWRzdCAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX1hBX0hBQkxGUkEgICAgICAgICAgIDB4MDAwMDAwMDkKKy8qLS0KKyAqLworI2RlZmluZSBIQ19IQUJMQ2FfT1BDICAgICAgICAgICAoSENfWENfT1BDIDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQ2FfSW52T1BDICAgICAgICAoSENfWENfSW52T1BDIDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQ2FfT1BDcDUgICAgICAgICAoSENfWENfT1BDcDUgPDwgMTApCisjZGVmaW5lIEhDX0hBQkxDYV9Dc3JjICAgICAgICAgIChIQ19YQ19Dc3JjIDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQ2FfQ2RzdCAgICAgICAgICAoSENfWENfQ2RzdCA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTENhX0FzcmMgICAgICAgICAgKEhDX1hDX0FzcmMgPDwgMTApCisjZGVmaW5lIEhDX0hBQkxDYV9BZHN0ICAgICAgICAgIChIQ19YQ19BZHN0IDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQ2FfRm9nICAgICAgICAgICAoSENfWENfRm9nIDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQ2FfSEFCTFJDYSAgICAgICAoSENfWENfSEFCTFJDIDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQ2FfbWluU3JjRHN0ICAgICAoSENfWENfbWluU3JjRHN0IDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQ2FfbWF4U3JjRHN0ICAgICAoSENfWENfbWF4U3JjRHN0IDw8IDEwKQorI2RlZmluZSBIQ19IQUJMRkNhX09QQyAgICAgICAgICAgICAgKEhDX1hDX09QQyA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX0ludk9QQyAgICAgICAgICAgKEhDX1hDX0ludk9QQyA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX09QQ3A1ICAgICAgICAgICAgKEhDX1hDX09QQ3A1IDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQ2FfQ3NyYyAgICAgICAgICAgICAoSENfWENfQ3NyYyA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX0Nkc3QgICAgICAgICAgICAgKEhDX1hDX0Nkc3QgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZDYV9Bc3JjICAgICAgICAgICAgIChIQ19YQ19Bc3JjIDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQ2FfQWRzdCAgICAgICAgICAgICAoSENfWENfQWRzdCA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX0ZvZyAgICAgICAgICAgICAgKEhDX1hDX0ZvZyA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX0hBQkxSQ2EgICAgICAgICAgKEhDX1hDX0hBQkxSQyA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX21pblNyY0RzdCAgICAgICAgKEhDX1hDX21pblNyY0RzdCA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX21heFNyY0RzdCAgICAgICAgKEhDX1hDX21heFNyY0RzdCA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX21pbUFzcmNJbnZBZHN0ICAgKEhDX1hDX21pbUFzcmNJbnZBZHN0IDw8IDQpCisjZGVmaW5lIEhDX0hBQkxDYmlhc19IQUJMUkNiaWFzIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSEFCTENiaWFzX0FzcmMgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIQ19IQUJMQ2JpYXNfQWRzdCAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX0hBQkxDYmlhc19Gb2cgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSENfSEFCTENiaWFzX0NpbiAgICAgICAgMHgwMDAwMDAwNAorLyogSENfU3ViQV9IQUJMQ29wICAgICAgICAgMHgwMDM1CisgKi8KKyNkZWZpbmUgSENfSEFCTGRvdF9NQVNLICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBIQ19IQUJMQ29wX01BU0sgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEhDX0hBQkxDYl9NQVNLICAgICAgICAgIDB4MDAwMDNmMDAKKyNkZWZpbmUgSENfSEFCTENiX0NfTUFTSyAgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBIQ19IQUJMQ2JfT1BDX01BU0sgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEhDX0hBQkxGQ2JfTUFTSyAgICAgICAgIDB4MDAwMDAwZmMKKyNkZWZpbmUgSENfSEFCTEZDYl9DX01BU0sgICAgICAgMHgwMDAwMDBjMAorI2RlZmluZSBIQ19IQUJMRkNiX09QQ19NQVNLICAgICAweDAwMDAwMDNjCisjZGVmaW5lIEhDX0hBQkxDc2hpZnRfTUFTSyAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSENfSEFCTENiX09QQyAgICAgICAgICAgKEhDX1hDX09QQyA8PCA4KQorI2RlZmluZSBIQ19IQUJMQ2JfSW52T1BDICAgICAgICAoSENfWENfSW52T1BDIDw8IDgpCisjZGVmaW5lIEhDX0hBQkxDYl9PUENwNSAgICAgICAgIChIQ19YQ19PUENwNSA8PCA4KQorI2RlZmluZSBIQ19IQUJMQ2JfQ3NyYyAgICAgICAgICAoSENfWENfQ3NyYyA8PCA4KQorI2RlZmluZSBIQ19IQUJMQ2JfQ2RzdCAgICAgICAgICAoSENfWENfQ2RzdCA8PCA4KQorI2RlZmluZSBIQ19IQUJMQ2JfQXNyYyAgICAgICAgICAoSENfWENfQXNyYyA8PCA4KQorI2RlZmluZSBIQ19IQUJMQ2JfQWRzdCAgICAgICAgICAoSENfWENfQWRzdCA8PCA4KQorI2RlZmluZSBIQ19IQUJMQ2JfRm9nICAgICAgICAgICAoSENfWENfRm9nIDw8IDgpCisjZGVmaW5lIEhDX0hBQkxDYl9IQUJMUkNhICAgICAgIChIQ19YQ19IQUJMUkMgPDwgOCkKKyNkZWZpbmUgSENfSEFCTENiX21pblNyY0RzdCAgICAgKEhDX1hDX21pblNyY0RzdCA8PCA4KQorI2RlZmluZSBIQ19IQUJMQ2JfbWF4U3JjRHN0ICAgICAoSENfWENfbWF4U3JjRHN0IDw8IDgpCisjZGVmaW5lIEhDX0hBQkxGQ2JfT1BDICAgICAgICAgICAgICAoSENfWENfT1BDIDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfSW52T1BDICAgICAgICAgICAoSENfWENfSW52T1BDIDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfT1BDcDUgICAgICAgICAgICAoSENfWENfT1BDcDUgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZDYl9Dc3JjICAgICAgICAgICAgIChIQ19YQ19Dc3JjIDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfQ2RzdCAgICAgICAgICAgICAoSENfWENfQ2RzdCA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkNiX0FzcmMgICAgICAgICAgICAgKEhDX1hDX0FzcmMgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZDYl9BZHN0ICAgICAgICAgICAgIChIQ19YQ19BZHN0IDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfRm9nICAgICAgICAgICAgICAoSENfWENfRm9nIDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfSEFCTFJDYiAgICAgICAgICAoSENfWENfSEFCTFJDIDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfbWluU3JjRHN0ICAgICAgICAoSENfWENfbWluU3JjRHN0IDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfbWF4U3JjRHN0ICAgICAgICAoSENfWENfbWF4U3JjRHN0IDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfbWltQXNyY0ludkFkc3QgICAoSENfWENfbWltQXNyY0ludkFkc3QgPDwgMikKKy8qIEhDX1N1YkFfSEFCTEFzYXQgICAgICAgIDB4MDAzNgorICovCisjZGVmaW5lIEhDX0hBQkxBc2F0X01BU0sgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSEFCTEFhX01BU0sgICAgICAgICAgMHgwMDAwZmMwMAorI2RlZmluZSBIQ19IQUJMQWFfQV9NQVNLICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIEhDX0hBQkxBYV9PUEFfTUFTSyAgICAgIDB4MDAwMDNjMDAKKyNkZWZpbmUgSENfSEFCTEZBYV9NQVNLICAgICAgICAgMHgwMDAwMDNmMAorI2RlZmluZSBIQ19IQUJMRkFhX0FfTUFTSyAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEhDX0hBQkxGQWFfT1BBX01BU0sgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgSENfSEFCTEFiaWFzX01BU0sgICAgICAgMHgwMDAwMDAwZgorI2RlZmluZSBIQ19IQUJMQWJpYXNfQV9NQVNLICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX0hBQkxBYmlhc19PUEFfTUFTSyAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSENfSEFCTEFhX09QQSAgICAgICAgICAgKEhDX1hBX09QQSA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhX0ludk9QQSAgICAgICAgKEhDX1hBX0ludk9QQSA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhX09QQXA1ICAgICAgICAgKEhDX1hBX09QQXA1IDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQWFfMCAgICAgICAgICAgICAoSENfWEFfMCA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhX0FzcmMgICAgICAgICAgKEhDX1hBX0FzcmMgPDwgMTApCisjZGVmaW5lIEhDX0hBQkxBYV9BZHN0ICAgICAgICAgIChIQ19YQV9BZHN0IDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQWFfRm9nICAgICAgICAgICAoSENfWEFfRm9nIDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQWFfbWluQXNyY0ZvZyAgICAoSENfWEFfbWluQXNyY0ZvZyA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhX21pbkFzcmNBZHN0ICAgKEhDX1hBX21pbkFzcmNBZHN0IDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQWFfbWF4QXNyY0ZvZyAgICAoSENfWEFfbWF4QXNyY0ZvZyA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhX21heEFzcmNBZHN0ICAgKEhDX1hBX21heEFzcmNBZHN0IDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQWFfSEFCTFJBICAgICAgICAoSENfWEFfSEFCTFJBIDw8IDEwKQorI2RlZmluZSBIQ19IQUJMRkFhX09QQSAgICAgICAgICAoSENfWEFfT1BBIDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfSW52T1BBICAgICAgIChIQ19YQV9JbnZPUEEgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZBYV9PUEFwNSAgICAgICAgKEhDX1hBX09QQXA1IDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfMCAgICAgICAgICAgIChIQ19YQV8wIDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfQXNyYyAgICAgICAgIChIQ19YQV9Bc3JjIDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfQWRzdCAgICAgICAgIChIQ19YQV9BZHN0IDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfRm9nICAgICAgICAgIChIQ19YQV9Gb2cgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZBYV9taW5Bc3JjRm9nICAgKEhDX1hBX21pbkFzcmNGb2cgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZBYV9taW5Bc3JjQWRzdCAgKEhDX1hBX21pbkFzcmNBZHN0IDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfbWF4QXNyY0ZvZyAgIChIQ19YQV9tYXhBc3JjRm9nIDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfbWF4QXNyY0Fkc3QgIChIQ19YQV9tYXhBc3JjQWRzdCA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkFhX21pbkFzcmNJbnZBZHN0ICAgKEhDX1hBX21pbkFzcmNJbnZBZHN0IDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfSEFCTEZSQSAgICAgICAgICAoSENfWEFfSEFCTEZSQSA8PCA0KQorI2RlZmluZSBIQ19IQUJMQWJpYXNfSEFCTFJBYmlhcyAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hBQkxBYmlhc19Bc3JjICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfSEFCTEFiaWFzX0Fkc3QgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19IQUJMQWJpYXNfRm9nICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX0hBQkxBYmlhc19BYWEgICAgICAgIDB4MDAwMDAwMDQKKy8qIEhDX1N1YkFfSEFCTEFvcCAgICAgICAgIDB4MDAzNworICovCisjZGVmaW5lIEhDX0hBQkxBb3BfTUFTSyAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSENfSEFCTEFiX01BU0sgICAgICAgICAgMHgwMDAwM2YwMAorI2RlZmluZSBIQ19IQUJMQWJfT1BBX01BU0sgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEhDX0hBQkxGQWJfTUFTSyAgICAgICAgIDB4MDAwMDAwZmMKKyNkZWZpbmUgSENfSEFCTEZBYl9PUEFfTUFTSyAgICAgMHgwMDAwMDAzYworI2RlZmluZSBIQ19IQUJMQXNoaWZ0X01BU0sgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX0hBQkxBYl9PUEEgICAgICAgICAgIChIQ19YQV9PUEEgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiX0ludk9QQSAgICAgICAgKEhDX1hBX0ludk9QQSA8PCA4KQorI2RlZmluZSBIQ19IQUJMQWJfT1BBcDUgICAgICAgICAoSENfWEFfT1BBcDUgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiXzAgICAgICAgICAgICAgKEhDX1hBXzAgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiX0FzcmMgICAgICAgICAgKEhDX1hBX0FzcmMgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiX0Fkc3QgICAgICAgICAgKEhDX1hBX0Fkc3QgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiX0ZvZyAgICAgICAgICAgKEhDX1hBX0ZvZyA8PCA4KQorI2RlZmluZSBIQ19IQUJMQWJfbWluQXNyY0ZvZyAgICAoSENfWEFfbWluQXNyY0ZvZyA8PCA4KQorI2RlZmluZSBIQ19IQUJMQWJfbWluQXNyY0Fkc3QgICAoSENfWEFfbWluQXNyY0Fkc3QgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiX21heEFzcmNGb2cgICAgKEhDX1hBX21heEFzcmNGb2cgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiX21heEFzcmNBZHN0ICAgKEhDX1hBX21heEFzcmNBZHN0IDw8IDgpCisjZGVmaW5lIEhDX0hBQkxBYl9IQUJMUkEgICAgICAgIChIQ19YQV9IQUJMUkEgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEZBYl9PUEEgICAgICAgICAgKEhDX1hBX09QQSA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX0ludk9QQSAgICAgICAoSENfWEFfSW52T1BBIDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQWJfT1BBcDUgICAgICAgIChIQ19YQV9PUEFwNSA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiXzAgICAgICAgICAgICAoSENfWEFfMCA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX0FzcmMgICAgICAgICAoSENfWEFfQXNyYyA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX0Fkc3QgICAgICAgICAoSENfWEFfQWRzdCA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX0ZvZyAgICAgICAgICAoSENfWEFfRm9nIDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQWJfbWluQXNyY0ZvZyAgIChIQ19YQV9taW5Bc3JjRm9nIDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQWJfbWluQXNyY0Fkc3QgIChIQ19YQV9taW5Bc3JjQWRzdCA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX21heEFzcmNGb2cgICAoSENfWEFfbWF4QXNyY0ZvZyA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX21heEFzcmNBZHN0ICAoSENfWEFfbWF4QXNyY0Fkc3QgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZBYl9taW5Bc3JjSW52QWRzdCAgIChIQ19YQV9taW5Bc3JjSW52QWRzdCA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX0hBQkxGUkEgICAgICAgICAgKEhDX1hBX0hBQkxGUkEgPDwgMikKKy8qIEhDX1N1YkFfSEFCTFJBYSAgICAgICAgIDB4MDAzZAorICovCisjZGVmaW5lIEhDX0hBQkxSQWFfTUFTSyAgICAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgSENfSEFCTFJGQWFfTUFTSyAgICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBIQ19IQUJMUkFiaWFzX01BU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hBQkxSQWFfU0hJRlQgICAgICAgIDE2CisjZGVmaW5lIEhDX0hBQkxSRkFhX1NISUZUICAgICAgIDgKKy8qIEhDX1N1YkFfSEFCTFJBYiAgICAgICAgIDB4MDAzZQorICovCisjZGVmaW5lIEhDX0hBQkxSQWJfTUFTSyAgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSEFCTFJGQWJfTUFTSyAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IQUJMUkFiX1NISUZUICAgICAgICA4CisKKy8qIERlc3RpbmF0aW9uIFNldHRpbmcKKyAqLworI2RlZmluZSBIQ19TdWJBX0hEQkJhc0wgICAgICAgICAweDAwNDAKKyNkZWZpbmUgSENfU3ViQV9IREJCYXNIICAgICAgICAgMHgwMDQxCisjZGVmaW5lIEhDX1N1YkFfSERCRk0gICAgICAgICAgIDB4MDA0MgorI2RlZmluZSBIQ19TdWJBX0hGQkJNU0tMICAgICAgICAweDAwNDMKKyNkZWZpbmUgSENfU3ViQV9IUk9QICAgICAgICAgICAgMHgwMDQ0CisvKiBIQ19TdWJBX0hEQkZNICAgICAgICAgICAweDAwNDIKKyAqLworI2RlZmluZSBIQ19IREJGTV9NQVNLICAgICAgICAgICAweDAwMWYwMDAwCisjZGVmaW5lIEhDX0hEQkxvY19NQVNLICAgICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgSENfSERCUGl0X01BU0sgICAgICAgICAgMHgwMDAwM2ZmZgorI2RlZmluZSBIQ19IREJGTV9SR0I1NTUgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hEQkZNX1JHQjU2NSAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSERCRk1fQVJHQjQ0NDQgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBIQ19IREJGTV9BUkdCMTU1NSAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEhDX0hEQkZNX0JHUjU1NSAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSENfSERCRk1fQkdSNTY1ICAgICAgICAgMHgwMDA1MDAwMAorI2RlZmluZSBIQ19IREJGTV9BQkdSNDQ0NCAgICAgICAweDAwMDYwMDAwCisjZGVmaW5lIEhDX0hEQkZNX0FCR1IxNTU1ICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgSENfSERCRk1fQVJHQjA4ODggICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBIQ19IREJGTV9BUkdCODg4OCAgICAgICAweDAwMDkwMDAwCisjZGVmaW5lIEhDX0hEQkZNX0FCR1IwODg4ICAgICAgIDB4MDAwYTAwMDAKKyNkZWZpbmUgSENfSERCRk1fQUJHUjg4ODggICAgICAgMHgwMDBiMDAwMAorI2RlZmluZSBIQ19IREJMb2NfTG9jYWwgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hEQkxvY19TeXMgICAgICAgICAgIDB4MDAwMDQwMDAKKy8qIEhDX1N1YkFfSFJPUCAgICAgICAgICAgIDB4MDA0NAorICovCisjZGVmaW5lIEhDX0hST1BfTUFTSyAgICAgICAgICAgIDB4MDAwMDBmMDAKKyNkZWZpbmUgSENfSEZCQk1TS0hfTUFTSyAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IUk9QX0JMQUNLICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hST1BfRFBvbiAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSENfSFJPUF9EUG5hICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBIQ19IUk9QX1BuICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEhDX0hST1BfUERuYSAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSENfSFJPUF9EbiAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBIQ19IUk9QX0RQeCAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIEhDX0hST1BfRFBhbiAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgSENfSFJPUF9EUGEgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBIQ19IUk9QX0RQeG4gICAgICAgICAgICAweDAwMDAwOTAwCisjZGVmaW5lIEhDX0hST1BfRCAgICAgICAgICAgICAgIDB4MDAwMDBhMDAKKyNkZWZpbmUgSENfSFJPUF9EUG5vICAgICAgICAgICAgMHgwMDAwMGIwMAorI2RlZmluZSBIQ19IUk9QX1AgICAgICAgICAgICAgICAweDAwMDAwYzAwCisjZGVmaW5lIEhDX0hST1BfUERubyAgICAgICAgICAgIDB4MDAwMDBkMDAKKyNkZWZpbmUgSENfSFJPUF9EUG8gICAgICAgICAgICAgMHgwMDAwMGUwMAorI2RlZmluZSBIQ19IUk9QX1dISVRFICAgICAgICAgICAweDAwMDAwZjAwCisKKy8qIEZvZyBTZXR0aW5nCisgKi8KKyNkZWZpbmUgSENfU3ViQV9IRm9nTEYgICAgICAgICAgMHgwMDUwCisjZGVmaW5lIEhDX1N1YkFfSEZvZ0NMICAgICAgICAgIDB4MDA1MQorI2RlZmluZSBIQ19TdWJBX0hGb2dDSCAgICAgICAgICAweDAwNTIKKyNkZWZpbmUgSENfU3ViQV9IRm9nU3RMICAgICAgICAgMHgwMDUzCisjZGVmaW5lIEhDX1N1YkFfSEZvZ1N0SCAgICAgICAgIDB4MDA1NAorI2RlZmluZSBIQ19TdWJBX0hGb2dPT2RNRiAgICAgICAweDAwNTUKKyNkZWZpbmUgSENfU3ViQV9IRm9nT09kRUYgICAgICAgMHgwMDU2CisjZGVmaW5lIEhDX1N1YkFfSEZvZ0VuZEwgICAgICAgIDB4MDA1NworI2RlZmluZSBIQ19TdWJBX0hGb2dEZW5zdCAgICAgICAweDAwNTgKKy8qIEhDX1N1YkFfRm9nTEYgICAgICAgICAgIDB4MDA1MAorICovCisjZGVmaW5lIEhDX0ZvZ0xGX01BU0sgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfRm9nRXFfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19Gb2dNRF9NQVNLICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEhDX0ZvZ01EX0xvY2FsRm9nICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0ZvZ01EX0xpbmVhckZvZyAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX0ZvZ01EX0V4cG9uZW50aWFsRm9nICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX0ZvZ01EX0V4cG9uZW50aWFsMkZvZyAweDAwMDAwMDA1CisvKiAjZGVmaW5lIEhDX0ZvZ01EX0ZvZ1RhYmxlICAgICAgIDB4MDAwMDAwMDMgKi8KKworLyogSENfU3ViQV9IRm9nRGVuc3QgICAgICAgIDB4MDA1OAorICovCisjZGVmaW5lIEhDX0ZvZ0RlbnN0X01BU0sgICAgICAgIDB4MDAxZmZmMDAKKyNkZWZpbmUgSENfRm9nRW5kTF9NQVNLICAgICAgICAgMHgwMDAwMDBmZgorCisvKiBUZXh0dXJlIHN1YnR5cGUgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBIQ19TdWJUeXBlX1RleDAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1N1YlR5cGVfVGV4MSAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfU3ViVHlwZV9UZXhHZW5lcmFsICAgMHgwMDAwMDBmZQorCisvKiBBdHRyaWJ1dGUgb2YgdGV4dHVyZSBuCisgKi8KKyNkZWZpbmUgSENfU3ViQV9IVFhuTDBCYXNMICAgICAgMHgwMDAwCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwxQmFzTCAgICAgIDB4MDAwMQorI2RlZmluZSBIQ19TdWJBX0hUWG5MMkJhc0wgICAgICAweDAwMDIKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDNCYXNMICAgICAgMHgwMDAzCisjZGVmaW5lIEhDX1N1YkFfSFRYbkw0QmFzTCAgICAgIDB4MDAwNAorI2RlZmluZSBIQ19TdWJBX0hUWG5MNUJhc0wgICAgICAweDAwMDUKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDZCYXNMICAgICAgMHgwMDA2CisjZGVmaW5lIEhDX1N1YkFfSFRYbkw3QmFzTCAgICAgIDB4MDAwNworI2RlZmluZSBIQ19TdWJBX0hUWG5MOEJhc0wgICAgICAweDAwMDgKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDlCYXNMICAgICAgMHgwMDA5CisjZGVmaW5lIEhDX1N1YkFfSFRYbkxhQmFzTCAgICAgIDB4MDAwYQorI2RlZmluZSBIQ19TdWJBX0hUWG5MYkJhc0wgICAgICAweDAwMGIKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGNCYXNMICAgICAgMHgwMDBjCisjZGVmaW5lIEhDX1N1YkFfSFRYbkxkQmFzTCAgICAgIDB4MDAwZAorI2RlZmluZSBIQ19TdWJBX0hUWG5MZUJhc0wgICAgICAweDAwMGUKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGZCYXNMICAgICAgMHgwMDBmCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwxMEJhc0wgICAgIDB4MDAxMAorI2RlZmluZSBIQ19TdWJBX0hUWG5MMTFCYXNMICAgICAweDAwMTEKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDAxMkJhc0ggICAgMHgwMDIwCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwzNDVCYXNIICAgIDB4MDAyMQorI2RlZmluZSBIQ19TdWJBX0hUWG5MNjc4QmFzSCAgICAweDAwMjIKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDlhYkJhc0ggICAgMHgwMDIzCisjZGVmaW5lIEhDX1N1YkFfSFRYbkxjZGVCYXNIICAgIDB4MDAyNAorI2RlZmluZSBIQ19TdWJBX0hUWG5MZjEwMTFCYXNIICAweDAwMjUKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDBQaXQgICAgICAgMHgwMDJiCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwxUGl0ICAgICAgIDB4MDAyYworI2RlZmluZSBIQ19TdWJBX0hUWG5MMlBpdCAgICAgICAweDAwMmQKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDNQaXQgICAgICAgMHgwMDJlCisjZGVmaW5lIEhDX1N1YkFfSFRYbkw0UGl0ICAgICAgIDB4MDAyZgorI2RlZmluZSBIQ19TdWJBX0hUWG5MNVBpdCAgICAgICAweDAwMzAKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDZQaXQgICAgICAgMHgwMDMxCisjZGVmaW5lIEhDX1N1YkFfSFRYbkw3UGl0ICAgICAgIDB4MDAzMgorI2RlZmluZSBIQ19TdWJBX0hUWG5MOFBpdCAgICAgICAweDAwMzMKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDlQaXQgICAgICAgMHgwMDM0CisjZGVmaW5lIEhDX1N1YkFfSFRYbkxhUGl0ICAgICAgIDB4MDAzNQorI2RlZmluZSBIQ19TdWJBX0hUWG5MYlBpdCAgICAgICAweDAwMzYKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGNQaXQgICAgICAgMHgwMDM3CisjZGVmaW5lIEhDX1N1YkFfSFRYbkxkUGl0ICAgICAgIDB4MDAzOAorI2RlZmluZSBIQ19TdWJBX0hUWG5MZVBpdCAgICAgICAweDAwMzkKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGZQaXQgICAgICAgMHgwMDNhCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwxMFBpdCAgICAgIDB4MDAzYgorI2RlZmluZSBIQ19TdWJBX0hUWG5MMTFQaXQgICAgICAweDAwM2MKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDBfNVdFICAgICAgMHgwMDRiCisjZGVmaW5lIEhDX1N1YkFfSFRYbkw2X2JXRSAgICAgIDB4MDA0YworI2RlZmluZSBIQ19TdWJBX0hUWG5MY18xMVdFICAgICAweDAwNGQKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDBfNUhFICAgICAgMHgwMDUxCisjZGVmaW5lIEhDX1N1YkFfSFRYbkw2X2JIRSAgICAgIDB4MDA1MgorI2RlZmluZSBIQ19TdWJBX0hUWG5MY18xMUhFICAgICAweDAwNTMKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDBPUyAgICAgICAgMHgwMDc3CisjZGVmaW5lIEhDX1N1YkFfSFRYblRCICAgICAgICAgIDB4MDA3OAorI2RlZmluZSBIQ19TdWJBX0hUWG5NUE1EICAgICAgICAweDAwNzkKKyNkZWZpbmUgSENfU3ViQV9IVFhuQ0xPRHUgICAgICAgMHgwMDdhCisjZGVmaW5lIEhDX1N1YkFfSFRYbkZNICAgICAgICAgIDB4MDA3YgorI2RlZmluZSBIQ19TdWJBX0hUWG5UUkNIICAgICAgICAweDAwN2MKKyNkZWZpbmUgSENfU3ViQV9IVFhuVFJDTCAgICAgICAgMHgwMDdkCisjZGVmaW5lIEhDX1N1YkFfSFRYblRCQyAgICAgICAgIDB4MDA3ZQorI2RlZmluZSBIQ19TdWJBX0hUWG5UUkFIICAgICAgICAweDAwN2YKKyNkZWZpbmUgSENfU3ViQV9IVFhuVEJMQ3NhdCAgICAgMHgwMDgwCisjZGVmaW5lIEhDX1N1YkFfSFRYblRCTENvcCAgICAgIDB4MDA4MQorI2RlZmluZSBIQ19TdWJBX0hUWG5UQkxNUGZvZyAgICAweDAwODIKKyNkZWZpbmUgSENfU3ViQV9IVFhuVEJMQXNhdCAgICAgMHgwMDgzCisjZGVmaW5lIEhDX1N1YkFfSFRYblRCTFJDYSAgICAgIDB4MDA4NQorI2RlZmluZSBIQ19TdWJBX0hUWG5UQkxSQ2IgICAgICAweDAwODYKKyNkZWZpbmUgSENfU3ViQV9IVFhuVEJMUkNjICAgICAgMHgwMDg3CisjZGVmaW5lIEhDX1N1YkFfSFRYblRCTFJDYmlhcyAgIDB4MDA4OAorI2RlZmluZSBIQ19TdWJBX0hUWG5UQkxSQWEgICAgICAweDAwODkKKyNkZWZpbmUgSENfU3ViQV9IVFhuVEJMUkZvZyAgICAgMHgwMDhhCisjZGVmaW5lIEhDX1N1YkFfSFRYbkJ1bXBNMDAgICAgIDB4MDA5MAorI2RlZmluZSBIQ19TdWJBX0hUWG5CdW1wTTAxICAgICAweDAwOTEKKyNkZWZpbmUgSENfU3ViQV9IVFhuQnVtcE0xMCAgICAgMHgwMDkyCisjZGVmaW5lIEhDX1N1YkFfSFRYbkJ1bXBNMTEgICAgIDB4MDA5MworI2RlZmluZSBIQ19TdWJBX0hUWG5MU2NhbGUgICAgICAweDAwOTQKKyNkZWZpbmUgSENfU3ViQV9IVFhTTUQgICAgICAgICAgMHgwMDAwCisvKiBIQ19TdWJBX0hUWG5MMDEyQmFzSCAgICAweDAwMjAKKyAqLworI2RlZmluZSBIQ19IVFhuTDBCYXNIX01BU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hUWG5MMUJhc0hfTUFTSyAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSFRYbkwyQmFzSF9NQVNLICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFhuTDFCYXNIX1NISUZUICAgICA4CisjZGVmaW5lIEhDX0hUWG5MMkJhc0hfU0hJRlQgICAgIDE2CisvKiBIQ19TdWJBX0hUWG5MMzQ1QmFzSCAgICAweDAwMjEKKyAqLworI2RlZmluZSBIQ19IVFhuTDNCYXNIX01BU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hUWG5MNEJhc0hfTUFTSyAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSFRYbkw1QmFzSF9NQVNLICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFhuTDRCYXNIX1NISUZUICAgICA4CisjZGVmaW5lIEhDX0hUWG5MNUJhc0hfU0hJRlQgICAgIDE2CisvKiBIQ19TdWJBX0hUWG5MNjc4QmFzSCAgICAweDAwMjIKKyAqLworI2RlZmluZSBIQ19IVFhuTDZCYXNIX01BU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hUWG5MN0Jhc0hfTUFTSyAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSFRYbkw4QmFzSF9NQVNLICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFhuTDdCYXNIX1NISUZUICAgICA4CisjZGVmaW5lIEhDX0hUWG5MOEJhc0hfU0hJRlQgICAgIDE2CisvKiBIQ19TdWJBX0hUWG5MOWFiQmFzSCAgICAweDAwMjMKKyAqLworI2RlZmluZSBIQ19IVFhuTDlCYXNIX01BU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hUWG5MYUJhc0hfTUFTSyAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSFRYbkxiQmFzSF9NQVNLICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFhuTGFCYXNIX1NISUZUICAgICA4CisjZGVmaW5lIEhDX0hUWG5MYkJhc0hfU0hJRlQgICAgIDE2CisvKiBIQ19TdWJBX0hUWG5MY2RlQmFzSCAgICAweDAwMjQKKyAqLworI2RlZmluZSBIQ19IVFhuTGNCYXNIX01BU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hUWG5MZEJhc0hfTUFTSyAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSFRYbkxlQmFzSF9NQVNLICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFhuTGRCYXNIX1NISUZUICAgICA4CisjZGVmaW5lIEhDX0hUWG5MZUJhc0hfU0hJRlQgICAgIDE2CisvKiBIQ19TdWJBX0hUWG5MY2RlQmFzSCAgICAweDAwMjUKKyAqLworI2RlZmluZSBIQ19IVFhuTGZCYXNIX01BU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hUWG5MMTBCYXNIX01BU0sgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUWG5MMTFCYXNIX01BU0sgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEhDX0hUWG5MMTBCYXNIX1NISUZUICAgICA4CisjZGVmaW5lIEhDX0hUWG5MMTFCYXNIX1NISUZUICAgICAxNgorLyogSENfU3ViQV9IVFhuTDBQaXQgICAgICAgMHgwMDJiCisgKi8KKyNkZWZpbmUgSENfSFRYbkxuUGl0X01BU0sgICAgICAgMHgwMDAwM2ZmZgorI2RlZmluZSBIQ19IVFhuRW5QaXRfTUFTSyAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEhDX0hUWG5MblBpdEVfTUFTSyAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgSENfSFRYbkxuUGl0RV9TSElGVCAgICAgMjAKKy8qIEhDX1N1YkFfSFRYbkwwXzVXRSAgICAgIDB4MDA0YgorICovCisjZGVmaW5lIEhDX0hUWG5MMFdFX01BU0sgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgSENfSFRYbkwxV0VfTUFTSyAgICAgICAgMHgwMDAwMDBmMAorI2RlZmluZSBIQ19IVFhuTDJXRV9NQVNLICAgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEhDX0hUWG5MM1dFX01BU0sgICAgICAgIDB4MDAwMGYwMDAKKyNkZWZpbmUgSENfSFRYbkw0V0VfTUFTSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBIQ19IVFhuTDVXRV9NQVNLICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIEhDX0hUWG5MMVdFX1NISUZUICAgICAgIDQKKyNkZWZpbmUgSENfSFRYbkwyV0VfU0hJRlQgICAgICAgOAorI2RlZmluZSBIQ19IVFhuTDNXRV9TSElGVCAgICAgICAxMgorI2RlZmluZSBIQ19IVFhuTDRXRV9TSElGVCAgICAgICAxNgorI2RlZmluZSBIQ19IVFhuTDVXRV9TSElGVCAgICAgICAyMAorLyogSENfU3ViQV9IVFhuTDZfYldFICAgICAgMHgwMDRjCisgKi8KKyNkZWZpbmUgSENfSFRYbkw2V0VfTUFTSyAgICAgICAgMHgwMDAwMDAwZgorI2RlZmluZSBIQ19IVFhuTDdXRV9NQVNLICAgICAgICAweDAwMDAwMGYwCisjZGVmaW5lIEhDX0hUWG5MOFdFX01BU0sgICAgICAgIDB4MDAwMDBmMDAKKyNkZWZpbmUgSENfSFRYbkw5V0VfTUFTSyAgICAgICAgMHgwMDAwZjAwMAorI2RlZmluZSBIQ19IVFhuTGFXRV9NQVNLICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIEhDX0hUWG5MYldFX01BU0sgICAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgSENfSFRYbkw3V0VfU0hJRlQgICAgICAgNAorI2RlZmluZSBIQ19IVFhuTDhXRV9TSElGVCAgICAgICA4CisjZGVmaW5lIEhDX0hUWG5MOVdFX1NISUZUICAgICAgIDEyCisjZGVmaW5lIEhDX0hUWG5MYVdFX1NISUZUICAgICAgIDE2CisjZGVmaW5lIEhDX0hUWG5MYldFX1NISUZUICAgICAgIDIwCisvKiBIQ19TdWJBX0hUWG5MY18xMVdFICAgICAgMHgwMDRkCisgKi8KKyNkZWZpbmUgSENfSFRYbkxjV0VfTUFTSyAgICAgICAgMHgwMDAwMDAwZgorI2RlZmluZSBIQ19IVFhuTGRXRV9NQVNLICAgICAgICAweDAwMDAwMGYwCisjZGVmaW5lIEhDX0hUWG5MZVdFX01BU0sgICAgICAgIDB4MDAwMDBmMDAKKyNkZWZpbmUgSENfSFRYbkxmV0VfTUFTSyAgICAgICAgMHgwMDAwZjAwMAorI2RlZmluZSBIQ19IVFhuTDEwV0VfTUFTSyAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIEhDX0hUWG5MMTFXRV9NQVNLICAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgSENfSFRYbkxkV0VfU0hJRlQgICAgICAgNAorI2RlZmluZSBIQ19IVFhuTGVXRV9TSElGVCAgICAgICA4CisjZGVmaW5lIEhDX0hUWG5MZldFX1NISUZUICAgICAgIDEyCisjZGVmaW5lIEhDX0hUWG5MMTBXRV9TSElGVCAgICAgIDE2CisjZGVmaW5lIEhDX0hUWG5MMTFXRV9TSElGVCAgICAgIDIwCisvKiBIQ19TdWJBX0hUWG5MMF81SEUgICAgICAweDAwNTEKKyAqLworI2RlZmluZSBIQ19IVFhuTDBIRV9NQVNLICAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lIEhDX0hUWG5MMUhFX01BU0sgICAgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgSENfSFRYbkwySEVfTUFTSyAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBIQ19IVFhuTDNIRV9NQVNLICAgICAgICAweDAwMDBmMDAwCisjZGVmaW5lIEhDX0hUWG5MNEhFX01BU0sgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgSENfSFRYbkw1SEVfTUFTSyAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBIQ19IVFhuTDFIRV9TSElGVCAgICAgICA0CisjZGVmaW5lIEhDX0hUWG5MMkhFX1NISUZUICAgICAgIDgKKyNkZWZpbmUgSENfSFRYbkwzSEVfU0hJRlQgICAgICAgMTIKKyNkZWZpbmUgSENfSFRYbkw0SEVfU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSENfSFRYbkw1SEVfU0hJRlQgICAgICAgMjAKKy8qIEhDX1N1YkFfSFRYbkw2X2JIRSAgICAgIDB4MDA1MgorICovCisjZGVmaW5lIEhDX0hUWG5MNkhFX01BU0sgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgSENfSFRYbkw3SEVfTUFTSyAgICAgICAgMHgwMDAwMDBmMAorI2RlZmluZSBIQ19IVFhuTDhIRV9NQVNLICAgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEhDX0hUWG5MOUhFX01BU0sgICAgICAgIDB4MDAwMGYwMDAKKyNkZWZpbmUgSENfSFRYbkxhSEVfTUFTSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBIQ19IVFhuTGJIRV9NQVNLICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIEhDX0hUWG5MN0hFX1NISUZUICAgICAgIDQKKyNkZWZpbmUgSENfSFRYbkw4SEVfU0hJRlQgICAgICAgOAorI2RlZmluZSBIQ19IVFhuTDlIRV9TSElGVCAgICAgICAxMgorI2RlZmluZSBIQ19IVFhuTGFIRV9TSElGVCAgICAgICAxNgorI2RlZmluZSBIQ19IVFhuTGJIRV9TSElGVCAgICAgICAyMAorLyogSENfU3ViQV9IVFhuTGNfMTFIRSAgICAgIDB4MDA1MworICovCisjZGVmaW5lIEhDX0hUWG5MY0hFX01BU0sgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgSENfSFRYbkxkSEVfTUFTSyAgICAgICAgMHgwMDAwMDBmMAorI2RlZmluZSBIQ19IVFhuTGVIRV9NQVNLICAgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEhDX0hUWG5MZkhFX01BU0sgICAgICAgIDB4MDAwMGYwMDAKKyNkZWZpbmUgSENfSFRYbkwxMEhFX01BU0sgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBIQ19IVFhuTDExSEVfTUFTSyAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIEhDX0hUWG5MZEhFX1NISUZUICAgICAgIDQKKyNkZWZpbmUgSENfSFRYbkxlSEVfU0hJRlQgICAgICAgOAorI2RlZmluZSBIQ19IVFhuTGZIRV9TSElGVCAgICAgICAxMgorI2RlZmluZSBIQ19IVFhuTDEwSEVfU0hJRlQgICAgICAxNgorI2RlZmluZSBIQ19IVFhuTDExSEVfU0hJRlQgICAgICAyMAorLyogSENfU3ViQV9IVFhuTDBPUyAgICAgICAgMHgwMDc3CisgKi8KKyNkZWZpbmUgSENfSFRYbkwwT1NfTUFTSyAgICAgICAgMHgwMDNmZjAwMAorI2RlZmluZSBIQ19IVFhuTFZtYXhfTUFTSyAgICAgICAweDAwMDAwZmMwCisjZGVmaW5lIEhDX0hUWG5MVm1pbl9NQVNLICAgICAgIDB4MDAwMDAwM2YKKyNkZWZpbmUgSENfSFRYbkwwT1NfU0hJRlQgICAgICAgMTIKKyNkZWZpbmUgSENfSFRYbkxWbWF4X1NISUZUICAgICAgNgorLyogSENfU3ViQV9IVFhuVEIgICAgICAgICAgMHgwMDc4CisgKi8KKyNkZWZpbmUgSENfSFRYblRCX01BU0sgICAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBIQ19IVFhuRkxTZV9NQVNLICAgICAgICAweDAwMDBlMDAwCisjZGVmaW5lIEhDX0hUWG5GTFNzX01BU0sgICAgICAgIDB4MDAwMDFjMDAKKyNkZWZpbmUgSENfSFRYbkZMVGVfTUFTSyAgICAgICAgMHgwMDAwMDM4MAorI2RlZmluZSBIQ19IVFhuRkxUc19NQVNLICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEhDX0hUWG5GTERzX01BU0sgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgSENfSFRYblRCX05vVEIgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJfVEJDX1MgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQl9UQkNfVCAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCX1RCX1MgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJfVEJfVCAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEhDX0hUWG5GTFNlX05lYXJlc3QgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYbkZMU2VfTGluZWFyICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBIQ19IVFhuRkxTZV9Ob25MaW5lYXIgICAweDAwMDA0MDAwCisjZGVmaW5lIEhDX0hUWG5GTFNlX1NoYXJwICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSENfSFRYbkZMU2VfRmxhdF9HYXVzc2lhbl9DdWJpYyAweDAwMDBjMDAwCisjZGVmaW5lIEhDX0hUWG5GTFNzX05lYXJlc3QgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYbkZMU3NfTGluZWFyICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBIQ19IVFhuRkxTc19Ob25MaW5lYXIgICAweDAwMDAwODAwCisjZGVmaW5lIEhDX0hUWG5GTFNzX0ZsYXRfR2F1c3NpYW5fQ3ViaWMgMHgwMDAwMTgwMAorI2RlZmluZSBIQ19IVFhuRkxUZV9OZWFyZXN0ICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5GTFRlX0xpbmVhciAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSENfSFRYbkZMVGVfTm9uTGluZWFyICAgMHgwMDAwMDEwMAorI2RlZmluZSBIQ19IVFhuRkxUZV9TaGFycCAgICAgICAweDAwMDAwMTgwCisjZGVmaW5lIEhDX0hUWG5GTFRlX0ZsYXRfR2F1c3NpYW5fQ3ViaWMgMHgwMDAwMDMwMAorI2RlZmluZSBIQ19IVFhuRkxUc19OZWFyZXN0ICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5GTFRzX0xpbmVhciAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfSFRYbkZMVHNfTm9uTGluZWFyICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19IVFhuRkxUc19GbGF0X0dhdXNzaWFuX0N1YmljIDB4MDAwMDAwNjAKKyNkZWZpbmUgSENfSFRYbkZMRHNfVGV4MCAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVFhuRkxEc19OZWFyZXN0ICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX0hUWG5GTERzX0xpbmVhciAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSFRYbkZMRHNfTm9uTGluZWFyICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19IVFhuRkxEc19EaXRoZXIgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX0hUWG5GTERzX0NvbnN0TE9EICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgSENfSFRYbkZMRHNfQW5pICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBIQ19IVFhuRkxEc19BbmlEaXRoZXIgICAweDAwMDAwMDA3CisvKiBIQ19TdWJBX0hUWG5NUE1EICAgICAgICAweDAwNzkKKyAqLworI2RlZmluZSBIQ19IVFhuTVBNRF9TTUFTSyAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIEhDX0hUWG5NUE1EX1RNQVNLICAgICAgIDB4MDAzODAwMDAKKyNkZWZpbmUgSENfSFRYbkxPRERUZl9NQVNLICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBIQ19IVFhuWFkyU1RfTUFTSyAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX0hUWG5NUE1EX1RzaW5nbGUgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYbk1QTURfVGNsYW1wICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBIQ19IVFhuTVBNRF9UcmVwZWF0ICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEhDX0hUWG5NUE1EX1RtaXJyb3IgICAgIDB4MDAxODAwMDAKKyNkZWZpbmUgSENfSFRYbk1QTURfVHdyYXAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBIQ19IVFhuTVBNRF9Tc2luZ2xlICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5NUE1EX1NjbGFtcCAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSFRYbk1QTURfU3JlcGVhdCAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBIQ19IVFhuTVBNRF9TbWlycm9yICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEhDX0hUWG5NUE1EX1N3cmFwICAgICAgIDB4MDAwNDAwMDAKKy8qIEhDX1N1YkFfSFRYbkNMT0R1ICAgICAgIDB4MDA3YQorICovCisjZGVmaW5lIEhDX0hUWG5DTE9EdV9NQVNLICAgICAgIDB4MDAwZmZjMDAKKyNkZWZpbmUgSENfSFRYbkNMT0RkX01BU0sgICAgICAgMHgwMDAwMDNmZgorI2RlZmluZSBIQ19IVFhuQ0xPRHVfU0hJRlQgICAgICAxMAorLyogSENfU3ViQV9IVFhuRk0gICAgICAgICAgMHgwMDdiCisgKi8KKyNkZWZpbmUgSENfSFRYbkZNX01BU0sgICAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFhuTG9jX01BU0sgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX0hUWG5GTV9JTkRFWCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX0ludGVuc2l0eSAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBIQ19IVFhuRk1fTHVtICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEhDX0hUWG5GTV9BbHBoYSAgICAgICAgIDB4MDAxODAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX0RYICAgICAgICAgICAgMHgwMDI4MDAwMAorI2RlZmluZSBIQ19IVFhuRk1fQVJHQjE2ICAgICAgICAweDAwODgwMDAwCisjZGVmaW5lIEhDX0hUWG5GTV9BUkdCMzIgICAgICAgIDB4MDA5ODAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX0FCR1IxNiAgICAgICAgMHgwMGE4MDAwMAorI2RlZmluZSBIQ19IVFhuRk1fQUJHUjMyICAgICAgICAweDAwYjgwMDAwCisjZGVmaW5lIEhDX0hUWG5GTV9SR0JBMTYgICAgICAgIDB4MDBjODAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX1JHQkEzMiAgICAgICAgMHgwMGQ4MDAwMAorI2RlZmluZSBIQ19IVFhuRk1fQkdSQTE2ICAgICAgICAweDAwZTgwMDAwCisjZGVmaW5lIEhDX0hUWG5GTV9CR1JBMzIgICAgICAgIDB4MDBmODAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX0JVTVBNQVAgICAgICAgMHgwMDM4MDAwMAorI2RlZmluZSBIQ19IVFhuRk1fSW5kZXgxICAgICAgICAoSENfSFRYbkZNX0lOREVYICAgICB8IDB4MDAwMDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9JbmRleDIgICAgICAgIChIQ19IVFhuRk1fSU5ERVggICAgIHwgMHgwMDAxMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0luZGV4NCAgICAgICAgKEhDX0hUWG5GTV9JTkRFWCAgICAgfCAweDAwMDIwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fSW5kZXg4ICAgICAgICAoSENfSFRYbkZNX0lOREVYICAgICB8IDB4MDAwMzAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9UMSAgICAgICAgICAgIChIQ19IVFhuRk1fSW50ZW5zaXR5IHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX1QyICAgICAgICAgICAgKEhDX0hUWG5GTV9JbnRlbnNpdHkgfCAweDAwMDEwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fVDQgICAgICAgICAgICAoSENfSFRYbkZNX0ludGVuc2l0eSB8IDB4MDAwMjAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9UOCAgICAgICAgICAgIChIQ19IVFhuRk1fSW50ZW5zaXR5IHwgMHgwMDAzMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0wxICAgICAgICAgICAgKEhDX0hUWG5GTV9MdW0gICAgICAgfCAweDAwMDAwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fTDIgICAgICAgICAgICAoSENfSFRYbkZNX0x1bSAgICAgICB8IDB4MDAwMTAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9MNCAgICAgICAgICAgIChIQ19IVFhuRk1fTHVtICAgICAgIHwgMHgwMDAyMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0w4ICAgICAgICAgICAgKEhDX0hUWG5GTV9MdW0gICAgICAgfCAweDAwMDMwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQUw0NCAgICAgICAgICAoSENfSFRYbkZNX0x1bSAgICAgICB8IDB4MDAwNDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BTDg4ICAgICAgICAgIChIQ19IVFhuRk1fTHVtICAgICAgIHwgMHgwMDA1MDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0ExICAgICAgICAgICAgKEhDX0hUWG5GTV9BbHBoYSAgICAgfCAweDAwMDAwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQTIgICAgICAgICAgICAoSENfSFRYbkZNX0FscGhhICAgICB8IDB4MDAwMTAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BNCAgICAgICAgICAgIChIQ19IVFhuRk1fQWxwaGEgICAgIHwgMHgwMDAyMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0E4ICAgICAgICAgICAgKEhDX0hUWG5GTV9BbHBoYSAgICAgfCAweDAwMDMwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fRFgxICAgICAgICAgICAoSENfSFRYbkZNX0RYICAgICAgICB8IDB4MDAwMTAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9EWDIzICAgICAgICAgIChIQ19IVFhuRk1fRFggICAgICAgIHwgMHgwMDAyMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0RYNDUgICAgICAgICAgKEhDX0hUWG5GTV9EWCAgICAgICAgfCAweDAwMDMwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fUkdCNTU1ICAgICAgICAoSENfSFRYbkZNX0FSR0IxNiAgICB8IDB4MDAwMDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9SR0I1NjUgICAgICAgIChIQ19IVFhuRk1fQVJHQjE2ICAgIHwgMHgwMDAxMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0FSR0IxNTU1ICAgICAgKEhDX0hUWG5GTV9BUkdCMTYgICAgfCAweDAwMDIwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQVJHQjQ0NDQgICAgICAoSENfSFRYbkZNX0FSR0IxNiAgICB8IDB4MDAwMzAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BUkdCMDg4OCAgICAgIChIQ19IVFhuRk1fQVJHQjMyICAgIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0FSR0I4ODg4ICAgICAgKEhDX0hUWG5GTV9BUkdCMzIgICAgfCAweDAwMDEwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQkdSNTU1ICAgICAgICAoSENfSFRYbkZNX0FCR1IxNiAgICB8IDB4MDAwMDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9CR1I1NjUgICAgICAgIChIQ19IVFhuRk1fQUJHUjE2ICAgIHwgMHgwMDAxMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0FCR1IxNTU1ICAgICAgKEhDX0hUWG5GTV9BQkdSMTYgICAgfCAweDAwMDIwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQUJHUjQ0NDQgICAgICAoSENfSFRYbkZNX0FCR1IxNiAgICB8IDB4MDAwMzAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BQkdSMDg4OCAgICAgIChIQ19IVFhuRk1fQUJHUjMyICAgIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0FCR1I4ODg4ICAgICAgKEhDX0hUWG5GTV9BQkdSMzIgICAgfCAweDAwMDEwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fUkdCQTU1NTAgICAgICAoSENfSFRYbkZNX1JHQkExNiAgICB8IDB4MDAwMDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9SR0JBNTU1MSAgICAgIChIQ19IVFhuRk1fUkdCQTE2ICAgIHwgMHgwMDAyMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX1JHQkE0NDQ0ICAgICAgKEhDX0hUWG5GTV9SR0JBMTYgICAgfCAweDAwMDMwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fUkdCQTg4ODAgICAgICAoSENfSFRYbkZNX1JHQkEzMiAgICB8IDB4MDAwMDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9SR0JBODg4OCAgICAgIChIQ19IVFhuRk1fUkdCQTMyICAgIHwgMHgwMDAxMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0JHUkE1NTUwICAgICAgKEhDX0hUWG5GTV9CR1JBMTYgICAgfCAweDAwMDAwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQkdSQTU1NTEgICAgICAoSENfSFRYbkZNX0JHUkExNiAgICB8IDB4MDAwMjAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9CR1JBNDQ0NCAgICAgIChIQ19IVFhuRk1fQkdSQTE2ICAgIHwgMHgwMDAzMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0JHUkE4ODgwICAgICAgKEhDX0hUWG5GTV9CR1JBMzIgICAgfCAweDAwMDAwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQkdSQTg4ODggICAgICAoSENfSFRYbkZNX0JHUkEzMiAgICB8IDB4MDAwMTAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9WVTg4ICAgICAgICAgIChIQ19IVFhuRk1fQlVNUE1BUCAgIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0xWVTY1NSAgICAgICAgKEhDX0hUWG5GTV9CVU1QTUFQICAgfCAweDAwMDEwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fTFZVODg4ICAgICAgICAoSENfSFRYbkZNX0JVTVBNQVAgICB8IDB4MDAwMjAwMDApCisjZGVmaW5lIEhDX0hUWG5Mb2NfTG9jYWwgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYbkxvY19TeXMgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19IVFhuTG9jX0FHUCAgICAgICAgICAweDAwMDAwMDAzCisvKiBIQ19TdWJBX0hUWG5UUkFIICAgICAgICAweDAwN2YKKyAqLworI2RlZmluZSBIQ19IVFhuVFJBSF9NQVNLICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEhDX0hUWG5UUkFMX01BU0sgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSFRYblRCQV9NQVNLICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IVFhuVFJBSF9TSElGVCAgICAgICAxNgorI2RlZmluZSBIQ19IVFhuVFJBTF9TSElGVCAgICAgICA4CisvKiBIQ19TdWJBX0hUWG5UQkxDc2F0ICAgICAweDAwODAKKyAqLS0gRGVmaW5lIHRoZSBpbnB1dCB0ZXh0dXJlLgorICovCisjZGVmaW5lIEhDX1hUQ19UT1BDICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfWFRDX0ludlRPUEMgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBIQ19YVENfVE9QQ3A1ICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEhDX1hUQ19DYmlhcyAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfWFRDX0ludkNiaWFzICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBIQ19YVENfMCAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1hUQ19EaWYgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfWFRDX1NwZWMgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19YVENfVGV4ICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX1hUQ19DdXIgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSENfWFRDX0FkaWYgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBIQ19YVENfRm9nICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEhDX1hUQ19BdGV4ICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSENfWFRDX0FjdXIgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19YVENfSFRYblRCTFJDICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEhDX1hUQ19DdGV4bmV4dCAgICAgICAgIDB4MDAwMDAwMGEKKy8qLS0KKyAqLworI2RlZmluZSBIQ19IVFhuVEJMQ3NhdF9NQVNLICAgICAweDAwODAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9NQVNLICAgICAgIDB4MDAwZmMwMDAKKyNkZWZpbmUgSENfSFRYblRCTENiX01BU0sgICAgICAgMHgwMDAwMWY4MAorI2RlZmluZSBIQ19IVFhuVEJMQ2NfTUFTSyAgICAgICAweDAwMDAwMDNmCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9UT1BDICAgICAgIChIQ19YVENfVE9QQyA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX0ludlRPUEMgICAgKEhDX1hUQ19JbnZUT1BDIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2FfVE9QQ3A1ICAgICAoSENfWFRDX1RPUENwNSA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhXzAgICAgICAgICAgKEhDX1hUQ18wIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2FfRGlmICAgICAgICAoSENfWFRDX0RpZiA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX1NwZWMgICAgICAgKEhDX1hUQ19TcGVjIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2FfVGV4ICAgICAgICAoSENfWFRDX1RleCA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX0N1ciAgICAgICAgKEhDX1hUQ19DdXIgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9BZGlmICAgICAgIChIQ19YVENfQWRpZiA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX0ZvZyAgICAgICAgKEhDX1hUQ19Gb2cgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9BdGV4ICAgICAgIChIQ19YVENfQXRleCA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX0FjdXIgICAgICAgKEhDX1hUQ19BY3VyIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2FfSFRYblRCTFJDICAoSENfWFRDX0hUWG5UQkxSQyA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX0N0ZXhuZXh0ICAgKEhDX1hUQ19DdGV4bmV4dCA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENiX1RPUEMgICAgICAgKEhDX1hUQ19UT1BDIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9JbnZUT1BDICAgIChIQ19YVENfSW52VE9QQyA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfVE9QQ3A1ICAgICAoSENfWFRDX1RPUENwNSA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfMCAgICAgICAgICAoSENfWFRDXzAgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTENiX0RpZiAgICAgICAgKEhDX1hUQ19EaWYgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTENiX1NwZWMgICAgICAgKEhDX1hUQ19TcGVjIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9UZXggICAgICAgIChIQ19YVENfVGV4IDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9DdXIgICAgICAgIChIQ19YVENfQ3VyIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9BZGlmICAgICAgIChIQ19YVENfQWRpZiA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfRm9nICAgICAgICAoSENfWFRDX0ZvZyA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfQXRleCAgICAgICAoSENfWFRDX0F0ZXggPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTENiX0FjdXIgICAgICAgKEhDX1hUQ19BY3VyIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9IVFhuVEJMUkMgIChIQ19YVENfSFRYblRCTFJDIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9DdGV4bmV4dCAgIChIQ19YVENfQ3RleG5leHQgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTENjX1RPUEMgICAgICAgKEhDX1hUQ19UT1BDIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxDY19JbnZUT1BDICAgIChIQ19YVENfSW52VE9QQyA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfVE9QQ3A1ICAgICAoSENfWFRDX1RPUENwNSA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfMCAgICAgICAgICAoSENfWFRDXzAgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTENjX0RpZiAgICAgICAgKEhDX1hUQ19EaWYgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTENjX1NwZWMgICAgICAgKEhDX1hUQ19TcGVjIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxDY19UZXggICAgICAgIChIQ19YVENfVGV4IDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxDY19DdXIgICAgICAgIChIQ19YVENfQ3VyIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxDY19BZGlmICAgICAgIChIQ19YVENfQWRpZiA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfRm9nICAgICAgICAoSENfWFRDX0ZvZyA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfQXRleCAgICAgICAoSENfWFRDX0F0ZXggPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTENjX0FjdXIgICAgICAgKEhDX1hUQ19BY3VyIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxDY19IVFhuVEJMUkMgIChIQ19YVENfSFRYblRCTFJDIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxDY19DdGV4bmV4dCAgIChIQ19YVENfQ3RleG5leHQgPDwgMCkKKy8qIEhDX1N1YkFfSFRYblRCTENvcCAgICAgIDB4MDA4MQorICovCisjZGVmaW5lIEhDX0hUWG5UQkxkb3RfTUFTSyAgICAgIDB4MDBjMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTENvcF9NQVNLICAgICAgMHgwMDM4MDAwMAorI2RlZmluZSBIQ19IVFhuVEJMQ2JpYXNfTUFTSyAgICAweDAwMDdjMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxDc2hpZnRfTUFTSyAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgSENfSFRYblRCTEFvcF9NQVNLICAgICAgMHgwMDAwMDM4MAorI2RlZmluZSBIQ19IVFhuVEJMQWJpYXNfTUFTSyAgICAweDAwMDAwMDc4CisjZGVmaW5lIEhDX0hUWG5UQkxBc2hpZnRfTUFTSyAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSENfSFRYblRCTENvcF9BZGQgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMQ29wX1N1YiAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxDb3BfTWluICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTENvcF9NYXggICAgICAgMHgwMDE4MDAwMAorI2RlZmluZSBIQ19IVFhuVEJMQ29wX01hc2sgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxDYmlhc19DYmlhcyAgICAgICAgICAgKEhDX1hUQ19DYmlhcyA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENiaWFzX0ludkNiaWFzICAgICAgICAoSENfWFRDX0ludkNiaWFzIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JpYXNfMCAgICAgICAgICAgICAgIChIQ19YVENfMCA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENiaWFzX0RpZiAgICAgICAgICAgICAoSENfWFRDX0RpZiA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENiaWFzX1NwZWMgICAgICAgICAgICAoSENfWFRDX1NwZWMgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYmlhc19UZXggICAgICAgICAgICAgKEhDX1hUQ19UZXggPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYmlhc19DdXIgICAgICAgICAgICAgKEhDX1hUQ19DdXIgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYmlhc19BZGlmICAgICAgICAgICAgKEhDX1hUQ19BZGlmIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JpYXNfRm9nICAgICAgICAgICAgIChIQ19YVENfRm9nIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JpYXNfQXRleCAgICAgICAgICAgIChIQ19YVENfQXRleCA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENiaWFzX0FjdXIgICAgICAgICAgICAoSENfWFRDX0FjdXIgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYmlhc19IVFhuVEJMUkMgICAgICAgKEhDX1hUQ19IVFhuVEJMUkMgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDc2hpZnRfMSAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTENzaGlmdF8yICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBIQ19IVFhuVEJMQ3NoaWZ0X05vICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxDc2hpZnRfRG90UCAgIDB4MDAwMDE4MDAKKy8qPSogSm9obiBTaGVuZyBbMjAwMy43LjE4XSB0ZXh0dXJlIGNvbWJpbmUgKj0qLworI2RlZmluZSBIQ19IVFhuVEJMRE9UMyAgIDB4MDAwODAwMDAKKyNkZWZpbmUgSENfSFRYblRCTERPVDQgICAweDAwMEMwMDAwCisKKyNkZWZpbmUgSENfSFRYblRCTEFvcF9BZGQgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMQW9wX1N1YiAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEhDX0hUWG5UQkxBb3BfTWluICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSENfSFRYblRCTEFvcF9NYXggICAgICAgMHgwMDAwMDE4MAorI2RlZmluZSBIQ19IVFhuVEJMQW9wX01hc2sgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEhDX0hUWG5UQkxBYmlhc19JbnYgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBIQ19IVFhuVEJMQWJpYXNfQWRpZiAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTEFiaWFzX0ZvZyAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX0hUWG5UQkxBYmlhc19BY3VyICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBIQ19IVFhuVEJMQWJpYXNfSFRYblRCTFJBYmlhcyAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSENfSFRYblRCTEFiaWFzX0F0ZXggICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEhDX0hUWG5UQkxBc2hpZnRfMSAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTEFzaGlmdF8yICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIQ19IVFhuVEJMQXNoaWZ0X05vICAgICAweDAwMDAwMDAyCisvKiAjZGVmaW5lIEhDX0hUWG5UQkxBc2hpZnRfRG90UCAgIDB4MDAwMDAwMDMgKi8KKy8qIEhDX1N1YkFfSFRYblRCTE1QRm9nICAgIDB4MDA4MgorICovCisjZGVmaW5lIEhDX0hUWG5UQkxNUGZvZ19NQVNLICAgIDB4MDBlMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTE1QZm9nXzAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMTVBmb2dfQWRpZiAgICAweDAwMjAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxNUGZvZ19Gb2cgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTE1QZm9nX0F0ZXggICAgMHgwMDYwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMTVBmb2dfQWN1ciAgICAweDAwODAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxNUGZvZ19HSFRYblRCTFJGb2cgICAgMHgwMGEwMDAwMAorLyogSENfU3ViQV9IVFhuVEJMQXNhdCAgICAgMHgwMDgzCisgKi0tIERlZmluZSB0aGUgdGV4dHVyZSBhbHBoYSBpbnB1dC4KKyAqLworI2RlZmluZSBIQ19YVEFfVE9QQSAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1hUQV9JbnZUT1BBICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfWFRBX1RPUEFwNSAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBIQ19YVEFfQWRpZiAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1hUQV9Gb2cgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfWFRBX0FjdXIgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19YVEFfSFRYblRCTFJBICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX1hUQV9BdGV4ICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSENfWFRBX0F0ZXhuZXh0ICAgICAgICAgMHgwMDAwMDAwNQorLyotLQorICovCisjZGVmaW5lIEhDX0hUWG5UQkxBc2F0X01BU0sgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTEFNQl9NQVNLICAgICAgMHgwMDcwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMQWFfTUFTSyAgICAgICAweDAwMDdjMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxBYl9NQVNLICAgICAgIDB4MDAwMDBmODAKKyNkZWZpbmUgSENfSFRYblRCTEFjX01BU0sgICAgICAgMHgwMDAwMDAxZgorI2RlZmluZSBIQ19IVFhuVEJMQU1CX1NISUZUICAgICAyMAorI2RlZmluZSBIQ19IVFhuVEJMQWFfVE9QQSAgICAgICAoSENfWFRBX1RPUEEgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxBYV9JbnZUT1BBICAgIChIQ19YVEFfSW52VE9QQSA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTEFhX1RPUEFwNSAgICAgKEhDX1hUQV9UT1BBcDUgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxBYV9BZGlmICAgICAgIChIQ19YVEFfQWRpZiA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTEFhX0ZvZyAgICAgICAgKEhDX1hUQV9Gb2cgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxBYV9BY3VyICAgICAgIChIQ19YVEFfQWN1ciA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTEFhX0hUWG5UQkxSQSAgKEhDX1hUQV9IVFhuVEJMUkEgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxBYV9BdGV4ICAgICAgIChIQ19YVEFfQXRleCA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTEFhX0F0ZXhuZXh0ICAgKEhDX1hUQV9BdGV4bmV4dCA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTEFiX1RPUEEgICAgICAgKEhDX1hUQV9UT1BBIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxBYl9JbnZUT1BBICAgIChIQ19YVEFfSW52VE9QQSA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQWJfVE9QQXA1ICAgICAoSENfWFRBX1RPUEFwNSA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQWJfQWRpZiAgICAgICAoSENfWFRBX0FkaWYgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTEFiX0ZvZyAgICAgICAgKEhDX1hUQV9Gb2cgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTEFiX0FjdXIgICAgICAgKEhDX1hUQV9BY3VyIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxBYl9IVFhuVEJMUkEgIChIQ19YVEFfSFRYblRCTFJBIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxBYl9BdGV4ICAgICAgIChIQ19YVEFfQXRleCA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQWJfQXRleG5leHQgICAoSENfWFRBX0F0ZXhuZXh0IDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxBY19UT1BBICAgICAgIChIQ19YVEFfVE9QQSA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQWNfSW52VE9QQSAgICAoSENfWFRBX0ludlRPUEEgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTEFjX1RPUEFwNSAgICAgKEhDX1hUQV9UT1BBcDUgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTEFjX0FkaWYgICAgICAgKEhDX1hUQV9BZGlmIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxBY19Gb2cgICAgICAgIChIQ19YVEFfRm9nIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxBY19BY3VyICAgICAgIChIQ19YVEFfQWN1ciA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQWNfSFRYblRCTFJBICAoSENfWFRBX0hUWG5UQkxSQSA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQWNfQXRleCAgICAgICAoSENfWFRBX0F0ZXggPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTEFjX0F0ZXhuZXh0ICAgKEhDX1hUQV9BdGV4bmV4dCA8PCAwKQorLyogSENfU3ViQV9IVFhuVEJMUkFhICAgICAgMHgwMDg5CisgKi8KKyNkZWZpbmUgSENfSFRYblRCTFJBYV9NQVNLICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMUkFiX01BU0sgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUWG5UQkxSQWNfTUFTSyAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSFRYblRCTFJBYV9TSElGVCAgICAgMTYKKyNkZWZpbmUgSENfSFRYblRCTFJBYl9TSElGVCAgICAgOAorI2RlZmluZSBIQ19IVFhuVEJMUkFjX1NISUZUICAgICAwCisvKiBIQ19TdWJBX0hUWG5UQkxSRm9nICAgICAweDAwOGEKKyAqLworI2RlZmluZSBIQ19IVFhuVEJMUkZvZ19NQVNLICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUWG5UQkxSQWJpYXNfTUFTSyAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSFRYblRCTFJGb2dfU0hJRlQgICAgOAorI2RlZmluZSBIQ19IVFhuVEJMUkFiaWFzX1NISUZUICAwCisvKiBIQ19TdWJBX0hUWG5MU2NhbGUgICAgICAweDAwOTQKKyAqLworI2RlZmluZSBIQ19IVFhuTFNjYWxlX01BU0sgICAgICAweDAwMDdmYzAwCisjZGVmaW5lIEhDX0hUWG5MT2ZmX01BU0sgICAgICAgIDB4MDAwMDAxZmYKKyNkZWZpbmUgSENfSFRYbkxTY2FsZV9TSElGVCAgICAgMTAKKy8qIEhDX1N1YkFfSFRYU01EICAgICAgICAgIDB4MDAwMAorICovCisjZGVmaW5lIEhDX0hUWFNNRF9NQVNLICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSENfSFRYVE1EX01BU0sgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBIQ19IVFhOdW1fTUFTSyAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEhDX0hUWFRSTURfTUFTSyAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgSENfSFRYQ0hDTFJfTUFTSyAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIQ19IVFhOdW1fU0hJRlQgICAgICAgICAzCisKKy8qIFRleHR1cmUgUGFsZXR0ZSBuCisgKi8KKyNkZWZpbmUgSENfU3ViVHlwZV9UZXhQYWxldHRlMCAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19TdWJUeXBlX1RleFBhbGV0dGUxICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX1N1YlR5cGVfRm9nVGFibGUgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfU3ViVHlwZV9TdGlwcGxlICAgICAgMHgwMDAwMDAxNAorLyogSENfU3ViQV9UZXhQYWxldHRlMCAgICAgMHgwMDAwCisgKi8KKyNkZWZpbmUgSENfSFRQbkFfTUFTSyAgICAgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBIQ19IVFBuUl9NQVNLICAgICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEhDX0hUUG5HX01BU0sgICAgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSFRQbkJfTUFTSyAgICAgICAgICAgMHgwMDAwMDBmZgorLyogSENfU3ViQV9Gb2dUYWJsZSAgICAgICAgMHgwMDEwCisgKi8KKyNkZWZpbmUgSENfSEZQbjNfTUFTSyAgICAgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBIQ19IRlBuMl9NQVNLICAgICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEhDX0hGUG4xX01BU0sgICAgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSEZQbl9NQVNLICAgICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IRlBuM19TSElGVCAgICAgICAgICAyNAorI2RlZmluZSBIQ19IRlBuMl9TSElGVCAgICAgICAgICAxNgorI2RlZmluZSBIQ19IRlBuMV9TSElGVCAgICAgICAgICA4CisKKy8qIEF1dG8gVGVzdGluZyAmIFNlY3VyaXR5CisgKi8KKyNkZWZpbmUgSENfU3ViQV9IZW5GSUZPQVQgICAgICAgMHgwMDAwCisjZGVmaW5lIEhDX1N1YkFfSEZCRHJhd0ZpcnN0ICAgIDB4MDAwNAorI2RlZmluZSBIQ19TdWJBX0hGQkJhc0wgICAgICAgICAweDAwMDUKKyNkZWZpbmUgSENfU3ViQV9IRkJEc3QgICAgICAgICAgMHgwMDA2CisvKiBIQ19TdWJBX0hlbkZJRk9BVCAgICAgICAweDAwMDAKKyAqLworI2RlZmluZSBIQ19IZW5GSUZPQVRfTUFTSyAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEhDX0hlbkdFTUlMb2NrX01BU0sgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfSGVuRkJBU3dhcF9NQVNLICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19IZW5PVF9NQVNLICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX0hlbkNNRFFfTUFTSyAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSGVuVFhDVFNVX01BU0sgICAgICAgMHgwMDAwMDAwMQorLyogSENfU3ViQV9IRkJEcmF3Rmlyc3QgICAgMHgwMDA0CisgKi8KKyNkZWZpbmUgSENfSEZCRHJhd0ZpcnN0X01BU0sgICAgMHgwMDAwMDgwMAorI2RlZmluZSBIQ19IRkJRdWV1ZV9NQVNLICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEhDX0hGQkxvY2tfTUFTSyAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSENfSEVPRl9NQVNLICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBIQ19IRkJCYXNIX01BU0sgICAgICAgICAweDAwMDAwMGZmCisKKy8qIEdFTUkgU2V0dGluZworICovCisjZGVmaW5lIEhDX1N1YkFfSFRBcmJSQ00gICAgICAgIDB4MDAwOAorI2RlZmluZSBIQ19TdWJBX0hUQXJiUlogICAgICAgICAweDAwMGEKKyNkZWZpbmUgSENfU3ViQV9IVEFyYldaICAgICAgICAgMHgwMDBiCisjZGVmaW5lIEhDX1N1YkFfSFRBcmJSVFggICAgICAgIDB4MDAwYworI2RlZmluZSBIQ19TdWJBX0hUQXJiUkNXICAgICAgICAweDAwMGQKKyNkZWZpbmUgSENfU3ViQV9IVEFyYkUyICAgICAgICAgMHgwMDBlCisjZGVmaW5lIEhDX1N1YkFfSEFyYlJRQ00gICAgICAgIDB4MDAxMAorI2RlZmluZSBIQ19TdWJBX0hBcmJXUUNNICAgICAgICAweDAwMTEKKyNkZWZpbmUgSENfU3ViQV9IR0VNSVRvdXQgICAgICAgMHgwMDIwCisjZGVmaW5lIEhDX1N1YkFfSEZ0aFJUWEQgICAgICAgIDB4MDA0MAorI2RlZmluZSBIQ19TdWJBX0hGdGhSVFhBICAgICAgICAweDAwNDQKKyNkZWZpbmUgSENfU3ViQV9IQ01EUXN0TCAgICAgICAgMHgwMDUwCisjZGVmaW5lIEhDX1N1YkFfSENNRFFlbmRMICAgICAgIDB4MDA1MQorI2RlZmluZSBIQ19TdWJBX0hDTURRTGVuICAgICAgICAweDAwNTIKKy8qIEhDX1N1YkFfSFRBcmJSQ00gICAgICAgIDB4MDAwOAorICovCisjZGVmaW5lIEhDX0hUQXJiUkNNX01BU0sgICAgICAgIDB4MDAwMGZmZmYKKy8qIEhDX1N1YkFfSFRBcmJSWiAgICAgICAgIDB4MDAwYQorICovCisjZGVmaW5lIEhDX0hUQXJiUlpfTUFTSyAgICAgICAgIDB4MDAwMGZmZmYKKy8qIEhDX1N1YkFfSFRBcmJXWiAgICAgICAgIDB4MDAwYgorICovCisjZGVmaW5lIEhDX0hUQXJiV1pfTUFTSyAgICAgICAgIDB4MDAwMGZmZmYKKy8qIEhDX1N1YkFfSFRBcmJSVFggICAgICAgIDB4MDAwYworICovCisjZGVmaW5lIEhDX0hUQXJiUlRYX01BU0sgICAgICAgIDB4MDAwMGZmZmYKKy8qIEhDX1N1YkFfSFRBcmJSQ1cgICAgICAgIDB4MDAwZAorICovCisjZGVmaW5lIEhDX0hUQXJiUkNXX01BU0sgICAgICAgIDB4MDAwMGZmZmYKKy8qIEhDX1N1YkFfSFRBcmJFMiAgICAgICAgIDB4MDAwZQorICovCisjZGVmaW5lIEhDX0hUQXJiRTJfTUFTSyAgICAgICAgIDB4MDAwMGZmZmYKKy8qIEhDX1N1YkFfSEFyYlJRQ00gICAgICAgIDB4MDAxMAorICovCisjZGVmaW5lIEhDX0hUQXJiUlFDTV9NQVNLICAgICAgIDB4MDAwMGZmZmYKKy8qIEhDX1N1YkFfSEFyYldRQ00gICAgICAgIDB4MDAxMQorICovCisjZGVmaW5lIEhDX0hBcmJXUUNNX01BU0sgICAgICAgIDB4MDAwMGZmZmYKKy8qIEhDX1N1YkFfSEdFTUlUb3V0ICAgICAgIDB4MDAyMAorICovCisjZGVmaW5lIEhDX0hHRU1JVG91dF9NQVNLICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgSENfSE5QQXJiWkNfTUFTSyAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIQ19IR0VNSVRvdXRfU0hJRlQgICAgICAxNgorLyogSENfU3ViQV9IRnRoUlRYRCAgICAgICAgMHgwMDQwCisgKi8KKyNkZWZpbmUgSENfSEZ0aFJUWERfTUFTSyAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IRnRoUlpEX01BU0sgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hGdGhXWkRfTUFTSyAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSEZ0aFJUWERfU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSENfSEZ0aFJaRF9TSElGVCAgICAgICAgOAorLyogSENfU3ViQV9IRnRoUlRYQSAgICAgICAgMHgwMDQ0CisgKi8KKyNkZWZpbmUgSENfSEZ0aFJUWEFfTUFTSyAgICAgICAgMHgwMDAwMDBmZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBEZWZpbmUgdGhlIEhhbGN5b24gSW50ZXJuYWwgcmVnaXN0ZXIgYWNjZXNzIGNvbnN0YW50cy4gRm9yIHNpbXVsYXRvciBvbmx5LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBIQ19TSU1BX0hBR1BCc3RMICAgICAgICAweDAwMDAKKyNkZWZpbmUgSENfU0lNQV9IQUdQQmVuZEwgICAgICAgMHgwMDAxCisjZGVmaW5lIEhDX1NJTUFfSEFHUENNTlQgICAgICAgIDB4MDAwMgorI2RlZmluZSBIQ19TSU1BX0hBR1BCcEwgICAgICAgICAweDAwMDMKKyNkZWZpbmUgSENfU0lNQV9IQUdQQnBIICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEhDX1NJTUFfSENsaXBUQiAgICAgICAgIDB4MDAwNQorI2RlZmluZSBIQ19TSU1BX0hDbGlwTFIgICAgICAgICAweDAwMDYKKyNkZWZpbmUgSENfU0lNQV9IRlBDbGlwVEwgICAgICAgMHgwMDA3CisjZGVmaW5lIEhDX1NJTUFfSEZQQ2xpcEJMICAgICAgIDB4MDAwOAorI2RlZmluZSBIQ19TSU1BX0hGUENsaXBMTCAgICAgICAweDAwMDkKKyNkZWZpbmUgSENfU0lNQV9IRlBDbGlwUkwgICAgICAgMHgwMDBhCisjZGVmaW5lIEhDX1NJTUFfSEZQQ2xpcFRCSCAgICAgIDB4MDAwYgorI2RlZmluZSBIQ19TSU1BX0hGUENsaXBMUkggICAgICAweDAwMGMKKyNkZWZpbmUgSENfU0lNQV9ITFAgICAgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIEhDX1NJTUFfSExQUkYgICAgICAgICAgIDB4MDAwZQorI2RlZmluZSBIQ19TSU1BX0hTb2xpZENMICAgICAgICAweDAwMGYKKyNkZWZpbmUgSENfU0lNQV9IUGl4R0MgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEhDX1NJTUFfSFNQWFlPUyAgICAgICAgIDB4MDAxMQorI2RlZmluZSBIQ19TSU1BX0hDbWRBICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgSENfU0lNQV9IQ21kQiAgICAgICAgICAgMHgwMDEzCisjZGVmaW5lIEhDX1NJTUFfSEVuYWJsZSAgICAgICAgIDB4MDAxNAorI2RlZmluZSBIQ19TSU1BX0haV0JCYXNMICAgICAgICAweDAwMTUKKyNkZWZpbmUgSENfU0lNQV9IWldCQmFzSCAgICAgICAgMHgwMDE2CisjZGVmaW5lIEhDX1NJTUFfSFpXQlR5cGUgICAgICAgIDB4MDAxNworI2RlZmluZSBIQ19TSU1BX0haQmlhc0wgICAgICAgICAweDAwMTgKKyNkZWZpbmUgSENfU0lNQV9IWldCZW5kICAgICAgICAgMHgwMDE5CisjZGVmaW5lIEhDX1NJTUFfSFpXVE1EICAgICAgICAgIDB4MDAxYQorI2RlZmluZSBIQ19TSU1BX0haV0NETCAgICAgICAgICAweDAwMWIKKyNkZWZpbmUgSENfU0lNQV9IWldDVEFHbnVtICAgICAgMHgwMDFjCisjZGVmaW5lIEhDX1NJTUFfSFpDWU51bSAgICAgICAgIDB4MDAxZAorI2RlZmluZSBIQ19TSU1BX0haV0NGaXJlICAgICAgICAweDAwMWUKKy8qICNkZWZpbmUgSENfU0lNQV9IU0JCYXNMICAgICAgICAgMHgwMDFkICovCisvKiAjZGVmaW5lIEhDX1NJTUFfSFNCQmFzSCAgICAgICAgIDB4MDAxZSAqLworLyogI2RlZmluZSBIQ19TSU1BX0hTQkZNICAgICAgICAgICAweDAwMWYgKi8KKyNkZWZpbmUgSENfU0lNQV9IU1RSRUYgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIEhDX1NJTUFfSFNUTUQgICAgICAgICAgIDB4MDAyMQorI2RlZmluZSBIQ19TSU1BX0hBQkJhc0wgICAgICAgICAweDAwMjIKKyNkZWZpbmUgSENfU0lNQV9IQUJCYXNIICAgICAgICAgMHgwMDIzCisjZGVmaW5lIEhDX1NJTUFfSEFCRk0gICAgICAgICAgIDB4MDAyNAorI2RlZmluZSBIQ19TSU1BX0hBVE1EICAgICAgICAgICAweDAwMjUKKyNkZWZpbmUgSENfU0lNQV9IQUJMQ3NhdCAgICAgICAgMHgwMDI2CisjZGVmaW5lIEhDX1NJTUFfSEFCTENvcCAgICAgICAgIDB4MDAyNworI2RlZmluZSBIQ19TSU1BX0hBQkxBc2F0ICAgICAgICAweDAwMjgKKyNkZWZpbmUgSENfU0lNQV9IQUJMQW9wICAgICAgICAgMHgwMDI5CisjZGVmaW5lIEhDX1NJTUFfSEFCTFJDYSAgICAgICAgIDB4MDAyYQorI2RlZmluZSBIQ19TSU1BX0hBQkxSRkNhICAgICAgICAweDAwMmIKKyNkZWZpbmUgSENfU0lNQV9IQUJMUkNiaWFzICAgICAgMHgwMDJjCisjZGVmaW5lIEhDX1NJTUFfSEFCTFJDYiAgICAgICAgIDB4MDAyZAorI2RlZmluZSBIQ19TSU1BX0hBQkxSRkNiICAgICAgICAweDAwMmUKKyNkZWZpbmUgSENfU0lNQV9IQUJMUkFhICAgICAgICAgMHgwMDJmCisjZGVmaW5lIEhDX1NJTUFfSEFCTFJBYiAgICAgICAgIDB4MDAzMAorI2RlZmluZSBIQ19TSU1BX0hEQkJhc0wgICAgICAgICAweDAwMzEKKyNkZWZpbmUgSENfU0lNQV9IREJCYXNIICAgICAgICAgMHgwMDMyCisjZGVmaW5lIEhDX1NJTUFfSERCRk0gICAgICAgICAgIDB4MDAzMworI2RlZmluZSBIQ19TSU1BX0hGQkJNU0tMICAgICAgICAweDAwMzQKKyNkZWZpbmUgSENfU0lNQV9IUk9QICAgICAgICAgICAgMHgwMDM1CisjZGVmaW5lIEhDX1NJTUFfSEZvZ0xGICAgICAgICAgIDB4MDAzNgorI2RlZmluZSBIQ19TSU1BX0hGb2dDTCAgICAgICAgICAweDAwMzcKKyNkZWZpbmUgSENfU0lNQV9IRm9nQ0ggICAgICAgICAgMHgwMDM4CisjZGVmaW5lIEhDX1NJTUFfSEZvZ1N0TCAgICAgICAgIDB4MDAzOQorI2RlZmluZSBIQ19TSU1BX0hGb2dTdEggICAgICAgICAweDAwM2EKKyNkZWZpbmUgSENfU0lNQV9IRm9nT09kTUYgICAgICAgMHgwMDNiCisjZGVmaW5lIEhDX1NJTUFfSEZvZ09PZEVGICAgICAgIDB4MDAzYworI2RlZmluZSBIQ19TSU1BX0hGb2dFbmRMICAgICAgICAweDAwM2QKKyNkZWZpbmUgSENfU0lNQV9IRm9nRGVuc3QgICAgICAgMHgwMDNlCisvKi0tLS0gc3RhcnQgb2YgdGV4dHVyZSAwIHNldHRpbmcgLS0tLQorICovCisjZGVmaW5lIEhDX1NJTUFfSFRYMEwwQmFzTCAgICAgIDB4MDA0MAorI2RlZmluZSBIQ19TSU1BX0hUWDBMMUJhc0wgICAgICAweDAwNDEKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDJCYXNMICAgICAgMHgwMDQyCisjZGVmaW5lIEhDX1NJTUFfSFRYMEwzQmFzTCAgICAgIDB4MDA0MworI2RlZmluZSBIQ19TSU1BX0hUWDBMNEJhc0wgICAgICAweDAwNDQKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDVCYXNMICAgICAgMHgwMDQ1CisjZGVmaW5lIEhDX1NJTUFfSFRYMEw2QmFzTCAgICAgIDB4MDA0NgorI2RlZmluZSBIQ19TSU1BX0hUWDBMN0Jhc0wgICAgICAweDAwNDcKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDhCYXNMICAgICAgMHgwMDQ4CisjZGVmaW5lIEhDX1NJTUFfSFRYMEw5QmFzTCAgICAgIDB4MDA0OQorI2RlZmluZSBIQ19TSU1BX0hUWDBMYUJhc0wgICAgICAweDAwNGEKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGJCYXNMICAgICAgMHgwMDRiCisjZGVmaW5lIEhDX1NJTUFfSFRYMExjQmFzTCAgICAgIDB4MDA0YworI2RlZmluZSBIQ19TSU1BX0hUWDBMZEJhc0wgICAgICAweDAwNGQKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGVCYXNMICAgICAgMHgwMDRlCisjZGVmaW5lIEhDX1NJTUFfSFRYMExmQmFzTCAgICAgIDB4MDA0ZgorI2RlZmluZSBIQ19TSU1BX0hUWDBMMTBCYXNMICAgICAweDAwNTAKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDExQmFzTCAgICAgMHgwMDUxCisjZGVmaW5lIEhDX1NJTUFfSFRYMEwwMTJCYXNIICAgIDB4MDA1MgorI2RlZmluZSBIQ19TSU1BX0hUWDBMMzQ1QmFzSCAgICAweDAwNTMKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDY3OEJhc0ggICAgMHgwMDU0CisjZGVmaW5lIEhDX1NJTUFfSFRYMEw5YWJCYXNIICAgIDB4MDA1NQorI2RlZmluZSBIQ19TSU1BX0hUWDBMY2RlQmFzSCAgICAweDAwNTYKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGYxMDExQmFzSCAgMHgwMDU3CisjZGVmaW5lIEhDX1NJTUFfSFRYMEwwUGl0ICAgICAgIDB4MDA1OAorI2RlZmluZSBIQ19TSU1BX0hUWDBMMVBpdCAgICAgICAweDAwNTkKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDJQaXQgICAgICAgMHgwMDVhCisjZGVmaW5lIEhDX1NJTUFfSFRYMEwzUGl0ICAgICAgIDB4MDA1YgorI2RlZmluZSBIQ19TSU1BX0hUWDBMNFBpdCAgICAgICAweDAwNWMKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDVQaXQgICAgICAgMHgwMDVkCisjZGVmaW5lIEhDX1NJTUFfSFRYMEw2UGl0ICAgICAgIDB4MDA1ZQorI2RlZmluZSBIQ19TSU1BX0hUWDBMN1BpdCAgICAgICAweDAwNWYKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDhQaXQgICAgICAgMHgwMDYwCisjZGVmaW5lIEhDX1NJTUFfSFRYMEw5UGl0ICAgICAgIDB4MDA2MQorI2RlZmluZSBIQ19TSU1BX0hUWDBMYVBpdCAgICAgICAweDAwNjIKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGJQaXQgICAgICAgMHgwMDYzCisjZGVmaW5lIEhDX1NJTUFfSFRYMExjUGl0ICAgICAgIDB4MDA2NAorI2RlZmluZSBIQ19TSU1BX0hUWDBMZFBpdCAgICAgICAweDAwNjUKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGVQaXQgICAgICAgMHgwMDY2CisjZGVmaW5lIEhDX1NJTUFfSFRYMExmUGl0ICAgICAgIDB4MDA2NworI2RlZmluZSBIQ19TSU1BX0hUWDBMMTBQaXQgICAgICAweDAwNjgKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDExUGl0ICAgICAgMHgwMDY5CisjZGVmaW5lIEhDX1NJTUFfSFRYMEwwXzVXRSAgICAgIDB4MDA2YQorI2RlZmluZSBIQ19TSU1BX0hUWDBMNl9iV0UgICAgICAweDAwNmIKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGNfMTFXRSAgICAgMHgwMDZjCisjZGVmaW5lIEhDX1NJTUFfSFRYMEwwXzVIRSAgICAgIDB4MDA2ZAorI2RlZmluZSBIQ19TSU1BX0hUWDBMNl9iSEUgICAgICAweDAwNmUKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGNfMTFIRSAgICAgMHgwMDZmCisjZGVmaW5lIEhDX1NJTUFfSFRYMEwwT1MgICAgICAgIDB4MDA3MAorI2RlZmluZSBIQ19TSU1BX0hUWDBUQiAgICAgICAgICAweDAwNzEKKyNkZWZpbmUgSENfU0lNQV9IVFgwTVBNRCAgICAgICAgMHgwMDcyCisjZGVmaW5lIEhDX1NJTUFfSFRYMENMT0R1ICAgICAgIDB4MDA3MworI2RlZmluZSBIQ19TSU1BX0hUWDBGTSAgICAgICAgICAweDAwNzQKKyNkZWZpbmUgSENfU0lNQV9IVFgwVFJDSCAgICAgICAgMHgwMDc1CisjZGVmaW5lIEhDX1NJTUFfSFRYMFRSQ0wgICAgICAgIDB4MDA3NgorI2RlZmluZSBIQ19TSU1BX0hUWDBUQkMgICAgICAgICAweDAwNzcKKyNkZWZpbmUgSENfU0lNQV9IVFgwVFJBSCAgICAgICAgMHgwMDc4CisjZGVmaW5lIEhDX1NJTUFfSFRYMFRCTENzYXQgICAgIDB4MDA3OQorI2RlZmluZSBIQ19TSU1BX0hUWDBUQkxDb3AgICAgICAweDAwN2EKKyNkZWZpbmUgSENfU0lNQV9IVFgwVEJMTVBmb2cgICAgMHgwMDdiCisjZGVmaW5lIEhDX1NJTUFfSFRYMFRCTEFzYXQgICAgIDB4MDA3YworI2RlZmluZSBIQ19TSU1BX0hUWDBUQkxSQ2EgICAgICAweDAwN2QKKyNkZWZpbmUgSENfU0lNQV9IVFgwVEJMUkNiICAgICAgMHgwMDdlCisjZGVmaW5lIEhDX1NJTUFfSFRYMFRCTFJDYyAgICAgIDB4MDA3ZgorI2RlZmluZSBIQ19TSU1BX0hUWDBUQkxSQ2JpYXMgICAweDAwODAKKyNkZWZpbmUgSENfU0lNQV9IVFgwVEJMUkFhICAgICAgMHgwMDgxCisjZGVmaW5lIEhDX1NJTUFfSFRYMFRCTFJGb2cgICAgIDB4MDA4MgorI2RlZmluZSBIQ19TSU1BX0hUWDBCdW1wTTAwICAgICAweDAwODMKKyNkZWZpbmUgSENfU0lNQV9IVFgwQnVtcE0wMSAgICAgMHgwMDg0CisjZGVmaW5lIEhDX1NJTUFfSFRYMEJ1bXBNMTAgICAgIDB4MDA4NQorI2RlZmluZSBIQ19TSU1BX0hUWDBCdW1wTTExICAgICAweDAwODYKKyNkZWZpbmUgSENfU0lNQV9IVFgwTFNjYWxlICAgICAgMHgwMDg3CisvKi0tLS0gZW5kIG9mIHRleHR1cmUgMCBzZXR0aW5nIC0tLS0gICAgICAweDAwOGYKKyAqLworI2RlZmluZSBIQ19TSU1BX1RYMFRYMV9PRkYgICAgICAweDAwNTAKKy8qLS0tLSBzdGFydCBvZiB0ZXh0dXJlIDEgc2V0dGluZyAtLS0tCisgKi8KKyNkZWZpbmUgSENfU0lNQV9IVFgxTDBCYXNMICAgICAgKEhDX1NJTUFfSFRYMEwwQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDFCYXNMICAgICAgKEhDX1NJTUFfSFRYMEwxQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDJCYXNMICAgICAgKEhDX1NJTUFfSFRYMEwyQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDNCYXNMICAgICAgKEhDX1NJTUFfSFRYMEwzQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDRCYXNMICAgICAgKEhDX1NJTUFfSFRYMEw0QmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDVCYXNMICAgICAgKEhDX1NJTUFfSFRYMEw1QmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDZCYXNMICAgICAgKEhDX1NJTUFfSFRYMEw2QmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDdCYXNMICAgICAgKEhDX1NJTUFfSFRYMEw3QmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDhCYXNMICAgICAgKEhDX1NJTUFfSFRYMEw4QmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDlCYXNMICAgICAgKEhDX1NJTUFfSFRYMEw5QmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGFCYXNMICAgICAgKEhDX1NJTUFfSFRYMExhQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGJCYXNMICAgICAgKEhDX1NJTUFfSFRYMExiQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGNCYXNMICAgICAgKEhDX1NJTUFfSFRYMExjQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGRCYXNMICAgICAgKEhDX1NJTUFfSFRYMExkQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGVCYXNMICAgICAgKEhDX1NJTUFfSFRYMExlQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGZCYXNMICAgICAgKEhDX1NJTUFfSFRYMExmQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDEwQmFzTCAgICAgKEhDX1NJTUFfSFRYMEwxMEJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwxMUJhc0wgICAgIChIQ19TSU1BX0hUWDBMMTFCYXNMICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMMDEyQmFzSCAgICAoSENfU0lNQV9IVFgwTDAxMkJhc0ggKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwzNDVCYXNIICAgIChIQ19TSU1BX0hUWDBMMzQ1QmFzSCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDY3OEJhc0ggICAgKEhDX1NJTUFfSFRYMEw2NzhCYXNIICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMOWFiQmFzSCAgICAoSENfU0lNQV9IVFgwTDlhYkJhc0ggKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxjZGVCYXNIICAgIChIQ19TSU1BX0hUWDBMY2RlQmFzSCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGYxMDExQmFzSCAgKEhDX1NJTUFfSFRYMExmMTAxMUJhc0ggKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwwUGl0ICAgICAgIChIQ19TSU1BX0hUWDBMMFBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDFQaXQgICAgICAgKEhDX1NJTUFfSFRYMEwxUGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMMlBpdCAgICAgICAoSENfU0lNQV9IVFgwTDJQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwzUGl0ICAgICAgIChIQ19TSU1BX0hUWDBMM1BpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDRQaXQgICAgICAgKEhDX1NJTUFfSFRYMEw0UGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMNVBpdCAgICAgICAoSENfU0lNQV9IVFgwTDVQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw2UGl0ICAgICAgIChIQ19TSU1BX0hUWDBMNlBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDdQaXQgICAgICAgKEhDX1NJTUFfSFRYMEw3UGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMOFBpdCAgICAgICAoSENfU0lNQV9IVFgwTDhQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw5UGl0ICAgICAgIChIQ19TSU1BX0hUWDBMOVBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGFQaXQgICAgICAgKEhDX1NJTUFfSFRYMExhUGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMYlBpdCAgICAgICAoSENfU0lNQV9IVFgwTGJQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxjUGl0ICAgICAgIChIQ19TSU1BX0hUWDBMY1BpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGRQaXQgICAgICAgKEhDX1NJTUFfSFRYMExkUGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMZVBpdCAgICAgICAoSENfU0lNQV9IVFgwTGVQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxmUGl0ICAgICAgIChIQ19TSU1BX0hUWDBMZlBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDEwUGl0ICAgICAgKEhDX1NJTUFfSFRYMEwxMFBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDExUGl0ICAgICAgKEhDX1NJTUFfSFRYMEwxMVBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDBfNVdFICAgICAgKEhDX1NJTUFfSFRYMEwwXzVXRSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDZfYldFICAgICAgKEhDX1NJTUFfSFRYMEw2X2JXRSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGNfMTFXRSAgICAgKEhDX1NJTUFfSFRYMExjXzExV0UgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwwXzVIRSAgICAgIChIQ19TSU1BX0hUWDBMMF81SEUgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw2X2JIRSAgICAgIChIQ19TSU1BX0hUWDBMNl9iSEUgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxjXzExSEUgICAgICAoSENfU0lNQV9IVFgwTGNfMTFIRSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDBPUyAgICAgICAgKEhDX1NJTUFfSFRYMEwwT1MgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCICAgICAgICAgIChIQ19TSU1BX0hUWDBUQiArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTVBNRCAgICAgICAgKEhDX1NJTUFfSFRYME1QTUQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUNMT0R1ICAgICAgIChIQ19TSU1BX0hUWDBDTE9EdSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxRk0gICAgICAgICAgKEhDX1NJTUFfSFRYMEZNICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFUUkNIICAgICAgICAoSENfU0lNQV9IVFgwVFJDSCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVFJDTCAgICAgICAgKEhDX1NJTUFfSFRYMFRSQ0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCQyAgICAgICAgIChIQ19TSU1BX0hUWDBUQkMgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRSQUggICAgICAgIChIQ19TSU1BX0hUWDBUUkFIICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMVEMgICAgICAgICAoSENfU0lNQV9IVFgwTFRDICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMVEEgICAgICAgICAoSENfU0lNQV9IVFgwTFRBICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFUQkxDc2F0ICAgICAoSENfU0lNQV9IVFgwVEJMQ3NhdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMQ29wICAgICAgKEhDX1NJTUFfSFRYMFRCTENvcCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMTVBmb2cgICAgKEhDX1NJTUFfSFRYMFRCTE1QZm9nICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFUQkxBc2F0ICAgICAoSENfU0lNQV9IVFgwVEJMQXNhdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMUkNhICAgICAgKEhDX1NJTUFfSFRYMFRCTFJDYSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMUkNiICAgICAgKEhDX1NJTUFfSFRYMFRCTFJDYiArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMUkNjICAgICAgKEhDX1NJTUFfSFRYMFRCTFJDYyArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMUkNiaWFzICAgKEhDX1NJTUFfSFRYMFRCTFJDYmlhcyArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMUkFhICAgICAgKEhDX1NJTUFfSFRYMFRCTFJBYSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMUkZvZyAgICAgKEhDX1NJTUFfSFRYMFRCTFJGb2cgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUJ1bXBNMDAgICAgIChIQ19TSU1BX0hUWDBCdW1wTTAwICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFCdW1wTTAxICAgICAoSENfU0lNQV9IVFgwQnVtcE0wMSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxQnVtcE0xMCAgICAgKEhDX1NJTUFfSFRYMEJ1bXBNMTAgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUJ1bXBNMTEgICAgIChIQ19TSU1BX0hUWDBCdW1wTTExICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMU2NhbGUgICAgICAoSENfU0lNQV9IVFgwTFNjYWxlICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorLyotLS0tIGVuZCBvZiB0ZXh0dXJlIDEgc2V0dGluZyAtLS0tIDB4YWYKKyAqLworI2RlZmluZSBIQ19TSU1BX0hUWFNNRCAgICAgICAgICAweDAwYjAKKyNkZWZpbmUgSENfU0lNQV9IZW5GSUZPQVQgICAgICAgMHgwMGIxCisjZGVmaW5lIEhDX1NJTUFfSEZCRHJhd0ZpcnN0ICAgIDB4MDBiMgorI2RlZmluZSBIQ19TSU1BX0hGQkJhc0wgICAgICAgICAweDAwYjMKKyNkZWZpbmUgSENfU0lNQV9IVEFyYlJDTSAgICAgICAgMHgwMGI0CisjZGVmaW5lIEhDX1NJTUFfSFRBcmJSWiAgICAgICAgIDB4MDBiNQorI2RlZmluZSBIQ19TSU1BX0hUQXJiV1ogICAgICAgICAweDAwYjYKKyNkZWZpbmUgSENfU0lNQV9IVEFyYlJUWCAgICAgICAgMHgwMGI3CisjZGVmaW5lIEhDX1NJTUFfSFRBcmJSQ1cgICAgICAgIDB4MDBiOAorI2RlZmluZSBIQ19TSU1BX0hUQXJiRTIgICAgICAgICAweDAwYjkKKyNkZWZpbmUgSENfU0lNQV9IR0VNSVRvdXQgICAgICAgMHgwMGJhCisjZGVmaW5lIEhDX1NJTUFfSEZ0aFJUWEQgICAgICAgIDB4MDBiYgorI2RlZmluZSBIQ19TSU1BX0hGdGhSVFhBICAgICAgICAweDAwYmMKKy8qIERlZmluZSB0aGUgdGV4dHVyZSBwYWxldHRlIDAKKyAqLworI2RlZmluZSBIQ19TSU1BX0hUUDAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgSENfU0lNQV9IVFAxICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIEhDX1NJTUFfRk9HVEFCTEUgICAgICAgIDB4MDMwMAorI2RlZmluZSBIQ19TSU1BX1NUSVBQTEUgICAgICAgICAweDA0MDAKKyNkZWZpbmUgSENfU0lNQV9IRTNGaXJlICAgICAgICAgMHgwNDQwCisjZGVmaW5lIEhDX1NJTUFfVFJBTlNfU0VUICAgICAgIDB4MDQ0MQorI2RlZmluZSBIQ19TSU1BX0hSRW5nU3QgICAgICAgICAweDA0NDIKKyNkZWZpbmUgSENfU0lNQV9IUkZJRk9lbXB0eSAgICAgMHgwNDQzCisjZGVmaW5lIEhDX1NJTUFfSFJGSUZPZnVsbCAgICAgIDB4MDQ0NAorI2RlZmluZSBIQ19TSU1BX0hSRXJyICAgICAgICAgICAweDA0NDUKKyNkZWZpbmUgSENfU0lNQV9GSUZPc3RhdHVzICAgICAgMHgwNDQ2CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqIERlZmluZSB0aGUgQUdQIGNvbW1hbmQgaGVhZGVyLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBIQ19BQ01EX01BU0sgICAgICAgICAgICAweGZlMDAwMDAwCisjZGVmaW5lIEhDX0FDTURfU1VCX01BU0sgICAgICAgIDB4MGMwMDAwMDAKKyNkZWZpbmUgSENfQUNNRF9IQ21kQSAgICAgICAgICAgMHhlZTAwMDAwMAorI2RlZmluZSBIQ19BQ01EX0hDbWRCICAgICAgICAgICAweGVjMDAwMDAwCisjZGVmaW5lIEhDX0FDTURfSENtZEMgICAgICAgICAgIDB4ZWEwMDAwMDAKKyNkZWZpbmUgSENfQUNNRF9IMSAgICAgICAgICAgICAgMHhmMDAwMDAwMAorI2RlZmluZSBIQ19BQ01EX0gyICAgICAgICAgICAgICAweGYyMDAwMDAwCisjZGVmaW5lIEhDX0FDTURfSDMgICAgICAgICAgICAgIDB4ZjQwMDAwMDAKKyNkZWZpbmUgSENfQUNNRF9INCAgICAgICAgICAgICAgMHhmNjAwMDAwMAorCisjZGVmaW5lIEhDX0FDTURfSDFJT19NQVNLICAgICAgIDB4MDAwMDAxZmYKKyNkZWZpbmUgSENfQUNNRF9IMklPMV9NQVNLICAgICAgMHgwMDFmZjAwMAorI2RlZmluZSBIQ19BQ01EX0gySU8yX01BU0sgICAgICAweDAwMDAwMWZmCisjZGVmaW5lIEhDX0FDTURfSDJJTzFfU0hJRlQgICAgIDEyCisjZGVmaW5lIEhDX0FDTURfSDJJTzJfU0hJRlQgICAgIDAKKyNkZWZpbmUgSENfQUNNRF9IM0lPX01BU0sgICAgICAgMHgwMDAwMDFmZgorI2RlZmluZSBIQ19BQ01EX0gzQ09VTlRfTUFTSyAgICAweDAxZmZmMDAwCisjZGVmaW5lIEhDX0FDTURfSDNDT1VOVF9TSElGVCAgIDEyCisjZGVmaW5lIEhDX0FDTURfSDRJRF9NQVNLICAgICAgIDB4MDAwMDAxZmYKKyNkZWZpbmUgSENfQUNNRF9INENPVU5UX01BU0sgICAgMHgwMWZmZmUwMAorI2RlZmluZSBIQ19BQ01EX0g0Q09VTlRfU0hJRlQgICA5CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogRGVmaW5lIEhlYWRlcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEhDX0hFQURFUjIJCTB4RjIxMEYxMTAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBEZWZpbmUgRHVtbXkgVmFsdWUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBIQ19EVU1NWQkJMHhDQ0NDQ0NDQworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBEZWZpbmUgZm9yIERNQSB1c2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBIQUxDWU9OX0hFQURFUjIgICAgIDBYRjIxMEYxMTAKKyNkZWZpbmUgSEFMQ1lPTl9GSVJFQ01EICAgICAwWEVFMTAwMDAwCisjZGVmaW5lIEhBTENZT05fRklSRU1BU0sgICAgMFhGRkYwMDAwMAorI2RlZmluZSBIQUxDWU9OX0NNREIgICAgICAgIDBYRUMwMDAwMDAKKyNkZWZpbmUgSEFMQ1lPTl9DTURCTUFTSyAgICAwWEZGRkUwMDAwCisjZGVmaW5lIEhBTENZT05fU1VCX0FERFIwICAgMFgwMDAwMDAwMAorI2RlZmluZSBIQUxDWU9OX0hFQURFUjFNQVNLIDBYRkZGRkZDMDAKKyNkZWZpbmUgSEFMQ1lPTl9IRUFERVIxICAgICAwWEYwMDAwMDAwCisjZGVmaW5lIEhDX1N1YkFfSEFHUEJzdEwgICAgICAgIDB4MDA2MAorI2RlZmluZSBIQ19TdWJBX0hBR1BCZW5kTCAgICAgICAweDAwNjEKKyNkZWZpbmUgSENfU3ViQV9IQUdQQ01OVCAgICAgICAgMHgwMDYyCisjZGVmaW5lIEhDX1N1YkFfSEFHUEJwTCAgICAgICAgIDB4MDA2MworI2RlZmluZSBIQ19TdWJBX0hBR1BCcEggICAgICAgICAweDAwNjQKKyNkZWZpbmUgSENfSEFHUENNTlRfTUFTSyAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBIQ19IQ21kRXJyQ2xyX01BU0sgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEhDX0hBR1BCZW5kSF9NQVNLICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSEFHUEJzdEhfTUFTSyAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IQUdQQmVuZEhfU0hJRlQgICAgICA4CisjZGVmaW5lIEhDX0hBR1BCc3RIX1NISUZUICAgICAgIDAKKyNkZWZpbmUgSENfSEFHUEJwTF9NQVNLICAgICAgICAgMHgwMGZmZmZmYworI2RlZmluZSBIQ19IQUdQQnBJRF9NQVNLICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX0hBR1BCcElEX1BBVVNFICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSEFHUEJwSURfSlVNUCAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIQ19IQUdQQnBJRF9TVE9QICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX0hBR1BCcEhfTUFTSyAgICAgICAgIDB4MDBmZmZmZmYKKworCisjZGVmaW5lIFZJQV9WSURFT19IRUFERVI1ICAgICAgIDB4RkUwNDAwMDAKKyNkZWZpbmUgVklBX1ZJREVPX0hFQURFUjYgICAgICAgMHhGRTA1MDAwMAorI2RlZmluZSBWSUFfVklERU9fSEVBREVSNyAgICAgICAweEZFMDYwMDAwCisjZGVmaW5lIFZJQV9WSURFT01BU0sgICAgICAgICAgIDB4RkZGRjAwMDAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmY4Mzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hLmMKQEAgLTAsMCArMSw3NDEgQEAKKy8qIHZpYV9kbWEuYyAtLSBETUEgc3VwcG9ydCBmb3IgdGhlIFZJQSBVbmljaHJvbWUvUHJvCisgKiAKKyAqIENvcHlyaWdodCAyMDAzIFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29weXJpZ2h0IDIwMDQgRGlnZW8sIEluYy4sIFBhbG8gQWx0bywgQ0EsIFUuUy5BLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIAorICogQ29weXJpZ2h0IDIwMDQgVGhlIFVuaWNocm9tZSBwcm9qZWN0LgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIAorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiAKKyAqICAgIFR1bmdzdGVuIEdyYXBoaWNzLCAKKyAqICAgIEVyZGkgQ2hlbiwgCisgKiAgICBUaG9tYXMgSGVsbHN0cm9tLgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAidmlhX2RybS5oIgorI2luY2x1ZGUgInZpYV9kcnYuaCIKKyNpbmNsdWRlICJ2aWFfM2RfcmVnLmgiCisKKyNkZWZpbmUgQ01EQlVGX0FMSUdOTUVOVF9TSVpFICAgKDB4MTAwKQorI2RlZmluZSBDTURCVUZfQUxJR05NRU5UX01BU0sgICAoMHgwZmYpCisKKy8qIGRlZmluZXMgZm9yIFZJQSAzRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVklBX1JFR19TVEFUVVMgICAgICAgICAgMHg0MDAKKyNkZWZpbmUgVklBX1JFR19UUkFOU0VUICAgICAgICAgMHg0M0MKKyNkZWZpbmUgVklBX1JFR19UUkFOU1BBQ0UgICAgICAgMHg0NDAKKworLyogVklBX1JFR19TVEFUVVMoMHg0MDApOiBFbmdpbmUgU3RhdHVzICovCisjZGVmaW5lIFZJQV9DTURfUkdUUl9CVVNZICAgICAgIDB4MDAwMDAwODAJLyogQ29tbWFuZCBSZWd1bGF0b3IgaXMgYnVzeSAqLworI2RlZmluZSBWSUFfMkRfRU5HX0JVU1kgICAgICAgICAweDAwMDAwMDAxCS8qIDJEIEVuZ2luZSBpcyBidXN5ICovCisjZGVmaW5lIFZJQV8zRF9FTkdfQlVTWSAgICAgICAgIDB4MDAwMDAwMDIJLyogM0QgRW5naW5lIGlzIGJ1c3kgKi8KKyNkZWZpbmUgVklBX1ZSX1FVRVVFX0JVU1kgICAgICAgMHgwMDAyMDAwMAkvKiBWaXJ0dWFsIFF1ZXVlIGlzIGJ1c3kgKi8KKworI2RlZmluZSBTZXRSZWcyREFHUChuUmVnLCBuRGF0YSkgewkJCQlcCisJKigodWludDMyX3QgKikodmIpKSA9ICgoblJlZykgPj4gMikgfCBIQUxDWU9OX0hFQURFUjE7CVwKKwkqKCh1aW50MzJfdCAqKSh2YikgKyAxKSA9IChuRGF0YSk7CQkJXAorCXZiID0gKCh1aW50MzJfdCAqKXZiKSArIDI7CQkJCVwKKwlkZXZfcHJpdi0+ZG1hX2xvdyArPTg7CQkJCQlcCit9CisKKyNkZWZpbmUgdmlhX2ZsdXNoX3dyaXRlX2NvbWJpbmUoKSBEUk1fTUVNT1JZQkFSUklFUigpIAorCisjZGVmaW5lIFZJQV9PVVRfUklOR19RVyh3MSx3MikJCQlcCisJKnZiKysgPSAodzEpOwkJCQlcCisJKnZiKysgPSAodzIpOwkJCQlcCisJZGV2X3ByaXYtPmRtYV9sb3cgKz0gODsgCisKK3N0YXRpYyB2b2lkIHZpYV9jbWRidWZfc3RhcnQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3BhdXNlKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9yZXNldChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKK3N0YXRpYyB2b2lkIHZpYV9jbWRidWZfcmV3aW5kKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOworc3RhdGljIGludCB2aWFfd2FpdF9pZGxlKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOworc3RhdGljIHZvaWQgdmlhX3BhZF9jYWNoZShkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBxd29yZHMpOworCisKKy8qCisgKiBGcmVlIHNwYWNlIGluIGNvbW1hbmQgYnVmZmVyLgorICovCisKK3N0YXRpYyB1aW50MzJfdAordmlhX2NtZGJ1Zl9zcGFjZShkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJdWludDMyX3QgYWdwX2Jhc2UgPSBkZXZfcHJpdi0+ZG1hX29mZnNldCArIAorCQkodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyOworCXVpbnQzMl90IGh3X2FkZHIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cikgLSBhZ3BfYmFzZTsKKwkKKwlyZXR1cm4gKChod19hZGRyIDw9IGRldl9wcml2LT5kbWFfbG93KSA/IAorCQkoZGV2X3ByaXYtPmRtYV9oaWdoICsgaHdfYWRkciAtIGRldl9wcml2LT5kbWFfbG93KSA6IAorCQkoaHdfYWRkciAtIGRldl9wcml2LT5kbWFfbG93KSk7Cit9CisKKy8qCisgKiBIb3cgbXVjaCBkb2VzIHRoZSBjb21tYW5kIHJlZ3VsYXRvciBsYWcgYmVoaW5kPworICovCisKK3N0YXRpYyB1aW50MzJfdAordmlhX2NtZGJ1Zl9sYWcoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXVpbnQzMl90IGFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAKKwkJKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKKwl1aW50MzJfdCBod19hZGRyID0gKihkZXZfcHJpdi0+aHdfYWRkcl9wdHIpIC0gYWdwX2Jhc2U7CisJCisJcmV0dXJuICgoaHdfYWRkciA8PSBkZXZfcHJpdi0+ZG1hX2xvdykgPyAKKwkJKGRldl9wcml2LT5kbWFfbG93IC0gaHdfYWRkcikgOiAKKwkJKGRldl9wcml2LT5kbWFfd3JhcCArIGRldl9wcml2LT5kbWFfbG93IC0gaHdfYWRkcikpOworfQorCisvKgorICogQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4gc2l6ZSBmaXRzIGluIHRoZSBidWZmZXIsIG90aGVyd2lzZSB3YWl0LgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50Cit2aWFfY21kYnVmX3dhaXQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdWludDMyX3QgYWdwX2Jhc2UgPSBkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHI7CisJdWludDMyX3QgY3VyX2FkZHIsIGh3X2FkZHIsIG5leHRfYWRkcjsKKwl2b2xhdGlsZSB1aW50MzJfdCAqaHdfYWRkcl9wdHI7CisJdWludDMyX3QgY291bnQ7CisJaHdfYWRkcl9wdHIgPSBkZXZfcHJpdi0+aHdfYWRkcl9wdHI7CisJY3VyX2FkZHIgPSBkZXZfcHJpdi0+ZG1hX2xvdzsKKwluZXh0X2FkZHIgPSBjdXJfYWRkciArIHNpemUgKyA1MTIqMTAyNDsKKwljb3VudCA9IDEwMDAwMDA7CisJZG8geworCSAgICAgICAgaHdfYWRkciA9ICpod19hZGRyX3B0ciAtIGFncF9iYXNlOworCQlpZiAoY291bnQtLSA9PSAwKSB7CisJCQlEUk1fRVJST1IoInZpYV9jbWRidWZfd2FpdCB0aW1lZCBvdXQgaHcgJXggY3VyX2FkZHIgJXggbmV4dF9hZGRyICV4XG4iLAorCQkJCSAgaHdfYWRkciwgY3VyX2FkZHIsIG5leHRfYWRkcik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IHdoaWxlICgoY3VyX2FkZHIgPCBod19hZGRyKSAmJiAobmV4dF9hZGRyID49IGh3X2FkZHIpKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogQ2hlY2tzIHdoZXRoZXIgYnVmZmVyIGhlYWQgaGFzIHJlYWNoIHRoZSBlbmQuIFJld2luZCB0aGUgcmluZyBidWZmZXIKKyAqIHdoZW4gbmVjZXNzYXJ5LgorICoKKyAqIFJldHVybnMgdmlydHVhbCBwb2ludGVyIHRvIHJpbmcgYnVmZmVyLgorICovCisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgKnZpYV9jaGVja19kbWEoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlpZiAoKGRldl9wcml2LT5kbWFfbG93ICsgc2l6ZSArIDQqQ01EQlVGX0FMSUdOTUVOVF9TSVpFKSA+IGRldl9wcml2LT5kbWFfaGlnaCkgeworCQl2aWFfY21kYnVmX3Jld2luZChkZXZfcHJpdik7CisJfQorCWlmICh2aWFfY21kYnVmX3dhaXQoZGV2X3ByaXYsIHNpemUpICE9IDApIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuICh1aW50MzJfdCAqKSAoZGV2X3ByaXYtPmRtYV9wdHIgKyBkZXZfcHJpdi0+ZG1hX2xvdyk7Cit9CisKK2ludCB2aWFfZG1hX2NsZWFudXAoZHJtX2RldmljZV90ICogZGV2KQoreworCWlmIChkZXYtPmRldl9wcml2YXRlKSB7CisJCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9CisJCQkoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCQlpZiAoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCkgeworCQkJdmlhX2NtZGJ1Zl9yZXNldChkZXZfcHJpdik7CisKKwkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKCZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7CisJCQlkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ID0gTlVMTDsKKwkJfQorCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlhX2luaXRpYWxpemUoZHJtX2RldmljZV90ICogZGV2LAorCQkJICBkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJICBkcm1fdmlhX2RtYV9pbml0X3QgKiBpbml0KQoreworCWlmICghZGV2X3ByaXYgfHwgIWRldl9wcml2LT5tbWlvKSB7CisJCURSTV9FUlJPUigidmlhX2RtYV9pbml0IGNhbGxlZCBiZWZvcmUgdmlhX21hcF9pbml0XG4iKTsKKwkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKKwl9CisKKwlpZiAoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCAhPSBOVUxMKSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIGFnYWluIHdpdGhvdXQgY2FsbGluZyBjbGVhbnVwXG4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOworCX0KKworCWlmICghZGV2LT5hZ3AgfHwgIWRldi0+YWdwLT5iYXNlKSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggbm8gYWdwIG1lbW9yeSBhdmFpbGFibGVcbiIsIAorCQkJICBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOworCX0KKworCWRldl9wcml2LT5yaW5nLm1hcC5vZmZzZXQgPSBkZXYtPmFncC0+YmFzZSArIGluaXQtPm9mZnNldDsKKwlkZXZfcHJpdi0+cmluZy5tYXAuc2l6ZSA9IGluaXQtPnNpemU7CisJZGV2X3ByaXYtPnJpbmcubWFwLnR5cGUgPSAwOworCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7CisJZGV2X3ByaXYtPnJpbmcubWFwLm10cnIgPSAwOworCisJZHJtX2NvcmVfaW9yZW1hcCgmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOworCisJaWYgKGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPT0gTlVMTCkgeworCQl2aWFfZG1hX2NsZWFudXAoZGV2KTsKKwkJRFJNX0VSUk9SKCJjYW4gbm90IGlvcmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciIKKwkJCSAgIiByaW5nIGJ1ZmZlclxuIik7CisJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CisJfQorCisJZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9IGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGU7CisKKwlkZXZfcHJpdi0+ZG1hX3B0ciA9IGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQ7CisJZGV2X3ByaXYtPmRtYV9sb3cgPSAwOworCWRldl9wcml2LT5kbWFfaGlnaCA9IGluaXQtPnNpemU7CisJZGV2X3ByaXYtPmRtYV93cmFwID0gaW5pdC0+c2l6ZTsKKwlkZXZfcHJpdi0+ZG1hX29mZnNldCA9IGluaXQtPm9mZnNldDsKKwlkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIgPSBOVUxMOworCWRldl9wcml2LT5od19hZGRyX3B0ciA9IGRldl9wcml2LT5tbWlvLT5oYW5kbGUgKyBpbml0LT5yZWdfcGF1c2VfYWRkcjsKKworCXZpYV9jbWRidWZfc3RhcnQoZGV2X3ByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFfZG1hX2luaXQoRFJNX0lPQ1RMX0FSR1MpCit7CisJRFJNX0RFVklDRTsKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1fdmlhX2RtYV9pbml0X3QgaW5pdDsKKwlpbnQgcmV0Y29kZSA9IDA7CisKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoaW5pdCwgKGRybV92aWFfZG1hX2luaXRfdCAqKSBkYXRhLAorCQkJCSBzaXplb2YoaW5pdCkpOworCisJc3dpdGNoIChpbml0LmZ1bmMpIHsKKwljYXNlIFZJQV9JTklUX0RNQToKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0Y29kZSA9IERSTV9FUlIoRVBFUk0pOworCQllbHNlCisJCQlyZXRjb2RlID0gdmlhX2luaXRpYWxpemUoZGV2LCBkZXZfcHJpdiwgJmluaXQpOworCQlicmVhazsKKwljYXNlIFZJQV9DTEVBTlVQX0RNQToKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0Y29kZSA9IERSTV9FUlIoRVBFUk0pOworCQllbHNlCisJCQlyZXRjb2RlID0gdmlhX2RtYV9jbGVhbnVwKGRldik7CisJCWJyZWFrOworICAgICAgICBjYXNlIFZJQV9ETUFfSU5JVElBTElaRUQ6CisJCXJldGNvZGUgPSAoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCAhPSBOVUxMKSA/IAorCQkJMDogRFJNX0VSUiggRUZBVUxUICk7CisJICAgICAgICBicmVhazsKKwlkZWZhdWx0OgorCQlyZXRjb2RlID0gRFJNX0VSUihFSU5WQUwpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0Y29kZTsKK30KKworCisKK3N0YXRpYyBpbnQgdmlhX2Rpc3BhdGNoX2NtZGJ1ZmZlcihkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV92aWFfY21kYnVmZmVyX3QgKiBjbWQpCit7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2OworCXVpbnQzMl90ICp2YjsKKwlpbnQgcmV0OworCisJZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aG91dCBpbml0aWFsaXppbmcgQUdQIHJpbmcgYnVmZmVyLlxuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKKwl9CisKKwlpZiAoY21kLT5zaXplID4gVklBX1BDSV9CVUZfU0laRSkgeworCQlyZXR1cm4gRFJNX0VSUihFTk9NRU0pOworCX0gCisKKworCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoZGV2X3ByaXYtPnBjaV9idWYsIGNtZC0+YnVmLCBjbWQtPnNpemUpKQorCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOworCisJLyoKKwkgKiBSdW5uaW5nIHRoaXMgZnVuY3Rpb24gb24gQUdQIG1lbW9yeSBpcyBkZWFkIHNsb3cuIFRoZXJlZm9yZQorCSAqIHdlIHJ1biBpdCBvbiBhIHRlbXBvcmFyeSBjYWNoZWFibGUgc3lzdGVtIG1lbW9yeSBidWZmZXIgYW5kCisJICogY29weSBpdCB0byBBR1AgbWVtb3J5IHdoZW4gcmVhZHkuCisJICovCisKKwkJCisJaWYgKChyZXQgPSB2aWFfdmVyaWZ5X2NvbW1hbmRfc3RyZWFtKCh1aW50MzJfdCAqKWRldl9wcml2LT5wY2lfYnVmLCBjbWQtPnNpemUsIGRldiwgMSkpKSB7CisJCXJldHVybiByZXQ7CisJfQorICAgICAgIAkKKwkKKwl2YiA9IHZpYV9jaGVja19kbWEoZGV2X3ByaXYsIChjbWQtPnNpemUgPCAweDEwMCkgPyAweDEwMiA6IGNtZC0+c2l6ZSk7CisJaWYgKHZiID09IE5VTEwpIHsKKwkJcmV0dXJuIERSTV9FUlIoRUFHQUlOKTsKKwl9CisKKwltZW1jcHkodmIsIGRldl9wcml2LT5wY2lfYnVmLCBjbWQtPnNpemUpOworCQorCWRldl9wcml2LT5kbWFfbG93ICs9IGNtZC0+c2l6ZTsKKworCS8qCisJICogU21hbGwgc3VibWlzc2lvbnMgc29tZWhvdyBzdGFsbHMgdGhlIENQVS4gKEFHUCBjYWNoZSBlZmZlY3RzPykKKwkgKiBwYWQgdG8gZ3JlYXRlciBzaXplLgorCSAqLworCisJaWYgKGNtZC0+c2l6ZSA8IDB4MTAwKQorCSAgdmlhX3BhZF9jYWNoZShkZXZfcHJpdiwoMHgxMDAgLSBjbWQtPnNpemUpID4+IDMpOworCXZpYV9jbWRidWZfcGF1c2UoZGV2X3ByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFfZHJpdmVyX2RtYV9xdWllc2NlbnQoZHJtX2RldmljZV90ICogZGV2KQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoIXZpYV93YWl0X2lkbGUoZGV2X3ByaXYpKSB7CisJCXJldHVybiBEUk1fRVJSKEVCVVNZKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFfZmx1c2hfaW9jdGwoRFJNX0lPQ1RMX0FSR1MpCit7CisJRFJNX0RFVklDRTsKKworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisKKwlyZXR1cm4gdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KGRldik7Cit9CisKK2ludCB2aWFfY21kYnVmZmVyKERSTV9JT0NUTF9BUkdTKQoreworCURSTV9ERVZJQ0U7CisJZHJtX3ZpYV9jbWRidWZmZXJfdCBjbWRidWY7CisJaW50IHJldDsKKworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoY21kYnVmLCAoZHJtX3ZpYV9jbWRidWZmZXJfdCAqKSBkYXRhLAorCQkJCSBzaXplb2YoY21kYnVmKSk7CisKKwlEUk1fREVCVUcoInZpYSBjbWRidWZmZXIsIGJ1ZiAlcCBzaXplICVsdVxuIiwgY21kYnVmLmJ1ZiwgY21kYnVmLnNpemUpOworCisJcmV0ID0gdmlhX2Rpc3BhdGNoX2NtZGJ1ZmZlcihkZXYsICZjbWRidWYpOworCWlmIChyZXQpIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIGludCAKK3ZpYV9wYXJzZV9jb21tYW5kX3N0cmVhbShkcm1fZGV2aWNlX3QgKmRldiwgY29uc3QgdWludDMyX3QgKiBidWYsIHVuc2lnbmVkIGludCBzaXplKTsKK3N0YXRpYyBpbnQgdmlhX2Rpc3BhdGNoX3BjaV9jbWRidWZmZXIoZHJtX2RldmljZV90ICogZGV2LAorCQkJCSAgICAgIGRybV92aWFfY21kYnVmZmVyX3QgKiBjbWQpCit7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKGNtZC0+c2l6ZSA+IFZJQV9QQ0lfQlVGX1NJWkUpIHsKKwkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKKwl9IAorCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoZGV2X3ByaXYtPnBjaV9idWYsIGNtZC0+YnVmLCBjbWQtPnNpemUpKQorCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOworCQorCWlmICgocmV0ID0gdmlhX3ZlcmlmeV9jb21tYW5kX3N0cmVhbSgodWludDMyX3QgKilkZXZfcHJpdi0+cGNpX2J1ZiwgY21kLT5zaXplLCBkZXYsIDApKSkgeworCQlyZXR1cm4gcmV0OworCX0KKwkKKwlyZXQgPSB2aWFfcGFyc2VfY29tbWFuZF9zdHJlYW0oZGV2LCAoY29uc3QgdWludDMyX3QgKilkZXZfcHJpdi0+cGNpX2J1ZiwgY21kLT5zaXplKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdmlhX3BjaV9jbWRidWZmZXIoRFJNX0lPQ1RMX0FSR1MpCit7CisJRFJNX0RFVklDRTsKKwlkcm1fdmlhX2NtZGJ1ZmZlcl90IGNtZGJ1ZjsKKwlpbnQgcmV0OworCisJTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChjbWRidWYsIChkcm1fdmlhX2NtZGJ1ZmZlcl90ICopIGRhdGEsCisJCQkJIHNpemVvZihjbWRidWYpKTsKKworCURSTV9ERUJVRygidmlhX3BjaV9jbWRidWZmZXIsIGJ1ZiAlcCBzaXplICVsdVxuIiwgY21kYnVmLmJ1ZiwKKwkJICBjbWRidWYuc2l6ZSk7CisKKwlyZXQgPSB2aWFfZGlzcGF0Y2hfcGNpX2NtZGJ1ZmZlcihkZXYsICZjbWRidWYpOworCWlmIChyZXQpIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90ICp2aWFfYWxpZ25fYnVmZmVyKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkJCSB1aW50MzJfdCAqIHZiLCBpbnQgcXdfY291bnQpCit7CisgICAgICAgIGZvciAoOyBxd19jb3VudCA+IDA7IC0tcXdfY291bnQpIHsKKwkJVklBX09VVF9SSU5HX1FXKEhDX0RVTU1ZLCBIQ19EVU1NWSk7CisJfQorCXJldHVybiB2YjsKK30KKworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYnkgcmluZyBidWZmZXIgbWFuZ2VtZW50IGNvZGUuCisgKgorICogUmV0dXJucyB2aXJ0dWFsIHBvaW50ZXIgdG8gcmluZyBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgKnZpYV9nZXRfZG1hKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit7CisJcmV0dXJuICh1aW50MzJfdCAqKSAoZGV2X3ByaXYtPmRtYV9wdHIgKyBkZXZfcHJpdi0+ZG1hX2xvdyk7Cit9CisKKy8qCisgKiBIb29rcyBhIHNlZ21lbnQgb2YgZGF0YSBpbnRvIHRoZSB0YWlsIG9mIHRoZSByaW5nLWJ1ZmZlciBieQorICogbW9kaWZ5aW5nIHRoZSBwYXVzZSBhZGRyZXNzIHN0b3JlZCBpbiB0aGUgYnVmZmVyIGl0c2VsZi4gSWYKKyAqIHRoZSByZWd1bGF0b3IgaGFzIGFscmVhZHkgcGF1c2VkLCByZXN0YXJ0IGl0LgorICovCitzdGF0aWMgaW50IHZpYV9ob29rX3NlZ21lbnQoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LAorCQkJICAgIHVpbnQzMl90IHBhdXNlX2FkZHJfaGksIHVpbnQzMl90IHBhdXNlX2FkZHJfbG8sCisJCQkgICAgaW50IG5vX3BjaV9maXJlKQoreworCWludCBwYXVzZWQsIGNvdW50OworCXZvbGF0aWxlIHVpbnQzMl90ICpwYXVzZWRfYXQgPSBkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHI7CisKKwl2aWFfZmx1c2hfd3JpdGVfY29tYmluZSgpOworCXdoaWxlKCEgKih2aWFfZ2V0X2RtYShkZXZfcHJpdiktMSkpOworCSpkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIgPSBwYXVzZV9hZGRyX2xvOworCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7CisKKwkvKgorCSAqIFRoZSBiZWxvdyBzdGF0ZW1lbnQgaXMgaW5zZXJ0ZWQgdG8gcmVhbGx5IGZvcmNlIHRoZSBmbHVzaC4KKwkgKiBOb3Qgc3VyZSBpdCBpcyBuZWVkZWQuCisJICovCisKKwl3aGlsZSghICpkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIpOworCWRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciA9IHZpYV9nZXRfZG1hKGRldl9wcml2KSAtIDE7CisJd2hpbGUoISAqZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyKTsKKworCisJcGF1c2VkID0gMDsKKwljb3VudCA9IDIwOyAKKworCXdoaWxlICghKHBhdXNlZCA9IChWSUFfUkVBRCgweDQxYykgJiAweDgwMDAwMDAwKSkgJiYgY291bnQtLSk7CisJaWYgKChjb3VudCA8PSA4KSAmJiAoY291bnQgPj0gMCkpIHsKKwkJdWludDMyX3Qgcmd0ciwgcHRyOworCQlyZ3RyID0gKihkZXZfcHJpdi0+aHdfYWRkcl9wdHIpOworCQlwdHIgPSAoKGNoYXIgKilkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIgLSBkZXZfcHJpdi0+ZG1hX3B0cikgKyAKKwkJCWRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkciArIDQgLSAKKwkJCUNNREJVRl9BTElHTk1FTlRfU0laRTsKKwkJaWYgKHJndHIgPD0gcHRyKSB7CisJCQlEUk1fRVJST1IoIkNvbW1hbmQgcmVndWxhdG9yXG5wYXVzZWQgYXQgY291bnQgJWQsIGFkZHJlc3MgJXgsICIKKwkJCQkgICJ3aGlsZSBjdXJyZW50IHBhdXNlIGFkZHJlc3MgaXMgJXguXG4iCisJCQkJICAiUGxlYXNlIG1haWwgdGhpcyBtZXNzYWdlIHRvICIKKwkJCQkgICI8dW5pY2hyb21lLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIsCisJCQkJICBjb3VudCwgcmd0ciwgcHRyKTsKKwkJfQorCX0KKwkJCisJaWYgKHBhdXNlZCAmJiAhbm9fcGNpX2ZpcmUpIHsKKwkgICAgICAgIHVpbnQzMl90IHJndHIscHRyOworCQl1aW50MzJfdCBwdHJfbG93OworCisJCWNvdW50ID0gMTAwMDAwMDsKKwkJd2hpbGUgKChWSUFfUkVBRChWSUFfUkVHX1NUQVRVUykgJiBWSUFfQ01EX1JHVFJfQlVTWSkgJiYgY291bnQtLSk7CisJCQorCQlyZ3RyID0gKihkZXZfcHJpdi0+aHdfYWRkcl9wdHIpOworCQlwdHIgPSAoKGNoYXIgKilwYXVzZWRfYXQgLSBkZXZfcHJpdi0+ZG1hX3B0cikgKyAKKwkJCWRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkciArIDQ7CisJCQorCisJCXB0cl9sb3cgPSAocHRyID4gMypDTURCVUZfQUxJR05NRU5UX1NJWkUpID8gCisJCQlwdHIgLSAzKkNNREJVRl9BTElHTk1FTlRfU0laRSA6IDA7CisJCWlmIChyZ3RyIDw9IHB0ciAmJiByZ3RyID49IHB0cl9sb3cpIHsKKwkJCVZJQV9XUklURShWSUFfUkVHX1RSQU5TRVQsIChIQ19QYXJhVHlwZV9QcmVDUiA8PCAxNikpOworCQkJVklBX1dSSVRFKFZJQV9SRUdfVFJBTlNQQUNFLCBwYXVzZV9hZGRyX2hpKTsKKwkJCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgcGF1c2VfYWRkcl9sbyk7CisJCX0gCisJfQorCXJldHVybiBwYXVzZWQ7Cit9CisKKworCitzdGF0aWMgaW50IHZpYV93YWl0X2lkbGUoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3sKKwlpbnQgY291bnQgPSAxMDAwMDAwMDsKKwl3aGlsZSAoY291bnQtLSAmJiAoVklBX1JFQUQoVklBX1JFR19TVEFUVVMpICYKKwkJCSAgIChWSUFfQ01EX1JHVFJfQlVTWSB8IFZJQV8yRF9FTkdfQlVTWSB8CisJCQkgICAgVklBXzNEX0VOR19CVVNZKSkpIDsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCAqdmlhX2FsaWduX2NtZChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1aW50MzJfdCBjbWRfdHlwZSwKKwkJCSAgICAgICB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCAqY21kX2FkZHJfaGksIAorCQkJICAgICAgIHVpbnQzMl90ICpjbWRfYWRkcl9sbywKKwkJCSAgICAgICBpbnQgc2tpcF93YWl0KQoreworCXVpbnQzMl90IGFncF9iYXNlOworCXVpbnQzMl90IGNtZF9hZGRyLCBhZGRyX2xvLCBhZGRyX2hpOworCXVpbnQzMl90ICp2YjsKKwl1aW50MzJfdCBxd19wYWRfY291bnQ7CisKKwlpZiAoIXNraXBfd2FpdCkKKwkJdmlhX2NtZGJ1Zl93YWl0KGRldl9wcml2LCAyKkNNREJVRl9BTElHTk1FTlRfU0laRSk7CisKKwl2YiA9IHZpYV9nZXRfZG1hKGRldl9wcml2KTsKKwlWSUFfT1VUX1JJTkdfUVcoIEhDX0hFQURFUjIgfCAoKFZJQV9SRUdfVFJBTlNFVCA+PiAyKSA8PCAxMikgfAorCQkJIChWSUFfUkVHX1RSQU5TUEFDRSA+PiAyKSwgSENfUGFyYVR5cGVfUHJlQ1IgPDwgMTYpOyAKKwlhZ3BfYmFzZSA9IGRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKKwlxd19wYWRfY291bnQgPSAoQ01EQlVGX0FMSUdOTUVOVF9TSVpFID4+IDMpIC0KKwkJKChkZXZfcHJpdi0+ZG1hX2xvdyAmIENNREJVRl9BTElHTk1FTlRfTUFTSykgPj4gMyk7CisKKwkKKwljbWRfYWRkciA9IChhZGRyKSA/IGFkZHIgOiAKKwkJYWdwX2Jhc2UgKyBkZXZfcHJpdi0+ZG1hX2xvdyAtIDggKyAocXdfcGFkX2NvdW50IDw8IDMpOworCWFkZHJfbG8gPSAoKEhDX1N1YkFfSEFHUEJwTCA8PCAyNCkgfCAoY21kX3R5cGUgJiBIQ19IQUdQQnBJRF9NQVNLKSB8CisJCSAgIChjbWRfYWRkciAmIEhDX0hBR1BCcExfTUFTSykpOworCWFkZHJfaGkgPSAoKEhDX1N1YkFfSEFHUEJwSCA8PCAyNCkgfCAoY21kX2FkZHIgPj4gMjQpKTsKKworCXZiID0gdmlhX2FsaWduX2J1ZmZlcihkZXZfcHJpdiwgdmIsIHF3X3BhZF9jb3VudCAtIDEpOworCVZJQV9PVVRfUklOR19RVygqY21kX2FkZHJfaGkgPSBhZGRyX2hpLCAKKwkJCSpjbWRfYWRkcl9sbyA9IGFkZHJfbG8pOworCXJldHVybiB2YjsKK30KKworCisKKworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9zdGFydChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQoreworCXVpbnQzMl90IHBhdXNlX2FkZHJfbG8sIHBhdXNlX2FkZHJfaGk7CisJdWludDMyX3Qgc3RhcnRfYWRkciwgc3RhcnRfYWRkcl9sbzsKKwl1aW50MzJfdCBlbmRfYWRkciwgZW5kX2FkZHJfbG87CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCBhZ3BfYmFzZTsKKworCisJZGV2X3ByaXYtPmRtYV9sb3cgPSAwOworCisJYWdwX2Jhc2UgPSBkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHI7CisJc3RhcnRfYWRkciA9IGFncF9iYXNlOworCWVuZF9hZGRyID0gYWdwX2Jhc2UgKyBkZXZfcHJpdi0+ZG1hX2hpZ2g7CisKKwlzdGFydF9hZGRyX2xvID0gKChIQ19TdWJBX0hBR1BCc3RMIDw8IDI0KSB8IChzdGFydF9hZGRyICYgMHhGRkZGRkYpKTsKKwllbmRfYWRkcl9sbyA9ICgoSENfU3ViQV9IQUdQQmVuZEwgPDwgMjQpIHwgKGVuZF9hZGRyICYgMHhGRkZGRkYpKTsKKwljb21tYW5kID0gKChIQ19TdWJBX0hBR1BDTU5UIDw8IDI0KSB8IChzdGFydF9hZGRyID4+IDI0KSB8CisJCSAgICgoZW5kX2FkZHIgJiAweGZmMDAwMDAwKSA+PiAxNikpOworCisJZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyID0gCisJCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAKKwkJCSAgICAgICZwYXVzZV9hZGRyX2hpLCAmIHBhdXNlX2FkZHJfbG8sIDEpIC0gMTsKKworCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7CisJd2hpbGUoISAqZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyKTsKKworCVZJQV9XUklURShWSUFfUkVHX1RSQU5TRVQsIChIQ19QYXJhVHlwZV9QcmVDUiA8PCAxNikpOworCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgY29tbWFuZCk7CisJVklBX1dSSVRFKFZJQV9SRUdfVFJBTlNQQUNFLCBzdGFydF9hZGRyX2xvKTsKKwlWSUFfV1JJVEUoVklBX1JFR19UUkFOU1BBQ0UsIGVuZF9hZGRyX2xvKTsKKworCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgcGF1c2VfYWRkcl9oaSk7CisJVklBX1dSSVRFKFZJQV9SRUdfVFJBTlNQQUNFLCBwYXVzZV9hZGRyX2xvKTsKKworCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgY29tbWFuZCB8IEhDX0hBR1BDTU5UX01BU0spOworfQorCitzdGF0aWMgdm9pZCB2aWFfcGFkX2NhY2hlKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IHF3b3JkcykKK3sKKwl1aW50MzJfdCAqdmI7CisKKwl2aWFfY21kYnVmX3dhaXQoZGV2X3ByaXYsIHF3b3JkcyArIDIpOworCXZiID0gdmlhX2dldF9kbWEoZGV2X3ByaXYpOworCVZJQV9PVVRfUklOR19RVyggSENfSEVBREVSMiwgSENfUGFyYVR5cGVfTm90VGV4IDw8IDE2KTsKKwl2aWFfYWxpZ25fYnVmZmVyKGRldl9wcml2LHZiLHF3b3Jkcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWFfZHVtbXlfYml0Ymx0KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit7CisJdWludDMyX3QgKnZiID0gdmlhX2dldF9kbWEoZGV2X3ByaXYpOworCVNldFJlZzJEQUdQKDB4MEMsICgwIHwgKDAgPDwgMTYpKSk7CisJU2V0UmVnMkRBR1AoMHgxMCwgMCB8ICgwIDw8IDE2KSk7CisJU2V0UmVnMkRBR1AoMHgwLCAweDEgfCAweDIwMDAgfCAweEFBMDAwMDAwKTsgCit9CisKKworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9qdW1wKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit7CisJdWludDMyX3QgYWdwX2Jhc2U7CisJdWludDMyX3QgcGF1c2VfYWRkcl9sbywgcGF1c2VfYWRkcl9oaTsKKwl1aW50MzJfdCBqdW1wX2FkZHJfbG8sIGp1bXBfYWRkcl9oaTsKKwl2b2xhdGlsZSB1aW50MzJfdCAqbGFzdF9wYXVzZV9wdHI7CisJdWludDMyX3QgZG1hX2xvd19zYXZlMSwgZG1hX2xvd19zYXZlMjsKKworCWFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyOworCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsICBIQ19IQUdQQnBJRF9KVU1QLCAwLCAmanVtcF9hZGRyX2hpLCAKKwkJICAgICAgJmp1bXBfYWRkcl9sbywgMCk7CisJCisJZGV2X3ByaXYtPmRtYV93cmFwID0gZGV2X3ByaXYtPmRtYV9sb3c7CisKKworCS8qCisJICogV3JhcCBjb21tYW5kIGJ1ZmZlciB0byB0aGUgYmVnaW5uaW5nLgorCSAqLworCisJZGV2X3ByaXYtPmRtYV9sb3cgPSAwOworCWlmICh2aWFfY21kYnVmX3dhaXQoZGV2X3ByaXYsIENNREJVRl9BTElHTk1FTlRfU0laRSkgIT0gMCkgeworCQlEUk1fRVJST1IoInZpYV9jbWRidWZfanVtcCBmYWlsZWRcbiIpOworCX0KKworCXZpYV9kdW1teV9iaXRibHQoZGV2X3ByaXYpOworCXZpYV9kdW1teV9iaXRibHQoZGV2X3ByaXYpOyAKKworCWxhc3RfcGF1c2VfcHRyID0gdmlhX2FsaWduX2NtZChkZXZfcHJpdiwgIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAmcGF1c2VfYWRkcl9oaSwgCisJCQkJICAgICAgICZwYXVzZV9hZGRyX2xvLCAwKSAtMTsKKwl2aWFfYWxpZ25fY21kKGRldl9wcml2LCAgSENfSEFHUEJwSURfUEFVU0UsIDAsICZwYXVzZV9hZGRyX2hpLCAKKwkJICAgICAgJnBhdXNlX2FkZHJfbG8sIDApOworCisJKmxhc3RfcGF1c2VfcHRyID0gcGF1c2VfYWRkcl9sbzsKKwlkbWFfbG93X3NhdmUxID0gZGV2X3ByaXYtPmRtYV9sb3c7CisKKwkvKgorCSAqIE5vdywgc2V0IGEgdHJhcCB0aGF0IHdpbGwgcGF1c2UgdGhlIHJlZ3VsYXRvciBpZiBpdCB0cmllcyB0byByZXJ1biB0aGUgb2xkCisJICogY29tbWFuZCBidWZmZXIuIChXaGljaCBtYXkgaGFwcGVuIGlmIHZpYV9ob29rX3NlZ21lbnQgZGV0ZWNzIGEgY29tbWFuZCByZWd1bGF0b3IgcGF1c2UKKwkgKiBhbmQgcmVpc3N1ZXMgdGhlIGp1bXAgY29tbWFuZCBvdmVyIFBDSSwgd2hpbGUgdGhlIHJlZ3VsYXRvciBoYXMgYWxyZWFkeSB0YWtlbiB0aGUganVtcAorCSAqIGFuZCBhY3R1YWxseSBwYXVzZWQgYXQgdGhlIGN1cnJlbnQgYnVmZmVyIGVuZCkuCisJICogVGhlcmUgYXBwZWFycyB0byBiZSBubyBvdGhlciB3YXkgdG8gZGV0ZWN0IHRoaXMgY29uZGl0aW9uLCBzaW5jZSB0aGUgaHdfYWRkcl9wb2ludGVyCisJICogZG9lcyBub3Qgc2VlbSB0byBnZXQgdXBkYXRlZCBpbW1lZGlhdGVseSB3aGVuIGEganVtcCBvY2N1cnMuCisJICovCisKKwlsYXN0X3BhdXNlX3B0ciA9IHZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsICBIQ19IQUdQQnBJRF9QQVVTRSwgMCwgJnBhdXNlX2FkZHJfaGksIAorCQkJCSAgICAgICAmcGF1c2VfYWRkcl9sbywgMCkgLTE7CisJdmlhX2FsaWduX2NtZChkZXZfcHJpdiwgIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAmcGF1c2VfYWRkcl9oaSwgCisJCSAgICAgICZwYXVzZV9hZGRyX2xvLCAwKTsKKwkqbGFzdF9wYXVzZV9wdHIgPSBwYXVzZV9hZGRyX2xvOworCisJZG1hX2xvd19zYXZlMiA9IGRldl9wcml2LT5kbWFfbG93OworCWRldl9wcml2LT5kbWFfbG93ID0gZG1hX2xvd19zYXZlMTsJCisJdmlhX2hvb2tfc2VnbWVudCggZGV2X3ByaXYsIGp1bXBfYWRkcl9oaSwganVtcF9hZGRyX2xvLCAwKTsKKwlkZXZfcHJpdi0+ZG1hX2xvdyA9IGRtYV9sb3dfc2F2ZTI7CisJdmlhX2hvb2tfc2VnbWVudCggZGV2X3ByaXYsIHBhdXNlX2FkZHJfaGksIHBhdXNlX2FkZHJfbG8sIDApOworfQorCisKK3N0YXRpYyB2b2lkIHZpYV9jbWRidWZfcmV3aW5kKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit7CisJdmlhX2NtZGJ1Zl9qdW1wKGRldl9wcml2KTsgCit9CisKK3N0YXRpYyB2b2lkIHZpYV9jbWRidWZfZmx1c2goZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdWludDMyX3QgY21kX3R5cGUpCit7CisJdWludDMyX3QgcGF1c2VfYWRkcl9sbywgcGF1c2VfYWRkcl9oaTsKKworCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsIGNtZF90eXBlLCAwLCAmcGF1c2VfYWRkcl9oaSwgJnBhdXNlX2FkZHJfbG8sIDApOworCXZpYV9ob29rX3NlZ21lbnQoIGRldl9wcml2LCBwYXVzZV9hZGRyX2hpLCBwYXVzZV9hZGRyX2xvLCAwKTsKK30KKworCitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3BhdXNlKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit7CisJdmlhX2NtZGJ1Zl9mbHVzaChkZXZfcHJpdiwgSENfSEFHUEJwSURfUEFVU0UpOworfQorCitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3Jlc2V0KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit7CisJdmlhX2NtZGJ1Zl9mbHVzaChkZXZfcHJpdiwgSENfSEFHUEJwSURfU1RPUCk7CisJdmlhX3dhaXRfaWRsZShkZXZfcHJpdik7Cit9CisKKy8qCisgKiBVc2VyIGludGVyZmFjZSB0byB0aGUgc3BhY2UgYW5kIGxhZyBmdW5jdGlvbnMuCisgKi8KKworaW50IAordmlhX2NtZGJ1Zl9zaXplKERSTV9JT0NUTF9BUkdTKQoreworCURSTV9ERVZJQ0U7CisJZHJtX3ZpYV9jbWRidWZfc2l6ZV90IGRfc2l6OworCWludCByZXQgPSAwOworCXVpbnQzMl90IHRtcF9zaXplLCBjb3VudDsKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXY7CisKKwlEUk1fREVCVUcoInZpYSBjbWRidWZfc2l6ZVxuIik7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKworCWRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGhvdXQgaW5pdGlhbGl6aW5nIEFHUCByaW5nIGJ1ZmZlci5cbiIsCisJCQkgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CisJfQorCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGRfc2l6LCAoZHJtX3ZpYV9jbWRidWZfc2l6ZV90ICopIGRhdGEsCisJCQkJIHNpemVvZihkX3NpeikpOworCisKKwljb3VudCA9IDEwMDAwMDA7CisJdG1wX3NpemUgPSBkX3Npei5zaXplOworCXN3aXRjaChkX3Npei5mdW5jKSB7CisJY2FzZSBWSUFfQ01EQlVGX1NQQUNFOgorCQl3aGlsZSAoKCh0bXBfc2l6ZSA9IHZpYV9jbWRidWZfc3BhY2UoZGV2X3ByaXYpKSA8IGRfc2l6LnNpemUpICYmIGNvdW50LS0pIHsKKwkJCWlmICghZF9zaXoud2FpdCkgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghY291bnQpIHsKKwkJCURSTV9FUlJPUigiVklBX0NNREJVRl9TUEFDRSB0aW1lZCBvdXQuXG4iKTsKKwkJCXJldCA9IERSTV9FUlIoRUFHQUlOKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFZJQV9DTURCVUZfTEFHOgorCQl3aGlsZSAoKCh0bXBfc2l6ZSA9IHZpYV9jbWRidWZfbGFnKGRldl9wcml2KSkgPiBkX3Npei5zaXplKSAmJiBjb3VudC0tKSB7CisJCQlpZiAoIWRfc2l6LndhaXQpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIWNvdW50KSB7CisJCQlEUk1fRVJST1IoIlZJQV9DTURCVUZfTEFHIHRpbWVkIG91dC5cbiIpOworCQkJcmV0ID0gRFJNX0VSUihFQUdBSU4pOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IERSTV9FUlIoRUZBVUxUKTsKKwl9CisJZF9zaXouc2l6ZSA9IHRtcF9zaXplOworCisJRFJNX0NPUFlfVE9fVVNFUl9JT0NUTCgoZHJtX3ZpYV9jbWRidWZfc2l6ZV90ICopIGRhdGEsIGRfc2l6LAorCQkJICAgICAgIHNpemVvZihkX3NpeikpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcm0uaCBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODhjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcm0uaApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDMgVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwMyBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVklBLCBTMyBHUkFQSElDUywgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX1ZJQV9EUk1fSF8KKyNkZWZpbmUgX1ZJQV9EUk1fSF8KKworLyogV0FSTklORzogVGhlc2UgZGVmaW5lcyBtdXN0IGJlIHRoZSBzYW1lIGFzIHdoYXQgdGhlIFhzZXJ2ZXIgdXNlcy4KKyAqIGlmIHlvdSBjaGFuZ2UgdGhlbSwgeW91IG11c3QgY2hhbmdlIHRoZSBkZWZpbmVzIGluIHRoZSBYc2VydmVyLgorICovCisKKyNpZm5kZWYgX1ZJQV9ERUZJTkVTXworI2RlZmluZSBfVklBX0RFRklORVNfCisKKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgInZpYV9kcm1jbGllbnQuaCIKKyNlbmRpZgorCisjZGVmaW5lIFZJQV9OUl9TQVJFQV9DTElQUkVDVFMgCQk4CisjZGVmaW5lIFZJQV9OUl9YVk1DX1BPUlRTICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVklBX05SX1hWTUNfTE9DS1MgICAgICAgICAgICAgICA1CisjZGVmaW5lIFZJQV9NQVhfQ0FDSEVMSU5FX1NJWkUgICAgICAgICAgNjQKKyNkZWZpbmUgWFZNQ0xPQ0tQVFIoc2FQcml2LGxvY2tObykJCQkJCVwKKwkoKHZvbGF0aWxlIGRybV9od19sb2NrX3QgKikoKCgoKHVuc2lnbmVkIGxvbmcpIChzYVByaXYpLT5Ydk1DTG9ja0FyZWEpICsgXAorCQkJCSAgICAgIChWSUFfTUFYX0NBQ0hFTElORV9TSVpFIC0gMSkpICYJXAorCQkJCSAgICAgfihWSUFfTUFYX0NBQ0hFTElORV9TSVpFIC0gMSkpICsJXAorCQkJCSAgICBWSUFfTUFYX0NBQ0hFTElORV9TSVpFKihsb2NrTm8pKSkKKworLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDY0aywgYW5kIHRoZXJlIGFyZSBhdCBtb3N0IDY0IG9mIHRoZW0uCisgKi8KKyNkZWZpbmUgVklBX05SX1RFWF9SRUdJT05TIDY0CisjZGVmaW5lIFZJQV9MT0dfTUlOX1RFWF9SRUdJT05fU0laRSAxNgorI2VuZGlmCisKKyNkZWZpbmUgVklBX1VQTE9BRF9URVgwSU1BR0UgIDB4MQkvKiBoYW5kbGVkIGNsaWVudHNpZGUgKi8KKyNkZWZpbmUgVklBX1VQTE9BRF9URVgxSU1BR0UgIDB4MgkvKiBoYW5kbGVkIGNsaWVudHNpZGUgKi8KKyNkZWZpbmUgVklBX1VQTE9BRF9DVFggICAgICAgIDB4NAorI2RlZmluZSBWSUFfVVBMT0FEX0JVRkZFUlMgICAgMHg4CisjZGVmaW5lIFZJQV9VUExPQURfVEVYMCAgICAgICAweDEwCisjZGVmaW5lIFZJQV9VUExPQURfVEVYMSAgICAgICAweDIwCisjZGVmaW5lIFZJQV9VUExPQURfQ0xJUFJFQ1RTICAweDQwCisjZGVmaW5lIFZJQV9VUExPQURfQUxMICAgICAgICAweGZmCisKKy8qIFZJQSBzcGVjaWZpYyBpb2N0bHMgKi8KKyNkZWZpbmUgRFJNX1ZJQV9BTExPQ01FTQkweDAwCisjZGVmaW5lIERSTV9WSUFfRlJFRU1FTQkgICAgICAgIDB4MDEKKyNkZWZpbmUgRFJNX1ZJQV9BR1BfSU5JVAkweDAyCisjZGVmaW5lIERSTV9WSUFfRkJfSU5JVAkgICAgICAgIDB4MDMKKyNkZWZpbmUgRFJNX1ZJQV9NQVBfSU5JVAkweDA0CisjZGVmaW5lIERSTV9WSUFfREVDX0ZVVEVYICAgICAgIDB4MDUKKyNkZWZpbmUgTk9UX1VTRUQKKyNkZWZpbmUgRFJNX1ZJQV9ETUFfSU5JVAkweDA3CisjZGVmaW5lIERSTV9WSUFfQ01EQlVGRkVSCTB4MDgKKyNkZWZpbmUgRFJNX1ZJQV9GTFVTSAkgICAgICAgIDB4MDkKKyNkZWZpbmUgRFJNX1ZJQV9QQ0lDTUQJICAgICAgICAweDBhCisjZGVmaW5lIERSTV9WSUFfQ01EQlVGX1NJWkUJMHgwYgorI2RlZmluZSBOT1RfVVNFRAorI2RlZmluZSBEUk1fVklBX1dBSVRfSVJRICAgICAgICAweDBkCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9BTExPQ01FTQkgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX0FMTE9DTUVNLCBkcm1fdmlhX21lbV90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0ZSRUVNRU0JICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9GUkVFTUVNLCBkcm1fdmlhX21lbV90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0FHUF9JTklUCSAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfQUdQX0lOSVQsIGRybV92aWFfYWdwX3QpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfRkJfSU5JVAkgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX0ZCX0lOSVQsIGRybV92aWFfZmJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9NQVBfSU5JVAkgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX01BUF9JTklULCBkcm1fdmlhX2luaXRfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9ERUNfRlVURVggICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9ERUNfRlVURVgsIGRybV92aWFfZnV0ZXhfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9ETUFfSU5JVAkgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX0RNQV9JTklULCBkcm1fdmlhX2RtYV9pbml0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfQ01EQlVGRkVSCSAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfQ01EQlVGRkVSLCBkcm1fdmlhX2NtZGJ1ZmZlcl90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0ZMVVNICSAgRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfRkxVU0gpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfUENJQ01ECSAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfUENJQ01ELCBkcm1fdmlhX2NtZGJ1ZmZlcl90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0NNREJVRl9TSVpFIERSTV9JT1dSKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9DTURCVUZfU0laRSwgXAorCQkJCQkgICAgZHJtX3ZpYV9jbWRidWZfc2l6ZV90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX1dBSVRfSVJRICAgIERSTV9JT1dSKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9XQUlUX0lSUSwgZHJtX3ZpYV9pcnF3YWl0X3QpCisKKy8qIEluZGljZXMgaW50byBidWYuU2V0dXAgd2hlcmUgdmFyaW91cyBiaXRzIG9mIHN0YXRlIGFyZSBtaXJyb3JlZCBwZXIKKyAqIGNvbnRleHQgYW5kIHBlciBidWZmZXIuICBUaGVzZSBjYW4gYmUgZmlyZWQgYXQgdGhlIGNhcmQgYXMgYSB1bml0LAorICogb3IgaW4gYSBwaWVjZXdpc2UgZmFzaGlvbiBhcyByZXF1aXJlZC4KKyAqLworCisjZGVmaW5lIFZJQV9URVhfU0VUVVBfU0laRSA4CisKKy8qIEZsYWdzIGZvciBjbGVhciBpb2N0bAorICovCisjZGVmaW5lIFZJQV9GUk9OVCAgIDB4MQorI2RlZmluZSBWSUFfQkFDSyAgICAweDIKKyNkZWZpbmUgVklBX0RFUFRIICAgMHg0CisjZGVmaW5lIFZJQV9TVEVOQ0lMIDB4OAorI2RlZmluZSBWSURFTyAwCisjZGVmaW5lIEFHUCAxCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDMyX3Qgb2Zmc2V0OworCXVpbnQzMl90IHNpemU7Cit9IGRybV92aWFfYWdwX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdCBvZmZzZXQ7CisJdWludDMyX3Qgc2l6ZTsKK30gZHJtX3ZpYV9mYl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDMyX3QgY29udGV4dDsKKwl1aW50MzJfdCB0eXBlOworCXVpbnQzMl90IHNpemU7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKK30gZHJtX3ZpYV9tZW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV92aWFfaW5pdCB7CisJZW51bSB7CisJCVZJQV9JTklUX01BUCA9IDB4MDEsCisJCVZJQV9DTEVBTlVQX01BUCA9IDB4MDIKKwl9IGZ1bmM7CisKKwl1bnNpZ25lZCBsb25nIHNhcmVhX3ByaXZfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgZmJfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgbW1pb19vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBhZ3BBZGRyOworfSBkcm1fdmlhX2luaXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV92aWFfZnV0ZXggeworCWVudW0geworCQlWSUFfRlVURVhfV0FJVCA9IDB4MDAsCisJCVZJQV9GVVRFWF9XQUtFID0gMFgwMQorCX0gZnVuYzsKKwl1aW50MzJfdCBtczsKKwl1aW50MzJfdCBsb2NrOworCXVpbnQzMl90IHZhbDsKK30gZHJtX3ZpYV9mdXRleF90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9kbWFfaW5pdCB7CisJZW51bSB7CisJCVZJQV9JTklUX0RNQSA9IDB4MDEsCisJCVZJQV9DTEVBTlVQX0RNQSA9IDB4MDIsCisgICAgICAgICAgICAgICAgVklBX0RNQV9JTklUSUFMSVpFRCA9IDB4MDMKKwl9IGZ1bmM7CisKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyByZWdfcGF1c2VfYWRkcjsKK30gZHJtX3ZpYV9kbWFfaW5pdF90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9jbWRidWZmZXIgeworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9IGRybV92aWFfY21kYnVmZmVyX3Q7CisKKy8qIFdhcm5pbmc6IElmIHlvdSBjaGFuZ2UgdGhlIFNBUkVBIHN0cnVjdHVyZSB5b3UgbXVzdCBjaGFuZ2UgdGhlIFhzZXJ2ZXIKKyAqIHN0cnVjdHVyZSBhcyB3ZWxsICovCisKK3R5cGVkZWYgc3RydWN0IF9kcm1fdmlhX3RleF9yZWdpb24geworCXVuc2lnbmVkIGNoYXIgbmV4dCwgcHJldjsJLyogaW5kaWNlcyB0byBmb3JtIGEgY2lyY3VsYXIgTFJVICAqLworCXVuc2lnbmVkIGNoYXIgaW5Vc2U7CS8qIG93bmVkIGJ5IGEgY2xpZW50LCBvciBmcmVlPyAqLworCWludCBhZ2U7CQkvKiB0cmFja2VkIGJ5IGNsaWVudHMgdG8gdXBkYXRlIGxvY2FsIExSVSdzICovCit9IGRybV92aWFfdGV4X3JlZ2lvbl90OworCit0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9zYXJlYSB7CisJdW5zaWduZWQgaW50IGRpcnR5OworCXVuc2lnbmVkIGludCBuYm94OworCWRybV9jbGlwX3JlY3RfdCBib3hlc1tWSUFfTlJfU0FSRUFfQ0xJUFJFQ1RTXTsKKwlkcm1fdmlhX3RleF9yZWdpb25fdCB0ZXhMaXN0W1ZJQV9OUl9URVhfUkVHSU9OUyArIDFdOworCWludCB0ZXhBZ2U7CQkvKiBsYXN0IHRpbWUgdGV4dHVyZSB3YXMgdXBsb2FkZWQgKi8KKwlpbnQgY3R4T3duZXI7CQkvKiBsYXN0IGNvbnRleHQgdG8gdXBsb2FkIHN0YXRlICovCisJaW50IHZlcnRleFByaW07CisKKwkvKgorCSAqIEJlbG93IGlzIGZvciBYdk1DLgorCSAqIFdlIHdhbnQgdGhlIGxvY2sgaW50ZWdlcnMgYWxvbmUgb24sIGFuZCBhbGlnbmVkIHRvLCBhIGNhY2hlIGxpbmUuCisJICogVGhlcmVmb3JlIHRoaXMgc29tZXdoYXQgc3RyYW5nZSBjb25zdHJ1Y3QuCisJICovCisKKwljaGFyIFh2TUNMb2NrQXJlYVtWSUFfTUFYX0NBQ0hFTElORV9TSVpFICogKFZJQV9OUl9YVk1DX0xPQ0tTICsgMSldOworCisJdW5zaWduZWQgaW50IFh2TUNEaXNwbGF5aW5nW1ZJQV9OUl9YVk1DX1BPUlRTXTsKKwl1bnNpZ25lZCBpbnQgWHZNQ1N1YlBpY09uW1ZJQV9OUl9YVk1DX1BPUlRTXTsKKwl1bnNpZ25lZCBpbnQgWHZNQ0N0eE5vR3JhYmJlZDsJLyogTGFzdCBjb250ZXh0IHRvIGhvbGQgZGVjb2RlciAqLworCit9IGRybV92aWFfc2FyZWFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV92aWFfY21kYnVmX3NpemUgeworCWVudW0geworCQlWSUFfQ01EQlVGX1NQQUNFID0gMHgwMSwKKwkJVklBX0NNREJVRl9MQUcgPSAweDAyCisJfSBmdW5jOworCWludCB3YWl0OworCXVpbnQzMl90IHNpemU7Cit9IGRybV92aWFfY21kYnVmX3NpemVfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlWSUFfSVJRX0FCU09MVVRFID0gMHgwLAorCVZJQV9JUlFfUkVMQVRJVkUgPSAweDEsCisJVklBX0lSUV9TSUdOQUwgPSAweDEwMDAwMDAwLAorCVZJQV9JUlFfRk9SQ0VfU0VRVUVOQ0UgPSAweDIwMDAwMDAwCit9IHZpYV9pcnFfc2VxX3R5cGVfdDsKKworI2RlZmluZSBWSUFfSVJRX0ZMQUdTX01BU0sgMHhGMDAwMDAwMAorCitzdHJ1Y3QgZHJtX3ZpYV93YWl0X2lycV9yZXF1ZXN0eworCXVuc2lnbmVkIGlycTsKKwl2aWFfaXJxX3NlcV90eXBlX3QgdHlwZTsKKwl1aW50MzJfdCBzZXF1ZW5jZTsKKwl1aW50MzJfdCBzaWduYWw7Cit9OworCit0eXBlZGVmIHVuaW9uIGRybV92aWFfaXJxd2FpdCB7CisJc3RydWN0IGRybV92aWFfd2FpdF9pcnFfcmVxdWVzdCByZXF1ZXN0OworCXN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVwbHkgcmVwbHk7Cit9IGRybV92aWFfaXJxd2FpdF90OworCisjaWZkZWYgX19LRVJORUxfXworCitpbnQgdmlhX2ZiX2luaXQoRFJNX0lPQ1RMX0FSR1MpOworaW50IHZpYV9tZW1fYWxsb2MoRFJNX0lPQ1RMX0FSR1MpOworaW50IHZpYV9tZW1fZnJlZShEUk1fSU9DVExfQVJHUyk7CitpbnQgdmlhX2FncF9pbml0KERSTV9JT0NUTF9BUkdTKTsKK2ludCB2aWFfbWFwX2luaXQoRFJNX0lPQ1RMX0FSR1MpOworaW50IHZpYV9kZWNvZGVyX2Z1dGV4KERSTV9JT0NUTF9BUkdTKTsKK2ludCB2aWFfZG1hX2luaXQoRFJNX0lPQ1RMX0FSR1MpOworaW50IHZpYV9jbWRidWZmZXIoRFJNX0lPQ1RMX0FSR1MpOworaW50IHZpYV9mbHVzaF9pb2N0bChEUk1fSU9DVExfQVJHUyk7CitpbnQgdmlhX3BjaV9jbWRidWZmZXIoRFJNX0lPQ1RMX0FSR1MpOworaW50IHZpYV9jbWRidWZfc2l6ZShEUk1fSU9DVExfQVJHUyk7CitpbnQgdmlhX3dhaXRfaXJxKERSTV9JT0NUTF9BUkdTKTsKKworI2VuZGlmCisjZW5kaWYJCQkJLyogX1ZJQV9EUk1fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1ZWVmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWSUEsIFMzIEdSQVBISUNTLCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgInZpYV9kcm0uaCIKKyNpbmNsdWRlICJ2aWFfZHJ2LmgiCisKKyNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCisKK3N0YXRpYyBpbnQgcG9zdGluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWQ6ICVzXG4iLAorCQkgRFJJVkVSX05BTUUsCisJCSBEUklWRVJfTUFKT1IsCisJCSBEUklWRVJfTUlOT1IsCisJCSBEUklWRVJfUEFUQ0hMRVZFTCwKKwkJIERSSVZFUl9EQVRFLCBkZXYtPnByaW1hcnkubWlub3IsIHBjaV9wcmV0dHlfbmFtZShkZXYtPnBkZXYpCisJICAgICk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmVyc2lvbihkcm1fdmVyc2lvbl90ICogdmVyc2lvbikKK3sKKwlpbnQgbGVuOworCisJdmVyc2lvbi0+dmVyc2lvbl9tYWpvciA9IERSSVZFUl9NQUpPUjsKKwl2ZXJzaW9uLT52ZXJzaW9uX21pbm9yID0gRFJJVkVSX01JTk9SOworCXZlcnNpb24tPnZlcnNpb25fcGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMOworCURSTV9DT1BZKHZlcnNpb24tPm5hbWUsIERSSVZFUl9OQU1FKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5kYXRlLCBEUklWRVJfREFURSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGVzYywgRFJJVkVSX0RFU0MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CisJdmlhZHJ2X1BDSV9JRFMKK307CisKK3N0YXRpYyBkcm1faW9jdGxfZGVzY190IGlvY3Rsc1tdID0geworCVtEUk1fSU9DVExfTlIoRFJNX1ZJQV9BTExPQ01FTSldID0ge3ZpYV9tZW1fYWxsb2MsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1ZJQV9GUkVFTUVNKV0gPSB7dmlhX21lbV9mcmVlLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfQUdQX0lOSVQpXSA9IHt2aWFfYWdwX2luaXQsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1ZJQV9GQl9JTklUKV0gPSB7dmlhX2ZiX2luaXQsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1ZJQV9NQVBfSU5JVCldID0ge3ZpYV9tYXBfaW5pdCwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fVklBX0RFQ19GVVRFWCldID0ge3ZpYV9kZWNvZGVyX2Z1dGV4LCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfRE1BX0lOSVQpXSA9IHt2aWFfZG1hX2luaXQsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1ZJQV9DTURCVUZGRVIpXSA9IHt2aWFfY21kYnVmZmVyLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfRkxVU0gpXSA9IHt2aWFfZmx1c2hfaW9jdGwsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1ZJQV9QQ0lDTUQpXSA9IHt2aWFfcGNpX2NtZGJ1ZmZlciwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fVklBX0NNREJVRl9TSVpFKV0gPSB7dmlhX2NtZGJ1Zl9zaXplLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfV0FJVF9JUlEpXSA9IHt2aWFfd2FpdF9pcnEsIDEsIDB9Cit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPQorCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9IQVZFX0lSUSB8CisJICAgIERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwsCisJLmNvbnRleHRfY3RvciA9IHZpYV9pbml0X2NvbnRleHQsCisJLmNvbnRleHRfZHRvciA9IHZpYV9maW5hbF9jb250ZXh0LAorCS52Ymxhbmtfd2FpdCA9IHZpYV9kcml2ZXJfdmJsYW5rX3dhaXQsCisJLmlycV9wcmVpbnN0YWxsID0gdmlhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCwKKwkuaXJxX3Bvc3RpbnN0YWxsID0gdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwsCisJLmlycV91bmluc3RhbGwgPSB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwsCisJLmlycV9oYW5kbGVyID0gdmlhX2RyaXZlcl9pcnFfaGFuZGxlciwKKwkuZG1hX3F1aWVzY2VudCA9IHZpYV9kcml2ZXJfZG1hX3F1aWVzY2VudCwKKwkucmVjbGFpbV9idWZmZXJzID0gZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzLAorCS5nZXRfbWFwX29mcyA9IGRybV9jb3JlX2dldF9tYXBfb2ZzLAorCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAorCS5wb3N0aW5pdCA9IHBvc3Rpbml0LAorCS52ZXJzaW9uID0gdmVyc2lvbiwKKwkuaW9jdGxzID0gaW9jdGxzLAorCS5udW1faW9jdGxzID0gRFJNX0FSUkFZX1NJWkUoaW9jdGxzKSwKKwkuZm9wcyA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vcGVuID0gZHJtX29wZW4sCisJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLm1tYXAgPSBkcm1fbW1hcCwKKwkJLnBvbGwgPSBkcm1fcG9sbCwKKwkJLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCX0sCisJLnBjaV9kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCB2aWFfaW5pdCh2b2lkKQoreworCXZpYV9pbml0X2NvbW1hbmRfdmVyaWZpZXIoKTsKKwlyZXR1cm4gZHJtX2luaXQoJmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aWFfZXhpdCh2b2lkKQoreworCWRybV9leGl0KCZkcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2aWFfaW5pdCk7Cittb2R1bGVfZXhpdCh2aWFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhYThiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWSUEsIFMzIEdSQVBISUNTLCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfVklBX0RSVl9IXworI2RlZmluZSBfVklBX0RSVl9IXworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJIlZJQSIKKworI2RlZmluZSBEUklWRVJfTkFNRQkJInZpYSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSJWSUEgVW5pY2hyb21lIC8gUHJvIgorI2RlZmluZSBEUklWRVJfREFURQkJIjIwMDUwNTIzIgorCisjZGVmaW5lIERSSVZFUl9NQUpPUgkJMgorI2RlZmluZSBEUklWRVJfTUlOT1IJCTYKKyNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMworCisjaW5jbHVkZSAidmlhX3ZlcmlmaWVyLmgiCisKKyNkZWZpbmUgVklBX1BDSV9CVUZfU0laRSA2MDAwMAorI2RlZmluZSBWSUFfRklSRV9CVUZfU0laRSAgMTAyNAorI2RlZmluZSBWSUFfTlVNX0lSUVMgMgorCisKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3ZpYV9yaW5nX2J1ZmZlciB7CisJZHJtX21hcF90IG1hcDsKKwljaGFyICp2aXJ0dWFsX3N0YXJ0OworfSBkcm1fdmlhX3JpbmdfYnVmZmVyX3Q7CisKK3R5cGVkZWYgdWludDMyX3QgbWFza2FycmF5X3RbNV07CisKK3R5cGVkZWYgc3RydWN0IGRybV92aWFfaXJxIHsKKwlhdG9taWNfdCBpcnFfcmVjZWl2ZWQ7CisJdWludDMyX3QgcGVuZGluZ19tYXNrOworCXVpbnQzMl90IGVuYWJsZV9tYXNrOworCXdhaXRfcXVldWVfaGVhZF90IGlycV9xdWV1ZTsKK30gZHJtX3ZpYV9pcnFfdDsKKwkKK3R5cGVkZWYgc3RydWN0IGRybV92aWFfcHJpdmF0ZSB7CisJZHJtX3ZpYV9zYXJlYV90ICpzYXJlYV9wcml2OworCWRybV9tYXBfdCAqc2FyZWE7CisJZHJtX21hcF90ICpmYjsKKwlkcm1fbWFwX3QgKm1taW87CisJdW5zaWduZWQgbG9uZyBhZ3BBZGRyOworCXdhaXRfcXVldWVfaGVhZF90IGRlY29kZXJfcXVldWVbVklBX05SX1hWTUNfTE9DS1NdOworCWNoYXIgKmRtYV9wdHI7CisJdW5zaWduZWQgaW50IGRtYV9sb3c7CisJdW5zaWduZWQgaW50IGRtYV9oaWdoOworCXVuc2lnbmVkIGludCBkbWFfb2Zmc2V0OworCXVpbnQzMl90IGRtYV93cmFwOworCXZvbGF0aWxlIHVpbnQzMl90ICpsYXN0X3BhdXNlX3B0cjsKKwl2b2xhdGlsZSB1aW50MzJfdCAqaHdfYWRkcl9wdHI7CisJZHJtX3ZpYV9yaW5nX2J1ZmZlcl90IHJpbmc7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIGxhc3RfdmJsYW5rOworICAgICAgICBpbnQgbGFzdF92YmxhbmtfdmFsaWQ7CisgICAgICAgIHVuc2lnbmVkIHVzZWNfcGVyX3ZibGFuazsKKwlkcm1fdmlhX3N0YXRlX3QgaGNfc3RhdGU7CisJY2hhciBwY2lfYnVmW1ZJQV9QQ0lfQlVGX1NJWkVdOworCWNvbnN0IHVpbnQzMl90ICpmaXJlX29mZnNldHNbVklBX0ZJUkVfQlVGX1NJWkVdOworCXVpbnQzMl90IG51bV9maXJlX29mZnNldHM7CisJaW50IHByb19ncm91cF9hOworCWRybV92aWFfaXJxX3QgdmlhX2lycXNbVklBX05VTV9JUlFTXTsKKwl1bnNpZ25lZCBudW1faXJxczsKKwltYXNrYXJyYXlfdCAqaXJxX21hc2tzOworCXVpbnQzMl90IGlycV9lbmFibGVfbWFzazsgCisJdWludDMyX3QgaXJxX3BlbmRpbmdfbWFzazsJCit9IGRybV92aWFfcHJpdmF0ZV90OworCisvKiBWSUEgTU1JTyByZWdpc3RlciBhY2Nlc3MgKi8KKyNkZWZpbmUgVklBX0JBU0UgKChkZXZfcHJpdi0+bW1pbykpCisKKyNkZWZpbmUgVklBX1JFQUQocmVnKQkJRFJNX1JFQUQzMihWSUFfQkFTRSwgcmVnKQorI2RlZmluZSBWSUFfV1JJVEUocmVnLHZhbCkJRFJNX1dSSVRFMzIoVklBX0JBU0UsIHJlZywgdmFsKQorI2RlZmluZSBWSUFfUkVBRDgocmVnKQkJRFJNX1JFQUQ4KFZJQV9CQVNFLCByZWcpCisjZGVmaW5lIFZJQV9XUklURTgocmVnLHZhbCkJRFJNX1dSSVRFOChWSUFfQkFTRSwgcmVnLCB2YWwpCisKK2V4dGVybiBpbnQgdmlhX2luaXRfY29udGV4dChkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBjb250ZXh0KTsKK2V4dGVybiBpbnQgdmlhX2ZpbmFsX2NvbnRleHQoZHJtX2RldmljZV90ICogZGV2LCBpbnQgY29udGV4dCk7CisKK2V4dGVybiBpbnQgdmlhX2RvX2NsZWFudXBfbWFwKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gaW50IHZpYV9tYXBfaW5pdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgdmlhX2RyaXZlcl92Ymxhbmtfd2FpdChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOworCitleHRlcm4gaXJxcmV0dXJuX3QgdmlhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOworZXh0ZXJuIHZvaWQgdmlhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIHZvaWQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIHZpYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpOworCitleHRlcm4gaW50IHZpYV9kbWFfY2xlYW51cChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIHZvaWQgdmlhX2luaXRfY29tbWFuZF92ZXJpZmllcih2b2lkKTsKK2V4dGVybiBpbnQgdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCB2aWFfaW5pdF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgdmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHZpYV9yZWxlYXNlX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGNvbnRleHQpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZHMuYyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmM2RmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RzLmMKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDAzIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDMgUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAwIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAsIEluYy4sIEhzaW5DaHUsIFRhaXdhbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFZJQSwgUzMgR1JBUEhJQ1MsIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJ2aWFfZHMuaCIKK2V4dGVybiB1bnNpZ25lZCBpbnQgVklBX0RFQlVHOworCitzZXRfdCAqdmlhX3NldEluaXQodm9pZCkKK3sKKwlpbnQgaTsKKwlzZXRfdCAqc2V0OworCXNldCA9IChzZXRfdCAqKSBkcm1fYWxsb2Moc2l6ZW9mKHNldF90KSwgRFJNX01FTV9EUklWRVIpOworCWZvciAoaSA9IDA7IGkgPCBTRVRfU0laRTsgaSsrKSB7CisJCXNldC0+bGlzdFtpXS5mcmVlX25leHQgPSBpICsgMTsKKwkJc2V0LT5saXN0W2ldLmFsbG9jX25leHQgPSAtMTsKKwl9CisJc2V0LT5saXN0W1NFVF9TSVpFIC0gMV0uZnJlZV9uZXh0ID0gLTE7CisJc2V0LT5mcmVlID0gMDsKKwlzZXQtPmFsbG9jID0gLTE7CisJc2V0LT50cmFjZSA9IC0xOworCXJldHVybiBzZXQ7Cit9CisKK2ludCB2aWFfc2V0QWRkKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSkKK3sKKwlpbnQgZnJlZSA9IHNldC0+ZnJlZTsKKwlpZiAoZnJlZSAhPSAtMSkgeworCQlzZXQtPmxpc3RbZnJlZV0udmFsID0gaXRlbTsKKwkJc2V0LT5mcmVlID0gc2V0LT5saXN0W2ZyZWVdLmZyZWVfbmV4dDsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisJc2V0LT5saXN0W2ZyZWVdLmFsbG9jX25leHQgPSBzZXQtPmFsbG9jOworCXNldC0+YWxsb2MgPSBmcmVlOworCXNldC0+bGlzdFtmcmVlXS5mcmVlX25leHQgPSAtMTsKKwlyZXR1cm4gMTsKK30KKworaW50IHZpYV9zZXREZWwoc2V0X3QgKiBzZXQsIElURU1fVFlQRSBpdGVtKQoreworCWludCBhbGxvYyA9IHNldC0+YWxsb2M7CisJaW50IHByZXYgPSAtMTsKKworCXdoaWxlIChhbGxvYyAhPSAtMSkgeworCQlpZiAoc2V0LT5saXN0W2FsbG9jXS52YWwgPT0gaXRlbSkgeworCQkJaWYgKHByZXYgIT0gLTEpCisJCQkJc2V0LT5saXN0W3ByZXZdLmFsbG9jX25leHQgPQorCQkJCSAgICBzZXQtPmxpc3RbYWxsb2NdLmFsbG9jX25leHQ7CisJCQllbHNlCisJCQkJc2V0LT5hbGxvYyA9IHNldC0+bGlzdFthbGxvY10uYWxsb2NfbmV4dDsKKwkJCWJyZWFrOworCQl9CisJCXByZXYgPSBhbGxvYzsKKwkJYWxsb2MgPSBzZXQtPmxpc3RbYWxsb2NdLmFsbG9jX25leHQ7CisJfQorCisJaWYgKGFsbG9jID09IC0xKQorCQlyZXR1cm4gMDsKKworCXNldC0+bGlzdFthbGxvY10uZnJlZV9uZXh0ID0gc2V0LT5mcmVlOworCXNldC0+ZnJlZSA9IGFsbG9jOworCXNldC0+bGlzdFthbGxvY10uYWxsb2NfbmV4dCA9IC0xOworCisJcmV0dXJuIDE7Cit9CisKKy8qIHNldEZpcnN0IC0+IHNldEFkZCAtPiBzZXROZXh0IGlzIHdyb25nICovCisKK2ludCB2aWFfc2V0Rmlyc3Qoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pCit7CisJaWYgKHNldC0+YWxsb2MgPT0gLTEpCisJCXJldHVybiAwOworCisJKml0ZW0gPSBzZXQtPmxpc3Rbc2V0LT5hbGxvY10udmFsOworCXNldC0+dHJhY2UgPSBzZXQtPmxpc3Rbc2V0LT5hbGxvY10uYWxsb2NfbmV4dDsKKworCXJldHVybiAxOworfQorCitpbnQgdmlhX3NldE5leHQoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pCit7CisJaWYgKHNldC0+dHJhY2UgPT0gLTEpCisJCXJldHVybiAwOworCisJKml0ZW0gPSBzZXQtPmxpc3Rbc2V0LT50cmFjZV0udmFsOworCXNldC0+dHJhY2UgPSBzZXQtPmxpc3Rbc2V0LT50cmFjZV0uYWxsb2NfbmV4dDsKKworCXJldHVybiAxOworfQorCitpbnQgdmlhX3NldERlc3Ryb3koc2V0X3QgKiBzZXQpCit7CisJZHJtX2ZyZWUoc2V0LCBzaXplb2Yoc2V0X3QpLCBEUk1fTUVNX0RSSVZFUik7CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBJU0ZSRUUoYnB0cikgKChicHRyKS0+ZnJlZSkKKworI2RlZmluZSBmcHJpbnRmKGZtdCwgYXJnLi4uKSBkb3t9d2hpbGUoMCkKKworbWVtSGVhcF90ICp2aWFfbW1Jbml0KGludCBvZnMsIGludCBzaXplKQoreworCVBNZW1CbG9jayBibG9ja3M7CisKKwlpZiAoc2l6ZSA8PSAwKQorCQlyZXR1cm4gMDsKKworCWJsb2NrcyA9IChUTWVtQmxvY2sgKikgZHJtX2NhbGxvYygxLCBzaXplb2YoVE1lbUJsb2NrKSwgRFJNX01FTV9EUklWRVIpOworCisJaWYgKGJsb2NrcykgeworCQlibG9ja3MtPm9mcyA9IG9mczsKKwkJYmxvY2tzLT5zaXplID0gc2l6ZTsKKwkJYmxvY2tzLT5mcmVlID0gMTsKKwkJcmV0dXJuIChtZW1IZWFwX3QgKikgYmxvY2tzOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIFRNZW1CbG9jayAqU2xpY2VCbG9jayhUTWVtQmxvY2sgKiBwLAorCQkJICAgICBpbnQgc3RhcnRvZnMsIGludCBzaXplLAorCQkJICAgICBpbnQgcmVzZXJ2ZWQsIGludCBhbGlnbm1lbnQpCit7CisJVE1lbUJsb2NrICpuZXdibG9jazsKKworCS8qIGJyZWFrIGxlZnQgKi8KKwlpZiAoc3RhcnRvZnMgPiBwLT5vZnMpIHsKKwkJbmV3YmxvY2sgPQorCQkgICAgKFRNZW1CbG9jayAqKSBkcm1fY2FsbG9jKDEsIHNpemVvZihUTWVtQmxvY2spLAorCQkJCQkgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJbmV3YmxvY2stPm9mcyA9IHN0YXJ0b2ZzOworCQluZXdibG9jay0+c2l6ZSA9IHAtPnNpemUgLSAoc3RhcnRvZnMgLSBwLT5vZnMpOworCQluZXdibG9jay0+ZnJlZSA9IDE7CisJCW5ld2Jsb2NrLT5uZXh0ID0gcC0+bmV4dDsKKwkJcC0+c2l6ZSAtPSBuZXdibG9jay0+c2l6ZTsKKwkJcC0+bmV4dCA9IG5ld2Jsb2NrOworCQlwID0gbmV3YmxvY2s7CisJfQorCisJLyogYnJlYWsgcmlnaHQgKi8KKwlpZiAoc2l6ZSA8IHAtPnNpemUpIHsKKwkJbmV3YmxvY2sgPQorCQkgICAgKFRNZW1CbG9jayAqKSBkcm1fY2FsbG9jKDEsIHNpemVvZihUTWVtQmxvY2spLAorCQkJCQkgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJbmV3YmxvY2stPm9mcyA9IHN0YXJ0b2ZzICsgc2l6ZTsKKwkJbmV3YmxvY2stPnNpemUgPSBwLT5zaXplIC0gc2l6ZTsKKwkJbmV3YmxvY2stPmZyZWUgPSAxOworCQluZXdibG9jay0+bmV4dCA9IHAtPm5leHQ7CisJCXAtPnNpemUgPSBzaXplOworCQlwLT5uZXh0ID0gbmV3YmxvY2s7CisJfQorCisJLyogcCA9IG1pZGRsZSBibG9jayAqLworCXAtPmFsaWduID0gYWxpZ25tZW50OworCXAtPmZyZWUgPSAwOworCXAtPnJlc2VydmVkID0gcmVzZXJ2ZWQ7CisJcmV0dXJuIHA7Cit9CisKK1BNZW1CbG9jayB2aWFfbW1BbGxvY01lbShtZW1IZWFwX3QgKiBoZWFwLCBpbnQgc2l6ZSwgaW50IGFsaWduMiwKKwkJCSBpbnQgc3RhcnRTZWFyY2gpCit7CisJaW50IG1hc2ssIHN0YXJ0b2ZzLCBlbmRvZnM7CisJVE1lbUJsb2NrICpwOworCisJaWYgKCFoZWFwIHx8IGFsaWduMiA8IDAgfHwgc2l6ZSA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCW1hc2sgPSAoMSA8PCBhbGlnbjIpIC0gMTsKKwlzdGFydG9mcyA9IDA7CisJcCA9IChUTWVtQmxvY2sgKikgaGVhcDsKKworCXdoaWxlIChwKSB7CisJCWlmIChJU0ZSRUUocCkpIHsKKwkJCXN0YXJ0b2ZzID0gKHAtPm9mcyArIG1hc2spICYgfm1hc2s7CisKKwkJCWlmIChzdGFydG9mcyA8IHN0YXJ0U2VhcmNoKQorCQkJCXN0YXJ0b2ZzID0gc3RhcnRTZWFyY2g7CisKKwkJCWVuZG9mcyA9IHN0YXJ0b2ZzICsgc2l6ZTsKKworCQkJaWYgKGVuZG9mcyA8PSAocC0+b2ZzICsgcC0+c2l6ZSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlwID0gcC0+bmV4dDsKKwl9CisKKwlpZiAoIXApCisJCXJldHVybiBOVUxMOworCisJcCA9IFNsaWNlQmxvY2socCwgc3RhcnRvZnMsIHNpemUsIDAsIG1hc2sgKyAxKTsKKwlwLT5oZWFwID0gaGVhcDsKKworCXJldHVybiBwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgSm9pbjJCbG9ja3MoVE1lbUJsb2NrICogcCkKK3sKKwlpZiAocC0+ZnJlZSAmJiBwLT5uZXh0ICYmIHAtPm5leHQtPmZyZWUpIHsKKwkJVE1lbUJsb2NrICpxID0gcC0+bmV4dDsKKwkJcC0+c2l6ZSArPSBxLT5zaXplOworCQlwLT5uZXh0ID0gcS0+bmV4dDsKKwkJZHJtX2ZyZWUocSwgc2l6ZW9mKFRNZW1CbG9jayksIERSTV9NRU1fRFJJVkVSKTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZpYV9tbUZyZWVNZW0oUE1lbUJsb2NrIGIpCit7CisJVE1lbUJsb2NrICpwLCAqcHJldjsKKworCWlmICghYikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWItPmhlYXApIHsKKwkJZnByaW50ZihzdGRlcnIsICJubyBoZWFwXG4iKTsKKworCQlyZXR1cm4gLTE7CisJfQorCisJcCA9IGItPmhlYXA7CisJcHJldiA9IE5VTEw7CisKKwl3aGlsZSAocCAmJiBwICE9IGIpIHsKKwkJcHJldiA9IHA7CisJCXAgPSBwLT5uZXh0OworCX0KKworCWlmICghcCB8fCBwLT5mcmVlIHx8IHAtPnJlc2VydmVkKSB7CisJCWlmICghcCkKKwkJCWZwcmludGYoc3RkZXJyLCAiYmxvY2sgbm90IGZvdW5kIGluIGhlYXBcbiIpOworCQllbHNlIGlmIChwLT5mcmVlKQorCQkJZnByaW50ZihzdGRlcnIsICJibG9jayBhbHJlYWR5IGZyZWVcbiIpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgImJsb2NrIGlzIHJlc2VydmVkXG4iKTsKKworCQlyZXR1cm4gLTE7CisJfQorCisJcC0+ZnJlZSA9IDE7CisJSm9pbjJCbG9ja3MocCk7CisKKwlpZiAocHJldikKKwkJSm9pbjJCbG9ja3MocHJldik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RzLmggYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOWM3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcy5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMCBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBDb3JwLCBJbmMuLCBIc2luQ2h1LCBUYWl3YW4uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVklBLCBTMyBHUkFQSElDUywgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX3ZpYV9kc19oXworI2RlZmluZSBfdmlhX2RzX2hfCisKKyNpbmNsdWRlICJkcm1QLmgiCisKKy8qIFNldCBEYXRhIFN0cnVjdHVyZSAqLworI2RlZmluZSBTRVRfU0laRSA1MDAwCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgSVRFTV9UWVBFOworCit0eXBlZGVmIHN0cnVjdCB7CisJSVRFTV9UWVBFIHZhbDsKKwlpbnQgYWxsb2NfbmV4dCwgZnJlZV9uZXh0OworfSBsaXN0X2l0ZW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBhbGxvYzsKKwlpbnQgZnJlZTsKKwlpbnQgdHJhY2U7CisJbGlzdF9pdGVtX3QgbGlzdFtTRVRfU0laRV07Cit9IHNldF90OworCitzZXRfdCAqdmlhX3NldEluaXQodm9pZCk7CitpbnQgdmlhX3NldEFkZChzZXRfdCAqIHNldCwgSVRFTV9UWVBFIGl0ZW0pOworaW50IHZpYV9zZXREZWwoc2V0X3QgKiBzZXQsIElURU1fVFlQRSBpdGVtKTsKK2ludCB2aWFfc2V0Rmlyc3Qoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pOworaW50IHZpYV9zZXROZXh0KHNldF90ICogc2V0LCBJVEVNX1RZUEUgKiBpdGVtKTsKK2ludCB2aWFfc2V0RGVzdHJveShzZXRfdCAqIHNldCk7CisKKyNlbmRpZgorCisjaWZuZGVmIE1NX0lOQworI2RlZmluZSBNTV9JTkMKKworc3RydWN0IG1lbV9ibG9ja190IHsKKwlzdHJ1Y3QgbWVtX2Jsb2NrX3QgKm5leHQ7CisJc3RydWN0IG1lbV9ibG9ja190ICpoZWFwOworCWludCBvZnMsIHNpemU7CisJaW50IGFsaWduOworCWludCBmcmVlOjE7CisJaW50IHJlc2VydmVkOjE7Cit9OwordHlwZWRlZiBzdHJ1Y3QgbWVtX2Jsb2NrX3QgVE1lbUJsb2NrOwordHlwZWRlZiBzdHJ1Y3QgbWVtX2Jsb2NrX3QgKlBNZW1CbG9jazsKKworLyogYSBoZWFwIGlzIGp1c3QgdGhlIGZpcnN0IGJsb2NrIGluIGEgY2hhaW4gKi8KK3R5cGVkZWYgc3RydWN0IG1lbV9ibG9ja190IG1lbUhlYXBfdDsKKworc3RhdGljIF9faW5saW5lX18gaW50IG1tQmxvY2tTaXplKFBNZW1CbG9jayBiKQoreworCXJldHVybiBiLT5zaXplOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbW1PZmZzZXQoUE1lbUJsb2NrIGIpCit7CisJcmV0dXJuIGItPm9mczsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBtbU1hcmtSZXNlcnZlZChQTWVtQmxvY2sgYikKK3sKKwliLT5yZXNlcnZlZCA9IDE7Cit9CisKKy8qCisgKiBpbnB1dDogdG90YWwgc2l6ZSBpbiBieXRlcworICogcmV0dXJuOiBhIGhlYXAgcG9pbnRlciBpZiBPSywgTlVMTCBpZiBlcnJvcgorICovCittZW1IZWFwX3QgKnZpYV9tbUluaXQoaW50IG9mcywgaW50IHNpemUpOworCitQTWVtQmxvY2sgdmlhX21tQWxsb2NNZW0obWVtSGVhcF90ICogaGVhcCwgaW50IHNpemUsIGludCBhbGlnbjIsCisJCQkgaW50IHN0YXJ0U2VhcmNoKTsKKworLyoKKyAqIEZyZWUgYmxvY2sgc3RhcnRzIGF0IG9mZnNldAorICogaW5wdXQ6IHBvaW50ZXIgdG8gYSBibG9jaworICogcmV0dXJuOiAwIGlmIE9LLCAtMSBpZiBlcnJvcgorICovCitpbnQgdmlhX21tRnJlZU1lbShQTWVtQmxvY2sgYik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODAyN2YzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qIHZpYV9pcnEuYworICoKKyAqIENvcHlyaWdodCAyMDA0IEJFQU0gTHRkLgorICogQ29weXJpZ2h0IDIwMDIgVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAyMDA1IFRob21hcyBIZWxsc3Ryb20uCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBCRUFNIExURCwgVFVOR1NURU4gR1JBUEhJQ1MgIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgVGVycnkgQmFybmFieSA8dGVycnkxQGJlYW0ubHRkLnVrPgorICogICAgS2VpdGggV2hpdHdlbGwgPGtlaXRoQHR1bmdzdGVuZ3JhcGhpY3MuY29tPgorICogICAgVGhvbWFzIEhlbGxzdHJvbSA8dW5pY2hyb21lQHNoaXBtYWlsLm9yZz4KKyAqCisgKiBUaGlzIGNvZGUgcHJvdmlkZXMgc3RhbmRhcmQgRFJNIGFjY2VzcyB0byB0aGUgVmlhIFVuaWNocm9tZSAvIFBybyBWZXJ0aWNhbCBibGFuaworICogaW50ZXJydXB0LCBhcyB3ZWxsIGFzIGFuIGluZnJhc3RydWN0dXJlIHRvIGhhbmRsZSBvdGhlciBpbnRlcnJ1cHRzIG9mIHRoZSBjaGlwLgorICogVGhlIHJlZnJlc2ggcmF0ZSBpcyBhbHNvIGNhbGN1bGF0ZWQgZm9yIHZpZGVvIHBsYXliYWNrIHN5bmMgcHVycG9zZXMuCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJ2aWFfZHJtLmgiCisjaW5jbHVkZSAidmlhX2Rydi5oIgorCisjZGVmaW5lIFZJQV9SRUdfSU5URVJSVVBUICAgICAgIDB4MjAwCisKKy8qIFZJQV9SRUdfSU5URVJSVVBUICovCisjZGVmaW5lIFZJQV9JUlFfR0xPQkFMICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBWSUFfSVJRX1ZCTEFOS19FTkFCTEUgICAoMSA8PCAxOSkKKyNkZWZpbmUgVklBX0lSUV9WQkxBTktfUEVORElORyAgKDEgPDwgMykKKyNkZWZpbmUgVklBX0lSUV9IUVYwX0VOQUJMRSAgICAgKDEgPDwgMTEpCisjZGVmaW5lIFZJQV9JUlFfSFFWMV9FTkFCTEUgICAgICgxIDw8IDI1KQorI2RlZmluZSBWSUFfSVJRX0hRVjBfUEVORElORyAgICAoMSA8PCA5KQorI2RlZmluZSBWSUFfSVJRX0hRVjFfUEVORElORyAgICAoMSA8PCAxMCkKKworLyoKKyAqIERldmljZS1zcGVjaWZpYyBJUlFzIGdvIGhlcmUuIFRoaXMgdHlwZSBtaWdodCBuZWVkIHRvIGJlIGV4dGVuZGVkIHdpdGgKKyAqIHRoZSByZWdpc3RlciBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgSVJRIGNvbnRyb2wgcmVnaXN0ZXJzLgorICogQ3VycmVudGx5IHdlIGFjdGl2YXRlIHRoZSBIUVYgaW50ZXJydXB0cyBvZiAgVW5pY2hyb21lIFBybyBncm91cCBBLiAKKyAqLworCitzdGF0aWMgbWFza2FycmF5X3QgdmlhX3Byb19ncm91cF9hX2lycXNbXSA9IHsKKwl7VklBX0lSUV9IUVYwX0VOQUJMRSwgVklBX0lSUV9IUVYwX1BFTkRJTkcsIDB4MDAwMDAzRDAsIDB4MDAwMDgwMTAsIDB4MDAwMDAwMDAgfSwKKwl7VklBX0lSUV9IUVYxX0VOQUJMRSwgVklBX0lSUV9IUVYxX1BFTkRJTkcsIDB4MDAwMDEzRDAsIDB4MDAwMDgwMTAsIDB4MDAwMDAwMDAgfX07CitzdGF0aWMgaW50IHZpYV9udW1fcHJvX2dyb3VwX2EgPSBzaXplb2YodmlhX3Byb19ncm91cF9hX2lycXMpL3NpemVvZihtYXNrYXJyYXlfdCk7CisKK3N0YXRpYyBtYXNrYXJyYXlfdCB2aWFfdW5pY2hyb21lX2lycXNbXSA9IHt9Oworc3RhdGljIGludCB2aWFfbnVtX3VuaWNocm9tZSA9IHNpemVvZih2aWFfdW5pY2hyb21lX2lycXMpL3NpemVvZihtYXNrYXJyYXlfdCk7CisKKworc3RhdGljIHVuc2lnbmVkIHRpbWVfZGlmZihzdHJ1Y3QgdGltZXZhbCAqbm93LHN0cnVjdCB0aW1ldmFsICp0aGVuKSAKK3sKKyAgICByZXR1cm4gKG5vdy0+dHZfdXNlYyA+PSB0aGVuLT50dl91c2VjKSA/CisgICAgICAgIG5vdy0+dHZfdXNlYyAtIHRoZW4tPnR2X3VzZWMgOgorICAgICAgICAxMDAwMDAwIC0gKHRoZW4tPnR2X3VzZWMgLSBub3ctPnR2X3VzZWMpOworfQorCitpcnFyZXR1cm5fdCB2aWFfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKK3sKKwlkcm1fZGV2aWNlX3QgKmRldiA9IChkcm1fZGV2aWNlX3QgKikgYXJnOworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBzdGF0dXM7CisJaW50IGhhbmRsZWQgPSAwOworCXN0cnVjdCB0aW1ldmFsIGN1cl92Ymxhbms7CisJZHJtX3ZpYV9pcnFfdCAqY3VyX2lycSA9IGRldl9wcml2LT52aWFfaXJxczsKKwlpbnQgaTsKKworCXN0YXR1cyA9IFZJQV9SRUFEKFZJQV9SRUdfSU5URVJSVVBUKTsKKwlpZiAoc3RhdHVzICYgVklBX0lSUV9WQkxBTktfUEVORElORykgeworCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZCk7CisgICAgICAgICAgICAgICAgaWYgKCEoYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSAmIDB4MEYpKSB7CisJCQlkb19nZXR0aW1lb2ZkYXkoJmN1cl92YmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRldl9wcml2LT5sYXN0X3ZibGFua192YWxpZCkgeworCQkJCWRldl9wcml2LT51c2VjX3Blcl92YmxhbmsgPSAKKwkJCQkJdGltZV9kaWZmKCAmY3VyX3ZibGFuaywmZGV2X3ByaXYtPmxhc3RfdmJsYW5rKSA+PiA0OworCQkJfQorCQkJZGV2X3ByaXYtPmxhc3RfdmJsYW5rID0gY3VyX3ZibGFuazsKKwkJCWRldl9wcml2LT5sYXN0X3ZibGFua192YWxpZCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghKGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkgJiAweEZGKSkgeworCQkJRFJNX0RFQlVHKCJVUyBwZXIgdmJsYW5rIGlzOiAldVxuIiwKKwkJCQlkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rKTsKKwkJfQorCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7CisJCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJCWhhbmRsZWQgPSAxOworCX0KKwkKKworCWZvciAoaT0wOyBpPGRldl9wcml2LT5udW1faXJxczsgKytpKSB7CisJCWlmIChzdGF0dXMgJiBjdXJfaXJxLT5wZW5kaW5nX21hc2spIHsKKwkJCWF0b21pY19pbmMoICZjdXJfaXJxLT5pcnFfcmVjZWl2ZWQgKTsKKwkJCURSTV9XQUtFVVAoICZjdXJfaXJxLT5pcnFfcXVldWUgKTsKKwkJCWhhbmRsZWQgPSAxOworCQl9CisJCWN1cl9pcnErKzsKKwl9CisJCisJLyogQWNrbm93bGVnZSBpbnRlcnJ1cHRzICovCisJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMpOworCisKKwlpZiAoaGFuZGxlZCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCWVsc2UKKwkJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHZpYWRydl9hY2tub3dsZWRnZV9pcnFzKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit7CisJdTMyIHN0YXR1czsKKworCWlmIChkZXZfcHJpdikgeworCQkvKiBBY2tub3dsZWdlIGludGVycnVwdHMgKi8KKwkJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCQlWSUFfV1JJVEUoVklBX1JFR19JTlRFUlJVUFQsIHN0YXR1cyB8IAorCQkJICBkZXZfcHJpdi0+aXJxX3BlbmRpbmdfbWFzayk7CisJfQorfQorCitpbnQgdmlhX2RyaXZlcl92Ymxhbmtfd2FpdChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCit7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgaW50IGN1cl92Ymxhbms7CisJaW50IHJldCA9IDA7CisKKwlEUk1fREVCVUcoInZpYWRydl92Ymxhbmtfd2FpdFxuIik7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2aWFkcnZfYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdik7CisKKwkvKiBBc3N1bWUgdGhhdCB0aGUgdXNlciBoYXMgbWlzc2VkIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlcgorCSAqIGJ5IGFib3V0IGEgZGF5IHJhdGhlciB0aGFuIHNoZSB3YW50cyB0byB3YWl0IGZvciB5ZWFycworCSAqIHVzaW5nIHZlcnRpY2FsIGJsYW5rcy4uLgorCSAqLworCisJRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZSwgMyAqIERSTV9IWiwKKwkJICAgICgoKGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpKSAtCisJCSAgICAgICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7CisJCisJKnNlcXVlbmNlID0gY3VyX3ZibGFuazsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IAordmlhX2RyaXZlcl9pcnFfd2FpdChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCBpcnEsIGludCBmb3JjZV9zZXF1ZW5jZSwKKwkJICAgIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCit7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgaW50IGN1cl9pcnFfc2VxdWVuY2U7CisJZHJtX3ZpYV9pcnFfdCAqY3VyX2lycSA9IGRldl9wcml2LT52aWFfaXJxczsKKwlpbnQgcmV0ID0gMDsKKwltYXNrYXJyYXlfdCAqbWFza3MgPSBkZXZfcHJpdi0+aXJxX21hc2tzOworCisJRFJNX0RFQlVHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghZGV2X3ByaXYpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwl9CisKKwlpZiAoaXJxID49IGRldl9wcml2LT5udW1faXJxcyApIHsKKwkJRFJNX0VSUk9SKCIlcyBUcnlpbmcgdG8gd2FpdCBvbiB1bmtub3duIGlycSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKwkJCisJY3VyX2lycSArPSBpcnE7CisKKwlpZiAobWFza3NbaXJxXVsyXSAmJiAhZm9yY2Vfc2VxdWVuY2UpIHsKKwkJRFJNX1dBSVRfT04ocmV0LCBjdXJfaXJxLT5pcnFfcXVldWUsIDMgKiBEUk1fSFosCisJCQkgICAgKChWSUFfUkVBRChtYXNrc1tpcnFdWzJdKSAmIG1hc2tzW2lycV1bM10pID09IG1hc2tzW2lycV1bNF0pKTsKKwkJY3VyX2lycV9zZXF1ZW5jZSA9IGF0b21pY19yZWFkKCZjdXJfaXJxLT5pcnFfcmVjZWl2ZWQpOworCX0gZWxzZSB7CisJCURSTV9XQUlUX09OKHJldCwgY3VyX2lycS0+aXJxX3F1ZXVlLCAzICogRFJNX0haLAorCQkJICAgICgoKGN1cl9pcnFfc2VxdWVuY2UgPSBhdG9taWNfcmVhZCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkKSkgLQorCQkJICAgICAgKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsJCQorCX0KKwkqc2VxdWVuY2UgPSBjdXJfaXJxX3NlcXVlbmNlOworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIGRybV9kbWEuaCBob29rcworICovCisKK3ZvaWQgdmlhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHN0YXR1czsKKwlkcm1fdmlhX2lycV90ICpjdXJfaXJxID0gZGV2X3ByaXYtPnZpYV9pcnFzOworCWludCBpOworCisJRFJNX0RFQlVHKCJkcml2ZXJfaXJxX3ByZWluc3RhbGw6IGRldl9wcml2OiAlcFxuIiwgZGV2X3ByaXYpOworCWlmIChkZXZfcHJpdikgeworCisJCWRldl9wcml2LT5pcnFfZW5hYmxlX21hc2sgPSBWSUFfSVJRX1ZCTEFOS19FTkFCTEU7CisJCWRldl9wcml2LT5pcnFfcGVuZGluZ19tYXNrID0gVklBX0lSUV9WQkxBTktfUEVORElORzsKKworCQlkZXZfcHJpdi0+aXJxX21hc2tzID0gKGRldl9wcml2LT5wcm9fZ3JvdXBfYSkgPworCQkJdmlhX3Byb19ncm91cF9hX2lycXMgOiB2aWFfdW5pY2hyb21lX2lycXM7CisJCWRldl9wcml2LT5udW1faXJxcyA9IChkZXZfcHJpdi0+cHJvX2dyb3VwX2EpID8KKwkJCXZpYV9udW1fcHJvX2dyb3VwX2EgOiB2aWFfbnVtX3VuaWNocm9tZTsKKwkJCisJCWZvcihpPTA7IGkgPCBkZXZfcHJpdi0+bnVtX2lycXM7ICsraSkgeworCQkJYXRvbWljX3NldCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkLCAwKTsKKwkJCWN1cl9pcnEtPmVuYWJsZV9tYXNrID0gZGV2X3ByaXYtPmlycV9tYXNrc1tpXVswXTsgCisJCQljdXJfaXJxLT5wZW5kaW5nX21hc2sgPSBkZXZfcHJpdi0+aXJxX21hc2tzW2ldWzFdOworCQkJRFJNX0lOSVRfV0FJVFFVRVVFKCAmY3VyX2lycS0+aXJxX3F1ZXVlICk7CisJCQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9tYXNrIHw9IGN1cl9pcnEtPmVuYWJsZV9tYXNrOworCQkJZGV2X3ByaXYtPmlycV9wZW5kaW5nX21hc2sgfD0gY3VyX2lycS0+cGVuZGluZ19tYXNrOworCQkJY3VyX2lycSsrOworCQkJCisJCQlEUk1fREVCVUcoIkluaXRpYWxpemluZyBJUlEgJWRcbiIsIGkpOworCQl9CisJCQkKKwkgICAgICAgIGRldl9wcml2LT5sYXN0X3ZibGFua192YWxpZCA9IDA7CisKKwkJLy8gQ2xlYXIgVlN5bmMgaW50ZXJydXB0IHJlZ3MKKwkJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCQlWSUFfV1JJVEUoVklBX1JFR19JTlRFUlJVUFQsIHN0YXR1cyAmIAorCQkJICB+KGRldl9wcml2LT5pcnFfZW5hYmxlX21hc2spKTsKKwkJCisJCS8qIENsZWFyIGJpdHMgaWYgdGhleSdyZSBhbHJlYWR5IGhpZ2ggKi8KKwkJdmlhZHJ2X2Fja25vd2xlZGdlX2lycXMoZGV2X3ByaXYpOworCX0KK30KKwordm9pZCB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHN0YXR1czsKKworCURSTV9ERUJVRygidmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGxcbiIpOworCWlmIChkZXZfcHJpdikgeworCQlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7CisJCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzIHwgVklBX0lSUV9HTE9CQUwKKwkJCSAgfCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9tYXNrKTsKKworCQkvKiBTb21lIG1hZ2ljLCBvaCBmb3Igc29tZSBkYXRhIHNoZWV0cyAhICovCisKKwkJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCQlWSUFfV1JJVEU4KDB4ODNkNSwgVklBX1JFQUQ4KDB4ODNkNSkgfCAweDMwKTsKKwkJCisJfQorfQorCit2b2lkIHZpYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHN0YXR1czsKKworCURSTV9ERUJVRygiZHJpdmVyX2lycV91bmluc3RhbGwpXG4iKTsKKwlpZiAoZGV2X3ByaXYpIHsKKworCQkvKiBTb21lIG1vcmUgbWFnaWMsIG9oIGZvciBzb21lIGRhdGEgc2hlZXRzICEgKi8KKworCQlWSUFfV1JJVEU4KDB4ODNkNCwgMHgxMSk7CisJCVZJQV9XUklURTgoMHg4M2Q1LCBWSUFfUkVBRDgoMHg4M2Q1KSAmIH4weDMwKTsKKworCQlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7CisJCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzICYgCisJCQkgIH4oVklBX0lSUV9WQkxBTktfRU5BQkxFIHwgZGV2X3ByaXYtPmlycV9lbmFibGVfbWFzaykpOworCX0KK30KKworaW50IHZpYV93YWl0X2lycShEUk1fSU9DVExfQVJHUykKK3sKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OworCWRybV92aWFfaXJxd2FpdF90IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWRhdGE7CisJZHJtX3ZpYV9pcnF3YWl0X3QgaXJxd2FpdDsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IHJldCA9IDA7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX3ZpYV9pcnFfdCAqY3VyX2lycSA9IGRldl9wcml2LT52aWFfaXJxczsKKwlpbnQgZm9yY2Vfc2VxdWVuY2U7CisKKwlpZiAoIWRldi0+aXJxKQorCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGlycXdhaXQsIGFyZ3AsIHNpemVvZihpcnF3YWl0KSk7CisJaWYgKGlycXdhaXQucmVxdWVzdC5pcnEgPj0gZGV2X3ByaXYtPm51bV9pcnFzKSB7CisJCURSTV9FUlJPUigiJXMgVHJ5aW5nIHRvIHdhaXQgb24gdW5rbm93biBpcnEgJWRcbiIsIF9fRlVOQ1RJT05fXywgCisJCQkgIGlycXdhaXQucmVxdWVzdC5pcnEpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKworCWN1cl9pcnEgKz0gaXJxd2FpdC5yZXF1ZXN0LmlycTsKKworCXN3aXRjaCAoaXJxd2FpdC5yZXF1ZXN0LnR5cGUgJiB+VklBX0lSUV9GTEFHU19NQVNLKSB7CisJY2FzZSBWSUFfSVJRX1JFTEFUSVZFOgorCQlpcnF3YWl0LnJlcXVlc3Quc2VxdWVuY2UgKz0gYXRvbWljX3JlYWQoJmN1cl9pcnEtPmlycV9yZWNlaXZlZCk7CisJCWlycXdhaXQucmVxdWVzdC50eXBlICY9IH5fRFJNX1ZCTEFOS19SRUxBVElWRTsKKwljYXNlIFZJQV9JUlFfQUJTT0xVVEU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJfQorCisJaWYgKGlycXdhaXQucmVxdWVzdC50eXBlICYgVklBX0lSUV9TSUdOQUwpIHsKKwkJRFJNX0VSUk9SKCIlcyBTaWduYWxzIG9uIFZpYSBJUlFzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXG4iLCAKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwl9CisKKwlmb3JjZV9zZXF1ZW5jZSA9IChpcnF3YWl0LnJlcXVlc3QudHlwZSAmIFZJQV9JUlFfRk9SQ0VfU0VRVUVOQ0UpOworCisJcmV0ID0gdmlhX2RyaXZlcl9pcnFfd2FpdChkZXYsIGlycXdhaXQucmVxdWVzdC5pcnEsIGZvcmNlX3NlcXVlbmNlLAorCQkJCSAgJmlycXdhaXQucmVxdWVzdC5zZXF1ZW5jZSk7CisJZG9fZ2V0dGltZW9mZGF5KCZub3cpOworCWlycXdhaXQucmVwbHkudHZhbF9zZWMgPSBub3cudHZfc2VjOworCWlycXdhaXQucmVwbHkudHZhbF91c2VjID0gbm93LnR2X3VzZWM7CisKKwlEUk1fQ09QWV9UT19VU0VSX0lPQ1RMKGFyZ3AsIGlycXdhaXQsIHNpemVvZihpcnF3YWl0KSk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfbWFwLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmU4MjliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfbWFwLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDAzIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDMgUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFZJQSwgUzMgR1JBUEhJQ1MsIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgInZpYV9kcm0uaCIKKyNpbmNsdWRlICJ2aWFfZHJ2LmgiCisKK3N0YXRpYyBpbnQgdmlhX2RvX2luaXRfbWFwKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX3ZpYV9pbml0X3QgKiBpbml0KQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdjsKKworCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlkZXZfcHJpdiA9IGRybV9hbGxvYyhzaXplb2YoZHJtX3ZpYV9wcml2YXRlX3QpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKGRldl9wcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KGRldl9wcml2LCAwLCBzaXplb2YoZHJtX3ZpYV9wcml2YXRlX3QpKTsKKworCURSTV9HRVRTQVJFQSgpOworCWlmICghZGV2X3ByaXYtPnNhcmVhKSB7CisJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgc2FyZWEhXG4iKTsKKwkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CisJCXZpYV9kb19jbGVhbnVwX21hcChkZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfcHJpdi0+ZmIgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+ZmJfb2Zmc2V0KTsKKwlpZiAoIWRldl9wcml2LT5mYikgeworCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIGZyYW1lYnVmZmVyIVxuIik7CisJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OworCQl2aWFfZG9fY2xlYW51cF9tYXAoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9wcml2LT5tbWlvID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPm1taW9fb2Zmc2V0KTsKKwlpZiAoIWRldl9wcml2LT5tbWlvKSB7CisJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgbW1pbyByZWdpb24hXG4iKTsKKwkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CisJCXZpYV9kb19jbGVhbnVwX21hcChkZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfcHJpdi0+c2FyZWFfcHJpdiA9CisJICAgIChkcm1fdmlhX3NhcmVhX3QgKikgKCh1OCAqKSBkZXZfcHJpdi0+c2FyZWEtPmhhbmRsZSArCisJCQkJIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKKworCWRldl9wcml2LT5hZ3BBZGRyID0gaW5pdC0+YWdwQWRkcjsKKworCXZpYV9pbml0X2Z1dGV4KCBkZXZfcHJpdiApOworCWRldl9wcml2LT5wcm9fZ3JvdXBfYSA9IChkZXYtPnBkZXYtPmRldmljZSA9PSAweDMxMTgpOworCisJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFfZG9fY2xlYW51cF9tYXAoZHJtX2RldmljZV90ICogZGV2KQoreworCWlmIChkZXYtPmRldl9wcml2YXRlKSB7CisKKwkJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCQl2aWFfZG1hX2NsZWFudXAoZGV2KTsKKworCQlkcm1fZnJlZShkZXZfcHJpdiwgc2l6ZW9mKGRybV92aWFfcHJpdmF0ZV90KSwgRFJNX01FTV9EUklWRVIpOworCQlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZpYV9tYXBfaW5pdChEUk1fSU9DVExfQVJHUykKK3sKKwlEUk1fREVWSUNFOworCWRybV92aWFfaW5pdF90IGluaXQ7CisKKwlEUk1fREVCVUcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGluaXQsIChkcm1fdmlhX2luaXRfdCAqKSBkYXRhLCBzaXplb2YoaW5pdCkpOworCisJc3dpdGNoIChpbml0LmZ1bmMpIHsKKwljYXNlIFZJQV9JTklUX01BUDoKKwkJcmV0dXJuIHZpYV9kb19pbml0X21hcChkZXYsICZpbml0KTsKKwljYXNlIFZJQV9DTEVBTlVQX01BUDoKKwkJcmV0dXJuIHZpYV9kb19jbGVhbnVwX21hcChkZXYpOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX21tLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMjcxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tbS5jCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWSUEsIFMzIEdSQVBISUNTLCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJ2aWFfZHJtLmgiCisjaW5jbHVkZSAidmlhX2Rydi5oIgorI2luY2x1ZGUgInZpYV9kcy5oIgorI2luY2x1ZGUgInZpYV9tbS5oIgorCisjZGVmaW5lIE1BWF9DT05URVhUIDEwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHVzZWQ7CisJaW50IGNvbnRleHQ7CisJc2V0X3QgKnNldHNbMl07CQkvKiAwIGZvciBmcmFtZSBidWZmZXIsIDEgZm9yIEFHUCAsIDIgZm9yIFN5c3RlbSAqLworfSB2aWFfY29udGV4dF90OworCitzdGF0aWMgdmlhX2NvbnRleHRfdCBnbG9iYWxfcHByaXZbTUFYX0NPTlRFWFRdOworCitzdGF0aWMgaW50IHZpYV9hZ3BfYWxsb2MoZHJtX3ZpYV9tZW1fdCAqIG1lbSk7CitzdGF0aWMgaW50IHZpYV9hZ3BfZnJlZShkcm1fdmlhX21lbV90ICogbWVtKTsKK3N0YXRpYyBpbnQgdmlhX2ZiX2FsbG9jKGRybV92aWFfbWVtX3QgKiBtZW0pOworc3RhdGljIGludCB2aWFfZmJfZnJlZShkcm1fdmlhX21lbV90ICogbWVtKTsKKworc3RhdGljIGludCBhZGRfYWxsb2Nfc2V0KGludCBjb250ZXh0LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlpbnQgaSwgcmV0dmFsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKSB7CisJCWlmIChnbG9iYWxfcHByaXZbaV0udXNlZCAmJiBnbG9iYWxfcHByaXZbaV0uY29udGV4dCA9PSBjb250ZXh0KSB7CisJCQlyZXR2YWwgPSB2aWFfc2V0QWRkKGdsb2JhbF9wcHJpdltpXS5zZXRzW3R5cGVdLCB2YWwpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGRlbF9hbGxvY19zZXQoaW50IGNvbnRleHQsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCWludCBpLCByZXR2YWwgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9DT05URVhUOyBpKyspCisJCWlmIChnbG9iYWxfcHByaXZbaV0udXNlZCAmJiBnbG9iYWxfcHByaXZbaV0uY29udGV4dCA9PSBjb250ZXh0KSB7CisJCQlyZXR2YWwgPSB2aWFfc2V0RGVsKGdsb2JhbF9wcHJpdltpXS5zZXRzW3R5cGVdLCB2YWwpOworCQkJYnJlYWs7CisJCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIGFncCBtZW1vcnkgbWFuYWdlbWVudCAqLworc3RhdGljIG1lbUhlYXBfdCAqQWdwSGVhcCA9IE5VTEw7CisKK2ludCB2aWFfYWdwX2luaXQoRFJNX0lPQ1RMX0FSR1MpCit7CisJZHJtX3ZpYV9hZ3BfdCBhZ3A7CisKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoYWdwLCAoZHJtX3ZpYV9hZ3BfdCAqKSBkYXRhLCBzaXplb2YoYWdwKSk7CisKKwlBZ3BIZWFwID0gdmlhX21tSW5pdChhZ3Aub2Zmc2V0LCBhZ3Auc2l6ZSk7CisKKwlEUk1fREVCVUcoIm9mZnNldCA9ICVsdSwgc2l6ZSA9ICVsdSIsICh1bnNpZ25lZCBsb25nKWFncC5vZmZzZXQsICh1bnNpZ25lZCBsb25nKWFncC5zaXplKTsKKworCXJldHVybiAwOworfQorCisvKiBmYiBtZW1vcnkgbWFuYWdlbWVudCAqLworc3RhdGljIG1lbUhlYXBfdCAqRkJIZWFwID0gTlVMTDsKKworaW50IHZpYV9mYl9pbml0KERSTV9JT0NUTF9BUkdTKQoreworCWRybV92aWFfZmJfdCBmYjsKKworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChmYiwgKGRybV92aWFfZmJfdCAqKSBkYXRhLCBzaXplb2YoZmIpKTsKKworCUZCSGVhcCA9IHZpYV9tbUluaXQoZmIub2Zmc2V0LCBmYi5zaXplKTsKKworCURSTV9ERUJVRygib2Zmc2V0ID0gJWx1LCBzaXplID0gJWx1IiwgKHVuc2lnbmVkIGxvbmcpZmIub2Zmc2V0LCAodW5zaWduZWQgbG9uZylmYi5zaXplKTsKKworCXJldHVybiAwOworfQorCitpbnQgdmlhX2luaXRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY29udGV4dCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKQorCQlpZiAoZ2xvYmFsX3Bwcml2W2ldLnVzZWQgJiYKKwkJICAgIChnbG9iYWxfcHByaXZbaV0uY29udGV4dCA9PSBjb250ZXh0KSkKKwkJCWJyZWFrOworCisJaWYgKGkgPj0gTUFYX0NPTlRFWFQpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9DT05URVhUOyBpKyspIHsKKwkJCWlmICghZ2xvYmFsX3Bwcml2W2ldLnVzZWQpIHsKKwkJCQlnbG9iYWxfcHByaXZbaV0uY29udGV4dCA9IGNvbnRleHQ7CisJCQkJZ2xvYmFsX3Bwcml2W2ldLnVzZWQgPSAxOworCQkJCWdsb2JhbF9wcHJpdltpXS5zZXRzWzBdID0gdmlhX3NldEluaXQoKTsKKwkJCQlnbG9iYWxfcHByaXZbaV0uc2V0c1sxXSA9IHZpYV9zZXRJbml0KCk7CisJCQkJRFJNX0RFQlVHKCJpbml0IGFsbG9jYXRpb24gc2V0LCBzb2NrZXQ9JWQsIgorCQkJCQkgICIgY29udGV4dCA9ICVkXG4iLCBpLCBjb250ZXh0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICgoaSA+PSBNQVhfQ09OVEVYVCkgfHwgKGdsb2JhbF9wcHJpdltpXS5zZXRzWzBdID09IE5VTEwpIHx8CisJCSAgICAoZ2xvYmFsX3Bwcml2W2ldLnNldHNbMV0gPT0gTlVMTCkpIHsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK2ludCB2aWFfZmluYWxfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY29udGV4dCkKK3sJCisgICAgICAgIGludCBpOworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9DT05URVhUOyBpKyspCisJCWlmIChnbG9iYWxfcHByaXZbaV0udXNlZCAmJgorCQkgICAgKGdsb2JhbF9wcHJpdltpXS5jb250ZXh0ID09IGNvbnRleHQpKQorCQkJYnJlYWs7CisKKwlpZiAoaSA8IE1BWF9DT05URVhUKSB7CisJCXNldF90ICpzZXQ7CisJCUlURU1fVFlQRSBpdGVtOworCQlpbnQgcmV0dmFsOworCisJCURSTV9ERUJVRygiZmluZCBzb2NrZXQgJWQsIGNvbnRleHQgPSAlZFxuIiwgaSwgY29udGV4dCk7CisKKwkJLyogVmlkZW8gTWVtb3J5ICovCisJCXNldCA9IGdsb2JhbF9wcHJpdltpXS5zZXRzWzBdOworCQlyZXR2YWwgPSB2aWFfc2V0Rmlyc3Qoc2V0LCAmaXRlbSk7CisJCXdoaWxlIChyZXR2YWwpIHsKKwkJCURSTV9ERUJVRygiZnJlZSB2aWRlbyBtZW1vcnkgMHglbHhcbiIsIGl0ZW0pOworCQkJdmlhX21tRnJlZU1lbSgoUE1lbUJsb2NrKSBpdGVtKTsKKwkJCXJldHZhbCA9IHZpYV9zZXROZXh0KHNldCwgJml0ZW0pOworCQl9CisJCXZpYV9zZXREZXN0cm95KHNldCk7CisKKwkJLyogQUdQIE1lbW9yeSAqLworCQlzZXQgPSBnbG9iYWxfcHByaXZbaV0uc2V0c1sxXTsKKwkJcmV0dmFsID0gdmlhX3NldEZpcnN0KHNldCwgJml0ZW0pOworCQl3aGlsZSAocmV0dmFsKSB7CisJCQlEUk1fREVCVUcoImZyZWUgYWdwIG1lbW9yeSAweCVseFxuIiwgaXRlbSk7CisJCQl2aWFfbW1GcmVlTWVtKChQTWVtQmxvY2spIGl0ZW0pOworCQkJcmV0dmFsID0gdmlhX3NldE5leHQoc2V0LCAmaXRlbSk7CisJCX0KKwkJdmlhX3NldERlc3Ryb3koc2V0KTsKKwkJZ2xvYmFsX3Bwcml2W2ldLnVzZWQgPSAwOworCX0KKwl2aWFfcmVsZWFzZV9mdXRleChkZXZfcHJpdiwgY29udGV4dCk7IAorCQorCQkJCisjaWYgZGVmaW5lZChfX2xpbnV4X18pCisJLyogTGludXggc3BlY2lmaWMgdW50aWwgY29udGV4dCB0cmFja2luZyBjb2RlIGdldHMgcG9ydGVkIHRvIEJTRCAqLworCS8qIExhc3QgY29udGV4dCwgcGVyZm9ybSBjbGVhbnVwICovCisJaWYgKGRldi0+Y3R4X2NvdW50ID09IDEgJiYgZGV2LT5kZXZfcHJpdmF0ZSkgeworCSAgICAgICAgRFJNX0RFQlVHKCJMYXN0IENvbnRleHRcbiIpOworCQlpZiAoZGV2LT5pcnEpCisJCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCisJCXZpYV9jbGVhbnVwX2Z1dGV4KGRldl9wcml2KTsKKwkJdmlhX2RvX2NsZWFudXBfbWFwKGRldik7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KKworaW50IHZpYV9tZW1fYWxsb2MoRFJNX0lPQ1RMX0FSR1MpCit7CisJZHJtX3ZpYV9tZW1fdCBtZW07CisKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwobWVtLCAoZHJtX3ZpYV9tZW1fdCAqKSBkYXRhLCBzaXplb2YobWVtKSk7CisKKwlzd2l0Y2ggKG1lbS50eXBlKSB7CisJY2FzZSBWSURFTzoKKwkJaWYgKHZpYV9mYl9hbGxvYygmbWVtKSA8IDApCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJRFJNX0NPUFlfVE9fVVNFUl9JT0NUTCgoZHJtX3ZpYV9tZW1fdCAqKSBkYXRhLCBtZW0sCisJCQkJICAgICAgIHNpemVvZihtZW0pKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBBR1A6CisJCWlmICh2aWFfYWdwX2FsbG9jKCZtZW0pIDwgMCkKKwkJCXJldHVybiAtRUZBVUxUOworCQlEUk1fQ09QWV9UT19VU0VSX0lPQ1RMKChkcm1fdmlhX21lbV90ICopIGRhdGEsIG1lbSwKKwkJCQkgICAgICAgc2l6ZW9mKG1lbSkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworc3RhdGljIGludCB2aWFfZmJfYWxsb2MoZHJtX3ZpYV9tZW1fdCAqIG1lbSkKK3sKKwlkcm1fdmlhX21tX3QgZmI7CisJUE1lbUJsb2NrIGJsb2NrOworCWludCByZXR2YWwgPSAwOworCisJaWYgKCFGQkhlYXApCisJCXJldHVybiAtMTsKKworCWZiLnNpemUgPSBtZW0tPnNpemU7CisJZmIuY29udGV4dCA9IG1lbS0+Y29udGV4dDsKKworCWJsb2NrID0gdmlhX21tQWxsb2NNZW0oRkJIZWFwLCBmYi5zaXplLCA1LCAwKTsKKwlpZiAoYmxvY2spIHsKKwkJZmIub2Zmc2V0ID0gYmxvY2stPm9mczsKKwkJZmIuZnJlZSA9ICh1bnNpZ25lZCBsb25nKWJsb2NrOworCQlpZiAoIWFkZF9hbGxvY19zZXQoZmIuY29udGV4dCwgVklERU8sIGZiLmZyZWUpKSB7CisJCQlEUk1fREVCVUcoImFkZGluZyB0byBhbGxvY2F0aW9uIHNldCBmYWlsc1xuIik7CisJCQl2aWFfbW1GcmVlTWVtKChQTWVtQmxvY2spIGZiLmZyZWUpOworCQkJcmV0dmFsID0gLTE7CisJCX0KKwl9IGVsc2UgeworCQlmYi5vZmZzZXQgPSAwOworCQlmYi5zaXplID0gMDsKKwkJZmIuZnJlZSA9IDA7CisJCXJldHZhbCA9IC0xOworCX0KKworCW1lbS0+b2Zmc2V0ID0gZmIub2Zmc2V0OworCW1lbS0+aW5kZXggPSBmYi5mcmVlOworCisJRFJNX0RFQlVHKCJhbGxvYyBmYiwgc2l6ZSA9ICVkLCBvZmZzZXQgPSAlZFxuIiwgZmIuc2l6ZSwKKwkJICAoaW50KWZiLm9mZnNldCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHZpYV9hZ3BfYWxsb2MoZHJtX3ZpYV9tZW1fdCAqIG1lbSkKK3sKKwlkcm1fdmlhX21tX3QgYWdwOworCVBNZW1CbG9jayBibG9jazsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmICghQWdwSGVhcCkKKwkJcmV0dXJuIC0xOworCisJYWdwLnNpemUgPSBtZW0tPnNpemU7CisJYWdwLmNvbnRleHQgPSBtZW0tPmNvbnRleHQ7CisKKwlibG9jayA9IHZpYV9tbUFsbG9jTWVtKEFncEhlYXAsIGFncC5zaXplLCA1LCAwKTsKKwlpZiAoYmxvY2spIHsKKwkJYWdwLm9mZnNldCA9IGJsb2NrLT5vZnM7CisJCWFncC5mcmVlID0gKHVuc2lnbmVkIGxvbmcpYmxvY2s7CisJCWlmICghYWRkX2FsbG9jX3NldChhZ3AuY29udGV4dCwgQUdQLCBhZ3AuZnJlZSkpIHsKKwkJCURSTV9ERUJVRygiYWRkaW5nIHRvIGFsbG9jYXRpb24gc2V0IGZhaWxzXG4iKTsKKwkJCXZpYV9tbUZyZWVNZW0oKFBNZW1CbG9jaykgYWdwLmZyZWUpOworCQkJcmV0dmFsID0gLTE7CisJCX0KKwl9IGVsc2UgeworCQlhZ3Aub2Zmc2V0ID0gMDsKKwkJYWdwLnNpemUgPSAwOworCQlhZ3AuZnJlZSA9IDA7CisJfQorCisJbWVtLT5vZmZzZXQgPSBhZ3Aub2Zmc2V0OworCW1lbS0+aW5kZXggPSBhZ3AuZnJlZTsKKworCURSTV9ERUJVRygiYWxsb2MgYWdwLCBzaXplID0gJWQsIG9mZnNldCA9ICVkXG4iLCBhZ3Auc2l6ZSwKKwkJICAodW5zaWduZWQgaW50KWFncC5vZmZzZXQpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCB2aWFfbWVtX2ZyZWUoRFJNX0lPQ1RMX0FSR1MpCit7CisJZHJtX3ZpYV9tZW1fdCBtZW07CisKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwobWVtLCAoZHJtX3ZpYV9tZW1fdCAqKSBkYXRhLCBzaXplb2YobWVtKSk7CisKKwlzd2l0Y2ggKG1lbS50eXBlKSB7CisKKwljYXNlIFZJREVPOgorCQlpZiAodmlhX2ZiX2ZyZWUoJm1lbSkgPT0gMCkKKwkJCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIEFHUDoKKwkJaWYgKHZpYV9hZ3BfZnJlZSgmbWVtKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRUZBVUxUOworfQorCitzdGF0aWMgaW50IHZpYV9mYl9mcmVlKGRybV92aWFfbWVtX3QgKiBtZW0pCit7CisJZHJtX3ZpYV9tbV90IGZiOworCWludCByZXR2YWwgPSAwOworCisJaWYgKCFGQkhlYXApIHsKKwkJcmV0dXJuIC0xOworCX0KKworCWZiLmZyZWUgPSBtZW0tPmluZGV4OworCWZiLmNvbnRleHQgPSBtZW0tPmNvbnRleHQ7CisKKwlpZiAoIWZiLmZyZWUpIHsKKwkJcmV0dXJuIC0xOworCisJfQorCisJdmlhX21tRnJlZU1lbSgoUE1lbUJsb2NrKSBmYi5mcmVlKTsKKworCWlmICghZGVsX2FsbG9jX3NldChmYi5jb250ZXh0LCBWSURFTywgZmIuZnJlZSkpIHsKKwkJcmV0dmFsID0gLTE7CisJfQorCisJRFJNX0RFQlVHKCJmcmVlIGZiLCBmcmVlID0gJWxkXG4iLCBmYi5mcmVlKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlhX2FncF9mcmVlKGRybV92aWFfbWVtX3QgKiBtZW0pCit7CisJZHJtX3ZpYV9tbV90IGFncDsKKworCWludCByZXR2YWwgPSAwOworCisJYWdwLmZyZWUgPSBtZW0tPmluZGV4OworCWFncC5jb250ZXh0ID0gbWVtLT5jb250ZXh0OworCisJaWYgKCFhZ3AuZnJlZSkKKwkJcmV0dXJuIC0xOworCisJdmlhX21tRnJlZU1lbSgoUE1lbUJsb2NrKSBhZ3AuZnJlZSk7CisKKwlpZiAoIWRlbF9hbGxvY19zZXQoYWdwLmNvbnRleHQsIEFHUCwgYWdwLmZyZWUpKSB7CisJCXJldHZhbCA9IC0xOworCX0KKworCURSTV9ERUJVRygiZnJlZSBhZ3AsIGZyZWUgPSAlbGRcbiIsIGFncC5mcmVlKTsKKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tbS5oIGIvZHJpdmVycy9jaGFyL2RybS92aWFfbW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTdlZmRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfbW0uaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWSUEsIFMzIEdSQVBISUNTLCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfdmlhX2RybV9tbV9oXworI2RlZmluZSBfdmlhX2RybV9tbV9oXworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IGNvbnRleHQ7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmcmVlOworfSBkcm1fdmlhX21tX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGhhbmRsZTsKKwl2b2lkICp2aXJ0dWFsOworfSBkcm1fdmlhX2RtYV90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZlcmlmaWVyLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92ZXJpZmllci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTIzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92ZXJpZmllci5jCkBAIC0wLDAgKzEsMTA2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IFRoZSBVbmljaHJvbWUgUHJvamVjdC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA1IFRob21hcyBIZWxsc3Ryb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SKFMpLCBBTkQvT1IgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yOiBUaG9tYXMgSGVsbHN0cm9tIDIwMDQsIDIwMDUuCisgKiBUaGlzIGNvZGUgd2FzIHdyaXR0ZW4gdXNpbmcgZG9jcyBvYnRhaW5lZCB1bmRlciBOREEgZnJvbSBWSUEgSW5jLgorICoKKyAqIERvbid0IHJ1biB0aGlzIGNvZGUgZGlyZWN0bHkgb24gYW4gQUdQIGJ1ZmZlci4gRHVlIHRvIGNhY2hlIHByb2JsZW1zIGl0IHdpbGwKKyAqIGJlIHZlcnkgc2xvdy4KKyAqLworCisKKyNpbmNsdWRlICJ2aWFfM2RfcmVnLmgiCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgInZpYV9kcm0uaCIKKyNpbmNsdWRlICJ2aWFfdmVyaWZpZXIuaCIKKyNpbmNsdWRlICJ2aWFfZHJ2LmgiCisKK3R5cGVkZWYgZW51bXsKKwlzdGF0ZV9jb21tYW5kLAorCXN0YXRlX2hlYWRlcjIsCisJc3RhdGVfaGVhZGVyMSwKKwlzdGF0ZV92aGVhZGVyNSwKKwlzdGF0ZV92aGVhZGVyNiwKKwlzdGF0ZV9lcnJvcgorfSB2ZXJpZmllcl9zdGF0ZV90OworCisKK3R5cGVkZWYgZW51bXsKKwlub19jaGVjayA9IDAsCisJY2hlY2tfZm9yX2hlYWRlcjIsCisJY2hlY2tfZm9yX2hlYWRlcjEsCisJY2hlY2tfZm9yX2hlYWRlcjJfZXJyLAorCWNoZWNrX2Zvcl9oZWFkZXIxX2VyciwKKwljaGVja19mb3JfZmlyZSwKKwljaGVja196X2J1ZmZlcl9hZGRyMCwKKwljaGVja196X2J1ZmZlcl9hZGRyMSwKKwljaGVja196X2J1ZmZlcl9hZGRyX21vZGUsCisJY2hlY2tfZGVzdGluYXRpb25fYWRkcjAsCisJY2hlY2tfZGVzdGluYXRpb25fYWRkcjEsCisJY2hlY2tfZGVzdGluYXRpb25fYWRkcl9tb2RlLAorCWNoZWNrX2Zvcl9kdW1teSwKKwljaGVja19mb3JfZGQsCisJY2hlY2tfdGV4dHVyZV9hZGRyMCwKKwljaGVja190ZXh0dXJlX2FkZHIxLAorCWNoZWNrX3RleHR1cmVfYWRkcjIsCisJY2hlY2tfdGV4dHVyZV9hZGRyMywKKwljaGVja190ZXh0dXJlX2FkZHI0LAorCWNoZWNrX3RleHR1cmVfYWRkcjUsCisJY2hlY2tfdGV4dHVyZV9hZGRyNiwKKwljaGVja190ZXh0dXJlX2FkZHI3LAorCWNoZWNrX3RleHR1cmVfYWRkcjgsCisJY2hlY2tfdGV4dHVyZV9hZGRyX21vZGUsCisJY2hlY2tfZm9yX3ZlcnRleF9jb3VudCwKKwljaGVja19udW1iZXJfdGV4dW5pdHMsCisJZm9yYmlkZGVuX2NvbW1hbmQKK31oYXphcmRfdDsKKworLyoKKyAqIEFzc29jaWF0ZXMgZWFjaCBoYXphcmQgYWJvdmUgd2l0aCBhIHBvc3NpYmxlIG11bHRpLWNvbW1hbmQKKyAqIHNlcXVlbmNlLiBGb3IgZXhhbXBsZSBhbiBhZGRyZXNzIHRoYXQgaXMgc3BsaXQgb3ZlciBtdWx0aXBsZQorICogY29tbWFuZHMgYW5kIHRoYXQgbmVlZHMgdG8gYmUgY2hlY2tlZCBhdCB0aGUgZmlyc3QgY29tbWFuZCAKKyAqIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhbnkgcGFydCBvZiB0aGUgYWRkcmVzcy4KKyAqLworCitzdGF0aWMgZHJtX3ZpYV9zZXF1ZW5jZV90IHNlcXNbXSA9IHsgCisJbm9fc2VxdWVuY2UsCisJbm9fc2VxdWVuY2UsCisJbm9fc2VxdWVuY2UsCisJbm9fc2VxdWVuY2UsCisJbm9fc2VxdWVuY2UsCisJbm9fc2VxdWVuY2UsCisJel9hZGRyZXNzLAorCXpfYWRkcmVzcywKKwl6X2FkZHJlc3MsCisJZGVzdF9hZGRyZXNzLAorCWRlc3RfYWRkcmVzcywKKwlkZXN0X2FkZHJlc3MsCisJbm9fc2VxdWVuY2UsCisJbm9fc2VxdWVuY2UsCisJdGV4X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MsCisJbm9fc2VxdWVuY2UKK307CisgICAgCit0eXBlZGVmIHN0cnVjdHsKKwl1bnNpZ25lZCBpbnQgY29kZTsKKwloYXphcmRfdCBoejsKK30gaHpfaW5pdF90OworCisKKworc3RhdGljIGh6X2luaXRfdCBpbml0X3RhYmxlMVtdID0geworCXsweGYyLCBjaGVja19mb3JfaGVhZGVyMl9lcnJ9LAorCXsweGYwLCBjaGVja19mb3JfaGVhZGVyMV9lcnJ9LAorCXsweGVlLCBjaGVja19mb3JfZmlyZX0sCisJezB4Y2MsIGNoZWNrX2Zvcl9kdW1teX0sCisJezB4ZGQsIGNoZWNrX2Zvcl9kZH0sCisJezB4MDAsIG5vX2NoZWNrfSwKKwl7MHgxMCwgY2hlY2tfel9idWZmZXJfYWRkcjB9LAorCXsweDExLCBjaGVja196X2J1ZmZlcl9hZGRyMX0sCisJezB4MTIsIGNoZWNrX3pfYnVmZmVyX2FkZHJfbW9kZX0sCisJezB4MTMsIG5vX2NoZWNrfSwKKwl7MHgxNCwgbm9fY2hlY2t9LAorCXsweDE1LCBub19jaGVja30sCisJezB4MjMsIG5vX2NoZWNrfSwKKwl7MHgyNCwgbm9fY2hlY2t9LAorCXsweDMzLCBub19jaGVja30sCisJezB4MzQsIG5vX2NoZWNrfSwKKwl7MHgzNSwgbm9fY2hlY2t9LAorCXsweDM2LCBub19jaGVja30sCisJezB4MzcsIG5vX2NoZWNrfSwKKwl7MHgzOCwgbm9fY2hlY2t9LAorCXsweDM5LCBub19jaGVja30sCisJezB4M0EsIG5vX2NoZWNrfSwKKwl7MHgzQiwgbm9fY2hlY2t9LAorCXsweDNDLCBub19jaGVja30sCisJezB4M0QsIG5vX2NoZWNrfSwKKwl7MHgzRSwgbm9fY2hlY2t9LAorCXsweDQwLCBjaGVja19kZXN0aW5hdGlvbl9hZGRyMH0sCisJezB4NDEsIGNoZWNrX2Rlc3RpbmF0aW9uX2FkZHIxfSwKKwl7MHg0MiwgY2hlY2tfZGVzdGluYXRpb25fYWRkcl9tb2RlfSwKKwl7MHg0Mywgbm9fY2hlY2t9LAorCXsweDQ0LCBub19jaGVja30sCisJezB4NTAsIG5vX2NoZWNrfSwKKwl7MHg1MSwgbm9fY2hlY2t9LAorCXsweDUyLCBub19jaGVja30sCisJezB4NTMsIG5vX2NoZWNrfSwKKwl7MHg1NCwgbm9fY2hlY2t9LAorCXsweDU1LCBub19jaGVja30sCisJezB4NTYsIG5vX2NoZWNrfSwKKwl7MHg1Nywgbm9fY2hlY2t9LAorCXsweDU4LCBub19jaGVja30sCisJezB4NzAsIG5vX2NoZWNrfSwKKwl7MHg3MSwgbm9fY2hlY2t9LAorCXsweDc4LCBub19jaGVja30sCisJezB4NzksIG5vX2NoZWNrfSwKKwl7MHg3QSwgbm9fY2hlY2t9LAorCXsweDdCLCBub19jaGVja30sCisJezB4N0MsIG5vX2NoZWNrfSwKKwl7MHg3RCwgY2hlY2tfZm9yX3ZlcnRleF9jb3VudH0KK307CisKKyAgIAorCQkgICAgICAgCitzdGF0aWMgaHpfaW5pdF90IGluaXRfdGFibGUyW10gPSB7CisJezB4ZjIsIGNoZWNrX2Zvcl9oZWFkZXIyX2Vycn0sCisJezB4ZjAsIGNoZWNrX2Zvcl9oZWFkZXIxX2Vycn0sCisJezB4ZWUsIGNoZWNrX2Zvcl9maXJlfSwKKwl7MHhjYywgY2hlY2tfZm9yX2R1bW15fSwKKwl7MHgwMCwgY2hlY2tfdGV4dHVyZV9hZGRyMH0sCisJezB4MDEsIGNoZWNrX3RleHR1cmVfYWRkcjB9LAorCXsweDAyLCBjaGVja190ZXh0dXJlX2FkZHIwfSwKKwl7MHgwMywgY2hlY2tfdGV4dHVyZV9hZGRyMH0sCisJezB4MDQsIGNoZWNrX3RleHR1cmVfYWRkcjB9LAorCXsweDA1LCBjaGVja190ZXh0dXJlX2FkZHIwfSwKKwl7MHgwNiwgY2hlY2tfdGV4dHVyZV9hZGRyMH0sCisJezB4MDcsIGNoZWNrX3RleHR1cmVfYWRkcjB9LAorCXsweDA4LCBjaGVja190ZXh0dXJlX2FkZHIwfSwKKwl7MHgwOSwgY2hlY2tfdGV4dHVyZV9hZGRyMH0sCisJezB4MjAsIGNoZWNrX3RleHR1cmVfYWRkcjF9LAorCXsweDIxLCBjaGVja190ZXh0dXJlX2FkZHIxfSwKKwl7MHgyMiwgY2hlY2tfdGV4dHVyZV9hZGRyMX0sCisJezB4MjMsIGNoZWNrX3RleHR1cmVfYWRkcjR9LAorCXsweDJCLCBjaGVja190ZXh0dXJlX2FkZHIzfSwKKwl7MHgyQywgY2hlY2tfdGV4dHVyZV9hZGRyM30sCisJezB4MkQsIGNoZWNrX3RleHR1cmVfYWRkcjN9LAorCXsweDJFLCBjaGVja190ZXh0dXJlX2FkZHIzfSwKKwl7MHgyRiwgY2hlY2tfdGV4dHVyZV9hZGRyM30sCisJezB4MzAsIGNoZWNrX3RleHR1cmVfYWRkcjN9LAorCXsweDMxLCBjaGVja190ZXh0dXJlX2FkZHIzfSwKKwl7MHgzMiwgY2hlY2tfdGV4dHVyZV9hZGRyM30sCisJezB4MzMsIGNoZWNrX3RleHR1cmVfYWRkcjN9LAorCXsweDM0LCBjaGVja190ZXh0dXJlX2FkZHIzfSwKKwl7MHg0QiwgY2hlY2tfdGV4dHVyZV9hZGRyNX0sCisJezB4NEMsIGNoZWNrX3RleHR1cmVfYWRkcjZ9LAorCXsweDUxLCBjaGVja190ZXh0dXJlX2FkZHI3fSwKKwl7MHg1MiwgY2hlY2tfdGV4dHVyZV9hZGRyOH0sCisJezB4NzcsIGNoZWNrX3RleHR1cmVfYWRkcjJ9LAorCXsweDc4LCBub19jaGVja30sCisJezB4NzksIG5vX2NoZWNrfSwKKwl7MHg3QSwgbm9fY2hlY2t9LAorCXsweDdCLCBjaGVja190ZXh0dXJlX2FkZHJfbW9kZX0sCisJezB4N0MsIG5vX2NoZWNrfSwKKwl7MHg3RCwgbm9fY2hlY2t9LAorCXsweDdFLCBub19jaGVja30sCisJezB4N0YsIG5vX2NoZWNrfSwKKwl7MHg4MCwgbm9fY2hlY2t9LAorCXsweDgxLCBub19jaGVja30sCisJezB4ODIsIG5vX2NoZWNrfSwKKwl7MHg4Mywgbm9fY2hlY2t9LAorCXsweDg1LCBub19jaGVja30sCisJezB4ODYsIG5vX2NoZWNrfSwKKwl7MHg4Nywgbm9fY2hlY2t9LAorCXsweDg4LCBub19jaGVja30sCisJezB4ODksIG5vX2NoZWNrfSwKKwl7MHg4QSwgbm9fY2hlY2t9LAorCXsweDkwLCBub19jaGVja30sCisJezB4OTEsIG5vX2NoZWNrfSwKKwl7MHg5Miwgbm9fY2hlY2t9LAorCXsweDkzLCBub19jaGVja30KK307CisKK3N0YXRpYyBoel9pbml0X3QgaW5pdF90YWJsZTNbXSA9IHsKKwl7MHhmMiwgY2hlY2tfZm9yX2hlYWRlcjJfZXJyfSwKKwl7MHhmMCwgY2hlY2tfZm9yX2hlYWRlcjFfZXJyfSwKKwl7MHhjYywgY2hlY2tfZm9yX2R1bW15fSwKKwl7MHgwMCwgY2hlY2tfbnVtYmVyX3RleHVuaXRzfQorfTsKKyAgIAorCQkgICAgICAgCitzdGF0aWMgaGF6YXJkX3QgdGFibGUxWzI1Nl07IAorc3RhdGljIGhhemFyZF90IHRhYmxlMlsyNTZdOyAKK3N0YXRpYyBoYXphcmRfdCB0YWJsZTNbMjU2XTsgCisKKworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2VhdF93b3Jkcyhjb25zdCB1aW50MzJfdCAqKmJ1ZiwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQsIHVuc2lnbmVkIG51bV93b3JkcykKK3sKKwlpZiAoKCpidWYgLSBidWZfZW5kKSA+PSBudW1fd29yZHMpIHsKKwkJKmJ1ZiArPSBudW1fd29yZHM7CisJCXJldHVybiAwOworCX0gCisJRFJNX0VSUk9SKCJJbGxlZ2FsIHRlcm1pbmF0aW9uIG9mIERNQSBjb21tYW5kIGJ1ZmZlclxuIik7CisJcmV0dXJuIDE7Cit9CisKKworLyoKKyAqIFBhcnRpYWxseSBzdG9sZW4gZnJvbSBkcm1fbWVtb3J5LmgKKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBkcm1fbWFwX3QgKgordmlhX2RybV9sb29rdXBfYWdwX21hcCAoZHJtX3ZpYV9zdGF0ZV90ICpzZXEsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIAorCQkJZHJtX2RldmljZV90ICpkZXYpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlkcm1fbWFwX2xpc3RfdCAqcl9saXN0OworCWRybV9tYXBfdCAqbWFwID0gc2VxLT5tYXBfY2FjaGU7CisKKwlpZiAobWFwICYmIG1hcC0+b2Zmc2V0IDw9IG9mZnNldCAmJiAob2Zmc2V0ICsgc2l6ZSkgPD0gKG1hcC0+b2Zmc2V0ICsgbWFwLT5zaXplKSkgeworCQlyZXR1cm4gbWFwOworCX0KKwkJCisJbGlzdF9mb3JfZWFjaChsaXN0LCAmZGV2LT5tYXBsaXN0LT5oZWFkKSB7CisJCXJfbGlzdCA9IChkcm1fbWFwX2xpc3RfdCAqKSBsaXN0OworCQltYXAgPSByX2xpc3QtPm1hcDsKKwkJaWYgKCFtYXApCisJCQljb250aW51ZTsKKwkJaWYgKG1hcC0+b2Zmc2V0IDw9IG9mZnNldCAmJiAob2Zmc2V0ICsgc2l6ZSkgPD0gKG1hcC0+b2Zmc2V0ICsgbWFwLT5zaXplKSAmJiAKKwkJICAgICEobWFwLT5mbGFncyAmIF9EUk1fUkVTVFJJQ1RFRCkgJiYgKG1hcC0+dHlwZSA9PSBfRFJNX0FHUCkpIHsKKwkJCXNlcS0+bWFwX2NhY2hlID0gbWFwOworCQkJcmV0dXJuIG1hcDsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworCisvKgorICogUmVxdWlyZSB0aGF0IGFsbCBBR1AgdGV4dHVyZSBsZXZlbHMgcmVzaWRlIGluIHRoZSBzYW1lIEFHUCBtYXAgd2hpY2ggc2hvdWxkIAorICogYmUgbWFwcGFibGUgYnkgdGhlIGNsaWVudC4gVGhpcyBpcyBub3QgYSBiaWcgcmVzdHJpY3Rpb24uCisgKiBGSVhNRTogVG8gYWN0dWFsbHkgZW5mb3JjZSB0aGlzIHNlY3VyaXR5IHBvbGljeSBzdHJpY3RseSwgZHJtX3JtbWFwIAorICogd291bGQgaGF2ZSB0byB3YWl0IGZvciBkbWEgcXVpZXNjZW50IGJlZm9yZSByZW1vdmluZyBhbiBBR1AgbWFwLiAKKyAqIFRoZSB2aWFfZHJtX2xvb2t1cF9hZ3BfbWFwIGNhbGwgaW4gcmVhbGl0eSBzZWVtcyB0byB0YWtlCisgKiB2ZXJ5IGxpdHRsZSBDUFUgdGltZS4KKyAqLworCisKK3N0YXRpYyBfX2lubGluZV9fIGludAorZmluaXNoX2N1cnJlbnRfc2VxdWVuY2UoZHJtX3ZpYV9zdGF0ZV90ICpjdXJfc2VxKSAKK3sKKwlzd2l0Y2goY3VyX3NlcS0+dW5maW5pc2hlZCkgeworCWNhc2Ugel9hZGRyZXNzOgorCQlEUk1fREVCVUcoIlogQnVmZmVyIHN0YXJ0IGFkZHJlc3MgaXMgMHgleFxuIiwgY3VyX3NlcS0+el9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBkZXN0X2FkZHJlc3M6CisJCURSTV9ERUJVRygiRGVzdGluYXRpb24gc3RhcnQgYWRkcmVzcyBpcyAweCV4XG4iLCBjdXJfc2VxLT5kX2FkZHIpOworCQlicmVhazsKKwljYXNlIHRleF9hZGRyZXNzOgorCQlpZiAoY3VyX3NlcS0+YWdwX3RleHR1cmUpIHsJCQkgCisJCQl1bnNpZ25lZCBzdGFydCA9IGN1cl9zZXEtPnRleF9sZXZlbF9sb1tjdXJfc2VxLT50ZXh0dXJlXTsKKwkJCXVuc2lnbmVkIGVuZCA9IGN1cl9zZXEtPnRleF9sZXZlbF9oaVtjdXJfc2VxLT50ZXh0dXJlXTsKKwkJCXVuc2lnbmVkIGxvbmcgbG89fjAsIGhpPTAsIHRtcDsKKwkJCXVpbnQzMl90ICphZGRyLCAqcGl0Y2gsICpoZWlnaHQsIHRleDsKKwkJCXVuc2lnbmVkIGk7CisKKwkJCWlmIChlbmQgPiA5KSBlbmQgPSA5OworCQkJaWYgKHN0YXJ0ID4gOSkgc3RhcnQgPSA5OworCisJCQlhZGRyID0mKGN1cl9zZXEtPnRfYWRkclt0ZXggPSBjdXJfc2VxLT50ZXh0dXJlXVtzdGFydF0pOworCQkJcGl0Y2ggPSAmKGN1cl9zZXEtPnBpdGNoW3RleF1bc3RhcnRdKTsKKwkJCWhlaWdodCA9ICYoY3VyX3NlcS0+aGVpZ2h0W3RleF1bc3RhcnRdKTsKKworCQkJZm9yIChpPXN0YXJ0OyBpPD0gZW5kOyArK2kpIHsKKwkJCQl0bXAgPSAqYWRkcisrOworCQkJCWlmICh0bXAgPCBsbykgbG8gPSB0bXA7CisJCQkJdG1wICs9ICgqaGVpZ2h0KysgPDwgKnBpdGNoKyspOworCQkJCWlmICh0bXAgPiBoaSkgaGkgPSB0bXA7CisJCQl9CisKKwkJCWlmICghIHZpYV9kcm1fbG9va3VwX2FncF9tYXAgKGN1cl9zZXEsIGxvLCBoaSAtIGxvLCBjdXJfc2VxLT5kZXYpKSB7CisJCQkJRFJNX0VSUk9SKCJBR1AgdGV4dHVyZSBpcyBub3QgaW4gYWxsb3dlZCBtYXBcbiIpOworCQkJCXJldHVybiAyOworCQkJfQorCQl9CQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJY3VyX3NlcS0+dW5maW5pc2hlZCA9IG5vX3NlcXVlbmNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgCitpbnZlc3RpZ2F0ZV9oYXphcmQoIHVpbnQzMl90IGNtZCwgaGF6YXJkX3QgaHosIGRybV92aWFfc3RhdGVfdCAqY3VyX3NlcSkKK3sKKwlyZWdpc3RlciB1aW50MzJfdCB0bXAsICp0bXBfYWRkcjsKKworCWlmIChjdXJfc2VxLT51bmZpbmlzaGVkICYmIChjdXJfc2VxLT51bmZpbmlzaGVkICE9IHNlcXNbaHpdKSkgeworCQlpbnQgcmV0OworCQlpZiAoKHJldCA9IGZpbmlzaF9jdXJyZW50X3NlcXVlbmNlKGN1cl9zZXEpKSkgcmV0dXJuIHJldDsKKwl9CisKKwlzd2l0Y2goaHopIHsKKwljYXNlIGNoZWNrX2Zvcl9oZWFkZXIyOgorCQlpZiAoY21kID09IEhBTENZT05fSEVBREVSMikgcmV0dXJuIDE7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfZm9yX2hlYWRlcjE6CisJCWlmICgoY21kICYgSEFMQ1lPTl9IRUFERVIxTUFTSykgPT0gSEFMQ1lPTl9IRUFERVIxKSByZXR1cm4gMTsKKwkJcmV0dXJuIDA7CisJY2FzZSBjaGVja19mb3JfaGVhZGVyMl9lcnI6CisJCWlmIChjbWQgPT0gSEFMQ1lPTl9IRUFERVIyKSByZXR1cm4gMTsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIERNQSBIQUxDWU9OX0hFQURFUjIgY29tbWFuZFxuIik7CisJCWJyZWFrOworCWNhc2UgY2hlY2tfZm9yX2hlYWRlcjFfZXJyOgorCQlpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spID09IEhBTENZT05fSEVBREVSMSkgcmV0dXJuIDE7CisJCURSTV9FUlJPUigiSWxsZWdhbCBETUEgSEFMQ1lPTl9IRUFERVIxIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIGNoZWNrX2Zvcl9maXJlOgorCQlpZiAoKGNtZCAmIEhBTENZT05fRklSRU1BU0spID09IEhBTENZT05fRklSRUNNRCkgcmV0dXJuIDE7IAorCQlEUk1fRVJST1IoIklsbGVnYWwgRE1BIEhBTENZT05fRklSRUNNRCBjb21tYW5kXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBjaGVja19mb3JfZHVtbXk6CisJCWlmIChIQ19EVU1NWSA9PSBjbWQpIHJldHVybiAwOworCQlEUk1fRVJST1IoIklsbGVnYWwgRE1BIEhDX0RVTU1ZIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIGNoZWNrX2Zvcl9kZDoKKwkJaWYgKDB4ZGRkZGRkZGQgPT0gY21kKSByZXR1cm4gMDsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIERNQSAweGRkZGRkZGRkIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIGNoZWNrX3pfYnVmZmVyX2FkZHIwOgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gel9hZGRyZXNzOworCQljdXJfc2VxLT56X2FkZHIgPSAoY3VyX3NlcS0+el9hZGRyICYgMHhGRjAwMDAwMCkgfAorCQkJKGNtZCAmIDB4MDBGRkZGRkYpOworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX3pfYnVmZmVyX2FkZHIxOgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gel9hZGRyZXNzOworCQljdXJfc2VxLT56X2FkZHIgPSAoY3VyX3NlcS0+el9hZGRyICYgMHgwMEZGRkZGRikgfAorCQkJKChjbWQgJiAweEZGKSA8PCAyNCk7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfel9idWZmZXJfYWRkcl9tb2RlOgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gel9hZGRyZXNzOworCQlpZiAoKGNtZCAmIDB4MDAwMEMwMDApID09IDApIHJldHVybiAwOworCQlEUk1fRVJST1IoIkF0dGVtcHQgdG8gcGxhY2UgWiBidWZmZXIgaW4gc3lzdGVtIG1lbW9yeVxuIik7CisJCXJldHVybiAyOworCWNhc2UgY2hlY2tfZGVzdGluYXRpb25fYWRkcjA6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSBkZXN0X2FkZHJlc3M7CisJCWN1cl9zZXEtPmRfYWRkciA9IChjdXJfc2VxLT5kX2FkZHIgJiAweEZGMDAwMDAwKSB8CisJCQkoY21kICYgMHgwMEZGRkZGRik7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfZGVzdGluYXRpb25fYWRkcjE6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSBkZXN0X2FkZHJlc3M7CisJCWN1cl9zZXEtPmRfYWRkciA9IChjdXJfc2VxLT5kX2FkZHIgJiAweDAwRkZGRkZGKSB8CisJCQkoKGNtZCAmIDB4RkYpIDw8IDI0KTsKKwkJcmV0dXJuIDA7CisJY2FzZSBjaGVja19kZXN0aW5hdGlvbl9hZGRyX21vZGU6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSBkZXN0X2FkZHJlc3M7CisJCWlmICgoY21kICYgMHgwMDAwQzAwMCkgPT0gMCkgcmV0dXJuIDA7CisJCURSTV9FUlJPUigiQXR0ZW1wdCB0byBwbGFjZSAzRCBkcmF3aW5nIGJ1ZmZlciBpbiBzeXN0ZW0gbWVtb3J5XG4iKTsKKwkJcmV0dXJuIDI7CSAgICAKKwljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjA6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKKwkJdG1wID0gKGNtZCA+PiAyNCk7CisJCXRtcF9hZGRyID0gJmN1cl9zZXEtPnRfYWRkcltjdXJfc2VxLT50ZXh0dXJlXVt0bXBdOworCQkqdG1wX2FkZHIgPSAoKnRtcF9hZGRyICYgMHhGRjAwMDAwMCkgfCAoY21kICYgMHgwMEZGRkZGRik7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfdGV4dHVyZV9hZGRyMToKKwkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHRleF9hZGRyZXNzOworCQl0bXAgPSAoKGNtZCA+PiAyNCkgLSAweDIwKTsKKwkJdG1wICs9IHRtcCA8PCAxOworCQl0bXBfYWRkciA9ICZjdXJfc2VxLT50X2FkZHJbY3VyX3NlcS0+dGV4dHVyZV1bdG1wXTsKKwkJKnRtcF9hZGRyID0gKCp0bXBfYWRkciAmIDB4MDBGRkZGRkYpIHwgKChjbWQgJiAweEZGKSA8PCAyNCk7CisJCXRtcF9hZGRyKys7CisJCSp0bXBfYWRkciA9ICgqdG1wX2FkZHIgJiAweDAwRkZGRkZGKSB8ICgoY21kICYgMHhGRjAwKSA8PCAxNik7CisJCXRtcF9hZGRyKys7CisJCSp0bXBfYWRkciA9ICgqdG1wX2FkZHIgJiAweDAwRkZGRkZGKSB8ICgoY21kICYgMHhGRjAwMDApIDw8IDgpOworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjI6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKKwkJY3VyX3NlcS0+dGV4X2xldmVsX2xvW3RtcCA9IGN1cl9zZXEtPnRleHR1cmVdID0gY21kICYgMHgzRjsKKwkJY3VyX3NlcS0+dGV4X2xldmVsX2hpW3RtcF0gPSAoY21kICYgMHhGQzApID4+IDY7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfdGV4dHVyZV9hZGRyMzoKKwkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHRleF9hZGRyZXNzOworCQl0bXAgPSAoKGNtZCA+PiAyNCkgLSAweDJCKTsKKwkJY3VyX3NlcS0+cGl0Y2hbY3VyX3NlcS0+dGV4dHVyZV1bdG1wXSA9IChjbWQgJiAweDAwRjAwMDAwKSA+PiAyMDsKKwkJaWYgKCF0bXAgJiYgKGNtZCAmIDB4MDAwRkZGRkYpKSB7CisJCQlEUk1fRVJST1IoIlVuaW1wbGVtZW50ZWQgdGV4dHVyZSBsZXZlbCAwIHBpdGNoIG1vZGUuXG4iKTsKKwkJCXJldHVybiAyOworCQl9CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfdGV4dHVyZV9hZGRyNDoKKwkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHRleF9hZGRyZXNzOworCQl0bXBfYWRkciA9ICZjdXJfc2VxLT50X2FkZHJbY3VyX3NlcS0+dGV4dHVyZV1bOV07CisJCSp0bXBfYWRkciA9ICgqdG1wX2FkZHIgJiAweDAwRkZGRkZGKSB8ICgoY21kICYgMHhGRikgPDwgMjQpOworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjU6CisJY2FzZSBjaGVja190ZXh0dXJlX2FkZHI2OgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gdGV4X2FkZHJlc3M7CisJCS8qCisJCSAqIFRleHR1cmUgd2lkdGguIFdlIGRvbid0IGNhcmUgc2luY2Ugd2UgaGF2ZSB0aGUgcGl0Y2guCisJCSAqLyAgCisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfdGV4dHVyZV9hZGRyNzoKKwkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHRleF9hZGRyZXNzOworCQl0bXBfYWRkciA9ICYoY3VyX3NlcS0+aGVpZ2h0W2N1cl9zZXEtPnRleHR1cmVdWzBdKTsKKwkJdG1wX2FkZHJbNV0gPSAxIDw8ICgoY21kICYgMHgwMEYwMDAwMCkgPj4gMjApOworCQl0bXBfYWRkcls0XSA9IDEgPDwgKChjbWQgJiAweDAwMEYwMDAwKSA+PiAxNik7CisJCXRtcF9hZGRyWzNdID0gMSA8PCAoKGNtZCAmIDB4MDAwMEYwMDApID4+IDEyKTsKKwkJdG1wX2FkZHJbMl0gPSAxIDw8ICgoY21kICYgMHgwMDAwMEYwMCkgPj4gOCk7CisJCXRtcF9hZGRyWzFdID0gMSA8PCAoKGNtZCAmIDB4MDAwMDAwRjApID4+IDQpOworCQl0bXBfYWRkclswXSA9IDEgPDwgKGNtZCAmIDB4MDAwMDAwMEYpOworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjg6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKKwkJdG1wX2FkZHIgPSAmKGN1cl9zZXEtPmhlaWdodFtjdXJfc2VxLT50ZXh0dXJlXVswXSk7CisJCXRtcF9hZGRyWzldID0gMSA8PCAoKGNtZCAmIDB4MDAwMEYwMDApID4+IDEyKTsKKwkgICAgICAgIHRtcF9hZGRyWzhdID0gMSA8PCAoKGNtZCAmIDB4MDAwMDBGMDApID4+IDgpOworCQl0bXBfYWRkcls3XSA9IDEgPDwgKChjbWQgJiAweDAwMDAwMEYwKSA+PiA0KTsKKwkJdG1wX2FkZHJbNl0gPSAxIDw8IChjbWQgJiAweDAwMDAwMDBGKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBjaGVja190ZXh0dXJlX2FkZHJfbW9kZToKKwkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHRleF9hZGRyZXNzOworCQlpZiAoIDIgPT0gKHRtcCA9IGNtZCAmIDB4MDAwMDAwMDMpKSB7CisJCQlEUk1fRVJST1IoIkF0dGVtcHQgdG8gZmV0Y2ggdGV4dHVyZSBmcm9tIHN5c3RlbSBtZW1vcnkuXG4iKTsgCisJCQlyZXR1cm4gMjsKKwkJfQorCQljdXJfc2VxLT5hZ3BfdGV4dHVyZSA9ICh0bXAgPT0gMyk7CisJCWN1cl9zZXEtPnRleF9wYWxldHRlX3NpemVbY3VyX3NlcS0+dGV4dHVyZV0gPSAKKwkJCShjbWQgPj4gMTYpICYgMHgwMDAwMDAwMDc7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfZm9yX3ZlcnRleF9jb3VudDoKKwkJY3VyX3NlcS0+dmVydGV4X2NvdW50ID0gY21kICYgMHgwMDAwRkZGRjsKKwkJcmV0dXJuIDA7CisJY2FzZSBjaGVja19udW1iZXJfdGV4dW5pdHM6CisJICAgICAgICBjdXJfc2VxLT5tdWx0aXRleCA9IChjbWQgPj4gMykgJiAxOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIklsbGVnYWwgRE1BIGRhdGE6IDB4JXhcbiIsIGNtZCk7CisJCXJldHVybiAyOworCX0KKwlyZXR1cm4gMjsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK3ZpYV9jaGVja19wcmltX2xpc3QodWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kLAorCQkgICAgZHJtX3ZpYV9zdGF0ZV90ICpjdXJfc2VxKQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBjdXJfc2VxLT5kZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGFfZmlyZSwgYmNtZCAsIGR3X2NvdW50OworCWludCByZXQgPSAwOworCWludCBoYXZlX2ZpcmU7CisJY29uc3QgdWludDMyX3QgKmJ1ZiA9ICpidWZmZXI7CisKKwl3aGlsZShidWYgPCBidWZfZW5kKSB7CisJICAgICAgICBoYXZlX2ZpcmUgPSAwOworCQlpZiAoKGJ1Zl9lbmQgLSBidWYpIDwgMikgeworCQkJRFJNX0VSUk9SKCJVbmV4cGVjdGVkIHRlcm1pbmF0aW9uIG9mIHByaW1pdGl2ZSBsaXN0LlxuIik7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCgqYnVmICYgSENfQUNNRF9NQVNLKSAhPSBIQ19BQ01EX0hDbWRCKSBicmVhazsKKwkJYmNtZCA9ICpidWYrKzsKKwkJaWYgKCgqYnVmICYgSENfQUNNRF9NQVNLKSAhPSBIQ19BQ01EX0hDbWRBKSB7CisJCQlEUk1fRVJST1IoIkV4cGVjdGVkIFZlcnRleCBMaXN0IEEgY29tbWFuZCwgZ290IDB4JXhcbiIsCisJCQkJICAqYnVmKTsKKwkJCXJldCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlhX2ZpcmUgPSAqYnVmKysgfCBIQ19IUExFTkRfTUFTSyB8IEhDX0hQTVZhbGlkTl9NQVNLIHwgSENfSEUzRmlyZV9NQVNLOwkKKwkKKwkJLyoKKwkJICogSG93IG1hbnkgZHdvcmRzIHBlciB2ZXJ0ZXggPworCQkgKi8gCisJCQorCQlpZiAoY3VyX3NlcS0+YWdwICYmICgoYmNtZCAmICgweEYgPDwgMTEpKSA9PSAwKSkgeworCQkJRFJNX0VSUk9SKCJJbGxlZ2FsIEIgY29tbWFuZCB2ZXJ0ZXggZGF0YSBmb3IgQUdQLlxuIik7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0gCisKKwkJZHdfY291bnQgPSAwOworCQlpZiAoYmNtZCAmICgxIDw8IDcpKSBkd19jb3VudCArPSAoY3VyX3NlcS0+bXVsdGl0ZXgpID8gMjoxOworCQlpZiAoYmNtZCAmICgxIDw8IDgpKSBkd19jb3VudCArPSAoY3VyX3NlcS0+bXVsdGl0ZXgpID8gMjoxOworCQlpZiAoYmNtZCAmICgxIDw8IDkpKSBkd19jb3VudCsrOworCQlpZiAoYmNtZCAmICgxIDw8IDEwKSkgZHdfY291bnQrKzsKKwkJaWYgKGJjbWQgJiAoMSA8PCAxMSkpIGR3X2NvdW50Kys7CisJCWlmIChiY21kICYgKDEgPDwgMTIpKSBkd19jb3VudCsrOworCQlpZiAoYmNtZCAmICgxIDw8IDEzKSkgZHdfY291bnQrKzsKKwkJaWYgKGJjbWQgJiAoMSA8PCAxNCkpIGR3X2NvdW50Kys7CisKKwkJd2hpbGUoYnVmIDwgYnVmX2VuZCkgeworCQkJaWYgKCpidWYgPT0gYV9maXJlKSB7CisJCQkJaWYgKGRldl9wcml2LT5udW1fZmlyZV9vZmZzZXRzID49IFZJQV9GSVJFX0JVRl9TSVpFKSB7CisJCQkJCURSTV9FUlJPUigiRmlyZSBvZmZzZXQgYnVmZmVyIGZ1bGwuXG4iKTsKKwkJCQkJcmV0ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWRldl9wcml2LT5maXJlX29mZnNldHNbZGV2X3ByaXYtPm51bV9maXJlX29mZnNldHMrK10gPSBidWY7CisJCQkgICAgICAgIGhhdmVfZmlyZSA9IDE7CisJCQkJYnVmKys7CisJCQkJaWYgKGJ1ZiA8IGJ1Zl9lbmQgJiYgKmJ1ZiA9PSBhX2ZpcmUpIAorCQkJCQlidWYrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgoKmJ1ZiA9PSBIQUxDWU9OX0hFQURFUjIpIHx8IAorCQkJICAgICgoKmJ1ZiAmIEhBTENZT05fRklSRU1BU0spID09IEhBTENZT05fRklSRUNNRCkpIHsKKwkJCQlEUk1fRVJST1IoIk1pc3NpbmcgVmVydGV4IEZpcmUgY29tbWFuZCwgIgorCQkJCQkgICJTdHJheSBWZXJ0ZXggRmlyZSBjb21tYW5kICBvciB2ZXJpZmllciAiCisJCQkJCSAgImxvc3Qgc3luYy5cbiIpOworCQkJCXJldCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKHJldCA9IGVhdF93b3JkcygmYnVmLCBidWZfZW5kLCBkd19jb3VudCkpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChidWYgPj0gYnVmX2VuZCAmJiAhaGF2ZV9maXJlKSB7CisJCQlEUk1fRVJST1IoIk1pc3NpbmcgVmVydGV4IEZpcmUgY29tbWFuZCBvciB2ZXJpZmllciAiCisJCQkJICAibG9zdCBzeW5jLlxuIik7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGN1cl9zZXEtPmFncCAmJiAoKGJ1ZiAtIGN1cl9zZXEtPmJ1Zl9zdGFydCkgJiAweDAxKSkgeworCQkJRFJNX0VSUk9SKCJBR1AgUHJpbWl0aXZlIGxpc3QgZW5kIG1pc2FsaWduZWQuXG4iKTsKKwkJCXJldCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0gCisJKmJ1ZmZlciA9IGJ1ZjsKKwlyZXR1cm4gcmV0OworfQorCisKKwkJICAgICAgIAorCisKK3N0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKK3ZpYV9jaGVja19oZWFkZXIyKCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQsIAorCQkgICBkcm1fdmlhX3N0YXRlX3QgKmhjX3N0YXRlKQoreworCXVpbnQzMl90IGNtZDsKKwlpbnQgaHpfbW9kZTsKKwloYXphcmRfdCBoejsKKwljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKKwljb25zdCBoYXphcmRfdCAqaHpfdGFibGU7CisKKworCWlmICgoYnVmX2VuZCAtIGJ1ZikgPCAyKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCB0ZXJtaW5hdGlvbiBvZiBETUEgSEFMQ1lPTl9IRUFERVIyIHNlcXVlbmNlLlxuIik7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwl9CisJYnVmKys7CisJY21kID0gKCpidWYrKyAmIDB4RkZGRjAwMDApID4+IDE2OworCisJc3dpdGNoKGNtZCkgeworCWNhc2UgSENfUGFyYVR5cGVfQ21kVmRhdGE6CisJCWlmICh2aWFfY2hlY2tfcHJpbV9saXN0KCZidWYsIGJ1Zl9lbmQsIGhjX3N0YXRlICkpIAorCQkJcmV0dXJuIHN0YXRlX2Vycm9yOworCQkqYnVmZmVyID0gYnVmOworCQlyZXR1cm4gc3RhdGVfY29tbWFuZDsKKwljYXNlIEhDX1BhcmFUeXBlX05vdFRleDoKKwkJaHpfdGFibGUgPSB0YWJsZTE7CisJCWJyZWFrOworCWNhc2UgSENfUGFyYVR5cGVfVGV4OgorCQloY19zdGF0ZS0+dGV4dHVyZSA9IDA7CisJCWh6X3RhYmxlID0gdGFibGUyOworCQlicmVhazsKKwljYXNlIChIQ19QYXJhVHlwZV9UZXggfCAoSENfU3ViVHlwZV9UZXgxIDw8IDgpKToKKwkJaGNfc3RhdGUtPnRleHR1cmUgPSAxOworCQloel90YWJsZSA9IHRhYmxlMjsKKwkJYnJlYWs7CisJY2FzZSAoSENfUGFyYVR5cGVfVGV4IHwgKEhDX1N1YlR5cGVfVGV4R2VuZXJhbCA8PCA4KSk6CisJCWh6X3RhYmxlID0gdGFibGUzOworCQlicmVhazsKKwljYXNlIEhDX1BhcmFUeXBlX0F1dG86CisJCWlmIChlYXRfd29yZHMoJmJ1ZiwgYnVmX2VuZCwgMikpCisJCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJCSpidWZmZXIgPSBidWY7CisJCXJldHVybiBzdGF0ZV9jb21tYW5kOworCWNhc2UgKEhDX1BhcmFUeXBlX1BhbGV0dGUgfCAoSENfU3ViVHlwZV9TdGlwcGxlIDw8IDgpKToKKwkJaWYgKGVhdF93b3JkcygmYnVmLCBidWZfZW5kLCAzMikpCisJCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJCSpidWZmZXIgPSBidWY7CisJCXJldHVybiBzdGF0ZV9jb21tYW5kOworCWNhc2UgKEhDX1BhcmFUeXBlX1BhbGV0dGUgfCAoSENfU3ViVHlwZV9UZXhQYWxldHRlMCA8PCA4KSk6CisJY2FzZSAoSENfUGFyYVR5cGVfUGFsZXR0ZSB8IChIQ19TdWJUeXBlX1RleFBhbGV0dGUxIDw8IDgpKToKKwkJRFJNX0VSUk9SKCJUZXh0dXJlIHBhbGV0dGVzIGFyZSByZWplY3RlZCBiZWNhdXNlIG9mICIKKwkJCSAgImxhY2sgb2YgaW5mbyBob3cgdG8gZGV0ZXJtaW5lIHRoZWlyIHNpemUuXG4iKTsKKwkJcmV0dXJuIHN0YXRlX2Vycm9yOworCWNhc2UgKEhDX1BhcmFUeXBlX1BhbGV0dGUgfCAoSENfU3ViVHlwZV9Gb2dUYWJsZSA8PCA4KSk6CisJCURSTV9FUlJPUigiRm9nIGZhY3RvciBwYWxldHRlcyBhcmUgcmVqZWN0ZWQgYmVjYXVzZSBvZiAiCisJCQkgICJsYWNrIG9mIGluZm8gaG93IHRvIGRldGVybWluZSB0aGVpciBzaXplLlxuIik7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwlkZWZhdWx0OgorCisJCS8qCisJCSAqIFRoZXJlIGFyZSBzb21lIHVuaW1wbGVtZW50ZWQgSENfUGFyYVR5cGVzIGhlcmUsIHRoYXQKKwkJICogbmVlZCB0byBiZSBpbXBsZW1lbnRlZCBpZiB0aGUgTWVzYSBkcml2ZXIgaXMgZXh0ZW5kZWQuCisJCSAqLworCisJCURSTV9FUlJPUigiSW52YWxpZCBvciB1bmltcGxlbWVudGVkIEhBTENZT05fSEVBREVSMiAiCisJCQkgICJETUEgc3ViY29tbWFuZDogMHgleC4gUHJldmlvdXMgZHdvcmQ6IDB4JXhcbiIsIAorCQkJICBjbWQsICooYnVmIC0yKSk7CisJCSpidWZmZXIgPSBidWY7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwl9CisKKwl3aGlsZShidWYgPCBidWZfZW5kKSB7CisJCWNtZCA9ICpidWYrKzsKKwkJaWYgKChoeiA9IGh6X3RhYmxlW2NtZCA+PiAyNF0pKSB7CisJCQlpZiAoKGh6X21vZGUgPSBpbnZlc3RpZ2F0ZV9oYXphcmQoY21kLCBoeiwgaGNfc3RhdGUpKSkgeworCQkJCWlmIChoel9tb2RlID09IDEpIHsKKwkJCQkJYnVmLS07CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJCQl9CisJCX0gZWxzZSBpZiAoaGNfc3RhdGUtPnVuZmluaXNoZWQgJiYgCisJCQkgICBmaW5pc2hfY3VycmVudF9zZXF1ZW5jZShoY19zdGF0ZSkpIHsKKwkJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwkJfQorCX0KKwlpZiAoaGNfc3RhdGUtPnVuZmluaXNoZWQgJiYgZmluaXNoX2N1cnJlbnRfc2VxdWVuY2UoaGNfc3RhdGUpKSB7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwl9CisJKmJ1ZmZlciA9IGJ1ZjsKKwlyZXR1cm4gc3RhdGVfY29tbWFuZDsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAordmlhX3BhcnNlX2hlYWRlcjIoIGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kLAorCQkgICBpbnQgKmZpcmVfY291bnQpCit7CisJdWludDMyX3QgY21kOworCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOworCWNvbnN0IHVpbnQzMl90ICpuZXh0X2ZpcmU7IAorCWludCBidXJzdCA9IDA7CisKKwluZXh0X2ZpcmUgPSBkZXZfcHJpdi0+ZmlyZV9vZmZzZXRzWypmaXJlX2NvdW50XTsKKwlidWYrKzsKKwljbWQgPSAoKmJ1ZiAmIDB4RkZGRjAwMDApID4+IDE2OworCVZJQV9XUklURShIQ19SRUdfVFJBTlNfU0VUICsgSENfUkVHX0JBU0UsICpidWYrKyk7CisJc3dpdGNoKGNtZCkgeworCWNhc2UgSENfUGFyYVR5cGVfQ21kVmRhdGE6CisJCXdoaWxlICgoYnVmIDwgYnVmX2VuZCkgJiYKKwkJICAgICAgICgqZmlyZV9jb3VudCA8IGRldl9wcml2LT5udW1fZmlyZV9vZmZzZXRzKSAmJiAKKwkJICAgICAgICgqYnVmICYgSENfQUNNRF9NQVNLKSA9PSBIQ19BQ01EX0hDbWRCICkgeworCQkJd2hpbGUoYnVmIDw9IG5leHRfZmlyZSkgeworCQkJCVZJQV9XUklURShIQ19SRUdfVFJBTlNfU1BBQ0UgKyBIQ19SRUdfQkFTRSArIChidXJzdCAmIDYzKSwgKmJ1ZisrKTsKKwkJCQlidXJzdCArPSA0OworCQkJfQorCQkJaWYgKCAoIGJ1ZiA8IGJ1Zl9lbmQgKSAmJiAoKCpidWYgJiBIQUxDWU9OX0ZJUkVNQVNLKSA9PSBIQUxDWU9OX0ZJUkVDTUQpKQorCQkJCWJ1ZisrOworCisJCQlpZiAoKysoKmZpcmVfY291bnQpIDwgZGV2X3ByaXYtPm51bV9maXJlX29mZnNldHMpIAorCQkJCW5leHRfZmlyZSA9IGRldl9wcml2LT5maXJlX29mZnNldHNbKmZpcmVfY291bnRdOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdoaWxlKGJ1ZiA8IGJ1Zl9lbmQpIHsKKwkJCQorCQkJaWYgKCAqYnVmID09IEhDX0hFQURFUjIgfHwKKwkJCSAgICAgKCpidWYgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSA9PSBIQUxDWU9OX0hFQURFUjEgIHx8CisJCQkgICAgICgqYnVmICYgVklBX1ZJREVPTUFTSykgPT0gVklBX1ZJREVPX0hFQURFUjUgfHwKKwkJCSAgICAgKCpidWYgJiBWSUFfVklERU9NQVNLKSA9PSBWSUFfVklERU9fSEVBREVSNiApIGJyZWFrOworCQkJCisJCQlWSUFfV1JJVEUoSENfUkVHX1RSQU5TX1NQQUNFICsgSENfUkVHX0JBU0UgKyAoYnVyc3QgJiA2MyksICpidWYrKyk7CisJCQlidXJzdCArPTQ7CisJCX0KKwl9CisJKmJ1ZmZlciA9IGJ1ZjsKKwlyZXR1cm4gc3RhdGVfY29tbWFuZDsKK30KKworCisKK3N0YXRpYyBfX2lubGluZV9fIGludAordmVyaWZ5X21taW9fYWRkcmVzcyggdWludDMyX3QgYWRkcmVzcykKK3sKKwlpZiAoKGFkZHJlc3MgPiAweDNGRikgJiYgKGFkZHJlc3MgPCAweEMwMCApKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBWSURFTyBETUEgY29tbWFuZC4gIgorCQkJICAiQXR0ZW1wdCB0byBhY2Nlc3MgM0QtIG9yIGNvbW1hbmQgYnVyc3QgYXJlYS5cbiIpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKChhZGRyZXNzID4gMHhDRkYpICYmIChhZGRyZXNzIDwgMHgxMzAwKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgVklERU8gRE1BIGNvbW1hbmQuICIKKwkJCSAgIkF0dGVtcHQgdG8gYWNjZXNzIFBDSSBETUEgYXJlYS5cbiIpOworCQlyZXR1cm4gMTsJCQorCX0gZWxzZSBpZiAoYWRkcmVzcyA+IDB4MTNGRiApIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIFZJREVPIERNQSBjb21tYW5kLiAiCisJCQkgICJBdHRlbXB0IHRvIGFjY2VzcyBWR0EgcmVnaXN0ZXJzLlxuIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50Cit2ZXJpZnlfdmlkZW9fdGFpbCggdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kLCB1aW50MzJfdCBkd29yZHMpIAoreworCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOworCisJaWYgKGJ1Zl9lbmQgLSBidWYgPCBkd29yZHMpIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIHRlcm1pbmF0aW9uIG9mIHZpZGVvIGNvbW1hbmQuXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCXdoaWxlIChkd29yZHMtLSkgeworCQlpZiAoKmJ1ZisrKSB7CisJCQlEUk1fRVJST1IoIklsbGVnYWwgdmlkZW8gY29tbWFuZCB0YWlsLlxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwkqYnVmZmVyID0gYnVmOworCXJldHVybiAwOworfQorCQkKKworc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAordmlhX2NoZWNrX2hlYWRlcjEoIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCApCit7CisJdWludDMyX3QgY21kOworCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOworCXZlcmlmaWVyX3N0YXRlX3QgcmV0ID0gc3RhdGVfY29tbWFuZDsKKworCXdoaWxlIChidWYgPCBidWZfZW5kKSB7CisJCWNtZCA9ICpidWY7CisJCWlmICgoY21kID4gKCgweDNGRiA+PiAyKSB8IEhBTENZT05fSEVBREVSMSkpICYmCisJCSAgICAoY21kIDwgKCgweEMwMCA+PiAyKSB8IEhBTENZT05fSEVBREVSMSkpKSB7CQkJCisJCQlpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spICE9IEhBTENZT05fSEVBREVSMSkgCisJCQkJYnJlYWs7CisJCQlEUk1fRVJST1IoIkludmFsaWQgSEFMQ1lPTl9IRUFERVIxIGNvbW1hbmQuICIKKwkJCQkgICJBdHRlbXB0IHRvIGFjY2VzcyAzRC0gb3IgY29tbWFuZCBidXJzdCBhcmVhLlxuIik7CisJCQlyZXQgPSBzdGF0ZV9lcnJvcjsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGNtZCA+ICgoMHhDRkYgPj4gMikgfCBIQUxDWU9OX0hFQURFUjEpKSB7CisJCQlpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spICE9IEhBTENZT05fSEVBREVSMSkgCisJCQkJYnJlYWs7CisJCQlEUk1fRVJST1IoIkludmFsaWQgSEFMQ1lPTl9IRUFERVIxIGNvbW1hbmQuICIKKwkJCQkgICJBdHRlbXB0IHRvIGFjY2VzcyBWR0EgcmVnaXN0ZXJzLlxuIik7CisJCQlyZXQgPSBzdGF0ZV9lcnJvcjsKKwkJCWJyZWFrOwkJCQorCQl9IGVsc2UgewkJCQorCQkJYnVmICs9IDI7CisJCX0KKwl9CisJKmJ1ZmZlciA9IGJ1ZjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZXJpZmllcl9zdGF0ZV90Cit2aWFfcGFyc2VfaGVhZGVyMSggZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQgKQoreworCXJlZ2lzdGVyIHVpbnQzMl90IGNtZDsKKwljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKKworCXdoaWxlIChidWYgPCBidWZfZW5kKSB7CisJCWNtZCA9ICpidWY7CisJCWlmICgoY21kICYgSEFMQ1lPTl9IRUFERVIxTUFTSykgIT0gSEFMQ1lPTl9IRUFERVIxKSBicmVhazsKKwkJVklBX1dSSVRFKCAoY21kICYgfkhBTENZT05fSEVBREVSMU1BU0spIDw8IDIsICorK2J1Zik7IAorCQlidWYrKzsKKwl9CisJKmJ1ZmZlciA9IGJ1ZjsKKwlyZXR1cm4gc3RhdGVfY29tbWFuZDsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAordmlhX2NoZWNrX3ZoZWFkZXI1KCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQgKQoreworCXVpbnQzMl90IGRhdGE7CisJY29uc3QgdWludDMyX3QgKmJ1ZiA9ICpidWZmZXI7CisKKwlpZiAoYnVmX2VuZCAtIGJ1ZiA8IDQpIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIHRlcm1pbmF0aW9uIG9mIHZpZGVvIGhlYWRlcjUgY29tbWFuZFxuIik7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwl9CisKKwlkYXRhID0gKmJ1ZisrICYgflZJQV9WSURFT01BU0s7CisJaWYgKHZlcmlmeV9tbWlvX2FkZHJlc3MoZGF0YSkpCisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKworCWRhdGEgPSAqYnVmKys7CisJaWYgKCpidWYrKyAhPSAweDAwRjUwMDAwKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCBoZWFkZXI1IGhlYWRlciBkYXRhXG4iKTsKKwkJcmV0dXJuIHN0YXRlX2Vycm9yOworCX0KKwlpZiAoKmJ1ZisrICE9IDB4MDAwMDAwMDApIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIGhlYWRlcjUgaGVhZGVyIGRhdGFcbiIpOworCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJfQorCWlmIChlYXRfd29yZHMoJmJ1ZiwgYnVmX2VuZCwgZGF0YSkpIAorCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJaWYgKChkYXRhICYgMykgJiYgdmVyaWZ5X3ZpZGVvX3RhaWwoJmJ1ZiwgYnVmX2VuZCwgNCAtIChkYXRhICYgMykpKSAKKwkJcmV0dXJuIHN0YXRlX2Vycm9yOworCSpidWZmZXIgPSBidWY7CisJcmV0dXJuIHN0YXRlX2NvbW1hbmQ7CisJICAgICAgIAorfSAKKworc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAordmlhX3BhcnNlX3ZoZWFkZXI1KCBkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCApCit7CisgIHVpbnQzMl90IGFkZHIsIGNvdW50LCBpOworCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOworCQorCWFkZHIgPSAqYnVmKysgJiB+VklBX1ZJREVPTUFTSzsKKwlpID0gY291bnQgPSAqYnVmOworCWJ1ZiArPSAzOworCXdoaWxlKGktLSkgeworCQlWSUFfV1JJVEUoYWRkciwgKmJ1ZisrKTsKKwl9CisJaWYgKGNvdW50ICYgMykgYnVmICs9IDQgLSAoY291bnQgJiAzKTsKKwkqYnVmZmVyID0gYnVmOworCXJldHVybiBzdGF0ZV9jb21tYW5kOwkgICAgICAgCit9IAorCisKK3N0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKK3ZpYV9jaGVja192aGVhZGVyNiggdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kICkKK3sKKwl1aW50MzJfdCBkYXRhOworCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOworCXVpbnQzMl90IGk7CisKKworCWlmIChidWZfZW5kIC0gYnVmIDwgNCkgeworCQlEUk1fRVJST1IoIklsbGVnYWwgdGVybWluYXRpb24gb2YgdmlkZW8gaGVhZGVyNiBjb21tYW5kXG4iKTsKKwkJcmV0dXJuIHN0YXRlX2Vycm9yOworCX0KKwlidWYrKzsKKwlkYXRhID0gKmJ1ZisrOworCWlmICgqYnVmKysgIT0gMHgwMEY2MDAwMCkgeworCQlEUk1fRVJST1IoIklsbGVnYWwgaGVhZGVyNiBoZWFkZXIgZGF0YVxuIik7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwl9CisJaWYgKCpidWYrKyAhPSAweDAwMDAwMDAwKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCBoZWFkZXI2IGhlYWRlciBkYXRhXG4iKTsKKwkJcmV0dXJuIHN0YXRlX2Vycm9yOworCX0KKwlpZiAoKGJ1Zl9lbmQgLSBidWYpIDwgKGRhdGEgPDwgMSkpIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIHRlcm1pbmF0aW9uIG9mIHZpZGVvIGhlYWRlcjYgY29tbWFuZFxuIik7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwl9CisJZm9yIChpPTA7IGk8ZGF0YTsgKytpKSB7CisJCWlmICh2ZXJpZnlfbW1pb19hZGRyZXNzKCpidWYrKykpCisJCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJCWJ1ZisrOworCX0KKwlkYXRhIDw8PSAxOworCWlmICgoZGF0YSAmIDMpICYmIHZlcmlmeV92aWRlb190YWlsKCZidWYsIGJ1Zl9lbmQsIDQgLSAoZGF0YSAmIDMpKSkKKwkJcmV0dXJuIHN0YXRlX2Vycm9yOworCSpidWZmZXIgPSBidWY7CisJcmV0dXJuIHN0YXRlX2NvbW1hbmQ7Cit9IAorCitzdGF0aWMgX19pbmxpbmVfXyB2ZXJpZmllcl9zdGF0ZV90Cit2aWFfcGFyc2VfdmhlYWRlcjYoIGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kICkKK3sKKworICB1aW50MzJfdCBhZGRyLCBjb3VudCwgaTsKKwljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKKworCWkgPSBjb3VudCA9ICorK2J1ZjsKKwlidWYgKz0gMzsKKwl3aGlsZShpLS0pIHsKKwkJYWRkciA9ICpidWYrKzsKKwkJVklBX1dSSVRFKGFkZHIsICpidWYrKyk7CisJfQorCWNvdW50IDw8PSAxOworCWlmIChjb3VudCAmIDMpIGJ1ZiArPSA0IC0gKGNvdW50ICYgMyk7CisJKmJ1ZmZlciA9IGJ1ZjsKKwlyZXR1cm4gc3RhdGVfY29tbWFuZDsKK30gCisKKworCitpbnQgCit2aWFfdmVyaWZ5X2NvbW1hbmRfc3RyZWFtKGNvbnN0IHVpbnQzMl90ICogYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSwgZHJtX2RldmljZV90ICpkZXYsCisJCQkgIGludCBhZ3ApCit7CisKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1fdmlhX3N0YXRlX3QgKmhjX3N0YXRlID0gJmRldl9wcml2LT5oY19zdGF0ZTsKKwlkcm1fdmlhX3N0YXRlX3Qgc2F2ZWRfc3RhdGUgPSAqaGNfc3RhdGU7CisJdWludDMyX3QgY21kOworCWNvbnN0IHVpbnQzMl90ICpidWZfZW5kID0gYnVmICsgKCBzaXplID4+IDIgKTsKKwl2ZXJpZmllcl9zdGF0ZV90IHN0YXRlID0gc3RhdGVfY29tbWFuZDsKKwlpbnQgcHJvX2dyb3VwX2EgPSBkZXZfcHJpdi0+cHJvX2dyb3VwX2E7CisJCisJaGNfc3RhdGUtPmRldiA9IGRldjsKKwloY19zdGF0ZS0+dW5maW5pc2hlZCA9IG5vX3NlcXVlbmNlOworCWhjX3N0YXRlLT5tYXBfY2FjaGUgPSBOVUxMOworCWhjX3N0YXRlLT5hZ3AgPSBhZ3A7CisJaGNfc3RhdGUtPmJ1Zl9zdGFydCA9IGJ1ZjsKKwlkZXZfcHJpdi0+bnVtX2ZpcmVfb2Zmc2V0cyA9IDA7CisKKwl3aGlsZSAoYnVmIDwgYnVmX2VuZCkgeworCisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBzdGF0ZV9oZWFkZXIyOgorCQkgIHN0YXRlID0gdmlhX2NoZWNrX2hlYWRlcjIoICZidWYsIGJ1Zl9lbmQsIGhjX3N0YXRlICk7CisJCQlicmVhazsKKwkJY2FzZSBzdGF0ZV9oZWFkZXIxOgorCQkJc3RhdGUgPSB2aWFfY2hlY2tfaGVhZGVyMSggJmJ1ZiwgYnVmX2VuZCApOworCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfdmhlYWRlcjU6CisJCQlzdGF0ZSA9IHZpYV9jaGVja192aGVhZGVyNSggJmJ1ZiwgYnVmX2VuZCApOworCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfdmhlYWRlcjY6CisJCQlzdGF0ZSA9IHZpYV9jaGVja192aGVhZGVyNiggJmJ1ZiwgYnVmX2VuZCApOworCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfY29tbWFuZDoKKwkJCWlmIChIQUxDWU9OX0hFQURFUjIgPT0gKGNtZCA9ICpidWYpKSAKKwkJCQlzdGF0ZSA9IHN0YXRlX2hlYWRlcjI7CisJCQllbHNlIGlmICgoY21kICYgSEFMQ1lPTl9IRUFERVIxTUFTSykgPT0gSEFMQ1lPTl9IRUFERVIxKSAKKwkJCQlzdGF0ZSA9IHN0YXRlX2hlYWRlcjE7CisJCQllbHNlIGlmIChwcm9fZ3JvdXBfYSAmJiAoY21kICYgVklBX1ZJREVPTUFTSykgPT0gVklBX1ZJREVPX0hFQURFUjUpCisJCQkJc3RhdGUgPSBzdGF0ZV92aGVhZGVyNTsKKwkJCWVsc2UgaWYgKHByb19ncm91cF9hICYmIChjbWQgJiBWSUFfVklERU9NQVNLKSA9PSBWSUFfVklERU9fSEVBREVSNikKKwkJCQlzdGF0ZSA9IHN0YXRlX3ZoZWFkZXI2OworCQkJZWxzZSB7CisJCQkJRFJNX0VSUk9SKCJJbnZhbGlkIC8gVW5pbXBsZW1lbnRlZCBETUEgSEVBREVSIGNvbW1hbmQuIDB4JXhcbiIsCisJCQkJCSAgY21kKTsKKwkJCQlzdGF0ZSA9IHN0YXRlX2Vycm9yOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfZXJyb3I6CisJCWRlZmF1bHQ6CisJCQkqaGNfc3RhdGUgPSBzYXZlZF9zdGF0ZTsKKwkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CQkJCisJCX0KKwl9CQorCWlmIChzdGF0ZSA9PSBzdGF0ZV9lcnJvcikgeworCQkqaGNfc3RhdGUgPSBzYXZlZF9zdGF0ZTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCAKK3ZpYV9wYXJzZV9jb21tYW5kX3N0cmVhbShkcm1fZGV2aWNlX3QgKmRldiwgY29uc3QgdWludDMyX3QgKiBidWYsIHVuc2lnbmVkIGludCBzaXplKQoreworCisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgY21kOworCWNvbnN0IHVpbnQzMl90ICpidWZfZW5kID0gYnVmICsgKCBzaXplID4+IDIgKTsKKwl2ZXJpZmllcl9zdGF0ZV90IHN0YXRlID0gc3RhdGVfY29tbWFuZDsKKwlpbnQgZmlyZV9jb3VudCA9IDA7CisJCisJd2hpbGUgKGJ1ZiA8IGJ1Zl9lbmQpIHsKKworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2Ugc3RhdGVfaGVhZGVyMjoKKwkJICBzdGF0ZSA9IHZpYV9wYXJzZV9oZWFkZXIyKCBkZXZfcHJpdiwgJmJ1ZiwgYnVmX2VuZCwgJmZpcmVfY291bnQgKTsKKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2hlYWRlcjE6CisJCQlzdGF0ZSA9IHZpYV9wYXJzZV9oZWFkZXIxKCBkZXZfcHJpdiwgJmJ1ZiwgYnVmX2VuZCApOworCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfdmhlYWRlcjU6CisJCQlzdGF0ZSA9IHZpYV9wYXJzZV92aGVhZGVyNSggZGV2X3ByaXYsICZidWYsIGJ1Zl9lbmQgKTsKKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX3ZoZWFkZXI2OgorCQkJc3RhdGUgPSB2aWFfcGFyc2VfdmhlYWRlcjYoIGRldl9wcml2LCAmYnVmLCBidWZfZW5kICk7CisJCQlicmVhazsKKwkJY2FzZSBzdGF0ZV9jb21tYW5kOgorCQkJaWYgKEhBTENZT05fSEVBREVSMiA9PSAoY21kID0gKmJ1ZikpIAorCQkJCXN0YXRlID0gc3RhdGVfaGVhZGVyMjsKKwkJCWVsc2UgaWYgKChjbWQgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSA9PSBIQUxDWU9OX0hFQURFUjEpIAorCQkJCXN0YXRlID0gc3RhdGVfaGVhZGVyMTsKKwkJCWVsc2UgaWYgKChjbWQgJiBWSUFfVklERU9NQVNLKSA9PSBWSUFfVklERU9fSEVBREVSNSkKKwkJCQlzdGF0ZSA9IHN0YXRlX3ZoZWFkZXI1OworCQkJZWxzZSBpZiAoKGNtZCAmIFZJQV9WSURFT01BU0spID09IFZJQV9WSURFT19IRUFERVI2KQorCQkJCXN0YXRlID0gc3RhdGVfdmhlYWRlcjY7CisJCQllbHNlIHsKKwkJCQlEUk1fRVJST1IoIkludmFsaWQgLyBVbmltcGxlbWVudGVkIERNQSBIRUFERVIgY29tbWFuZC4gMHgleFxuIiwKKwkJCQkJICBjbWQpOworCQkJCXN0YXRlID0gc3RhdGVfZXJyb3I7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBzdGF0ZV9lcnJvcjoKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CQkJCisJCX0KKwl9CQorCWlmIChzdGF0ZSA9PSBzdGF0ZV9lcnJvcikgeworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyB2b2lkIAorc2V0dXBfaGF6YXJkX3RhYmxlKGh6X2luaXRfdCBpbml0X3RhYmxlW10sIGhhemFyZF90IHRhYmxlW10sIGludCBzaXplKQoreworCWludCBpOworCisJZm9yKGk9MDsgaTwyNTY7ICsraSkgeworCQl0YWJsZVtpXSA9IGZvcmJpZGRlbl9jb21tYW5kOworCX0KKworCWZvcihpPTA7IGk8c2l6ZTsgKytpKSB7CisJCXRhYmxlW2luaXRfdGFibGVbaV0uY29kZV0gPSBpbml0X3RhYmxlW2ldLmh6OworCX0KK30KKwordm9pZCAKK3ZpYV9pbml0X2NvbW1hbmRfdmVyaWZpZXIoIHZvaWQgKQoreworCXNldHVwX2hhemFyZF90YWJsZShpbml0X3RhYmxlMSwgdGFibGUxLCBzaXplb2YoaW5pdF90YWJsZTEpIC8gc2l6ZW9mKGh6X2luaXRfdCkpOworCXNldHVwX2hhemFyZF90YWJsZShpbml0X3RhYmxlMiwgdGFibGUyLCBzaXplb2YoaW5pdF90YWJsZTIpIC8gc2l6ZW9mKGh6X2luaXRfdCkpOworCXNldHVwX2hhemFyZF90YWJsZShpbml0X3RhYmxlMywgdGFibGUzLCBzaXplb2YoaW5pdF90YWJsZTMpIC8gc2l6ZW9mKGh6X2luaXRfdCkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfdmVyaWZpZXIuaCBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZlcmlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlMTM1OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZlcmlmaWVyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IFRoZSBVbmljaHJvbWUgUHJvamVjdC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBVTklDSFJPTUUgUFJPSkVDVCwgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yOiBUaG9tYXMgSGVsbHN0cvZtIDIwMDQuCisgKi8KKworI2lmbmRlZiBfVklBX1ZFUklGSUVSX0hfCisjZGVmaW5lIF9WSUFfVkVSSUZJRVJfSF8KKwordHlwZWRlZiBlbnVteworCW5vX3NlcXVlbmNlID0gMCwgCisJel9hZGRyZXNzLAorCWRlc3RfYWRkcmVzcywKKwl0ZXhfYWRkcmVzcworfWRybV92aWFfc2VxdWVuY2VfdDsKKworCisKK3R5cGVkZWYgc3RydWN0eworCXVuc2lnbmVkIHRleHR1cmU7CisJdWludDMyX3Qgel9hZGRyOyAKKwl1aW50MzJfdCBkX2FkZHI7IAorICAgICAgICB1aW50MzJfdCB0X2FkZHJbMl1bMTBdOworCXVpbnQzMl90IHBpdGNoWzJdWzEwXTsKKwl1aW50MzJfdCBoZWlnaHRbMl1bMTBdOworCXVpbnQzMl90IHRleF9sZXZlbF9sb1syXTsgCisJdWludDMyX3QgdGV4X2xldmVsX2hpWzJdOworCXVpbnQzMl90IHRleF9wYWxldHRlX3NpemVbMl07CisJZHJtX3ZpYV9zZXF1ZW5jZV90IHVuZmluaXNoZWQ7CisJaW50IGFncF90ZXh0dXJlOworCWludCBtdWx0aXRleDsKKwlkcm1fZGV2aWNlX3QgKmRldjsKKwlkcm1fbWFwX3QgKm1hcF9jYWNoZTsKKwl1aW50MzJfdCB2ZXJ0ZXhfY291bnQ7CisJaW50IGFncDsKKwljb25zdCB1aW50MzJfdCAqYnVmX3N0YXJ0OworfSBkcm1fdmlhX3N0YXRlX3Q7CisKK2V4dGVybiBpbnQgdmlhX3ZlcmlmeV9jb21tYW5kX3N0cmVhbShjb25zdCB1aW50MzJfdCAqIGJ1ZiwgdW5zaWduZWQgaW50IHNpemUsIAorCQkJCSAgICAgZHJtX2RldmljZV90ICpkZXYsIGludCBhZ3ApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZpZGVvLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92aWRlby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YTYxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92aWRlby5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBUaG9tYXMgSGVsbHN0cm9tLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUihTKSwgQU5EL09SIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcjogVGhvbWFzIEhlbGxzdHJvbSAyMDA1LgorICoKKyAqIFZpZGVvIGFuZCBYdk1DIHJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAidmlhX2RybS5oIgorI2luY2x1ZGUgInZpYV9kcnYuaCIKKwordm9pZAordmlhX2luaXRfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXVuc2lnbmVkIGludCBpOworCisJRFJNX0RFQlVHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWZvciAoaSA9IDA7IGkgPCBWSUFfTlJfWFZNQ19MT0NLUzsgKytpKSB7CisJCURSTV9JTklUX1dBSVRRVUVVRSgmKGRldl9wcml2LT5kZWNvZGVyX3F1ZXVlW2ldKSk7CisJCVhWTUNMT0NLUFRSKGRldl9wcml2LT5zYXJlYV9wcml2LCBpKS0+bG9jayA9IDA7CisJfQorfQorCit2b2lkCit2aWFfY2xlYW51cF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7Cit9CQorCit2b2lkCit2aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBjb250ZXh0KQoreworCXVuc2lnbmVkIGludCBpOworCXZvbGF0aWxlIGludCAqbG9jazsKKworCWZvciAoaT0wOyBpIDwgVklBX05SX1hWTUNfTE9DS1M7ICsraSkgeworCSAgICAgICAgbG9jayA9IChpbnQgKikgWFZNQ0xPQ0tQVFIoZGV2X3ByaXYtPnNhcmVhX3ByaXYsIGkpOworCQlpZiAoIChfRFJNX0xPQ0tJTkdfQ09OVEVYVCggKmxvY2sgKSA9PSBjb250ZXh0KSkgeworCQkJaWYgKF9EUk1fTE9DS19JU19IRUxEKCAqbG9jayApICYmICgqbG9jayAmIF9EUk1fTE9DS19DT05UKSkgeworCQkJCURSTV9XQUtFVVAoICYoZGV2X3ByaXYtPmRlY29kZXJfcXVldWVbaV0pKTsKKwkJCX0KKwkJCSpsb2NrID0gMDsKKwkJfQorCX0JCit9CQorCitpbnQgCit2aWFfZGVjb2Rlcl9mdXRleChEUk1fSU9DVExfQVJHUykKK3sKKwlEUk1fREVWSUNFOworCWRybV92aWFfZnV0ZXhfdCBmeDsKKwl2b2xhdGlsZSBpbnQgKmxvY2s7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX3ZpYV9zYXJlYV90ICpzQVByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZngsIChkcm1fdmlhX2Z1dGV4X3QgKikgZGF0YSwgc2l6ZW9mKGZ4KSk7CisKKwlpZiAoZngubG9jayA+IFZJQV9OUl9YVk1DX0xPQ0tTKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2sgPSAoaW50ICopWFZNQ0xPQ0tQVFIoc0FQcml2LCBmeC5sb2NrKTsKKworCXN3aXRjaCAoZnguZnVuYykgeworCWNhc2UgVklBX0ZVVEVYX1dBSVQ6CisJCURSTV9XQUlUX09OKHJldCwgZGV2X3ByaXYtPmRlY29kZXJfcXVldWVbZngubG9ja10sCisJCQkgICAgKGZ4Lm1zIC8gMTApICogKERSTV9IWiAvIDEwMCksICpsb2NrICE9IGZ4LnZhbCk7CisJCXJldHVybiByZXQ7CisJY2FzZSBWSUFfRlVURVhfV0FLRToKKwkJRFJNX1dBS0VVUCgmKGRldl9wcml2LT5kZWNvZGVyX3F1ZXVlW2Z4LmxvY2tdKSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwppbmRleCA4OGNkODU4Li5jZGRiNzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwpAQCAtMjIsNiArMjIsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNDAsNyArNDEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaHZjb25zb2xlLmg+Ci0jaW5jbHVkZSA8YXNtL3Zpby5oPgogCiAjZGVmaW5lIEhWQ19NQUpPUgkyMjkKICNkZWZpbmUgSFZDX01JTk9SCTAKQEAgLTYxLDE2ICs2MSwyMSBAQAogICovCiAjZGVmaW5lIEhWQ19BTExPQ19UVFlfQURBUFRFUlMJOAogCi1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmh2Y19kcml2ZXI7Ci0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi1zdGF0aWMgaW50IHN5c3JxX3ByZXNzZWQ7Ci0jZW5kaWYKLQogI2RlZmluZSBOX09VVEJVRgkxNgogI2RlZmluZSBOX0lOQlVGCQkxNgogCiAjZGVmaW5lIF9fQUxJR05FRF9fCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDgpKSkKIAorc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpodmNfZHJpdmVyOworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqaHZjX3Rhc2s7CisKKy8qIFBpY2tzIHVwIGxhdGUga2lja3MgYWZ0ZXIgbGlzdCB3YWxrIGJ1dCBiZWZvcmUgc2NoZWR1bGUoKSAqLworc3RhdGljIGludCBodmNfa2lja2VkOworCisjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCitzdGF0aWMgaW50IHN5c3JxX3ByZXNzZWQ7CisjZW5kaWYKKwogc3RydWN0IGh2Y19zdHJ1Y3QgewogCXNwaW5sb2NrX3QgbG9jazsKIAlpbnQgaW5kZXg7CkBAIC04MCwxMSArODUsMTEgQEAKIAljaGFyIG91dGJ1ZltOX09VVEJVRl0gX19BTElHTkVEX187CiAJaW50IG5fb3V0YnVmOwogCXVpbnQzMl90IHZ0ZXJtbm87CisJc3RydWN0IGh2X29wcyAqb3BzOwogCWludCBpcnFfcmVxdWVzdGVkOwogCWludCBpcnE7CiAJc3RydWN0IGxpc3RfaGVhZCBuZXh0OwogCXN0cnVjdCBrb2JqZWN0IGtvYmo7IC8qIHJlZiBjb3VudCAmIGh2Y19zdHJ1Y3QgbGlmZXRpbWUgKi8KLQlzdHJ1Y3QgdmlvX2RldiAqdmRldjsKIH07CiAKIC8qIGR5bmFtaWMgbGlzdCBvZiBodmNfc3RydWN0IGluc3RhbmNlcyAqLwpAQCAtOTcsNDggKzEwMiwxMSBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhodmNfc3RydWN0c19sb2NrKTsKIAogLyoKLSAqIEluaXRpYWwgY29uc29sZSB2dGVybW5vcyBmb3IgY29uc29sZSBBUEkgdXNhZ2UgcHJpb3IgdG8gZnVsbCBjb25zb2xlCi0gKiBpbml0aWFsaXphdGlvbi4gIEFueSB2dHkgYWRhcHRlciBvdXRzaWRlIHRoaXMgcmFuZ2Ugd2lsbCBub3QgaGF2ZSB1c2FibGUKLSAqIGNvbnNvbGUgaW50ZXJmYWNlcyBidXQgY2FuIHN0aWxsIGJlIHVzZWQgYXMgYSB0dHkgZGV2aWNlLiAgVGhpcyBoYXMgdG8gYmUKLSAqIHN0YXRpYyBiZWNhdXNlIGttYWxsb2Mgd2lsbCBub3Qgd29yayBkdXJpbmcgZWFybHkgY29uc29sZSBpbml0LgorICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGFzc2lnbiBhIHR0eS0+aW5kZXggdmFsdWUgdG8gYSBodmNfc3RydWN0IGJhc2VkCisgKiB1cG9uIG9yZGVyIG9mIGV4cG9zdXJlIHZpYSBodmNfcHJvYmUoKSwgd2hlbiB3ZSBjYW4gbm90IG1hdGNoIGl0IHRvCisgKiBhIGNvbnNvbGUgY2FuaWRhdGUgcmVnaXN0ZXJlZCB3aXRoIGh2Y19pbnN0YW50aWF0ZSgpLgogICovCi1zdGF0aWMgdWludDMyX3QgdnRlcm1ub3NbTUFYX05SX0hWQ19DT05TT0xFU107Ci0KLS8qIFVzZWQgZm9yIGFjY291bnRpbmcgcHVycG9zZXMgKi8KLXN0YXRpYyBpbnQgbnVtX3Z0ZXJtcyA9IDA7Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmh2Y190YXNrOwotCi0vKgotICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGFzc29jaWF0ZSBhIHR0eS0+aW5kZXggdmFsdWUgdG8gYSBodmNfc3RydWN0IGJhc2VkCi0gKiB1cG9uIG9yZGVyIG9mIGV4cG9zdXJlIHZpYSBodmNfcHJvYmUoKS4KLSAqLwotc3RhdGljIGludCBodmNfY291bnQgPSAtMTsKLQotLyogUGlja3MgdXAgbGF0ZSBraWNrcyBhZnRlciBsaXN0IHdhbGsgYnV0IGJlZm9yZSBzY2hlZHVsZSgpICovCi1zdGF0aWMgaW50IGh2Y19raWNrZWQ7Ci0KLS8qIFdha2UgdGhlIHNsZWVwaW5nIGtodmNkICovCi1zdGF0aWMgdm9pZCBodmNfa2ljayh2b2lkKQotewotCWh2Y19raWNrZWQgPSAxOwotCXdha2VfdXBfcHJvY2VzcyhodmNfdGFzayk7Ci19Ci0KLS8qCi0gKiBOT1RFOiBUaGlzIEFQSSBpc24ndCB1c2VkIGlmIHRoZSBjb25zb2xlIGFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IGludGVycnVwdHMuCi0gKiBJbiB0aGlzIGNhc2UgdGhlIGNvbnNvbGUgaXMgcG9sbCBkcml2ZW4uCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBodmNfaGFuZGxlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWh2Y19raWNrKCk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdm9pZCBodmNfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWh2Y19raWNrKCk7Ci19CitzdGF0aWMgaW50IGxhc3RfaHZjID0gLTE7CiAKIC8qCiAgKiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZWl0aGVyIHRoZSBodmNfc3RydWNzdF9sb2NrIG9yIHRoZSBodmNfc3RydWN0CkBAIC0xNjgsNiArMTM2LDE3OCBAQAogCXJldHVybiBocDsKIH0KIAorCisvKgorICogSW5pdGlhbCBjb25zb2xlIHZ0ZXJtbm9zIGZvciBjb25zb2xlIEFQSSB1c2FnZSBwcmlvciB0byBmdWxsIGNvbnNvbGUKKyAqIGluaXRpYWxpemF0aW9uLiAgQW55IHZ0eSBhZGFwdGVyIG91dHNpZGUgdGhpcyByYW5nZSB3aWxsIG5vdCBoYXZlIHVzYWJsZQorICogY29uc29sZSBpbnRlcmZhY2VzIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCBhcyBhIHR0eSBkZXZpY2UuICBUaGlzIGhhcyB0byBiZQorICogc3RhdGljIGJlY2F1c2Uga21hbGxvYyB3aWxsIG5vdCB3b3JrIGR1cmluZyBlYXJseSBjb25zb2xlIGluaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaHZfb3BzICpjb25zX29wc1tNQVhfTlJfSFZDX0NPTlNPTEVTXTsKK3N0YXRpYyB1aW50MzJfdCB2dGVybW5vc1tNQVhfTlJfSFZDX0NPTlNPTEVTXSA9CisJe1swIC4uLiBNQVhfTlJfSFZDX0NPTlNPTEVTIC0gMV0gPSAtMX07CisKKy8qCisgKiBDb25zb2xlIEFQSXMsIE5PVCBUVFkuICBUaGVzZSBBUElzIGFyZSBhdmFpbGFibGUgaW1tZWRpYXRlbHkgd2hlbgorICogaHZjX2NvbnNvbGVfc2V0dXAoKSBmaW5kcyBhZGFwdGVycy4KKyAqLworCit2b2lkIGh2Y19jb25zb2xlX3ByaW50KHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqYiwgdW5zaWduZWQgY291bnQpCit7CisJY2hhciBjWzE2XSBfX0FMSUdORURfXzsKKwl1bnNpZ25lZCBpID0gMCwgbiA9IDA7CisJaW50IHIsIGRvbmVjciA9IDAsIGluZGV4ID0gY28tPmluZGV4OworCisJLyogQ29uc29sZSBhY2Nlc3MgYXR0ZW1wdCBvdXRzaWRlIG9mIGFjY2VwdGFibGUgY29uc29sZSByYW5nZS4gKi8KKwlpZiAoaW5kZXggPj0gTUFYX05SX0hWQ19DT05TT0xFUykKKwkJcmV0dXJuOworCisJLyogVGhpcyBjb25zb2xlIGFkYXB0ZXIgd2FzIHJlbW92ZWQgc28gaXQgaXMgbm90IHVzZWFibGUuICovCisJaWYgKHZ0ZXJtbm9zW2luZGV4XSA8IDApCisJCXJldHVybjsKKworCXdoaWxlIChjb3VudCA+IDAgfHwgaSA+IDApIHsKKwkJaWYgKGNvdW50ID4gMCAmJiBpIDwgc2l6ZW9mKGMpKSB7CisJCQlpZiAoYltuXSA9PSAnXG4nICYmICFkb25lY3IpIHsKKwkJCQljW2krK10gPSAnXHInOworCQkJCWRvbmVjciA9IDE7CisJCQl9IGVsc2UgeworCQkJCWNbaSsrXSA9IGJbbisrXTsKKwkJCQlkb25lY3IgPSAwOworCQkJCS0tY291bnQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyID0gY29uc19vcHNbaW5kZXhdLT5wdXRfY2hhcnModnRlcm1ub3NbaW5kZXhdLCBjLCBpKTsKKwkJCWlmIChyIDwgMCkgeworCQkJCS8qIHRocm93IGF3YXkgY2hhcnMgb24gZXJyb3IgKi8KKwkJCQlpID0gMDsKKwkJCX0gZWxzZSBpZiAociA+IDApIHsKKwkJCQlpIC09IHI7CisJCQkJaWYgKGkgPiAwKQorCQkJCQltZW1tb3ZlKGMsIGMrciwgaSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqaHZjX2NvbnNvbGVfZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLCBpbnQgKmluZGV4KQoreworCWlmICh2dGVybW5vc1tjLT5pbmRleF0gPT0gLTEpCisJCXJldHVybiBOVUxMOworCisJKmluZGV4ID0gYy0+aW5kZXg7CisJcmV0dXJuIGh2Y19kcml2ZXI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGh2Y19jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3sKKwlpZiAoY28tPmluZGV4IDwgMCB8fCBjby0+aW5kZXggPj0gTUFYX05SX0hWQ19DT05TT0xFUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAodnRlcm1ub3NbY28tPmluZGV4XSA9PSAtMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNvbnNvbGUgaHZjX2Nvbl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImh2YyIsCisJLndyaXRlCQk9IGh2Y19jb25zb2xlX3ByaW50LAorCS5kZXZpY2UJCT0gaHZjX2NvbnNvbGVfZGV2aWNlLAorCS5zZXR1cAkJPSBodmNfY29uc29sZV9zZXR1cCwKKwkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAkJPSAtMSwKK307CisKKy8qCisgKiBFYXJseSBjb25zb2xlIGluaXRpYWxpemF0aW9uLiAgUHJlY2VlZHMgZHJpdmVyIGluaXRpYWxpemF0aW9uLgorICoKKyAqICgxKSB3ZSBhcmUgZmlyc3QsIGFuZCB0aGUgdXNlciBzcGVjaWZpZWQgYW5vdGhlciBkcml2ZXIKKyAqIC0tIGluZGV4IHdpbGwgcmVtYWluIC0xCisgKiAoMikgd2UgYXJlIGZpcnN0IGFuZCB0aGUgdXNlciBzcGVjaWZpZWQgbm8gZHJpdmVyCisgKiAtLSBpbmRleCB3aWxsIGJlIHNldCB0byAwLCB0aGVuIHdlIHdpbGwgZmFpbCBzZXR1cC4KKyAqICgzKSAgd2UgYXJlIGZpcnN0IGFuZCB0aGUgdXNlciBzcGVjaWZpZWQgb3VyIGRyaXZlcgorICogLS0gaW5kZXggd2lsbCBiZSBzZXQgdG8gdXNlciBzcGVjaWZpZWQgZHJpdmVyLCBhbmQgd2Ugd2lsbCBmYWlsCisgKiAoNCkgd2UgYXJlIGFmdGVyIGRyaXZlciwgYW5kIHRoaXMgaW5pdGNhbGwgd2lsbCByZWdpc3RlciB1cworICogLS0gaWYgdGhlIHVzZXIgZGlkbid0IHNwZWNpZnkgYSBkcml2ZXIgdGhlbiB0aGUgY29uc29sZSB3aWxsIG1hdGNoCisgKgorICogTm90ZSB0aGF0IGZvciBjYXNlcyAyIGFuZCAzLCB3ZSB3aWxsIG1hdGNoIGxhdGVyIHdoZW4gdGhlIGlvIGRyaXZlcgorICogY2FsbHMgaHZjX2luc3RhbnRpYXRlKCkgYW5kIGNhbGwgcmVnaXN0ZXIgYWdhaW4uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGh2Y19jb25zb2xlX2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9jb25zb2xlKCZodmNfY29uX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9Citjb25zb2xlX2luaXRjYWxsKGh2Y19jb25zb2xlX2luaXQpOworCisvKgorICogaHZjX2luc3RhbnRpYXRlKCkgaXMgYW4gZWFybHkgY29uc29sZSBkaXNjb3ZlcnkgbWV0aG9kIHdoaWNoIGxvY2F0ZXMKKyAqIGNvbnNvbGVzICogcHJpb3IgdG8gdGhlIHZpbyBzdWJzeXN0ZW0gZGlzY292ZXJpbmcgdGhlbS4gIEhvdHBsdWdnZWQKKyAqIHZ0eSBhZGFwdGVycyBkbyBOT1QgZ2V0IGFuIGh2Y19pbnN0YW50aWF0ZSgpIGNhbGxiYWNrIHNpbmNlIHRoZXkKKyAqIGFwcGVhciBhZnRlciBlYXJseSBjb25zb2xlIGluaXQuCisgKi8KK2ludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4LCBzdHJ1Y3QgaHZfb3BzICpvcHMpCit7CisJc3RydWN0IGh2Y19zdHJ1Y3QgKmhwOworCisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBNQVhfTlJfSFZDX0NPTlNPTEVTKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodnRlcm1ub3NbaW5kZXhdICE9IC0xKQorCQlyZXR1cm4gLTE7CisKKwkvKiBtYWtlIHN1cmUgbm8gbm8gdHR5IGhhcyBiZWVuIHJlZ2lzdGVyZCBpbiB0aGlzIGluZGV4ICovCisJaHAgPSBodmNfZ2V0X2J5X2luZGV4KGluZGV4KTsKKwlpZiAoaHApIHsKKwkJa29iamVjdF9wdXQoJmhwLT5rb2JqKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXZ0ZXJtbm9zW2luZGV4XSA9IHZ0ZXJtbm87CisJY29uc19vcHNbaW5kZXhdID0gb3BzOworCisJLyogcmVzZXJ2ZSBhbGwgaW5kaWNlcyB1cHRvIGFuZCBpbmNsdWRpbmcgdGhpcyBpbmRleCAqLworCWlmIChsYXN0X2h2YyA8IGluZGV4KQorCQlsYXN0X2h2YyA9IGluZGV4OworCisJLyogaWYgdGhpcyBpbmRleCBpcyB3aGF0IHRoZSB1c2VyIHJlcXVlc3RlZCwgdGhlbiByZWdpc3RlcgorCSAqIG5vdyAoc2V0dXAgd29uJ3QgZmFpbCBhdCB0aGlzIHBvaW50KS4gIEl0J3Mgb2sgdG8ganVzdAorCSAqIGNhbGwgcmVnaXN0ZXIgYWdhaW4gaWYgcHJldmlvdXNseSAuc2V0dXAgZmFpbGVkLgorCSAqLworCWlmIChpbmRleCA9PSBodmNfY29uX2RyaXZlci5pbmRleCkKKwkJcmVnaXN0ZXJfY29uc29sZSgmaHZjX2Nvbl9kcml2ZXIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGh2Y19pbnN0YW50aWF0ZSk7CisKKy8qIFdha2UgdGhlIHNsZWVwaW5nIGtodmNkICovCitzdGF0aWMgdm9pZCBodmNfa2ljayh2b2lkKQoreworCWh2Y19raWNrZWQgPSAxOworCXdha2VfdXBfcHJvY2VzcyhodmNfdGFzayk7Cit9CisKK3N0YXRpYyBpbnQgaHZjX3BvbGwoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwKTsKKworLyoKKyAqIE5PVEU6IFRoaXMgQVBJIGlzbid0IHVzZWQgaWYgdGhlIGNvbnNvbGUgYWRhcHRlciBkb2Vzbid0IHN1cHBvcnQgaW50ZXJydXB0cy4KKyAqIEluIHRoaXMgY2FzZSB0aGUgY29uc29sZSBpcyBwb2xsIGRyaXZlbi4KKyAqLworc3RhdGljIGlycXJldHVybl90IGh2Y19oYW5kbGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogaWYgaHZjX3BvbGwgcmVxdWVzdCBhIHJlcG9sbCwgdGhlbiBraWNrIHRoZSBodmNkIHRocmVhZCAqLworCWlmIChodmNfcG9sbChkZXZfaW5zdGFuY2UpKQorCQlodmNfa2ljaygpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgaHZjX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlodmNfa2ljaygpOworfQorCiAvKgogICogVGhlIFRUWSBpbnRlcmZhY2Ugd29uJ3QgYmUgdXNlZCB1bnRpbCBhZnRlciB0aGUgdmlvIGxheWVyIGhhcyBleHBvc2VkIHRoZSB2dHkKICAqIGFkYXB0ZXIgdG8gdGhlIGtlcm5lbC4KQEAgLTMyOSw3ICs0NjksNyBAQAogewogCWludCBuOwogCi0JbiA9IGh2Y19wdXRfY2hhcnMoaHAtPnZ0ZXJtbm8sIGhwLT5vdXRidWYsIGhwLT5uX291dGJ1Zik7CisJbiA9IGhwLT5vcHMtPnB1dF9jaGFycyhocC0+dnRlcm1ubywgaHAtPm91dGJ1ZiwgaHAtPm5fb3V0YnVmKTsKIAlpZiAobiA8PSAwKSB7CiAJCWlmIChuID09IDApCiAJCQlyZXR1cm47CkBAIC00NjcsNyArNjA3LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJbiA9IGh2Y19nZXRfY2hhcnMoaHAtPnZ0ZXJtbm8sIGJ1ZiwgY291bnQpOworCQluID0gaHAtPm9wcy0+Z2V0X2NoYXJzKGhwLT52dGVybW5vLCBidWYsIGNvdW50KTsKIAkJaWYgKG4gPD0gMCkgewogCQkJLyogSGFuZ3VwIHRoZSB0dHkgd2hlbiBkaXNjb25uZWN0ZWQgZnJvbSBob3N0ICovCiAJCQlpZiAobiA9PSAtRVBJUEUpIHsKQEAgLTQ3OSwxNCArNjE5LDE3IEBACiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IG47ICsraSkgewogI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQotCQkJLyogSGFuZGxlIHRoZSBTeXNScSBIYWNrICovCi0JCQlpZiAoYnVmW2ldID09ICdceDBmJykgewkvKiBeTyAtLSBzaG91bGQgc3VwcG9ydCBhIHNlcXVlbmNlICovCi0JCQkJc3lzcnFfcHJlc3NlZCA9IDE7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgaWYgKHN5c3JxX3ByZXNzZWQpIHsKLQkJCQloYW5kbGVfc3lzcnEoYnVmW2ldLCBOVUxMLCB0dHkpOwotCQkJCXN5c3JxX3ByZXNzZWQgPSAwOwotCQkJCWNvbnRpbnVlOworCQkJaWYgKGhwLT5pbmRleCA9PSBodmNfY29uX2RyaXZlci5pbmRleCkgeworCQkJCS8qIEhhbmRsZSB0aGUgU3lzUnEgSGFjayAqLworCQkJCS8qIFhYWCBzaG91bGQgc3VwcG9ydCBhIHNlcXVlbmNlICovCisJCQkJaWYgKGJ1ZltpXSA9PSAnXHgwZicpIHsJLyogXk8gKi8KKwkJCQkJc3lzcnFfcHJlc3NlZCA9IDE7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gZWxzZSBpZiAoc3lzcnFfcHJlc3NlZCkgeworCQkJCQloYW5kbGVfc3lzcnEoYnVmW2ldLCBOVUxMLCB0dHkpOworCQkJCQlzeXNycV9wcmVzc2VkID0gMDsKKwkJCQkJY29udGludWU7CisJCQkJfQogCQkJfQogI2VuZGlmIC8qIENPTkZJR19NQUdJQ19TWVNSUSAqLwogCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBidWZbaV0sIDApOwpAQCAtNDk3LDggKzY0MCw4IEBACiAKIAkJLyoKIAkJICogQWNjb3VudCBmb3IgdGhlIHRvdGFsIGFtb3VudCByZWFkIGluIG9uZSBsb29wLCBhbmQgaWYgYWJvdmUKLQkJICogNjQgYnl0ZXMsIHdlIGRvIGEgcXVpY2sgc2NoZWR1bGUgbG9vcCB0byBsZXQgdGhlIHR0eSBncm9rIHRoZQotCQkgKiBkYXRhIGFuZCBldmVudHVhbGx5IHRocm90dGxlIHVzLgorCQkgKiA2NCBieXRlcywgd2UgZG8gYSBxdWljayBzY2hlZHVsZSBsb29wIHRvIGxldCB0aGUgdHR5IGdyb2sKKwkJICogdGhlIGRhdGEgYW5kIGV2ZW50dWFsbHkgdGhyb3R0bGUgdXMuCiAJCSAqLwogCQlyZWFkX3RvdGFsICs9IG47CiAJCWlmIChyZWFkX3RvdGFsID49IDY0KSB7CkBAIC01NDIsNyArNjg1LDYgQEAKIAkJaWYgKGNwdXNfZW1wdHkoY3B1c19pbl94bW9uKSkgewogCQkJc3Bpbl9sb2NrKCZodmNfc3RydWN0c19sb2NrKTsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaHAsICZodmNfc3RydWN0cywgbmV4dCkgewotCQkJCS8qaHAgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBodmNfc3RydWN0LCAqIG5leHQpOyAqLwogCQkJCXBvbGxfbWFzayB8PSBodmNfcG9sbChocCk7CiAJCQl9CiAJCQlzcGluX3VubG9jaygmaHZjX3N0cnVjdHNfbG9jayk7CkBAIC01NzcsMTQgKzcxOSw2IEBACiAJLmNoYXJzX2luX2J1ZmZlciA9IGh2Y19jaGFyc19pbl9idWZmZXIsCiB9OwogCi1jaGFyIGh2Y19kcml2ZXJfbmFtZVtdID0gImh2Y19jb25zb2xlIjsKLQotc3RhdGljIHN0cnVjdCB2aW9fZGV2aWNlX2lkIGh2Y19kcml2ZXJfdGFibGVbXSBfX2RldmluaXRkYXRhPSB7Ci0JeyJzZXJpYWwiLCAiaHZ0ZXJtMSJ9LAotCXsgTlVMTCwgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodmlvLCBodmNfZHJpdmVyX3RhYmxlKTsKLQogLyogY2FsbGJhY2sgd2hlbiB0aGUga2JvamVjdCByZWYgY291bnQgcmVhY2hlcyB6ZXJvLiAqLwogc3RhdGljIHZvaWQgZGVzdHJveV9odmNfc3RydWN0KHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewpAQCAtNjA2LDQxICs3NDAsNTEgQEAKIAkucmVsZWFzZSA9IGRlc3Ryb3lfaHZjX3N0cnVjdCwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGh2Y19wcm9iZSgKLQkJc3RydWN0IHZpb19kZXYgKmRldiwKLQkJY29uc3Qgc3RydWN0IHZpb19kZXZpY2VfaWQgKmlkKQorc3RydWN0IGh2Y19zdHJ1Y3QgX19kZXZpbml0ICpodmNfYWxsb2ModWludDMyX3QgdnRlcm1ubywgaW50IGlycSwKKwkJCQkJc3RydWN0IGh2X29wcyAqb3BzKQogewogCXN0cnVjdCBodmNfc3RydWN0ICpocDsKLQotCS8qIHByb2JlZCB3aXRoIGludmFsaWQgcGFyYW1ldGVycy4gKi8KLQlpZiAoIWRldiB8fCAhaWQpCi0JCXJldHVybiAtRVBFUk07CisJaW50IGk7CiAKIAlocCA9IGttYWxsb2Moc2l6ZW9mKCpocCksIEdGUF9LRVJORUwpOwogCWlmICghaHApCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCW1lbXNldChocCwgMHgwMCwgc2l6ZW9mKCpocCkpOwotCWhwLT52dGVybW5vID0gZGV2LT51bml0X2FkZHJlc3M7Ci0JaHAtPnZkZXYgPSBkZXY7Ci0JaHAtPnZkZXYtPmRldi5kcml2ZXJfZGF0YSA9IGhwOwotCWhwLT5pcnEgPSBkZXYtPmlycTsKKworCWhwLT52dGVybW5vID0gdnRlcm1ubzsKKwlocC0+aXJxID0gaXJxOworCWhwLT5vcHMgPSBvcHM7CiAKIAlrb2JqZWN0X2luaXQoJmhwLT5rb2JqKTsKIAlocC0+a29iai5rdHlwZSA9ICZodmNfa29ial90eXBlOwogCiAJc3Bpbl9sb2NrX2luaXQoJmhwLT5sb2NrKTsKIAlzcGluX2xvY2soJmh2Y19zdHJ1Y3RzX2xvY2spOwotCWhwLT5pbmRleCA9ICsraHZjX2NvdW50OworCisJLyoKKwkgKiBmaW5kIGluZGV4IHRvIHVzZToKKwkgKiBzZWUgaWYgdGhpcyB2dGVybSBpZCBtYXRjaGVzIG9uZSByZWdpc3RlcmVkIGZvciBjb25zb2xlLgorCSAqLworCWZvciAoaT0wOyBpIDwgTUFYX05SX0hWQ19DT05TT0xFUzsgaSsrKQorCQlpZiAodnRlcm1ub3NbaV0gPT0gaHAtPnZ0ZXJtbm8pCisJCQlicmVhazsKKworCS8qIG5vIG1hdGNoaW5nIHNsb3QsIGp1c3QgdXNlIGEgY291bnRlciAqLworCWlmIChpID49IE1BWF9OUl9IVkNfQ09OU09MRVMpCisJCWkgPSArK2xhc3RfaHZjOworCisJaHAtPmluZGV4ID0gaTsKKwogCWxpc3RfYWRkX3RhaWwoJihocC0+bmV4dCksICZodmNfc3RydWN0cyk7CiAJc3Bpbl91bmxvY2soJmh2Y19zdHJ1Y3RzX2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGhwOwogfQorRVhQT1JUX1NZTUJPTChodmNfYWxsb2MpOwogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBodmNfcmVtb3ZlKHN0cnVjdCB2aW9fZGV2ICpkZXYpCitpbnQgX19kZXZleGl0IGh2Y19yZW1vdmUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwKQogewotCXN0cnVjdCBodmNfc3RydWN0ICpocCA9IGRldi0+ZGV2LmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtvYmplY3QgKmtvYmpwOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CkBAIC02NzMsMjMgKzgxNywxNCBAQAogCQl0dHlfaGFuZ3VwKHR0eSk7CiAJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlvX2RyaXZlciBodmNfdmlvX2RyaXZlciA9IHsKLQkubmFtZQkJPSBodmNfZHJpdmVyX25hbWUsCi0JLmlkX3RhYmxlCT0gaHZjX2RyaXZlcl90YWJsZSwKLQkucHJvYmUJCT0gaHZjX3Byb2JlLAotCS5yZW1vdmUJCT0gaHZjX3JlbW92ZSwKLX07CitFWFBPUlRfU1lNQk9MKGh2Y19yZW1vdmUpOwogCiAvKiBEcml2ZXIgaW5pdGlhbGl6YXRpb24uICBGb2xsb3cgY29uc29sZSBpbml0aWFsaXphdGlvbi4gIFRoaXMgaXMgd2hlcmUgdGhlIFRUWQogICogaW50ZXJmYWNlcyBzdGFydCB0byBiZWNvbWUgYXZhaWxhYmxlLiAqLwogaW50IF9faW5pdCBodmNfaW5pdCh2b2lkKQogewotCWludCByYzsKLQotCS8qIFdlIG5lZWQgbW9yZSB0aGFuIG51bV92dGVybXMgYWRhcHRlcnMgZHVlIHRvIGhvdHBsdWcgYWRkaXRpb25zLiAqLworCS8qIFdlIG5lZWQgbW9yZSB0aGFuIGh2Y19jb3VudCBhZGFwdGVycyBkdWUgdG8gaG90cGx1ZyBhZGRpdGlvbnMuICovCiAJaHZjX2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoSFZDX0FMTE9DX1RUWV9BREFQVEVSUyk7Ci0JLyogaHZjX2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIobnVtX3Z0ZXJtcyk7ICovCiAJaWYgKCFodmNfZHJpdmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzE2LDExNiArODUxLDIwIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCS8qIFJlZ2lzdGVyIGFzIGEgdmlvIGRldmljZSB0byByZWNlaXZlIGNhbGxiYWNrcyAqLwotCXJjID0gdmlvX3JlZ2lzdGVyX2RyaXZlcigmaHZjX3Zpb19kcml2ZXIpOwotCi0JcmV0dXJuIHJjOworCXJldHVybiAwOwogfQorbW9kdWxlX2luaXQoaHZjX2luaXQpOwogCi0vKiBUaGlzIGlzbid0IHBhcnRpY3VsYXJpbHkgbmVjZXNzYXJ5IGR1ZSB0byB0aGlzIGJlaW5nIGEgY29uc29sZSBkcml2ZXIgYnV0IGl0Ci0gKiBpcyBuaWNlIHRvIGJlIHRob3JvdWdoICovCisvKiBUaGlzIGlzbid0IHBhcnRpY3VsYXJpbHkgbmVjZXNzYXJ5IGR1ZSB0byB0aGlzIGJlaW5nIGEgY29uc29sZSBkcml2ZXIKKyAqIGJ1dCBpdCBpcyBuaWNlIHRvIGJlIHRob3JvdWdoLgorICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgaHZjX2V4aXQodm9pZCkKIHsKIAlrdGhyZWFkX3N0b3AoaHZjX3Rhc2spOwogCi0JdmlvX3VucmVnaXN0ZXJfZHJpdmVyKCZodmNfdmlvX2RyaXZlcik7CiAJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGh2Y19kcml2ZXIpOwogCS8qIHJldHVybiB0dHlfc3RydWN0IGluc3RhbmNlcyBhbGxvY2F0ZWQgaW4gaHZjX2luaXQoKS4gKi8KIAlwdXRfdHR5X2RyaXZlcihodmNfZHJpdmVyKTsKKwl1bnJlZ2lzdGVyX2NvbnNvbGUoJmh2Y19jb25fZHJpdmVyKTsKIH0KLQotLyoKLSAqIENvbnNvbGUgQVBJcywgTk9UIFRUWS4gIFRoZXNlIEFQSXMgYXJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSB3aGVuCi0gKiBodmNfY29uc29sZV9zZXR1cCgpIGZpbmRzIGFkYXB0ZXJzLgotICovCi0KLS8qCi0gKiBodmNfaW5zdGFudGlhdGUoKSBpcyBhbiBlYXJseSBjb25zb2xlIGRpc2NvdmVyeSBtZXRob2Qgd2hpY2ggbG9jYXRlcyBjb25zb2xlcwotICogcHJpb3IgdG8gdGhlIHZpbyBzdWJzeXN0ZW0gZGlzY292ZXJpbmcgdGhlbS4gIEhvdHBsdWdnZWQgdnR5IGFkYXB0ZXJzIGRvIE5PVAotICogZ2V0IGFuIGh2Y19pbnN0YW50aWF0ZSgpIGNhbGxiYWNrIHNpbmNlIHRoZSBhcHBlYXIgYWZ0ZXIgZWFybHkgY29uc29sZSBpbml0LgotICovCi1pbnQgaHZjX2luc3RhbnRpYXRlKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpbmRleCkKLXsKLQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IE1BWF9OUl9IVkNfQ09OU09MRVMpCi0JCXJldHVybiAtMTsKLQotCWlmICh2dGVybW5vc1tpbmRleF0gIT0gLTEpCi0JCXJldHVybiAtMTsKLQotCXZ0ZXJtbm9zW2luZGV4XSA9IHZ0ZXJtbm87Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaHZjX2NvbnNvbGVfcHJpbnQoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpiLCB1bnNpZ25lZCBjb3VudCkKLXsKLQljaGFyIGNbMTZdIF9fQUxJR05FRF9fOwotCXVuc2lnbmVkIGkgPSAwLCBuID0gMDsKLQlpbnQgciwgZG9uZWNyID0gMDsKLQotCS8qIENvbnNvbGUgYWNjZXNzIGF0dGVtcHQgb3V0c2lkZSBvZiBhY2NlcHRhYmxlIGNvbnNvbGUgcmFuZ2UuICovCi0JaWYgKGNvLT5pbmRleCA+PSBNQVhfTlJfSFZDX0NPTlNPTEVTKQotCQlyZXR1cm47Ci0KLQkvKiBUaGlzIGNvbnNvbGUgYWRhcHRlciB3YXMgcmVtb3ZlZCBzbyBpdCBpcyBub3QgdXNlYWJsZS4gKi8KLQlpZiAodnRlcm1ub3NbY28tPmluZGV4XSA8IDApCi0JCXJldHVybjsKLQotCXdoaWxlIChjb3VudCA+IDAgfHwgaSA+IDApIHsKLQkJaWYgKGNvdW50ID4gMCAmJiBpIDwgc2l6ZW9mKGMpKSB7Ci0JCQlpZiAoYltuXSA9PSAnXG4nICYmICFkb25lY3IpIHsKLQkJCQljW2krK10gPSAnXHInOwotCQkJCWRvbmVjciA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCWNbaSsrXSA9IGJbbisrXTsKLQkJCQlkb25lY3IgPSAwOwotCQkJCS0tY291bnQ7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyID0gaHZjX3B1dF9jaGFycyh2dGVybW5vc1tjby0+aW5kZXhdLCBjLCBpKTsKLQkJCWlmIChyIDwgMCkgewotCQkJCS8qIHRocm93IGF3YXkgY2hhcnMgb24gZXJyb3IgKi8KLQkJCQlpID0gMDsKLQkJCX0gZWxzZSBpZiAociA+IDApIHsKLQkJCQlpIC09IHI7Ci0JCQkJaWYgKGkgPiAwKQotCQkJCQltZW1tb3ZlKGMsIGMrciwgaSk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqaHZjX2NvbnNvbGVfZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLCBpbnQgKmluZGV4KQotewotCSppbmRleCA9IGMtPmluZGV4OwotCXJldHVybiBodmNfZHJpdmVyOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBodmNfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBjb25zb2xlIGh2Y19jb25fZHJpdmVyID0gewotCS5uYW1lCQk9ICJodmMiLAotCS53cml0ZQkJPSBodmNfY29uc29sZV9wcmludCwKLQkuZGV2aWNlCQk9IGh2Y19jb25zb2xlX2RldmljZSwKLQkuc2V0dXAJCT0gaHZjX2NvbnNvbGVfc2V0dXAsCi0JLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiwKLQkuaW5kZXgJCT0gLTEsCi19OwotCi0vKiBFYXJseSBjb25zb2xlIGluaXRpYWxpemF0aW9uLiAgUHJlY2VlZHMgZHJpdmVyIGluaXRpYWxpemF0aW9uLiAqLwotc3RhdGljIGludCBfX2luaXQgaHZjX2NvbnNvbGVfaW5pdCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpPTA7IGk8TUFYX05SX0hWQ19DT05TT0xFUzsgaSsrKQotCQl2dGVybW5vc1tpXSA9IC0xOwotCW51bV92dGVybXMgPSBodmNfZmluZF92dHlzKCk7Ci0JcmVnaXN0ZXJfY29uc29sZSgmaHZjX2Nvbl9kcml2ZXIpOwotCXJldHVybiAwOwotfQotY29uc29sZV9pbml0Y2FsbChodmNfY29uc29sZV9pbml0KTsKLQotbW9kdWxlX2luaXQoaHZjX2luaXQpOwogbW9kdWxlX2V4aXQoaHZjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y192aW8uYyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiYjkxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiB2aW8gZHJpdmVyIGludGVyZmFjZSB0byBodmNfY29uc29sZS5jCisgKgorICogVGhpcyBjb2RlIHdhcyBtb3ZlZCBoZXJlIHRvIGFsbG93IHRoZSByZW1haW5nIGNvZGUgdG8gYmUgcmV1c2VkIGFzIGEKKyAqIGdlbmVyaWMgcG9sbGluZyBtb2RlIHdpdGggc2VtaS1yZWxpYWJsZSB0cmFuc3BvcnQgZHJpdmVyIGNvcmUgdG8gdGhlCisgKiBjb25zb2xlIGFuZCB0dHkgc3Vic3lzdGVtcy4KKyAqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFudG9uIEJsYW5jaGFyZCA8YW50b25AYXUuaWJtLmNvbT4sIElCTQorICogQ29weXJpZ2h0IChDKSAyMDAxIFBhdWwgTWFja2VycmFzIDxwYXVsdXNAYXUuaWJtLmNvbT4sIElCTQorICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4sIElCTSBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDA0IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEFkZGl0aW9uYWwgQXV0aG9yKHMpOgorICogIFJ5YW4gUy4gQXJub2xkIDxyc2FAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2h2Y29uc29sZS5oPgorI2luY2x1ZGUgPGFzbS92aW8uaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCitjaGFyIGh2Y19kcml2ZXJfbmFtZVtdID0gImh2Y19jb25zb2xlIjsKKworc3RhdGljIHN0cnVjdCB2aW9fZGV2aWNlX2lkIGh2Y19kcml2ZXJfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXsic2VyaWFsIiwgImh2dGVybTEifSwKKwl7IE5VTEwsIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHZpbywgaHZjX2RyaXZlcl90YWJsZSk7CisKK3N0YXRpYyBpbnQgZmlsdGVyZWRfZ2V0X2NoYXJzKHVpbnQzMl90IHZ0ZXJtbm8sIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgZ290OworCWludCBpOworCisJZ290ID0gaHZjX2dldF9jaGFycyh2dGVybW5vLCBidWYsIGNvdW50KTsKKworCS8qCisJICogV29yayBhcm91bmQgYSBIViBidWcgd2hlcmUgaXQgZ2l2ZXMgdXMgYSBudWxsCisJICogYWZ0ZXIgZXZlcnkgXHIuICAtLSBwYXVsdXMKKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgZ290OyArK2kpIHsKKwkJaWYgKGJ1ZltpXSA9PSAwICYmIGJ1ZltpLTFdID09ICdccicpIHsKKwkJCS0tZ290OworCQkJaWYgKGkgPCBnb3QpCisJCQkJbWVtbW92ZSgmYnVmW2ldLCAmYnVmW2krMV0sCisJCQkJCWdvdCAtIGkpOworCQl9CisJfQorCXJldHVybiBnb3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19nZXRfcHV0X29wcyA9IHsKKwkuZ2V0X2NoYXJzID0gZmlsdGVyZWRfZ2V0X2NoYXJzLAorCS5wdXRfY2hhcnMgPSBodmNfcHV0X2NoYXJzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgaHZjX3Zpb19wcm9iZShzdHJ1Y3QgdmlvX2RldiAqdmRldiwKKwkJCQljb25zdCBzdHJ1Y3QgdmlvX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGh2Y19zdHJ1Y3QgKmhwOworCisJLyogcHJvYmVkIHdpdGggaW52YWxpZCBwYXJhbWV0ZXJzLiAqLworCWlmICghdmRldiB8fCAhaWQpCisJCXJldHVybiAtRVBFUk07CisKKwlocCA9IGh2Y19hbGxvYyh2ZGV2LT51bml0X2FkZHJlc3MsIHZkZXYtPmlycSwgJmh2Y19nZXRfcHV0X29wcyk7CisJaWYgKElTX0VSUihocCkpCisJCXJldHVybiBQVFJfRVJSKGhwKTsKKwlkZXZfc2V0X2RydmRhdGEoJnZkZXYtPmRldiwgaHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGh2Y192aW9fcmVtb3ZlKHN0cnVjdCB2aW9fZGV2ICp2ZGV2KQoreworCXN0cnVjdCBodmNfc3RydWN0ICpocCA9IGRldl9nZXRfZHJ2ZGF0YSgmdmRldi0+ZGV2KTsKKworCXJldHVybiBodmNfcmVtb3ZlKGhwKTsKK30KKworc3RhdGljIHN0cnVjdCB2aW9fZHJpdmVyIGh2Y192aW9fZHJpdmVyID0geworCS5uYW1lCQk9IGh2Y19kcml2ZXJfbmFtZSwKKwkuaWRfdGFibGUJPSBodmNfZHJpdmVyX3RhYmxlLAorCS5wcm9iZQkJPSBodmNfdmlvX3Byb2JlLAorCS5yZW1vdmUJCT0gaHZjX3Zpb19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0KK307CisKK3N0YXRpYyBpbnQgaHZjX3Zpb19pbml0KHZvaWQpCit7CisJaW50IHJjOworCisJLyogUmVnaXN0ZXIgYXMgYSB2aW8gZGV2aWNlIHRvIHJlY2VpdmUgY2FsbGJhY2tzICovCisJcmMgPSB2aW9fcmVnaXN0ZXJfZHJpdmVyKCZodmNfdmlvX2RyaXZlcik7CisKKwlyZXR1cm4gcmM7Cit9Cittb2R1bGVfaW5pdChodmNfdmlvX2luaXQpOyAvKiBhZnRlciBkcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyAqLworCitzdGF0aWMgdm9pZCBodmNfdmlvX2V4aXQodm9pZCkKK3sKKwl2aW9fdW5yZWdpc3Rlcl9kcml2ZXIoJmh2Y192aW9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGh2Y192aW9fZXhpdCk7CisKKy8qIHRoZSBkZXZpY2UgdHJlZSBvcmRlciBkZWZpbmVzIG91ciBudW1iZXJpbmcgKi8KK3N0YXRpYyBpbnQgaHZjX2ZpbmRfdnR5cyh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdnR5OworCWludCBudW1fZm91bmQgPSAwOworCisJZm9yICh2dHkgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAidnR5Iik7IHZ0eSAhPSBOVUxMOworCQkJdnR5ID0gb2ZfZmluZF9ub2RlX2J5X25hbWUodnR5LCAidnR5IikpIHsKKwkJdWludDMyX3QgKnZ0ZXJtbm87CisKKwkJLyogV2UgaGF2ZSBzdGF0aWNhbGx5IGRlZmluZWQgc3BhY2UgZm9yIG9ubHkgYSBjZXJ0YWluIG51bWJlcgorCQkgKiBvZiBjb25zb2xlIGFkYXB0ZXJzLgorCQkgKi8KKwkJaWYgKG51bV9mb3VuZCA+PSBNQVhfTlJfSFZDX0NPTlNPTEVTKQorCQkJYnJlYWs7CisKKwkJdnRlcm1ubyA9ICh1aW50MzJfdCAqKWdldF9wcm9wZXJ0eSh2dHksICJyZWciLCBOVUxMKTsKKwkJaWYgKCF2dGVybW5vKQorCQkJY29udGludWU7CisKKwkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKHZ0eSwgImh2dGVybTEiKSkgeworCQkJaHZjX2luc3RhbnRpYXRlKCp2dGVybW5vLCBudW1fZm91bmQsICZodmNfZ2V0X3B1dF9vcHMpOworCQkJKytudW1fZm91bmQ7CisJCX0KKwl9CisKKwlyZXR1cm4gbnVtX2ZvdW5kOworfQorY29uc29sZV9pbml0Y2FsbChodmNfZmluZF92dHlzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odnNpLmMgYi9kcml2ZXJzL2NoYXIvaHZzaS5jCmluZGV4IGYxZjExOTIuLmEyMmFhOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odnNpLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2c2kuYwpAQCAtMjkxLDE1ICsyOTEsMTMgQEAKIAlkdW1wX2hleChwYWNrZXQsIGhlYWRlci0+bGVuKTsKIH0KIAotLyogY2FuJ3QgdXNlIGh2Y19nZXRfY2hhcnMgYmVjYXVzZSB0aGF0IHN0cmlwcyBDUnMgKi8KIHN0YXRpYyBpbnQgaHZzaV9yZWFkKHN0cnVjdCBodnNpX3N0cnVjdCAqaHAsIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgZ290OwogCi0JaWYgKHBscGFyX2hjYWxsKEhfR0VUX1RFUk1fQ0hBUiwgaHAtPnZ0ZXJtbm8sIDAsIDAsIDAsICZnb3QsCi0JCQkodW5zaWduZWQgbG9uZyAqKWJ1ZiwgKHVuc2lnbmVkIGxvbmcgKilidWYrMSkgPT0gSF9TdWNjZXNzKQotCQlyZXR1cm4gZ290OwotCXJldHVybiAwOworCWdvdCA9IGh2Y19nZXRfY2hhcnMoaHAtPnZ0ZXJtbm8sIGJ1ZiwgY291bnQpOworCisJcmV0dXJuIGdvdDsKIH0KIAogc3RhdGljIHZvaWQgaHZzaV9yZWN2X2NvbnRyb2woc3RydWN0IGh2c2lfc3RydWN0ICpocCwgdWludDhfdCAqcGFja2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fdHR5LmMgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwppbmRleCBlZGJhNWEzLi4wOTEwM2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbl90dHkuYworKysgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwpAQCAtNzcwLDEwICs3NzAsOCBAQAogCQl9CiAJCWlmIChjID09ICdcbicpIHsKIAkJCWlmIChMX0VDSE8odHR5KSB8fCBMX0VDSE9OTCh0dHkpKSB7Ci0JCQkJaWYgKHR0eS0+cmVhZF9jbnQgPj0gTl9UVFlfQlVGX1NJWkUtMSkgeworCQkJCWlmICh0dHktPnJlYWRfY250ID49IE5fVFRZX0JVRl9TSVpFLTEpCiAJCQkJCXB1dF9jaGFyKCdcYScsIHR0eSk7Ci0JCQkJCXJldHVybjsKLQkJCQl9CiAJCQkJb3Bvc3QoJ1xuJywgdHR5KTsKIAkJCX0KIAkJCWdvdG8gaGFuZGxlX25ld2xpbmU7CkBAIC03OTAsMTAgKzc4OCw4IEBACiAJCQkgKiBYWFggYXJlIEVPTF9DSEFSIGFuZCBFT0wyX0NIQVIgZWNob2VkPyE/CiAJCQkgKi8KIAkJCWlmIChMX0VDSE8odHR5KSkgewotCQkJCWlmICh0dHktPnJlYWRfY250ID49IE5fVFRZX0JVRl9TSVpFLTEpIHsKKwkJCQlpZiAodHR5LT5yZWFkX2NudCA+PSBOX1RUWV9CVUZfU0laRS0xKQogCQkJCQlwdXRfY2hhcignXGEnLCB0dHkpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQogCQkJCS8qIFJlY29yZCB0aGUgY29sdW1uIG9mIGZpcnN0IGNhbm9uIGNoYXIuICovCiAJCQkJaWYgKHR0eS0+Y2Fub25faGVhZCA9PSB0dHktPnJlYWRfaGVhZCkKIAkJCQkJdHR5LT5jYW5vbl9jb2x1bW4gPSB0dHktPmNvbHVtbjsKQEAgLTg2MiwxMiArODU4LDkgQEAKIAkgKiB0aGF0IGVyYXNlIGNoYXJhY3RlcnMgd2lsbCBiZSBoYW5kbGVkLiAgT3RoZXIgZXhjZXNzCiAJICogY2hhcmFjdGVycyB3aWxsIGJlIGJlZXBlZC4KIAkgKi8KLQlpZiAodHR5LT5pY2Fub24gJiYgIXR0eS0+Y2Fub25fZGF0YSkKLQkJcmV0dXJuIE5fVFRZX0JVRl9TSVpFOwotCi0JaWYgKGxlZnQgPiAwKQotCQlyZXR1cm4gbGVmdDsKLQlyZXR1cm4gMDsKKwlpZiAobGVmdCA8PSAwKQorCQlsZWZ0ID0gdHR5LT5pY2Fub24gJiYgIXR0eS0+Y2Fub25fZGF0YTsKKwlyZXR1cm4gbGVmdDsKIH0KIAogLyoqCkBAIC0xNDczLDEzICsxNDY2LDE3IEBACiAJCQlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2NoYXJzKQogCQkJCXR0eS0+ZHJpdmVyLT5mbHVzaF9jaGFycyh0dHkpOwogCQl9IGVsc2UgewotCQkJYyA9IHR0eS0+ZHJpdmVyLT53cml0ZSh0dHksIGIsIG5yKTsKLQkJCWlmIChjIDwgMCkgewotCQkJCXJldHZhbCA9IGM7Ci0JCQkJZ290byBicmVha19vdXQ7CisJCQl3aGlsZSAobnIgPiAwKSB7CisJCQkJYyA9IHR0eS0+ZHJpdmVyLT53cml0ZSh0dHksIGIsIG5yKTsKKwkJCQlpZiAoYyA8IDApIHsKKwkJCQkJcmV0dmFsID0gYzsKKwkJCQkJZ290byBicmVha19vdXQ7CisJCQkJfQorCQkJCWlmICghYykKKwkJCQkJYnJlYWs7CisJCQkJYiArPSBjOworCQkJCW5yIC09IGM7CiAJCQl9Ci0JCQliICs9IGM7Ci0JCQluciAtPSBjOwogCQl9CiAJCWlmICghbnIpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwppbmRleCA4ZjM2YjE3Li43YTBjNzQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwpAQCAtNzEsNyArNzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkbGMuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtNTkzLDExICs1OTIsNiBAQAogICAgIGRldl9saXN0ID0gbGluazsKIAogICAgIGNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0gICAgY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCSAgICBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0JICAgIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JICAgIENTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0gICAgY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJm1nc2xwY19ldmVudDsKICAgICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgICAgY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKIApAQCAtMzA5Myw2ICszMDg3LDcgQEAKIAkJLm5hbWUJPSAic3luY2xpbmtfY3MiLAogCX0sCiAJLmF0dGFjaAkJPSBtZ3NscGNfYXR0YWNoLAorCS5ldmVudAkJPSBtZ3NscGNfZXZlbnQsCiAJLmRldGFjaAkJPSBtZ3NscGNfZGV0YWNoLAogCS5pZF90YWJsZQk9IG1nc2xwY19pZHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDQ2MGI1ZDQuLjZiMTFkNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogICogc2FtcGxlcyB0byBhdm9pZCB3YXN0aW5nIENQVSB0aW1lIGFuZCByZWR1Y2UgbG9jayBjb250ZW50aW9uLgogICovCiAKLXN0YXRpYyBpbnQgdHJpY2tsZV90aHJlc2ggPSBJTlBVVF9QT09MX1dPUkRTICogMjg7CitzdGF0aWMgaW50IHRyaWNrbGVfdGhyZXNoIF9fcmVhZF9tb3N0bHkgPSBJTlBVVF9QT09MX1dPUkRTICogMjg7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHRyaWNrbGVfY291bnQpID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5c3JxLmMgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwppbmRleCBhZjc5ODA1Li4xMmQ1NjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3lzcnEuYworKysgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAKIHN0YXRpYyB2b2lkIG1vb21fY2FsbGJhY2sodm9pZCAqaWdub3JlZCkKIHsKLQlvdXRfb2ZfbWVtb3J5KEdGUF9LRVJORUwpOworCW91dF9vZl9tZW1vcnkoR0ZQX0tFUk5FTCwgMCk7CiB9CiAKIHN0YXRpYyBERUNMQVJFX1dPUksobW9vbV93b3JrLCBtb29tX2NhbGxiYWNrLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IGJmNjJkZmUuLjdhNzg1OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtODY5LDcgKzg2OSw3IEBACiAgKgljcHVmcmVxX3N1c3BlbmQgLSBsZXQgdGhlIGxvdyBsZXZlbCBkcml2ZXIgcHJlcGFyZSBmb3Igc3VzcGVuZAogICovCiAKLXN0YXRpYyBpbnQgY3B1ZnJlcV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2LCB1MzIgc3RhdGUpCitzdGF0aWMgaW50IGNwdWZyZXFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldiwgcG1fbWVzc2FnZV90IHBtc2cpCiB7CiAJaW50IGNwdSA9IHN5c2Rldi0+aWQ7CiAJdW5zaWduZWQgaW50IHJldCA9IDA7CkBAIC04OTcsNyArODk3LDcgQEAKIAl9CiAKIAlpZiAoY3B1ZnJlcV9kcml2ZXItPnN1c3BlbmQpIHsKLQkJcmV0ID0gY3B1ZnJlcV9kcml2ZXItPnN1c3BlbmQoY3B1X3BvbGljeSwgc3RhdGUpOworCQlyZXQgPSBjcHVmcmVxX2RyaXZlci0+c3VzcGVuZChjcHVfcG9saWN5LCBwbXNnKTsKIAkJaWYgKHJldCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBzdXNwZW5kIGZhaWxlZCBpbiAtPnN1c3BlbmQgIgogCQkJCQkic3RlcCBvbiBDUFUgJXVcbiIsIGNwdV9wb2xpY3ktPmNwdSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYwppbmRleCBlZDcwOGI0Li43MTQwN2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlICJwYWRsb2NrLmgiCiAKQEAgLTU5LDggKzYwLDEyIEBACiAjZGVmaW5lIEFFU19FWFRFTkRFRF9LRVlfU0laRV9CCShBRVNfRVhURU5ERURfS0VZX1NJWkUgKiBzaXplb2YodWludDMyX3QpKQogCiBzdHJ1Y3QgYWVzX2N0eCB7Ci0JdWludDMyX3QgZV9kYXRhW0FFU19FWFRFTkRFRF9LRVlfU0laRSs0XTsKLQl1aW50MzJfdCBkX2RhdGFbQUVTX0VYVEVOREVEX0tFWV9TSVpFKzRdOworCXVpbnQzMl90IGVfZGF0YVtBRVNfRVhURU5ERURfS0VZX1NJWkVdOworCXVpbnQzMl90IGRfZGF0YVtBRVNfRVhURU5ERURfS0VZX1NJWkVdOworCXN0cnVjdCB7CisJCXN0cnVjdCBjd29yZCBlbmNyeXB0OworCQlzdHJ1Y3QgY3dvcmQgZGVjcnlwdDsKKwl9IGN3b3JkOwogCXVpbnQzMl90ICpFOwogCXVpbnQzMl90ICpEOwogCWludCBrZXlfbGVuZ3RoOwpAQCAtMjgwLDEwICsyODUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYWVzX2N0eCAqYWVzX2N0eCh2b2lkICpjdHgpCit7CisJcmV0dXJuIChzdHJ1Y3QgYWVzX2N0eCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKWN0eCwgUEFETE9DS19BTElHTk1FTlQpOworfQorCiBzdGF0aWMgaW50CiBhZXNfc2V0X2tleSh2b2lkICpjdHhfYXJnLCBjb25zdCB1aW50OF90ICppbl9rZXksIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1aW50MzJfdCAqZmxhZ3MpCiB7Ci0Jc3RydWN0IGFlc19jdHggKmN0eCA9IGN0eF9hcmc7CisJc3RydWN0IGFlc19jdHggKmN0eCA9IGFlc19jdHgoY3R4X2FyZyk7CiAJdWludDMyX3QgaSwgdCwgdSwgdiwgdzsKIAl1aW50MzJfdCBQW0FFU19FWFRFTkRFRF9LRVlfU0laRV07CiAJdWludDMyX3Qgcm91bmRzOwpAQCAtMjk1LDI1ICszMDUsMzYgQEAKIAogCWN0eC0+a2V5X2xlbmd0aCA9IGtleV9sZW47CiAKKwkvKgorCSAqIElmIHRoZSBoYXJkd2FyZSBpcyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGhlIGV4dGVuZGVkIGtleQorCSAqIGl0c2VsZiB3ZSBtdXN0IHN1cHBseSB0aGUgcGxhaW4ga2V5IGZvciBib3RoIGVuY3J5cHRpb24KKwkgKiBhbmQgZGVjcnlwdGlvbi4KKwkgKi8KIAljdHgtPkUgPSBjdHgtPmVfZGF0YTsKLQljdHgtPkQgPSBjdHgtPmRfZGF0YTsKLQotCS8qIEVuc3VyZSAxNi1CeXRlcyBhbGlnbm1lbnRhdGlvbiBvZiBrZXlzIGZvciBWSUEgUGFkTG9jay4gKi8KLQlpZiAoKGludCkoY3R4LT5lX2RhdGEpICYgMHgwRikKLQkJY3R4LT5FICs9IDQgLSAoKChpbnQpKGN0eC0+ZV9kYXRhKSAmIDB4MEYpIC8gc2l6ZW9mIChjdHgtPmVfZGF0YVswXSkpOwotCi0JaWYgKChpbnQpKGN0eC0+ZF9kYXRhKSAmIDB4MEYpCi0JCWN0eC0+RCArPSA0IC0gKCgoaW50KShjdHgtPmRfZGF0YSkgJiAweDBGKSAvIHNpemVvZiAoY3R4LT5kX2RhdGFbMF0pKTsKKwljdHgtPkQgPSBjdHgtPmVfZGF0YTsKIAogCUVfS0VZWzBdID0gdWludDMyX3RfaW4gKGluX2tleSk7CiAJRV9LRVlbMV0gPSB1aW50MzJfdF9pbiAoaW5fa2V5ICsgNCk7CiAJRV9LRVlbMl0gPSB1aW50MzJfdF9pbiAoaW5fa2V5ICsgOCk7CiAJRV9LRVlbM10gPSB1aW50MzJfdF9pbiAoaW5fa2V5ICsgMTIpOwogCisJLyogUHJlcGFyZSBjb250cm9sIHdvcmRzLiAqLworCW1lbXNldCgmY3R4LT5jd29yZCwgMCwgc2l6ZW9mKGN0eC0+Y3dvcmQpKTsKKworCWN0eC0+Y3dvcmQuZGVjcnlwdC5lbmNkZWMgPSAxOworCWN0eC0+Y3dvcmQuZW5jcnlwdC5yb3VuZHMgPSAxMCArIChrZXlfbGVuIC0gMTYpIC8gNDsKKwljdHgtPmN3b3JkLmRlY3J5cHQucm91bmRzID0gY3R4LT5jd29yZC5lbmNyeXB0LnJvdW5kczsKKwljdHgtPmN3b3JkLmVuY3J5cHQua3NpemUgPSAoa2V5X2xlbiAtIDE2KSAvIDg7CisJY3R4LT5jd29yZC5kZWNyeXB0LmtzaXplID0gY3R4LT5jd29yZC5lbmNyeXB0LmtzaXplOworCiAJLyogRG9uJ3QgZ2VuZXJhdGUgZXh0ZW5kZWQga2V5cyBpZiB0aGUgaGFyZHdhcmUgY2FuIGRvIGl0LiAqLwogCWlmIChhZXNfaHdfZXh0a2V5X2F2YWlsYWJsZShrZXlfbGVuKSkKIAkJcmV0dXJuIDA7CiAKKwljdHgtPkQgPSBjdHgtPmRfZGF0YTsKKwljdHgtPmN3b3JkLmVuY3J5cHQua2V5Z2VuID0gMTsKKwljdHgtPmN3b3JkLmRlY3J5cHQua2V5Z2VuID0gMTsKKwogCXN3aXRjaCAoa2V5X2xlbikgewogCWNhc2UgMTY6CiAJCXQgPSBFX0tFWVszXTsKQEAgLTM2OSwxMCArMzkwLDkgQEAKIAogLyogPT09PT09IEVuY3J5cHRpb24vZGVjcnlwdGlvbiByb3V0aW5lcyA9PT09PT0gKi8KIAotLyogVGhpcyBpcyB0aGUgcmVhbCBjYWxsIHRvIFBhZExvY2suICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBhZGxvY2tfeGNyeXB0X2VjYih1aW50OF90ICppbnB1dCwgdWludDhfdCAqb3V0cHV0LCB1aW50OF90ICprZXksCi0JCSAgIHZvaWQgKmNvbnRyb2xfd29yZCwgdWludDMyX3QgY291bnQpCisvKiBUaGVzZSBhcmUgdGhlIHJlYWwgY2FsbCB0byBQYWRMb2NrLiAqLworc3RhdGljIGlubGluZSB2b2lkIHBhZGxvY2tfeGNyeXB0X2VjYihjb25zdCB1OCAqaW5wdXQsIHU4ICpvdXRwdXQsIHZvaWQgKmtleSwKKwkJCQkgICAgICB2b2lkICpjb250cm9sX3dvcmQsIHUzMiBjb3VudCkKIHsKIAlhc20gdm9sYXRpbGUgKCJwdXNoZmw7IHBvcGZsIik7CQkvKiBlbmZvcmNlIGtleSByZWxvYWQuICovCiAJYXNtIHZvbGF0aWxlICgiLmJ5dGUgMHhmMywweDBmLDB4YTcsMHhjOCIJLyogcmVwIHhjcnlwdGVjYiAqLwpAQCAtMzgwLDYwICs0MDAsNzAgQEAKIAkJICAgICAgOiAiZCIoY29udHJvbF93b3JkKSwgImIiKGtleSksICJjIihjb3VudCkpOwogfQogCi1zdGF0aWMgdm9pZAotYWVzX3BhZGxvY2sodm9pZCAqY3R4X2FyZywgdWludDhfdCAqb3V0X2FyZywgY29uc3QgdWludDhfdCAqaW5fYXJnLCBpbnQgZW5jZGVjKQorc3RhdGljIGlubGluZSB1OCAqcGFkbG9ja194Y3J5cHRfY2JjKGNvbnN0IHU4ICppbnB1dCwgdTggKm91dHB1dCwgdm9pZCAqa2V5LAorCQkJCSAgICAgdTggKml2LCB2b2lkICpjb250cm9sX3dvcmQsIHUzMiBjb3VudCkKIHsKLQkvKiBEb24ndCBibGluZGx5IG1vZGlmeSB0aGlzIHN0cnVjdHVyZSAtIHRoZSBpdGVtcyBtdXN0IAotCSAgIGZpdCBvbiAxNi1CeXRlcyBib3VuZGFyaWVzISAqLwotCXN0cnVjdCBwYWRsb2NrX3hjcnlwdF9kYXRhIHsKLQkJdWludDhfdCBidWZbQUVTX0JMT0NLX1NJWkVdOwotCQl1bmlvbiBjd29yZCBjd29yZDsKLQl9OwotCi0Jc3RydWN0IGFlc19jdHggKmN0eCA9IGN0eF9hcmc7Ci0JY2hhciBiaWdidWZbc2l6ZW9mKHN0cnVjdCBwYWRsb2NrX3hjcnlwdF9kYXRhKSArIDE2XTsKLQlzdHJ1Y3QgcGFkbG9ja194Y3J5cHRfZGF0YSAqZGF0YTsKLQl2b2lkICprZXk7Ci0KLQkvKiBQbGFjZSAnZGF0YScgYXQgdGhlIGZpcnN0IDE2LUJ5dGVzIGFsaWduZWQgYWRkcmVzcyBpbiAnYmlnYnVmJy4gKi8KLQlpZiAoKChsb25nKWJpZ2J1ZikgJiAweDBGKQotCQlkYXRhID0gKHZvaWQqKShiaWdidWYgKyAxNiAtICgobG9uZyliaWdidWYgJiAweDBGKSk7Ci0JZWxzZQotCQlkYXRhID0gKHZvaWQqKWJpZ2J1ZjsKLQotCS8qIFByZXBhcmUgQ29udHJvbCB3b3JkLiAqLwotCW1lbXNldCAoZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRsb2NrX3hjcnlwdF9kYXRhKSk7Ci0JZGF0YS0+Y3dvcmQuYi5lbmNkZWMgPSAhZW5jZGVjOwkvKiBpbiB0aGUgcmVzdCBvZiBjcnlwdG9hcGkgRU5DPTEvREVDPTAgKi8KLQlkYXRhLT5jd29yZC5iLnJvdW5kcyA9IDEwICsgKGN0eC0+a2V5X2xlbmd0aCAtIDE2KSAvIDQ7Ci0JZGF0YS0+Y3dvcmQuYi5rc2l6ZSA9IChjdHgtPmtleV9sZW5ndGggLSAxNikgLyA4OwotCi0JLyogSXMgdGhlIGhhcmR3YXJlIGNhcGFibGUgdG8gZ2VuZXJhdGUgdGhlIGV4dGVuZGVkIGtleT8gKi8KLQlpZiAoIWFlc19od19leHRrZXlfYXZhaWxhYmxlKGN0eC0+a2V5X2xlbmd0aCkpCi0JCWRhdGEtPmN3b3JkLmIua2V5Z2VuID0gMTsKLQotCS8qIGN0eC0+RSBzdGFydHMgd2l0aCBhIHBsYWluIGtleSAtIGlmIHRoZSBoYXJkd2FyZSBpcyBjYXBhYmxlCi0JICAgdG8gZ2VuZXJhdGUgdGhlIGV4dGVuZGVkIGtleSBpdHNlbGYgd2UgbXVzdCBzdXBwbHkKLQkgICB0aGUgcGxhaW4ga2V5IGZvciBib3RoIEVuY3J5cHRpb24gYW5kIERlY3J5cHRpb24uICovCi0JaWYgKGVuY2RlYyA9PSBDUllQVE9fRElSX0VOQ1JZUFQgfHwgZGF0YS0+Y3dvcmQuYi5rZXlnZW4gPT0gMCkKLQkJa2V5ID0gY3R4LT5FOwotCWVsc2UKLQkJa2V5ID0gY3R4LT5EOwotCQotCW1lbWNweShkYXRhLT5idWYsIGluX2FyZywgQUVTX0JMT0NLX1NJWkUpOwotCXBhZGxvY2tfeGNyeXB0X2VjYihkYXRhLT5idWYsIGRhdGEtPmJ1Ziwga2V5LCAmZGF0YS0+Y3dvcmQsIDEpOwotCW1lbWNweShvdXRfYXJnLCBkYXRhLT5idWYsIEFFU19CTE9DS19TSVpFKTsKKwkvKiBFbmZvcmNlIGtleSByZWxvYWQuICovCisJYXNtIHZvbGF0aWxlICgicHVzaGZsOyBwb3BmbCIpOworCS8qIHJlcCB4Y3J5cHRjYmMgKi8KKwlhc20gdm9sYXRpbGUgKCIuYnl0ZSAweGYzLDB4MGYsMHhhNywweGQwIgorCQkgICAgICA6ICIrUyIgKGlucHV0KSwgIitEIiAob3V0cHV0KSwgIithIiAoaXYpCisJCSAgICAgIDogImQiIChjb250cm9sX3dvcmQpLCAiYiIgKGtleSksICJjIiAoY291bnQpKTsKKwlyZXR1cm4gaXY7CiB9CiAKIHN0YXRpYyB2b2lkCiBhZXNfZW5jcnlwdCh2b2lkICpjdHhfYXJnLCB1aW50OF90ICpvdXQsIGNvbnN0IHVpbnQ4X3QgKmluKQogewotCWFlc19wYWRsb2NrKGN0eF9hcmcsIG91dCwgaW4sIENSWVBUT19ESVJfRU5DUllQVCk7CisJc3RydWN0IGFlc19jdHggKmN0eCA9IGFlc19jdHgoY3R4X2FyZyk7CisJcGFkbG9ja194Y3J5cHRfZWNiKGluLCBvdXQsIGN0eC0+RSwgJmN0eC0+Y3dvcmQuZW5jcnlwdCwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBhZXNfZGVjcnlwdCh2b2lkICpjdHhfYXJnLCB1aW50OF90ICpvdXQsIGNvbnN0IHVpbnQ4X3QgKmluKQogewotCWFlc19wYWRsb2NrKGN0eF9hcmcsIG91dCwgaW4sIENSWVBUT19ESVJfREVDUllQVCk7CisJc3RydWN0IGFlc19jdHggKmN0eCA9IGFlc19jdHgoY3R4X2FyZyk7CisJcGFkbG9ja194Y3J5cHRfZWNiKGluLCBvdXQsIGN0eC0+RCwgJmN0eC0+Y3dvcmQuZGVjcnlwdCwgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWVzX2VuY3J5cHRfZWNiKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywgdTggKm91dCwKKwkJCQkgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBhZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KGRlc2MtPnRmbSkpOworCXBhZGxvY2tfeGNyeXB0X2VjYihpbiwgb3V0LCBjdHgtPkUsICZjdHgtPmN3b3JkLmVuY3J5cHQsCisJCQkgICBuYnl0ZXMgLyBBRVNfQkxPQ0tfU0laRSk7CisJcmV0dXJuIG5ieXRlcyAmIH4oQUVTX0JMT0NLX1NJWkUgLSAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhZXNfZGVjcnlwdF9lY2IoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLCB1OCAqb3V0LAorCQkJCSAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGFlc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgoZGVzYy0+dGZtKSk7CisJcGFkbG9ja194Y3J5cHRfZWNiKGluLCBvdXQsIGN0eC0+RCwgJmN0eC0+Y3dvcmQuZGVjcnlwdCwKKwkJCSAgIG5ieXRlcyAvIEFFU19CTE9DS19TSVpFKTsKKwlyZXR1cm4gbmJ5dGVzICYgfihBRVNfQkxPQ0tfU0laRSAtIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFlc19lbmNyeXB0X2NiYyhjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsIHU4ICpvdXQsCisJCQkJICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eChkZXNjLT50Zm0pKTsKKwl1OCAqaXY7CisKKwlpdiA9IHBhZGxvY2tfeGNyeXB0X2NiYyhpbiwgb3V0LCBjdHgtPkUsIGRlc2MtPmluZm8sCisJCQkJJmN0eC0+Y3dvcmQuZW5jcnlwdCwgbmJ5dGVzIC8gQUVTX0JMT0NLX1NJWkUpOworCW1lbWNweShkZXNjLT5pbmZvLCBpdiwgQUVTX0JMT0NLX1NJWkUpOworCisJcmV0dXJuIG5ieXRlcyAmIH4oQUVTX0JMT0NLX1NJWkUgLSAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhZXNfZGVjcnlwdF9jYmMoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLCB1OCAqb3V0LAorCQkJCSAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGFlc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgoZGVzYy0+dGZtKSk7CisJcGFkbG9ja194Y3J5cHRfY2JjKGluLCBvdXQsIGN0eC0+RCwgZGVzYy0+aW5mbywgJmN0eC0+Y3dvcmQuZGVjcnlwdCwKKwkJCSAgIG5ieXRlcyAvIEFFU19CTE9DS19TSVpFKTsKKwlyZXR1cm4gbmJ5dGVzICYgfihBRVNfQkxPQ0tfU0laRSAtIDEpOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzX2FsZyA9IHsKQEAgLTQ0MSw2ICs0NzEsNyBAQAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlBRVNfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBhZXNfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPQlQQURMT0NLX0FMSUdOTUVOVCAtIDEsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGFlc19hbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JewpAQCAtNDQ5LDcgKzQ4MCwxMSBAQAogCQkJLmNpYV9tYXhfa2V5c2l6ZQk9CUFFU19NQVhfS0VZX1NJWkUsCiAJCQkuY2lhX3NldGtleQkgICAJPSAJYWVzX3NldF9rZXksCiAJCQkuY2lhX2VuY3J5cHQJIAk9CWFlc19lbmNyeXB0LAotCQkJLmNpYV9kZWNyeXB0CSAgCT0JYWVzX2RlY3J5cHQKKwkJCS5jaWFfZGVjcnlwdAkgIAk9CWFlc19kZWNyeXB0LAorCQkJLmNpYV9lbmNyeXB0X2VjYiAJPQlhZXNfZW5jcnlwdF9lY2IsCisJCQkuY2lhX2RlY3J5cHRfZWNiICAJPQlhZXNfZGVjcnlwdF9lY2IsCisJCQkuY2lhX2VuY3J5cHRfY2JjIAk9CWFlc19lbmNyeXB0X2NiYywKKwkJCS5jaWFfZGVjcnlwdF9jYmMgIAk9CWFlc19kZWNyeXB0X2NiYywKIAkJfQogCX0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLmggYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLmgKaW5kZXggN2E1MDA2MC4uM2NmMmI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay5oCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2suaApAQCAtMTMsMTggKzEzLDE4IEBACiAjaWZuZGVmIF9DUllQVE9fUEFETE9DS19ICiAjZGVmaW5lIF9DUllQVE9fUEFETE9DS19ICiAKKyNkZWZpbmUgUEFETE9DS19BTElHTk1FTlQgMTYKKwogLyogQ29udHJvbCB3b3JkLiAqLwotdW5pb24gY3dvcmQgewotCXVpbnQzMl90IGN3b3JkWzRdOwotCXN0cnVjdCB7Ci0JCWludCByb3VuZHM6NDsKLQkJaW50IGFsZ286MzsKLQkJaW50IGtleWdlbjoxOwotCQlpbnQgaW50ZXJtOjE7Ci0JCWludCBlbmNkZWM6MTsKLQkJaW50IGtzaXplOjI7Ci0JfSBiOwotfTsKK3N0cnVjdCBjd29yZCB7CisJaW50IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKKwkJcm91bmRzOjQsCisJCWFsZ286MywKKwkJa2V5Z2VuOjEsCisJCWludGVybToxLAorCQllbmNkZWM6MSwKKwkJa3NpemU6MjsKK30gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKFBBRExPQ0tfQUxJR05NRU5UKSkpOwogCiAjZGVmaW5lIFBGWAkicGFkbG9jazogIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWtleXdlc3QuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMta2V5d2VzdC5jCmluZGV4IDM2M2U1NDUuLjk0YWU4MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMta2V5d2VzdC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMta2V5d2VzdC5jCkBAIC02OTgsNyArNjk4LDcgQEAKIH0KIAogc3RhdGljIGludAotY3JlYXRlX2lmYWNlX21hY2lvKHN0cnVjdCBtYWNpb19kZXYqIGRldiwgY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaCkKK2NyZWF0ZV9pZmFjZV9tYWNpbyhzdHJ1Y3QgbWFjaW9fZGV2KiBkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXJldHVybiBjcmVhdGVfaWZhY2UoZGV2LT5vZmRldi5ub2RlLCAmZGV2LT5vZmRldi5kZXYpOwogfQpAQCAtNzEwLDcgKzcxMCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNyZWF0ZV9pZmFjZV9vZl9wbGF0Zm9ybShzdHJ1Y3Qgb2ZfZGV2aWNlKiBkZXYsIGNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqbWF0Y2gpCitjcmVhdGVfaWZhY2Vfb2ZfcGxhdGZvcm0oc3RydWN0IG9mX2RldmljZSogZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlyZXR1cm4gY3JlYXRlX2lmYWNlKGRldi0+bm9kZSwgJmRldi0+ZGV2KTsKIH0KQEAgLTcyMSwxMCArNzIxLDkgQEAKIAlyZXR1cm4gZGlzcG9zZV9pZmFjZSgmZGV2LT5kZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX21hdGNoIGkyY19rZXl3ZXN0X21hdGNoW10gPSAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGkyY19rZXl3ZXN0X21hdGNoW10gPSAKIHsKIAl7Ci0JLm5hbWUgCQk9IE9GX0FOWV9NQVRDSCwKIAkudHlwZQkJPSAiaTJjIiwKIAkuY29tcGF0aWJsZQk9ICJrZXl3ZXN0IgogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKaW5kZXggOTc4ZDI3ZC4uYWFjNTk3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtMTM0LDExICsxMzMsNiBAQAogICAgIGxpbmstPm5leHQgPSBkZXZfbGlzdDsKICAgICBkZXZfbGlzdCA9IGxpbms7CiAgICAgY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLSAgICBjbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLSAgICBjbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmaWRlX2V2ZW50OwogICAgIGNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKICAgICBjbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogICAgIHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtNDk3LDYgKzQ5MSw3IEBACiAJCS5uYW1lCT0gImlkZS1jcyIsCiAJfSwKIAkuYXR0YWNoCQk9IGlkZV9hdHRhY2gsCisJLmV2ZW50CQk9IGlkZV9ldmVudCwKIAkuZGV0YWNoCQk9IGlkZV9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gaWRlX2lkcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jIGIvZHJpdmVycy9pZGUvcHBjL3BtYWMuYwppbmRleCA4MTgzODBiLi5iZTBmY2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKQEAgLTE0MTksNyArMTQxOSw3IEBACiAgKiBBdHRhY2ggdG8gYSBtYWNpbyBwcm9iZWQgaW50ZXJmYWNlCiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0Ci1wbWFjX2lkZV9tYWNpb19hdHRhY2goc3RydWN0IG1hY2lvX2RldiAqbWRldiwgY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaCkKK3BtYWNfaWRlX21hY2lvX2F0dGFjaChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJdW5zaWduZWQgbG9uZyByZWdiYXNlOwpAQCAtMTYzNywyNyArMTYzNywxOSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9tYXRjaCBwbWFjX2lkZV9tYWNpb19tYXRjaFtdID0gCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwbWFjX2lkZV9tYWNpb19tYXRjaFtdID0gCiB7CiAJewogCS5uYW1lIAkJPSAiSURFIiwKLQkudHlwZQkJPSBPRl9BTllfTUFUQ0gsCi0JLmNvbXBhdGlibGUJPSBPRl9BTllfTUFUQ0gKIAl9LAogCXsKIAkubmFtZSAJCT0gIkFUQSIsCi0JLnR5cGUJCT0gT0ZfQU5ZX01BVENILAotCS5jb21wYXRpYmxlCT0gT0ZfQU5ZX01BVENICiAJfSwKIAl7Ci0JLm5hbWUgCQk9IE9GX0FOWV9NQVRDSCwKIAkudHlwZQkJPSAiaWRlIiwKLQkuY29tcGF0aWJsZQk9IE9GX0FOWV9NQVRDSAogCX0sCiAJewotCS5uYW1lIAkJPSBPRl9BTllfTUFUQ0gsCiAJLnR5cGUJCT0gImF0YSIsCi0JLmNvbXBhdGlibGUJPSBPRl9BTllfTUFUQ0gKIAl9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvS2NvbmZpZyBiL2RyaXZlcnMvaWVlZTEzOTQvS2NvbmZpZwppbmRleCA3ZDU4YWYxLi4yNTEwM2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L0tjb25maWcKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnCkBAIC02Niw2ICs2NiwxOCBAQAogCSAgd2l0aCBNYWNPU1ggYW5kIFdpblhQIElQLW92ZXItMTM5NCksIGVuYWJsZSB0aGlzIG9wdGlvbiBhbmQgdGhlCiAJICBldGgxMzk0IG9wdGlvbiBiZWxvdy4KIAorY29uZmlnIElFRUUxMzk0X0VYUE9SVF9GVUxMX0FQSQorCWJvb2wgIkV4cG9ydCBhbGwgc3ltYm9scyBvZiBpZWVlMTM5NCdzIEFQSSIKKwlkZXBlbmRzIG9uIElFRUUxMzk0CisJZGVmYXVsdCBuCisJaGVscAorCSAgRXhwb3J0IGFsbCBzeW1ib2xzIG9mIGllZWUxMzk0J3MgZHJpdmVyIHByb2dyYW1taW5nIGludGVyZmFjZSwgZXZlbgorCSAgdGhvc2UgdGhhdCBhcmUgbm90IGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdGFuZGFyZCBJRUVFIDEzOTQgZHJpdmVycy4KKworCSAgVGhpcyBvcHRpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBpbnRlcmZhY2UgdG8gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucy4KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBleHRlcm5hbGx5IGRldmVsb3BlZCBkcml2ZXJzIHRoYXQKKwkgIG1ha2UgZXh0ZW5kZWQgdXNlIG9mIGllZWUxMzk0J3MgQVBJLiBJdCBpcyBvdGhlcndpc2Ugc2FmZSB0byBzYXkgTi4KKwogY29tbWVudCAiRGV2aWNlIERyaXZlcnMiCiAJZGVwZW5kcyBvbiBJRUVFMTM5NAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2Nzci5jIGIvZHJpdmVycy9pZWVlMTM5NC9jc3IuYwppbmRleCAxYjk4Njg0Li4xNDk1NzNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2Nzci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJob3N0cy5oIgogI2luY2x1ZGUgImllZWUxMzk0LmgiCiAjaW5jbHVkZSAiaGlnaGxldmVsLmgiCisjaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgogCiAvKiBNb2R1bGUgUGFyYW1ldGVycyAqLwogLyogdGhpcyBtb2R1bGUgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgbWFwcGluZyBvZiB0aGUgRkNQIHJlZ2lzdGVycyAqLwpAQCAtMjMyLDcgKzIzMyw3IEBACiAJaG9zdC0+Y3NyLmdlbmVyYXRpb24gPSAyOwogCiAJYnVzX2luZm9bMV0gPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4MzEzMzM5MzQpOwotCWJ1c19pbmZvWzJdID0gY3B1X3RvX2JlMzIoKDEgPDwgQ1NSX0lSTUNfU0hJRlQpIHwKKwlidXNfaW5mb1syXSA9IGNwdV90b19iZTMyKChocHNiX2Rpc2FibGVfaXJtID8gMCA6IDEgPDwgQ1NSX0lSTUNfU0hJRlQpIHwKIAkJCQkgICgxIDw8IENTUl9DTUNfU0hJRlQpIHwKIAkJCQkgICgxIDw8IENTUl9JU0NfU0hJRlQpIHwKIAkJCQkgICgwIDw8IENTUl9CTUNfU0hJRlQpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvY3NyMTIxMi5jIGIvZHJpdmVycy9pZWVlMTM5NC9jc3IxMjEyLmMKaW5kZXggN2M0MzMwZS4uNjFkZGQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9jc3IxMjEyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9jc3IxMjEyLmMKQEAgLTIwOSw3ICsyMDksMTUgQEAKIHsKIAlzdGF0aWMgY29uc3QgaW50IG1yX21hcFtdID0geyA0LCA2NCwgMTAyNCwgMCB9OwogCisjaWZkZWYgX19LRVJORUxfXworCUJVR19PTihtYXhfcm9tICYgfjB4Myk7CiAJY3NyLT5tYXhfcm9tID0gbXJfbWFwW21heF9yb21dOworI2Vsc2UKKwlpZiAobWF4X3JvbSAmIH4weDMpIC8qIGNhbGxlciBzdXBwbGllZCBpbnZhbGlkIGFyZ3VtZW50ICovCisJCWNzci0+bWF4X3JvbSA9IDA7CisJZWxzZQorCQljc3ItPm1heF9yb20gPSBtcl9tYXBbbWF4X3JvbV07CisjZW5kaWYKIAltZW1jcHkoY3NyLT5idXNfaW5mb19kYXRhLCBidXNfaW5mb19kYXRhLCBjc3ItPmJ1c19pbmZvX2xlbik7CiB9CiAKQEAgLTUzMywxMiArNTQxLDE1IEBACiAJc3RhdGljIGNvbnN0IGludCBwZFs0XSA9IHsgMCwgNCwgMTYsIDI1NiB9OwogCXN0YXRpYyBjb25zdCBpbnQgY3NbMTZdID0geyA0LCAyIH07CiAJc3RydWN0IGNzcjEyMTJfa2V5dmFsICprdjsKLQlpbnQgcGFsZXR0ZV9zaXplID0gcGRbcGFsZXR0ZV9kZXB0aF0gKiBjc1tjb2xvcl9zcGFjZV07CisJaW50IHBhbGV0dGVfc2l6ZTsKIAlpbnQgcGl4ZWxfc2l6ZSA9IChoc2NhbiAqIHZzY2FuICsgMykgJiB+MHgzOwogCi0JaWYgKChwYWxldHRlX2RlcHRoICYmICFwYWxldHRlKSB8fCAhcGl4ZWxzKQorCWlmICghcGl4ZWxzIHx8ICghcGFsZXR0ZSAmJiBwYWxldHRlX2RlcHRoKSB8fAorCSAgICAocGFsZXR0ZV9kZXB0aCAmIH4weDMpIHx8IChjb2xvcl9zcGFjZSAmIH4weGYpKQogCQlyZXR1cm4gTlVMTDsKIAorCXBhbGV0dGVfc2l6ZSA9IHBkW3BhbGV0dGVfZGVwdGhdICogY3NbY29sb3Jfc3BhY2VdOworCiAJa3YgPSBjc3IxMjEyX25ld19kZXNjcmlwdG9yX2xlYWYoMSwgMCwgTlVMTCwKIAkJCQkJIHBhbGV0dGVfc2l6ZSArIHBpeGVsX3NpemUgKwogCQkJCQkgQ1NSMTIxMl9JQ09OX0RFU0NSSVBUT1JfTEVBRl9PVkVSSEVBRCk7CkBAIC03NjAsOSArNzcxLDkgQEAKIAlzdHJ1Y3QgY3NyMTIxMl9jc3Jfcm9tX2NhY2hlICpjYWNoZTsKIAl1X2ludDY0X3QgY3NyX2FkZHI7CiAKLQlpZiAoIWNzciB8fCAhY3NyLT5vcHMtPmFsbG9jYXRlX2FkZHJfcmFuZ2UgfHwKLQkgICAgIWNzci0+b3BzLT5yZWxlYXNlX2FkZHIpCi0JCXJldHVybiBDU1IxMjEyX0VOT01FTTsKKwlpZiAoIWNzciB8fCAhY3NyLT5vcHMgfHwgIWNzci0+b3BzLT5hbGxvY2F0ZV9hZGRyX3JhbmdlIHx8CisJICAgICFjc3ItPm9wcy0+cmVsZWFzZV9hZGRyIHx8IGNzci0+bWF4X3JvbSA8IDEpCisJCXJldHVybiBDU1IxMjEyX0VJTlZBTDsKIAogCS8qIFJPTSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBjc3ItPm1heF9yb20gKi8KIAlyb21zaXplID0gKHJvbXNpemUgKyAoY3NyLT5tYXhfcm9tIC0gMSkpICYgfihjc3ItPm1heF9yb20gLSAxKTsKQEAgLTExNDUsNiArMTE1Niw4IEBACiAKIAkJCS8qIE1ha2Ugc3VyZSB0aGUgRXh0ZW5kZWQgUk9NIGxlYWYgaXMgYSBtdWx0aXBsZSBvZgogCQkJICogbWF4X3JvbSBpbiBzaXplLiAqLworCQkJaWYgKGNzci0+bWF4X3JvbSA8IDEpCisJCQkJcmV0dXJuIENTUjEyMTJfRUlOVkFMOwogCQkJbGVhZl9zaXplID0gKGNhY2hlLT5sZW4gKyAoY3NyLT5tYXhfcm9tIC0gMSkpICYKIAkJCQl+KGNzci0+bWF4X3JvbSAtIDEpOwogCkBAIC0xNDA5LDcgKzE0MjIsNyBAQAogCXVfaW50MzJfdCAqY2FjaGVfcHRyOwogCXVfaW50MTZfdCBrdl9sZW4gPSAwOwogCi0JaWYgKCFjc3IgfHwgIWt2KQorCWlmICghY3NyIHx8ICFrdiB8fCBjc3ItPm1heF9yb20gPCAxKQogCQlyZXR1cm4gQ1NSMTIxMl9FSU5WQUw7CiAKIAkvKiBGaXJzdCBmaW5kIHdoaWNoIGNhY2hlIHRoZSBkYXRhIHNob3VsZCBiZSBpbiAob3IgZ28gaW4gaWYgbm90IHJlYWQKQEAgLTE1NzIsNyArMTU4NSw3IEBACiAJc3RydWN0IGNzcjEyMTJfZGVudHJ5ICpkZW50cnk7CiAJaW50IHJldDsKIAotCWlmICghY3NyIHx8ICFjc3ItPm9wcy0+YnVzX3JlYWQpCisJaWYgKCFjc3IgfHwgIWNzci0+b3BzIHx8ICFjc3ItPm9wcy0+YnVzX3JlYWQpCiAJCXJldHVybiBDU1IxMjEyX0VJTlZBTDsKIAogCXJldCA9IGNzcjEyMTJfcGFyc2VfYnVzX2luZm9fYmxvY2soY3NyKTsKQEAgLTE1ODEsOSArMTU5NCwxMyBAQAogCiAJaWYgKCFjc3ItPm9wcy0+Z2V0X21heF9yb20pCiAJCWNzci0+bWF4X3JvbSA9IG1yX21hcFswXTsJLyogZGVmYXVsdCB2YWx1ZSAqLwotCWVsc2UKLQkJY3NyLT5tYXhfcm9tID0gbXJfbWFwW2Nzci0+b3BzLT5nZXRfbWF4X3JvbShjc3ItPmJ1c19pbmZvX2RhdGEsCi0JCQkJCQkJICAgIGNzci0+cHJpdmF0ZSldOworCWVsc2UgeworCQlpbnQgaSA9IGNzci0+b3BzLT5nZXRfbWF4X3JvbShjc3ItPmJ1c19pbmZvX2RhdGEsCisJCQkJCSAgICAgIGNzci0+cHJpdmF0ZSk7CisJCWlmIChpICYgfjB4MykKKwkJCXJldHVybiBDU1IxMjEyX0VJTlZBTDsKKwkJY3NyLT5tYXhfcm9tID0gbXJfbWFwW2ldOworCX0KIAogCWNzci0+Y2FjaGVfaGVhZC0+bGF5b3V0X2hlYWQgPSBjc3ItPnJvb3Rfa3Y7CiAJY3NyLT5jYWNoZV9oZWFkLT5sYXlvdXRfdGFpbCA9IGNzci0+cm9vdF9rdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMgYi9kcml2ZXJzL2llZWUxMzk0L2RtYS5jCmluZGV4IDc1ODgxOWQuLmI3OWRkYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9kbWEuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAKIGRtYV9hZGRyX3QgZG1hX3JlZ2lvbl9vZmZzZXRfdG9fYnVzKHN0cnVjdCBkbWFfcmVnaW9uICpkbWEsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCXVuc2lnbmVkIGxvbmcgcmVtOworCXVuc2lnbmVkIGxvbmcgcmVtID0gMDsKIAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAmZG1hLT5zZ2xpc3RbZG1hX3JlZ2lvbl9maW5kKGRtYSwgb2Zmc2V0LCAmcmVtKV07CiAJcmV0dXJuIHNnX2RtYV9hZGRyZXNzKHNnKSArIHJlbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMKaW5kZXggNjU0ZGE3Ni4uY2Q1M2MxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMKQEAgLTg5LDcgKzg5LDcgQEAKICNkZWZpbmUgVFJBQ0UoKSBwcmludGsoS0VSTl9FUlIgIiVzOiVzWyVkXSAtLS0tIFRSQUNFXG4iLCBkcml2ZXJfbmFtZSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotCSIkUmV2OiAxMjQ3ICQgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGRlYmlhbi5vcmc+IjsKKwkiJFJldjogMTI2NCAkIEJlbiBDb2xsaW5zIDxiY29sbGluc0BkZWJpYW4ub3JnPiI7CiAKIHN0cnVjdCBmcmFnbWVudF9pbmZvIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC03MDYsNyArNzA2LDcgQEAKIAkJcmV0dXJuOwogCiAJZGV2ID0gaGktPmRldjsKLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwcml2ID0gKHN0cnVjdCBldGgxMzk0X3ByaXYgKiluZXRkZXZfcHJpdihkZXYpOwogCiAJLyogUmVzZXQgb3VyIHByaXZhdGUgaG9zdCBkYXRhLCBidXQgbm90IG91ciBtdHUgKi8KIAluZXRpZl9zdG9wX3F1ZXVlIChkZXYpOwpAQCAtMTc3MCw3ICsxNzcwLDcgQEAKIHN0YXRpYyB2b2lkIGV0aGVyMTM5NF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewogCXN0cmNweSAoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSk7Ci0Jc3RyY3B5IChpbmZvLT52ZXJzaW9uLCAiJFJldjogMTI0NyAkIik7CisJc3RyY3B5IChpbmZvLT52ZXJzaW9uLCAiJFJldjogMTI2NCAkIik7CiAJLyogRklYTUUgWFhYIHByb3ZpZGUgc2FuZSBidXNpbmZvICovCiAJc3RyY3B5IChpbmZvLT5idXNfaW5mbywgImllZWUxMzk0Iik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuYyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCmluZGV4IDYyOTA3MGIuLmIyNDhkODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCkBAIC01Miw3ICs1Miw3IEBACiAvKgogICogRGlzYWJsZSB0aGUgbm9kZW1nciBkZXRlY3Rpb24gYW5kIGNvbmZpZyByb20gcmVhZGluZyBmdW5jdGlvbmFsaXR5LgogICovCi1zdGF0aWMgaW50IGRpc2FibGVfbm9kZW1nciA9IDA7CitzdGF0aWMgaW50IGRpc2FibGVfbm9kZW1ncjsKIG1vZHVsZV9wYXJhbShkaXNhYmxlX25vZGVtZ3IsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfbm9kZW1nciwgIkRpc2FibGUgbm9kZW1nciBmdW5jdGlvbmFsaXR5LiIpOwogCkBAIC01MjAsNiArNTIwLDkgQEAKIAogCWlmICghcGFja2V0LT5ub193YWl0ZXIgfHwgcGFja2V0LT5leHBlY3RfcmVzcG9uc2UpIHsKIAkJYXRvbWljX2luYygmcGFja2V0LT5yZWZjbnQpOworCQkvKiBTZXQgdGhlIGluaXRpYWwgInNlbmR0aW1lIiB0byAxMCBzZWNvbmRzIGZyb20gbm93LCB0bworCQkgICBwcmV2ZW50IHByZW1hdHVyZSBleHBpcnkuICBJZiBhIHBhY2tldCB0YWtlcyBtb3JlIHRoYW4KKwkJICAgMTAgc2Vjb25kcyB0byBoaXQgdGhlIHdpcmUsIHdlIGhhdmUgYmlnZ2VyIHByb2JsZW1zIDopICovCiAJCXBhY2tldC0+c2VuZHRpbWUgPSBqaWZmaWVzICsgMTAgKiBIWjsKIAkJc2tiX3F1ZXVlX3RhaWwoJmhvc3QtPnBlbmRpbmdfcGFja2V0X3F1ZXVlLCBwYWNrZXQtPnNrYik7CiAJfQpAQCAtMTIyMyw5ICsxMjI2LDcgQEAKIEVYUE9SVF9TWU1CT0woaHBzYl9zZXRfcGFja2V0X2NvbXBsZXRlX3Rhc2spOwogRVhQT1JUX1NZTUJPTChocHNiX2FsbG9jX3BhY2tldCk7CiBFWFBPUlRfU1lNQk9MKGhwc2JfZnJlZV9wYWNrZXQpOwotRVhQT1JUX1NZTUJPTChocHNiX3NlbmRfcGh5X2NvbmZpZyk7CiBFWFBPUlRfU1lNQk9MKGhwc2Jfc2VuZF9wYWNrZXQpOwotRVhQT1JUX1NZTUJPTChocHNiX3NlbmRfcGFja2V0X2FuZF93YWl0KTsKIEVYUE9SVF9TWU1CT0woaHBzYl9yZXNldF9idXMpOwogRVhQT1JUX1NZTUJPTChocHNiX2J1c19yZXNldCk7CiBFWFBPUlRfU1lNQk9MKGhwc2Jfc2VsZmlkX3JlY2VpdmVkKTsKQEAgLTEyMzMsNiArMTIzNCwxMCBAQAogRVhQT1JUX1NZTUJPTChocHNiX3BhY2tldF9zZW50KTsKIEVYUE9SVF9TWU1CT0woaHBzYl9wYWNrZXRfcmVjZWl2ZWQpOwogRVhQT1JUX1NZTUJPTF9HUEwoaHBzYl9kaXNhYmxlX2lybSk7CisjaWZkZWYgQ09ORklHX0lFRUUxMzk0X0VYUE9SVF9GVUxMX0FQSQorRVhQT1JUX1NZTUJPTChocHNiX3NlbmRfcGh5X2NvbmZpZyk7CitFWFBPUlRfU1lNQk9MKGhwc2Jfc2VuZF9wYWNrZXRfYW5kX3dhaXQpOworI2VuZGlmCiAKIC8qKiBpZWVlMTM5NF90cmFuc2FjdGlvbnMuYyAqKi8KIEVYUE9SVF9TWU1CT0woaHBzYl9nZXRfdGxhYmVsKTsKQEAgLTEyNjIsOSArMTI2NywxMSBAQAogRVhQT1JUX1NZTUJPTChocHNiX3NldF9ob3N0aW5mb19rZXkpOwogRVhQT1JUX1NZTUJPTChocHNiX2dldF9ob3N0aW5mb19ieWtleSk7CiBFWFBPUlRfU1lNQk9MKGhwc2Jfc2V0X2hvc3RpbmZvKTsKK0VYUE9SVF9TWU1CT0woaGlnaGxldmVsX2hvc3RfcmVzZXQpOworI2lmZGVmIENPTkZJR19JRUVFMTM5NF9FWFBPUlRfRlVMTF9BUEkKIEVYUE9SVF9TWU1CT0woaGlnaGxldmVsX2FkZF9ob3N0KTsKIEVYUE9SVF9TWU1CT0woaGlnaGxldmVsX3JlbW92ZV9ob3N0KTsKLUVYUE9SVF9TWU1CT0woaGlnaGxldmVsX2hvc3RfcmVzZXQpOworI2VuZGlmCiAKIC8qKiBub2RlbWdyLmMgKiovCiBFWFBPUlRfU1lNQk9MKGhwc2Jfbm9kZV9maWxsX3BhY2tldCk7CkBAIC0xMjcyLDcgKzEyNzksOSBAQAogRVhQT1JUX1NZTUJPTChocHNiX3JlZ2lzdGVyX3Byb3RvY29sKTsKIEVYUE9SVF9TWU1CT0woaHBzYl91bnJlZ2lzdGVyX3Byb3RvY29sKTsKIEVYUE9SVF9TWU1CT0woaWVlZTEzOTRfYnVzX3R5cGUpOworI2lmZGVmIENPTkZJR19JRUVFMTM5NF9FWFBPUlRfRlVMTF9BUEkKIEVYUE9SVF9TWU1CT0wobm9kZW1ncl9mb3JfZWFjaF9ob3N0KTsKKyNlbmRpZgogCiAvKiogY3NyLmMgKiovCiBFWFBPUlRfU1lNQk9MKGhwc2JfdXBkYXRlX2NvbmZpZ19yb20pOwpAQCAtMTMwOSwxOSArMTMxOCwyMSBAQAogRVhQT1JUX1NZTUJPTChocHNiX2lzb19yZWN2X2ZsdXNoKTsKIAogLyoqIGNzcjEyMTIuYyAqKi8KK0VYUE9SVF9TWU1CT0woY3NyMTIxMl9uZXdfZGlyZWN0b3J5KTsKK0VYUE9SVF9TWU1CT0woY3NyMTIxMl9hdHRhY2hfa2V5dmFsX3RvX2RpcmVjdG9yeSk7CitFWFBPUlRfU1lNQk9MKGNzcjEyMTJfZGV0YWNoX2tleXZhbF9mcm9tX2RpcmVjdG9yeSk7CitFWFBPUlRfU1lNQk9MKGNzcjEyMTJfcmVsZWFzZV9rZXl2YWwpOworRVhQT1JUX1NZTUJPTChjc3IxMjEyX3JlYWQpOworRVhQT1JUX1NZTUJPTChjc3IxMjEyX3BhcnNlX2tleXZhbCk7CitFWFBPUlRfU1lNQk9MKF9jc3IxMjEyX3JlYWRfa2V5dmFsKTsKK0VYUE9SVF9TWU1CT0woX2NzcjEyMTJfZGVzdHJveV9rZXl2YWwpOworI2lmZGVmIENPTkZJR19JRUVFMTM5NF9FWFBPUlRfRlVMTF9BUEkKIEVYUE9SVF9TWU1CT0woY3NyMTIxMl9jcmVhdGVfY3NyKTsKIEVYUE9SVF9TWU1CT0woY3NyMTIxMl9pbml0X2xvY2FsX2Nzcik7CiBFWFBPUlRfU1lNQk9MKGNzcjEyMTJfbmV3X2ltbWVkaWF0ZSk7Ci1FWFBPUlRfU1lNQk9MKGNzcjEyMTJfbmV3X2RpcmVjdG9yeSk7CiBFWFBPUlRfU1lNQk9MKGNzcjEyMTJfYXNzb2NpYXRlX2tleXZhbCk7Ci1FWFBPUlRfU1lNQk9MKGNzcjEyMTJfYXR0YWNoX2tleXZhbF90b19kaXJlY3RvcnkpOwogRVhQT1JUX1NZTUJPTChjc3IxMjEyX25ld19zdHJpbmdfZGVzY3JpcHRvcl9sZWFmKTsKLUVYUE9SVF9TWU1CT0woY3NyMTIxMl9kZXRhY2hfa2V5dmFsX2Zyb21fZGlyZWN0b3J5KTsKLUVYUE9SVF9TWU1CT0woY3NyMTIxMl9yZWxlYXNlX2tleXZhbCk7CiBFWFBPUlRfU1lNQk9MKGNzcjEyMTJfZGVzdHJveV9jc3IpOwotRVhQT1JUX1NZTUJPTChjc3IxMjEyX3JlYWQpOwogRVhQT1JUX1NZTUJPTChjc3IxMjEyX2dlbmVyYXRlX2Nzcl9pbWFnZSk7Ci1FWFBPUlRfU1lNQk9MKGNzcjEyMTJfcGFyc2Vfa2V5dmFsKTsKIEVYUE9SVF9TWU1CT0woY3NyMTIxMl9wYXJzZV9jc3IpOwotRVhQT1JUX1NZTUJPTChfY3NyMTIxMl9yZWFkX2tleXZhbCk7Ci1FWFBPUlRfU1lNQk9MKF9jc3IxMjEyX2Rlc3Ryb3lfa2V5dmFsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9jb3JlLmggYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuaAppbmRleCA3M2JkOGVmLi4wYjMxNDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuaApAQCAtMzgsOCArMzgsOCBAQAogCiAgICAgICAgIC8qIFRoZXNlIGFyZSBjb3JlIGludGVybmFsLiAqLwogICAgICAgICBzaWduZWQgY2hhciB0bGFiZWw7Ci0gICAgICAgIGNoYXIgYWNrX2NvZGU7Ci0gICAgICAgIGNoYXIgdGNvZGU7CisJc2lnbmVkIGNoYXIgYWNrX2NvZGU7CisJdW5zaWduZWQgY2hhciB0Y29kZTsKIAogICAgICAgICB1bnNpZ25lZCBleHBlY3RfcmVzcG9uc2U6MTsKICAgICAgICAgdW5zaWduZWQgbm9fd2FpdGVyOjE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2lzby5jIGIvZHJpdmVycy9pZWVlMTM5NC9pc28uYwppbmRleCBmMDU3NTkxLi42MTU1NDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2lzby5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaXNvLmMKQEAgLTYyLDEwICs2MiwxMCBAQAogCWlmICgoZG1hX21vZGUgPCBIUFNCX0lTT19ETUFfREVGQVVMVCkgfHwgKGRtYV9tb2RlID4gSFBTQl9JU09fRE1BX1BBQ0tFVF9QRVJfQlVGRkVSKSkKIAkJZG1hX21vZGU9SFBTQl9JU09fRE1BX0RFRkFVTFQ7CiAKKwlpZiAoKGlycV9pbnRlcnZhbCA8IDApIHx8IChpcnFfaW50ZXJ2YWwgPiBidWZfcGFja2V0cyAvIDQpKQorIAkJaXJxX2ludGVydmFsID0gYnVmX3BhY2tldHMgLyA0OwogCWlmIChpcnFfaW50ZXJ2YWwgPT0gMCkgICAgIC8qIHJlYWxseSBpbnRlcnJ1cHQgZm9yIGVhY2ggcGFja2V0Ki8KIAkJaXJxX2ludGVydmFsID0gMTsKLQllbHNlIGlmICgoaXJxX2ludGVydmFsIDwgMCkgfHwgKGlycV9pbnRlcnZhbCA+IGJ1Zl9wYWNrZXRzIC8gNCkpCi0gCQlpcnFfaW50ZXJ2YWwgPSBidWZfcGFja2V0cyAvIDQ7CiAKIAlpZiAoY2hhbm5lbCA8IC0xIHx8IGNoYW5uZWwgPj0gNjQpCiAJCXJldHVybiBOVUxMOwpAQCAtMTA2LDYgKzEwNiw3IEBACiAJfQogCiAJYXRvbWljX3NldCgmaXNvLT5vdmVyZmxvd3MsIDApOworCWlzby0+Ynl0ZXNfZGlzY2FyZGVkID0gMDsKIAlpc28tPmZsYWdzID0gMDsKIAlpc28tPnByZWJ1ZmZlciA9IDA7CiAKQEAgLTI0MSwxMiArMjQyLDEyIEBACiAJaXNvLT54bWl0X2N5Y2xlID0gY3ljbGU7CiAKIAlpZiAocHJlYnVmZmVyIDwgMCkKLQkJcHJlYnVmZmVyID0gaXNvLT5idWZfcGFja2V0czsKKwkJcHJlYnVmZmVyID0gaXNvLT5idWZfcGFja2V0cyAtIDE7CiAJZWxzZSBpZiAocHJlYnVmZmVyID09IDApCiAJCXByZWJ1ZmZlciA9IDE7CiAKLQlpZiAocHJlYnVmZmVyID4gaXNvLT5idWZfcGFja2V0cykKLQkJcHJlYnVmZmVyID0gaXNvLT5idWZfcGFja2V0czsKKwlpZiAocHJlYnVmZmVyID49IGlzby0+YnVmX3BhY2tldHMpCisJCXByZWJ1ZmZlciA9IGlzby0+YnVmX3BhY2tldHMgLSAxOwogCiAJaXNvLT5wcmVidWZmZXIgPSBwcmVidWZmZXI7CiAKQEAgLTM5NSw3ICszOTYsNyBAQAogfQogCiB2b2lkIGhwc2JfaXNvX3BhY2tldF9yZWNlaXZlZChzdHJ1Y3QgaHBzYl9pc28gKmlzbywgdTMyIG9mZnNldCwgdTE2IGxlbiwKLQkJCSAgICAgIHUxNiBjeWNsZSwgdTggY2hhbm5lbCwgdTggdGFnLCB1OCBzeSkKKwkJCSAgICAgIHUxNiB0b3RhbF9sZW4sIHUxNiBjeWNsZSwgdTggY2hhbm5lbCwgdTggdGFnLCB1OCBzeSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpc28tPmxvY2ssIGZsYWdzKTsKQEAgLTQwMywxMCArNDA0LDEzIEBACiAJaWYgKGlzby0+bl9yZWFkeV9wYWNrZXRzID09IGlzby0+YnVmX3BhY2tldHMpIHsKIAkJLyogb3ZlcmZsb3chICovCiAJCWF0b21pY19pbmMoJmlzby0+b3ZlcmZsb3dzKTsKKwkJLyogUmVjb3JkIHNpemUgb2YgdGhpcyBkaXNjYXJkZWQgcGFja2V0ICovCisJCWlzby0+Ynl0ZXNfZGlzY2FyZGVkICs9IHRvdGFsX2xlbjsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaHBzYl9pc29fcGFja2V0X2luZm8gKmluZm8gPSAmaXNvLT5pbmZvc1tpc28tPnBrdF9kbWFdOwogCQlpbmZvLT5vZmZzZXQgPSBvZmZzZXQ7CiAJCWluZm8tPmxlbiA9IGxlbjsKKwkJaW5mby0+dG90YWxfbGVuID0gdG90YWxfbGVuOwogCQlpbmZvLT5jeWNsZSA9IGN5Y2xlOwogCQlpbmZvLT5jaGFubmVsID0gY2hhbm5lbDsKIAkJaW5mby0+dGFnID0gdGFnOwpAQCAtNDM3LDYgKzQ0MSwxNyBAQAogCiAJCWlzby0+Zmlyc3RfcGFja2V0ID0gKGlzby0+Zmlyc3RfcGFja2V0KzEpICUgaXNvLT5idWZfcGFja2V0czsKIAkJaXNvLT5uX3JlYWR5X3BhY2tldHMtLTsKKworCQkvKiByZWxlYXNlIG1lbW9yeSBmcm9tIHBhY2tldHMgZGlzY2FyZGVkIHdoZW4gcXVldWUgd2FzIGZ1bGwgICovCisJCWlmIChpc28tPm5fcmVhZHlfcGFja2V0cyA9PSAwKSB7IC8qIFJlbGVhc2Ugb25seSBhZnRlciBhbGwgcHJpb3IgcGFja2V0cyBoYW5kbGVkICovCisJCQlpZiAoaXNvLT5ieXRlc19kaXNjYXJkZWQgIT0gMCkgeworCQkJCXN0cnVjdCBocHNiX2lzb19wYWNrZXRfaW5mbyBpbmY7CisJCQkJaW5mLnRvdGFsX2xlbiA9IGlzby0+Ynl0ZXNfZGlzY2FyZGVkOworCQkJCWlzby0+aG9zdC0+ZHJpdmVyLT5pc29jdGwoaXNvLCBSRUNWX1JFTEVBU0UsCisJCQkJCQkJKHVuc2lnbmVkIGxvbmcpICZpbmYpOworCQkJCWlzby0+Ynl0ZXNfZGlzY2FyZGVkID0gMDsKKwkJCX0KKwkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc28tPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcnY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2lzby5oIGIvZHJpdmVycy9pZWVlMTM5NC9pc28uaAppbmRleCBmYjY1NGQ5Li4zZWZjNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2lzby5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaXNvLmgKQEAgLTQ3LDYgKzQ3LDE0IEBACiAJLyogMi1iaXQgJ3RhZycgYW5kIDQtYml0ICdzeScgZmllbGRzIG9mIHRoZSBpc29jaHJvbm91cyBoZWFkZXIgKi8KIAlfX3U4IHRhZzsKIAlfX3U4IHN5OworCisJLyoKKwkgKiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIHBhY2tldCBpbmNsdWRpbmcgaGVhZGVyL3RyYWlsZXIuCisJICogTVVTVCBiZSBhdCBzdHJ1Y3R1cmUgZW5kLCBzaW5jZSB0aGUgZmlyc3QgcGFydCBvZiB0aGlzIHN0cnVjdHVyZSBpcyBhbHNvIAorCSAqIGRlZmluZWQgaW4gcmF3MTM5NC5oIChpLmUuIHN0cnVjdCByYXcxMzk0X2lzb19wYWNrZXRfaW5mbyksIGlzIGNvcGllZCB0byAKKwkgKiB1c2Vyc3BhY2UgYW5kIGlzIGFjY2Vzc2VkIHRoZXJlIHRocm91Z2ggbGlicmF3MTM5NC4gCisJICovCisJX191MTYgdG90YWxfbGVuOwogfTsKIAogZW51bSBocHNiX2lzb190eXBlIHsgSFBTQl9JU09fUkVDViA9IDAsIEhQU0JfSVNPX1hNSVQgPSAxIH07CkBAIC0xMTEsNiArMTE5LDkgQEAKIAkvKiBob3cgbWFueSB0aW1lcyB0aGUgYnVmZmVyIGhhcyBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkICovCiAJYXRvbWljX3Qgb3ZlcmZsb3dzOwogCisJLyogQ3VycmVudCBudW1iZXIgb2YgYnl0ZXMgbG9zdCBpbiBkaXNjYXJkZWQgcGFja2V0cyAqLworCWludCBieXRlc19kaXNjYXJkZWQ7CisKIAkvKiBwcml2YXRlIGZsYWdzIHRvIHRyYWNrIGluaXRpYWxpemF0aW9uIHByb2dyZXNzICovCiAjZGVmaW5lIEhQU0JfSVNPX0RSSVZFUl9JTklUICAgICAoMTw8MCkKICNkZWZpbmUgSFBTQl9JU09fRFJJVkVSX1NUQVJURUQgICgxPDwxKQpAQCAtMTkzLDcgKzIwNCw3IEBACiAKIC8qIGNhbGwgYWZ0ZXIgYSBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQgKGludGVycnVwdCBjb250ZXh0IE9LKSAqLwogdm9pZCBocHNiX2lzb19wYWNrZXRfcmVjZWl2ZWQoc3RydWN0IGhwc2JfaXNvICppc28sIHUzMiBvZmZzZXQsIHUxNiBsZW4sCi0JCQkgICAgICB1MTYgY3ljbGUsIHU4IGNoYW5uZWwsIHU4IHRhZywgdTggc3kpOworCQkJICAgICAgdTE2IHRvdGFsX2xlbiwgdTE2IGN5Y2xlLCB1OCBjaGFubmVsLCB1OCB0YWcsIHU4IHN5KTsKIAogLyogY2FsbCB0byB3YWtlIHdhaXRpbmcgcHJvY2Vzc2VzIGFmdGVyIGJ1ZmZlciBzcGFjZSBoYXMgb3BlbmVkIHVwLiAqLwogdm9pZCBocHNiX2lzb193YWtlKHN0cnVjdCBocHNiX2lzbyAqaXNvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKaW5kZXggOWE0NmMzYi4uYmViY2M0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjc3IuaCIKICNpbmNsdWRlICJub2RlbWdyLmgiCiAKLXN0YXRpYyBpbnQgaWdub3JlX2RyaXZlcnMgPSAwOworc3RhdGljIGludCBpZ25vcmVfZHJpdmVyczsKIG1vZHVsZV9wYXJhbShpZ25vcmVfZHJpdmVycywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2RyaXZlcnMsICJEaXNhYmxlIGF1dG9tYXRpYyBwcm9iaW5nIGZvciBkcml2ZXJzLiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKaW5kZXggYjNkM2QyMi4uYTQ4NWY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiBwcmludGsobGV2ZWwgIiVzOiBmdy1ob3N0JWQ6ICIgZm10ICJcbiIgLCBPSENJMTM5NF9EUklWRVJfTkFNRSwgb2hjaS0+aG9zdC0+aWQgLCAjIyBhcmdzKQogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci0JIiRSZXY6IDEyNTAgJCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAZGViaWFuLm9yZz4iOworCSIkUmV2OiAxMjk5ICQgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGRlYmlhbi5vcmc+IjsKIAogLyogTW9kdWxlIFBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgcGh5c19kbWEgPSAxOwpAQCAtNDgzLDcgKzQ4Myw5IEBACiAJLyogUHV0IHNvbWUgZGVmYXVsdHMgdG8gdGhlc2UgdW5kZWZpbmVkIGJ1cyBvcHRpb25zICovCiAJYnVmID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfQnVzT3B0aW9ucyk7CiAJYnVmIHw9ICAweDYwMDAwMDAwOyAvKiBFbmFibGUgQ01DIGFuZCBJU0MgKi8KLQlpZiAoIWhwc2JfZGlzYWJsZV9pcm0pCisJaWYgKGhwc2JfZGlzYWJsZV9pcm0pCisJCWJ1ZiAmPSB+MHg4MDAwMDAwMDsKKwllbHNlCiAJCWJ1ZiB8PSAgMHg4MDAwMDAwMDsgLyogRW5hYmxlIElSTUMgKi8KIAlidWYgJj0gfjB4MDBmZjAwMDA7IC8qIFhYWDogU2V0IGN5Y19jbGtfYWNjIHRvIHplcm8gZm9yIG5vdyAqLwogCWJ1ZiAmPSB+MHgxODAwMDAwMDsgLyogRGlzYWJsZSBQTUMgYW5kIEJNQyAqLwpAQCAtNTAzLDggKzUwNSwxMiBAQAogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9MaW5rQ29udHJvbFNldCwKIAkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9DeWNsZVRpbWVyRW5hYmxlIHwKIAkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9DeWNsZU1hc3Rlcik7Ci0Jc2V0X3BoeV9yZWdfbWFzayhvaGNpLCA0LCBQSFlfMDRfTENUUkwgfAotCQkJIChocHNiX2Rpc2FibGVfaXJtID8gMCA6IFBIWV8wNF9DT05URU5ERVIpKTsKKwlpID0gZ2V0X3BoeV9yZWcob2hjaSwgNCkgfCBQSFlfMDRfTENUUkw7CisJaWYgKGhwc2JfZGlzYWJsZV9pcm0pCisJCWkgJj0gflBIWV8wNF9DT05URU5ERVI7CisJZWxzZQorCQlpIHw9IFBIWV8wNF9DT05URU5ERVI7CisJc2V0X3BoeV9yZWcob2hjaSwgNCwgaSk7CiAKIAkvKiBTZXQgdXAgc2VsZi1pZCBkbWEgYnVmZmVyICovCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1NlbGZJREJ1ZmZlciwgb2hjaS0+c2VsZmlkX2J1Zl9idXMpOwpAQCAtMTU2Niw2ICsxNTcyLDEwIEBACiAKIAlzdHJ1Y3QgZG1hX2NtZCAqbmV4dCA9ICZyZWN2LT5ibG9ja1tuZXh0X2ldOwogCXN0cnVjdCBkbWFfY21kICpwcmV2ID0gJnJlY3YtPmJsb2NrW3ByZXZfaV07CisJCisJLyogaWdub3JlIG91dC1vZi1yYW5nZSByZXF1ZXN0cyAqLworCWlmICgoYmxvY2sgPCAwKSB8fCAoYmxvY2sgPiByZWN2LT5uYmxvY2tzKSkKKwkJcmV0dXJuOwogCiAJLyogJ25leHQnIGJlY29tZXMgdGhlIG5ldyBlbmQgb2YgdGhlIERNQSBjaGFpbiwKIAkgICBzbyBkaXNhYmxlIGJyYW5jaCBhbmQgZW5hYmxlIGludGVycnVwdCAqLwpAQCAtMTU5MywxOSArMTYwMyw4IEBACiBzdGF0aWMgdm9pZCBvaGNpX2lzb19yZWN2X2J1ZmZlcmZpbGxfcmVsZWFzZShzdHJ1Y3Qgb2hjaV9pc29fcmVjdiAqcmVjdiwKIAkJCQkJICAgICBzdHJ1Y3QgaHBzYl9pc29fcGFja2V0X2luZm8gKmluZm8pCiB7Ci0JaW50IGxlbjsKLQogCS8qIHJlbGVhc2UgdGhlIG1lbW9yeSB3aGVyZSB0aGUgcGFja2V0IHdhcyAqLwotCWxlbiA9IGluZm8tPmxlbjsKLQotCS8qIGFkZCB0aGUgd2FzdGVkIHNwYWNlIGZvciBwYWRkaW5nIHRvIDQgYnl0ZXMgKi8KLQlpZiAobGVuICUgNCkKLQkJbGVuICs9IDQgLSAobGVuICUgNCk7Ci0KLQkvKiBhZGQgOCBieXRlcyBmb3IgdGhlIE9IQ0kgRE1BIGRhdGEgZm9ybWF0IG92ZXJoZWFkICovCi0JbGVuICs9IDg7Ci0KLQlyZWN2LT5yZWxlYXNlZF9ieXRlcyArPSBsZW47CisJcmVjdi0+cmVsZWFzZWRfYnl0ZXMgKz0gaW5mby0+dG90YWxfbGVuOwogCiAJLyogaGF2ZSB3ZSByZWxlYXNlZCBlbm91Z2ggbWVtb3J5IGZvciBvbmUgYmxvY2s/ICovCiAJd2hpbGUgKHJlY3YtPnJlbGVhc2VkX2J5dGVzID4gcmVjdi0+YnVmX3N0cmlkZSkgewpAQCAtMTYzNyw3ICsxNjM2LDcgQEAKIAkJLyogbm90ZTogcGFja2V0IGxheW91dCBpcyBhcyBzaG93biBpbiBzZWN0aW9uIDEwLjYuMS4xIG9mIHRoZSBPSENJIHNwZWMgKi8KIAogCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCQl1bnNpZ25lZCBzaG9ydCBsZW4sIGN5Y2xlOworCQl1bnNpZ25lZCBzaG9ydCBsZW4sIGN5Y2xlLCB0b3RhbF9sZW47CiAJCXVuc2lnbmVkIGNoYXIgY2hhbm5lbCwgdGFnLCBzeTsKIAogCQl1bnNpZ25lZCBjaGFyICpwID0gaXNvLT5kYXRhX2J1Zi5rdmlydDsKQEAgLTE2ODgsOSArMTY4NywxMSBAQAogCQkvKiBhZHZhbmNlIHRvIHhmZXJTdGF0dXMvdGltZVN0YW1wICovCiAJCXJlY3YtPmRtYV9vZmZzZXQgKz0gbGVuOwogCisJCXRvdGFsX2xlbiA9IGxlbiArIDg7IC8qIDggYnl0ZXMgaGVhZGVyK3RyYWlsZXIgaW4gT0hDSSBwYWNrZXQgKi8KIAkJLyogcGF5bG9hZCBpcyBwYWRkZWQgdG8gNCBieXRlcyAqLwogCQlpZiAobGVuICUgNCkgewogCQkJcmVjdi0+ZG1hX29mZnNldCArPSA0IC0gKGxlbiU0KTsKKwkJCXRvdGFsX2xlbiArPSA0IC0gKGxlbiU0KTsKIAkJfQogCiAJCS8qIGNoZWNrIGZvciB3cmFwLWFyb3VuZCAqLwpAQCAtMTcyNCw3ICsxNzI1LDcgQEAKIAkJCXJlY3YtPmRtYV9vZmZzZXQgLT0gcmVjdi0+YnVmX3N0cmlkZSpyZWN2LT5uYmxvY2tzOwogCQl9CiAKLQkJaHBzYl9pc29fcGFja2V0X3JlY2VpdmVkKGlzbywgb2Zmc2V0LCBsZW4sIGN5Y2xlLCBjaGFubmVsLCB0YWcsIHN5KTsKKwkJaHBzYl9pc29fcGFja2V0X3JlY2VpdmVkKGlzbywgb2Zmc2V0LCBsZW4sIHRvdGFsX2xlbiwgY3ljbGUsIGNoYW5uZWwsIHRhZywgc3kpOwogCX0KIAogCWlmICh3YWtlKQpAQCAtMTg1MCw3ICsxODUxLDggQEAKIAkJCXRhZyA9IGhkcls1XSA+PiA2OwogCQkJc3kgPSBoZHJbNF0gJiAweEY7CiAKLQkJCWhwc2JfaXNvX3BhY2tldF9yZWNlaXZlZChpc28sIG9mZnNldCwgcGFja2V0X2xlbiwgY3ljbGUsIGNoYW5uZWwsIHRhZywgc3kpOworCQkJaHBzYl9pc29fcGFja2V0X3JlY2VpdmVkKGlzbywgb2Zmc2V0LCBwYWNrZXRfbGVuLAorCQkJCQlyZWN2LT5idWZfc3RyaWRlLCBjeWNsZSwgY2hhbm5lbCwgdGFnLCBzeSk7CiAJCX0KIAogCQkvKiByZXNldCB0aGUgRE1BIGRlc2NyaXB0b3IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcGNpbHlueC5jIGIvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKaW5kZXggYmRiM2E4NS4uMzYwNzRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCiAvKiBNb2R1bGUgUGFyYW1ldGVycyAqLwotc3RhdGljIGludCBza2lwX2VlcHJvbSA9IDA7CitzdGF0aWMgaW50IHNraXBfZWVwcm9tOwogbW9kdWxlX3BhcmFtKHNraXBfZWVwcm9tLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhza2lwX2VlcHJvbSwgIlVzZSBnZW5lcmljIGJ1cyBpbmZvIGJsb2NrIGluc3RlYWQgb2Ygc2VyaWFsIGVlcHJvbSAoZGVmYXVsdCA9IDApLiIpOwogCkBAIC0xNDIyLDcgKzE0MjIsNyBAQAogCQlpID0gZ2V0X3BoeV9yZWcobHlueCwgNCk7CiAJCWkgfD0gUEhZXzA0X0xDVFJMOwogCQlpZiAoaHBzYl9kaXNhYmxlX2lybSkKLQkJCWkgJj0gIVBIWV8wNF9DT05URU5ERVI7CisJCQlpICY9IH5QSFlfMDRfQ09OVEVOREVSOwogCQllbHNlCiAJCQlpIHw9IFBIWV8wNF9DT05URU5ERVI7CiAJCWlmIChpICE9IC0xKSBzZXRfcGh5X3JlZyhseW54LCA0LCBpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKaW5kZXggNzQxOWFmNC4uYjRmYTE0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKQEAgLTk4LDcgKzk4LDcgQEAKIAogc3RhdGljIHZvaWQgcXVldWVfY29tcGxldGVfY2Ioc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxKTsKIAotc3RhdGljIHN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKl9fYWxsb2NfcGVuZGluZ19yZXF1ZXN0KGludCBmbGFncykKK3N0YXRpYyBzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpfX2FsbG9jX3BlbmRpbmdfcmVxdWVzdCh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCiB7CiAJc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxOwogCkBAIC0yNTA2LDkgKzI1MDYsMTIgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnVwYWNrZXRzLCB1YWRkciwgc2l6ZW9mKHVwYWNrZXRzKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKHVwYWNrZXRzLm5fcGFja2V0cyA+IGhwc2JfaXNvX25fcmVhZHkoZmktPmlzb19oYW5kbGUpKQorCWlmICh1cGFja2V0cy5uX3BhY2tldHMgPj0gZmktPmlzb19oYW5kbGUtPmJ1Zl9wYWNrZXRzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICh1cGFja2V0cy5uX3BhY2tldHMgPj0gaHBzYl9pc29fbl9yZWFkeShmaS0+aXNvX2hhbmRsZSkpCisJCXJldHVybiAtRUFHQUlOOworCiAJLyogZW5zdXJlIHVzZXItc3VwcGxpZWQgYnVmZmVyIGlzIGFjY2Vzc2libGUgYW5kIGJpZyBlbm91Z2ggKi8KIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXBhY2tldHMuaW5mb3MsCiAJCQl1cGFja2V0cy5uX3BhY2tldHMgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCAzMjM2OGYzLi5mZTNlMTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtODEsNyArODEsNyBAQAogI2luY2x1ZGUgInNicDIuaCIKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotCSIkUmV2OiAxMjE5ICQgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGRlYmlhbi5vcmc+IjsKKwkiJFJldjogMTMwNiAkIEJlbiBDb2xsaW5zIDxiY29sbGluc0BkZWJpYW4ub3JnPiI7CiAKIC8qCiAgKiBNb2R1bGUgbG9hZCBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMKQEAgLTEwNCw3ICsxMDQsNyBAQAogICogZG93biB0byB1cyBhdCBhIHRpbWUgKGRlYnVnZ2luZykuIFRoaXMgbWlnaHQgYmUgbmVjZXNzYXJ5IGZvciB2ZXJ5CiAgKiBiYWRseSBiZWhhdmVkIHNicDIgZGV2aWNlcy4KICAqLwotc3RhdGljIGludCBzZXJpYWxpemVfaW8gPSAwOworc3RhdGljIGludCBzZXJpYWxpemVfaW87CiBtb2R1bGVfcGFyYW0oc2VyaWFsaXplX2lvLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzZXJpYWxpemVfaW8sICJTZXJpYWxpemUgYWxsIEkvTyBjb21pbmcgZG93biBmcm9tIHRoZSBzY3NpIGRyaXZlcnMgKGRlZmF1bHQgPSAwKSIpOwogCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAqIHBsZWFzZSBzdWJtaXQgdGhlIGxvZ2dlZCBzYnAyX2Zpcm13YXJlX3JldmlzaW9uIHZhbHVlIG9mIHRoaXMgZGV2aWNlIHRvCiAgKiB0aGUgbGludXgxMzk0LWRldmVsIG1haWxpbmcgbGlzdC4KICAqLwotc3RhdGljIGludCBmb3JjZV9pbnF1aXJ5X2hhY2sgPSAwOworc3RhdGljIGludCBmb3JjZV9pbnF1aXJ5X2hhY2s7CiBtb2R1bGVfcGFyYW0oZm9yY2VfaW5xdWlyeV9oYWNrLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9pbnF1aXJ5X2hhY2ssICJGb3JjZSBTQ1NJIGlucXVpcnkgaGFjayAoZGVmYXVsdCA9IDApIik7CiAKQEAgLTIxMTIsNiArMjExMiwxMDIgQEAKICAqLwogc3RhdGljIHZvaWQgc2JwMl9jaGVja19zYnAyX2NvbW1hbmQoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqc2NzaV9pZCwgdW5jaGFyICpjbWQpCiB7CisJdW5jaGFyIG5ld19jbWRbMTZdOworCXU4IGRldmljZV90eXBlID0gU0JQMl9ERVZJQ0VfVFlQRSAoc2NzaV9pZC0+c2JwMl9kZXZpY2VfdHlwZV9hbmRfbHVuKTsKKworCVNCUDJfREVCVUcoInNicDJfY2hlY2tfc2JwMl9jb21tYW5kIik7CisKKwlzd2l0Y2ggKCpjbWQpIHsKKworCQljYXNlIFJFQURfNjoKKworCQkJaWYgKHNicDJfY29tbWFuZF9jb252ZXJzaW9uX2RldmljZV90eXBlKGRldmljZV90eXBlKSkgeworCisJCQkJU0JQMl9ERUJVRygiQ29udmVydCBSRUFEXzYgdG8gUkVBRF8xMCIpOworCisJCQkJLyoKKwkJCQkgKiBOZWVkIHRvIHR1cm4gcmVhZF82IGludG8gcmVhZF8xMAorCQkJCSAqLworCQkJCW5ld19jbWRbMF0gPSAweDI4OworCQkJCW5ld19jbWRbMV0gPSAoY21kWzFdICYgMHhlMCk7CisJCQkJbmV3X2NtZFsyXSA9IDB4MDsKKwkJCQluZXdfY21kWzNdID0gKGNtZFsxXSAmIDB4MWYpOworCQkJCW5ld19jbWRbNF0gPSBjbWRbMl07CisJCQkJbmV3X2NtZFs1XSA9IGNtZFszXTsKKwkJCQluZXdfY21kWzZdID0gMHgwOworCQkJCW5ld19jbWRbN10gPSAweDA7CisJCQkJbmV3X2NtZFs4XSA9IGNtZFs0XTsKKwkJCQluZXdfY21kWzldID0gY21kWzVdOworCisJCQkJbWVtY3B5KGNtZCwgbmV3X2NtZCwgMTApOworCisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgV1JJVEVfNjoKKworCQkJaWYgKHNicDJfY29tbWFuZF9jb252ZXJzaW9uX2RldmljZV90eXBlKGRldmljZV90eXBlKSkgeworCisJCQkJU0JQMl9ERUJVRygiQ29udmVydCBXUklURV82IHRvIFdSSVRFXzEwIik7CisKKwkJCQkvKgorCQkJCSAqIE5lZWQgdG8gdHVybiB3cml0ZV82IGludG8gd3JpdGVfMTAKKwkJCQkgKi8KKwkJCQluZXdfY21kWzBdID0gMHgyYTsKKwkJCQluZXdfY21kWzFdID0gKGNtZFsxXSAmIDB4ZTApOworCQkJCW5ld19jbWRbMl0gPSAweDA7CisJCQkJbmV3X2NtZFszXSA9IChjbWRbMV0gJiAweDFmKTsKKwkJCQluZXdfY21kWzRdID0gY21kWzJdOworCQkJCW5ld19jbWRbNV0gPSBjbWRbM107CisJCQkJbmV3X2NtZFs2XSA9IDB4MDsKKwkJCQluZXdfY21kWzddID0gMHgwOworCQkJCW5ld19jbWRbOF0gPSBjbWRbNF07CisJCQkJbmV3X2NtZFs5XSA9IGNtZFs1XTsKKworCQkJCW1lbWNweShjbWQsIG5ld19jbWQsIDEwKTsKKworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIE1PREVfU0VOU0U6CisKKwkJCWlmIChzYnAyX2NvbW1hbmRfY29udmVyc2lvbl9kZXZpY2VfdHlwZShkZXZpY2VfdHlwZSkpIHsKKworCQkJCVNCUDJfREVCVUcoIkNvbnZlcnQgTU9ERV9TRU5TRV82IHRvIE1PREVfU0VOU0VfMTAiKTsKKworCQkJCS8qCisJCQkJICogTmVlZCB0byB0dXJuIG1vZGVfc2Vuc2VfNiBpbnRvIG1vZGVfc2Vuc2VfMTAKKwkJCQkgKi8KKwkJCQluZXdfY21kWzBdID0gMHg1YTsKKwkJCQluZXdfY21kWzFdID0gY21kWzFdOworCQkJCW5ld19jbWRbMl0gPSBjbWRbMl07CisJCQkJbmV3X2NtZFszXSA9IDB4MDsKKwkJCQluZXdfY21kWzRdID0gMHgwOworCQkJCW5ld19jbWRbNV0gPSAweDA7CisJCQkJbmV3X2NtZFs2XSA9IDB4MDsKKwkJCQluZXdfY21kWzddID0gMHgwOworCQkJCW5ld19jbWRbOF0gPSBjbWRbNF07CisJCQkJbmV3X2NtZFs5XSA9IGNtZFs1XTsKKworCQkJCW1lbWNweShjbWQsIG5ld19jbWQsIDEwKTsKKworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIE1PREVfU0VMRUNUOgorCisJCQkvKgorCQkJICogVE9ETy4gUHJvYmFibHkgbmVlZCB0byBjaGFuZ2UgbW9kZSBzZWxlY3QgdG8gMTAgYnl0ZSB2ZXJzaW9uCisJCQkgKi8KKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuOwogfQogCiAvKgpAQCAtMjE1Miw2ICsyMjQ4LDcgQEAKIAkJCQkgICAgIHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewogCXU4ICpzY3NpX2J1ZiA9IFNDcG50LT5yZXF1ZXN0X2J1ZmZlcjsKKwl1OCBkZXZpY2VfdHlwZSA9IFNCUDJfREVWSUNFX1RZUEUgKHNjc2lfaWQtPnNicDJfZGV2aWNlX3R5cGVfYW5kX2x1bik7CiAKIAlTQlAyX0RFQlVHKCJzYnAyX2NoZWNrX3NicDJfcmVzcG9uc2UiKTsKIApAQCAtMjE3Niw2ICsyMjczLDE0IEBACiAJCQl9CiAKIAkJCS8qCisJCQkgKiBDaGVjayBmb3IgU2ltcGxlIERpcmVjdCBBY2Nlc3MgRGV2aWNlIGFuZCBjaGFuZ2UgaXQgdG8gVFlQRV9ESVNLCisJCQkgKi8KKwkJCWlmICgoc2NzaV9idWZbMF0gJiAweDFmKSA9PSBUWVBFX1JCQykgeworCQkJCVNCUDJfREVCVUcoIkNoYW5naW5nIFRZUEVfUkJDIHRvIFRZUEVfRElTSyIpOworCQkJCXNjc2lfYnVmWzBdICY9IDB4ZTA7CisJCQl9CisKKwkJCS8qCiAJCQkgKiBGaXggYW5zaSByZXZpc2lvbiBhbmQgcmVzcG9uc2UgZGF0YSBmb3JtYXQKIAkJCSAqLwogCQkJc2NzaV9idWZbMl0gfD0gMjsKQEAgLTIxODMsNiArMjI4OCwyNyBAQAogCiAJCQlicmVhazsKIAorCQljYXNlIE1PREVfU0VOU0U6CisKKwkJCWlmIChzYnAyX2NvbW1hbmRfY29udmVyc2lvbl9kZXZpY2VfdHlwZShkZXZpY2VfdHlwZSkpIHsKKworCQkJCVNCUDJfREVCVUcoIk1vZGlmeSBtb2RlIHNlbnNlIHJlc3BvbnNlICgxMCBieXRlIHZlcnNpb24pIik7CisKKwkJCQlzY3NpX2J1ZlswXSA9IHNjc2lfYnVmWzFdOwkvKiBNb2RlIGRhdGEgbGVuZ3RoICovCisJCQkJc2NzaV9idWZbMV0gPSBzY3NpX2J1ZlsyXTsJLyogTWVkaXVtIHR5cGUgKi8KKwkJCQlzY3NpX2J1ZlsyXSA9IHNjc2lfYnVmWzNdOwkvKiBEZXZpY2Ugc3BlY2lmaWMgcGFyYW1ldGVyICovCisJCQkJc2NzaV9idWZbM10gPSBzY3NpX2J1Zls3XTsJLyogQmxvY2sgZGVzY3JpcHRvciBsZW5ndGggKi8KKwkJCQltZW1jcHkoc2NzaV9idWYgKyA0LCBzY3NpX2J1ZiArIDgsIHNjc2lfYnVmWzBdKTsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBNT0RFX1NFTEVDVDoKKworCQkJLyoKKwkJCSAqIFRPRE8uIFByb2JhYmx5IG5lZWQgdG8gY2hhbmdlIG1vZGUgc2VsZWN0IHRvIDEwIGJ5dGUgdmVyc2lvbgorCQkJICovCisKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCX0KQEAgLTI1NTksOCArMjY4NSw3IEBACiBzdGF0aWMgaW50IHNicDJzY3NpX3NsYXZlX2NvbmZpZ3VyZSAoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsICg1MTIgLSAxKSk7Ci0Jc2Rldi0+dXNlXzEwX2Zvcl9ydyA9IDE7Ci0Jc2Rldi0+dXNlXzEwX2Zvcl9tcyA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZwppbmRleCAzY2MzZmYwLi43OWM4ZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZwpAQCAtNyw2ICs3LDE2IEBACiAJICBhbnkgcHJvdG9jb2xzIHlvdSB3aXNoIHRvIHVzZSBhcyB3ZWxsIGFzIGRyaXZlcnMgZm9yIHlvdXIKIAkgIEluZmluaUJhbmQgaGFyZHdhcmUuCiAKK2NvbmZpZyBJTkZJTklCQU5EX1VTRVJfVkVSQlMKKwl0cmlzdGF0ZSAiSW5maW5pQmFuZCB1c2Vyc3BhY2UgdmVyYnMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElORklOSUJBTkQKKwktLS1oZWxwLS0tCisJICBVc2Vyc3BhY2UgSW5maW5pQmFuZCB2ZXJicyBzdXBwb3J0LiAgVGhpcyBpcyB0aGUga2VybmVsIHNpZGUKKwkgIG9mIHVzZXJzcGFjZSB2ZXJicywgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSBwcm9jZXNzZXMgdG8KKwkgIGRpcmVjdGx5IGFjY2VzcyBJbmZpbmlCYW5kIGhhcmR3YXJlIGZvciBmYXN0LXBhdGgKKwkgIG9wZXJhdGlvbnMuICBZb3Ugd2lsbCBhbHNvIG5lZWQgbGliaWJ2ZXJicyBhbmQgYSBoYXJkd2FyZQorCSAgZHJpdmVyIGxpYnJhcnkgZnJvbSA8aHR0cDovL3d3dy5vcGVuaWIub3JnPi4KKwogc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCmluZGV4IGQyZGJmYjUuLmUxYTdjZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9pbmZpbmliYW5kL2luY2x1ZGUKIAotb2JqLSQoQ09ORklHX0lORklOSUJBTkQpICs9CWliX2NvcmUubyBpYl9tYWQubyBpYl9zYS5vIGliX3VtYWQubworb2JqLSQoQ09ORklHX0lORklOSUJBTkQpICs9CQlpYl9jb3JlLm8gaWJfbWFkLm8gaWJfc2EubyBpYl91bWFkLm8KK29iai0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfVkVSQlMpICs9CWliX3V2ZXJicy5vCiAKIGliX2NvcmUteSA6PQkJCXBhY2tlci5vIHVkX2hlYWRlci5vIHZlcmJzLm8gc3lzZnMubyBcCiAJCQkJZGV2aWNlLm8gZm1yX3Bvb2wubyBjYWNoZS5vCkBAIC0xMCwzICsxMSw1IEBACiBpYl9zYS15IDo9CQkJc2FfcXVlcnkubwogCiBpYl91bWFkLXkgOj0JCQl1c2VyX21hZC5vCisKK2liX3V2ZXJicy15IDo9CQkJdXZlcmJzX21haW4ubyB1dmVyYnNfY21kLm8gdXZlcmJzX21lbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzQ3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqICRJZDogdXZlcmJzLmggMjU1OSAyMDA1LTA2LTA2IDE5OjQzOjE2WiByb2xhbmQgJAorICovCisKKyNpZm5kZWYgVVZFUkJTX0gKKyNkZWZpbmUgVVZFUkJTX0gKKworLyogSW5jbHVkZSBkZXZpY2UuaCBhbmQgZnMuaCB1bnRpbCBjZGV2LmggaXMgc2VsZi1zdWZmaWNpZW50ICovCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorCisjaW5jbHVkZSA8aWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxpYl91c2VyX3ZlcmJzLmg+CisKK3N0cnVjdCBpYl91dmVyYnNfZGV2aWNlIHsKKwlpbnQJCQkJCWRldm51bTsKKwlzdHJ1Y3QgY2RldgkJCQlkZXY7CisJc3RydWN0IGNsYXNzX2RldmljZQkJCWNsYXNzX2RldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlCQkgICAgICAgKmliX2RldjsKKwlpbnQJCQkJCW51bV9jb21wOworfTsKKworc3RydWN0IGliX3V2ZXJic19ldmVudF9maWxlIHsKKwlzdHJ1Y3Qga3JlZgkJCQlyZWY7CisJc3RydWN0IGliX3V2ZXJic19maWxlCQkgICAgICAgKnV2ZXJic19maWxlOworCXNwaW5sb2NrX3QJCQkJbG9jazsKKwlpbnQJCQkJCWZkOworCWludAkJCQkJaXNfYXN5bmM7CisJd2FpdF9xdWV1ZV9oZWFkX3QJCQlwb2xsX3dhaXQ7CisJc3RydWN0IGxpc3RfaGVhZAkJCWV2ZW50X2xpc3Q7Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgeworCXN0cnVjdCBrcmVmCQkJCXJlZjsKKwlzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZQkJICAgICAgICpkZXZpY2U7CisJc3RydWN0IGliX3Vjb250ZXh0CQkgICAgICAgKnVjb250ZXh0OworCXN0cnVjdCBpYl9ldmVudF9oYW5kbGVyCQkJZXZlbnRfaGFuZGxlcjsKKwlzdHJ1Y3QgaWJfdXZlcmJzX2V2ZW50X2ZpbGUJICAgICAgICBhc3luY19maWxlOworCXN0cnVjdCBpYl91dmVyYnNfZXZlbnRfZmlsZQkgICAgICAgIGNvbXBfZmlsZVsxXTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfYXN5bmNfZXZlbnQgeworCXN0cnVjdCBpYl91dmVyYnNfYXN5bmNfZXZlbnRfZGVzYwlkZXNjOworCXN0cnVjdCBsaXN0X2hlYWQJCQlsaXN0OworfTsKKworc3RydWN0IGliX3V2ZXJic19jb21wX2V2ZW50IHsKKwlzdHJ1Y3QgaWJfdXZlcmJzX2NvbXBfZXZlbnRfZGVzYwlkZXNjOworCXN0cnVjdCBsaXN0X2hlYWQJCQlsaXN0OworfTsKKworc3RydWN0IGliX3VvYmplY3RfbXIgeworCXN0cnVjdCBpYl91b2JqZWN0CQkJdW9iajsKKwlzdHJ1Y3QgcGFnZQkJCSAgICAgICAqcGFnZV9saXN0OworCXN0cnVjdCBzY2F0dGVybGlzdAkJICAgICAgICpzZ19saXN0OworfTsKKworZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgaWJfdXZlcmJzX2lkcl9tdXRleDsKK2V4dGVybiBzdHJ1Y3QgaWRyIGliX3V2ZXJic19wZF9pZHI7CitleHRlcm4gc3RydWN0IGlkciBpYl91dmVyYnNfbXJfaWRyOworZXh0ZXJuIHN0cnVjdCBpZHIgaWJfdXZlcmJzX213X2lkcjsKK2V4dGVybiBzdHJ1Y3QgaWRyIGliX3V2ZXJic19haF9pZHI7CitleHRlcm4gc3RydWN0IGlkciBpYl91dmVyYnNfY3FfaWRyOworZXh0ZXJuIHN0cnVjdCBpZHIgaWJfdXZlcmJzX3FwX2lkcjsKKwordm9pZCBpYl91dmVyYnNfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNxX2NvbnRleHQpOwordm9pZCBpYl91dmVyYnNfY3FfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpjb250ZXh0X3B0cik7Cit2b2lkIGliX3V2ZXJic19xcF9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmNvbnRleHRfcHRyKTsKKworaW50IGliX3VtZW1fZ2V0KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc3RydWN0IGliX3VtZW0gKm1lbSwKKwkJdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGludCB3cml0ZSk7Cit2b2lkIGliX3VtZW1fcmVsZWFzZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtKTsKK3ZvaWQgaWJfdW1lbV9yZWxlYXNlX29uX2Nsb3NlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0pOworCisjZGVmaW5lIElCX1VWRVJCU19ERUNMQVJFX0NNRChuYW1lKQkJCQkJXAorCXNzaXplX3QgaWJfdXZlcmJzXyMjbmFtZShzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCQlcCisJCQkJIGNvbnN0IGNoYXIgX191c2VyICpidWYsIGludCBpbl9sZW4sCVwKKwkJCQkgaW50IG91dF9sZW4pCisKK0lCX1VWRVJCU19ERUNMQVJFX0NNRChxdWVyeV9wYXJhbXMpOworSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKGdldF9jb250ZXh0KTsKK0lCX1VWRVJCU19ERUNMQVJFX0NNRChxdWVyeV9kZXZpY2UpOworSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKHF1ZXJ5X3BvcnQpOworSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKHF1ZXJ5X2dpZCk7CitJQl9VVkVSQlNfREVDTEFSRV9DTUQocXVlcnlfcGtleSk7CitJQl9VVkVSQlNfREVDTEFSRV9DTUQoYWxsb2NfcGQpOworSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKGRlYWxsb2NfcGQpOworSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKHJlZ19tcik7CitJQl9VVkVSQlNfREVDTEFSRV9DTUQoZGVyZWdfbXIpOworSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKGNyZWF0ZV9jcSk7CitJQl9VVkVSQlNfREVDTEFSRV9DTUQoZGVzdHJveV9jcSk7CitJQl9VVkVSQlNfREVDTEFSRV9DTUQoY3JlYXRlX3FwKTsKK0lCX1VWRVJCU19ERUNMQVJFX0NNRChtb2RpZnlfcXApOworSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKGRlc3Ryb3lfcXApOworSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKGF0dGFjaF9tY2FzdCk7CitJQl9VVkVSQlNfREVDTEFSRV9DTUQoZGV0YWNoX21jYXN0KTsKKworI2VuZGlmIC8qIFVWRVJCU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYyYmJjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwpAQCAtMCwwICsxLDEwMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKiAkSWQ6IHV2ZXJic19jbWQuYyAyNzA4IDIwMDUtMDYtMjQgMTc6Mjc6MjFaIHJvbGFuZCAkCisgKi8KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJ1dmVyYnMuaCIKKworI2RlZmluZSBJTklUX1VEQVRBKHVkYXRhLCBpYnVmLCBvYnVmLCBpbGVuLCBvbGVuKQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCSh1ZGF0YSktPmluYnVmICA9ICh2b2lkIF9fdXNlciAqKSAoaWJ1Zik7CQlcCisJCSh1ZGF0YSktPm91dGJ1ZiA9ICh2b2lkIF9fdXNlciAqKSAob2J1Zik7CQlcCisJCSh1ZGF0YSktPmlubGVuICA9IChpbGVuKTsJCQkJXAorCQkodWRhdGEpLT5vdXRsZW4gPSAob2xlbik7CQkJCVwKKwl9IHdoaWxlICgwKQorCitzc2l6ZV90IGliX3V2ZXJic19xdWVyeV9wYXJhbXMoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IGliX3V2ZXJic19xdWVyeV9wYXJhbXMgICAgICBjbWQ7CisJc3RydWN0IGliX3V2ZXJic19xdWVyeV9wYXJhbXNfcmVzcCByZXNwOworCisJaWYgKG91dF9sZW4gPCBzaXplb2YgcmVzcCkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKKworCXJlc3AubnVtX2NxX2V2ZW50cyA9IGZpbGUtPmRldmljZS0+bnVtX2NvbXA7CisKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLCAmcmVzcCwgc2l6ZW9mIHJlc3ApKQorCSAgICByZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBpbl9sZW47Cit9CisKK3NzaXplX3QgaWJfdXZlcmJzX2dldF9jb250ZXh0KHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX2dldF9jb250ZXh0ICAgICAgY21kOworCXN0cnVjdCBpYl91dmVyYnNfZ2V0X2NvbnRleHRfcmVzcCByZXNwOworCXN0cnVjdCBpYl91ZGF0YSAgICAgICAgICAgICAgICAgICB1ZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICAgICAgICAgICAgICAgICAqaWJkZXYgPSBmaWxlLT5kZXZpY2UtPmliX2RldjsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gaW5fbGVuOworCisJaWYgKG91dF9sZW4gPCBzaXplb2YgcmVzcCkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlJTklUX1VEQVRBKCZ1ZGF0YSwgYnVmICsgc2l6ZW9mIGNtZCwKKwkJICAgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSArIHNpemVvZiByZXNwLAorCQkgICBpbl9sZW4gLSBzaXplb2YgY21kLCBvdXRfbGVuIC0gc2l6ZW9mIHJlc3ApOworCisJZmlsZS0+dWNvbnRleHQgPSBpYmRldi0+YWxsb2NfdWNvbnRleHQoaWJkZXYsICZ1ZGF0YSk7CisJaWYgKElTX0VSUihmaWxlLT51Y29udGV4dCkpIHsKKwkJcmV0ID0gUFRSX0VSUihmaWxlLT51Y29udGV4dCk7CisJCWZpbGUtPnVjb250ZXh0ID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmaWxlLT51Y29udGV4dC0+ZGV2aWNlID0gaWJkZXY7CisJSU5JVF9MSVNUX0hFQUQoJmZpbGUtPnVjb250ZXh0LT5wZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZmlsZS0+dWNvbnRleHQtPm1yX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZmaWxlLT51Y29udGV4dC0+bXdfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmZpbGUtPnVjb250ZXh0LT5jcV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZmlsZS0+dWNvbnRleHQtPnFwX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZmaWxlLT51Y29udGV4dC0+c3JxX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZmaWxlLT51Y29udGV4dC0+YWhfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKworCXJlc3AuYXN5bmNfZmQgPSBmaWxlLT5hc3luY19maWxlLmZkOworCWZvciAoaSA9IDA7IGkgPCBmaWxlLT5kZXZpY2UtPm51bV9jb21wOyArK2kpCisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQuY3FfZmRfdGFiICsKKwkJCQkgaSAqIHNpemVvZiAoX191MzIpLAorCQkJCSAmZmlsZS0+Y29tcF9maWxlW2ldLmZkLCBzaXplb2YgKF9fdTMyKSkpCisJCQlnb3RvIGVycjsKKworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCisJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gaW5fbGVuOworCitlcnI6CisJaWJkZXYtPmRlYWxsb2NfdWNvbnRleHQoZmlsZS0+dWNvbnRleHQpOworCWZpbGUtPnVjb250ZXh0ID0gTlVMTDsKKworCXJldHVybiAtRUZBVUxUOworfQorCitzc2l6ZV90IGliX3V2ZXJic19xdWVyeV9kZXZpY2Uoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IGliX3V2ZXJic19xdWVyeV9kZXZpY2UgICAgICBjbWQ7CisJc3RydWN0IGliX3V2ZXJic19xdWVyeV9kZXZpY2VfcmVzcCByZXNwOworCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAgICAgICAgICAgICAgYXR0cjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKKworCWlmIChvdXRfbGVuIDwgc2l6ZW9mIHJlc3ApCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gaWJfcXVlcnlfZGV2aWNlKGZpbGUtPmRldmljZS0+aWJfZGV2LCAmYXR0cik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOworCisJcmVzcC5md192ZXIgCQkgICAgICAgPSBhdHRyLmZ3X3ZlcjsKKwlyZXNwLm5vZGVfZ3VpZCAJCSAgICAgICA9IGF0dHIubm9kZV9ndWlkOworCXJlc3Auc3lzX2ltYWdlX2d1aWQgCSAgICAgICA9IGF0dHIuc3lzX2ltYWdlX2d1aWQ7CisJcmVzcC5tYXhfbXJfc2l6ZSAJICAgICAgID0gYXR0ci5tYXhfbXJfc2l6ZTsKKwlyZXNwLnBhZ2Vfc2l6ZV9jYXAgCSAgICAgICA9IGF0dHIucGFnZV9zaXplX2NhcDsKKwlyZXNwLnZlbmRvcl9pZCAJCSAgICAgICA9IGF0dHIudmVuZG9yX2lkOworCXJlc3AudmVuZG9yX3BhcnRfaWQgCSAgICAgICA9IGF0dHIudmVuZG9yX3BhcnRfaWQ7CisJcmVzcC5od192ZXIgCQkgICAgICAgPSBhdHRyLmh3X3ZlcjsKKwlyZXNwLm1heF9xcCAJCSAgICAgICA9IGF0dHIubWF4X3FwOworCXJlc3AubWF4X3FwX3dyIAkJICAgICAgID0gYXR0ci5tYXhfcXBfd3I7CisJcmVzcC5kZXZpY2VfY2FwX2ZsYWdzIAkgICAgICAgPSBhdHRyLmRldmljZV9jYXBfZmxhZ3M7CisJcmVzcC5tYXhfc2dlIAkJICAgICAgID0gYXR0ci5tYXhfc2dlOworCXJlc3AubWF4X3NnZV9yZCAJICAgICAgID0gYXR0ci5tYXhfc2dlX3JkOworCXJlc3AubWF4X2NxIAkJICAgICAgID0gYXR0ci5tYXhfY3E7CisJcmVzcC5tYXhfY3FlIAkJICAgICAgID0gYXR0ci5tYXhfY3FlOworCXJlc3AubWF4X21yIAkJICAgICAgID0gYXR0ci5tYXhfbXI7CisJcmVzcC5tYXhfcGQgCQkgICAgICAgPSBhdHRyLm1heF9wZDsKKwlyZXNwLm1heF9xcF9yZF9hdG9tIAkgICAgICAgPSBhdHRyLm1heF9xcF9yZF9hdG9tOworCXJlc3AubWF4X2VlX3JkX2F0b20gCSAgICAgICA9IGF0dHIubWF4X2VlX3JkX2F0b207CisJcmVzcC5tYXhfcmVzX3JkX2F0b20gCSAgICAgICA9IGF0dHIubWF4X3Jlc19yZF9hdG9tOworCXJlc3AubWF4X3FwX2luaXRfcmRfYXRvbSAgICAgICA9IGF0dHIubWF4X3FwX2luaXRfcmRfYXRvbTsKKwlyZXNwLm1heF9lZV9pbml0X3JkX2F0b20gICAgICAgPSBhdHRyLm1heF9lZV9pbml0X3JkX2F0b207CisJcmVzcC5hdG9taWNfY2FwIAkgICAgICAgPSBhdHRyLmF0b21pY19jYXA7CisJcmVzcC5tYXhfZWUgCQkgICAgICAgPSBhdHRyLm1heF9lZTsKKwlyZXNwLm1heF9yZGQgCQkgICAgICAgPSBhdHRyLm1heF9yZGQ7CisJcmVzcC5tYXhfbXcgCQkgICAgICAgPSBhdHRyLm1heF9tdzsKKwlyZXNwLm1heF9yYXdfaXB2Nl9xcCAJICAgICAgID0gYXR0ci5tYXhfcmF3X2lwdjZfcXA7CisJcmVzcC5tYXhfcmF3X2V0aHlfcXAgCSAgICAgICA9IGF0dHIubWF4X3Jhd19ldGh5X3FwOworCXJlc3AubWF4X21jYXN0X2dycCAJICAgICAgID0gYXR0ci5tYXhfbWNhc3RfZ3JwOworCXJlc3AubWF4X21jYXN0X3FwX2F0dGFjaCAgICAgICA9IGF0dHIubWF4X21jYXN0X3FwX2F0dGFjaDsKKwlyZXNwLm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2ggPSBhdHRyLm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2g7CisJcmVzcC5tYXhfYWggCQkgICAgICAgPSBhdHRyLm1heF9haDsKKwlyZXNwLm1heF9mbXIgCQkgICAgICAgPSBhdHRyLm1heF9mbXI7CisJcmVzcC5tYXhfbWFwX3Blcl9mbXIgCSAgICAgICA9IGF0dHIubWF4X21hcF9wZXJfZm1yOworCXJlc3AubWF4X3NycSAJCSAgICAgICA9IGF0dHIubWF4X3NycTsKKwlyZXNwLm1heF9zcnFfd3IgCSAgICAgICA9IGF0dHIubWF4X3NycV93cjsKKwlyZXNwLm1heF9zcnFfc2dlIAkgICAgICAgPSBhdHRyLm1heF9zcnFfc2dlOworCXJlc3AubWF4X3BrZXlzIAkJICAgICAgID0gYXR0ci5tYXhfcGtleXM7CisJcmVzcC5sb2NhbF9jYV9hY2tfZGVsYXkgICAgICAgID0gYXR0ci5sb2NhbF9jYV9hY2tfZGVsYXk7CisJcmVzcC5waHlzX3BvcnRfY250CSAgICAgICA9IGZpbGUtPmRldmljZS0+aWJfZGV2LT5waHlzX3BvcnRfY250OworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKKwkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBpbl9sZW47Cit9CisKK3NzaXplX3QgaWJfdXZlcmJzX3F1ZXJ5X3BvcnQoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X3BvcnQgICAgICBjbWQ7CisJc3RydWN0IGliX3V2ZXJic19xdWVyeV9wb3J0X3Jlc3AgcmVzcDsKKwlzdHJ1Y3QgaWJfcG9ydF9hdHRyICAgICAgICAgICAgICBhdHRyOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKKworCWlmIChvdXRfbGVuIDwgc2l6ZW9mIHJlc3ApCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gaWJfcXVlcnlfcG9ydChmaWxlLT5kZXZpY2UtPmliX2RldiwgY21kLnBvcnRfbnVtLCAmYXR0cik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOworCisJcmVzcC5zdGF0ZSAJICAgICA9IGF0dHIuc3RhdGU7CisJcmVzcC5tYXhfbXR1IAkgICAgID0gYXR0ci5tYXhfbXR1OworCXJlc3AuYWN0aXZlX210dSAgICAgID0gYXR0ci5hY3RpdmVfbXR1OworCXJlc3AuZ2lkX3RibF9sZW4gICAgID0gYXR0ci5naWRfdGJsX2xlbjsKKwlyZXNwLnBvcnRfY2FwX2ZsYWdzICA9IGF0dHIucG9ydF9jYXBfZmxhZ3M7CisJcmVzcC5tYXhfbXNnX3N6ICAgICAgPSBhdHRyLm1heF9tc2dfc3o7CisJcmVzcC5iYWRfcGtleV9jbnRyICAgPSBhdHRyLmJhZF9wa2V5X2NudHI7CisJcmVzcC5xa2V5X3Zpb2xfY250ciAgPSBhdHRyLnFrZXlfdmlvbF9jbnRyOworCXJlc3AucGtleV90YmxfbGVuICAgID0gYXR0ci5wa2V5X3RibF9sZW47CisJcmVzcC5saWQgCSAgICAgPSBhdHRyLmxpZDsKKwlyZXNwLnNtX2xpZCAJICAgICA9IGF0dHIuc21fbGlkOworCXJlc3AubG1jIAkgICAgID0gYXR0ci5sbWM7CisJcmVzcC5tYXhfdmxfbnVtICAgICAgPSBhdHRyLm1heF92bF9udW07CisJcmVzcC5zbV9zbCAJICAgICA9IGF0dHIuc21fc2w7CisJcmVzcC5zdWJuZXRfdGltZW91dCAgPSBhdHRyLnN1Ym5ldF90aW1lb3V0OworCXJlc3AuaW5pdF90eXBlX3JlcGx5ID0gYXR0ci5pbml0X3R5cGVfcmVwbHk7CisJcmVzcC5hY3RpdmVfd2lkdGggICAgPSBhdHRyLmFjdGl2ZV93aWR0aDsKKwlyZXNwLmFjdGl2ZV9zcGVlZCAgICA9IGF0dHIuYWN0aXZlX3NwZWVkOworCXJlc3AucGh5c19zdGF0ZSAgICAgID0gYXR0ci5waHlzX3N0YXRlOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKKwkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBpbl9sZW47Cit9CisKK3NzaXplX3QgaWJfdXZlcmJzX3F1ZXJ5X2dpZChzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCisJCQkgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X2dpZCAgICAgIGNtZDsKKwlzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X2dpZF9yZXNwIHJlc3A7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CisKKwlpZiAob3V0X2xlbiA8IHNpemVvZiByZXNwKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOworCisJcmV0ID0gaWJfcXVlcnlfZ2lkKGZpbGUtPmRldmljZS0+aWJfZGV2LCBjbWQucG9ydF9udW0sIGNtZC5pbmRleCwKKwkJCSAgICh1bmlvbiBpYl9naWQgKikgcmVzcC5naWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAorCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGluX2xlbjsKK30KKworc3NpemVfdCBpYl91dmVyYnNfcXVlcnlfcGtleShzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCisJCQkgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgIGludCBpbl9sZW4sIGludCBvdXRfbGVuKQoreworCXN0cnVjdCBpYl91dmVyYnNfcXVlcnlfcGtleSAgICAgIGNtZDsKKwlzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X3BrZXlfcmVzcCByZXNwOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKKworCWlmIChvdXRfbGVuIDwgc2l6ZW9mIHJlc3ApCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CisKKwlyZXQgPSBpYl9xdWVyeV9wa2V5KGZpbGUtPmRldmljZS0+aWJfZGV2LCBjbWQucG9ydF9udW0sIGNtZC5pbmRleCwKKwkJCSAgICAmcmVzcC5wa2V5KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKKwkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBpbl9sZW47Cit9CisKK3NzaXplX3QgaWJfdXZlcmJzX2FsbG9jX3BkKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKKwkJCSAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX2FsbG9jX3BkICAgICAgY21kOworCXN0cnVjdCBpYl91dmVyYnNfYWxsb2NfcGRfcmVzcCByZXNwOworCXN0cnVjdCBpYl91ZGF0YSAgICAgICAgICAgICAgICB1ZGF0YTsKKwlzdHJ1Y3QgaWJfdW9iamVjdCAgICAgICAgICAgICAqdW9iajsKKwlzdHJ1Y3QgaWJfcGQgICAgICAgICAgICAgICAgICAqcGQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKKworCWlmIChvdXRfbGVuIDwgc2l6ZW9mIHJlc3ApCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJSU5JVF9VREFUQSgmdWRhdGEsIGJ1ZiArIHNpemVvZiBjbWQsCisJCSAgICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UgKyBzaXplb2YgcmVzcCwKKwkJICAgaW5fbGVuIC0gc2l6ZW9mIGNtZCwgb3V0X2xlbiAtIHNpemVvZiByZXNwKTsKKworCXVvYmogPSBrbWFsbG9jKHNpemVvZiAqdW9iaiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1b2JqKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVvYmotPmNvbnRleHQgPSBmaWxlLT51Y29udGV4dDsKKworCXBkID0gZmlsZS0+ZGV2aWNlLT5pYl9kZXYtPmFsbG9jX3BkKGZpbGUtPmRldmljZS0+aWJfZGV2LAorCQkJCQkgICAgZmlsZS0+dWNvbnRleHQsICZ1ZGF0YSk7CisJaWYgKElTX0VSUihwZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihwZCk7CisJCWdvdG8gZXJyOworCX0KKworCXBkLT5kZXZpY2UgID0gZmlsZS0+ZGV2aWNlLT5pYl9kZXY7CisJcGQtPnVvYmplY3QgPSB1b2JqOworCWF0b21pY19zZXQoJnBkLT51c2VjbnQsIDApOworCityZXRyeToKKwlpZiAoIWlkcl9wcmVfZ2V0KCZpYl91dmVyYnNfcGRfaWRyLCBHRlBfS0VSTkVMKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9wZDsKKwl9CisKKwlkb3duKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlyZXQgPSBpZHJfZ2V0X25ldygmaWJfdXZlcmJzX3BkX2lkciwgcGQsICZ1b2JqLT5pZCk7CisJdXAoJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJaWYgKHJldCA9PSAtRUFHQUlOKQorCQlnb3RvIHJldHJ5OworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BkOworCisJc3Bpbl9sb2NrX2lycSgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCWxpc3RfYWRkX3RhaWwoJnVvYmotPmxpc3QsICZmaWxlLT51Y29udGV4dC0+cGRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisKKwltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKKwlyZXNwLnBkX2hhbmRsZSA9IHVvYmotPmlkOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKKwkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX2xpc3Q7CisJfQorCisJcmV0dXJuIGluX2xlbjsKKworZXJyX2xpc3Q6CisgCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisKKwlkb3duKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfcGRfaWRyLCB1b2JqLT5pZCk7CisJdXAoJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCitlcnJfcGQ6CisJaWJfZGVhbGxvY19wZChwZCk7CisKK2VycjoKKwlrZnJlZSh1b2JqKTsKKwlyZXR1cm4gcmV0OworfQorCitzc2l6ZV90IGliX3V2ZXJic19kZWFsbG9jX3BkKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKKwkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IGliX3V2ZXJic19kZWFsbG9jX3BkIGNtZDsKKwlzdHJ1Y3QgaWJfcGQgICAgICAgICAgICAgICAqcGQ7CisJc3RydWN0IGliX3VvYmplY3QgICAgICAgICAgKnVvYmo7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlkb3duKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCXBkID0gaWRyX2ZpbmQoJmliX3V2ZXJic19wZF9pZHIsIGNtZC5wZF9oYW5kbGUpOworCWlmICghcGQgfHwgcGQtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCisJCWdvdG8gb3V0OworCisJdW9iaiA9IHBkLT51b2JqZWN0OworCisJcmV0ID0gaWJfZGVhbGxvY19wZChwZCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfcGRfaWRyLCBjbWQucGRfaGFuZGxlKTsKKworCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisKKwlrZnJlZSh1b2JqKTsKKworb3V0OgorCXVwKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47Cit9CisKK3NzaXplX3QgaWJfdXZlcmJzX3JlZ19tcihzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCisJCQkgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKKwkJCSBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX3JlZ19tciAgICAgIGNtZDsKKwlzdHJ1Y3QgaWJfdXZlcmJzX3JlZ19tcl9yZXNwIHJlc3A7CisJc3RydWN0IGliX3VkYXRhICAgICAgICAgICAgICB1ZGF0YTsKKwlzdHJ1Y3QgaWJfdW1lbV9vYmplY3QgICAgICAgKm9iajsKKwlzdHJ1Y3QgaWJfcGQgICAgICAgICAgICAgICAgKnBkOworCXN0cnVjdCBpYl9tciAgICAgICAgICAgICAgICAqbXI7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CisKKwlpZiAob3V0X2xlbiA8IHNpemVvZiByZXNwKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCUlOSVRfVURBVEEoJnVkYXRhLCBidWYgKyBzaXplb2YgY21kLAorCQkgICAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlICsgc2l6ZW9mIHJlc3AsCisJCSAgIGluX2xlbiAtIHNpemVvZiBjbWQsIG91dF9sZW4gLSBzaXplb2YgcmVzcCk7CisKKwlpZiAoKGNtZC5zdGFydCAmIH5QQUdFX01BU0spICE9IChjbWQuaGNhX3ZhICYgflBBR0VfTUFTSykpCisJCXJldHVybiAtRUlOVkFMOworCisJb2JqID0ga21hbGxvYyhzaXplb2YgKm9iaiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmopCisJCXJldHVybiAtRU5PTUVNOworCisJb2JqLT51b2JqZWN0LmNvbnRleHQgPSBmaWxlLT51Y29udGV4dDsKKworCS8qCisJICogV2UgYXNrIGZvciB3cml0YWJsZSBtZW1vcnkgaWYgYW55IGFjY2VzcyBmbGFncyBvdGhlciB0aGFuCisJICogInJlbW90ZSByZWFkIiBhcmUgc2V0LiAgIkxvY2FsIHdyaXRlIiBhbmQgInJlbW90ZSB3cml0ZSIKKwkgKiBvYnZpb3VzbHkgcmVxdWlyZSB3cml0ZSBhY2Nlc3MuICAiUmVtb3RlIGF0b21pYyIgY2FuIGRvCisJICogdGhpbmdzIGxpa2UgZmV0Y2ggYW5kIGFkZCwgd2hpY2ggd2lsbCBtb2RpZnkgbWVtb3J5LCBhbmQKKwkgKiAiTVcgYmluZCIgY2FuIGNoYW5nZSBwZXJtaXNzaW9ucyBieSBiaW5kaW5nIGEgd2luZG93LgorCSAqLworCXJldCA9IGliX3VtZW1fZ2V0KGZpbGUtPmRldmljZS0+aWJfZGV2LCAmb2JqLT51bWVtLAorCQkJICAodm9pZCAqKSAodW5zaWduZWQgbG9uZykgY21kLnN0YXJ0LCBjbWQubGVuZ3RoLAorCQkJICAhIShjbWQuYWNjZXNzX2ZsYWdzICYgfklCX0FDQ0VTU19SRU1PVEVfUkVBRCkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlvYmotPnVtZW0udmlydF9iYXNlID0gY21kLmhjYV92YTsKKworCWRvd24oJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJcGQgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSk7CisJaWYgKCFwZCB8fCBwZC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl91cDsKKwl9CisKKwlpZiAoIXBkLT5kZXZpY2UtPnJlZ191c2VyX21yKSB7CisJCXJldCA9IC1FTk9TWVM7CisJCWdvdG8gZXJyX3VwOworCX0KKworCW1yID0gcGQtPmRldmljZS0+cmVnX3VzZXJfbXIocGQsICZvYmotPnVtZW0sIGNtZC5hY2Nlc3NfZmxhZ3MsICZ1ZGF0YSk7CisJaWYgKElTX0VSUihtcikpIHsKKwkJcmV0ID0gUFRSX0VSUihtcik7CisJCWdvdG8gZXJyX3VwOworCX0KKworCW1yLT5kZXZpY2UgID0gcGQtPmRldmljZTsKKwltci0+cGQgICAgICA9IHBkOworCW1yLT51b2JqZWN0ID0gJm9iai0+dW9iamVjdDsKKwlhdG9taWNfaW5jKCZwZC0+dXNlY250KTsKKwlhdG9taWNfc2V0KCZtci0+dXNlY250LCAwKTsKKworCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOworCXJlc3AubGtleSA9IG1yLT5sa2V5OworCXJlc3AucmtleSA9IG1yLT5ya2V5OworCityZXRyeToKKwlpZiAoIWlkcl9wcmVfZ2V0KCZpYl91dmVyYnNfbXJfaWRyLCBHRlBfS0VSTkVMKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl91bnJlZzsKKwl9CisKKwlyZXQgPSBpZHJfZ2V0X25ldygmaWJfdXZlcmJzX21yX2lkciwgbXIsICZvYmotPnVvYmplY3QuaWQpOworCisJaWYgKHJldCA9PSAtRUFHQUlOKQorCQlnb3RvIHJldHJ5OworCWlmIChyZXQpCisJCWdvdG8gZXJyX3VucmVnOworCisJcmVzcC5tcl9oYW5kbGUgPSBvYmotPnVvYmplY3QuaWQ7CisKKwlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmb2JqLT51b2JqZWN0Lmxpc3QsICZmaWxlLT51Y29udGV4dC0+bXJfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAorCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBlcnJfbGlzdDsKKwl9CisKKwl1cCgmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisKKwlyZXR1cm4gaW5fbGVuOworCitlcnJfbGlzdDoKKwlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJbGlzdF9kZWwoJm9iai0+dW9iamVjdC5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKworZXJyX3VucmVnOgorCWliX2RlcmVnX21yKG1yKTsKKworZXJyX3VwOgorCXVwKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCWliX3VtZW1fcmVsZWFzZShmaWxlLT5kZXZpY2UtPmliX2RldiwgJm9iai0+dW1lbSk7CisKK2Vycl9mcmVlOgorCWtmcmVlKG9iaik7CisJcmV0dXJuIHJldDsKK30KKworc3NpemVfdCBpYl91dmVyYnNfZGVyZWdfbXIoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKKwkJCSAgIGludCBvdXRfbGVuKQoreworCXN0cnVjdCBpYl91dmVyYnNfZGVyZWdfbXIgY21kOworCXN0cnVjdCBpYl9tciAgICAgICAgICAgICAqbXI7CisJc3RydWN0IGliX3VtZW1fb2JqZWN0ICAgICptZW1vYmo7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJZG93bigmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisKKwltciA9IGlkcl9maW5kKCZpYl91dmVyYnNfbXJfaWRyLCBjbWQubXJfaGFuZGxlKTsKKwlpZiAoIW1yIHx8IG1yLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KQorCQlnb3RvIG91dDsKKworCW1lbW9iaiA9IGNvbnRhaW5lcl9vZihtci0+dW9iamVjdCwgc3RydWN0IGliX3VtZW1fb2JqZWN0LCB1b2JqZWN0KTsKKworCXJldCA9IGliX2RlcmVnX21yKG1yKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlkcl9yZW1vdmUoJmliX3V2ZXJic19tcl9pZHIsIGNtZC5tcl9oYW5kbGUpOworCisJc3Bpbl9sb2NrX2lycSgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCWxpc3RfZGVsKCZtZW1vYmotPnVvYmplY3QubGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisKKwlpYl91bWVtX3JlbGVhc2UoZmlsZS0+ZGV2aWNlLT5pYl9kZXYsICZtZW1vYmotPnVtZW0pOworCWtmcmVlKG1lbW9iaik7CisKK291dDoKKwl1cCgmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOworfQorCitzc2l6ZV90IGliX3V2ZXJic19jcmVhdGVfY3Eoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsIGludCBpbl9sZW4sCisJCQkgICAgaW50IG91dF9sZW4pCit7CisJc3RydWN0IGliX3V2ZXJic19jcmVhdGVfY3EgICAgICBjbWQ7CisJc3RydWN0IGliX3V2ZXJic19jcmVhdGVfY3FfcmVzcCByZXNwOworCXN0cnVjdCBpYl91ZGF0YSAgICAgICAgICAgICAgICAgdWRhdGE7CisJc3RydWN0IGliX3VvYmplY3QgICAgICAgICAgICAgICp1b2JqOworCXN0cnVjdCBpYl9jcSAgICAgICAgICAgICAgICAgICAqY3E7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CisKKwlpZiAob3V0X2xlbiA8IHNpemVvZiByZXNwKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCUlOSVRfVURBVEEoJnVkYXRhLCBidWYgKyBzaXplb2YgY21kLAorCQkgICAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlICsgc2l6ZW9mIHJlc3AsCisJCSAgIGluX2xlbiAtIHNpemVvZiBjbWQsIG91dF9sZW4gLSBzaXplb2YgcmVzcCk7CisKKwlpZiAoY21kLmV2ZW50X2hhbmRsZXIgPj0gZmlsZS0+ZGV2aWNlLT5udW1fY29tcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1b2JqID0ga21hbGxvYyhzaXplb2YgKnVvYmosIEdGUF9LRVJORUwpOworCWlmICghdW9iaikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1b2JqLT51c2VyX2hhbmRsZSA9IGNtZC51c2VyX2hhbmRsZTsKKwl1b2JqLT5jb250ZXh0ICAgICA9IGZpbGUtPnVjb250ZXh0OworCisJY3EgPSBmaWxlLT5kZXZpY2UtPmliX2Rldi0+Y3JlYXRlX2NxKGZpbGUtPmRldmljZS0+aWJfZGV2LCBjbWQuY3FlLAorCQkJCQkgICAgIGZpbGUtPnVjb250ZXh0LCAmdWRhdGEpOworCWlmIChJU19FUlIoY3EpKSB7CisJCXJldCA9IFBUUl9FUlIoY3EpOworCQlnb3RvIGVycjsKKwl9CisKKwljcS0+ZGV2aWNlICAgICAgICA9IGZpbGUtPmRldmljZS0+aWJfZGV2OworCWNxLT51b2JqZWN0ICAgICAgID0gdW9iajsKKwljcS0+Y29tcF9oYW5kbGVyICA9IGliX3V2ZXJic19jb21wX2hhbmRsZXI7CisJY3EtPmV2ZW50X2hhbmRsZXIgPSBpYl91dmVyYnNfY3FfZXZlbnRfaGFuZGxlcjsKKwljcS0+Y3FfY29udGV4dCAgICA9IGZpbGU7CisJYXRvbWljX3NldCgmY3EtPnVzZWNudCwgMCk7CisKK3JldHJ5OgorCWlmICghaWRyX3ByZV9nZXQoJmliX3V2ZXJic19jcV9pZHIsIEdGUF9LRVJORUwpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2NxOworCX0KKworCWRvd24oJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXJldCA9IGlkcl9nZXRfbmV3KCZpYl91dmVyYnNfY3FfaWRyLCBjcSwgJnVvYmotPmlkKTsKKwl1cCgmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gcmV0cnk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY3E7CisKKwlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmdW9iai0+bGlzdCwgJmZpbGUtPnVjb250ZXh0LT5jcV9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKworCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOworCXJlc3AuY3FfaGFuZGxlID0gdW9iai0+aWQ7CisJcmVzcC5jcWUgICAgICAgPSBjcS0+Y3FlOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKKwkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX2xpc3Q7CisJfQorCisJcmV0dXJuIGluX2xlbjsKKworZXJyX2xpc3Q6CisgCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisKKwlkb3duKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfY3FfaWRyLCB1b2JqLT5pZCk7CisJdXAoJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCitlcnJfY3E6CisJaWJfZGVzdHJveV9jcShjcSk7CisKK2VycjoKKwlrZnJlZSh1b2JqKTsKKwlyZXR1cm4gcmV0OworfQorCitzc2l6ZV90IGliX3V2ZXJic19kZXN0cm95X2NxKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKKwkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKKwkJCSAgICAgaW50IG91dF9sZW4pCit7CisJc3RydWN0IGliX3V2ZXJic19kZXN0cm95X2NxIGNtZDsKKwlzdHJ1Y3QgaWJfY3EgICAgICAgICAgICAgICAqY3E7CisJc3RydWN0IGliX3VvYmplY3QgICAgICAgICAgKnVvYmo7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlkb3duKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCWNxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIGNtZC5jcV9oYW5kbGUpOworCWlmICghY3EgfHwgY3EtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCisJCWdvdG8gb3V0OworCisJdW9iaiA9IGNxLT51b2JqZWN0OworCisJcmV0ID0gaWJfZGVzdHJveV9jcShjcSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuY3FfaGFuZGxlKTsKKworCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisKKwlrZnJlZSh1b2JqKTsKKworb3V0OgorCXVwKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47Cit9CisKK3NzaXplX3QgaWJfdXZlcmJzX2NyZWF0ZV9xcChzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCisJCQkgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKKwkJCSAgICBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9xcCAgICAgIGNtZDsKKwlzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9xcF9yZXNwIHJlc3A7CisJc3RydWN0IGliX3VkYXRhICAgICAgICAgICAgICAgICB1ZGF0YTsKKwlzdHJ1Y3QgaWJfdW9iamVjdCAgICAgICAgICAgICAgKnVvYmo7CisJc3RydWN0IGliX3BkICAgICAgICAgICAgICAgICAgICpwZDsKKwlzdHJ1Y3QgaWJfY3EgICAgICAgICAgICAgICAgICAgKnNjcSwgKnJjcTsKKwlzdHJ1Y3QgaWJfcXAgICAgICAgICAgICAgICAgICAgKnFwOworCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgICAgICAgICAgYXR0cjsKKwlpbnQgcmV0OworCisJaWYgKG91dF9sZW4gPCBzaXplb2YgcmVzcCkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlJTklUX1VEQVRBKCZ1ZGF0YSwgYnVmICsgc2l6ZW9mIGNtZCwKKwkJICAgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSArIHNpemVvZiByZXNwLAorCQkgICBpbl9sZW4gLSBzaXplb2YgY21kLCBvdXRfbGVuIC0gc2l6ZW9mIHJlc3ApOworCisJdW9iaiA9IGttYWxsb2Moc2l6ZW9mICp1b2JqLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVvYmopCisJCXJldHVybiAtRU5PTUVNOworCisJZG93bigmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisKKwlwZCAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSk7CisJc2NxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIGNtZC5zZW5kX2NxX2hhbmRsZSk7CisJcmNxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIGNtZC5yZWN2X2NxX2hhbmRsZSk7CisKKwlpZiAoIXBkICB8fCBwZC0+dW9iamVjdC0+Y29udGV4dCAgIT0gZmlsZS0+dWNvbnRleHQgfHwKKwkgICAgIXNjcSB8fCBzY3EtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQgfHwKKwkgICAgIXJjcSB8fCByY3EtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfdXA7CisJfQorCisJYXR0ci5ldmVudF9oYW5kbGVyID0gaWJfdXZlcmJzX3FwX2V2ZW50X2hhbmRsZXI7CisJYXR0ci5xcF9jb250ZXh0ICAgID0gZmlsZTsKKwlhdHRyLnNlbmRfY3EgICAgICAgPSBzY3E7CisJYXR0ci5yZWN2X2NxICAgICAgID0gcmNxOworCWF0dHIuc3JxICAgICAgICAgICA9IE5VTEw7CisJYXR0ci5zcV9zaWdfdHlwZSAgID0gY21kLnNxX3NpZ19hbGwgPyBJQl9TSUdOQUxfQUxMX1dSIDogSUJfU0lHTkFMX1JFUV9XUjsKKwlhdHRyLnFwX3R5cGUgICAgICAgPSBjbWQucXBfdHlwZTsKKworCWF0dHIuY2FwLm1heF9zZW5kX3dyICAgICA9IGNtZC5tYXhfc2VuZF93cjsKKwlhdHRyLmNhcC5tYXhfcmVjdl93ciAgICAgPSBjbWQubWF4X3JlY3Zfd3I7CisJYXR0ci5jYXAubWF4X3NlbmRfc2dlICAgID0gY21kLm1heF9zZW5kX3NnZTsKKwlhdHRyLmNhcC5tYXhfcmVjdl9zZ2UgICAgPSBjbWQubWF4X3JlY3Zfc2dlOworCWF0dHIuY2FwLm1heF9pbmxpbmVfZGF0YSA9IGNtZC5tYXhfaW5saW5lX2RhdGE7CisKKwl1b2JqLT51c2VyX2hhbmRsZSA9IGNtZC51c2VyX2hhbmRsZTsKKwl1b2JqLT5jb250ZXh0ICAgICA9IGZpbGUtPnVjb250ZXh0OworCisJcXAgPSBwZC0+ZGV2aWNlLT5jcmVhdGVfcXAocGQsICZhdHRyLCAmdWRhdGEpOworCWlmIChJU19FUlIocXApKSB7CisJCXJldCA9IFBUUl9FUlIocXApOworCQlnb3RvIGVycl91cDsKKwl9CisKKwlxcC0+ZGV2aWNlICAgICAJICA9IHBkLT5kZXZpY2U7CisJcXAtPnBkICAgICAgICAgCSAgPSBwZDsKKwlxcC0+c2VuZF9jcSAgICAJICA9IGF0dHIuc2VuZF9jcTsKKwlxcC0+cmVjdl9jcSAgICAJICA9IGF0dHIucmVjdl9jcTsKKwlxcC0+c3JxCSAgICAgICAJICA9IGF0dHIuc3JxOworCXFwLT51b2JqZWN0ICAgICAgID0gdW9iajsKKwlxcC0+ZXZlbnRfaGFuZGxlciA9IGF0dHIuZXZlbnRfaGFuZGxlcjsKKwlxcC0+cXBfY29udGV4dCAgICA9IGF0dHIucXBfY29udGV4dDsKKwlxcC0+cXBfdHlwZQkgID0gYXR0ci5xcF90eXBlOworCWF0b21pY19pbmMoJnBkLT51c2VjbnQpOworCWF0b21pY19pbmMoJmF0dHIuc2VuZF9jcS0+dXNlY250KTsKKwlhdG9taWNfaW5jKCZhdHRyLnJlY3ZfY3EtPnVzZWNudCk7CisJaWYgKGF0dHIuc3JxKQorCQlhdG9taWNfaW5jKCZhdHRyLnNycS0+dXNlY250KTsKKworCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOworCXJlc3AucXBuID0gcXAtPnFwX251bTsKKworcmV0cnk6CisJaWYgKCFpZHJfcHJlX2dldCgmaWJfdXZlcmJzX3FwX2lkciwgR0ZQX0tFUk5FTCkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZGVzdHJveTsKKwl9CisKKwlyZXQgPSBpZHJfZ2V0X25ldygmaWJfdXZlcmJzX3FwX2lkciwgcXAsICZ1b2JqLT5pZCk7CisKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gcmV0cnk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZGVzdHJveTsKKworCXJlc3AucXBfaGFuZGxlID0gdW9iai0+aWQ7CisKKwlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmdW9iai0+bGlzdCwgJmZpbGUtPnVjb250ZXh0LT5xcF9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCisJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGVycl9saXN0OworCX0KKworCXVwKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCXJldHVybiBpbl9sZW47CisKK2Vycl9saXN0OgorCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisKK2Vycl9kZXN0cm95OgorCWliX2Rlc3Ryb3lfcXAocXApOworCitlcnJfdXA6CisJdXAoJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJa2ZyZWUodW9iaik7CisJcmV0dXJuIHJldDsKK30KKworc3NpemVfdCBpYl91dmVyYnNfbW9kaWZ5X3FwKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKKwkJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgaW5fbGVuLAorCQkJICAgIGludCBvdXRfbGVuKQoreworCXN0cnVjdCBpYl91dmVyYnNfbW9kaWZ5X3FwIGNtZDsKKwlzdHJ1Y3QgaWJfcXAgICAgICAgICAgICAgICpxcDsKKwlzdHJ1Y3QgaWJfcXBfYXR0ciAgICAgICAgICphdHRyOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWF0dHIgPSBrbWFsbG9jKHNpemVvZiAqYXR0ciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhdHRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRvd24oJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJcXAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3FwX2lkciwgY21kLnFwX2hhbmRsZSk7CisJaWYgKCFxcCB8fCBxcC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlhdHRyLT5xcF9zdGF0ZSAJCSAgPSBjbWQucXBfc3RhdGU7CisJYXR0ci0+Y3VyX3FwX3N0YXRlIAkgID0gY21kLmN1cl9xcF9zdGF0ZTsKKwlhdHRyLT5wYXRoX210dSAJCSAgPSBjbWQucGF0aF9tdHU7CisJYXR0ci0+cGF0aF9taWdfc3RhdGUgCSAgPSBjbWQucGF0aF9taWdfc3RhdGU7CisJYXR0ci0+cWtleSAJCSAgPSBjbWQucWtleTsKKwlhdHRyLT5ycV9wc24gCQkgID0gY21kLnJxX3BzbjsKKwlhdHRyLT5zcV9wc24gCQkgID0gY21kLnNxX3BzbjsKKwlhdHRyLT5kZXN0X3FwX251bSAJICA9IGNtZC5kZXN0X3FwX251bTsKKwlhdHRyLT5xcF9hY2Nlc3NfZmxhZ3MgCSAgPSBjbWQucXBfYWNjZXNzX2ZsYWdzOworCWF0dHItPnBrZXlfaW5kZXggCSAgPSBjbWQucGtleV9pbmRleDsKKwlhdHRyLT5hbHRfcGtleV9pbmRleCAJICA9IGNtZC5wa2V5X2luZGV4OworCWF0dHItPmVuX3NxZF9hc3luY19ub3RpZnkgPSBjbWQuZW5fc3FkX2FzeW5jX25vdGlmeTsKKwlhdHRyLT5tYXhfcmRfYXRvbWljIAkgID0gY21kLm1heF9yZF9hdG9taWM7CisJYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljICA9IGNtZC5tYXhfZGVzdF9yZF9hdG9taWM7CisJYXR0ci0+bWluX3Jucl90aW1lciAJICA9IGNtZC5taW5fcm5yX3RpbWVyOworCWF0dHItPnBvcnRfbnVtIAkJICA9IGNtZC5wb3J0X251bTsKKwlhdHRyLT50aW1lb3V0IAkJICA9IGNtZC50aW1lb3V0OworCWF0dHItPnJldHJ5X2NudCAJICA9IGNtZC5yZXRyeV9jbnQ7CisJYXR0ci0+cm5yX3JldHJ5IAkgID0gY21kLnJucl9yZXRyeTsKKwlhdHRyLT5hbHRfcG9ydF9udW0gCSAgPSBjbWQuYWx0X3BvcnRfbnVtOworCWF0dHItPmFsdF90aW1lb3V0IAkgID0gY21kLmFsdF90aW1lb3V0OworCisJbWVtY3B5KGF0dHItPmFoX2F0dHIuZ3JoLmRnaWQucmF3LCBjbWQuZGVzdC5kZ2lkLCAxNik7CisJYXR0ci0+YWhfYXR0ci5ncmguZmxvd19sYWJlbCAgICAgICAgPSBjbWQuZGVzdC5mbG93X2xhYmVsOworCWF0dHItPmFoX2F0dHIuZ3JoLnNnaWRfaW5kZXggICAgICAgID0gY21kLmRlc3Quc2dpZF9pbmRleDsKKwlhdHRyLT5haF9hdHRyLmdyaC5ob3BfbGltaXQgICAgICAgICA9IGNtZC5kZXN0LmhvcF9saW1pdDsKKwlhdHRyLT5haF9hdHRyLmdyaC50cmFmZmljX2NsYXNzICAgICA9IGNtZC5kZXN0LnRyYWZmaWNfY2xhc3M7CisJYXR0ci0+YWhfYXR0ci5kbGlkIAkgICAgCSAgICA9IGNtZC5kZXN0LmRsaWQ7CisJYXR0ci0+YWhfYXR0ci5zbCAgIAkgICAgCSAgICA9IGNtZC5kZXN0LnNsOworCWF0dHItPmFoX2F0dHIuc3JjX3BhdGhfYml0cyAJICAgID0gY21kLmRlc3Quc3JjX3BhdGhfYml0czsKKwlhdHRyLT5haF9hdHRyLnN0YXRpY19yYXRlICAgCSAgICA9IGNtZC5kZXN0LnN0YXRpY19yYXRlOworCWF0dHItPmFoX2F0dHIuYWhfZmxhZ3MgCSAgICAJICAgID0gY21kLmRlc3QuaXNfZ2xvYmFsID8gSUJfQUhfR1JIIDogMDsKKwlhdHRyLT5haF9hdHRyLnBvcnRfbnVtIAkgICAgCSAgICA9IGNtZC5kZXN0LnBvcnRfbnVtOworCisJbWVtY3B5KGF0dHItPmFsdF9haF9hdHRyLmdyaC5kZ2lkLnJhdywgY21kLmFsdF9kZXN0LmRnaWQsIDE2KTsKKwlhdHRyLT5hbHRfYWhfYXR0ci5ncmguZmxvd19sYWJlbCAgICA9IGNtZC5hbHRfZGVzdC5mbG93X2xhYmVsOworCWF0dHItPmFsdF9haF9hdHRyLmdyaC5zZ2lkX2luZGV4ICAgID0gY21kLmFsdF9kZXN0LnNnaWRfaW5kZXg7CisJYXR0ci0+YWx0X2FoX2F0dHIuZ3JoLmhvcF9saW1pdCAgICAgPSBjbWQuYWx0X2Rlc3QuaG9wX2xpbWl0OworCWF0dHItPmFsdF9haF9hdHRyLmdyaC50cmFmZmljX2NsYXNzID0gY21kLmFsdF9kZXN0LnRyYWZmaWNfY2xhc3M7CisJYXR0ci0+YWx0X2FoX2F0dHIuZGxpZCAJICAgIAkgICAgPSBjbWQuYWx0X2Rlc3QuZGxpZDsKKwlhdHRyLT5hbHRfYWhfYXR0ci5zbCAgIAkgICAgCSAgICA9IGNtZC5hbHRfZGVzdC5zbDsKKwlhdHRyLT5hbHRfYWhfYXR0ci5zcmNfcGF0aF9iaXRzICAgICA9IGNtZC5hbHRfZGVzdC5zcmNfcGF0aF9iaXRzOworCWF0dHItPmFsdF9haF9hdHRyLnN0YXRpY19yYXRlICAgICAgID0gY21kLmFsdF9kZXN0LnN0YXRpY19yYXRlOworCWF0dHItPmFsdF9haF9hdHRyLmFoX2ZsYWdzIAkgICAgPSBjbWQuYWx0X2Rlc3QuaXNfZ2xvYmFsID8gSUJfQUhfR1JIIDogMDsKKwlhdHRyLT5hbHRfYWhfYXR0ci5wb3J0X251bSAJICAgID0gY21kLmFsdF9kZXN0LnBvcnRfbnVtOworCisJcmV0ID0gaWJfbW9kaWZ5X3FwKHFwLCBhdHRyLCBjbWQuYXR0cl9tYXNrKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGluX2xlbjsKKworb3V0OgorCXVwKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlrZnJlZShhdHRyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3NzaXplX3QgaWJfdXZlcmJzX2Rlc3Ryb3lfcXAoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgaW5fbGVuLAorCQkJICAgICBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfcXAgY21kOworCXN0cnVjdCBpYl9xcCAgICAgICAgICAgICAgICpxcDsKKwlzdHJ1Y3QgaWJfdW9iamVjdCAgICAgICAgICAqdW9iajsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWRvd24oJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJcXAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3FwX2lkciwgY21kLnFwX2hhbmRsZSk7CisJaWYgKCFxcCB8fCBxcC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkKKwkJZ290byBvdXQ7CisKKwl1b2JqID0gcXAtPnVvYmplY3Q7CisKKwlyZXQgPSBpYl9kZXN0cm95X3FwKHFwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlkcl9yZW1vdmUoJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUpOworCisJc3Bpbl9sb2NrX2lycSgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKworCWtmcmVlKHVvYmopOworCitvdXQ6CisJdXAoJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKK30KKworc3NpemVfdCBpYl91dmVyYnNfYXR0YWNoX21jYXN0KHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKKwkJCSAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgaW5fbGVuLAorCQkJICAgICAgIGludCBvdXRfbGVuKQoreworCXN0cnVjdCBpYl91dmVyYnNfYXR0YWNoX21jYXN0IGNtZDsKKwlzdHJ1Y3QgaWJfcXAgICAgICAgICAgICAgICAgICpxcDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJZG93bigmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisKKwlxcCA9IGlkcl9maW5kKCZpYl91dmVyYnNfcXBfaWRyLCBjbWQucXBfaGFuZGxlKTsKKwlpZiAocXAgJiYgcXAtPnVvYmplY3QtPmNvbnRleHQgPT0gZmlsZS0+dWNvbnRleHQpCisJCXJldCA9IGliX2F0dGFjaF9tY2FzdChxcCwgKHVuaW9uIGliX2dpZCAqKSBjbWQuZ2lkLCBjbWQubWxpZCk7CisKKwl1cCgmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOworfQorCitzc2l6ZV90IGliX3V2ZXJic19kZXRhY2hfbWNhc3Qoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsIGludCBpbl9sZW4sCisJCQkgICAgICAgaW50IG91dF9sZW4pCit7CisJc3RydWN0IGliX3V2ZXJic19kZXRhY2hfbWNhc3QgY21kOworCXN0cnVjdCBpYl9xcCAgICAgICAgICAgICAgICAgKnFwOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlkb3duKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCXFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUpOworCWlmIChxcCAmJiBxcC0+dW9iamVjdC0+Y29udGV4dCA9PSBmaWxlLT51Y29udGV4dCkKKwkJcmV0ID0gaWJfZGV0YWNoX21jYXN0KHFwLCAodW5pb24gaWJfZ2lkICopIGNtZC5naWQsIGNtZC5tbGlkKTsKKworCXVwKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmJlMDNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpAQCAtMCwwICsxLDY5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqICRJZDogdXZlcmJzX21haW4uYyAyNzMzIDIwMDUtMDYtMjggMTk6MTQ6MzRaIHJvbGFuZCAkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJ1dmVyYnMuaCIKKworTU9EVUxFX0FVVEhPUigiUm9sYW5kIERyZWllciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmZpbmlCYW5kIHVzZXJzcGFjZSB2ZXJicyBhY2Nlc3MiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKKworI2RlZmluZSBJTkZJTklCQU5ERVZFTlRGU19NQUdJQwkweDQ5NDI2NTc2CS8qICJJQmV2IiAqLworCitlbnVtIHsKKwlJQl9VVkVSQlNfTUFKT1IgICAgICAgPSAyMzEsCisJSUJfVVZFUkJTX0JBU0VfTUlOT1IgID0gMTkyLAorCUlCX1VWRVJCU19NQVhfREVWSUNFUyA9IDMyCit9OworCisjZGVmaW5lIElCX1VWRVJCU19CQVNFX0RFVglNS0RFVihJQl9VVkVSQlNfTUFKT1IsIElCX1VWRVJCU19CQVNFX01JTk9SKQorCitERUNMQVJFX01VVEVYKGliX3V2ZXJic19pZHJfbXV0ZXgpOworREVGSU5FX0lEUihpYl91dmVyYnNfcGRfaWRyKTsKK0RFRklORV9JRFIoaWJfdXZlcmJzX21yX2lkcik7CitERUZJTkVfSURSKGliX3V2ZXJic19td19pZHIpOworREVGSU5FX0lEUihpYl91dmVyYnNfYWhfaWRyKTsKK0RFRklORV9JRFIoaWJfdXZlcmJzX2NxX2lkcik7CitERUZJTkVfSURSKGliX3V2ZXJic19xcF9pZHIpOworCitzdGF0aWMgc3BpbmxvY2tfdCBtYXBfbG9jazsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfbWFwLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpOworCitzdGF0aWMgc3NpemVfdCAoKnV2ZXJic19jbWRfdGFibGVbXSkoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKKwkJCQkgICAgIGludCBvdXRfbGVuKSA9IHsKKwlbSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUEFSQU1TXSAgPSBpYl91dmVyYnNfcXVlcnlfcGFyYW1zLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVF0gICA9IGliX3V2ZXJic19nZXRfY29udGV4dCwKKwlbSUJfVVNFUl9WRVJCU19DTURfUVVFUllfREVWSUNFXSAgPSBpYl91dmVyYnNfcXVlcnlfZGV2aWNlLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9QT1JUXSAgICA9IGliX3V2ZXJic19xdWVyeV9wb3J0LAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9HSURdICAgICA9IGliX3V2ZXJic19xdWVyeV9naWQsCisJW0lCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1BLRVldICAgID0gaWJfdXZlcmJzX3F1ZXJ5X3BrZXksCisJW0lCX1VTRVJfVkVSQlNfQ01EX0FMTE9DX1BEXSAgICAgID0gaWJfdXZlcmJzX2FsbG9jX3BkLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERUFMTE9DX1BEXSAgICA9IGliX3V2ZXJic19kZWFsbG9jX3BkLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9SRUdfTVJdICAgICAgICA9IGliX3V2ZXJic19yZWdfbXIsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0RFUkVHX01SXSAgICAgID0gaWJfdXZlcmJzX2RlcmVnX21yLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ1FdICAgICA9IGliX3V2ZXJic19jcmVhdGVfY3EsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfQ1FdICAgID0gaWJfdXZlcmJzX2Rlc3Ryb3lfY3EsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9RUF0gICAgID0gaWJfdXZlcmJzX2NyZWF0ZV9xcCwKKwlbSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1FQXSAgICAgPSBpYl91dmVyYnNfbW9kaWZ5X3FwLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1FQXSAgICA9IGliX3V2ZXJic19kZXN0cm95X3FwLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9BVFRBQ0hfTUNBU1RdICA9IGliX3V2ZXJic19hdHRhY2hfbWNhc3QsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0RFVEFDSF9NQ0FTVF0gID0gaWJfdXZlcmJzX2RldGFjaF9tY2FzdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnV2ZXJic19ldmVudF9tbnQ7CisKK3N0YXRpYyB2b2lkIGliX3V2ZXJic19hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgdm9pZCBpYl91dmVyYnNfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworCitzdGF0aWMgaW50IGliX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQoreworCXN0cnVjdCBpYl91b2JqZWN0ICp1b2JqLCAqdG1wOworCisJaWYgKCFjb250ZXh0KQorCQlyZXR1cm4gMDsKKworCWRvd24oJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJLyogWFhYIEZyZWUgQUhzICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW9iaiwgdG1wLCAmY29udGV4dC0+cXBfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgaWJfcXAgKnFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIHVvYmotPmlkKTsKKwkJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3FwX2lkciwgdW9iai0+aWQpOworCQlpYl9kZXN0cm95X3FwKHFwKTsKKwkJbGlzdF9kZWwoJnVvYmotPmxpc3QpOworCQlrZnJlZSh1b2JqKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW9iaiwgdG1wLCAmY29udGV4dC0+Y3FfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgaWJfY3EgKmNxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIHVvYmotPmlkKTsKKwkJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX2NxX2lkciwgdW9iai0+aWQpOworCQlpYl9kZXN0cm95X2NxKGNxKTsKKwkJbGlzdF9kZWwoJnVvYmotPmxpc3QpOworCQlrZnJlZSh1b2JqKTsKKwl9CisKKwkvKiBYWFggRnJlZSBTUlFzICovCisJLyogWFhYIEZyZWUgTVdzICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW9iaiwgdG1wLCAmY29udGV4dC0+bXJfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgaWJfbXIgKm1yID0gaWRyX2ZpbmQoJmliX3V2ZXJic19tcl9pZHIsIHVvYmotPmlkKTsKKwkJc3RydWN0IGliX3VtZW1fb2JqZWN0ICptZW1vYmo7CisKKwkJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX21yX2lkciwgdW9iai0+aWQpOworCQlpYl9kZXJlZ19tcihtcik7CisKKwkJbWVtb2JqID0gY29udGFpbmVyX29mKHVvYmosIHN0cnVjdCBpYl91bWVtX29iamVjdCwgdW9iamVjdCk7CisJCWliX3VtZW1fcmVsZWFzZV9vbl9jbG9zZShtci0+ZGV2aWNlLCAmbWVtb2JqLT51bWVtKTsKKworCQlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CisJCWtmcmVlKG1lbW9iaik7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVvYmosIHRtcCwgJmNvbnRleHQtPnBkX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IGliX3BkICpwZCA9IGlkcl9maW5kKCZpYl91dmVyYnNfcGRfaWRyLCB1b2JqLT5pZCk7CisJCWlkcl9yZW1vdmUoJmliX3V2ZXJic19wZF9pZHIsIHVvYmotPmlkKTsKKwkJaWJfZGVhbGxvY19wZChwZCk7CisJCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKKwkJa2ZyZWUodW9iaik7CisJfQorCisJdXAoJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJcmV0dXJuIGNvbnRleHQtPmRldmljZS0+ZGVhbGxvY191Y29udGV4dChjb250ZXh0KTsKK30KKworc3RhdGljIHZvaWQgaWJfdXZlcmJzX3JlbGVhc2VfZmlsZShzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSA9CisJCWNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBpYl91dmVyYnNfZmlsZSwgcmVmKTsKKworCW1vZHVsZV9wdXQoZmlsZS0+ZGV2aWNlLT5pYl9kZXYtPm93bmVyKTsKKwlrZnJlZShmaWxlKTsKK30KKworc3RhdGljIHNzaXplX3QgaWJfdXZlcmJzX2V2ZW50X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGliX3V2ZXJic19ldmVudF9maWxlICpmaWxlID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgKmV2ZW50OworCWludCBldmVudHN6OworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycSgmZmlsZS0+bG9jayk7CisKKwl3aGlsZSAobGlzdF9lbXB0eSgmZmlsZS0+ZXZlbnRfbGlzdCkgJiYgZmlsZS0+ZmQgPj0gMCkgeworCQlzcGluX3VubG9ja19pcnEoJmZpbGUtPmxvY2spOworCisJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJCXJldHVybiAtRUFHQUlOOworCisJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZmlsZS0+cG9sbF93YWl0LAorCQkJCQkgICAgICFsaXN0X2VtcHR5KCZmaWxlLT5ldmVudF9saXN0KSB8fAorCQkJCQkgICAgIGZpbGUtPmZkIDwgMCkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJCXNwaW5fbG9ja19pcnEoJmZpbGUtPmxvY2spOworCX0KKworCWlmIChmaWxlLT5mZCA8IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGZpbGUtPmlzX2FzeW5jKSB7CisJCWV2ZW50ICAgPSBsaXN0X2VudHJ5KGZpbGUtPmV2ZW50X2xpc3QubmV4dCwKKwkJCQkgICAgIHN0cnVjdCBpYl91dmVyYnNfYXN5bmNfZXZlbnQsIGxpc3QpOworCQlldmVudHN6ID0gc2l6ZW9mIChzdHJ1Y3QgaWJfdXZlcmJzX2FzeW5jX2V2ZW50X2Rlc2MpOworCX0gZWxzZSB7CisJCWV2ZW50ICAgPSBsaXN0X2VudHJ5KGZpbGUtPmV2ZW50X2xpc3QubmV4dCwKKwkJCQkgICAgIHN0cnVjdCBpYl91dmVyYnNfY29tcF9ldmVudCwgbGlzdCk7CisJCWV2ZW50c3ogPSBzaXplb2YgKHN0cnVjdCBpYl91dmVyYnNfY29tcF9ldmVudF9kZXNjKTsKKwl9CisKKwlpZiAoZXZlbnRzeiA+IGNvdW50KSB7CisJCXJldCAgID0gLUVJTlZBTDsKKwkJZXZlbnQgPSBOVUxMOworCX0gZWxzZQorCQlsaXN0X2RlbChmaWxlLT5ldmVudF9saXN0Lm5leHQpOworCisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT5sb2NrKTsKKworCWlmIChldmVudCkgeworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgZXZlbnQsIGV2ZW50c3opKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0ID0gZXZlbnRzejsKKwl9CisKKwlrZnJlZShldmVudCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGliX3V2ZXJic19ldmVudF9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQkgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXVuc2lnbmVkIGludCBwb2xsZmxhZ3MgPSAwOworCXN0cnVjdCBpYl91dmVyYnNfZXZlbnRfZmlsZSAqZmlsZSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCXBvbGxfd2FpdChmaWxwLCAmZmlsZS0+cG9sbF93YWl0LCB3YWl0KTsKKworCXNwaW5fbG9ja19pcnEoJmZpbGUtPmxvY2spOworCWlmIChmaWxlLT5mZCA8IDApCisJCXBvbGxmbGFncyA9IFBPTExFUlI7CisJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJmZpbGUtPmV2ZW50X2xpc3QpKQorCQlwb2xsZmxhZ3MgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCXNwaW5fdW5sb2NrX2lycSgmZmlsZS0+bG9jayk7CisKKwlyZXR1cm4gcG9sbGZsYWdzOworfQorCitzdGF0aWMgdm9pZCBpYl91dmVyYnNfZXZlbnRfcmVsZWFzZShzdHJ1Y3QgaWJfdXZlcmJzX2V2ZW50X2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICp0bXA7CisKKwlzcGluX2xvY2tfaXJxKCZmaWxlLT5sb2NrKTsKKwlpZiAoZmlsZS0+ZmQgIT0gLTEpIHsKKwkJZmlsZS0+ZmQgPSAtMTsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0bXAsICZmaWxlLT5ldmVudF9saXN0KQorCQkJaWYgKGZpbGUtPmlzX2FzeW5jKQorCQkJCWtmcmVlKGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCBpYl91dmVyYnNfYXN5bmNfZXZlbnQsIGxpc3QpKTsKKwkJCWVsc2UKKwkJCQlrZnJlZShsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgaWJfdXZlcmJzX2NvbXBfZXZlbnQsIGxpc3QpKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT5sb2NrKTsKK30KKworc3RhdGljIGludCBpYl91dmVyYnNfZXZlbnRfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGliX3V2ZXJic19ldmVudF9maWxlICpmaWxlID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWJfdXZlcmJzX2V2ZW50X3JlbGVhc2UoZmlsZSk7CisJa3JlZl9wdXQoJmZpbGUtPnV2ZXJic19maWxlLT5yZWYsIGliX3V2ZXJic19yZWxlYXNlX2ZpbGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHV2ZXJic19ldmVudF9mb3BzID0geworCS8qCisJICogTm8gLm93bmVyIGZpZWxkIHNpbmNlIHdlIGFydGlmaWNpYWxseSBjcmVhdGUgZXZlbnQgZmlsZXMsCisJICogc28gdGhlcmUgaXMgbm8gaW5jcmVtZW50IHRvIHRoZSBtb2R1bGUgcmVmZXJlbmNlIGNvdW50IGluCisJICogdGhlIG9wZW4gcGF0aC4gIEFsbCBldmVudCBmaWxlcyBjb21lIGZyb20gYSB1dmVyYnMgY29tbWFuZAorCSAqIGZpbGUsIHdoaWNoIGFscmVhZHkgdGFrZXMgYSBtb2R1bGUgcmVmZXJlbmNlLCBzbyB0aGlzIGlzIE9LLgorCSAqLworCS5yZWFkIAkgPSBpYl91dmVyYnNfZXZlbnRfcmVhZCwKKwkucG9sbCAgICA9IGliX3V2ZXJic19ldmVudF9wb2xsLAorCS5yZWxlYXNlID0gaWJfdXZlcmJzX2V2ZW50X2Nsb3NlCit9OworCit2b2lkIGliX3V2ZXJic19jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY3FfY29udGV4dCkKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgICAgICAgKmZpbGUgPSBjcV9jb250ZXh0OworCXN0cnVjdCBpYl91dmVyYnNfY29tcF9ldmVudCAqZW50cnk7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICBmbGFnczsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YgKmVudHJ5LCBHRlBfQVRPTUlDKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CisKKwllbnRyeS0+ZGVzYy5jcV9oYW5kbGUgPSBjcS0+dW9iamVjdC0+dXNlcl9oYW5kbGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmlsZS0+Y29tcF9maWxlWzBdLmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmZpbGUtPmNvbXBfZmlsZVswXS5ldmVudF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWxlLT5jb21wX2ZpbGVbMF0ubG9jaywgZmxhZ3MpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmaWxlLT5jb21wX2ZpbGVbMF0ucG9sbF93YWl0KTsKK30KKworc3RhdGljIHZvaWQgaWJfdXZlcmJzX2FzeW5jX2hhbmRsZXIoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJCSAgICBfX3U2NCBlbGVtZW50LCBfX3U2NCBldmVudCkKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX2FzeW5jX2V2ZW50ICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZW50cnkgPSBrbWFsbG9jKHNpemVvZiAqZW50cnksIEdGUF9BVE9NSUMpOworCWlmICghZW50cnkpCisJCXJldHVybjsKKworCWVudHJ5LT5kZXNjLmVsZW1lbnQgICAgPSBlbGVtZW50OworCWVudHJ5LT5kZXNjLmV2ZW50X3R5cGUgPSBldmVudDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmaWxlLT5hc3luY19maWxlLmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmZpbGUtPmFzeW5jX2ZpbGUuZXZlbnRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlsZS0+YXN5bmNfZmlsZS5sb2NrLCBmbGFncyk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZpbGUtPmFzeW5jX2ZpbGUucG9sbF93YWl0KTsKK30KKwordm9pZCBpYl91dmVyYnNfY3FfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpjb250ZXh0X3B0cikKK3sKKwlpYl91dmVyYnNfYXN5bmNfaGFuZGxlcihjb250ZXh0X3B0ciwKKwkJCQlldmVudC0+ZWxlbWVudC5jcS0+dW9iamVjdC0+dXNlcl9oYW5kbGUsCisJCQkJZXZlbnQtPmV2ZW50KTsKK30KKwordm9pZCBpYl91dmVyYnNfcXBfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpjb250ZXh0X3B0cikKK3sKKwlpYl91dmVyYnNfYXN5bmNfaGFuZGxlcihjb250ZXh0X3B0ciwKKwkJCQlldmVudC0+ZWxlbWVudC5xcC0+dW9iamVjdC0+dXNlcl9oYW5kbGUsCisJCQkJZXZlbnQtPmV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgaWJfdXZlcmJzX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50X2hhbmRsZXIgKmhhbmRsZXIsCisJCQkJICAgIHN0cnVjdCBpYl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlID0KKwkJY29udGFpbmVyX29mKGhhbmRsZXIsIHN0cnVjdCBpYl91dmVyYnNfZmlsZSwgZXZlbnRfaGFuZGxlcik7CisKKwlpYl91dmVyYnNfYXN5bmNfaGFuZGxlcihmaWxlLCBldmVudC0+ZWxlbWVudC5wb3J0X251bSwgZXZlbnQtPmV2ZW50KTsKK30KKworc3RhdGljIGludCBpYl91dmVyYnNfZXZlbnRfaW5pdChzdHJ1Y3QgaWJfdXZlcmJzX2V2ZW50X2ZpbGUgKmZpbGUsCisJCQkJc3RydWN0IGliX3V2ZXJic19maWxlICp1dmVyYnNfZmlsZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKworCXNwaW5fbG9ja19pbml0KCZmaWxlLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZmlsZS0+ZXZlbnRfbGlzdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZmlsZS0+cG9sbF93YWl0KTsKKwlmaWxlLT51dmVyYnNfZmlsZSA9IHV2ZXJic19maWxlOworCisJZmlsZS0+ZmQgPSBnZXRfdW51c2VkX2ZkKCk7CisJaWYgKGZpbGUtPmZkIDwgMCkKKwkJcmV0dXJuIGZpbGUtPmZkOworCisJZmlscCA9IGdldF9lbXB0eV9maWxwKCk7CisJaWYgKCFmaWxwKSB7CisJCXB1dF91bnVzZWRfZmQoZmlsZS0+ZmQpOworCQlyZXR1cm4gLUVORklMRTsKKwl9CisKKwlmaWxwLT5mX29wIAkgICA9ICZ1dmVyYnNfZXZlbnRfZm9wczsKKwlmaWxwLT5mX3Zmc21udCAJICAgPSBtbnRnZXQodXZlcmJzX2V2ZW50X21udCk7CisJZmlscC0+Zl9kZW50cnkgCSAgID0gZGdldCh1dmVyYnNfZXZlbnRfbW50LT5tbnRfcm9vdCk7CisJZmlscC0+Zl9tYXBwaW5nICAgID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKKwlmaWxwLT5mX2ZsYWdzICAgICAgPSBPX1JET05MWTsKKwlmaWxwLT5mX21vZGUgICAgICAgPSBGTU9ERV9SRUFEOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGZpbGU7CisKKwlmZF9pbnN0YWxsKGZpbGUtPmZkLCBmaWxwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBpYl91dmVyYnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpYl91dmVyYnNfY21kX2hkciBoZHI7CisKKwlpZiAoY291bnQgPCBzaXplb2YgaGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmaGRyLCBidWYsIHNpemVvZiBoZHIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChoZHIuaW5fd29yZHMgKiA0ICE9IGNvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChoZHIuY29tbWFuZCA8IDAgfHwgaGRyLmNvbW1hbmQgPj0gQVJSQVlfU0laRSh1dmVyYnNfY21kX3RhYmxlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWZpbGUtPnVjb250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisJICAgIGhkci5jb21tYW5kICE9IElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1BBUkFNUyAmJgorCSAgICBoZHIuY29tbWFuZCAhPSBJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdXZlcmJzX2NtZF90YWJsZVtoZHIuY29tbWFuZF0oZmlsZSwgYnVmICsgc2l6ZW9mIGhkciwKKwkJCQkJICAgICBoZHIuaW5fd29yZHMgKiA0LCBoZHIub3V0X3dvcmRzICogNCk7Cit9CisKK3N0YXRpYyBpbnQgaWJfdXZlcmJzX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWlmICghZmlsZS0+dWNvbnRleHQpCisJCXJldHVybiAtRU5PREVWOworCWVsc2UKKwkJcmV0dXJuIGZpbGUtPmRldmljZS0+aWJfZGV2LT5tbWFwKGZpbGUtPnVjb250ZXh0LCB2bWEpOworfQorCitzdGF0aWMgaW50IGliX3V2ZXJic19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBpYl91dmVyYnNfZGV2aWNlICpkZXYgPQorCQljb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGliX3V2ZXJic19kZXZpY2UsIGRldik7CisJc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlOworCWludCBpID0gMDsKKwlpbnQgcmV0OworCisJaWYgKCF0cnlfbW9kdWxlX2dldChkZXYtPmliX2Rldi0+b3duZXIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZpbGUgPSBrbWFsbG9jKHNpemVvZiAqZmlsZSArCisJCSAgICAgICAoZGV2LT5udW1fY29tcCAtIDEpICogc2l6ZW9mIChzdHJ1Y3QgaWJfdXZlcmJzX2V2ZW50X2ZpbGUpLAorCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZpbGUtPmRldmljZSA9IGRldjsKKwlrcmVmX2luaXQoJmZpbGUtPnJlZik7CisKKwlmaWxlLT51Y29udGV4dCA9IE5VTEw7CisKKwlyZXQgPSBpYl91dmVyYnNfZXZlbnRfaW5pdCgmZmlsZS0+YXN5bmNfZmlsZSwgZmlsZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlmaWxlLT5hc3luY19maWxlLmlzX2FzeW5jID0gMTsKKworCWtyZWZfZ2V0KCZmaWxlLT5yZWYpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2NvbXA7ICsraSkgeworCQlyZXQgPSBpYl91dmVyYnNfZXZlbnRfaW5pdCgmZmlsZS0+Y29tcF9maWxlW2ldLCBmaWxlKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2FzeW5jOworCQlrcmVmX2dldCgmZmlsZS0+cmVmKTsKKwkJZmlsZS0+Y29tcF9maWxlW2ldLmlzX2FzeW5jID0gMDsKKwl9CisKKworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGZpbGU7CisKKwlJTklUX0lCX0VWRU5UX0hBTkRMRVIoJmZpbGUtPmV2ZW50X2hhbmRsZXIsIGRldi0+aWJfZGV2LAorCQkJICAgICAgaWJfdXZlcmJzX2V2ZW50X2hhbmRsZXIpOworCWlmIChpYl9yZWdpc3Rlcl9ldmVudF9oYW5kbGVyKCZmaWxlLT5ldmVudF9oYW5kbGVyKSkKKwkJZ290byBlcnJfYXN5bmM7CisKKwlyZXR1cm4gMDsKKworZXJyX2FzeW5jOgorCXdoaWxlIChpLS0pCisJCWliX3V2ZXJic19ldmVudF9yZWxlYXNlKCZmaWxlLT5jb21wX2ZpbGVbaV0pOworCisJaWJfdXZlcmJzX2V2ZW50X3JlbGVhc2UoJmZpbGUtPmFzeW5jX2ZpbGUpOworCitlcnI6CisJa3JlZl9wdXQoJmZpbGUtPnJlZiwgaWJfdXZlcmJzX3JlbGVhc2VfZmlsZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGliX3V2ZXJic19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJaW50IGk7CisKKwlpYl91bnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXIoJmZpbGUtPmV2ZW50X2hhbmRsZXIpOworCWliX3V2ZXJic19ldmVudF9yZWxlYXNlKCZmaWxlLT5hc3luY19maWxlKTsKKwlpYl9kZWFsbG9jX3Vjb250ZXh0KGZpbGUtPnVjb250ZXh0KTsKKworCWZvciAoaSA9IDA7IGkgPCBmaWxlLT5kZXZpY2UtPm51bV9jb21wOyArK2kpCisJCWliX3V2ZXJic19ldmVudF9yZWxlYXNlKCZmaWxlLT5jb21wX2ZpbGVbaV0pOworCisJa3JlZl9wdXQoJmZpbGUtPnJlZiwgaWJfdXZlcmJzX3JlbGVhc2VfZmlsZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXZlcmJzX2ZvcHMgPSB7CisJLm93bmVyIAkgPSBUSElTX01PRFVMRSwKKwkud3JpdGUgCSA9IGliX3V2ZXJic193cml0ZSwKKwkub3BlbiAJID0gaWJfdXZlcmJzX29wZW4sCisJLnJlbGVhc2UgPSBpYl91dmVyYnNfY2xvc2UKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHV2ZXJic19tbWFwX2ZvcHMgPSB7CisJLm93bmVyIAkgPSBUSElTX01PRFVMRSwKKwkud3JpdGUgCSA9IGliX3V2ZXJic193cml0ZSwKKwkubW1hcCAgICA9IGliX3V2ZXJic19tbWFwLAorCS5vcGVuIAkgPSBpYl91dmVyYnNfb3BlbiwKKwkucmVsZWFzZSA9IGliX3V2ZXJic19jbG9zZQorfTsKKworc3RhdGljIHN0cnVjdCBpYl9jbGllbnQgdXZlcmJzX2NsaWVudCA9IHsKKwkubmFtZSAgID0gInV2ZXJicyIsCisJLmFkZCAgICA9IGliX3V2ZXJic19hZGRfb25lLAorCS5yZW1vdmUgPSBpYl91dmVyYnNfcmVtb3ZlX29uZQorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19pYmRldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZSAqZGV2ID0KKwkJY29udGFpbmVyX29mKGNsYXNzX2Rldiwgc3RydWN0IGliX3V2ZXJic19kZXZpY2UsIGNsYXNzX2Rldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGV2LT5pYl9kZXYtPm5hbWUpOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGliZGV2LCBTX0lSVUdPLCBzaG93X2liZGV2LCBOVUxMKTsKKworc3RhdGljIHZvaWQgaWJfdXZlcmJzX3JlbGVhc2VfY2xhc3NfZGV2KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldikKK3sKKwlzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZSAqZGV2ID0KKwkJY29udGFpbmVyX29mKGNsYXNzX2Rldiwgc3RydWN0IGliX3V2ZXJic19kZXZpY2UsIGNsYXNzX2Rldik7CisKKwljZGV2X2RlbCgmZGV2LT5kZXYpOworCWNsZWFyX2JpdChkZXYtPmRldm51bSwgZGV2X21hcCk7CisJa2ZyZWUoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzcyB1dmVyYnNfY2xhc3MgPSB7CisJLm5hbWUgICAgPSAiaW5maW5pYmFuZF92ZXJicyIsCisJLnJlbGVhc2UgPSBpYl91dmVyYnNfcmVsZWFzZV9jbGFzc19kZXYKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWJpX3ZlcnNpb24oc3RydWN0IGNsYXNzICpjbGFzcywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBJQl9VU0VSX1ZFUkJTX0FCSV9WRVJTSU9OKTsKK30KK3N0YXRpYyBDTEFTU19BVFRSKGFiaV92ZXJzaW9uLCBTX0lSVUdPLCBzaG93X2FiaV92ZXJzaW9uLCBOVUxMKTsKKworc3RhdGljIHZvaWQgaWJfdXZlcmJzX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBpYl91dmVyYnNfZGV2aWNlICp1dmVyYnNfZGV2OworCisJaWYgKCFkZXZpY2UtPmFsbG9jX3Vjb250ZXh0KQorCQlyZXR1cm47CisKKwl1dmVyYnNfZGV2ID0ga21hbGxvYyhzaXplb2YgKnV2ZXJic19kZXYsIEdGUF9LRVJORUwpOworCWlmICghdXZlcmJzX2RldikKKwkJcmV0dXJuOworCisJbWVtc2V0KHV2ZXJic19kZXYsIDAsIHNpemVvZiAqdXZlcmJzX2Rldik7CisKKwlzcGluX2xvY2soJm1hcF9sb2NrKTsKKwl1dmVyYnNfZGV2LT5kZXZudW0gPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRldl9tYXAsIElCX1VWRVJCU19NQVhfREVWSUNFUyk7CisJaWYgKHV2ZXJic19kZXYtPmRldm51bSA+PSBJQl9VVkVSQlNfTUFYX0RFVklDRVMpIHsKKwkJc3Bpbl91bmxvY2soJm1hcF9sb2NrKTsKKwkJZ290byBlcnI7CisJfQorCXNldF9iaXQodXZlcmJzX2Rldi0+ZGV2bnVtLCBkZXZfbWFwKTsKKwlzcGluX3VubG9jaygmbWFwX2xvY2spOworCisJdXZlcmJzX2Rldi0+aWJfZGV2ICAgPSBkZXZpY2U7CisJdXZlcmJzX2Rldi0+bnVtX2NvbXAgPSAxOworCisJaWYgKGRldmljZS0+bW1hcCkKKwkJY2Rldl9pbml0KCZ1dmVyYnNfZGV2LT5kZXYsICZ1dmVyYnNfbW1hcF9mb3BzKTsKKwllbHNlCisJCWNkZXZfaW5pdCgmdXZlcmJzX2Rldi0+ZGV2LCAmdXZlcmJzX2ZvcHMpOworCXV2ZXJic19kZXYtPmRldi5vd25lciA9IFRISVNfTU9EVUxFOworCWtvYmplY3Rfc2V0X25hbWUoJnV2ZXJic19kZXYtPmRldi5rb2JqLCAidXZlcmJzJWQiLCB1dmVyYnNfZGV2LT5kZXZudW0pOworCWlmIChjZGV2X2FkZCgmdXZlcmJzX2Rldi0+ZGV2LCBJQl9VVkVSQlNfQkFTRV9ERVYgKyB1dmVyYnNfZGV2LT5kZXZudW0sIDEpKQorCQlnb3RvIGVycjsKKworCXV2ZXJic19kZXYtPmNsYXNzX2Rldi5jbGFzcyA9ICZ1dmVyYnNfY2xhc3M7CisJdXZlcmJzX2Rldi0+Y2xhc3NfZGV2LmRldiAgID0gZGV2aWNlLT5kbWFfZGV2aWNlOworCXV2ZXJic19kZXYtPmNsYXNzX2Rldi5kZXZ0ICA9IHV2ZXJic19kZXYtPmRldi5kZXY7CisJc25wcmludGYodXZlcmJzX2Rldi0+Y2xhc3NfZGV2LmNsYXNzX2lkLCBCVVNfSURfU0laRSwgInV2ZXJicyVkIiwgdXZlcmJzX2Rldi0+ZGV2bnVtKTsKKwlpZiAoY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKCZ1dmVyYnNfZGV2LT5jbGFzc19kZXYpKQorCQlnb3RvIGVycl9jZGV2OworCisJaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmdXZlcmJzX2Rldi0+Y2xhc3NfZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaWJkZXYpKQorCQlnb3RvIGVycl9jbGFzczsKKworCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZ1dmVyYnNfY2xpZW50LCB1dmVyYnNfZGV2KTsKKworCXJldHVybjsKKworZXJyX2NsYXNzOgorCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZ1dmVyYnNfZGV2LT5jbGFzc19kZXYpOworCitlcnJfY2RldjoKKwljZGV2X2RlbCgmdXZlcmJzX2Rldi0+ZGV2KTsKKwljbGVhcl9iaXQodXZlcmJzX2Rldi0+ZGV2bnVtLCBkZXZfbWFwKTsKKworZXJyOgorCWtmcmVlKHV2ZXJic19kZXYpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgaWJfdXZlcmJzX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBpYl91dmVyYnNfZGV2aWNlICp1dmVyYnNfZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnV2ZXJic19jbGllbnQpOworCisJaWYgKCF1dmVyYnNfZGV2KQorCQlyZXR1cm47CisKKwljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmdXZlcmJzX2Rldi0+Y2xhc3NfZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqdXZlcmJzX2V2ZW50X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGdldF9zYl9wc2V1ZG8oZnNfdHlwZSwgImluZmluaWJhbmRldmVudDoiLCBOVUxMLAorCQkJICAgICBJTkZJTklCQU5ERVZFTlRGU19NQUdJQyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB1dmVyYnNfZXZlbnRfZnMgPSB7CisJLyogTm8gb3duZXIgZmllbGQgc28gbW9kdWxlIGNhbiBiZSB1bmxvYWRlZCAqLworCS5uYW1lICAgID0gImluZmluaWJhbmRldmVudGZzIiwKKwkuZ2V0X3NiICA9IHV2ZXJic19ldmVudF9nZXRfc2IsCisJLmtpbGxfc2IgPSBraWxsX2xpdHRlcl9zdXBlcgorfTsKKworc3RhdGljIGludCBfX2luaXQgaWJfdXZlcmJzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2luaXQoJm1hcF9sb2NrKTsKKworCXJldCA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oSUJfVVZFUkJTX0JBU0VfREVWLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMsCisJCQkJICAgICAiaW5maW5pYmFuZF92ZXJicyIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2VyX3ZlcmJzOiBjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgbnVtYmVyXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gY2xhc3NfcmVnaXN0ZXIoJnV2ZXJic19jbGFzcyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgInVzZXJfdmVyYnM6IGNvdWxkbid0IGNyZWF0ZSBjbGFzcyBpbmZpbmliYW5kX3ZlcmJzXG4iKTsKKwkJZ290byBvdXRfY2hyZGV2OworCX0KKworCXJldCA9IGNsYXNzX2NyZWF0ZV9maWxlKCZ1dmVyYnNfY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNlcl92ZXJiczogY291bGRuJ3QgY3JlYXRlIGFiaV92ZXJzaW9uIGF0dHJpYnV0ZVxuIik7CisJCWdvdG8gb3V0X2NsYXNzOworCX0KKworCXJldCA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnV2ZXJic19ldmVudF9mcyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgInVzZXJfdmVyYnM6IGNvdWxkbid0IHJlZ2lzdGVyIGluZmluaWJhbmRldmVudGZzXG4iKTsKKwkJZ290byBvdXRfY2xhc3M7CisJfQorCisJdXZlcmJzX2V2ZW50X21udCA9IGtlcm5fbW91bnQoJnV2ZXJic19ldmVudF9mcyk7CisJaWYgKElTX0VSUih1dmVyYnNfZXZlbnRfbW50KSkgeworCQlyZXQgPSBQVFJfRVJSKHV2ZXJic19ldmVudF9tbnQpOworCQlwcmludGsoS0VSTl9FUlIgInVzZXJfdmVyYnM6IGNvdWxkbid0IG1vdW50IGluZmluaWJhbmRldmVudGZzXG4iKTsKKwkJZ290byBvdXRfZnM7CisJfQorCisJcmV0ID0gaWJfcmVnaXN0ZXJfY2xpZW50KCZ1dmVyYnNfY2xpZW50KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNlcl92ZXJiczogY291bGRuJ3QgcmVnaXN0ZXIgY2xpZW50XG4iKTsKKwkJZ290byBvdXRfbW50OworCX0KKworCXJldHVybiAwOworCitvdXRfbW50OgorCW1udHB1dCh1dmVyYnNfZXZlbnRfbW50KTsKKworb3V0X2ZzOgorCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmdXZlcmJzX2V2ZW50X2ZzKTsKKworb3V0X2NsYXNzOgorCWNsYXNzX3VucmVnaXN0ZXIoJnV2ZXJic19jbGFzcyk7CisKK291dF9jaHJkZXY6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKElCX1VWRVJCU19CQVNFX0RFViwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpYl91dmVyYnNfY2xlYW51cCh2b2lkKQoreworCWliX3VucmVnaXN0ZXJfY2xpZW50KCZ1dmVyYnNfY2xpZW50KTsKKwltbnRwdXQodXZlcmJzX2V2ZW50X21udCk7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZ1dmVyYnNfZXZlbnRfZnMpOworCWNsYXNzX3VucmVnaXN0ZXIoJnV2ZXJic19jbGFzcyk7CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKElCX1VWRVJCU19CQVNFX0RFViwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKTsKK30KKworbW9kdWxlX2luaXQoaWJfdXZlcmJzX2luaXQpOworbW9kdWxlX2V4aXQoaWJfdXZlcmJzX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21lbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNTUwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWVtLmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKiAkSWQ6IHV2ZXJic19tZW0uYyAyNzQzIDIwMDUtMDYtMjggMjI6Mjc6NTlaIHJvbGFuZCAkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgInV2ZXJicy5oIgorCitzdHJ1Y3QgaWJfdW1lbV9hY2NvdW50X3dvcmsgeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBtbV9zdHJ1Y3QgICptbTsKKwl1bnNpZ25lZCBsb25nICAgICAgZGlmZjsKK307CisKKworc3RhdGljIHZvaWQgX19pYl91bWVtX3JlbGVhc2Uoc3RydWN0IGliX2RldmljZSAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSwgaW50IGRpcnR5KQoreworCXN0cnVjdCBpYl91bWVtX2NodW5rICpjaHVuaywgKnRtcDsKKwlpbnQgaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgdG1wLCAmdW1lbS0+Y2h1bmtfbGlzdCwgbGlzdCkgeworCQlkbWFfdW5tYXBfc2coZGV2LT5kbWFfZGV2aWNlLCBjaHVuay0+cGFnZV9saXN0LAorCQkJICAgICBjaHVuay0+bmVudHMsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJZm9yIChpID0gMDsgaSA8IGNodW5rLT5uZW50czsgKytpKSB7CisJCQlpZiAodW1lbS0+d3JpdGFibGUgJiYgZGlydHkpCisJCQkJc2V0X3BhZ2VfZGlydHlfbG9jayhjaHVuay0+cGFnZV9saXN0W2ldLnBhZ2UpOworCQkJcHV0X3BhZ2UoY2h1bmstPnBhZ2VfbGlzdFtpXS5wYWdlKTsKKwkJfQorCisJCWtmcmVlKGNodW5rKTsKKwl9Cit9CisKK2ludCBpYl91bWVtX2dldChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl91bWVtICptZW0sCisJCXZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBpbnQgd3JpdGUpCit7CisJc3RydWN0IHBhZ2UgKipwYWdlX2xpc3Q7CisJc3RydWN0IGliX3VtZW1fY2h1bmsgKmNodW5rOworCXVuc2lnbmVkIGxvbmcgbG9ja2VkOworCXVuc2lnbmVkIGxvbmcgbG9ja19saW1pdDsKKwl1bnNpZ25lZCBsb25nIGN1cl9iYXNlOworCXVuc2lnbmVkIGxvbmcgbnBhZ2VzOworCWludCByZXQgPSAwOworCWludCBvZmY7CisJaW50IGk7CisKKwlpZiAoIWNhbl9kb19tbG9jaygpKQorCQlyZXR1cm4gLUVQRVJNOworCisJcGFnZV9saXN0ID0gKHN0cnVjdCBwYWdlICoqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlX2xpc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtLT51c2VyX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKKwltZW0tPmxlbmd0aCAgICA9IHNpemU7CisJbWVtLT5vZmZzZXQgICAgPSAodW5zaWduZWQgbG9uZykgYWRkciAmIH5QQUdFX01BU0s7CisJbWVtLT5wYWdlX3NpemUgPSBQQUdFX1NJWkU7CisJbWVtLT53cml0YWJsZSAgPSB3cml0ZTsKKworCUlOSVRfTElTVF9IRUFEKCZtZW0tPmNodW5rX2xpc3QpOworCisJbnBhZ2VzID0gUEFHRV9BTElHTihzaXplICsgbWVtLT5vZmZzZXQpID4+IFBBR0VfU0hJRlQ7CisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJbG9ja2VkICAgICA9IG5wYWdlcyArIGN1cnJlbnQtPm1tLT5sb2NrZWRfdm07CisJbG9ja19saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIgPj4gUEFHRV9TSElGVDsKKworCWlmICgobG9ja2VkID4gbG9ja19saW1pdCkgJiYgIWNhcGFibGUoQ0FQX0lQQ19MT0NLKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljdXJfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyICYgUEFHRV9NQVNLOworCisJd2hpbGUgKG5wYWdlcykgeworCQlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgY3VyX2Jhc2UsCisJCQkJICAgICBtaW5fdChpbnQsIG5wYWdlcywKKwkJCQkJICAgUEFHRV9TSVpFIC8gc2l6ZW9mIChzdHJ1Y3QgcGFnZSAqKSksCisJCQkJICAgICAxLCAhd3JpdGUsIHBhZ2VfbGlzdCwgTlVMTCk7CisKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQljdXJfYmFzZSArPSByZXQgKiBQQUdFX1NJWkU7CisJCW5wYWdlcyAgIC09IHJldDsKKworCQlvZmYgPSAwOworCisJCXdoaWxlIChyZXQpIHsKKwkJCWNodW5rID0ga21hbGxvYyhzaXplb2YgKmNodW5rICsgc2l6ZW9mIChzdHJ1Y3Qgc2NhdHRlcmxpc3QpICoKKwkJCQkJbWluX3QoaW50LCByZXQsIElCX1VNRU1fTUFYX1BBR0VfQ0hVTkspLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICghY2h1bmspIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQljaHVuay0+bmVudHMgPSBtaW5fdChpbnQsIHJldCwgSUJfVU1FTV9NQVhfUEFHRV9DSFVOSyk7CisJCQlmb3IgKGkgPSAwOyBpIDwgY2h1bmstPm5lbnRzOyArK2kpIHsKKwkJCQljaHVuay0+cGFnZV9saXN0W2ldLnBhZ2UgICA9IHBhZ2VfbGlzdFtpICsgb2ZmXTsKKwkJCQljaHVuay0+cGFnZV9saXN0W2ldLm9mZnNldCA9IDA7CisJCQkJY2h1bmstPnBhZ2VfbGlzdFtpXS5sZW5ndGggPSBQQUdFX1NJWkU7CisJCQl9CisKKwkJCWNodW5rLT5ubWFwID0gZG1hX21hcF9zZyhkZXYtPmRtYV9kZXZpY2UsCisJCQkJCQkgJmNodW5rLT5wYWdlX2xpc3RbMF0sCisJCQkJCQkgY2h1bmstPm5lbnRzLAorCQkJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKKwkJCWlmIChjaHVuay0+bm1hcCA8PSAwKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IGNodW5rLT5uZW50czsgKytpKQorCQkJCQlwdXRfcGFnZShjaHVuay0+cGFnZV9saXN0W2ldLnBhZ2UpOworCQkJCWtmcmVlKGNodW5rKTsKKworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXJldCAtPSBjaHVuay0+bmVudHM7CisJCQlvZmYgKz0gY2h1bmstPm5lbnRzOworCQkJbGlzdF9hZGRfdGFpbCgmY2h1bmstPmxpc3QsICZtZW0tPmNodW5rX2xpc3QpOworCQl9CisKKwkJcmV0ID0gMDsKKwl9CisKK291dDoKKwlpZiAocmV0IDwgMCkKKwkJX19pYl91bWVtX3JlbGVhc2UoZGV2LCBtZW0sIDApOworCWVsc2UKKwkJY3VycmVudC0+bW0tPmxvY2tlZF92bSA9IGxvY2tlZDsKKworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZV9saXN0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaWJfdW1lbV9yZWxlYXNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0pCit7CisJX19pYl91bWVtX3JlbGVhc2UoZGV2LCB1bWVtLCAxKTsKKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJY3VycmVudC0+bW0tPmxvY2tlZF92bSAtPQorCQlQQUdFX0FMSUdOKHVtZW0tPmxlbmd0aCArIHVtZW0tPm9mZnNldCkgPj4gUEFHRV9TSElGVDsKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKK30KKworc3RhdGljIHZvaWQgaWJfdW1lbV9hY2NvdW50KHZvaWQgKndvcmtfcHRyKQoreworCXN0cnVjdCBpYl91bWVtX2FjY291bnRfd29yayAqd29yayA9IHdvcmtfcHRyOworCisJZG93bl93cml0ZSgmd29yay0+bW0tPm1tYXBfc2VtKTsKKwl3b3JrLT5tbS0+bG9ja2VkX3ZtIC09IHdvcmstPmRpZmY7CisJdXBfd3JpdGUoJndvcmstPm1tLT5tbWFwX3NlbSk7CisJbW1wdXQod29yay0+bW0pOworCWtmcmVlKHdvcmspOworfQorCit2b2lkIGliX3VtZW1fcmVsZWFzZV9vbl9jbG9zZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtKQoreworCXN0cnVjdCBpYl91bWVtX2FjY291bnRfd29yayAqd29yazsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKworCV9faWJfdW1lbV9yZWxlYXNlKGRldiwgdW1lbSwgMSk7CisKKwltbSA9IGdldF90YXNrX21tKGN1cnJlbnQpOworCWlmICghbW0pCisJCXJldHVybjsKKworCS8qCisJICogV2UgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBtbSdzIG1tYXBfc2VtIGFscmVhZHkgaGVsZC4gIFRoaXMKKwkgKiBjYW4gaGFwcGVuIHdoZW4gYSB1c2Vyc3BhY2UgbXVubWFwKCkgaXMgdGhlIGNhbGwgdGhhdCBkcm9wcworCSAqIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBvdXIgZmlsZSBhbmQgY2FsbHMgb3VyIHJlbGVhc2UKKwkgKiBtZXRob2QuICBJZiB0aGVyZSBhcmUgbWVtb3J5IHJlZ2lvbnMgdG8gZGVzdHJveSwgd2UnbGwgZW5kCisJICogdXAgaGVyZSBhbmQgbm90IGJlIGFibGUgdG8gdGFrZSB0aGUgbW1hcF9zZW0uICBUaGVyZWZvcmUgd2UKKwkgKiBkZWZlciB0aGUgdm1fbG9ja2VkIGFjY291bnRpbmcgdG8gdGhlIHN5c3RlbSB3b3JrcXVldWUuCisJICovCisKKwl3b3JrID0ga21hbGxvYyhzaXplb2YgKndvcmssIEdGUF9LRVJORUwpOworCWlmICghd29yaykKKwkJcmV0dXJuOworCisJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBpYl91bWVtX2FjY291bnQsIHdvcmspOworCXdvcmstPm1tICAgPSBtbTsKKwl3b3JrLT5kaWZmID0gUEFHRV9BTElHTih1bWVtLT5sZW5ndGggKyB1bWVtLT5vZmZzZXQpID4+IFBBR0VfU0hJRlQ7CisKKwlzY2hlZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IDdjMDhlZDAuLjI1MTZmOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVG9wc3BpbiBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVm9sdGFpcmUgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC00NywxMCArNDgsMTEgQEAKIHsKIAlzdHJ1Y3QgaWJfcGQgKnBkOwogCi0JcGQgPSBkZXZpY2UtPmFsbG9jX3BkKGRldmljZSk7CisJcGQgPSBkZXZpY2UtPmFsbG9jX3BkKGRldmljZSwgTlVMTCwgTlVMTCk7CiAKIAlpZiAoIUlTX0VSUihwZCkpIHsKLQkJcGQtPmRldmljZSA9IGRldmljZTsKKwkJcGQtPmRldmljZSAgPSBkZXZpY2U7CisJCXBkLT51b2JqZWN0ID0gTlVMTDsKIAkJYXRvbWljX3NldCgmcGQtPnVzZWNudCwgMCk7CiAJfQogCkBAIC03Niw4ICs3OCw5IEBACiAJYWggPSBwZC0+ZGV2aWNlLT5jcmVhdGVfYWgocGQsIGFoX2F0dHIpOwogCiAJaWYgKCFJU19FUlIoYWgpKSB7Ci0JCWFoLT5kZXZpY2UgPSBwZC0+ZGV2aWNlOwotCQlhaC0+cGQgICAgID0gcGQ7CisJCWFoLT5kZXZpY2UgID0gcGQtPmRldmljZTsKKwkJYWgtPnBkICAgICAgPSBwZDsKKwkJYWgtPnVvYmplY3QgPSBOVUxMOwogCQlhdG9taWNfaW5jKCZwZC0+dXNlY250KTsKIAl9CiAKQEAgLTEyMiw3ICsxMjUsNyBAQAogewogCXN0cnVjdCBpYl9xcCAqcXA7CiAKLQlxcCA9IHBkLT5kZXZpY2UtPmNyZWF0ZV9xcChwZCwgcXBfaW5pdF9hdHRyKTsKKwlxcCA9IHBkLT5kZXZpY2UtPmNyZWF0ZV9xcChwZCwgcXBfaW5pdF9hdHRyLCBOVUxMKTsKIAogCWlmICghSVNfRVJSKHFwKSkgewogCQlxcC0+ZGV2aWNlICAgICAJICA9IHBkLT5kZXZpY2U7CkBAIC0xMzAsNiArMTMzLDcgQEAKIAkJcXAtPnNlbmRfY3EgICAgCSAgPSBxcF9pbml0X2F0dHItPnNlbmRfY3E7CiAJCXFwLT5yZWN2X2NxICAgIAkgID0gcXBfaW5pdF9hdHRyLT5yZWN2X2NxOwogCQlxcC0+c3JxCSAgICAgICAJICA9IHFwX2luaXRfYXR0ci0+c3JxOworCQlxcC0+dW9iamVjdCAgICAgICA9IE5VTEw7CiAJCXFwLT5ldmVudF9oYW5kbGVyID0gcXBfaW5pdF9hdHRyLT5ldmVudF9oYW5kbGVyOwogCQlxcC0+cXBfY29udGV4dCAgICA9IHFwX2luaXRfYXR0ci0+cXBfY29udGV4dDsKIAkJcXAtPnFwX3R5cGUJICA9IHFwX2luaXRfYXR0ci0+cXBfdHlwZTsKQEAgLTE5NywxMCArMjAxLDExIEBACiB7CiAJc3RydWN0IGliX2NxICpjcTsKIAotCWNxID0gZGV2aWNlLT5jcmVhdGVfY3EoZGV2aWNlLCBjcWUpOworCWNxID0gZGV2aWNlLT5jcmVhdGVfY3EoZGV2aWNlLCBjcWUsIE5VTEwsIE5VTEwpOwogCiAJaWYgKCFJU19FUlIoY3EpKSB7CiAJCWNxLT5kZXZpY2UgICAgICAgID0gZGV2aWNlOworCQljcS0+dW9iamVjdCAgICAgICA9IE5VTEw7CiAJCWNxLT5jb21wX2hhbmRsZXIgID0gY29tcF9oYW5kbGVyOwogCQljcS0+ZXZlbnRfaGFuZGxlciA9IGV2ZW50X2hhbmRsZXI7CiAJCWNxLT5jcV9jb250ZXh0ICAgID0gY3FfY29udGV4dDsKQEAgLTI0NSw4ICsyNTAsOSBAQAogCW1yID0gcGQtPmRldmljZS0+Z2V0X2RtYV9tcihwZCwgbXJfYWNjZXNzX2ZsYWdzKTsKIAogCWlmICghSVNfRVJSKG1yKSkgewotCQltci0+ZGV2aWNlID0gcGQtPmRldmljZTsKLQkJbXItPnBkICAgICA9IHBkOworCQltci0+ZGV2aWNlICA9IHBkLT5kZXZpY2U7CisJCW1yLT5wZCAgICAgID0gcGQ7CisJCW1yLT51b2JqZWN0ID0gTlVMTDsKIAkJYXRvbWljX2luYygmcGQtPnVzZWNudCk7CiAJCWF0b21pY19zZXQoJm1yLT51c2VjbnQsIDApOwogCX0KQEAgLTI2Nyw4ICsyNzMsOSBAQAogCQkJCSAgICAgbXJfYWNjZXNzX2ZsYWdzLCBpb3ZhX3N0YXJ0KTsKIAogCWlmICghSVNfRVJSKG1yKSkgewotCQltci0+ZGV2aWNlID0gcGQtPmRldmljZTsKLQkJbXItPnBkICAgICA9IHBkOworCQltci0+ZGV2aWNlICA9IHBkLT5kZXZpY2U7CisJCW1yLT5wZCAgICAgID0gcGQ7CisJCW1yLT51b2JqZWN0ID0gTlVMTDsKIAkJYXRvbWljX2luYygmcGQtPnVzZWNudCk7CiAJCWF0b21pY19zZXQoJm1yLT51c2VjbnQsIDApOwogCX0KQEAgLTM0NCw4ICszNTEsOSBAQAogCiAJbXcgPSBwZC0+ZGV2aWNlLT5hbGxvY19tdyhwZCk7CiAJaWYgKCFJU19FUlIobXcpKSB7Ci0JCW13LT5kZXZpY2UgPSBwZC0+ZGV2aWNlOwotCQltdy0+cGQgICAgID0gcGQ7CisJCW13LT5kZXZpY2UgID0gcGQtPmRldmljZTsKKwkJbXctPnBkICAgICAgPSBwZDsKKwkJbXctPnVvYmplY3QgPSBOVUxMOwogCQlhdG9taWNfaW5jKCZwZC0+dXNlY250KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMKaW5kZXggNzY2ZTkwMzEuLmI1YWVhN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC03NDIsNiArNzQzLDcgQEAKIH0KIAogaW50IG10aGNhX2luaXRfY3Eoc3RydWN0IG10aGNhX2RldiAqZGV2LCBpbnQgbmVudCwKKwkJICBzdHJ1Y3QgbXRoY2FfdWNvbnRleHQgKmN0eCwgdTMyIHBkbiwKIAkJICBzdHJ1Y3QgbXRoY2FfY3EgKmNxKQogewogCWludCBzaXplID0gbmVudCAqIE1USENBX0NRX0VOVFJZX1NJWkU7CkBAIC03NTMsMzAgKzc1NSwzMyBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWNxLT5pYmNxLmNxZSA9IG5lbnQgLSAxOworCWNxLT5pYmNxLmNxZSAgPSBuZW50IC0gMTsKKwljcS0+aXNfa2VybmVsID0gIWN0eDsKIAogCWNxLT5jcW4gPSBtdGhjYV9hbGxvYygmZGV2LT5jcV90YWJsZS5hbGxvYyk7CiAJaWYgKGNxLT5jcW4gPT0gLTEpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkgewotCQljcS0+YXJtX3NuID0gMTsKLQogCQllcnIgPSBtdGhjYV90YWJsZV9nZXQoZGV2LCBkZXYtPmNxX3RhYmxlLnRhYmxlLCBjcS0+Y3FuKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyX291dDsKIAotCQllcnIgPSAtRU5PTUVNOworCQlpZiAoY3EtPmlzX2tlcm5lbCkgeworCQkJY3EtPmFybV9zbiA9IDE7CiAKLQkJY3EtPnNldF9jaV9kYl9pbmRleCA9IG10aGNhX2FsbG9jX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9DUV9TRVRfQ0ksCi0JCQkJCQkgICAgIGNxLT5jcW4sICZjcS0+c2V0X2NpX2RiKTsKLQkJaWYgKGNxLT5zZXRfY2lfZGJfaW5kZXggPCAwKQotCQkJZ290byBlcnJfb3V0X2ljbTsKKwkJCWVyciA9IC1FTk9NRU07CiAKLQkJY3EtPmFybV9kYl9pbmRleCA9IG10aGNhX2FsbG9jX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9DUV9BUk0sCi0JCQkJCQkgIGNxLT5jcW4sICZjcS0+YXJtX2RiKTsKLQkJaWYgKGNxLT5hcm1fZGJfaW5kZXggPCAwKQotCQkJZ290byBlcnJfb3V0X2NpOworCQkJY3EtPnNldF9jaV9kYl9pbmRleCA9IG10aGNhX2FsbG9jX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9DUV9TRVRfQ0ksCisJCQkJCQkJICAgICBjcS0+Y3FuLCAmY3EtPnNldF9jaV9kYik7CisJCQlpZiAoY3EtPnNldF9jaV9kYl9pbmRleCA8IDApCisJCQkJZ290byBlcnJfb3V0X2ljbTsKKworCQkJY3EtPmFybV9kYl9pbmRleCA9IG10aGNhX2FsbG9jX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9DUV9BUk0sCisJCQkJCQkJICBjcS0+Y3FuLCAmY3EtPmFybV9kYik7CisJCQlpZiAoY3EtPmFybV9kYl9pbmRleCA8IDApCisJCQkJZ290byBlcnJfb3V0X2NpOworCQl9CiAJfQogCiAJbWFpbGJveCA9IG10aGNhX2FsbG9jX21haWxib3goZGV2LCBHRlBfS0VSTkVMKTsKQEAgLTc4NSwxMiArNzkwLDE0IEBACiAKIAljcV9jb250ZXh0ID0gbWFpbGJveC0+YnVmOwogCi0JZXJyID0gbXRoY2FfYWxsb2NfY3FfYnVmKGRldiwgc2l6ZSwgY3EpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9tYWlsYm94OworCWlmIChjcS0+aXNfa2VybmVsKSB7CisJCWVyciA9IG10aGNhX2FsbG9jX2NxX2J1ZihkZXYsIHNpemUsIGNxKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9tYWlsYm94OwogCi0JZm9yIChpID0gMDsgaSA8IG5lbnQ7ICsraSkKLQkJc2V0X2NxZV9odyhnZXRfY3FlKGNxLCBpKSk7CisJCWZvciAoaSA9IDA7IGkgPCBuZW50OyArK2kpCisJCQlzZXRfY3FlX2h3KGdldF9jcWUoY3EsIGkpKTsKKwl9CiAKIAlzcGluX2xvY2tfaW5pdCgmY3EtPmxvY2spOwogCWF0b21pY19zZXQoJmNxLT5yZWZjb3VudCwgMSk7CkBAIC04MDEsMTEgKzgwOCwxNCBAQAogCQkJCQkJICBNVEhDQV9DUV9TVEFURV9ESVNBUk1FRCB8CiAJCQkJCQkgIE1USENBX0NRX0ZMQUdfVFIpOwogCWNxX2NvbnRleHQtPnN0YXJ0ICAgICAgICAgICA9IGNwdV90b19iZTY0KDApOwotCWNxX2NvbnRleHQtPmxvZ3NpemVfdXNycGFnZSA9IGNwdV90b19iZTMyKChmZnMobmVudCkgLSAxKSA8PCAyNCB8Ci0JCQkJCQkgIGRldi0+ZHJpdmVyX3Vhci5pbmRleCk7CisJY3FfY29udGV4dC0+bG9nc2l6ZV91c3JwYWdlID0gY3B1X3RvX2JlMzIoKGZmcyhuZW50KSAtIDEpIDw8IDI0KTsKKwlpZiAoY3R4KQorCQljcV9jb250ZXh0LT5sb2dzaXplX3VzcnBhZ2UgfD0gY3B1X3RvX2JlMzIoY3R4LT51YXIuaW5kZXgpOworCWVsc2UKKwkJY3FfY29udGV4dC0+bG9nc2l6ZV91c3JwYWdlIHw9IGNwdV90b19iZTMyKGRldi0+ZHJpdmVyX3Vhci5pbmRleCk7CiAJY3FfY29udGV4dC0+ZXJyb3JfZXFuICAgICAgID0gY3B1X3RvX2JlMzIoZGV2LT5lcV90YWJsZS5lcVtNVEhDQV9FUV9BU1lOQ10uZXFuKTsKIAljcV9jb250ZXh0LT5jb21wX2VxbiAgICAgICAgPSBjcHVfdG9fYmUzMihkZXYtPmVxX3RhYmxlLmVxW01USENBX0VRX0NPTVBdLmVxbik7Ci0JY3FfY29udGV4dC0+cGQgICAgICAgICAgICAgID0gY3B1X3RvX2JlMzIoZGV2LT5kcml2ZXJfcGQucGRfbnVtKTsKKwljcV9jb250ZXh0LT5wZCAgICAgICAgICAgICAgPSBjcHVfdG9fYmUzMihwZG4pOwogCWNxX2NvbnRleHQtPmxrZXkgICAgICAgICAgICA9IGNwdV90b19iZTMyKGNxLT5tci5pYm1yLmxrZXkpOwogCWNxX2NvbnRleHQtPmNxbiAgICAgICAgICAgICA9IGNwdV90b19iZTMyKGNxLT5jcW4pOwogCkBAIC04NDMsMTggKzg1MywyMCBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0X2ZyZWVfbXI6Ci0JbXRoY2FfZnJlZV9tcihkZXYsICZjcS0+bXIpOwotCW10aGNhX2ZyZWVfY3FfYnVmKGRldiwgY3EpOworCWlmIChjcS0+aXNfa2VybmVsKSB7CisJCW10aGNhX2ZyZWVfbXIoZGV2LCAmY3EtPm1yKTsKKwkJbXRoY2FfZnJlZV9jcV9idWYoZGV2LCBjcSk7CisJfQogCiBlcnJfb3V0X21haWxib3g6CiAJbXRoY2FfZnJlZV9tYWlsYm94KGRldiwgbWFpbGJveCk7CiAKIGVycl9vdXRfYXJtOgotCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCisJaWYgKGNxLT5pc19rZXJuZWwgJiYgbXRoY2FfaXNfbWVtZnJlZShkZXYpKQogCQltdGhjYV9mcmVlX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9DUV9BUk0sIGNxLT5hcm1fZGJfaW5kZXgpOwogCiBlcnJfb3V0X2NpOgotCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCisJaWYgKGNxLT5pc19rZXJuZWwgJiYgbXRoY2FfaXNfbWVtZnJlZShkZXYpKQogCQltdGhjYV9mcmVlX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9DUV9TRVRfQ0ksIGNxLT5zZXRfY2lfZGJfaW5kZXgpOwogCiBlcnJfb3V0X2ljbToKQEAgLTg5Miw3ICs5MDQsOCBAQAogCQlpbnQgajsKIAogCQlwcmludGsoS0VSTl9FUlIgImNvbnRleHQgZm9yIENRTiAleCAoY29ucyBpbmRleCAleCwgbmV4dCBzdyAlZClcbiIsCi0JCSAgICAgICBjcS0+Y3FuLCBjcS0+Y29uc19pbmRleCwgISFuZXh0X2NxZV9zdyhjcSkpOworCQkgICAgICAgY3EtPmNxbiwgY3EtPmNvbnNfaW5kZXgsCisJCSAgICAgICBjcS0+aXNfa2VybmVsID8gISFuZXh0X2NxZV9zdyhjcSkgOiAwKTsKIAkJZm9yIChqID0gMDsgaiA8IDE2OyArK2opCiAJCQlwcmludGsoS0VSTl9FUlIgIlslMnhdICUwOHhcbiIsIGogKiA0LCBiZTMyX3RvX2NwdShjdHhbal0pKTsKIAl9CkBAIC05MTAsMTIgKzkyMywxMyBAQAogCWF0b21pY19kZWMoJmNxLT5yZWZjb3VudCk7CiAJd2FpdF9ldmVudChjcS0+d2FpdCwgIWF0b21pY19yZWFkKCZjcS0+cmVmY291bnQpKTsKIAotCW10aGNhX2ZyZWVfbXIoZGV2LCAmY3EtPm1yKTsKLQltdGhjYV9mcmVlX2NxX2J1ZihkZXYsIGNxKTsKLQotCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpIHsKLQkJbXRoY2FfZnJlZV9kYihkZXYsIE1USENBX0RCX1RZUEVfQ1FfQVJNLCAgICBjcS0+YXJtX2RiX2luZGV4KTsKLQkJbXRoY2FfZnJlZV9kYihkZXYsIE1USENBX0RCX1RZUEVfQ1FfU0VUX0NJLCBjcS0+c2V0X2NpX2RiX2luZGV4KTsKKwlpZiAoY3EtPmlzX2tlcm5lbCkgeworCQltdGhjYV9mcmVlX21yKGRldiwgJmNxLT5tcik7CisJCW10aGNhX2ZyZWVfY3FfYnVmKGRldiwgY3EpOworCQlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKSB7CisJCQltdGhjYV9mcmVlX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9DUV9BUk0sICAgIGNxLT5hcm1fZGJfaW5kZXgpOworCQkJbXRoY2FfZnJlZV9kYihkZXYsIE1USENBX0RCX1RZUEVfQ1FfU0VUX0NJLCBjcS0+c2V0X2NpX2RiX2luZGV4KTsKKwkJfQogCX0KIAogCW10aGNhX3RhYmxlX3B1dChkZXYsIGRldi0+Y3FfdGFibGUudGFibGUsIGNxLT5jcW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCmluZGV4IDQxMjdmMDkuLjVlY2RkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMzc4LDcgKzM3OSw3IEBACiBpbnQgbXRoY2FfdWFyX2FsbG9jKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IG10aGNhX3VhciAqdWFyKTsKIHZvaWQgbXRoY2FfdWFyX2ZyZWUoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfdWFyICp1YXIpOwogCi1pbnQgbXRoY2FfcGRfYWxsb2Moc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfcGQgKnBkKTsKK2ludCBtdGhjYV9wZF9hbGxvYyhzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIGludCBwcml2aWxlZ2VkLCBzdHJ1Y3QgbXRoY2FfcGQgKnBkKTsKIHZvaWQgbXRoY2FfcGRfZnJlZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9wZCAqcGQpOwogCiBzdHJ1Y3QgbXRoY2FfbXR0ICptdGhjYV9hbGxvY19tdHQoc3RydWN0IG10aGNhX2RldiAqZGV2LCBpbnQgc2l6ZSk7CkBAIC00MTMsNiArNDE0LDcgQEAKIGludCBtdGhjYV90YXZvcl9hcm1fY3Eoc3RydWN0IGliX2NxICpjcSwgZW51bSBpYl9jcV9ub3RpZnkgbm90aWZ5KTsKIGludCBtdGhjYV9hcmJlbF9hcm1fY3Eoc3RydWN0IGliX2NxICpjcSwgZW51bSBpYl9jcV9ub3RpZnkgbm90aWZ5KTsKIGludCBtdGhjYV9pbml0X2NxKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgaW50IG5lbnQsCisJCSAgc3RydWN0IG10aGNhX3Vjb250ZXh0ICpjdHgsIHUzMiBwZG4sCiAJCSAgc3RydWN0IG10aGNhX2NxICpjcSk7CiB2b2lkIG10aGNhX2ZyZWVfY3Eoc3RydWN0IG10aGNhX2RldiAqZGV2LAogCQkgICBzdHJ1Y3QgbXRoY2FfY3EgKmNxKTsKQEAgLTQzOCwxMiArNDQwLDE0IEBACiAJCSAgIHN0cnVjdCBtdGhjYV9jcSAqcmVjdl9jcSwKIAkJICAgZW51bSBpYl9xcF90eXBlIHR5cGUsCiAJCSAgIGVudW0gaWJfc2lnX3R5cGUgc2VuZF9wb2xpY3ksCisJCSAgIHN0cnVjdCBpYl9xcF9jYXAgKmNhcCwKIAkJICAgc3RydWN0IG10aGNhX3FwICpxcCk7CiBpbnQgbXRoY2FfYWxsb2Nfc3FwKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKIAkJICAgIHN0cnVjdCBtdGhjYV9wZCAqcGQsCiAJCSAgICBzdHJ1Y3QgbXRoY2FfY3EgKnNlbmRfY3EsCiAJCSAgICBzdHJ1Y3QgbXRoY2FfY3EgKnJlY3ZfY3EsCiAJCSAgICBlbnVtIGliX3NpZ190eXBlIHNlbmRfcG9saWN5LAorCQkgICAgc3RydWN0IGliX3FwX2NhcCAqY2FwLAogCQkgICAgaW50IHFwbiwKIAkJICAgIGludCBwb3J0LAogCQkgICAgc3RydWN0IG10aGNhX3NxcCAqc3FwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCmluZGV4IDA5NTE5YjYuLjJlZjkxNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwpAQCAtNjY1LDcgKzY2NSw3IEBACiAJCWdvdG8gZXJyX3BkX3RhYmxlX2ZyZWU7CiAJfQogCi0JZXJyID0gbXRoY2FfcGRfYWxsb2MoZGV2LCAmZGV2LT5kcml2ZXJfcGQpOworCWVyciA9IG10aGNhX3BkX2FsbG9jKGRldiwgMSwgJmRldi0+ZHJpdmVyX3BkKTsKIAlpZiAoZXJyKSB7CiAJCW10aGNhX2VycihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIGRyaXZlciBQRCwgIgogCQkJICAiYWJvcnRpbmcuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCmluZGV4IDZkM2IwNWQuLjJhODY0NjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC00Nyw2ICs0OCwxNSBAQAogCU1USENBX1RBQkxFX0NIVU5LX1NJWkUgPSAxIDw8IDE4CiB9OwogCitzdHJ1Y3QgbXRoY2FfdXNlcl9kYl90YWJsZSB7CisJc3RydWN0IHNlbWFwaG9yZSBtdXRleDsKKwlzdHJ1Y3QgeworCQl1NjQgICAgICAgICAgICAgICAgdXZpcnQ7CisJCXN0cnVjdCBzY2F0dGVybGlzdCBtZW07CisJCWludCAgICAgICAgICAgICAgICByZWZjb3VudDsKKwl9ICAgICAgICAgICAgICAgIHBhZ2VbMF07Cit9OworCiB2b2lkIG10aGNhX2ZyZWVfaWNtKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IG10aGNhX2ljbSAqaWNtKQogewogCXN0cnVjdCBtdGhjYV9pY21fY2h1bmsgKmNodW5rLCAqdG1wOwpAQCAtMzQ0LDEzICszNTQsMTMzIEBACiAJa2ZyZWUodGFibGUpOwogfQogCi1zdGF0aWMgdTY0IG10aGNhX3VhcmNfdmlydChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIGludCBwYWdlKQorc3RhdGljIHU2NCBtdGhjYV91YXJjX3ZpcnQoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfdWFyICp1YXIsIGludCBwYWdlKQogewogCXJldHVybiBkZXYtPnVhcl90YWJsZS51YXJjX2Jhc2UgKwotCQlkZXYtPmRyaXZlcl91YXIuaW5kZXggKiBkZXYtPnVhcl90YWJsZS51YXJjX3NpemUgKworCQl1YXItPmluZGV4ICogZGV2LT51YXJfdGFibGUudWFyY19zaXplICsKIAkJcGFnZSAqIDQwOTY7CiB9CiAKK2ludCBtdGhjYV9tYXBfdXNlcl9kYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV91YXIgKnVhciwKKwkJICAgICAgc3RydWN0IG10aGNhX3VzZXJfZGJfdGFibGUgKmRiX3RhYiwgaW50IGluZGV4LCB1NjQgdWFkZHIpCit7CisJaW50IHJldCA9IDA7CisJdTggc3RhdHVzOworCWludCBpOworCisJaWYgKCFtdGhjYV9pc19tZW1mcmVlKGRldikpCisJCXJldHVybiAwOworCisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IGRldi0+dWFyX3RhYmxlLnVhcmNfc2l6ZSAvIDgpCisJCXJldHVybiAtRUlOVkFMOworCisJZG93bigmZGJfdGFiLT5tdXRleCk7CisKKwlpID0gaW5kZXggLyBNVEhDQV9EQl9SRUNfUEVSX1BBR0U7CisKKwlpZiAoKGRiX3RhYi0+cGFnZVtpXS5yZWZjb3VudCA+PSBNVEhDQV9EQl9SRUNfUEVSX1BBR0UpICAgICAgIHx8CisJICAgIChkYl90YWItPnBhZ2VbaV0udXZpcnQgJiYgZGJfdGFiLT5wYWdlW2ldLnV2aXJ0ICE9IHVhZGRyKSB8fAorCSAgICAodWFkZHIgJiA0MDk1KSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGJfdGFiLT5wYWdlW2ldLnJlZmNvdW50KSB7CisJCSsrZGJfdGFiLT5wYWdlW2ldLnJlZmNvdW50OworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgdWFkZHIgJiBQQUdFX01BU0ssIDEsIDEsIDAsCisJCQkgICAgICZkYl90YWItPnBhZ2VbaV0ubWVtLnBhZ2UsIE5VTEwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWRiX3RhYi0+cGFnZVtpXS5tZW0ubGVuZ3RoID0gNDA5NjsKKwlkYl90YWItPnBhZ2VbaV0ubWVtLm9mZnNldCA9IHVhZGRyICYgflBBR0VfTUFTSzsKKworCXJldCA9IHBjaV9tYXBfc2coZGV2LT5wZGV2LCAmZGJfdGFiLT5wYWdlW2ldLm1lbSwgMSwgUENJX0RNQV9UT0RFVklDRSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHV0X3BhZ2UoZGJfdGFiLT5wYWdlW2ldLm1lbS5wYWdlKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gbXRoY2FfTUFQX0lDTV9wYWdlKGRldiwgc2dfZG1hX2FkZHJlc3MoJmRiX3RhYi0+cGFnZVtpXS5tZW0pLAorCQkJCSBtdGhjYV91YXJjX3ZpcnQoZGV2LCB1YXIsIGkpLCAmc3RhdHVzKTsKKwlpZiAoIXJldCAmJiBzdGF0dXMpCisJCXJldCA9IC1FSU5WQUw7CisJaWYgKHJldCkgeworCQlwY2lfdW5tYXBfc2coZGV2LT5wZGV2LCAmZGJfdGFiLT5wYWdlW2ldLm1lbSwgMSwgUENJX0RNQV9UT0RFVklDRSk7CisJCXB1dF9wYWdlKGRiX3RhYi0+cGFnZVtpXS5tZW0ucGFnZSk7CisJCWdvdG8gb3V0OworCX0KKworCWRiX3RhYi0+cGFnZVtpXS51dmlydCAgICA9IHVhZGRyOworCWRiX3RhYi0+cGFnZVtpXS5yZWZjb3VudCA9IDE7CisKK291dDoKKwl1cCgmZGJfdGFiLT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBtdGhjYV91bm1hcF91c2VyX2RiKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IG10aGNhX3VhciAqdWFyLAorCQkJIHN0cnVjdCBtdGhjYV91c2VyX2RiX3RhYmxlICpkYl90YWIsIGludCBpbmRleCkKK3sKKwlpZiAoIW10aGNhX2lzX21lbWZyZWUoZGV2KSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUbyBtYWtlIG91ciBib29ra2VlcGluZyBzaW1wbGVyLCB3ZSBkb24ndCB1bm1hcCBEQgorCSAqIHBhZ2VzIHVudGlsIHdlIGNsZWFuIHVwIHRoZSB3aG9sZSBkYiB0YWJsZS4KKwkgKi8KKworCWRvd24oJmRiX3RhYi0+bXV0ZXgpOworCisJLS1kYl90YWItPnBhZ2VbaW5kZXggLyBNVEhDQV9EQl9SRUNfUEVSX1BBR0VdLnJlZmNvdW50OworCisJdXAoJmRiX3RhYi0+bXV0ZXgpOworfQorCitzdHJ1Y3QgbXRoY2FfdXNlcl9kYl90YWJsZSAqbXRoY2FfaW5pdF91c2VyX2RiX3RhYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYpCit7CisJc3RydWN0IG10aGNhX3VzZXJfZGJfdGFibGUgKmRiX3RhYjsKKwlpbnQgbnBhZ2VzOworCWludCBpOworCisJaWYgKCFtdGhjYV9pc19tZW1mcmVlKGRldikpCisJCXJldHVybiBOVUxMOworCisJbnBhZ2VzID0gZGV2LT51YXJfdGFibGUudWFyY19zaXplIC8gNDA5NjsKKwlkYl90YWIgPSBrbWFsbG9jKHNpemVvZiAqZGJfdGFiICsgbnBhZ2VzICogc2l6ZW9mICpkYl90YWItPnBhZ2UsIEdGUF9LRVJORUwpOworCWlmICghZGJfdGFiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWluaXRfTVVURVgoJmRiX3RhYi0+bXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7ICsraSkgeworCQlkYl90YWItPnBhZ2VbaV0ucmVmY291bnQgPSAwOworCQlkYl90YWItPnBhZ2VbaV0udXZpcnQgICAgPSAwOworCX0KKworCXJldHVybiBkYl90YWI7Cit9CisKK3ZvaWQgbXRoY2FfY2xlYW51cF91c2VyX2RiX3RhYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV91YXIgKnVhciwKKwkJCSAgICAgICBzdHJ1Y3QgbXRoY2FfdXNlcl9kYl90YWJsZSAqZGJfdGFiKQoreworCWludCBpOworCXU4IHN0YXR1czsKKworCWlmICghbXRoY2FfaXNfbWVtZnJlZShkZXYpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT51YXJfdGFibGUudWFyY19zaXplIC8gNDA5NjsgKytpKSB7CisJCWlmIChkYl90YWItPnBhZ2VbaV0udXZpcnQpIHsKKwkJCW10aGNhX1VOTUFQX0lDTShkZXYsIG10aGNhX3VhcmNfdmlydChkZXYsIHVhciwgaSksIDEsICZzdGF0dXMpOworCQkJcGNpX3VubWFwX3NnKGRldi0+cGRldiwgJmRiX3RhYi0+cGFnZVtpXS5tZW0sIDEsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJcHV0X3BhZ2UoZGJfdGFiLT5wYWdlW2ldLm1lbS5wYWdlKTsKKwkJfQorCX0KK30KKwogaW50IG10aGNhX2FsbG9jX2RiKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgaW50IHR5cGUsIHUzMiBxbiwgdTMyICoqZGIpCiB7CiAJaW50IGdyb3VwOwpAQCAtNDA3LDcgKzUzNyw4IEBACiAJfQogCW1lbXNldChwYWdlLT5kYl9yZWMsIDAsIDQwOTYpOwogCi0JcmV0ID0gbXRoY2FfTUFQX0lDTV9wYWdlKGRldiwgcGFnZS0+bWFwcGluZywgbXRoY2FfdWFyY192aXJ0KGRldiwgaSksICZzdGF0dXMpOworCXJldCA9IG10aGNhX01BUF9JQ01fcGFnZShkZXYsIHBhZ2UtPm1hcHBpbmcsCisJCQkJIG10aGNhX3VhcmNfdmlydChkZXYsICZkZXYtPmRyaXZlcl91YXIsIGkpLCAmc3RhdHVzKTsKIAlpZiAoIXJldCAmJiBzdGF0dXMpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKHJldCkgewpAQCAtNDYxLDcgKzU5Miw3IEBACiAKIAlpZiAoYml0bWFwX2VtcHR5KHBhZ2UtPnVzZWQsIE1USENBX0RCX1JFQ19QRVJfUEFHRSkgJiYKIAkgICAgaSA+PSBkZXYtPmRiX3RhYi0+bWF4X2dyb3VwMSAtIDEpIHsKLQkJbXRoY2FfVU5NQVBfSUNNKGRldiwgbXRoY2FfdWFyY192aXJ0KGRldiwgaSksIDEsICZzdGF0dXMpOworCQltdGhjYV9VTk1BUF9JQ00oZGV2LCBtdGhjYV91YXJjX3ZpcnQoZGV2LCAmZGV2LT5kcml2ZXJfdWFyLCBpKSwgMSwgJnN0YXR1cyk7CiAKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCA0MDk2LAogCQkJCSAgcGFnZS0+ZGJfcmVjLCBwYWdlLT5tYXBwaW5nKTsKQEAgLTUzMCw3ICs2NjEsNyBAQAogCQlpZiAoIWJpdG1hcF9lbXB0eShkZXYtPmRiX3RhYi0+cGFnZVtpXS51c2VkLCBNVEhDQV9EQl9SRUNfUEVSX1BBR0UpKQogCQkJbXRoY2Ffd2FybihkZXYsICJLZXJuZWwgVUFSQyBwYWdlICVkIG5vdCBlbXB0eVxuIiwgaSk7CiAKLQkJbXRoY2FfVU5NQVBfSUNNKGRldiwgbXRoY2FfdWFyY192aXJ0KGRldiwgaSksIDEsICZzdGF0dXMpOworCQltdGhjYV9VTk1BUF9JQ00oZGV2LCBtdGhjYV91YXJjX3ZpcnQoZGV2LCAmZGV2LT5kcml2ZXJfdWFyLCBpKSwgMSwgJnN0YXR1cyk7CiAKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCA0MDk2LAogCQkJCSAgZGV2LT5kYl90YWItPnBhZ2VbaV0uZGJfcmVjLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmgKaW5kZXggZmU3YmUyYS4uNDc2MWQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMTQ4LDcgKzE0OSw3IEBACiAJc3RydWN0IHNlbWFwaG9yZSAgICAgIG11dGV4OwogfTsKIAotZW51bSB7CitlbnVtIG10aGNhX2RiX3R5cGUgewogCU1USENBX0RCX1RZUEVfSU5WQUxJRCAgID0gMHgwLAogCU1USENBX0RCX1RZUEVfQ1FfU0VUX0NJID0gMHgxLAogCU1USENBX0RCX1RZUEVfQ1FfQVJNICAgID0gMHgyLApAQCAtMTU4LDYgKzE1OSwxNyBAQAogCU1USENBX0RCX1RZUEVfR1JPVVBfU0VQID0gMHg3CiB9OwogCitzdHJ1Y3QgbXRoY2FfdXNlcl9kYl90YWJsZTsKK3N0cnVjdCBtdGhjYV91YXI7CisKK2ludCBtdGhjYV9tYXBfdXNlcl9kYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV91YXIgKnVhciwKKwkJICAgICAgc3RydWN0IG10aGNhX3VzZXJfZGJfdGFibGUgKmRiX3RhYiwgaW50IGluZGV4LCB1NjQgdWFkZHIpOwordm9pZCBtdGhjYV91bm1hcF91c2VyX2RiKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IG10aGNhX3VhciAqdWFyLAorCQkJIHN0cnVjdCBtdGhjYV91c2VyX2RiX3RhYmxlICpkYl90YWIsIGludCBpbmRleCk7CitzdHJ1Y3QgbXRoY2FfdXNlcl9kYl90YWJsZSAqbXRoY2FfaW5pdF91c2VyX2RiX3RhYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYpOwordm9pZCBtdGhjYV9jbGVhbnVwX3VzZXJfZGJfdGFiKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IG10aGNhX3VhciAqdWFyLAorCQkJICAgICAgIHN0cnVjdCBtdGhjYV91c2VyX2RiX3RhYmxlICpkYl90YWIpOworCiBpbnQgbXRoY2FfaW5pdF9kYl90YWIoc3RydWN0IG10aGNhX2RldiAqZGV2KTsKIHZvaWQgbXRoY2FfY2xlYW51cF9kYl90YWIoc3RydWN0IG10aGNhX2RldiAqZGV2KTsKIGludCBtdGhjYV9hbGxvY19kYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIGludCB0eXBlLCB1MzIgcW4sIHUzMiAqKmRiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3BkLmMKaW5kZXggZWE2Njg0Ny4uYzJjODk5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3BkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3BkLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0zNywyMyArMzgsMjcgQEAKIAogI2luY2x1ZGUgIm10aGNhX2Rldi5oIgogCi1pbnQgbXRoY2FfcGRfYWxsb2Moc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfcGQgKnBkKQoraW50IG10aGNhX3BkX2FsbG9jKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgaW50IHByaXZpbGVnZWQsIHN0cnVjdCBtdGhjYV9wZCAqcGQpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCW1pZ2h0X3NsZWVwKCk7CiAKKwlwZC0+cHJpdmlsZWdlZCA9IHByaXZpbGVnZWQ7CisKIAlhdG9taWNfc2V0KCZwZC0+c3FwX2NvdW50LCAwKTsKIAlwZC0+cGRfbnVtID0gbXRoY2FfYWxsb2MoJmRldi0+cGRfdGFibGUuYWxsb2MpOwogCWlmIChwZC0+cGRfbnVtID09IC0xKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IG10aGNhX21yX2FsbG9jX25vdHJhbnMoZGV2LCBwZC0+cGRfbnVtLAotCQkJCSAgICAgTVRIQ0FfTVBUX0ZMQUdfTE9DQUxfUkVBRCB8Ci0JCQkJICAgICBNVEhDQV9NUFRfRkxBR19MT0NBTF9XUklURSwKLQkJCQkgICAgICZwZC0+bnRtcik7Ci0JaWYgKGVycikKLQkJbXRoY2FfZnJlZSgmZGV2LT5wZF90YWJsZS5hbGxvYywgcGQtPnBkX251bSk7CisJaWYgKHByaXZpbGVnZWQpIHsKKwkJZXJyID0gbXRoY2FfbXJfYWxsb2Nfbm90cmFucyhkZXYsIHBkLT5wZF9udW0sCisJCQkJCSAgICAgTVRIQ0FfTVBUX0ZMQUdfTE9DQUxfUkVBRCB8CisJCQkJCSAgICAgTVRIQ0FfTVBUX0ZMQUdfTE9DQUxfV1JJVEUsCisJCQkJCSAgICAgJnBkLT5udG1yKTsKKwkJaWYgKGVycikKKwkJCW10aGNhX2ZyZWUoJmRldi0+cGRfdGFibGUuYWxsb2MsIHBkLT5wZF9udW0pOworCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC02MSw3ICs2Niw4IEBACiB2b2lkIG10aGNhX3BkX2ZyZWUoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfcGQgKnBkKQogewogCW1pZ2h0X3NsZWVwKCk7Ci0JbXRoY2FfZnJlZV9tcihkZXYsICZwZC0+bnRtcik7CisJaWYgKHBkLT5wcml2aWxlZ2VkKQorCQltdGhjYV9mcmVlX21yKGRldiwgJnBkLT5udG1yKTsKIAltdGhjYV9mcmVlKCZkZXYtPnBkX3RhYmxlLmFsbG9jLCBwZC0+cGRfbnVtKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwppbmRleCAwYjVhZGZkLi43YTU4Y2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTM0LDkgKzM1LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPGliX3NtaS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlICJtdGhjYV9kZXYuaCIKICNpbmNsdWRlICJtdGhjYV9jbWQuaCIKKyNpbmNsdWRlICJtdGhjYV91c2VyLmgiCisjaW5jbHVkZSAibXRoY2FfbWVtZnJlZS5oIgogCiBzdGF0aWMgaW50IG10aGNhX3F1ZXJ5X2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKIAkJCSAgICAgIHN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqcHJvcHMpCkBAIC0yODQsNyArMjg4LDc4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBpYl9wZCAqbXRoY2FfYWxsb2NfcGQoc3RydWN0IGliX2RldmljZSAqaWJkZXYpCitzdGF0aWMgc3RydWN0IGliX3Vjb250ZXh0ICptdGhjYV9hbGxvY191Y29udGV4dChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKKwkJCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IG10aGNhX2FsbG9jX3Vjb250ZXh0X3Jlc3AgdXJlc3A7CisJc3RydWN0IG10aGNhX3Vjb250ZXh0ICAgICAgICAgICAqY29udGV4dDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnI7CisKKwltZW1zZXQoJnVyZXNwLCAwLCBzaXplb2YgdXJlc3ApOworCisJdXJlc3AucXBfdGFiX3NpemUgPSB0b19tZGV2KGliZGV2KS0+bGltaXRzLm51bV9xcHM7CisJaWYgKG10aGNhX2lzX21lbWZyZWUodG9fbWRldihpYmRldikpKQorCQl1cmVzcC51YXJjX3NpemUgPSB0b19tZGV2KGliZGV2KS0+dWFyX3RhYmxlLnVhcmNfc2l6ZTsKKwllbHNlCisJCXVyZXNwLnVhcmNfc2l6ZSA9IDA7CisKKwljb250ZXh0ID0ga21hbGxvYyhzaXplb2YgKmNvbnRleHQsIEdGUF9LRVJORUwpOworCWlmICghY29udGV4dCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllcnIgPSBtdGhjYV91YXJfYWxsb2ModG9fbWRldihpYmRldiksICZjb250ZXh0LT51YXIpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoY29udGV4dCk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJY29udGV4dC0+ZGJfdGFiID0gbXRoY2FfaW5pdF91c2VyX2RiX3RhYih0b19tZGV2KGliZGV2KSk7CisJaWYgKElTX0VSUihjb250ZXh0LT5kYl90YWIpKSB7CisJCWVyciA9IFBUUl9FUlIoY29udGV4dC0+ZGJfdGFiKTsKKwkJbXRoY2FfdWFyX2ZyZWUodG9fbWRldihpYmRldiksICZjb250ZXh0LT51YXIpOworCQlrZnJlZShjb250ZXh0KTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKKwlpZiAoaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJnVyZXNwLCBzaXplb2YgdXJlc3ApKSB7CisJCW10aGNhX2NsZWFudXBfdXNlcl9kYl90YWIodG9fbWRldihpYmRldiksICZjb250ZXh0LT51YXIsIGNvbnRleHQtPmRiX3RhYik7CisJCW10aGNhX3Vhcl9mcmVlKHRvX21kZXYoaWJkZXYpLCAmY29udGV4dC0+dWFyKTsKKwkJa2ZyZWUoY29udGV4dCk7CisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCX0KKworCXJldHVybiAmY29udGV4dC0+aWJ1Y29udGV4dDsKK30KKworc3RhdGljIGludCBtdGhjYV9kZWFsbG9jX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3sKKwltdGhjYV9jbGVhbnVwX3VzZXJfZGJfdGFiKHRvX21kZXYoY29udGV4dC0+ZGV2aWNlKSwgJnRvX211Y29udGV4dChjb250ZXh0KS0+dWFyLAorCQkJCSAgdG9fbXVjb250ZXh0KGNvbnRleHQpLT5kYl90YWIpOworCW10aGNhX3Vhcl9mcmVlKHRvX21kZXYoY29udGV4dC0+ZGV2aWNlKSwgJnRvX211Y29udGV4dChjb250ZXh0KS0+dWFyKTsKKwlrZnJlZSh0b19tdWNvbnRleHQoY29udGV4dCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRoY2FfbW1hcF91YXIoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAorCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0ICE9IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOworCisJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCisJCQkgICAgdG9fbXVjb250ZXh0KGNvbnRleHQpLT51YXIucGZuLAorCQkJICAgIFBBR0VfU0laRSwgdm1hLT52bV9wYWdlX3Byb3QpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGliX3BkICptdGhjYV9hbGxvY19wZChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKKwkJCQkgICAgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAorCQkJCSAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewogCXN0cnVjdCBtdGhjYV9wZCAqcGQ7CiAJaW50IGVycjsKQEAgLTI5MywxMiArMzY4LDIwIEBACiAJaWYgKCFwZCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQllcnIgPSBtdGhjYV9wZF9hbGxvYyh0b19tZGV2KGliZGV2KSwgcGQpOworCWVyciA9IG10aGNhX3BkX2FsbG9jKHRvX21kZXYoaWJkZXYpLCAhY29udGV4dCwgcGQpOwogCWlmIChlcnIpIHsKIAkJa2ZyZWUocGQpOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KIAorCWlmIChjb250ZXh0KSB7CisJCWlmIChpYl9jb3B5X3RvX3VkYXRhKHVkYXRhLCAmcGQtPnBkX251bSwgc2l6ZW9mIChfX3UzMikpKSB7CisJCQltdGhjYV9wZF9mcmVlKHRvX21kZXYoaWJkZXYpLCBwZCk7CisJCQlrZnJlZShwZCk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKKwkJfQorCX0KKwogCXJldHVybiAmcGQtPmlicGQ7CiB9CiAKQEAgLTMzOCw4ICs0MjEsMTAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpYl9xcCAqbXRoY2FfY3JlYXRlX3FwKHN0cnVjdCBpYl9wZCAqcGQsCi0JCQkJICAgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHIpCisJCQkJICAgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHIsCisJCQkJICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogeworCXN0cnVjdCBtdGhjYV9jcmVhdGVfcXAgdWNtZDsKIAlzdHJ1Y3QgbXRoY2FfcXAgKnFwOwogCWludCBlcnI7CiAKQEAgLTM0OCw0MSArNDMzLDgyIEBACiAJY2FzZSBJQl9RUFRfVUM6CiAJY2FzZSBJQl9RUFRfVUQ6CiAJeworCQlzdHJ1Y3QgbXRoY2FfdWNvbnRleHQgKmNvbnRleHQ7CisKIAkJcXAgPSBrbWFsbG9jKHNpemVvZiAqcXAsIEdGUF9LRVJORUwpOwogCQlpZiAoIXFwKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQkJcXAtPnNxLm1heCAgICA9IGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyOwotCQlxcC0+cnEubWF4ICAgID0gaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3I7Ci0JCXFwLT5zcS5tYXhfZ3MgPSBpbml0X2F0dHItPmNhcC5tYXhfc2VuZF9zZ2U7Ci0JCXFwLT5ycS5tYXhfZ3MgPSBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl9zZ2U7CisJCWlmIChwZC0+dW9iamVjdCkgeworCQkJY29udGV4dCA9IHRvX211Y29udGV4dChwZC0+dW9iamVjdC0+Y29udGV4dCk7CisKKwkJCWlmIChpYl9jb3B5X2Zyb21fdWRhdGEoJnVjbWQsIHVkYXRhLCBzaXplb2YgdWNtZCkpCisJCQkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisKKwkJCWVyciA9IG10aGNhX21hcF91c2VyX2RiKHRvX21kZXYocGQtPmRldmljZSksICZjb250ZXh0LT51YXIsCisJCQkJCQljb250ZXh0LT5kYl90YWIsCisJCQkJCQl1Y21kLnNxX2RiX2luZGV4LCB1Y21kLnNxX2RiX3BhZ2UpOworCQkJaWYgKGVycikgeworCQkJCWtmcmVlKHFwKTsKKwkJCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCQkJfQorCisJCQllcnIgPSBtdGhjYV9tYXBfdXNlcl9kYih0b19tZGV2KHBkLT5kZXZpY2UpLCAmY29udGV4dC0+dWFyLAorCQkJCQkJY29udGV4dC0+ZGJfdGFiLAorCQkJCQkJdWNtZC5ycV9kYl9pbmRleCwgdWNtZC5ycV9kYl9wYWdlKTsKKwkJCWlmIChlcnIpIHsKKwkJCQltdGhjYV91bm1hcF91c2VyX2RiKHRvX21kZXYocGQtPmRldmljZSksCisJCQkJCQkgICAgJmNvbnRleHQtPnVhciwKKwkJCQkJCSAgICBjb250ZXh0LT5kYl90YWIsCisJCQkJCQkgICAgdWNtZC5zcV9kYl9pbmRleCk7CisJCQkJa2ZyZWUocXApOworCQkJCXJldHVybiBFUlJfUFRSKGVycik7CisJCQl9CisKKwkJCXFwLT5tci5pYm1yLmxrZXkgPSB1Y21kLmxrZXk7CisJCQlxcC0+c3EuZGJfaW5kZXggID0gdWNtZC5zcV9kYl9pbmRleDsKKwkJCXFwLT5ycS5kYl9pbmRleCAgPSB1Y21kLnJxX2RiX2luZGV4OworCQl9CiAKIAkJZXJyID0gbXRoY2FfYWxsb2NfcXAodG9fbWRldihwZC0+ZGV2aWNlKSwgdG9fbXBkKHBkKSwKIAkJCQkgICAgIHRvX21jcShpbml0X2F0dHItPnNlbmRfY3EpLAogCQkJCSAgICAgdG9fbWNxKGluaXRfYXR0ci0+cmVjdl9jcSksCiAJCQkJICAgICBpbml0X2F0dHItPnFwX3R5cGUsIGluaXRfYXR0ci0+c3Ffc2lnX3R5cGUsCi0JCQkJICAgICBxcCk7CisJCQkJICAgICAmaW5pdF9hdHRyLT5jYXAsIHFwKTsKKworCQlpZiAoZXJyICYmIHBkLT51b2JqZWN0KSB7CisJCQljb250ZXh0ID0gdG9fbXVjb250ZXh0KHBkLT51b2JqZWN0LT5jb250ZXh0KTsKKworCQkJbXRoY2FfdW5tYXBfdXNlcl9kYih0b19tZGV2KHBkLT5kZXZpY2UpLAorCQkJCQkgICAgJmNvbnRleHQtPnVhciwKKwkJCQkJICAgIGNvbnRleHQtPmRiX3RhYiwKKwkJCQkJICAgIHVjbWQuc3FfZGJfaW5kZXgpOworCQkJbXRoY2FfdW5tYXBfdXNlcl9kYih0b19tZGV2KHBkLT5kZXZpY2UpLAorCQkJCQkgICAgJmNvbnRleHQtPnVhciwKKwkJCQkJICAgIGNvbnRleHQtPmRiX3RhYiwKKwkJCQkJICAgIHVjbWQucnFfZGJfaW5kZXgpOworCQl9CisKIAkJcXAtPmlicXAucXBfbnVtID0gcXAtPnFwbjsKIAkJYnJlYWs7CiAJfQogCWNhc2UgSUJfUVBUX1NNSToKIAljYXNlIElCX1FQVF9HU0k6CiAJeworCQkvKiBEb24ndCBhbGxvdyB1c2Vyc3BhY2UgdG8gY3JlYXRlIHNwZWNpYWwgUVBzICovCisJCWlmIChwZC0+dW9iamVjdCkKKwkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCiAJCXFwID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBtdGhjYV9zcXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFxcCkKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JCXFwLT5zcS5tYXggICAgPSBpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93cjsKLQkJcXAtPnJxLm1heCAgICA9IGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyOwotCQlxcC0+c3EubWF4X2dzID0gaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlOwotCQlxcC0+cnEubWF4X2dzID0gaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlOwotCiAJCXFwLT5pYnFwLnFwX251bSA9IGluaXRfYXR0ci0+cXBfdHlwZSA9PSBJQl9RUFRfU01JID8gMCA6IDE7CiAKIAkJZXJyID0gbXRoY2FfYWxsb2Nfc3FwKHRvX21kZXYocGQtPmRldmljZSksIHRvX21wZChwZCksCiAJCQkJICAgICAgdG9fbWNxKGluaXRfYXR0ci0+c2VuZF9jcSksCiAJCQkJICAgICAgdG9fbWNxKGluaXRfYXR0ci0+cmVjdl9jcSksCi0JCQkJICAgICAgaW5pdF9hdHRyLT5zcV9zaWdfdHlwZSwKKwkJCQkgICAgICBpbml0X2F0dHItPnNxX3NpZ190eXBlLCAmaW5pdF9hdHRyLT5jYXAsCiAJCQkJICAgICAgcXAtPmlicXAucXBfbnVtLCBpbml0X2F0dHItPnBvcnRfbnVtLAogCQkJCSAgICAgIHRvX21zcXAocXApKTsKIAkJYnJlYWs7CkBAIC0zOTcsNDIgKzUyMywxMTUgQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAl9CiAKLSAgICAgICAgaW5pdF9hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gMDsKKwlpbml0X2F0dHItPmNhcC5tYXhfaW5saW5lX2RhdGEgPSAwOworCWluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyICAgICA9IHFwLT5zcS5tYXg7CisJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgICAgID0gcXAtPnJxLm1heDsKKwlpbml0X2F0dHItPmNhcC5tYXhfc2VuZF9zZ2UgICAgPSBxcC0+c3EubWF4X2dzOworCWluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSAgICA9IHFwLT5ycS5tYXhfZ3M7CiAKIAlyZXR1cm4gJnFwLT5pYnFwOwogfQogCiBzdGF0aWMgaW50IG10aGNhX2Rlc3Ryb3lfcXAoc3RydWN0IGliX3FwICpxcCkKIHsKKwlpZiAocXAtPnVvYmplY3QpIHsKKwkJbXRoY2FfdW5tYXBfdXNlcl9kYih0b19tZGV2KHFwLT5kZXZpY2UpLAorCQkJCSAgICAmdG9fbXVjb250ZXh0KHFwLT51b2JqZWN0LT5jb250ZXh0KS0+dWFyLAorCQkJCSAgICB0b19tdWNvbnRleHQocXAtPnVvYmplY3QtPmNvbnRleHQpLT5kYl90YWIsCisJCQkJICAgIHRvX21xcChxcCktPnNxLmRiX2luZGV4KTsKKwkJbXRoY2FfdW5tYXBfdXNlcl9kYih0b19tZGV2KHFwLT5kZXZpY2UpLAorCQkJCSAgICAmdG9fbXVjb250ZXh0KHFwLT51b2JqZWN0LT5jb250ZXh0KS0+dWFyLAorCQkJCSAgICB0b19tdWNvbnRleHQocXAtPnVvYmplY3QtPmNvbnRleHQpLT5kYl90YWIsCisJCQkJICAgIHRvX21xcChxcCktPnJxLmRiX2luZGV4KTsKKwl9CiAJbXRoY2FfZnJlZV9xcCh0b19tZGV2KHFwLT5kZXZpY2UpLCB0b19tcXAocXApKTsKIAlrZnJlZShxcCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaWJfY3EgKm10aGNhX2NyZWF0ZV9jcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgaW50IGVudHJpZXMpCitzdGF0aWMgc3RydWN0IGliX2NxICptdGhjYV9jcmVhdGVfY3Eoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGludCBlbnRyaWVzLAorCQkJCSAgICAgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAorCQkJCSAgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKIHsKKwlzdHJ1Y3QgbXRoY2FfY3JlYXRlX2NxIHVjbWQ7CiAJc3RydWN0IG10aGNhX2NxICpjcTsKIAlpbnQgbmVudDsKIAlpbnQgZXJyOwogCisJaWYgKGNvbnRleHQpIHsKKwkJaWYgKGliX2NvcHlfZnJvbV91ZGF0YSgmdWNtZCwgdWRhdGEsIHNpemVvZiB1Y21kKSkKKwkJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCisJCWVyciA9IG10aGNhX21hcF91c2VyX2RiKHRvX21kZXYoaWJkZXYpLCAmdG9fbXVjb250ZXh0KGNvbnRleHQpLT51YXIsCisJCQkJCXRvX211Y29udGV4dChjb250ZXh0KS0+ZGJfdGFiLAorCQkJCQl1Y21kLnNldF9kYl9pbmRleCwgdWNtZC5zZXRfZGJfcGFnZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJCWVyciA9IG10aGNhX21hcF91c2VyX2RiKHRvX21kZXYoaWJkZXYpLCAmdG9fbXVjb250ZXh0KGNvbnRleHQpLT51YXIsCisJCQkJCXRvX211Y29udGV4dChjb250ZXh0KS0+ZGJfdGFiLAorCQkJCQl1Y21kLmFybV9kYl9pbmRleCwgdWNtZC5hcm1fZGJfcGFnZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl91bm1hcF9zZXQ7CisJfQorCiAJY3EgPSBrbWFsbG9jKHNpemVvZiAqY3EsIEdGUF9LRVJORUwpOwotCWlmICghY3EpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlmICghY3EpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfdW5tYXBfYXJtOworCX0KKworCWlmIChjb250ZXh0KSB7CisJCWNxLT5tci5pYm1yLmxrZXkgICAgPSB1Y21kLmxrZXk7CisJCWNxLT5zZXRfY2lfZGJfaW5kZXggPSB1Y21kLnNldF9kYl9pbmRleDsKKwkJY3EtPmFybV9kYl9pbmRleCAgICA9IHVjbWQuYXJtX2RiX2luZGV4OworCX0KIAogCWZvciAobmVudCA9IDE7IG5lbnQgPD0gZW50cmllczsgbmVudCA8PD0gMSkKIAkJOyAvKiBub3RoaW5nICovCiAKLQllcnIgPSBtdGhjYV9pbml0X2NxKHRvX21kZXYoaWJkZXYpLCBuZW50LCBjcSk7Ci0JaWYgKGVycikgewotCQlrZnJlZShjcSk7Ci0JCWNxID0gRVJSX1BUUihlcnIpOworCWVyciA9IG10aGNhX2luaXRfY3EodG9fbWRldihpYmRldiksIG5lbnQsCisJCQkgICAgY29udGV4dCA/IHRvX211Y29udGV4dChjb250ZXh0KSA6IE5VTEwsCisJCQkgICAgY29udGV4dCA/IHVjbWQucGRuIDogdG9fbWRldihpYmRldiktPmRyaXZlcl9wZC5wZF9udW0sCisJCQkgICAgY3EpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlpZiAoY29udGV4dCAmJiBpYl9jb3B5X3RvX3VkYXRhKHVkYXRhLCAmY3EtPmNxbiwgc2l6ZW9mIChfX3UzMikpKSB7CisJCW10aGNhX2ZyZWVfY3EodG9fbWRldihpYmRldiksIGNxKTsKKwkJZ290byBlcnJfZnJlZTsKIAl9CiAKIAlyZXR1cm4gJmNxLT5pYmNxOworCitlcnJfZnJlZToKKwlrZnJlZShjcSk7CisKK2Vycl91bm1hcF9hcm06CisJaWYgKGNvbnRleHQpCisJCW10aGNhX3VubWFwX3VzZXJfZGIodG9fbWRldihpYmRldiksICZ0b19tdWNvbnRleHQoY29udGV4dCktPnVhciwKKwkJCQkgICAgdG9fbXVjb250ZXh0KGNvbnRleHQpLT5kYl90YWIsIHVjbWQuYXJtX2RiX2luZGV4KTsKKworZXJyX3VubWFwX3NldDoKKwlpZiAoY29udGV4dCkKKwkJbXRoY2FfdW5tYXBfdXNlcl9kYih0b19tZGV2KGliZGV2KSwgJnRvX211Y29udGV4dChjb250ZXh0KS0+dWFyLAorCQkJCSAgICB0b19tdWNvbnRleHQoY29udGV4dCktPmRiX3RhYiwgdWNtZC5zZXRfZGJfaW5kZXgpOworCisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAogc3RhdGljIGludCBtdGhjYV9kZXN0cm95X2NxKHN0cnVjdCBpYl9jcSAqY3EpCiB7CisJaWYgKGNxLT51b2JqZWN0KSB7CisJCW10aGNhX3VubWFwX3VzZXJfZGIodG9fbWRldihjcS0+ZGV2aWNlKSwKKwkJCQkgICAgJnRvX211Y29udGV4dChjcS0+dW9iamVjdC0+Y29udGV4dCktPnVhciwKKwkJCQkgICAgdG9fbXVjb250ZXh0KGNxLT51b2JqZWN0LT5jb250ZXh0KS0+ZGJfdGFiLAorCQkJCSAgICB0b19tY3EoY3EpLT5hcm1fZGJfaW5kZXgpOworCQltdGhjYV91bm1hcF91c2VyX2RiKHRvX21kZXYoY3EtPmRldmljZSksCisJCQkJICAgICZ0b19tdWNvbnRleHQoY3EtPnVvYmplY3QtPmNvbnRleHQpLT51YXIsCisJCQkJICAgIHRvX211Y29udGV4dChjcS0+dW9iamVjdC0+Y29udGV4dCktPmRiX3RhYiwKKwkJCQkgICAgdG9fbWNxKGNxKS0+c2V0X2NpX2RiX2luZGV4KTsKKwl9CiAJbXRoY2FfZnJlZV9jcSh0b19tZGV2KGNxLT5kZXZpY2UpLCB0b19tY3EoY3EpKTsKIAlrZnJlZShjcSk7CiAKQEAgLTU2OCw2ICs3NjcsODcgQEAKIAlyZXR1cm4gJm1yLT5pYm1yOwogfQogCitzdGF0aWMgc3RydWN0IGliX21yICptdGhjYV9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqcmVnaW9uLAorCQkJCSAgICAgICBpbnQgYWNjLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBtdGhjYV9kZXYgKmRldiA9IHRvX21kZXYocGQtPmRldmljZSk7CisJc3RydWN0IGliX3VtZW1fY2h1bmsgKmNodW5rOworCXN0cnVjdCBtdGhjYV9tciAqbXI7CisJdTY0ICpwYWdlczsKKwlpbnQgc2hpZnQsIG4sIGxlbjsKKwlpbnQgaSwgaiwgazsKKwlpbnQgZXJyID0gMDsKKworCXNoaWZ0ID0gZmZzKHJlZ2lvbi0+cGFnZV9zaXplKSAtIDE7CisKKwltciA9IGttYWxsb2Moc2l6ZW9mICptciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwluID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmcmVnaW9uLT5jaHVua19saXN0LCBsaXN0KQorCQluICs9IGNodW5rLT5uZW50czsKKworCW1yLT5tdHQgPSBtdGhjYV9hbGxvY19tdHQoZGV2LCBuKTsKKwlpZiAoSVNfRVJSKG1yLT5tdHQpKSB7CisJCWVyciA9IFBUUl9FUlIobXItPm10dCk7CisJCWdvdG8gZXJyOworCX0KKworCXBhZ2VzID0gKHU2NCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9tdHQ7CisJfQorCisJaSA9IG4gPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJnJlZ2lvbi0+Y2h1bmtfbGlzdCwgbGlzdCkKKwkJZm9yIChqID0gMDsgaiA8IGNodW5rLT5ubWFwOyArK2opIHsKKwkJCWxlbiA9IHNnX2RtYV9sZW4oJmNodW5rLT5wYWdlX2xpc3Rbal0pID4+IHNoaWZ0OworCQkJZm9yIChrID0gMDsgayA8IGxlbjsgKytrKSB7CisJCQkJcGFnZXNbaSsrXSA9IHNnX2RtYV9hZGRyZXNzKCZjaHVuay0+cGFnZV9saXN0W2pdKSArCisJCQkJCXJlZ2lvbi0+cGFnZV9zaXplICogazsKKwkJCQkvKgorCQkJCSAqIEJlIGZyaWVuZGx5IHRvIFdSSVRFX01UVCBjb21tYW5kCisJCQkJICogYW5kIGxlYXZlIHR3byBlbXB0eSBzbG90cyBmb3IgdGhlCisJCQkJICogaW5kZXggYW5kIHJlc2VydmVkIGZpZWxkcyBvZiB0aGUKKwkJCQkgKiBtYWlsYm94LgorCQkJCSAqLworCQkJCWlmIChpID09IFBBR0VfU0laRSAvIHNpemVvZiAodTY0KSAtIDIpIHsKKwkJCQkJZXJyID0gbXRoY2Ffd3JpdGVfbXR0KGRldiwgbXItPm10dCwKKwkJCQkJCQkgICAgICBuLCBwYWdlcywgaSk7CisJCQkJCWlmIChlcnIpCisJCQkJCQlnb3RvIG10dF9kb25lOworCQkJCQluICs9IGk7CisJCQkJCWkgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCisJaWYgKGkpCisJCWVyciA9IG10aGNhX3dyaXRlX210dChkZXYsIG1yLT5tdHQsIG4sIHBhZ2VzLCBpKTsKK210dF9kb25lOgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZXMpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX210dDsKKworCWVyciA9IG10aGNhX21yX2FsbG9jKGRldiwgdG9fbXBkKHBkKS0+cGRfbnVtLCBzaGlmdCwgcmVnaW9uLT52aXJ0X2Jhc2UsCisJCQkgICAgIHJlZ2lvbi0+bGVuZ3RoLCBjb252ZXJ0X2FjY2VzcyhhY2MpLCBtcik7CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9tdHQ7CisKKwlyZXR1cm4gJm1yLT5pYm1yOworCitlcnJfbXR0OgorCW10aGNhX2ZyZWVfbXR0KGRldiwgbXItPm10dCk7CisKK2VycjoKKwlrZnJlZShtcik7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwogc3RhdGljIGludCBtdGhjYV9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKm1yKQogewogCXN0cnVjdCBtdGhjYV9tciAqbW1yID0gdG9fbW1yKG1yKTsKQEAgLTY5Miw2ICs5NzIsOCBAQAogCWludCBpOwogCiAJc3RybGNweShkZXYtPmliX2Rldi5uYW1lLCAibXRoY2ElZCIsIElCX0RFVklDRV9OQU1FX01BWCk7CisJZGV2LT5pYl9kZXYub3duZXIgICAgICAgICAgICAgICAgPSBUSElTX01PRFVMRTsKKwogCWRldi0+aWJfZGV2Lm5vZGVfdHlwZSAgICAgICAgICAgID0gSUJfTk9ERV9DQTsKIAlkZXYtPmliX2Rldi5waHlzX3BvcnRfY250ICAgICAgICA9IGRldi0+bGltaXRzLm51bV9wb3J0czsKIAlkZXYtPmliX2Rldi5kbWFfZGV2aWNlICAgICAgICAgICA9ICZkZXYtPnBkZXYtPmRldjsKQEAgLTcwMSw2ICs5ODMsOSBAQAogCWRldi0+aWJfZGV2Lm1vZGlmeV9wb3J0ICAgICAgICAgID0gbXRoY2FfbW9kaWZ5X3BvcnQ7CiAJZGV2LT5pYl9kZXYucXVlcnlfcGtleSAgICAgICAgICAgPSBtdGhjYV9xdWVyeV9wa2V5OwogCWRldi0+aWJfZGV2LnF1ZXJ5X2dpZCAgICAgICAgICAgID0gbXRoY2FfcXVlcnlfZ2lkOworCWRldi0+aWJfZGV2LmFsbG9jX3Vjb250ZXh0ICAgICAgID0gbXRoY2FfYWxsb2NfdWNvbnRleHQ7CisJZGV2LT5pYl9kZXYuZGVhbGxvY191Y29udGV4dCAgICAgPSBtdGhjYV9kZWFsbG9jX3Vjb250ZXh0OworCWRldi0+aWJfZGV2Lm1tYXAgICAgICAgICAgICAgICAgID0gbXRoY2FfbW1hcF91YXI7CiAJZGV2LT5pYl9kZXYuYWxsb2NfcGQgICAgICAgICAgICAgPSBtdGhjYV9hbGxvY19wZDsKIAlkZXYtPmliX2Rldi5kZWFsbG9jX3BkICAgICAgICAgICA9IG10aGNhX2RlYWxsb2NfcGQ7CiAJZGV2LT5pYl9kZXYuY3JlYXRlX2FoICAgICAgICAgICAgPSBtdGhjYV9haF9jcmVhdGU7CkBAIC03MTMsNiArOTk4LDcgQEAKIAlkZXYtPmliX2Rldi5wb2xsX2NxICAgICAgICAgICAgICA9IG10aGNhX3BvbGxfY3E7CiAJZGV2LT5pYl9kZXYuZ2V0X2RtYV9tciAgICAgICAgICAgPSBtdGhjYV9nZXRfZG1hX21yOwogCWRldi0+aWJfZGV2LnJlZ19waHlzX21yICAgICAgICAgID0gbXRoY2FfcmVnX3BoeXNfbXI7CisJZGV2LT5pYl9kZXYucmVnX3VzZXJfbXIgICAgICAgICAgPSBtdGhjYV9yZWdfdXNlcl9tcjsKIAlkZXYtPmliX2Rldi5kZXJlZ19tciAgICAgICAgICAgICA9IG10aGNhX2RlcmVnX21yOwogCiAJaWYgKGRldi0+bXRoY2FfZmxhZ3MgJiBNVEhDQV9GTEFHX0ZNUikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaAppbmRleCA0ZDk3NmNjLi4xZDAzMjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTU0LDYgKzU1LDE0IEBACiAJaW50ICAgICAgICAgICBpbmRleDsKIH07CiAKK3N0cnVjdCBtdGhjYV91c2VyX2RiX3RhYmxlOworCitzdHJ1Y3QgbXRoY2FfdWNvbnRleHQgeworCXN0cnVjdCBpYl91Y29udGV4dCAgICAgICAgICBpYnVjb250ZXh0OworCXN0cnVjdCBtdGhjYV91YXIgICAgICAgICAgICB1YXI7CisJc3RydWN0IG10aGNhX3VzZXJfZGJfdGFibGUgKmRiX3RhYjsKK307CisKIHN0cnVjdCBtdGhjYV9tdHQ7CiAKIHN0cnVjdCBtdGhjYV9tciB7CkBAIC04Myw2ICs5Miw3IEBACiAJdTMyICAgICAgICAgICAgIHBkX251bTsKIAlhdG9taWNfdCAgICAgICAgc3FwX2NvdW50OwogCXN0cnVjdCBtdGhjYV9tciBudG1yOworCWludCAgICAgICAgICAgICBwcml2aWxlZ2VkOwogfTsKIAogc3RydWN0IG10aGNhX2VxIHsKQEAgLTE2Nyw2ICsxNzcsNyBAQAogCWludCAgICAgICAgICAgICAgICAgICAgY3FuOwogCXUzMiAgICAgICAgICAgICAgICAgICAgY29uc19pbmRleDsKIAlpbnQgICAgICAgICAgICAgICAgICAgIGlzX2RpcmVjdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgIGlzX2tlcm5lbDsKIAogCS8qIE5leHQgZmllbGRzIGFyZSBBcmJlbCBvbmx5ICovCiAJaW50ICAgICAgICAgICAgICAgICAgICBzZXRfY2lfZGJfaW5kZXg7CkBAIC0yMzYsNiArMjQ3LDExIEBACiAJZG1hX2FkZHJfdCAgICAgIGhlYWRlcl9kbWE7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGhjYV91Y29udGV4dCAqdG9fbXVjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1Y29udGV4dCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlidWNvbnRleHQsIHN0cnVjdCBtdGhjYV91Y29udGV4dCwgaWJ1Y29udGV4dCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG10aGNhX2ZtciAqdG9fbWZtcihzdHJ1Y3QgaWJfZm1yICppYm1yKQogewogCXJldHVybiBjb250YWluZXJfb2YoaWJtciwgc3RydWN0IG10aGNhX2ZtciwgaWJtcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCmluZGV4IDE2M2E4ZWYuLmY3MTI2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNCBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC00Niw3ICs0Nyw5IEBACiAJTVRIQ0FfTUFYX0RJUkVDVF9RUF9TSVpFID0gNCAqIFBBR0VfU0laRSwKIAlNVEhDQV9BQ0tfUkVRX0ZSRVEgICAgICAgPSAxMCwKIAlNVEhDQV9GTElHSFRfTElNSVQgICAgICAgPSA5LAotCU1USENBX1VEX0hFQURFUl9TSVpFICAgICA9IDcyIC8qIGxhcmdlc3QgVUQgaGVhZGVyIHBvc3NpYmxlICovCisJTVRIQ0FfVURfSEVBREVSX1NJWkUgICAgID0gNzIsIC8qIGxhcmdlc3QgVUQgaGVhZGVyIHBvc3NpYmxlICovCisJTVRIQ0FfSU5MSU5FX0hFQURFUl9TSVpFID0gNCwgIC8qIGRhdGEgc2VnbWVudCBvdmVyaGVhZCBmb3IgaW5saW5lICovCisJTVRIQ0FfSU5MSU5FX0NIVU5LX1NJWkUgID0gMTYgIC8qIGlubGluZSBkYXRhIHNlZ21lbnQgY2h1bmsgKi8KIH07CiAKIGVudW0gewpAQCAtNjg5LDcgKzY5MiwxMSBAQAogCiAJLyogbGVhdmUgYXJiZWxfc2NoZWRfcXVldWUgYXMgMCAqLwogCi0JcXBfY29udGV4dC0+dXNyX3BhZ2UgICA9IGNwdV90b19iZTMyKGRldi0+ZHJpdmVyX3Vhci5pbmRleCk7CisJaWYgKHFwLT5pYnFwLnVvYmplY3QpCisJCXFwX2NvbnRleHQtPnVzcl9wYWdlID0KKwkJCWNwdV90b19iZTMyKHRvX211Y29udGV4dChxcC0+aWJxcC51b2JqZWN0LT5jb250ZXh0KS0+dWFyLmluZGV4KTsKKwllbHNlCisJCXFwX2NvbnRleHQtPnVzcl9wYWdlID0gY3B1X3RvX2JlMzIoZGV2LT5kcml2ZXJfdWFyLmluZGV4KTsKIAlxcF9jb250ZXh0LT5sb2NhbF9xcG4gID0gY3B1X3RvX2JlMzIocXAtPnFwbik7CiAJaWYgKGF0dHJfbWFzayAmIElCX1FQX0RFU1RfUVBOKSB7CiAJCXFwX2NvbnRleHQtPnJlbW90ZV9xcG4gPSBjcHVfdG9fYmUzMihhdHRyLT5kZXN0X3FwX251bSk7CkBAIC05NTQsNiArOTYxLDE1IEBACiAKIAlxcC0+c2VuZF93cWVfb2Zmc2V0ID0gQUxJR04ocXAtPnJxLm1heCA8PCBxcC0+cnEud3FlX3NoaWZ0LAogCQkJCSAgICAxIDw8IHFwLT5zcS53cWVfc2hpZnQpOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgdXNlcnNwYWNlIFFQLCB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIHRvCisJICogYWxsb2NhdGUgYW55dGhpbmcuICBBbGwgd2UgbmVlZCBpcyB0byBjYWxjdWxhdGUgdGhlIFdRRQorCSAqIHNpemVzIGFuZCB0aGUgc2VuZF93cWVfb2Zmc2V0LCBzbyB3ZSdyZSBkb25lIG5vdy4KKwkgKi8KKwlpZiAocGQtPmlicGQudW9iamVjdCkKKwkJcmV0dXJuIDA7CisKIAlzaXplID0gUEFHRV9BTElHTihxcC0+c2VuZF93cWVfb2Zmc2V0ICsKIAkJCSAgKHFwLT5zcS5tYXggPDwgcXAtPnNxLndxZV9zaGlmdCkpOwogCkBAIC0xMDUzLDEwICsxMDY5LDMyIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtdGhjYV9hbGxvY19tZW1mcmVlKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKK3N0YXRpYyB2b2lkIG10aGNhX2ZyZWVfd3FlX2J1ZihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCiAJCQkgICAgICAgc3RydWN0IG10aGNhX3FwICpxcCkKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwlpbnQgc2l6ZSA9IFBBR0VfQUxJR04ocXAtPnNlbmRfd3FlX29mZnNldCArCisJCQkgICAgICAocXAtPnNxLm1heCA8PCBxcC0+c3Eud3FlX3NoaWZ0KSk7CisKKwlpZiAocXAtPmlzX2RpcmVjdCkgeworCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIHNpemUsIHFwLT5xdWV1ZS5kaXJlY3QuYnVmLAorCQkJCSAgcGNpX3VubWFwX2FkZHIoJnFwLT5xdWV1ZS5kaXJlY3QsIG1hcHBpbmcpKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIFBBR0VfU0laRTsgKytpKSB7CisJCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIFBBR0VfU0laRSwKKwkJCQkJICBxcC0+cXVldWUucGFnZV9saXN0W2ldLmJ1ZiwKKwkJCQkJICBwY2lfdW5tYXBfYWRkcigmcXAtPnF1ZXVlLnBhZ2VfbGlzdFtpXSwKKwkJCQkJCQkgbWFwcGluZykpOworCQl9CisJfQorCisJa2ZyZWUocXAtPndyaWQpOworfQorCitzdGF0aWMgaW50IG10aGNhX21hcF9tZW1mcmVlKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKKwkJCSAgICAgc3RydWN0IG10aGNhX3FwICpxcCkKK3sKKwlpbnQgcmV0OwogCiAJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkgewogCQlyZXQgPSBtdGhjYV90YWJsZV9nZXQoZGV2LCBkZXYtPnFwX3RhYmxlLnFwX3RhYmxlLCBxcC0+cXBuKTsKQEAgLTEwNjcsMzUgKzExMDUsMTUgQEAKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyX3FwYzsKIAotCQlyZXQgPSBtdGhjYV90YWJsZV9nZXQoZGV2LCBkZXYtPnFwX3RhYmxlLnJkYl90YWJsZSwKLQkJCQkgICAgICBxcC0+cXBuIDw8IGRldi0+cXBfdGFibGUucmRiX3NoaWZ0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyX2VxcGM7CisgCQlyZXQgPSBtdGhjYV90YWJsZV9nZXQoZGV2LCBkZXYtPnFwX3RhYmxlLnJkYl90YWJsZSwKKyAJCQkJICAgICAgcXAtPnFwbiA8PCBkZXYtPnFwX3RhYmxlLnJkYl9zaGlmdCk7CisgCQlpZiAocmV0KQorIAkJCWdvdG8gZXJyX2VxcGM7CiAKLQkJcXAtPnJxLmRiX2luZGV4ID0gbXRoY2FfYWxsb2NfZGIoZGV2LCBNVEhDQV9EQl9UWVBFX1JRLAotCQkJCQkJIHFwLT5xcG4sICZxcC0+cnEuZGIpOwotCQlpZiAocXAtPnJxLmRiX2luZGV4IDwgMCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyX3JkYjsKLQkJfQotCi0JCXFwLT5zcS5kYl9pbmRleCA9IG10aGNhX2FsbG9jX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9TUSwKLQkJCQkJCSBxcC0+cXBuLCAmcXAtPnNxLmRiKTsKLQkJaWYgKHFwLT5zcS5kYl9pbmRleCA8IDApIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycl9ycV9kYjsKLQkJfQogCX0KIAogCXJldHVybiAwOwogCi1lcnJfcnFfZGI6Ci0JbXRoY2FfZnJlZV9kYihkZXYsIE1USENBX0RCX1RZUEVfUlEsIHFwLT5ycS5kYl9pbmRleCk7Ci0KLWVycl9yZGI6Ci0JbXRoY2FfdGFibGVfcHV0KGRldiwgZGV2LT5xcF90YWJsZS5yZGJfdGFibGUsCi0JCQlxcC0+cXBuIDw8IGRldi0+cXBfdGFibGUucmRiX3NoaWZ0KTsKLQogZXJyX2VxcGM6CiAJbXRoY2FfdGFibGVfcHV0KGRldiwgZGV2LT5xcF90YWJsZS5lcXBfdGFibGUsIHFwLT5xcG4pOwogCkBAIC0xMTA1LDYgKzExMjMsMzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBtdGhjYV91bm1hcF9tZW1mcmVlKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKKwkJCQlzdHJ1Y3QgbXRoY2FfcXAgKnFwKQoreworCW10aGNhX3RhYmxlX3B1dChkZXYsIGRldi0+cXBfdGFibGUucmRiX3RhYmxlLAorCQkJcXAtPnFwbiA8PCBkZXYtPnFwX3RhYmxlLnJkYl9zaGlmdCk7CisJbXRoY2FfdGFibGVfcHV0KGRldiwgZGV2LT5xcF90YWJsZS5lcXBfdGFibGUsIHFwLT5xcG4pOworCW10aGNhX3RhYmxlX3B1dChkZXYsIGRldi0+cXBfdGFibGUucXBfdGFibGUsIHFwLT5xcG4pOworfQorCitzdGF0aWMgaW50IG10aGNhX2FsbG9jX21lbWZyZWUoc3RydWN0IG10aGNhX2RldiAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBtdGhjYV9xcCAqcXApCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKSB7CisJCXFwLT5ycS5kYl9pbmRleCA9IG10aGNhX2FsbG9jX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9SUSwKKwkJCQkJCSBxcC0+cXBuLCAmcXAtPnJxLmRiKTsKKwkJaWYgKHFwLT5ycS5kYl9pbmRleCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXFwLT5zcS5kYl9pbmRleCA9IG10aGNhX2FsbG9jX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9TUSwKKwkJCQkJCSBxcC0+cXBuLCAmcXAtPnNxLmRiKTsKKwkJaWYgKHFwLT5zcS5kYl9pbmRleCA8IDApCisJCQltdGhjYV9mcmVlX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9SUSwgcXAtPnJxLmRiX2luZGV4KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBtdGhjYV9mcmVlX21lbWZyZWUoc3RydWN0IG10aGNhX2RldiAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBtdGhjYV9xcCAqcXApCiB7CkBAIC0xMTEyLDExICsxMTU5LDYgQEAKIAkJbXRoY2FfZnJlZV9kYihkZXYsIE1USENBX0RCX1RZUEVfU1EsIHFwLT5zcS5kYl9pbmRleCk7CiAJCW10aGNhX2ZyZWVfZGIoZGV2LCBNVEhDQV9EQl9UWVBFX1JRLCBxcC0+cnEuZGJfaW5kZXgpOwogCX0KLQotCW10aGNhX3RhYmxlX3B1dChkZXYsIGRldi0+cXBfdGFibGUucmRiX3RhYmxlLAotCQkJcXAtPnFwbiA8PCBkZXYtPnFwX3RhYmxlLnJkYl9zaGlmdCk7Ci0JbXRoY2FfdGFibGVfcHV0KGRldiwgZGV2LT5xcF90YWJsZS5lcXBfdGFibGUsIHFwLT5xcG4pOwotCW10aGNhX3RhYmxlX3B1dChkZXYsIGRldi0+cXBfdGFibGUucXBfdGFibGUsIHFwLT5xcG4pOwogfQogCiBzdGF0aWMgdm9pZCBtdGhjYV93cV9pbml0KHN0cnVjdCBtdGhjYV93cSogd3EpCkBAIC0xMTQ3LDEzICsxMTg5LDI4IEBACiAJbXRoY2Ffd3FfaW5pdCgmcXAtPnNxKTsKIAltdGhjYV93cV9pbml0KCZxcC0+cnEpOwogCi0JcmV0ID0gbXRoY2FfYWxsb2NfbWVtZnJlZShkZXYsIHFwKTsKKwlyZXQgPSBtdGhjYV9tYXBfbWVtZnJlZShkZXYsIHFwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gbXRoY2FfYWxsb2Nfd3FlX2J1ZihkZXYsIHBkLCBxcCk7CiAJaWYgKHJldCkgewotCQltdGhjYV9mcmVlX21lbWZyZWUoZGV2LCBxcCk7CisJCW10aGNhX3VubWFwX21lbWZyZWUoZGV2LCBxcCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgdXNlcnNwYWNlIFFQLCB3ZSdyZSBkb25lIG5vdy4gIFRoZSBkb29yYmVsbHMKKwkgKiB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgYnVmZmVycyB3aWxsIGJlIGluaXRpYWxpemVkIGluCisJICogdXNlcnNwYWNlLgorCSAqLworCWlmIChwZC0+aWJwZC51b2JqZWN0KQorCQlyZXR1cm4gMDsKKworCXJldCA9IG10aGNhX2FsbG9jX21lbWZyZWUoZGV2LCBxcCk7CisJaWYgKHJldCkgeworCQltdGhjYV9mcmVlX3dxZV9idWYoZGV2LCBxcCk7CisJCW10aGNhX3VubWFwX21lbWZyZWUoZGV2LCBxcCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMTg2LDIyICsxMjQzLDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG10aGNhX2FsaWduX3FwX3NpemUoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfcXAgKnFwKQorc3RhdGljIGludCBtdGhjYV9zZXRfcXBfc2l6ZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBpYl9xcF9jYXAgKmNhcCwKKwkJCSAgICAgc3RydWN0IG10aGNhX3FwICpxcCkKIHsKLQlpbnQgaTsKKwkvKiBTYW5pdHkgY2hlY2sgUVAgc2l6ZSBiZWZvcmUgcHJvY2VlZGluZyAqLworCWlmIChjYXAtPm1heF9zZW5kX3dyICA+IDY1NTM2IHx8IGNhcC0+bWF4X3JlY3Zfd3IgID4gNjU1MzYgfHwKKwkgICAgY2FwLT5tYXhfc2VuZF9zZ2UgPiA2NCAgICB8fCBjYXAtPm1heF9yZWN2X3NnZSA+IDY0KQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghbXRoY2FfaXNfbWVtZnJlZShkZXYpKQotCQlyZXR1cm47CisJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkgeworCQlxcC0+cnEubWF4ID0gY2FwLT5tYXhfcmVjdl93ciA/CisJCQlyb3VuZHVwX3Bvd19vZl90d28oY2FwLT5tYXhfcmVjdl93cikgOiAwOworCQlxcC0+c3EubWF4ID0gY2FwLT5tYXhfc2VuZF93ciA/CisJCQlyb3VuZHVwX3Bvd19vZl90d28oY2FwLT5tYXhfc2VuZF93cikgOiAwOworCX0gZWxzZSB7CisJCXFwLT5ycS5tYXggPSBjYXAtPm1heF9yZWN2X3dyOworCQlxcC0+c3EubWF4ID0gY2FwLT5tYXhfc2VuZF93cjsKKwl9CiAKLQlmb3IgKGkgPSAwOyAxIDw8IGkgPCBxcC0+cnEubWF4OyArK2kpCi0JCTsgLyogbm90aGluZyAqLworCXFwLT5ycS5tYXhfZ3MgPSBjYXAtPm1heF9yZWN2X3NnZTsKKwlxcC0+c3EubWF4X2dzID0gbWF4X3QoaW50LCBjYXAtPm1heF9zZW5kX3NnZSwKKwkJCSAgICAgIEFMSUdOKGNhcC0+bWF4X2lubGluZV9kYXRhICsgTVRIQ0FfSU5MSU5FX0hFQURFUl9TSVpFLAorCQkJCSAgICBNVEhDQV9JTkxJTkVfQ0hVTktfU0laRSkgLworCQkJICAgICAgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpKTsKIAotCXFwLT5ycS5tYXggPSAxIDw8IGk7CisJLyoKKwkgKiBGb3IgTUxYIHRyYW5zcG9ydCB3ZSBuZWVkIDIgZXh0cmEgUy9HIGVudHJpZXM6CisJICogb25lIGZvciB0aGUgaGVhZGVyIGFuZCBvbmUgZm9yIHRoZSBjaGVja3N1bSBhdCB0aGUgZW5kCisJICovCisJaWYgKChxcC0+dHJhbnNwb3J0ID09IE1MWCAmJiBxcC0+c3EubWF4X2dzICsgMiA+IGRldi0+bGltaXRzLm1heF9zZykgfHwKKwkgICAgcXAtPnNxLm1heF9ncyA+IGRldi0+bGltaXRzLm1heF9zZyB8fCBxcC0+cnEubWF4X2dzID4gZGV2LT5saW1pdHMubWF4X3NnKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaSA9IDA7IDEgPDwgaSA8IHFwLT5zcS5tYXg7ICsraSkKLQkJOyAvKiBub3RoaW5nICovCi0KLQlxcC0+c3EubWF4ID0gMSA8PCBpOworCXJldHVybiAwOwogfQogCiBpbnQgbXRoY2FfYWxsb2NfcXAoc3RydWN0IG10aGNhX2RldiAqZGV2LApAQCAtMTIxMCwxMSArMTI4NCwxNCBAQAogCQkgICBzdHJ1Y3QgbXRoY2FfY3EgKnJlY3ZfY3EsCiAJCSAgIGVudW0gaWJfcXBfdHlwZSB0eXBlLAogCQkgICBlbnVtIGliX3NpZ190eXBlIHNlbmRfcG9saWN5LAorCQkgICBzdHJ1Y3QgaWJfcXBfY2FwICpjYXAsCiAJCSAgIHN0cnVjdCBtdGhjYV9xcCAqcXApCiB7CiAJaW50IGVycjsKIAotCW10aGNhX2FsaWduX3FwX3NpemUoZGV2LCBxcCk7CisJZXJyID0gbXRoY2Ffc2V0X3FwX3NpemUoZGV2LCBjYXAsIHFwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBJQl9RUFRfUkM6IHFwLT50cmFuc3BvcnQgPSBSQzsgYnJlYWs7CkBAIC0xMjQ3LDE0ICsxMzI0LDE3IEBACiAJCSAgICBzdHJ1Y3QgbXRoY2FfY3EgKnNlbmRfY3EsCiAJCSAgICBzdHJ1Y3QgbXRoY2FfY3EgKnJlY3ZfY3EsCiAJCSAgICBlbnVtIGliX3NpZ190eXBlIHNlbmRfcG9saWN5LAorCQkgICAgc3RydWN0IGliX3FwX2NhcCAqY2FwLAogCQkgICAgaW50IHFwbiwKIAkJICAgIGludCBwb3J0LAogCQkgICAgc3RydWN0IG10aGNhX3NxcCAqc3FwKQogewotCWludCBlcnIgPSAwOwogCXUzMiBtcXBuID0gcXBuICogMiArIGRldi0+cXBfdGFibGUuc3FwX3N0YXJ0ICsgcG9ydCAtIDE7CisJaW50IGVycjsKIAotCW10aGNhX2FsaWduX3FwX3NpemUoZGV2LCAmc3FwLT5xcCk7CisJZXJyID0gbXRoY2Ffc2V0X3FwX3NpemUoZGV2LCBjYXAsICZzcXAtPnFwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJc3FwLT5oZWFkZXJfYnVmX3NpemUgPSBzcXAtPnFwLnNxLm1heCAqIE1USENBX1VEX0hFQURFUl9TSVpFOwogCXNxcC0+aGVhZGVyX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIHNxcC0+aGVhZGVyX2J1Zl9zaXplLApAQCAtMTMxMyw4ICsxMzkzLDYgQEAKIAkJICAgc3RydWN0IG10aGNhX3FwICpxcCkKIHsKIAl1OCBzdGF0dXM7Ci0JaW50IHNpemU7Ci0JaW50IGk7CiAJc3RydWN0IG10aGNhX2NxICpzZW5kX2NxOwogCXN0cnVjdCBtdGhjYV9jcSAqcmVjdl9jcTsKIApAQCAtMTM0NCwzMSArMTQyMiwyMiBAQAogCWlmIChxcC0+c3RhdGUgIT0gSUJfUVBTX1JFU0VUKQogCQltdGhjYV9NT0RJRllfUVAoZGV2LCBNVEhDQV9UUkFOU19BTlkyUlNULCBxcC0+cXBuLCAwLCBOVUxMLCAwLCAmc3RhdHVzKTsKIAotCW10aGNhX2NxX2NsZWFuKGRldiwgdG9fbWNxKHFwLT5pYnFwLnNlbmRfY3EpLT5jcW4sIHFwLT5xcG4pOwotCWlmIChxcC0+aWJxcC5zZW5kX2NxICE9IHFwLT5pYnFwLnJlY3ZfY3EpCi0JCW10aGNhX2NxX2NsZWFuKGRldiwgdG9fbWNxKHFwLT5pYnFwLnJlY3ZfY3EpLT5jcW4sIHFwLT5xcG4pOworCS8qCisJICogSWYgdGhpcyBpcyBhIHVzZXJzcGFjZSBRUCwgdGhlIGJ1ZmZlcnMsIE1SLCBDUXMgYW5kIHNvIG9uCisJICogd2lsbCBiZSBjbGVhbmVkIHVwIGluIHVzZXJzcGFjZSwgc28gYWxsIHdlIGhhdmUgdG8gZG8gaXMKKwkgKiB1bnJlZiB0aGUgbWVtLWZyZWUgdGFibGVzIGFuZCBmcmVlIHRoZSBRUE4gaW4gb3VyIHRhYmxlLgorCSAqLworCWlmICghcXAtPmlicXAudW9iamVjdCkgeworCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5zZW5kX2NxKS0+Y3FuLCBxcC0+cXBuKTsKKwkJaWYgKHFwLT5pYnFwLnNlbmRfY3EgIT0gcXAtPmlicXAucmVjdl9jcSkKKwkJCW10aGNhX2NxX2NsZWFuKGRldiwgdG9fbWNxKHFwLT5pYnFwLnJlY3ZfY3EpLT5jcW4sIHFwLT5xcG4pOwogCi0JbXRoY2FfZnJlZV9tcihkZXYsICZxcC0+bXIpOwotCi0Jc2l6ZSA9IFBBR0VfQUxJR04ocXAtPnNlbmRfd3FlX29mZnNldCArCi0JCQkgIChxcC0+c3EubWF4IDw8IHFwLT5zcS53cWVfc2hpZnQpKTsKLQotCWlmIChxcC0+aXNfZGlyZWN0KSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wZGV2LCBzaXplLAotCQkJCSAgICBxcC0+cXVldWUuZGlyZWN0LmJ1ZiwKLQkJCQkgICAgcGNpX3VubWFwX2FkZHIoJnFwLT5xdWV1ZS5kaXJlY3QsIG1hcHBpbmcpKTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIFBBR0VfU0laRTsgKytpKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGRldiwgUEFHRV9TSVpFLAotCQkJCQkgICAgcXAtPnF1ZXVlLnBhZ2VfbGlzdFtpXS5idWYsCi0JCQkJCSAgICBwY2lfdW5tYXBfYWRkcigmcXAtPnF1ZXVlLnBhZ2VfbGlzdFtpXSwKLQkJCQkJCQkgICBtYXBwaW5nKSk7Ci0JCX0KKwkJbXRoY2FfZnJlZV9tcihkZXYsICZxcC0+bXIpOworCQltdGhjYV9mcmVlX21lbWZyZWUoZGV2LCBxcCk7CisJCW10aGNhX2ZyZWVfd3FlX2J1ZihkZXYsIHFwKTsKIAl9CiAKLQlrZnJlZShxcC0+d3JpZCk7Ci0KLQltdGhjYV9mcmVlX21lbWZyZWUoZGV2LCBxcCk7CisJbXRoY2FfdW5tYXBfbWVtZnJlZShkZXYsIHFwKTsKIAogCWlmIChpc19zcXAoZGV2LCBxcCkpIHsKIAkJYXRvbWljX2RlYygmKHRvX21wZChxcC0+aWJxcC5wZCktPnNxcF9jb3VudCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3VzZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyNGMxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV91c2VyLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIE1USENBX1VTRVJfSAorI2RlZmluZSBNVEhDQV9VU0VSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCBhbGwgc3RydWN0cyBkZWZpbmVkIGluIHRoaXMgZmlsZSByZW1haW4gbGFpZCBvdXQgc28KKyAqIHRoYXQgdGhleSBwYWNrIHRoZSBzYW1lIHdheSBvbiAzMi1iaXQgYW5kIDY0LWJpdCBhcmNoaXRlY3R1cmVzICh0bworICogYXZvaWQgaW5jb21wYXRpYmlsaXR5IGJldHdlZW4gMzItYml0IHVzZXJzcGFjZSBhbmQgNjQtYml0IGtlcm5lbHMpLgorICogSW4gcGFydGljdWxhciBkbyBub3QgdXNlIHBvaW50ZXIgdHlwZXMgLS0gcGFzcyBwb2ludGVycyBpbiBfX3U2NAorICogaW5zdGVhZC4KKyAqLworCitzdHJ1Y3QgbXRoY2FfYWxsb2NfdWNvbnRleHRfcmVzcCB7CisJX191MzIgcXBfdGFiX3NpemU7CisJX191MzIgdWFyY19zaXplOworfTsKKworc3RydWN0IG10aGNhX2FsbG9jX3BkX3Jlc3AgeworCV9fdTMyIHBkbjsKKwlfX3UzMiByZXNlcnZlZDsKK307CisKK3N0cnVjdCBtdGhjYV9jcmVhdGVfY3EgeworCV9fdTMyIGxrZXk7CisJX191MzIgcGRuOworCV9fdTY0IGFybV9kYl9wYWdlOworCV9fdTY0IHNldF9kYl9wYWdlOworCV9fdTMyIGFybV9kYl9pbmRleDsKKwlfX3UzMiBzZXRfZGJfaW5kZXg7Cit9OworCitzdHJ1Y3QgbXRoY2FfY3JlYXRlX2NxX3Jlc3AgeworCV9fdTMyIGNxbjsKKwlfX3UzMiByZXNlcnZlZDsKK307CisKK3N0cnVjdCBtdGhjYV9jcmVhdGVfcXAgeworCV9fdTMyIGxrZXk7CisJX191MzIgcmVzZXJ2ZWQ7CisJX191NjQgc3FfZGJfcGFnZTsKKwlfX3U2NCBycV9kYl9wYWdlOworCV9fdTMyIHNxX2RiX2luZGV4OworCV9fdTMyIHJxX2RiX2luZGV4OworfTsKKworI2VuZGlmIC8qIE1USENBX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2luY2x1ZGUvaWJfdXNlcl92ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2luY2x1ZGUvaWJfdXNlcl92ZXJicy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNjEzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaW5jbHVkZS9pYl91c2VyX3ZlcmJzLmgKQEAgLTAsMCArMSwzODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKiAkSWQ6IGliX3VzZXJfdmVyYnMuaCAyNzA4IDIwMDUtMDYtMjQgMTc6Mjc6MjFaIHJvbGFuZCAkCisgKi8KKworI2lmbmRlZiBJQl9VU0VSX1ZFUkJTX0gKKyNkZWZpbmUgSUJfVVNFUl9WRVJCU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogSW5jcmVtZW50IHRoaXMgdmFsdWUgaWYgYW55IGNoYW5nZXMgdGhhdCBicmVhayB1c2Vyc3BhY2UgQUJJCisgKiBjb21wYXRpYmlsaXR5IGFyZSBtYWRlLgorICovCisjZGVmaW5lIElCX1VTRVJfVkVSQlNfQUJJX1ZFUlNJT04JMQorCitlbnVtIHsKKwlJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9QQVJBTVMsCisJSUJfVVNFUl9WRVJCU19DTURfR0VUX0NPTlRFWFQsCisJSUJfVVNFUl9WRVJCU19DTURfUVVFUllfREVWSUNFLAorCUlCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1BPUlQsCisJSUJfVVNFUl9WRVJCU19DTURfUVVFUllfR0lELAorCUlCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1BLRVksCisJSUJfVVNFUl9WRVJCU19DTURfQUxMT0NfUEQsCisJSUJfVVNFUl9WRVJCU19DTURfREVBTExPQ19QRCwKKwlJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQUgsCisJSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX0FILAorCUlCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX0FILAorCUlCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfQUgsCisJSUJfVVNFUl9WRVJCU19DTURfUkVHX01SLAorCUlCX1VTRVJfVkVSQlNfQ01EX1JFR19TTVIsCisJSUJfVVNFUl9WRVJCU19DTURfUkVSRUdfTVIsCisJSUJfVVNFUl9WRVJCU19DTURfUVVFUllfTVIsCisJSUJfVVNFUl9WRVJCU19DTURfREVSRUdfTVIsCisJSUJfVVNFUl9WRVJCU19DTURfQUxMT0NfTVcsCisJSUJfVVNFUl9WRVJCU19DTURfQklORF9NVywKKwlJQl9VU0VSX1ZFUkJTX0NNRF9ERUFMTE9DX01XLAorCUlCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DUSwKKwlJQl9VU0VSX1ZFUkJTX0NNRF9SRVNJWkVfQ1EsCisJSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9DUSwKKwlJQl9VU0VSX1ZFUkJTX0NNRF9QT0xMX0NRLAorCUlCX1VTRVJfVkVSQlNfQ01EX1BFRUtfQ1EsCisJSUJfVVNFUl9WRVJCU19DTURfUkVRX05PVElGWV9DUSwKKwlJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfUVAsCisJSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUVAsCisJSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1FQLAorCUlCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfUVAsCisJSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TRU5ELAorCUlCX1VTRVJfVkVSQlNfQ01EX1BPU1RfUkVDViwKKwlJQl9VU0VSX1ZFUkJTX0NNRF9BVFRBQ0hfTUNBU1QsCisJSUJfVVNFUl9WRVJCU19DTURfREVUQUNIX01DQVNUCit9OworCisvKgorICogTWFrZSBzdXJlIHRoYXQgYWxsIHN0cnVjdHMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgcmVtYWluIGxhaWQgb3V0IHNvCisgKiB0aGF0IHRoZXkgcGFjayB0aGUgc2FtZSB3YXkgb24gMzItYml0IGFuZCA2NC1iaXQgYXJjaGl0ZWN0dXJlcyAodG8KKyAqIGF2b2lkIGluY29tcGF0aWJpbGl0eSBiZXR3ZWVuIDMyLWJpdCB1c2Vyc3BhY2UgYW5kIDY0LWJpdCBrZXJuZWxzKS4KKyAqIEluIHBhcnRpY3VsYXIgZG8gbm90IHVzZSBwb2ludGVyIHR5cGVzIC0tIHBhc3MgcG9pbnRlcnMgaW4gX191NjQKKyAqIGluc3RlYWQuCisgKi8KKworc3RydWN0IGliX3V2ZXJic19hc3luY19ldmVudF9kZXNjIHsKKwlfX3U2NCBlbGVtZW50OworCV9fdTMyIGV2ZW50X3R5cGU7CS8qIGVudW0gaWJfZXZlbnRfdHlwZSAqLworCV9fdTMyIHJlc2VydmVkOworfTsKKworc3RydWN0IGliX3V2ZXJic19jb21wX2V2ZW50X2Rlc2MgeworCV9fdTY0IGNxX2hhbmRsZTsKK307CisKKy8qCisgKiBBbGwgY29tbWFuZHMgZnJvbSB1c2Vyc3BhY2Ugc2hvdWxkIHN0YXJ0IHdpdGggYSBfX3UzMiBjb21tYW5kIGZpZWxkCisgKiBmb2xsb3dlZCBieSBfX3UxNiBpbl93b3JkcyBhbmQgb3V0X3dvcmRzIGZpZWxkcyAod2hpY2ggZ2l2ZSB0aGUKKyAqIGxlbmd0aCBvZiB0aGUgY29tbWFuZCBibG9jayBhbmQgcmVzcG9uc2UgYnVmZmVyIGlmIGFueSBpbiAzMi1iaXQKKyAqIHdvcmRzKS4gIFRoZSBrZXJuZWwgZHJpdmVyIHdpbGwgcmVhZCB0aGVzZSBmaWVsZHMgZmlyc3QgYW5kIHJlYWQKKyAqIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIHN0cnVjdCBiYXNlZCBvbiB0aGVzZSB2YWx1ZS4KKyAqLworCitzdHJ1Y3QgaWJfdXZlcmJzX2NtZF9oZHIgeworCV9fdTMyIGNvbW1hbmQ7CisJX191MTYgaW5fd29yZHM7CisJX191MTYgb3V0X3dvcmRzOworfTsKKworLyoKKyAqIE5vIGRyaXZlcl9kYXRhIGZvciAicXVlcnkgcGFyYW1zIiBjb21tYW5kLCBzaW5jZSB0aGlzIGlzIGludGVuZGVkCisgKiB0byBiZSBhIGNvcmUgZnVuY3Rpb24gd2l0aCBubyBwb3NzaWJsZSBkZXZpY2UgZGVwZW5kZW5jZS4KKyAqLworc3RydWN0IGliX3V2ZXJic19xdWVyeV9wYXJhbXMgeworCV9fdTY0IHJlc3BvbnNlOworfTsKKworc3RydWN0IGliX3V2ZXJic19xdWVyeV9wYXJhbXNfcmVzcCB7CisJX191MzIgbnVtX2NxX2V2ZW50czsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfZ2V0X2NvbnRleHQgeworCV9fdTY0IHJlc3BvbnNlOworCV9fdTY0IGNxX2ZkX3RhYjsKKwlfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfZ2V0X2NvbnRleHRfcmVzcCB7CisJX191MzIgYXN5bmNfZmQ7CisJX191MzIgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X2RldmljZSB7CisJX191NjQgcmVzcG9uc2U7CisJX191NjQgZHJpdmVyX2RhdGFbMF07Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X2RldmljZV9yZXNwIHsKKwlfX3U2NCBmd192ZXI7CisJX191NjQgbm9kZV9ndWlkOworCV9fdTY0IHN5c19pbWFnZV9ndWlkOworCV9fdTY0IG1heF9tcl9zaXplOworCV9fdTY0IHBhZ2Vfc2l6ZV9jYXA7CisJX191MzIgdmVuZG9yX2lkOworCV9fdTMyIHZlbmRvcl9wYXJ0X2lkOworCV9fdTMyIGh3X3ZlcjsKKwlfX3UzMiBtYXhfcXA7CisJX191MzIgbWF4X3FwX3dyOworCV9fdTMyIGRldmljZV9jYXBfZmxhZ3M7CisJX191MzIgbWF4X3NnZTsKKwlfX3UzMiBtYXhfc2dlX3JkOworCV9fdTMyIG1heF9jcTsKKwlfX3UzMiBtYXhfY3FlOworCV9fdTMyIG1heF9tcjsKKwlfX3UzMiBtYXhfcGQ7CisJX191MzIgbWF4X3FwX3JkX2F0b207CisJX191MzIgbWF4X2VlX3JkX2F0b207CisJX191MzIgbWF4X3Jlc19yZF9hdG9tOworCV9fdTMyIG1heF9xcF9pbml0X3JkX2F0b207CisJX191MzIgbWF4X2VlX2luaXRfcmRfYXRvbTsKKwlfX3UzMiBhdG9taWNfY2FwOworCV9fdTMyIG1heF9lZTsKKwlfX3UzMiBtYXhfcmRkOworCV9fdTMyIG1heF9tdzsKKwlfX3UzMiBtYXhfcmF3X2lwdjZfcXA7CisJX191MzIgbWF4X3Jhd19ldGh5X3FwOworCV9fdTMyIG1heF9tY2FzdF9ncnA7CisJX191MzIgbWF4X21jYXN0X3FwX2F0dGFjaDsKKwlfX3UzMiBtYXhfdG90YWxfbWNhc3RfcXBfYXR0YWNoOworCV9fdTMyIG1heF9haDsKKwlfX3UzMiBtYXhfZm1yOworCV9fdTMyIG1heF9tYXBfcGVyX2ZtcjsKKwlfX3UzMiBtYXhfc3JxOworCV9fdTMyIG1heF9zcnFfd3I7CisJX191MzIgbWF4X3NycV9zZ2U7CisJX191MTYgbWF4X3BrZXlzOworCV9fdTggIGxvY2FsX2NhX2Fja19kZWxheTsKKwlfX3U4ICBwaHlzX3BvcnRfY250OworCV9fdTggIHJlc2VydmVkWzRdOworfTsKKworc3RydWN0IGliX3V2ZXJic19xdWVyeV9wb3J0IHsKKwlfX3U2NCByZXNwb25zZTsKKwlfX3U4ICBwb3J0X251bTsKKwlfX3U4ICByZXNlcnZlZFs3XTsKKwlfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfcXVlcnlfcG9ydF9yZXNwIHsKKwlfX3UzMiBwb3J0X2NhcF9mbGFnczsKKwlfX3UzMiBtYXhfbXNnX3N6OworCV9fdTMyIGJhZF9wa2V5X2NudHI7CisJX191MzIgcWtleV92aW9sX2NudHI7CisJX191MzIgZ2lkX3RibF9sZW47CisJX191MTYgcGtleV90YmxfbGVuOworCV9fdTE2IGxpZDsKKwlfX3UxNiBzbV9saWQ7CisJX191OCAgc3RhdGU7CisJX191OCAgbWF4X210dTsKKwlfX3U4ICBhY3RpdmVfbXR1OworCV9fdTggIGxtYzsKKwlfX3U4ICBtYXhfdmxfbnVtOworCV9fdTggIHNtX3NsOworCV9fdTggIHN1Ym5ldF90aW1lb3V0OworCV9fdTggIGluaXRfdHlwZV9yZXBseTsKKwlfX3U4ICBhY3RpdmVfd2lkdGg7CisJX191OCAgYWN0aXZlX3NwZWVkOworCV9fdTggIHBoeXNfc3RhdGU7CisJX191OCAgcmVzZXJ2ZWRbM107Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X2dpZCB7CisJX191NjQgcmVzcG9uc2U7CisJX191OCAgcG9ydF9udW07CisJX191OCAgaW5kZXg7CisJX191OCAgcmVzZXJ2ZWRbNl07CisJX191NjQgZHJpdmVyX2RhdGFbMF07Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X2dpZF9yZXNwIHsKKwlfX3U4ICBnaWRbMTZdOworfTsKKworc3RydWN0IGliX3V2ZXJic19xdWVyeV9wa2V5IHsKKwlfX3U2NCByZXNwb25zZTsKKwlfX3U4ICBwb3J0X251bTsKKwlfX3U4ICBpbmRleDsKKwlfX3U4ICByZXNlcnZlZFs2XTsKKwlfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfcXVlcnlfcGtleV9yZXNwIHsKKwlfX3UxNiBwa2V5OworCV9fdTE2IHJlc2VydmVkOworfTsKKworc3RydWN0IGliX3V2ZXJic19hbGxvY19wZCB7CisJX191NjQgcmVzcG9uc2U7CisJX191NjQgZHJpdmVyX2RhdGFbMF07Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX2FsbG9jX3BkX3Jlc3AgeworCV9fdTMyIHBkX2hhbmRsZTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfZGVhbGxvY19wZCB7CisJX191MzIgcGRfaGFuZGxlOworfTsKKworc3RydWN0IGliX3V2ZXJic19yZWdfbXIgeworCV9fdTY0IHJlc3BvbnNlOworCV9fdTY0IHN0YXJ0OworCV9fdTY0IGxlbmd0aDsKKwlfX3U2NCBoY2FfdmE7CisJX191MzIgcGRfaGFuZGxlOworCV9fdTMyIGFjY2Vzc19mbGFnczsKKwlfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfcmVnX21yX3Jlc3AgeworCV9fdTMyIG1yX2hhbmRsZTsKKwlfX3UzMiBsa2V5OworCV9fdTMyIHJrZXk7Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX2RlcmVnX21yIHsKKwlfX3UzMiBtcl9oYW5kbGU7Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9jcSB7CisJX191NjQgcmVzcG9uc2U7CisJX191NjQgdXNlcl9oYW5kbGU7CisJX191MzIgY3FlOworCV9fdTMyIGV2ZW50X2hhbmRsZXI7CisJX191NjQgZHJpdmVyX2RhdGFbMF07Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9jcV9yZXNwIHsKKwlfX3UzMiBjcV9oYW5kbGU7CisJX191MzIgY3FlOworfTsKKworc3RydWN0IGliX3V2ZXJic19kZXN0cm95X2NxIHsKKwlfX3UzMiBjcV9oYW5kbGU7Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9xcCB7CisJX191NjQgcmVzcG9uc2U7CisJX191NjQgdXNlcl9oYW5kbGU7CisJX191MzIgcGRfaGFuZGxlOworCV9fdTMyIHNlbmRfY3FfaGFuZGxlOworCV9fdTMyIHJlY3ZfY3FfaGFuZGxlOworCV9fdTMyIHNycV9oYW5kbGU7CisJX191MzIgbWF4X3NlbmRfd3I7CisJX191MzIgbWF4X3JlY3Zfd3I7CisJX191MzIgbWF4X3NlbmRfc2dlOworCV9fdTMyIG1heF9yZWN2X3NnZTsKKwlfX3UzMiBtYXhfaW5saW5lX2RhdGE7CisJX191OCAgc3Ffc2lnX2FsbDsKKwlfX3U4ICBxcF90eXBlOworCV9fdTggIGlzX3NycTsKKwlfX3U4ICByZXNlcnZlZDsKKwlfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3FwX3Jlc3AgeworCV9fdTMyIHFwX2hhbmRsZTsKKwlfX3UzMiBxcG47Cit9OworCisvKgorICogVGhpcyBzdHJ1Y3QgbmVlZHMgdG8gcmVtYWluIGEgbXVsdGlwbGUgb2YgOCBieXRlcyB0byBrZWVwIHRoZQorICogYWxpZ25tZW50IG9mIHRoZSBtb2RpZnkgUVAgcGFyYW1ldGVycy4KKyAqLworc3RydWN0IGliX3V2ZXJic19xcF9kZXN0IHsKKwlfX3U4ICBkZ2lkWzE2XTsKKwlfX3UzMiBmbG93X2xhYmVsOworCV9fdTE2IGRsaWQ7CisJX191MTYgcmVzZXJ2ZWQ7CisJX191OCAgc2dpZF9pbmRleDsKKwlfX3U4ICBob3BfbGltaXQ7CisJX191OCAgdHJhZmZpY19jbGFzczsKKwlfX3U4ICBzbDsKKwlfX3U4ICBzcmNfcGF0aF9iaXRzOworCV9fdTggIHN0YXRpY19yYXRlOworCV9fdTggIGlzX2dsb2JhbDsKKwlfX3U4ICBwb3J0X251bTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfbW9kaWZ5X3FwIHsKKwlzdHJ1Y3QgaWJfdXZlcmJzX3FwX2Rlc3QgZGVzdDsKKwlzdHJ1Y3QgaWJfdXZlcmJzX3FwX2Rlc3QgYWx0X2Rlc3Q7CisJX191MzIgcXBfaGFuZGxlOworCV9fdTMyIGF0dHJfbWFzazsKKwlfX3UzMiBxa2V5OworCV9fdTMyIHJxX3BzbjsKKwlfX3UzMiBzcV9wc247CisJX191MzIgZGVzdF9xcF9udW07CisJX191MzIgcXBfYWNjZXNzX2ZsYWdzOworCV9fdTE2IHBrZXlfaW5kZXg7CisJX191MTYgYWx0X3BrZXlfaW5kZXg7CisJX191OCAgcXBfc3RhdGU7CisJX191OCAgY3VyX3FwX3N0YXRlOworCV9fdTggIHBhdGhfbXR1OworCV9fdTggIHBhdGhfbWlnX3N0YXRlOworCV9fdTggIGVuX3NxZF9hc3luY19ub3RpZnk7CisJX191OCAgbWF4X3JkX2F0b21pYzsKKwlfX3U4ICBtYXhfZGVzdF9yZF9hdG9taWM7CisJX191OCAgbWluX3Jucl90aW1lcjsKKwlfX3U4ICBwb3J0X251bTsKKwlfX3U4ICB0aW1lb3V0OworCV9fdTggIHJldHJ5X2NudDsKKwlfX3U4ICBybnJfcmV0cnk7CisJX191OCAgYWx0X3BvcnRfbnVtOworCV9fdTggIGFsdF90aW1lb3V0OworCV9fdTggIHJlc2VydmVkWzJdOworCV9fdTY0IGRyaXZlcl9kYXRhWzBdOworfTsKKworc3RydWN0IGliX3V2ZXJic19tb2RpZnlfcXBfcmVzcCB7Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfcXAgeworCV9fdTMyIHFwX2hhbmRsZTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfYXR0YWNoX21jYXN0IHsKKwlfX3U4ICBnaWRbMTZdOworCV9fdTMyIHFwX2hhbmRsZTsKKwlfX3UxNiBtbGlkOworCV9fdTE2IHJlc2VydmVkOworCV9fdTY0IGRyaXZlcl9kYXRhWzBdOworfTsKKworc3RydWN0IGliX3V2ZXJic19kZXRhY2hfbWNhc3QgeworCV9fdTggIGdpZFsxNl07CisJX191MzIgcXBfaGFuZGxlOworCV9fdTE2IG1saWQ7CisJX191MTYgcmVzZXJ2ZWQ7CisJX191NjQgZHJpdmVyX2RhdGFbMF07Cit9OworCisjZW5kaWYgLyogSUJfVVNFUl9WRVJCU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaW5jbHVkZS9pYl92ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2luY2x1ZGUvaWJfdmVyYnMuaAppbmRleCBjZjAxZjA0Li5lNWJkOWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaW5jbHVkZS9pYl92ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9pbmNsdWRlL2liX3ZlcmJzLmgKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA0IFZvbHRhaXJlIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtNDEsNyArNDIsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogdW5pb24gaWJfZ2lkIHsKIAl1OAlyYXdbMTZdOwpAQCAtNTQ0LDcgKzU0OCw3IEBACiAJaW50CQkJbnVtX3NnZTsKIAllbnVtIGliX3dyX29wY29kZQlvcGNvZGU7CiAJaW50CQkJc2VuZF9mbGFnczsKLQl1MzIJCQlpbW1fZGF0YTsKKwlfX2JlMzIJCQlpbW1fZGF0YTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQl1NjQJcmVtb3RlX2FkZHI7CkBAIC02MTgsMjkgKzYyMiw4NiBAQAogCXU4CXBhZ2Vfc2l6ZTsKIH07CiAKK3N0cnVjdCBpYl91Y29udGV4dCB7CisJc3RydWN0IGliX2RldmljZSAgICAgICAqZGV2aWNlOworCXN0cnVjdCBsaXN0X2hlYWQJcGRfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW1yX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAltd19saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJY3FfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXFwX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlzcnFfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFoX2xpc3Q7CisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKK307CisKK3N0cnVjdCBpYl91b2JqZWN0IHsKKwl1NjQJCQl1c2VyX2hhbmRsZTsJLyogaGFuZGxlIGdpdmVuIHRvIHVzIGJ5IHVzZXJzcGFjZSAqLworCXN0cnVjdCBpYl91Y29udGV4dCAgICAgKmNvbnRleHQ7CS8qIGFzc29jaWF0ZWQgdXNlciBjb250ZXh0ICovCisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkJLyogbGluayB0byBjb250ZXh0J3MgbGlzdCAqLworCXUzMgkJCWlkOwkJLyogaW5kZXggaW50byBrZXJuZWwgaWRyICovCit9OworCitzdHJ1Y3QgaWJfdW1lbSB7CisJdW5zaWduZWQgbG9uZwkJdXNlcl9iYXNlOworCXVuc2lnbmVkIGxvbmcJCXZpcnRfYmFzZTsKKwlzaXplX3QJCQlsZW5ndGg7CisJaW50CQkJb2Zmc2V0OworCWludAkJCXBhZ2Vfc2l6ZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNodW5rX2xpc3Q7Cit9OworCitzdHJ1Y3QgaWJfdW1lbV9jaHVuayB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWludCAgICAgICAgICAgICAgICAgICAgIG5lbnRzOworCWludCAgICAgICAgICAgICAgICAgICAgIG5tYXA7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgcGFnZV9saXN0WzBdOworfTsKKworc3RydWN0IGliX3VkYXRhIHsKKwl2b2lkIF9fdXNlciAqaW5idWY7CisJdm9pZCBfX3VzZXIgKm91dGJ1ZjsKKwlzaXplX3QgICAgICAgaW5sZW47CisJc2l6ZV90ICAgICAgIG91dGxlbjsKK307CisKKyNkZWZpbmUgSUJfVU1FTV9NQVhfUEFHRV9DSFVOSwkJCQkJCVwKKwkoKFBBR0VfU0laRSAtIG9mZnNldG9mKHN0cnVjdCBpYl91bWVtX2NodW5rLCBwYWdlX2xpc3QpKSAvCVwKKwkgKCh2b2lkICopICYoKHN0cnVjdCBpYl91bWVtX2NodW5rICopIDApLT5wYWdlX2xpc3RbMV0gLQlcCisJICAodm9pZCAqKSAmKChzdHJ1Y3QgaWJfdW1lbV9jaHVuayAqKSAwKS0+cGFnZV9saXN0WzBdKSkKKworc3RydWN0IGliX3VtZW1fb2JqZWN0IHsKKwlzdHJ1Y3QgaWJfdW9iamVjdAl1b2JqZWN0OworCXN0cnVjdCBpYl91bWVtCQl1bWVtOworfTsKKwogc3RydWN0IGliX3BkIHsKLQlzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7Ci0JYXRvbWljX3QgICAgICAgICAgdXNlY250OyAvKiBjb3VudCBhbGwgcmVzb3VyY2VzICovCisJc3RydWN0IGliX2RldmljZSAgICAgICAqZGV2aWNlOworCXN0cnVjdCBpYl91b2JqZWN0ICAgICAgKnVvYmplY3Q7CisJYXRvbWljX3QgICAgICAgICAgCXVzZWNudDsgLyogY291bnQgYWxsIHJlc291cmNlcyAqLwogfTsKIAogc3RydWN0IGliX2FoIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlCSpkZXZpY2U7CiAJc3RydWN0IGliX3BkCQkqcGQ7CisJc3RydWN0IGliX3VvYmplY3QJKnVvYmplY3Q7CiB9OwogCiB0eXBlZGVmIHZvaWQgKCppYl9jb21wX2hhbmRsZXIpKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNxX2NvbnRleHQpOwogCiBzdHJ1Y3QgaWJfY3EgewotCXN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTsKLQlpYl9jb21wX2hhbmRsZXIgICBjb21wX2hhbmRsZXI7Ci0Jdm9pZCAgICAgICAgICAgICAoKmV2ZW50X2hhbmRsZXIpKHN0cnVjdCBpYl9ldmVudCAqLCB2b2lkICopOwotCXZvaWQgKiAgICAgICAgICAgIGNxX2NvbnRleHQ7Ci0JaW50ICAgICAgICAgICAgICAgY3FlOwotCWF0b21pY190ICAgICAgICAgIHVzZWNudDsgLyogY291bnQgbnVtYmVyIG9mIHdvcmsgcXVldWVzICovCisJc3RydWN0IGliX2RldmljZSAgICAgICAqZGV2aWNlOworCXN0cnVjdCBpYl91b2JqZWN0ICAgICAgKnVvYmplY3Q7CisJaWJfY29tcF9oYW5kbGVyICAgCWNvbXBfaGFuZGxlcjsKKwl2b2lkICAgICAgICAgICAgICAgICAgKCpldmVudF9oYW5kbGVyKShzdHJ1Y3QgaWJfZXZlbnQgKiwgdm9pZCAqKTsKKwl2b2lkICogICAgICAgICAgICAJY3FfY29udGV4dDsKKwlpbnQgICAgICAgICAgICAgICAJY3FlOworCWF0b21pY190ICAgICAgICAgIAl1c2VjbnQ7IC8qIGNvdW50IG51bWJlciBvZiB3b3JrIHF1ZXVlcyAqLwogfTsKIAogc3RydWN0IGliX3NycSB7CiAJc3RydWN0IGliX2RldmljZQkqZGV2aWNlOworCXN0cnVjdCBpYl91b2JqZWN0CSp1b2JqZWN0OwogCXN0cnVjdCBpYl9wZAkJKnBkOwogCXZvaWQJCQkqc3JxX2NvbnRleHQ7CiAJYXRvbWljX3QJCXVzZWNudDsKQEAgLTY1Miw2ICs3MTMsNyBAQAogCXN0cnVjdCBpYl9jcQkgICAgICAgKnNlbmRfY3E7CiAJc3RydWN0IGliX2NxCSAgICAgICAqcmVjdl9jcTsKIAlzdHJ1Y3QgaWJfc3JxCSAgICAgICAqc3JxOworCXN0cnVjdCBpYl91b2JqZWN0ICAgICAgKnVvYmplY3Q7CiAJdm9pZCAgICAgICAgICAgICAgICAgICgqZXZlbnRfaGFuZGxlcikoc3RydWN0IGliX2V2ZW50ICosIHZvaWQgKik7CiAJdm9pZAkJICAgICAgICpxcF9jb250ZXh0OwogCXUzMgkJCXFwX251bTsKQEAgLTY1OSwxNiArNzIxLDE4IEBACiB9OwogCiBzdHJ1Y3QgaWJfbXIgewotCXN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTsKLQlzdHJ1Y3QgaWJfcGQgICAgICpwZDsKLQl1MzIJCSAgbGtleTsKLQl1MzIJCSAgcmtleTsKLQlhdG9taWNfdCAgICAgICAgICB1c2VjbnQ7IC8qIGNvdW50IG51bWJlciBvZiBNV3MgKi8KKwlzdHJ1Y3QgaWJfZGV2aWNlICAqZGV2aWNlOworCXN0cnVjdCBpYl9wZAkgICpwZDsKKwlzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iamVjdDsKKwl1MzIJCSAgIGxrZXk7CisJdTMyCQkgICBya2V5OworCWF0b21pY190CSAgIHVzZWNudDsgLyogY291bnQgbnVtYmVyIG9mIE1XcyAqLwogfTsKIAogc3RydWN0IGliX213IHsKIAlzdHJ1Y3QgaWJfZGV2aWNlCSpkZXZpY2U7CiAJc3RydWN0IGliX3BkCQkqcGQ7CisJc3RydWN0IGliX3VvYmplY3QJKnVvYmplY3Q7CiAJdTMyCQkJcmtleTsKIH07CiAKQEAgLTczNyw3ICs4MDEsMTQgQEAKIAlpbnQJCSAgICAgICAgICAgKCptb2RpZnlfcG9ydCkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAogCQkJCQkJICB1OCBwb3J0X251bSwgaW50IHBvcnRfbW9kaWZ5X21hc2ssCiAJCQkJCQkgIHN0cnVjdCBpYl9wb3J0X21vZGlmeSAqcG9ydF9tb2RpZnkpOwotCXN0cnVjdCBpYl9wZCAqICAgICAgICAgICAgICgqYWxsb2NfcGQpKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CisJc3RydWN0IGliX3Vjb250ZXh0ICogICAgICAgKCphbGxvY191Y29udGV4dCkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkJCQkJICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKmRlYWxsb2NfdWNvbnRleHQpKHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCk7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCptbWFwKShzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKwlzdHJ1Y3QgaWJfcGQgKiAgICAgICAgICAgICAoKmFsbG9jX3BkKShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCisJCQkJCSAgICAgICBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkJCSAgICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKmRlYWxsb2NfcGQpKHN0cnVjdCBpYl9wZCAqcGQpOwogCXN0cnVjdCBpYl9haCAqICAgICAgICAgICAgICgqY3JlYXRlX2FoKShzdHJ1Y3QgaWJfcGQgKnBkLAogCQkJCQkJc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpOwpAQCAtNzQ3LDcgKzgxOCw4IEBACiAJCQkJCSAgICAgICBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cik7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpkZXN0cm95X2FoKShzdHJ1Y3QgaWJfYWggKmFoKTsKIAlzdHJ1Y3QgaWJfcXAgKiAgICAgICAgICAgICAoKmNyZWF0ZV9xcCkoc3RydWN0IGliX3BkICpwZCwKLQkJCQkJCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2luaXRfYXR0cik7CisJCQkJCQlzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICpxcF9pbml0X2F0dHIsCisJCQkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKm1vZGlmeV9xcCkoc3RydWN0IGliX3FwICpxcCwKIAkJCQkJCXN0cnVjdCBpYl9xcF9hdHRyICpxcF9hdHRyLAogCQkJCQkJaW50IHFwX2F0dHJfbWFzayk7CkBAIC03NjIsOCArODM0LDkgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKnBvc3RfcmVjdikoc3RydWN0IGliX3FwICpxcCwKIAkJCQkJCXN0cnVjdCBpYl9yZWN2X3dyICpyZWN2X3dyLAogCQkJCQkJc3RydWN0IGliX3JlY3Zfd3IgKipiYWRfcmVjdl93cik7Ci0Jc3RydWN0IGliX2NxICogICAgICAgICAgICAgKCpjcmVhdGVfY3EpKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKLQkJCQkJCWludCBjcWUpOworCXN0cnVjdCBpYl9jcSAqICAgICAgICAgICAgICgqY3JlYXRlX2NxKShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGludCBjcWUsCisJCQkJCQlzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKmRlc3Ryb3lfY3EpKHN0cnVjdCBpYl9jcSAqY3EpOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcmVzaXplX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgKmNxZSk7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpwb2xsX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgbnVtX2VudHJpZXMsCkBAIC03ODAsNiArODUzLDEwIEBACiAJCQkJCQkgIGludCBudW1fcGh5c19idWYsCiAJCQkJCQkgIGludCBtcl9hY2Nlc3NfZmxhZ3MsCiAJCQkJCQkgIHU2NCAqaW92YV9zdGFydCk7CisJc3RydWN0IGliX21yICogICAgICAgICAgICAgKCpyZWdfdXNlcl9tcikoc3RydWN0IGliX3BkICpwZCwKKwkJCQkJCSAgc3RydWN0IGliX3VtZW0gKnJlZ2lvbiwKKwkJCQkJCSAgaW50IG1yX2FjY2Vzc19mbGFncywKKwkJCQkJCSAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpxdWVyeV9tcikoc3RydWN0IGliX21yICptciwKIAkJCQkJICAgICAgIHN0cnVjdCBpYl9tcl9hdHRyICptcl9hdHRyKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKmRlcmVnX21yKShzdHJ1Y3QgaWJfbXIgKm1yKTsKQEAgLTgxNyw2ICs4OTQsNyBAQAogCQkJCQkJICBzdHJ1Y3QgaWJfbWFkICppbl9tYWQsCiAJCQkJCQkgIHN0cnVjdCBpYl9tYWQgKm91dF9tYWQpOwogCisJc3RydWN0IG1vZHVsZSAgICAgICAgICAgICAgICpvd25lcjsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICAgICAgICAgIGNsYXNzX2RldjsKIAlzdHJ1Y3Qga29iamVjdCAgICAgICAgICAgICAgIHBvcnRzX3BhcmVudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgIHBvcnRfbGlzdDsKQEAgLTg1Miw2ICs5MzAsMTYgQEAKIHZvaWQgIGliX3NldF9jbGllbnRfZGF0YShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBpYl9jbGllbnQgKmNsaWVudCwKIAkJCSB2b2lkICpkYXRhKTsKIAorc3RhdGljIGlubGluZSBpbnQgaWJfY29weV9mcm9tX3VkYXRhKHZvaWQgKmRlc3QsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIGNvcHlfZnJvbV91c2VyKGRlc3QsIHVkYXRhLT5pbmJ1ZiwgbGVuKSA/IC1FRkFVTFQgOiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpYl9jb3B5X3RvX3VkYXRhKHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gY29weV90b191c2VyKHVkYXRhLT5vdXRidWYsIHNyYywgbGVuKSA/IC1FRkFVTFQgOiAwOworfQorCiBpbnQgaWJfcmVnaXN0ZXJfZXZlbnRfaGFuZGxlciAgKHN0cnVjdCBpYl9ldmVudF9oYW5kbGVyICpldmVudF9oYW5kbGVyKTsKIGludCBpYl91bnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50X2hhbmRsZXIgKmV2ZW50X2hhbmRsZXIpOwogdm9pZCBpYl9kaXNwYXRjaF9ldmVudChzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCmluZGV4IGVlNzUwZTkuLmRiOWJhZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtMTYxLDExICsxNjAsNiBAQAogICAgIGxpbmstPm5leHQgPSBkZXZfbGlzdDsKICAgICBkZXZfbGlzdCA9IGxpbms7CiAgICAgY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLSAgICBjbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLSAgICBjbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmYXZtY3NfZXZlbnQ7CiAgICAgY2xpZW50X3JlZy5WZXJzaW9uID0gMHgwMjEwOwogICAgIGNsaWVudF9yZWcuZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfZGF0YSA9IGxpbms7CiAgICAgcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX2NsaWVudCgmbGluay0+aGFuZGxlLCAmY2xpZW50X3JlZyk7CkBAIC01MDAsNiArNDk0LDcgQEAKIAkJLm5hbWUJPSAiYXZtX2NzIiwKIAl9LAogCS5hdHRhY2gJPSBhdm1jc19hdHRhY2gsCisJLmV2ZW50CT0gYXZtY3NfZXZlbnQsCiAJLmRldGFjaAk9IGF2bWNzX2RldGFjaCwKIAkuaWRfdGFibGUgPSBhdm1jc19pZHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYwppbmRleCA2N2M2MGUwLi4wZTIyOTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtMTgzLDExICsxODIsNiBAQAogICAgIGxpbmstPm5leHQgPSBkZXZfbGlzdDsKICAgICBkZXZfbGlzdCA9IGxpbms7CiAgICAgY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLSAgICBjbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLSAgICBjbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmYXZtYTFjc19ldmVudDsKICAgICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgICAgY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKICAgICByZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTUxNCw2ICs1MDgsNyBAQAogCQkubmFtZQk9ICJhdm1hMV9jcyIsCiAJfSwKIAkuYXR0YWNoCQk9IGF2bWExY3NfYXR0YWNoLAorCS5ldmVudAkJPSBhdm1hMWNzX2V2ZW50LAogCS5kZXRhY2gJCT0gYXZtYTFjc19kZXRhY2gsCiAJLmlkX3RhYmxlCT0gYXZtYTFjc19pZHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKaW5kZXggOTE0NmJlNS4uNmZjNjg2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0yMTIsMTEgKzIxMSw2IEBACiAgICAgbGluay0+bmV4dCA9IGRldl9saXN0OwogICAgIGRldl9saXN0ID0gbGluazsKICAgICBjbGllbnRfcmVnLmRldl9pbmZvID0gJmRldl9pbmZvOwotICAgIGNsaWVudF9yZWcuRXZlbnRNYXNrID0KLSAgICAgICAgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotICAgICAgICBDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAotICAgICAgICBDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOwotICAgIGNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9ICZlbHNhX2NzX2V2ZW50OwogICAgIGNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKICAgICBjbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogICAgIHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtNTIxLDYgKzUxNSw3IEBACiAJCS5uYW1lCT0gImVsc2FfY3MiLAogCX0sCiAJLmF0dGFjaAkJPSBlbHNhX2NzX2F0dGFjaCwKKwkuZXZlbnQJCT0gZWxzYV9jc19ldmVudCwKIAkuZGV0YWNoCQk9IGVsc2FfY3NfZGV0YWNoLAogCS5pZF90YWJsZQk9IGVsc2FfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYwppbmRleCBhYzg5OTUwLi5iYWIzNTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCkBAIC0yNzksNyArMjc5LDggQEAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19MMV9QVUxMX1JFUSwgJnN0LT5sMS5GbGFncykpCiAJCXN0LT5sMS5sMWwyKHN0LCBQSF9QVUxMIHwgQ09ORklSTSwgTlVMTCk7CiAJaWYgKCF0ZXN0X2JpdChCQ19GTEdfQUNUSVYsICZiY3MtPkZsYWcpKSB7Ci0JCWlmICghdGVzdF9iaXQoQkNfRkxHX0JVU1ksICZiY3MtPkZsYWcpICYmICghc2tiX3F1ZXVlX2xlbigmYmNzLT5zcXVldWUpKSkgeworCQlpZiAoIXRlc3RfYml0KEJDX0ZMR19CVVNZLCAmYmNzLT5GbGFnKSAmJgorCQkgICAgc2tiX3F1ZXVlX2VtcHR5KCZiY3MtPnNxdWV1ZSkpIHsKIAkJCXN0LT5sMi5sMmwxKHN0LCBQSF9ERUFDVElWQVRFIHwgQ09ORklSTSwgTlVMTCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMKaW5kZXggOTAyMjU4My4uMTYxNWMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYwpAQCAtMTA4LDcgKzEwOCw4IEBACiBzdGF0aWMgdm9pZAogc2V0X3BlZXJfYnVzeShzdHJ1Y3QgTGF5ZXIyICpsMikgewogCXRlc3RfYW5kX3NldF9iaXQoRkxHX1BFRVJfQlVTWSwgJmwyLT5mbGFnKTsKLQlpZiAoc2tiX3F1ZXVlX2xlbigmbDItPmlfcXVldWUpIHx8IHNrYl9xdWV1ZV9sZW4oJmwyLT51aV9xdWV1ZSkpCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJmwyLT5pX3F1ZXVlKSB8fAorCSAgICAhc2tiX3F1ZXVlX2VtcHR5KCZsMi0+dWlfcXVldWUpKQogCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19MMkJMT0NLLCAmbDItPmZsYWcpOwogfQogCkBAIC03NTQsNyArNzU1LDcgQEAKIAkJc3QtPmwyLmwybDMoc3QsIERMX0VTVEFCTElTSCB8IElORElDQVRJT04sIE5VTEwpOwogCiAJaWYgKChTVF9MMl83PT1zdGF0ZSkgfHwgKFNUX0wyXzggPT0gc3RhdGUpKQotCQlpZiAoc2tiX3F1ZXVlX2xlbigmc3QtPmwyLmlfcXVldWUpICYmIGNhbnNlbmQoc3QpKQorCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc3QtPmwyLmlfcXVldWUpICYmIGNhbnNlbmQoc3QpKQogCQkJc3QtPmwyLmwybDEoc3QsIFBIX1BVTEwgfCBSRVFVRVNULCBOVUxMKTsKIH0KIApAQCAtODEwLDcgKzgxMSw3IEBACiAJaWYgKHByICE9IC0xKQogCQlzdC0+bDIubDJsMyhzdCwgcHIsIE5VTEwpOwogCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnN0LT5sMi5pX3F1ZXVlKSAmJiBjYW5zZW5kKHN0KSkKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc3QtPmwyLmlfcXVldWUpICYmIGNhbnNlbmQoc3QpKQogCQlzdC0+bDIubDJsMShzdCwgUEhfUFVMTCB8IFJFUVVFU1QsIE5VTEwpOwogfQogCkBAIC0xMDE0LDcgKzEwMTUsNyBAQAogCQkJaWYodHlwICE9IFJSKSBGc21EZWxUaW1lcigmc3QtPmwyLnQyMDMsIDkpOwogCQkJcmVzdGFydF90MjAwKHN0LCAxMik7CiAJCX0KLQkJaWYgKHNrYl9xdWV1ZV9sZW4oJnN0LT5sMi5pX3F1ZXVlKSAmJiAodHlwID09IFJSKSkKKwkJaWYgKCFza2JfcXVldWVfZW1wdHkoJnN0LT5sMi5pX3F1ZXVlKSAmJiAodHlwID09IFJSKSkKIAkJCXN0LT5sMi5sMmwxKHN0LCBQSF9QVUxMIHwgUkVRVUVTVCwgTlVMTCk7CiAJfSBlbHNlCiAJCW5yZXJyb3JyZWNvdmVyeShmaSk7CkBAIC0xMTIwLDcgKzExMjEsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnN0LT5sMi5pX3F1ZXVlKSAmJiAoZmktPnN0YXRlID09IFNUX0wyXzcpKQorCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzdC0+bDIuaV9xdWV1ZSkgJiYgKGZpLT5zdGF0ZSA9PSBTVF9MMl83KSkKIAkJc3QtPmwyLmwybDEoc3QsIFBIX1BVTEwgfCBSRVFVRVNULCBOVUxMKTsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19BQ0tfUEVORCwgJnN0LT5sMi5mbGFnKSkKIAkJZW5xdWlyeV9jcihzdCwgUlIsIFJTUCwgMCk7CkBAIC0xMTM4LDcgKzExMzksNyBAQAogCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19MM19JTklULCAmc3QtPmwyLmZsYWcpOwogCX0gZWxzZQogCQlGc21DaGFuZ2VTdGF0ZShmaSwgU1RfTDJfNCk7Ci0JaWYgKHNrYl9xdWV1ZV9sZW4oJnN0LT5sMi51aV9xdWV1ZSkpCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJnN0LT5sMi51aV9xdWV1ZSkpCiAJCXR4X3VpKHN0KTsKIH0KIApAQCAtMTMwMSw3ICsxMzAyLDcgQEAKIAkJRnNtRGVsVGltZXIoJnN0LT5sMi50MjAzLCAxMyk7CiAJCUZzbUFkZFRpbWVyKCZzdC0+bDIudDIwMCwgc3QtPmwyLlQyMDAsIEVWX0wyX1QyMDAsIE5VTEwsIDExKTsKIAl9Ci0JaWYgKHNrYl9xdWV1ZV9sZW4oJmwyLT5pX3F1ZXVlKSAmJiBjYW5zZW5kKHN0KSkKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmbDItPmlfcXVldWUpICYmIGNhbnNlbmQoc3QpKQogCQlzdC0+bDIubDJsMShzdCwgUEhfUFVMTCB8IFJFUVVFU1QsIE5VTEwpOwogfQogCkBAIC0xMzQ3LDcgKzEzNDgsNyBAQAogCQkJfQogCQkJaW52b2tlX3JldHJhbnNtaXNzaW9uKHN0LCBucik7CiAJCQlGc21DaGFuZ2VTdGF0ZShmaSwgU1RfTDJfNyk7Ci0JCQlpZiAoc2tiX3F1ZXVlX2xlbigmbDItPmlfcXVldWUpICYmIGNhbnNlbmQoc3QpKQorCQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmwyLT5pX3F1ZXVlKSAmJiBjYW5zZW5kKHN0KSkKIAkJCQlzdC0+bDIubDJsMShzdCwgUEhfUFVMTCB8IFJFUVVFU1QsIE5VTEwpOwogCQl9IGVsc2UKIAkJCW5yZXJyb3JyZWNvdmVyeShmaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwzLmMKaW5kZXggYWJjYzk1My4uYzk5MTdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJCQkJIXRlc3RfYml0KEZMR19QVFAsICZwLT5zdC0+bDIuZmxhZykpIHsKIAkJCQlpZiAocC0+ZGVidWcpCiAJCQkJCWwzX2RlYnVnKHAtPnN0LCAicmVsZWFzZV9sM19wcm9jZXNzOiBsYXN0IHByb2Nlc3MiKTsKLQkJCQlpZiAoIXNrYl9xdWV1ZV9sZW4oJnAtPnN0LT5sMy5zcXVldWUpKSB7CisJCQkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcC0+c3QtPmwzLnNxdWV1ZSkpIHsKIAkJCQkJaWYgKHAtPmRlYnVnKQogCQkJCQkJbDNfZGVidWcocC0+c3QsICJyZWxlYXNlX2wzX3Byb2Nlc3M6IHJlbGVhc2UgbGluayIpOwogCQkJCQlpZiAocC0+c3QtPnByb3RvY29sICE9IElTRE5fUFRZUEVfTkkxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCmluZGV4IDA1ODE0N2EuLmM2YjViZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTIyNiwxMSArMjI1LDYgQEAKICAgICBsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAgICAgZGV2X2xpc3QgPSBsaW5rOwogICAgIGNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0gICAgY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQlDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAotCUNTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0gICAgY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnNlZGxiYXVlcl9ldmVudDsKICAgICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgICAgY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKICAgICByZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTYzNCw2ICs2MjgsNyBAQAogCQkubmFtZQk9ICJzZWRsYmF1ZXJfY3MiLAogCX0sCiAJLmF0dGFjaAkJPSBzZWRsYmF1ZXJfYXR0YWNoLAorCS5ldmVudAkJPSBzZWRsYmF1ZXJfZXZlbnQsCiAJLmRldGFjaAkJPSBzZWRsYmF1ZXJfZGV0YWNoLAogCS5pZF90YWJsZQk9IHNlZGxiYXVlcl9pZHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwppbmRleCAxMDczNzZmLi4wZGRlZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtMTkzLDExICsxOTIsNiBAQAogICAgIGxpbmstPm5leHQgPSBkZXZfbGlzdDsKICAgICBkZXZfbGlzdCA9IGxpbms7CiAgICAgY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLSAgICBjbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0gICAgICAgIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLSAgICAgICAgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLSAgICAgICAgQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLSAgICBjbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmdGVsZXNfY3NfZXZlbnQ7CiAgICAgY2xpZW50X3JlZy5WZXJzaW9uID0gMHgwMjEwOwogICAgIGNsaWVudF9yZWcuZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfZGF0YSA9IGxpbms7CiAgICAgcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX2NsaWVudCgmbGluay0+aGFuZGxlLCAmY2xpZW50X3JlZyk7CkBAIC01MDEsNiArNDk1LDcgQEAKIAkJLm5hbWUJPSAidGVsZXNfY3MiLAogCX0sCiAJLmF0dGFjaAkJPSB0ZWxlc19hdHRhY2gsCisJLmV2ZW50CQk9IHRlbGVzX2NzX2V2ZW50LAogCS5kZXRhY2gJCT0gdGVsZXNfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IHRlbGVzX2lkcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKaW5kZXggYWQ1YWEzOC4uYjM3ZWYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKIAkJdG90YWwgKz0gYzsKIAl9CiAJYXRvbWljX2RlYygmaW5mby0+eG1pdF9sb2NrKTsKLQlpZiAoKGluZm8tPnhtaXRfY291bnQpIHx8IChza2JfcXVldWVfbGVuKCZpbmZvLT54bWl0X3F1ZXVlKSkpIHsKKwlpZiAoKGluZm8tPnhtaXRfY291bnQpIHx8ICFza2JfcXVldWVfZW1wdHkoJmluZm8tPnhtaXRfcXVldWUpKSB7CiAJCWlmIChtLT5tZG1yZWdbUkVHX0RYTVRdICYgQklUX0RYTVQpIHsKIAkJCWlzZG5fdHR5X3NlbmRkb3duKGluZm8pOwogCQkJaXNkbl90dHlfdGludChpbmZvKTsKQEAgLTEyODQsNyArMTI4NCw3IEBACiAKIAlpZiAoaXNkbl90dHlfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiaXNkbl90dHlfZmx1c2hfY2hhcnMiKSkKIAkJcmV0dXJuOwotCWlmICgoaW5mby0+eG1pdF9jb3VudCkgfHwgKHNrYl9xdWV1ZV9sZW4oJmluZm8tPnhtaXRfcXVldWUpKSkKKwlpZiAoKGluZm8tPnhtaXRfY291bnQpIHx8ICFza2JfcXVldWVfZW1wdHkoJmluZm8tPnhtaXRfcXVldWUpKQogCQlpc2RuX3RpbWVyX2N0cmwoSVNETl9USU1FUl9NT0RFTVhNSVQsIDEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jIGIvZHJpdmVycy9pc2RuL2ljbi9pY24uYwppbmRleCA5ZmMwYzFlLi5lMGQxYjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMKQEAgLTMwNCwxMiArMzA0LDEyIEBACiAJaXNkbl9jdHJsIGNtZDsKIAogCWlmICghKGNhcmQtPnNuZGNvdW50W2NoYW5uZWxdIHx8IGNhcmQtPnhza2JbY2hhbm5lbF0gfHwKLQkgICAgICBza2JfcXVldWVfbGVuKCZjYXJkLT5zcHF1ZXVlW2NoYW5uZWxdKSkpCisJICAgICAgIXNrYl9xdWV1ZV9lbXB0eSgmY2FyZC0+c3BxdWV1ZVtjaGFubmVsXSkpKQogCQlyZXR1cm47CiAJaWYgKGljbl90cnltYXBsb2NrX2NoYW5uZWwoY2FyZCwgbWNoKSkgewogCQl3aGlsZSAoc2JmcmVlICYmIAogCQkgICAgICAgKGNhcmQtPnNuZGNvdW50W2NoYW5uZWxdIHx8Ci0JCQlza2JfcXVldWVfbGVuKCZjYXJkLT5zcHF1ZXVlW2NoYW5uZWxdKSB8fAorCQkJIXNrYl9xdWV1ZV9lbXB0eSgmY2FyZC0+c3BxdWV1ZVtjaGFubmVsXSkgfHwKIAkJCWNhcmQtPnhza2JbY2hhbm5lbF0pKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCQkJaWYgKGNhcmQtPnhtaXRfbG9ja1tjaGFubmVsXSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvTWFrZWZpbGUgYi9kcml2ZXJzL21hY2ludG9zaC9NYWtlZmlsZQppbmRleCBmNWFlMTcxLi4yMzYyOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21hY2ludG9zaC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogIyBFYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVuYWJsZXMgYSBsaXN0IG9mIGZpbGVzLgogCi1vYmotJChDT05GSUdfUFBDX1BNQUMpCQkrPSBtYWNpb19hc2ljLm8KK29iai0kKENPTkZJR19QUENfUE1BQykJCSs9IG1hY2lvX2FzaWMubyBtYWNpb19zeXNmcy5vCiAKIG9iai0kKENPTkZJR19QTUFDX01FRElBQkFZKQkrPSBtZWRpYWJheS5vCiBvYmotJChDT05GSUdfTUFDX0VNVU1PVVNFQlROKQkrPSBtYWNfaGlkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYwppbmRleCBkMGJkYTdlLi4xZWUwMDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fYXNpYy5jCkBAIC0zMyw3ICszMyw3IEBACiB7CiAJc3RydWN0IG1hY2lvX2RldiAqIG1hY2lvX2RldiA9IHRvX21hY2lvX2RldmljZShkZXYpOwogCXN0cnVjdCBtYWNpb19kcml2ZXIgKiBtYWNpb19kcnYgPSB0b19tYWNpb19kcml2ZXIoZHJ2KTsKLQljb25zdCBzdHJ1Y3Qgb2ZfbWF0Y2ggKiBtYXRjaGVzID0gbWFjaW9fZHJ2LT5tYXRjaF90YWJsZTsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICogbWF0Y2hlcyA9IG1hY2lvX2Rydi0+bWF0Y2hfdGFibGU7CiAKIAlpZiAoIW1hdGNoZXMpIAogCQlyZXR1cm4gMDsKQEAgLTY2LDcgKzY2LDcgQEAKIAlpbnQgZXJyb3IgPSAtRU5PREVWOwogCXN0cnVjdCBtYWNpb19kcml2ZXIgKmRydjsKIAlzdHJ1Y3QgbWFjaW9fZGV2ICptYWNpb19kZXY7Ci0JY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaDsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAogCWRydiA9IHRvX21hY2lvX2RyaXZlcihkZXYtPmRyaXZlcik7CiAJbWFjaW9fZGV2ID0gdG9fbWFjaW9fZGV2aWNlKGRldik7CkBAIC0xMjYsMTEgKzEyNiw4NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1hY2lvX2hvdHBsdWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqKmVudnAsIGludCBudW1fZW52cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpCit7CisJc3RydWN0IG1hY2lvX2RldiAqIG1hY2lvX2RldjsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICogb2Y7CisJY2hhciAqc2NyYXRjaCwgKmNvbXBhdDsKKwlpbnQgaSA9IDA7CisJaW50IGxlbmd0aCA9IDA7CisJaW50IGNwbGVuLCBzZWVuID0gMDsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1hY2lvX2RldiA9IHRvX21hY2lvX2RldmljZShkZXYpOworCWlmICghbWFjaW9fZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9mID0gJm1hY2lvX2Rldi0+b2ZkZXY7CisJc2NyYXRjaCA9IGJ1ZmZlcjsKKworCS8qIHN0dWZmIHdlIHdhbnQgdG8gcGFzcyB0byAvc2Jpbi9ob3RwbHVnICovCisJZW52cFtpKytdID0gc2NyYXRjaDsKKwlsZW5ndGggKz0gc2NucHJpbnRmIChzY3JhdGNoLCBidWZmZXJfc2l6ZSAtIGxlbmd0aCwgIk9GX05BTUU9JXMiLAorCSAgICAgICAgICAgICAgICAgICAgIG9mLT5ub2RlLT5uYW1lKTsKKwlpZiAoKGJ1ZmZlcl9zaXplIC0gbGVuZ3RoIDw9IDApIHx8IChpID49IG51bV9lbnZwKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJKytsZW5ndGg7CisJc2NyYXRjaCArPSBsZW5ndGg7CisKKwllbnZwW2krK10gPSBzY3JhdGNoOworCWxlbmd0aCArPSBzY25wcmludGYgKHNjcmF0Y2gsIGJ1ZmZlcl9zaXplIC0gbGVuZ3RoLCAiT0ZfVFlQRT0lcyIsCisJICAgICAgICAgICAgICAgICAgICAgb2YtPm5vZGUtPnR5cGUpOworCWlmICgoYnVmZmVyX3NpemUgLSBsZW5ndGggPD0gMCkgfHwgKGkgPj0gbnVtX2VudnApKQorCQlyZXR1cm4gLUVOT01FTTsKKwkrK2xlbmd0aDsKKwlzY3JhdGNoICs9IGxlbmd0aDsKKworICAgICAgICAvKiBTaW5jZSB0aGUgY29tcGF0aWJsZSBmaWVsZCBjYW4gY29udGFpbiBwcmV0dHkgbXVjaCBhbnl0aGluZworICAgICAgICAgKiBpdCdzIG5vdCByZWFsbHkgbGVnYWwgdG8gc3BsaXQgaXQgb3V0IHdpdGggY29tbWFzLiBXZSBzcGxpdCBpdAorICAgICAgICAgKiB1cCB1c2luZyBhIG51bWJlciBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW5zdGVhZC4gKi8KKworCWNvbXBhdCA9IChjaGFyICopIGdldF9wcm9wZXJ0eShvZi0+bm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOworCXdoaWxlIChjb21wYXQgJiYgY3BsZW4gPiAwKSB7CisJCWludCBsOworICAgICAgICAgICAgICAgIGVudnBbaSsrXSA9IHNjcmF0Y2g7CisJCWxlbmd0aCArPSBzY25wcmludGYgKHNjcmF0Y2gsIGJ1ZmZlcl9zaXplIC0gbGVuZ3RoLAorCQkgICAgICAgICAgICAgICAgICAgICAiT0ZfQ09NUEFUSUJMRV8lZD0lcyIsIHNlZW4sIGNvbXBhdCk7CisJCWlmICgoYnVmZmVyX3NpemUgLSBsZW5ndGggPD0gMCkgfHwgKGkgPj0gbnVtX2VudnApKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWxlbmd0aCsrOworCQlzY3JhdGNoICs9IGxlbmd0aDsKKwkJbCA9IHN0cmxlbiAoY29tcGF0KSArIDE7CisJCWNvbXBhdCArPSBsOworCQljcGxlbiAtPSBsOworCQlzZWVuKys7CisJfQorCisJZW52cFtpKytdID0gc2NyYXRjaDsKKwlsZW5ndGggKz0gc2NucHJpbnRmIChzY3JhdGNoLCBidWZmZXJfc2l6ZSAtIGxlbmd0aCwKKwkgICAgICAgICAgICAgICAgICAgICAiT0ZfQ09NUEFUSUJMRV9OPSVkIiwgc2Vlbik7CisJaWYgKChidWZmZXJfc2l6ZSAtIGxlbmd0aCA8PSAwKSB8fCAoaSA+PSBudW1fZW52cCkpCisJCXJldHVybiAtRU5PTUVNOworCSsrbGVuZ3RoOworCXNjcmF0Y2ggKz0gbGVuZ3RoOworCisJZW52cFtpXSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIG1hY2lvX2Rldl9hdHRyc1tdOworCiBzdHJ1Y3QgYnVzX3R5cGUgbWFjaW9fYnVzX3R5cGUgPSB7CiAgICAgICAgLm5hbWUJPSAibWFjaW8iLAogICAgICAgIC5tYXRjaAk9IG1hY2lvX2J1c19tYXRjaCwKKyAgICAgICAuaG90cGx1ZyA9IG1hY2lvX2hvdHBsdWcsCiAgICAgICAgLnN1c3BlbmQJPSBtYWNpb19kZXZpY2Vfc3VzcGVuZCwKICAgICAgICAucmVzdW1lCT0gbWFjaW9fZGV2aWNlX3Jlc3VtZSwKKyAgICAgICAuZGV2X2F0dHJzID0gbWFjaW9fZGV2X2F0dHJzLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjaW9fYnVzX2RyaXZlcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19zeXNmcy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2QyMmJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fc3lzZnMuYwpAQCAtMCwwICsxLDUwIEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNpby5oPgorCisKKyNkZWZpbmUgbWFjaW9fY29uZmlnX29mX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK2ZpZWxkIyNfc2hvdyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorICAgICAgICAgICAgICBjaGFyICpidWYpCQkJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2ID0gdG9fbWFjaW9fZGV2aWNlIChkZXYpOwkJCVwKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCBmb3JtYXRfc3RyaW5nLCBtZGV2LT5vZmRldi5ub2RlLT5maWVsZCk7CVwKK30KKworc3RhdGljIHNzaXplX3QKK2NvbXBhdGlibGVfc2hvdyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBvZl9kZXZpY2UgKm9mOworCWNoYXIgKmNvbXBhdDsKKwlpbnQgY3BsZW47CisJaW50IGxlbmd0aCA9IDA7CisKKwlvZiA9ICZ0b19tYWNpb19kZXZpY2UgKGRldiktPm9mZGV2OworCWNvbXBhdCA9IChjaGFyICopIGdldF9wcm9wZXJ0eShvZi0+bm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOworCWlmICghY29tcGF0KSB7CisJCSpidWYgPSAnXDAnOworCQlyZXR1cm4gMDsKKwl9CisJd2hpbGUgKGNwbGVuID4gMCkgeworCQlpbnQgbDsKKwkJbGVuZ3RoICs9IHNwcmludGYgKGJ1ZiwgIiVzXG4iLCBjb21wYXQpOworCQlidWYgKz0gbGVuZ3RoOworCQlsID0gc3RybGVuIChjb21wYXQpICsgMTsKKwkJY29tcGF0ICs9IGw7CisJCWNwbGVuIC09IGw7CisJfQorCisJcmV0dXJuIGxlbmd0aDsKK30KKworbWFjaW9fY29uZmlnX29mX2F0dHIgKG5hbWUsICIlc1xuIik7CittYWNpb19jb25maWdfb2ZfYXR0ciAodHlwZSwgIiVzXG4iKTsKKworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgbWFjaW9fZGV2X2F0dHJzW10gPSB7CisJX19BVFRSX1JPKG5hbWUpLAorCV9fQVRUUl9STyh0eXBlKSwKKwlfX0FUVFJfUk8oY29tcGF0aWJsZSksCisJX19BVFRSX05VTEwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tZWRpYWJheS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWVkaWFiYXkuYwppbmRleCA0YmU3MDllLi43YzE2YzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tZWRpYWJheS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL21lZGlhYmF5LmMKQEAgLTY0Miw3ICs2NDIsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgbWVkaWFfYmF5X2F0dGFjaChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfbWF0Y2ggKm1hdGNoKQorc3RhdGljIGludCBfX2RldmluaXQgbWVkaWFfYmF5X2F0dGFjaChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgbWVkaWFfYmF5X2luZm8qIGJheTsKIAl1MzIgX19pb21lbSAqcmVnYmFzZTsKQEAgLTc5NywyMyArNzk3LDIwIEBACiAgKiBUaGVyZWZvcmUgd2UgZG8gaXQgYWxsIGJ5IHBvbGxpbmcgdGhlIG1lZGlhIGJheSBvbmNlIGVhY2ggdGljay4KICAqLwogCi1zdGF0aWMgc3RydWN0IG9mX21hdGNoIG1lZGlhX2JheV9tYXRjaFtdID0KK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1lZGlhX2JheV9tYXRjaFtdID0KIHsKIAl7CiAJLm5hbWUJCT0gIm1lZGlhLWJheSIsCi0JLnR5cGUJCT0gT0ZfQU5ZX01BVENILAogCS5jb21wYXRpYmxlCT0gImtleWxhcmdvLW1lZGlhLWJheSIsCiAJLmRhdGEJCT0gJmtleWxhcmdvX21iX29wcywKIAl9LAogCXsKIAkubmFtZQkJPSAibWVkaWEtYmF5IiwKLQkudHlwZQkJPSBPRl9BTllfTUFUQ0gsCiAJLmNvbXBhdGlibGUJPSAiaGVhdGhyb3ctbWVkaWEtYmF5IiwKIAkuZGF0YQkJPSAmaGVhdGhyb3dfbWJfb3BzLAogCX0sCiAJewogCS5uYW1lCQk9ICJtZWRpYS1iYXkiLAotCS50eXBlCQk9IE9GX0FOWV9NQVRDSCwKIAkuY29tcGF0aWJsZQk9ICJvaGFyZS1tZWRpYS1iYXkiLAogCS5kYXRhCQk9ICZvaGFyZV9tYl9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwppbmRleCBmZWI0ZTI0Li43MDNlMzE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtMTIwLDYgKzEyMCw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaW8uaD4KIAogI2luY2x1ZGUgInRoZXJtX3BtNzIuaCIKIApAQCAtMTk4Niw3ICsxOTg3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZmN1X29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UqIGRldiwgY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaCkKK3N0YXRpYyBpbnQgZmN1X29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UqIGRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJaW50IHJjOwogCkBAIC0yMDA5LDEyICsyMDEwLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfbWF0Y2ggZmN1X29mX21hdGNoW10gPSAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZjdV9tYXRjaFtdID0gCiB7CiAJewotCS5uYW1lIAkJPSBPRl9BTllfTUFUQ0gsCiAJLnR5cGUJCT0gImZjdSIsCi0JLmNvbXBhdGlibGUJPSBPRl9BTllfTUFUQ0gKIAl9LAogCXt9LAogfTsKQEAgLTIwMjIsNyArMjAyMSw3IEBACiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBmY3Vfb2ZfcGxhdGZvcm1fZHJpdmVyID0gCiB7CiAJLm5hbWUgCQk9ICJ0ZW1wZXJhdHVyZSIsCi0JLm1hdGNoX3RhYmxlCT0gZmN1X29mX21hdGNoLAorCS5tYXRjaF90YWJsZQk9IGZjdV9tYXRjaCwKIAkucHJvYmUJCT0gZmN1X29mX3Byb2JlLAogCS5yZW1vdmUJCT0gZmN1X29mX3JlbW92ZQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYwppbmRleCA2MTQwMGYwLi5jYmI3MmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaW8uaD4KIAogI2RlZmluZSBMT0dfVEVNUAkJMAkJCS8qIGNvbnRpbm91c2x5IGxvZyB0ZW1wZXJhdHVyZSAqLwogCkBAIC00NTAsNyArNDUxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQKLXRoZXJtX29mX3Byb2JlKCBzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqbWF0Y2ggKQordGhlcm1fb2ZfcHJvYmUoIHN0cnVjdCBvZl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2ggKQogewogCXJldHVybiBpMmNfYWRkX2RyaXZlciggJmc0ZmFuX2RyaXZlciApOwogfQpAQCAtNDYxLDkgKzQ2Miw4IEBACiAJcmV0dXJuIGkyY19kZWxfZHJpdmVyKCAmZzRmYW5fZHJpdmVyICk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfbWF0Y2ggdGhlcm1fb2ZfbWF0Y2hbXSA9IHt7CitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB0aGVybV9vZl9tYXRjaFtdID0ge3sKIAkubmFtZQkJPSAiZmFuIiwKLQkudHlwZQkJPSBPRl9BTllfTUFUQ0gsCiAJLmNvbXBhdGlibGUJPSAiYWRtMTAzMCIKICAgICB9LCB7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwppbmRleCA2ZTNjZjdlLi4xMjAzMWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCkBAIC0xMDYwLDYgKzEwNjAsNyBAQAogCX0KIAogCXRpLT5wcml2YXRlID0gbXM7CisgCXRpLT5zcGxpdF9pbyA9IG1zLT5yaC5yZWdpb25fc2l6ZTsKIAogCXIgPSBrY29weWRfY2xpZW50X2NyZWF0ZShETV9JT19QQUdFUywgJm1zLT5rY29weWRfY2xpZW50KTsKIAlpZiAocikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYwppbmRleCA1MGU4Yjg2Li5jZDU4MjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYwpAQCAtNjIsMTMgKzYyLDE1IEBACiBpbnQgc2FhNzE0Nl93YWl0X2Zvcl9kZWJpX2RvbmUoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIGludCBub2J1c3lsb29wKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJaW50IGVycjsKIAogCS8qIHdhaXQgZm9yIHJlZ2lzdGVycyB0byBiZSBwcm9ncmFtbWVkICovCiAJc3RhcnQgPSBqaWZmaWVzOwogCXdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNhYTcxNDZfcmVhZChkZXYsIE1DMikgJiAyKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0ICsgSFovMjApKSB7CisJCWVyciA9IHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnQgKyBIWi8yMCk7CisJCWlmIChzYWE3MTQ2X3JlYWQoZGV2LCBNQzIpICYgMikKKwkJCWJyZWFrOworCQlpZiAoZXJyKSB7CiAJCQlERUJfUygoInRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciByZWdpc3RlcnMgZ2V0dGluZyBwcm9ncmFtbWVkXG4iKSk7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQpAQCAtNzksMTAgKzgxLDExIEBACiAJLyogd2FpdCBmb3IgdHJhbnNmZXIgdG8gY29tcGxldGUgKi8KIAlzdGFydCA9IGppZmZpZXM7CiAJd2hpbGUgKDEpIHsKKwkJZXJyID0gdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEhaLzQpOwogCQlpZiAoIShzYWE3MTQ2X3JlYWQoZGV2LCBQU1IpICYgU1BDSV9ERUJJX1MpKQogCQkJYnJlYWs7CiAJCXNhYTcxNDZfcmVhZChkZXYsIE1DMik7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0ICsgSFovNCkpIHsKKwkJaWYgKGVycikgewogCQkJREVCX1MoKCJ0aW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgdHJhbnNmZXIgY29tcGxldGlvblxuIikpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KQEAgLTUxMiw3ICs1MTUsNyBAQAogCWV4dC0+ZHJpdmVyLnJlbW92ZSA9IHNhYTcxNDZfcmVtb3ZlX29uZTsKIAogCXByaW50aygic2FhNzE0NjogcmVnaXN0ZXIgZXh0ZW5zaW9uICclcycuXG4iLGV4dC0+bmFtZSk7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmZXh0LT5kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZleHQtPmRyaXZlcik7CiB9CiAKIGludCBzYWE3MTQ2X3VucmVnaXN0ZXJfZXh0ZW5zaW9uKHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiogZXh0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKaW5kZXggMDEzODdmOC4uM2YwZWM2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCkBAIC00MCw2ICs0MCwxMCBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWciCiAKK2NvbW1lbnQgIlN1cHBvcnRlZCBQbHV0bzIgQWRhcHRlcnMiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL0tjb25maWciCisKIGNvbW1lbnQgIlN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCmluZGV4IDNjNmZmMTYuLmE3YWQwODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCkBAIC0yLDQgKzIsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBtdWx0aW1lZGlhIGRldmljZSBkcml2ZXJzLgogIwogCi1vYmoteSAgICAgICAgOj0gZHZiLWNvcmUvIGZyb250ZW5kcy8gdHRwY2kvIHR0dXNiLWRlYy8gdHR1c2ItYnVkZ2V0LyBiMmMyLyBidDh4eC8gY2luZXJneVQyLyBkdmItdXNiLworb2JqLXkgICAgICAgIDo9IGR2Yi1jb3JlLyBmcm9udGVuZHMvIHR0cGNpLyB0dHVzYi1kZWMvIHR0dXNiLWJ1ZGdldC8gYjJjMi8gYnQ4eHgvIGNpbmVyZ3lUMi8gZHZiLXVzYi8gcGx1dG8yLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCmluZGV4IGZhZmQwYWIuLmQ3NDE3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKQEAgLTM1LDE3ICszNSwzIEBACiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBtb2R1bGUgb3B0aW9uIHRvIGNvbnRyb2wgZGVidWcgbWVzc2FnZXMKIAkgIG9mIGFsbCBCMkMyIEZsZXhDb3AgZHJpdmVycy4KLQotY29uZmlnIERWQl9CMkMyX1NLWVNUQVIKLQl0cmlzdGF0ZSAiQjJDMi9UZWNobmlzYXQgQWlyL1NreS9DYWJsZVN0YXIgMiBQQ0kiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kKLQlzZWxlY3QgRFZCX1NUVjAyOTkKLQlzZWxlY3QgRFZCX01UMzUyCi0Jc2VsZWN0IERWQl9NVDMxMgotCXNlbGVjdCBEVkJfTlhUMjAwMgotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIHRoZSBTa3lzdGFyMiBQQ0kgRFZCIGNhcmQgYnkgVGVjaG5pc2F0LCB3aGljaAotCSAgaXMgZXF1aXBwZWQgd2l0aCB0aGUgRmxleENvcElJIGNoaXBzZXQgYnkgQjJDMiwgYW5kCi0JICBmb3IgdGhlIEIyQzIvQkJUSSBBaXIyUEMtQVRTQyBjYXJkLgotCi0JICBTYXkgWSBpZiB5b3Ugb3duIHN1Y2ggYSBkZXZpY2UgYW5kIHdhbnQgdG8gdXNlIGl0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvTWFrZWZpbGUKaW5kZXggNzcwMzgxMi4uMWExYzNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL01ha2VmaWxlCkBAIC05LDYgKzksNCBAQAogYjJjMi1mbGV4Y29wLXVzYi1vYmpzID0gZmxleGNvcC11c2Iubwogb2JqLSQoQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfVVNCKSArPSBiMmMyLWZsZXhjb3AtdXNiLm8KIAotb2JqLSQoQ09ORklHX0RWQl9CMkMyX1NLWVNUQVIpICs9IHNreXN0YXIyLm8KLQogRVhUUkFfQ0ZMQUdTID0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmgKaW5kZXggNzczZDE1OC4uYTk0OTEyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaApAQCAtMTA4LDYgKzEwOCw4IEBACiBpbnQgIGZsZXhjb3BfZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGZsZXhjb3BfZGV2aWNlKik7CiB2b2lkIGZsZXhjb3BfZGV2aWNlX2V4aXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7CiAKK3ZvaWQgZmxleGNvcF9yZXNldF9ibG9ja18zMDAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7CisKIC8qIGZyb20gZmxleGNvcC1kbWEuYyAqLwogaW50IGZsZXhjb3BfZG1hX2FsbG9jYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgdTMyIHNpemUpOwogdm9pZCBmbGV4Y29wX2RtYV9mcmVlKHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hKTsKQEAgLTExNSw3ICsxMTcsOCBAQAogaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfZG1hX2luZGV4X3Qgbm8sIGludCBvbm9mZik7CiBpbnQgZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpOwogaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfcGFja2V0X2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpOwotaW50IGZsZXhjb3BfZG1hX2NvbmZpZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LGZsZXhjb3BfZG1hX2FkZHJfaW5kZXhfdCBpbmRleCk7CitpbnQgZmxleGNvcF9kbWFfY29uZmlnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hLCBmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgpOworaW50IGZsZXhjb3BfZG1hX3hmZXJfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsIGZsZXhjb3BfZG1hX2FkZHJfaW5kZXhfdCBpbmRleCwgaW50IG9ub2ZmKTsKIGludCBmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCB1OCBjeWNsZXMpOwogaW50IGZsZXhjb3BfZG1hX2NvbmZpZ19wYWNrZXRfY291bnQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCB1OCBwYWNrZXRzKTsKIApAQCAtMTUxLDYgKzE1NCw3IEBACiAvKiBmcm9tIGZsZXhjb3AtbWlzYy5jICovCiB2b2lkIGZsZXhjb3BfZGV0ZXJtaW5lX3JldmlzaW9uKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpOwogdm9pZCBmbGV4Y29wX2RldmljZV9uYW1lKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsY29uc3QgY2hhciAqcHJlZml4LGNvbnN0IGNoYXIgKnN1ZmZpeCk7Cit2b2lkIGZsZXhjb3BfZHVtcF9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBpbnQgbnVtKTsKIAogLyogZnJvbSBmbGV4Y29wLWh3LWZpbHRlci5jICovCiBpbnQgZmxleGNvcF9waWRfZmVlZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCwgaW50IG9ub2ZmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYwppbmRleCA4ZDI3MDYwLi5jZjRlZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZG1hLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWRtYS5jCkBAIC0zNywyMiArMzcsOTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woZmxleGNvcF9kbWFfZnJlZSk7CiAKLWludCBmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpCitpbnQgZmxleGNvcF9kbWFfY29uZmlnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgpCiB7Ci0JZmxleGNvcF9pYmlfdmFsdWUgdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsY3RybF8yMDgpOworCWZsZXhjb3BfaWJpX3ZhbHVlIHYweDAsdjB4NCx2MHhjOworCXYweDAucmF3ID0gdjB4NC5yYXcgPSB2MHhjLnJhdyA9IDA7CiAKLQlpZiAobm8gJiBGQ19ETUFfMSkKLQkJdi5jdHJsXzIwOC5ETUExX1RpbWVyX0VuYWJsZV9zaWcgPSBvbm9mZjsKKwl2MHgwLmRtYV8weDAuZG1hX2FkZHJlc3MwICAgICAgICA9IGRtYS0+ZG1hX2FkZHIwID4+IDI7CisJdjB4Yy5kbWFfMHhjLmRtYV9hZGRyZXNzMSAgICAgICAgPSBkbWEtPmRtYV9hZGRyMSA+PiAyOworCXYweDQuZG1hXzB4NF93cml0ZS5kbWFfYWRkcl9zaXplID0gZG1hLT5zaXplIC8gNDsKIAotCWlmIChubyAmIEZDX0RNQV8yKQotCQl2LmN0cmxfMjA4LkRNQTJfVGltZXJfRW5hYmxlX3NpZyA9IG9ub2ZmOworCWlmICgoZG1hX2lkeCAmIEZDX0RNQV8xKSA9PSBkbWFfaWR4KSB7CisJCWZjLT53cml0ZV9pYmlfcmVnKGZjLGRtYTFfMDAwLHYweDApOworCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxkbWExXzAwNCx2MHg0KTsKKwkJZmMtPndyaXRlX2liaV9yZWcoZmMsZG1hMV8wMGMsdjB4Yyk7CisJfSBlbHNlIGlmICgoZG1hX2lkeCAmIEZDX0RNQV8yKSA9PSBkbWFfaWR4KSB7CisJCWZjLT53cml0ZV9pYmlfcmVnKGZjLGRtYTJfMDEwLHYweDApOworCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxkbWEyXzAxNCx2MHg0KTsKKwkJZmMtPndyaXRlX2liaV9yZWcoZmMsZG1hMl8wMWMsdjB4Yyk7CisJfSBlbHNlIHsKKwkJZXJyKCJlaXRoZXIgRE1BMSBvciBETUEyIGNhbiBiZSBjb25maWd1cmVkIGF0IHRoZSB3aXRoaW4gb25lIGZsZXhjb3BfZG1hX2NvbmZpZyBjYWxsLiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxjdHJsXzIwOCx2KTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEpOworRVhQT1JUX1NZTUJPTChmbGV4Y29wX2RtYV9jb25maWcpOwogCi1pbnQgZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpCisvKiBzdGFydCB0aGUgRE1BIHRyYW5zZmVycywgYnV0IG5vdCB0aGUgRE1BIElSUXMgKi8KK2ludCBmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LAorCQlmbGV4Y29wX2RtYV9hZGRyX2luZGV4X3QgaW5kZXgsCisJCWludCBvbm9mZikKK3sKKwlmbGV4Y29wX2liaV92YWx1ZSB2MHgwLHYweGM7CisJZmxleGNvcF9pYmlfcmVnaXN0ZXIgcjB4MCxyMHhjOworCisJaWYgKChkbWFfaWR4ICYgRkNfRE1BXzEpID09IGRtYV9pZHgpIHsKKwkJcjB4MCA9IGRtYTFfMDAwOworCQlyMHhjID0gZG1hMV8wMGM7CisJfSBlbHNlIGlmICgoZG1hX2lkeCAmIEZDX0RNQV8yKSA9PSBkbWFfaWR4KSB7CisJCXIweDAgPSBkbWEyXzAxMDsKKwkJcjB4YyA9IGRtYTJfMDFjOworCX0gZWxzZSB7CisJCWVycigiZWl0aGVyIHRyYW5zZmVyIERNQTEgb3IgRE1BMiBjYW4gYmUgc3RhcnRlZCB3aXRoaW4gb25lIGZsZXhjb3BfZG1hX3hmZXJfY29udHJvbCBjYWxsLiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2MHgwID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxyMHgwKTsKKwl2MHhjID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxyMHhjKTsKKworCWRlYl9yZHVtcCgicmVnOiAlMDN4OiAleFxuIixyMHgwLHYweDAucmF3KTsKKwlkZWJfcmR1bXAoInJlZzogJTAzeDogJXhcbiIscjB4Yyx2MHhjLnJhdyk7CisKKwlpZiAoaW5kZXggJiBGQ19ETUFfU1VCQUREUl8wKQorCQl2MHgwLmRtYV8weDAuZG1hXzBzdGFydCA9IG9ub2ZmOworCisJaWYgKGluZGV4ICYgRkNfRE1BX1NVQkFERFJfMSkKKwkJdjB4Yy5kbWFfMHhjLmRtYV8xc3RhcnQgPSBvbm9mZjsKKworCWZjLT53cml0ZV9pYmlfcmVnKGZjLHIweDAsdjB4MCk7CisJZmMtPndyaXRlX2liaV9yZWcoZmMscjB4Yyx2MHhjKTsKKworCWRlYl9yZHVtcCgicmVnOiAlMDN4OiAleFxuIixyMHgwLHYweDAucmF3KTsKKwlkZWJfcmR1bXAoInJlZzogJTAzeDogJXhcbiIscjB4Yyx2MHhjLnJhdyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGZsZXhjb3BfZG1hX3hmZXJfY29udHJvbCk7CisKK3N0YXRpYyBpbnQgZmxleGNvcF9kbWFfcmVtYXAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LAorCQlpbnQgb25vZmYpCit7CisJZmxleGNvcF9pYmlfcmVnaXN0ZXIgciA9IChkbWFfaWR4ICYgRkNfRE1BXzEpID8gZG1hMV8wMGMgOiBkbWEyXzAxYzsKKwlmbGV4Y29wX2liaV92YWx1ZSB2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxyKTsKKwlkZWJfaW5mbygiJXNcbiIsX19GVU5DVElPTl9fKTsKKwl2LmRtYV8weGMucmVtYXBfZW5hYmxlID0gb25vZmY7CisJZmMtPndyaXRlX2liaV9yZWcoZmMscix2KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBubywKKwkJaW50IG9ub2ZmKQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLGN0cmxfMjA4KTsKIApAQCAtNjcsNzUgKzEzNSw2NCBAQAogfQogRVhQT1JUX1NZTUJPTChmbGV4Y29wX2RtYV9jb250cm9sX3NpemVfaXJxKTsKIAotaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfcGFja2V0X2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpCitpbnQgZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBubywKKwkJaW50IG9ub2ZmKQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLGN0cmxfMjA4KTsKIAogCWlmIChubyAmIEZDX0RNQV8xKQorCQl2LmN0cmxfMjA4LkRNQTFfVGltZXJfRW5hYmxlX3NpZyA9IG9ub2ZmOworCisJaWYgKG5vICYgRkNfRE1BXzIpCisJCXYuY3RybF8yMDguRE1BMl9UaW1lcl9FbmFibGVfc2lnID0gb25vZmY7CisKKwlmYy0+d3JpdGVfaWJpX3JlZyhmYyxjdHJsXzIwOCx2KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEpOworCisvKiAxIGN5Y2xlcyA9IDEuOTcgbXNlYyAqLworaW50IGZsZXhjb3BfZG1hX2NvbmZpZ190aW1lcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsCisJCXU4IGN5Y2xlcykKK3sKKwlmbGV4Y29wX2liaV9yZWdpc3RlciByID0gKGRtYV9pZHggJiBGQ19ETUFfMSkgPyBkbWExXzAwNCA6IGRtYTJfMDE0OworCWZsZXhjb3BfaWJpX3ZhbHVlIHYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHIpOworCisJZmxleGNvcF9kbWFfcmVtYXAoZmMsZG1hX2lkeCwwKTsKKworCWRlYl9pbmZvKCIlc1xuIixfX0ZVTkNUSU9OX18pOworCXYuZG1hXzB4NF93cml0ZS5kbWF0aW1lciA9IGN5Y2xlczsKKwlmYy0+d3JpdGVfaWJpX3JlZyhmYyxyLHYpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChmbGV4Y29wX2RtYV9jb25maWdfdGltZXIpOworCisvKiBwYWNrZXQgSVJRIGRvZXMgbm90IGV4aXN0IGluIEZDSUkgb3IgRkNJSWIgLSBhY2NvcmRpbmcgdG8gZGF0YSBib29rIGFuZCB0ZXN0cyAqLworaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfcGFja2V0X2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IG5vLAorCQlpbnQgb25vZmYpCit7CisJZmxleGNvcF9pYmlfdmFsdWUgdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsY3RybF8yMDgpOworCisJZGViX3JkdW1wKCJyZWc6ICUwM3g6ICV4XG4iLGN0cmxfMjA4LHYucmF3KTsKKwlpZiAobm8gJiBGQ19ETUFfMSkKIAkJdi5jdHJsXzIwOC5ETUExX1NpemVfSVJRX0VuYWJsZV9zaWcgPSBvbm9mZjsKIAogCWlmIChubyAmIEZDX0RNQV8yKQogCQl2LmN0cmxfMjA4LkRNQTJfU2l6ZV9JUlFfRW5hYmxlX3NpZyA9IG9ub2ZmOwogCiAJZmMtPndyaXRlX2liaV9yZWcoZmMsY3RybF8yMDgsdik7CisJZGViX3JkdW1wKCJyZWc6ICUwM3g6ICV4XG4iLGN0cmxfMjA4LHYucmF3KTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChmbGV4Y29wX2RtYV9jb250cm9sX3BhY2tldF9pcnEpOwogCi1pbnQgZmxleGNvcF9kbWFfY29uZmlnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hLCBmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsZmxleGNvcF9kbWFfYWRkcl9pbmRleF90IGluZGV4KQotewotCi0JZmxleGNvcF9pYmlfdmFsdWUgdjB4MCx2MHg0LHYweGM7Ci0JdjB4MC5yYXcgPSB2MHg0LnJhdyA9IHYweGMucmF3ID0gMDsKLQotCXYweDAuZG1hXzB4MC5kbWFfYWRkcmVzczAgICAgICAgID0gZG1hLT5kbWFfYWRkcjAgPj4gMjsKLQl2MHhjLmRtYV8weGMuZG1hX2FkZHJlc3MxICAgICAgICA9IGRtYS0+ZG1hX2FkZHIxID4+IDI7Ci0JdjB4NC5kbWFfMHg0X3dyaXRlLmRtYV9hZGRyX3NpemUgPSBkbWEtPnNpemUgLyA0OwotCi0JaWYgKGluZGV4ICYgRkNfRE1BX1NVQkFERFJfMCkKLQkJdjB4MC5kbWFfMHgwLmRtYV8wc3RhcnQgPSAxOwotCi0JaWYgKGluZGV4ICYgRkNfRE1BX1NVQkFERFJfMSkKLQkJdjB4Yy5kbWFfMHhjLmRtYV8xc3RhcnQgPSAxOwotCi0JaWYgKGRtYV9pZHggJiBGQ19ETUFfMSkgewotCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxkbWExXzAwMCx2MHgwKTsKLQkJZmMtPndyaXRlX2liaV9yZWcoZmMsZG1hMV8wMDQsdjB4NCk7Ci0JCWZjLT53cml0ZV9pYmlfcmVnKGZjLGRtYTFfMDBjLHYweGMpOwotCX0gZWxzZSB7IC8qIChkbWFfaWR4ICYgRkNfRE1BXzIpICovCi0JCWZjLT53cml0ZV9pYmlfcmVnKGZjLGRtYTJfMDEwLHYweDApOwotCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxkbWEyXzAxNCx2MHg0KTsKLQkJZmMtPndyaXRlX2liaV9yZWcoZmMsZG1hMl8wMWMsdjB4Yyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGZsZXhjb3BfZG1hX2NvbmZpZyk7Ci0KLXN0YXRpYyBpbnQgZmxleGNvcF9kbWFfcmVtYXAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCBpbnQgb25vZmYpCi17Ci0JZmxleGNvcF9pYmlfcmVnaXN0ZXIgciA9IChkbWFfaWR4ICYgRkNfRE1BXzEpID8gZG1hMV8wMGMgOiBkbWEyXzAxYzsKLQlmbGV4Y29wX2liaV92YWx1ZSB2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxyKTsKLQl2LmRtYV8weGMucmVtYXBfZW5hYmxlID0gb25vZmY7Ci0JZmMtPndyaXRlX2liaV9yZWcoZmMscix2KTsKLQlyZXR1cm4gMDsKLX0KLQotLyogMSBjeWNsZXMgPSAxLjk3IG1zZWMgKi8KLWludCBmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCB1OCBjeWNsZXMpCi17Ci0JZmxleGNvcF9pYmlfcmVnaXN0ZXIgciA9IChkbWFfaWR4ICYgRkNfRE1BXzEpID8gZG1hMV8wMDQgOiBkbWEyXzAxNDsKLQlmbGV4Y29wX2liaV92YWx1ZSB2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxyKTsKLQotCWZsZXhjb3BfZG1hX3JlbWFwKGZjLGRtYV9pZHgsMCk7Ci0KLQl2LmRtYV8weDRfd3JpdGUuZG1hdGltZXIgPSBjeWNsZXMgPj4gMTsKLQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxyLHYpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChmbGV4Y29wX2RtYV9jb25maWdfdGltZXIpOwotCi1pbnQgZmxleGNvcF9kbWFfY29uZmlnX3BhY2tldF9jb3VudChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsIHU4IHBhY2tldHMpCitpbnQgZmxleGNvcF9kbWFfY29uZmlnX3BhY2tldF9jb3VudChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsCisJCXU4IHBhY2tldHMpCiB7CiAJZmxleGNvcF9pYmlfcmVnaXN0ZXIgciA9IChkbWFfaWR4ICYgRkNfRE1BXzEpID8gZG1hMV8wMDQgOiBkbWEyXzAxNDsKIAlmbGV4Y29wX2liaV92YWx1ZSB2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYwppbmRleCAyYmFmNDNkLi43NWNmMjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaHctZmlsdGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWh3LWZpbHRlci5jCkBAIC0xMCw2ICsxMCw4IEBACiBzdGF0aWMgdm9pZCBmbGV4Y29wX3Jjdl9kYXRhX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewogCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCxSY3ZfRGF0YV9zaWcsb25vZmYpOworCisJZGViX3RzKCJyY3ZfZGF0YSBpcyBub3c6ICclcydcbiIsb25vZmYgPyAib24iIDogIm9mZiIpOwogfQogCiB2b2lkIGZsZXhjb3Bfc21jX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQpAQCAtMTUxLDcgKzE1Myw3IEBACiB7CiAJaW50IG1heF9waWRfZmlsdGVyID0gNiArIGZjLT5oYXNfMzJfaHdfcGlkX2ZpbHRlciozMjsKIAotCWZjLT5mZWVkY291bnQgKz0gb25vZmYgPyAxIDogLTE7CisJZmMtPmZlZWRjb3VudCArPSBvbm9mZiA/IDEgOiAtMTsgLyogdGhlIG51bWJlciBvZiBQSURzL0ZlZWQgY3VycmVudGx5IHJlcXVlc3RlZCAqLwogCWlmIChkdmJkbXhmZWVkLT5pbmRleCA+PSBtYXhfcGlkX2ZpbHRlcikKIAkJZmMtPmV4dHJhX2ZlZWRjb3VudCArPSBvbm9mZiA/IDEgOiAtMTsKIApAQCAtMTc4LDggKzE4MCwxNCBAQAogCS8qIGlmIGl0IHdhcyB0aGUgZmlyc3Qgb3IgbGFzdCBmZWVkIHJlcXVlc3QgY2hhbmdlIHRoZSBzdHJlYW0tc3RhdHVzICovCiAJaWYgKGZjLT5mZWVkY291bnQgPT0gb25vZmYpIHsKIAkJZmxleGNvcF9yY3ZfZGF0YV9jdHJsKGZjLG9ub2ZmKTsKLQkJaWYgKGZjLT5zdHJlYW1fY29udHJvbCkKKwkJaWYgKGZjLT5zdHJlYW1fY29udHJvbCkgLyogZGV2aWNlIHNwZWNpZmljIHN0cmVhbSBjb250cm9sICovCiAJCQlmYy0+c3RyZWFtX2NvbnRyb2woZmMsb25vZmYpOworCisJCS8qIGZlZWRpbmcgc3RvcHBlZCAtPiByZXNldCB0aGUgZmxleGNvcCBmaWx0ZXIqLworCQlpZiAob25vZmYgPT0gMCkgeworCQkJZmxleGNvcF9yZXNldF9ibG9ja18zMDAoZmMpOworCQkJZmxleGNvcF9od19maWx0ZXJfaW5pdChmYyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtbWlzYy5jCmluZGV4IDIzMDgyNTQuLjNhMDhkMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYwpAQCAtNjUsMyArNjUsMTUgQEAKIAkJCWZsZXhjb3BfZGV2aWNlX25hbWVzW2ZjLT5kZXZfdHlwZV0sZmxleGNvcF9idXNfbmFtZXNbZmMtPmJ1c190eXBlXSwKIAkJCWZsZXhjb3BfcmV2aXNpb25fbmFtZXNbZmMtPnJldl0sc3VmZml4KTsKIH0KKwordm9pZCBmbGV4Y29wX2R1bXBfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZywgaW50IG51bSkKK3sKKwlmbGV4Y29wX2liaV92YWx1ZSB2OworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxyZWcrNCppKTsKKwkJZGViX3JkdW1wKCIweCUwM3g6ICUwOHgsICIscmVnKzQqaSwgdi5yYXcpOworCX0KKwlkZWJfcmR1bXAoIlxuIik7Cit9CitFWFBPUlRfU1lNQk9MKGZsZXhjb3BfZHVtcF9yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCmluZGV4IGVkNzE3YzAuLjJmNzZlYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKQEAgLTEzLDYgKzEzLDEwIEBACiBtb2R1bGVfcGFyYW0oZW5hYmxlX3BpZF9maWx0ZXJpbmcsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9waWRfZmlsdGVyaW5nLCAiZW5hYmxlIGhhcmR3YXJlIHBpZCBmaWx0ZXJpbmc6IHN1cHBvcnRlZCB2YWx1ZXM6IDAgKGZ1bGx0cyksIDEiKTsKIAorc3RhdGljIGludCBpcnFfY2hrX2ludHY7Cittb2R1bGVfcGFyYW0oaXJxX2Noa19pbnR2LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpcnFfY2hrX2ludHYsICJzZXQgdGhlIGludGVydmFsIGZvciBJUlEgd2F0Y2hkb2cgKGN1cnJlbnRseSBqdXN0IGRlYnVnZ2luZykuIik7CisKICNpZmRlZiBDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9ERUJVRwogI2RlZmluZSBkcHJpbnRrKGxldmVsLGFyZ3MuLi4pIFwKIAlkbyB7IGlmICgoZGVidWcgJiBsZXZlbCkpIHByaW50ayhhcmdzKTsgfSB3aGlsZSAoMCkKQEAgLTI2LDYgKzMwLDcgQEAKICNkZWZpbmUgZGViX3JlZyhhcmdzLi4uKSAgIGRwcmludGsoMHgwMixhcmdzKQogI2RlZmluZSBkZWJfdHMoYXJncy4uLikgICAgZHByaW50aygweDA0LGFyZ3MpCiAjZGVmaW5lIGRlYl9pcnEoYXJncy4uLikgICBkcHJpbnRrKDB4MDgsYXJncykKKyNkZWZpbmUgZGViX2NoayhhcmdzLi4uKSAgIGRwcmludGsoMHgxMCxhcmdzKQogCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKQEAgLTU2LDYgKzYxLDEwIEBACiAKIAlzcGlubG9ja190IGlycV9sb2NrOwogCisJdW5zaWduZWQgbG9uZyBsYXN0X2lycTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnFfY2hlY2tfd29yazsKKwogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmNfZGV2OwogfTsKIApAQCAtODgsMTggKzk3LDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGNpX2lycV9jaGVja193b3JrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZsZXhjb3BfcGNpICpmY19wY2kgPSBkYXRhOworCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBmY19wY2ktPmZjX2RldjsKKworCWZsZXhjb3BfaWJpX3ZhbHVlIHYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHNyYW1fZGVzdF9yZWdfNzE0KTsKKworCWZsZXhjb3BfZHVtcF9yZWcoZmNfcGNpLT5mY19kZXYsZG1hMV8wMDAsNCk7CisKKwlpZiAodi5zcmFtX2Rlc3RfcmVnXzcxNC5uZXRfb3ZmbG93X2Vycm9yKQorCQlkZWJfY2hrKCJzcmFtIG5ldF9vdmZsb3dfZXJyb3JcbiIpOworCWlmICh2LnNyYW1fZGVzdF9yZWdfNzE0Lm1lZGlhX292Zmxvd19lcnJvcikKKwkJZGViX2Noaygic3JhbSBtZWRpYV9vdmZsb3dfZXJyb3JcbiIpOworCWlmICh2LnNyYW1fZGVzdF9yZWdfNzE0LmNhaV9vdmZsb3dfZXJyb3IpCisJCWRlYl9jaGsoInNyYW0gY2FpX292Zmxvd19lcnJvclxuIik7CisJaWYgKHYuc3JhbV9kZXN0X3JlZ183MTQuY2FpX292Zmxvd19lcnJvcikKKwkJZGViX2Noaygic3JhbSBjYWlfb3ZmbG93X2Vycm9yXG4iKTsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZmNfcGNpLT5pcnFfY2hlY2tfd29yaywKKwkJCW1zZWNzX3RvX2ppZmZpZXMoaXJxX2Noa19pbnR2IDwgMTAwID8gMTAwIDogaXJxX2Noa19pbnR2KSk7Cit9CisKIC8qIFdoZW4gUElEIGZpbHRlcmluZyBpcyB0dXJuZWQgb24sIHdlIHVzZSB0aGUgdGltZXIgSVJRLCBiZWNhdXNlIHNtYWxsIGFtb3VudHMKICAqIG9mIGRhdGEgbmVlZCB0byBiZSBwYXNzZWQgdG8gdGhlIHVzZXIgc3BhY2UgaW5zdGFudGx5IGFzIHdlbGwuIFdoZW4gUElECiAgKiBmaWx0ZXJpbmcgaXMgdHVybmVkIG9mZiwgd2UgdXNlIHRoZSBwYWdlLWNoYW5nZS1JUlEgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBmbGV4Y29wX3BjaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpcnFyZXR1cm5fdCBmbGV4Y29wX3BjaV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgZmxleGNvcF9wY2kgKmZjX3BjaSA9IGRldl9pZDsKIAlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjID0gZmNfcGNpLT5mY19kZXY7Ci0JZmxleGNvcF9pYmlfdmFsdWUgdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsaXJxXzIwYyk7CisJZmxleGNvcF9pYmlfdmFsdWUgdjsKIAlpcnFyZXR1cm5fdCByZXQgPSBJUlFfSEFORExFRDsKIAogCXNwaW5fbG9ja19pcnEoJmZjX3BjaS0+aXJxX2xvY2spOwogCisJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsaXJxXzIwYyk7CisKKyAgIC8qIGVycm9ycyAqLworCWlmICh2LmlycV8yMGMuRGF0YV9yZWNlaXZlcl9lcnJvcikKKwkJZGViX2NoaygiZGF0YSByZWNlaXZlciBlcnJvclxuIik7CisJaWYgKHYuaXJxXzIwYy5Db250aW51aXR5X2Vycm9yX2ZsYWcpCisJCWRlYl9jaGsoIkNvbnR1bnVpdHkgZXJyb3IgZmxhZyBpcyBzZXRcbiIpOworCWlmICh2LmlycV8yMGMuTExDX1NOQVBfRkxBR19zZXQpCisJCWRlYl9jaGsoIkxMQ19TTkFQX0ZMQUdfc2V0IGlzIHNldFxuIik7CisJaWYgKHYuaXJxXzIwYy5UcmFuc3BvcnRfRXJyb3IpCisJCWRlYl9jaGsoIlRyYW5zcG9ydCBlcnJvclxuIik7CisKKwlpZiAoKGZjX3BjaS0+Y291bnQgJSAxMDAwKSA9PSAwKQorCQlkZWJfY2hrKCIlZCB2YWxpZCBpcnEgdG9vayBwbGFjZSBzbyBmYXJcbiIsZmNfcGNpLT5jb3VudCk7CisKIAlpZiAodi5pcnFfMjBjLkRNQTFfSVJRX1N0YXR1cyA9PSAxKSB7CiAJCWlmIChmY19wY2ktPmFjdGl2ZV9kbWExX2FkZHIgPT0gMCkKIAkJCWZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhmY19wY2ktPmZjX2RldixmY19wY2ktPmRtYVswXS5jcHVfYWRkcjAsZmNfcGNpLT5kbWFbMF0uc2l6ZSAvIDE4OCk7CkBAIC0xMTUsOCArMTYxLDkgQEAKIAkJCWZjLT5yZWFkX2liaV9yZWcoZmMsZG1hMV8wMDgpLmRtYV8weDguZG1hX2N1cl9hZGRyIDw8IDI7CiAJCXUzMiBjdXJfcG9zID0gY3VyX2FkZHIgLSBmY19wY2ktPmRtYVswXS5kbWFfYWRkcjA7CiAKLQkJZGViX2lycSgiaXJxOiAlMDh4IGN1cl9hZGRyOiAlMDh4OiBjdXJfcG9zOiAlMDh4LCBsYXN0X2N1cl9wb3M6ICUwOHggIiwKLQkJCQl2LnJhdyxjdXJfYWRkcixjdXJfcG9zLGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOworCQlkZWJfaXJxKCIldSBpcnE6ICUwOHggY3VyX2FkZHI6ICUwOHg6IGN1cl9wb3M6ICUwOHgsIGxhc3RfY3VyX3BvczogJTA4eCAiLAorCQkJCWppZmZpZXNfdG9fdXNlY3MoamlmZmllcyAtIGZjX3BjaS0+bGFzdF9pcnEpLHYucmF3LGN1cl9hZGRyLGN1cl9wb3MsZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CisJCWZjX3BjaS0+bGFzdF9pcnEgPSBqaWZmaWVzOwogCiAJCS8qIGJ1ZmZlciBlbmQgd2FzIHJlYWNoZWQsIHJlc3RhcnRlZCBmcm9tIHRoZSBiZWdpbm5pbmcKIAkJICogcGFzcyB0aGUgZGF0YSBmcm9tIGxhc3RfY3VyX3BvcyB0byB0aGUgYnVmZmVyIGVuZCB0byB0aGUgZGVtdXgKQEAgLTEyNyw3ICsxNzQsNiBAQAogCQkJCQlmY19wY2ktPmRtYVswXS5jcHVfYWRkcjAgKyBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zLAogCQkJCQkoZmNfcGNpLT5kbWFbMF0uc2l6ZSoyKSAtIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOwogCQkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcyA9IDA7Ci0JCQlmY19wY2ktPmNvdW50ID0gMDsKIAkJfQogCiAJCWlmIChjdXJfcG9zID4gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcykgewpAQCAtMTM5LDE2ICsxODUsMTQgQEAKIAkJZGViX2lycSgiXG4iKTsKIAogCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zID0gY3VyX3BvczsKLQl9IGVsc2UKKwkJZmNfcGNpLT5jb3VudCsrOworCX0gZWxzZSB7CisJCWRlYl9pcnEoImlzciBmb3IgZmxleGNvcCBjYWxsZWQsIGFwcGFyZW50bHkgd2l0aG91dCByZWFzb24gKCUwOHgpXG4iLHYucmF3KTsKIAkJcmV0ID0gSVJRX05PTkU7CisJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZmY19wY2ktPmlycV9sb2NrKTsKIAotLyogcGFja2V0IGNvdW50IHdvdWxkIGJlIGlkZWFsIGZvciBodyBmaWx0ZXJpbmcsIGJ1dCBpdCBpc24ndCB3b3JraW5nLiBFaXRoZXIKLSAqIHRoZSBkYXRhIGJvb2sgaXMgd3JvbmcsIG9yIEknbSB1bmFibGUgdG8gcmVhZCBpdCBjb3JyZWN0bHkgKi8KLQotLyoJaWYgKHYuaXJxXzIwYy5ETUExX1NpemVfSVJRX1N0YXR1cyA9PSAxKSB7IHBhY2tldCBjb3VudGVyICovCi0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTYsMzAgKzIwMCwzNSBAQAogewogCXN0cnVjdCBmbGV4Y29wX3BjaSAqZmNfcGNpID0gZmMtPmJ1c19zcGVjaWZpYzsKIAlpZiAob25vZmYpIHsKLQkJZmxleGNvcF9kbWFfY29uZmlnKGZjLCZmY19wY2ktPmRtYVswXSxGQ19ETUFfMSxGQ19ETUFfU1VCQUREUl8wIHwgRkNfRE1BX1NVQkFERFJfMSk7Ci0JCWZsZXhjb3BfZG1hX2NvbmZpZyhmYywmZmNfcGNpLT5kbWFbMV0sRkNfRE1BXzIsRkNfRE1BX1NVQkFERFJfMCB8IEZDX0RNQV9TVUJBRERSXzEpOwotCQlmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoZmMsRkNfRE1BXzEsMSk7CisJCWZsZXhjb3BfZG1hX2NvbmZpZyhmYywmZmNfcGNpLT5kbWFbMF0sRkNfRE1BXzEpOworCQlmbGV4Y29wX2RtYV9jb25maWcoZmMsJmZjX3BjaS0+ZG1hWzFdLEZDX0RNQV8yKTsKIAotCQlpZiAoZmNfcGNpLT5mY19kZXYtPnBpZF9maWx0ZXJpbmcpIHsKLQkJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MgPSAwOwotCQkJZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEoZmMsRkNfRE1BXzEsMSk7Ci0JCX0gZWxzZSB7Ci0JCQlmY19wY2ktPmFjdGl2ZV9kbWExX2FkZHIgPSAwOwotCQkJZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShmYyxGQ19ETUFfMSwxKTsKLQkJfQorCQlmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoZmMsRkNfRE1BXzEsMCk7CiAKLS8qCQlmbGV4Y29wX2RtYV9jb25maWdfcGFja2V0X2NvdW50KGZjLEZDX0RNQV8xLDB4YzApOwotCQlmbGV4Y29wX2RtYV9jb250cm9sX3BhY2tldF9pcnEoZmMsRkNfRE1BXzEsMSk7ICovCisJCWZsZXhjb3BfZG1hX3hmZXJfY29udHJvbChmYyxGQ19ETUFfMSxGQ19ETUFfU1VCQUREUl8wIHwgRkNfRE1BX1NVQkFERFJfMSwxKTsKKwkJZGViX2lycSgiRE1BIHhmZXIgZW5hYmxlZFxuIik7CiAKLQkJZGViX2lycSgiaXJxcyBlbmFibGVkXG4iKTsKKwkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcyA9IDA7CisJCWZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKGZjLEZDX0RNQV8xLDEpOworCQlkZWJfaXJxKCJJUlEgZW5hYmxlZFxuIik7CisKKy8vCQlmY19wY2ktPmFjdGl2ZV9kbWExX2FkZHIgPSAwOworLy8JCWZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoZmMsRkNfRE1BXzEsMSk7CisKKwkJaWYgKGlycV9jaGtfaW50diA+IDApCisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmZjX3BjaS0+aXJxX2NoZWNrX3dvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoaXJxX2Noa19pbnR2IDwgMTAwID8gMTAwIDogaXJxX2Noa19pbnR2KSk7CiAJfSBlbHNlIHsKLQkJaWYgKGZjX3BjaS0+ZmNfZGV2LT5waWRfZmlsdGVyaW5nKQotCQkJZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEoZmMsRkNfRE1BXzEsMCk7Ci0JCWVsc2UKLQkJCWZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoZmMsRkNfRE1BXzEsMCk7CisJCWlmIChpcnFfY2hrX2ludHYgPiAwKQorCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmZmNfcGNpLT5pcnFfY2hlY2tfd29yayk7CiAKLS8vCQlmbGV4Y29wX2RtYV9jb250cm9sX3BhY2tldF9pcnEoZmMsRkNfRE1BXzEsMCk7Ci0JCWRlYl9pcnEoImlycXMgZGlzYWJsZWRcbiIpOworCQlmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShmYyxGQ19ETUFfMSwwKTsKKwkJZGViX2lycSgiSVJRIGRpc2FibGVkXG4iKTsKKworLy8JCWZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoZmMsRkNfRE1BXzEsMCk7CisKKwkJZmxleGNvcF9kbWFfeGZlcl9jb250cm9sKGZjLEZDX0RNQV8xLEZDX0RNQV9TVUJBRERSXzAgfCBGQ19ETUFfU1VCQUREUl8xLDApOworCQlkZWJfaXJxKCJETUEgeGZlciBkaXNhYmxlZFxuIik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xOTgsNiArMjQ3LDcgQEAKIAlmbGV4Y29wX3NyYW1fc2V0X2Rlc3QoZmNfcGNpLT5mY19kZXYsRkNfU1JBTV9ERVNUX0NBTyAgIHwgRkNfU1JBTV9ERVNUX0NBSSwgRkNfU1JBTV9ERVNUX1RBUkdFVF9ETUEyKTsKIAogCWZjX3BjaS0+aW5pdF9zdGF0ZSB8PSBGQ19QQ0lfRE1BX0lOSVQ7CisKIAlnb3RvIHN1Y2Nlc3M7CiBkbWExX2ZyZWU6CiAJZmxleGNvcF9kbWFfZnJlZSgmZmNfcGNpLT5kbWFbMF0pOwpAQCAtMjQ0LDcgKzI5NCw3IEBACiAKIAlwY2lfc2V0X2RydmRhdGEoZmNfcGNpLT5wZGV2LCBmY19wY2kpOwogCi0JaWYgKChyZXQgPSByZXF1ZXN0X2lycShmY19wY2ktPnBkZXYtPmlycSwgZmxleGNvcF9wY2lfaXJxLAorCWlmICgocmV0ID0gcmVxdWVzdF9pcnEoZmNfcGNpLT5wZGV2LT5pcnEsIGZsZXhjb3BfcGNpX2lzciwKIAkJCQkJU0FfU0hJUlEsIERSSVZFUl9OQU1FLCBmY19wY2kpKSAhPSAwKQogCQlnb3RvIGVycl9wY2lfaW91bm1hcDsKIApAQCAtMzI0LDYgKzM3NCw4IEBACiAJaWYgKChyZXQgPSBmbGV4Y29wX3BjaV9kbWFfaW5pdChmY19wY2kpKSAhPSAwKQogCQlnb3RvIGVycl9mY19leGl0OwogCisJSU5JVF9XT1JLKCZmY19wY2ktPmlycV9jaGVja193b3JrLCBmbGV4Y29wX3BjaV9pcnFfY2hlY2tfd29yaywgZmNfcGNpKTsKKwogCWdvdG8gc3VjY2VzczsKIGVycl9mY19leGl0OgogCWZsZXhjb3BfZGV2aWNlX2V4aXQoZmMpOwpAQCAtMzUwLDE3ICs0MDIsMTcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZsZXhjb3BfcGNpX3RibFtdID0gewogCXsgUENJX0RFVklDRSgweDEzZDAsIDB4MjEwMykgfSwKLS8qCXsgUENJX0RFVklDRSgweDEzZDAsIDB4MjIwMCkgfSwgUENJIEZsZXhDb3BJSUkgPyAqLworLyoJeyBQQ0lfREVWSUNFKDB4MTNkMCwgMHgyMjAwKSB9LCA/ICovCiAJeyB9LAogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGZsZXhjb3BfcGNpX3RibCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBmbGV4Y29wX3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiVGVjaG5pc2F0L0IyQzIgRmxleENvcCBJSS9JSWIvSUlJIFBDSSIsCisJLm5hbWUgICAgID0gImIyYzJfZmxleGNvcF9wY2kiLAogCS5pZF90YWJsZSA9IGZsZXhjb3BfcGNpX3RibCwKLQkucHJvYmUgPSBmbGV4Y29wX3BjaV9wcm9iZSwKLQkucmVtb3ZlID0gZmxleGNvcF9wY2lfcmVtb3ZlLAorCS5wcm9iZSAgICA9IGZsZXhjb3BfcGNpX3Byb2JlLAorCS5yZW1vdmUgICA9IGZsZXhjb3BfcGNpX3JlbW92ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGZsZXhjb3BfcGNpX21vZHVsZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmgKaW5kZXggNzViNTBmMi4uNGFlMWViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaApAQCAtMzYsNTU1ICszNiwyMSBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKmZsZXhjb3BfZGV2aWNlX25hbWVzW107CiAKIC8qIEZsZXhDb3AgSUJJIFJlZ2lzdGVycyAqLworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCSNpbmNsdWRlICJmbGV4Y29wX2liaV92YWx1ZV9sZS5oIgorI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJI2luY2x1ZGUgImZsZXhjb3BfaWJpX3ZhbHVlX2JlLmgiCisjZWxzZQorCSNlcnJvciBubyBlbmRpYW4gZGVmaW5lZAorI2VuZGlmCiAKLS8qIGZsZXhjb3BfaWJpX3JlZyAtIGEgaHVnZSB1bmlvbiByZXByZXNlbnRpbmcgdGhlIHJlZ2lzdGVyIHN0cnVjdHVyZSAqLwotdHlwZWRlZiB1bmlvbiB7Ci0JdTMyIHJhdzsKLQotLyogRE1BIDB4MDAwIHRvIDB4MDFjCi0gKiBETUExIDB4MDAwIHRvIDB4MDBjCi0gKiBETUEyIDB4MDEwIHRvIDB4MDFjCi0gKi8KLQlzdHJ1Y3QgewotCQl1MzIgZG1hXzBzdGFydCAgICAgICAgOiAxOyAgIC8qIHNldDogZGF0YSB3aWxsIGJlIGRlbGl2ZXJlZCB0byBkbWExX2FkZHJlc3MwICovCi0gICAgICAgIHUzMiBkbWFfME5vX3VwZGF0ZSAgICA6IDE7ICAgLyogc2V0OiBkbWExX2N1cl9hZGRyZXNzIHdpbGwgYmUgdXBkYXRlZCwgdW5zZXQ6IG5vIHVwZGF0ZSAqLwotICAgICAgICB1MzIgZG1hX2FkZHJlc3MwICAgICAgOjMwOyAgIC8qIHBoeXNpY2FsL3ZpcnR1YWwgaG9zdCBtZW1vcnkgYWRkcmVzczAgRE1BICovCi0JfSBkbWFfMHgwOwotCi0Jc3RydWN0IHsKLQkJdTMyIERNQV9tYXhwYWNrZXRzICAgIDogODsgICAvKiAocmVtYXBwZWQpIFBDSSBETUExIFBhY2tldCBDb3VudCBJbnRlcnJ1cHQuIFRoaXMgdmFyaWFibGUKLQkJCQkJCQkJCQlpcyBhYmxlIHRvIGJlIHJlYWQgYW5kIHdyaXR0ZW4gd2hpbGUgYml0KDEpIG9mIHJlZ2lzdGVyCi0JCQkJCQkJCQkJMHgwMGMgKHJlbWFwX2VuYWJsZSkgaXMgc2V0LiBUaGlzIHZhcmlhYmxlIHJlcHJlc2VudHMKLQkJCQkJCQkJCQl0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIHRoZSBQQ0kKLQkJCQkJCQkJCQlob3N0IHVzaW5nIFBDSSBETUExIGJlZm9yZSBhbiBpbnRlcnJ1cHQgdG8gdGhlIFBDSSBpcwotCQkJCQkJCQkJCWFzc2VydGVkLiBUaGlzIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIGVuYWJsZWQgdXNpbmcgYml0KDIwKQotCQkJCQkJCQkJCW9mIHJlZ2lzdGVyIDB4MjA4LiBOPTAgZGlzYWJsZXMgdGhlIElSUS4gKi8KLQkJdTMyIGRtYV9hZGRyX3NpemUgICAgIDoyNDsgICAvKiBzaXplIG9mIG1lbW9yeSBidWZmZXIgaW4gRFdPUkRzIChieXRlc2l6ZSAvIDQpIGZvciBETUEgKi8KLQl9IGRtYV8weDRfcmVtYXA7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgZG1hMXRpbWVyICAgICAgICAgOiA3OyAgIC8qIHJlYWRpbmcgUENJIERNQTEgdGltZXIgLi4uIHdoZW4gcmVtYXBfZW5hYmxlIGlzIDAgKi8KLQkJdTMyIHVudXNlZCAgICAgICAgICAgIDogMTsKLQkJdTMyIGRtYV9hZGRyX3NpemUgICAgIDoyNDsKLQl9IGRtYV8weDRfcmVhZDsKLQotCXN0cnVjdCB7Ci0JCXUzMiB1bnVzZWQgICAgICAgICAgICA6IDE7Ci0JCXUzMiBkbWF0aW1lciAgICAgICAgICA6IDc7ICAgLyogd3JpdGluZyBQQ0kgRE1BMSB0aW1lciAuLi4gd2hlbiByZW1hcF9lbmFibGUgaXMgMCAqLwotCQl1MzIgZG1hX2FkZHJfc2l6ZSAgICAgOjI0OwotCX0gZG1hXzB4NF93cml0ZTsKLQotCXN0cnVjdCB7Ci0JCXUzMiB1bnVzZWQgICAgICAgICAgICA6IDI7Ci0JCXUzMiBkbWFfY3VyX2FkZHIgICAgICA6MzA7ICAgLyogY3VycmVudCBwaHlzaWNhbCBob3N0IG1lbW9yeSBhZGRyZXNzIHBvaW50ZXIgZm9yIERNQSAqLwotCX0gZG1hXzB4ODsKLQotCXN0cnVjdCB7Ci0JCXUzMiBkbWFfMXN0YXJ0ICAgICAgICA6IDE7ICAgLyogc2V0OiBkYXRhIHdpbGwgYmUgZGVsaXZlcmVkIHRvIGRtYV9hZGRyZXNzMSwgd2hlbiBkbWFfYWRkcmVzczAgaXMgZnVsbCAqLwotCQl1MzIgcmVtYXBfZW5hYmxlICAgICAgOiAxOyAgIC8qIHJlbWFwIGVuYWJsZSBmb3IgMHgweDQoNzowKSAqLwotCQl1MzIgZG1hX2FkZHJlc3MxICAgICAgOjMwOyAgIC8qIFBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzcyAxIG9uIERNQSAqLwotCX0gZG1hXzB4YzsKLQotLyogVHdvLXdpcmUgU2VyaWFsIE1hc3RlciBhbmQgQ2xvY2sgMHgxMDAtMHgxMTAgKi8KLQlzdHJ1Y3QgewotLy8JCXUzMiBzbGF2ZV90cmFuc21pdHRlciA6IDE7ICAgLyogPz8/Ki8KLQkJdTMyIGNoaXBhZGRyICAgICAgICAgIDogNzsgICAvKiB0d28tbGluZSBzZXJpYWwgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IHNsYXZlICovCi0JCXUzMiByZXNlcnZlZDEgICAgICAgICA6IDE7Ci0JCXUzMiBiYXNlYWRkciAgICAgICAgICA6IDg7ICAgLyogYWRkcmVzcyBvZiB0aGUgbG9jYXRpb24gb2YgdGhlIHJlYWQvd3JpdGUgb3BlcmF0aW9uICovCi0JCXUzMiBkYXRhMV9yZWcgICAgICAgICA6IDg7ICAgLyogZmlyc3QgYnl0ZSBpbiB0d28tbGluZSBzZXJpYWwgcmVhZC93cml0ZSBvcGVyYXRpb24gKi8KLQkJdTMyIHdvcmtpbmdfc3RhcnQgICAgIDogMTsgIC8qIHdoZW4gZG9pbmcgYSB3cml0ZSBvcGVyYXRpb24gdGhpcyBpbmRpY2F0b3IgaXMgMCB3aGVuIHJlYWR5Ci0JCQkJCQkJCQkgICogc2V0IHRvIDEgd2hlbiBkb2luZyBhIHdyaXRlIG9wZXJhdGlvbiAqLwotCQl1MzIgdHdvV1NfcncgICAgICAgICAgOiAxOyAgIC8qIHJlYWQvd3JpdGUgaW5kaWNhdG9yICgxID0gcmVhZCwgMCB3cml0ZSkgKi8KLQkJdTMyIHRvdGFsX2J5dGVzICAgICAgIDogMjsgICAvKiBudW1iZXIgb2YgZGF0YSBieXRlcyBpbiBlYWNoIHR3by1saW5lIHNlcmlhbCB0cmFuc2FjdGlvbiAoMCA9IDEgYnl0ZSwgMTEgPSA0Ynl0ZSkqLwotCQl1MzIgdHdvV1NfcG9ydF9yZWcgICAgOiAyOyAgIC8qIHBvcnQgc2VsZWN0aW9uOiAwMSAtIEZyb250IEVuZC9EZW1vZCwgMTAgLSBFRVBST00sIDExIC0gVHVuZXIgKi8KLQkJdTMyIG5vX2Jhc2VfYWRkcl9hY2tfZXJyb3IgOiAxOyAgIC8qIHdyaXRpbmc6IHdyaXRlLXJlcTogZnJhbWUgaXMgcHJvZHVjZWQgdy9vIGJhc2VhZGRyLCByZWFkLXJlcTogcmVhZC1jeWNsZXMgdy9vCi0JCQkJCQkJCQkgICogcHJlY2VkaW5nIGFkZHJlc3MgYXNzaWdubWVudCB3cml0ZSBmcmFtZQotCQkJCQkJCQkJICAqIEFDS19FUlJPUiA9IDEgd2hlbiBubyBBQ0sgZnJvbSBzbGF2ZSBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLwotCQl1MzIgc3RfZG9uZSAgICAgICAgICAgOiAxOyAgIC8qIGluZGljYXRvciBmb3IgdHJhbnNhY3Rpb24gaXMgZG9uZSAqLwotCX0gdHdfc21fY18xMDA7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgZGF0YTJfcmVnICAgICAgICAgOiA4OyAgIC8qIDJuZCBkYXRhIGJ5dGUgKi8KLQkJdTMyIGRhdGEzX3JlZyAgICAgICAgIDogODsgICAvKiAzcmQgZGF0YSBieXRlICovCi0JCXUzMiBkYXRhNF9yZWcgICAgICAgICA6IDg7ICAgLyogNHRoIGRhdGEgYnl0ZSAqLwotCQl1MzIgZXhsaWNpdF9zdG9wcyAgICAgOiAxOyAgIC8qIHdoZW4gc2V0LCB0cmFuc2FjdGlvbnMgYXJlIHByb2R1Y2VkIHcvbyB0cmFpbGluZyBTVE9QIGZsYWcsIHRoZW4gc2VuZCBpc29sYXRlZCBTVE9QIGZsYWdzICovCi0JCXUzMiBmb3JjZV9zdG9wICAgICAgICA6IDE7ICAgLyogaXNvbGF0ZWQgc3RvcCBmbGFnICovCi0JCXUzMiB1bnVzZWQgICAgICAgICAgICA6IDY7Ci0JfSB0d19zbV9jXzEwNDsKLQotLyogQ2xvY2suIFRoZSByZWdpc3RlciBhbGxvd3MgdGhlIEZDSUlJIHRvIGNvbnZlcnQgYW4gaW5jb21pbmcgTWFzdGVyIGNsb2NrCi0gKiAoTUNMSykgc2lnbmFsIGludG8gYSBsb3dlciBmcmVxdWVuY3kgY2xvY2sgdGhyb3VnaCB0aGUgdXNlIG9mIGEgTG93Q291bnRlcgotICogKFRMTykgYW5kIGEgSGlnaC0gQ291bnRlciAoVEhJKS4gVGhlIHRpbWUgY291bnRzIGZvciBUSEkgYW5kIFRMTyBhcmUKLSAqIG1lYXN1cmVkIGluIE1DTEs7IGVhY2ggY291bnQgcmVwcmVzZW50cyA0IE1DTEsgaW5wdXQgY2xvY2sgY3ljbGVzLgotICoKLSAqIFRoZSBkZWZhdWx0IG91dHB1dCBmb3IgcG9ydCAjMSBpcyBzZXQgZm9yIEZyb250IEVuZCBEZW1vZCBjb21tdW5pY2F0aW9uLiAoMHgxMDgpCi0gKiBUaGUgZGVmYXVsdCBvdXRwdXQgZm9yIHBvcnQgIzIgaXMgc2V0IGZvciBFRVBST00gY29tbXVuaWNhdGlvbi4gKDB4MTBjKQotICogVGhlIGRlZmF1bHQgb3V0cHV0IGZvciBwb3J0ICMzIGlzIHNldCBmb3IgVHVuZXIgY29tbXVuaWNhdGlvbi4gKDB4MTEwKQotICovCi0Jc3RydWN0IHsKLQkJdTMyIHRoaTEgICAgICAgICAgICAgIDogNjsgICAvKiBUaGkgZm9yIHBvcnQgIzEgKGRlZjogMTAwMTEwYjsgMzgpICovCi0JCXUzMiByZXNlcnZlZDEgICAgICAgICA6IDI7Ci0JCXUzMiB0bG8xICAgICAgICAgICAgICA6IDU7ICAgLyogVGxvIGZvciBwb3J0ICMxIChkZWY6IDExMTAwYjsgMjgpICovCi0JCXUzMiByZXNlcnZlZDIgICAgICAgICA6MTk7Ci0JfSB0d19zbV9jXzEwODsKLQotCXN0cnVjdCB7Ci0JCXUzMiB0aGkxICAgICAgICAgICAgICA6IDY7ICAgLyogVGhpIGZvciBwb3J0ICMyIChkZWY6IDExMTAwMWI7IDU3KSAqLwotCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgOiAyOwotCQl1MzIgdGxvMSAgICAgICAgICAgICAgOiA1OyAgIC8qIFRsbyBmb3IgcG9ydCAjMiAoZGVmOiAxMTEwMGI7IDI4KSAqLwotCQl1MzIgcmVzZXJ2ZWQyICAgICAgICAgOjE5OwotCX0gdHdfc21fY18xMGM7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgdGhpMSAgICAgICAgICAgICAgOiA2OyAgIC8qIFRoaSBmb3IgcG9ydCAjMyAoZGVmOiAxMTEwMDFiOyA1NykgKi8KLQkJdTMyIHJlc2VydmVkMSAgICAgICAgIDogMjsKLQkJdTMyIHRsbzEgICAgICAgICAgICAgIDogNTsgICAvKiBUbG8gZm9yIHBvcnQgIzMgKGRlZjogMTExMDBiOyAyOCkgKi8KLQkJdTMyIHJlc2VydmVkMiAgICAgICAgIDoxOTsKLQl9IHR3X3NtX2NfMTEwOwotCi0vKiBMTkIgU3dpdGNoIEZyZXF1ZW5jeSAweDIwMAotICogQ2xvY2sgdGhhdCBjcmVhdGVzIHRoZSBMTkIgc3dpdGNoIHRvbmUuIFRoZSBkZWZhdWx0IGlzIHNldCB0byBoYXZlIGEgZml4ZWQKLSAqIGxvdyBvdXRwdXQgKG5vdCBvc2NpbGxhdGluZykgdG8gdGhlIExOQl9DVEwgbGluZS4KLSAqLwotCXN0cnVjdCB7Ci0JCXUzMiBMTkJfQ1RMSGlnaENvdW50X3NpZyA6MTU7IC8qIEl0IGlzIHRoZSBudW1iZXIgb2YgcHJlLXNjYWxlZCBjbG9jayBjeWNsZXMgdGhhdCB3aWxsIGJlIGxvdy4gKi8KLQkJdTMyIExOQl9DVExMb3dDb3VudF9zaWcgIDoxNTsgLyogRm9yIGV4YW1wbGUsIHRvIG9idGFpbiBhIDIyS0h6IG91dHB1dCBnaXZlbiBhIDQ1IE1oeiBNYXN0ZXIKLQkJCQkJCQkJCQlDbG9jayBzaWduYWwgKE1DTEspLCBzZXQgUHJlU2NhbGFyPTAxIGFuZCBMb3dDb3VudGVyIHZhbHVlIHRvIDB4MWZmLiAqLwotCQl1MzIgTE5CX0NUTFByZXNjYWxlcl9zaWcgOiAyOyAvKiBwcmUtc2NhbGVyIGRpdmlkZXMgTUNMSzogMDAgKG5vIGRpdmlzaW9uKSwgMDEgYnkgMiwgMTAgYnkgNCwgMTEgYnkgMTIgKi8KLQl9IGxuYl9zd2l0Y2hfZnJlcV8yMDA7Ci0KLS8qIEFDUEksIFBlcmlwaGVyYWwgUmVzZXQsIExOQiBQb2xhcml0eQotICogQUNQSSBwb3dlciBjb25zZXJ2YXRpb24gbW9kZSwgTE5CIHBvbGFyaXR5IHNlbGVjdGlvbiAobG93IG9yIGhpZ2ggdm9sdGFnZSksCi0gKiBhbmQgcGVyaXBoZXJhbCByZXNldC4KLSAqLwotCXN0cnVjdCB7Ci0JCXUzMiBBQ1BJMV9zaWcgICAgICAgICA6IDE7ICAgLyogdHVybiBvZiB0aGUgcG93ZXIgb2YgdHVuZXIgYW5kIExOQiwgbm90IGltcGxlbWVudGVkIGluIEZDSUlJICovCi0JCXUzMiBBQ1BJM19zaWcgICAgICAgICA6IDE7ICAgLyogdHVybiBvZiBwb3dlciBvZiB0aGUgY29tcGxldGUgc2F0ZWxpdGUgcmVjZWl2ZXIgYm9hcmQgKGV4Y2VwdCBGQ0lJSSkgKi8KLQkJdTMyIExOQl9MX0hfc2lnICAgICAgIDogMTsgICAvKiBsb3cgb3IgaGlnaCB2b2x0YWdlIGZvciBMTkIuICgwID0gbG93LCAxID0gaGlnaCkgKi8KLQkJdTMyIFBlcl9yZXNldF9zaWcgICAgIDogMTsgICAvKiBtaXNjLiBpbml0IHJlc2V0IChkZWZhdWx0OiAxKSwgdG8gcmVzZXQgc2V0IHRvIGxvdyBhbmQgYmFjayB0byBoaWdoICovCi0JCXUzMiByZXNlcnZlZCAgICAgICAgICA6MjA7Ci0JCXUzMiBSZXZfTl9zaWdfcmV2aXNpb25faGkgOiA0Oy8qIDB4YyBpbiBjYXNlIG9mIEZDSUlJICovCi0JCXUzMiBSZXZfTl9zaWdfcmVzZXJ2ZWQxIDogMjsKLQkJdTMyIFJldl9OX3NpZ19jYXBzICAgIDogMTsgICAvKiBpZiAxLCBGQ0lJSSBoYXMgMzIgUElELSBhbmQgTUFDLWZpbHRlcnMgYW5kIGlzIGNhcGFibGUgb2YgSVAgbXVsdGljYXN0ICovCi0JCXUzMiBSZXZfTl9zaWdfcmVzZXJ2ZWQyIDogMTsKLQl9IG1pc2NfMjA0OwotCi0vKiBDb250cm9sIGFuZCBTdGF0dXMgMHgyMDggdG8gMHgyMWMgKi8KLS8qIEdyb3NzIGVuYWJsZSBhbmQgZGlzYWJsZSBjb250cm9sICovCi0Jc3RydWN0IHsKLQkJdTMyIFN0cmVhbTFfZmlsdGVyX3NpZyA6IDE7ICAvKiBTdHJlYW0xIFBJRCBmaWx0ZXJpbmcgKi8KLQkJdTMyIFN0cmVhbTJfZmlsdGVyX3NpZyA6IDE7ICAvKiBTdHJlYW0yIFBJRCBmaWx0ZXJpbmcgKi8KLQkJdTMyIFBDUl9maWx0ZXJfc2lnICAgIDogMTsgICAvKiBQQ1IgUElEIGZpbHRlciAqLwotCQl1MzIgUE1UX2ZpbHRlcl9zaWcgICAgOiAxOyAgIC8qIFBNVCBQSUQgZmlsdGVyICovCi0KLQkJdTMyIEVNTV9maWx0ZXJfc2lnICAgIDogMTsgICAvKiBFTU0gUElEIGZpbHRlciAqLwotCQl1MzIgRUNNX2ZpbHRlcl9zaWcgICAgOiAxOyAgIC8qIEVDTSBQSUQgZmlsdGVyICovCi0JCXUzMiBOdWxsX2ZpbHRlcl9zaWcgICA6IDE7ICAgLyogRmlsdGVycyBudWxsIHBhY2tldHMsIFBJRD0weDFmZmYuICovCi0JCXUzMiBNYXNrX2ZpbHRlcl9zaWcgICA6IDE7ICAgLyogbWFzayBQSUQgZmlsdGVyICovCi0KLQkJdTMyIFdBTl9FbmFibGVfc2lnICAgIDogMTsgICAvKiBXQU4gb3V0cHV0IGxpbmUgdGhyb3VnaCBWOCBtZW1vcnkgc3BhY2UgaXMgYWN0aXZhdGVkLiAqLwotCQl1MzIgV0FOX0NBX0VuYWJsZV9zaWcgOiAxOyAgIC8qIG5vdCBpbiBGQ0lJSSAqLwotCQl1MzIgQ0FfRW5hYmxlX3NpZyAgICAgOiAxOyAgIC8qIG5vdCBpbiBGQ0lJSSAqLwotCQl1MzIgU01DX0VuYWJsZV9zaWcgICAgOiAxOyAgIC8qIENJIHN0cmVhbSBkYXRhIChDQUkpIGdvZXMgZGlyZWN0bHkgdG8gdGhlIHNtYXJ0IGNhcmQgaW50ZiAob3Bwb3NlZCBJQkkgMHg2MDAgb3IgU0MtY21kIGJ1ZikuICovCi0KLQkJdTMyIFBlcl9DQV9FbmFibGVfc2lnIDogMTsgICAvKiBub3QgaW4gRkNJSUkgKi8KLQkJdTMyIE11bHRpMl9FbmFibGVfc2lnIDogMTsgICAvKiA/ICovCi0JCXUzMiBNQUNfZmlsdGVyX01vZGVfc2lnIDogMTsgLyogKE1BQ19maWx0ZXJfZW5hYmxlKSBHbG9iYWxseSBlbmFibGVzIE1BQyBmaWx0ZXJzIGZvciBOZXQgUElEIGZpbHRlcmVzLiAqLwotCQl1MzIgUmN2X0RhdGFfc2lnICAgICAgOiAxOyAgIC8qIFBJRCBmaWx0ZXJpbmcgbW9kdWxlIGVuYWJsZS4gV2hlbiB0aGlzIGJpdCBpcyBhIG9uZSwgdGhlIFBJRCBmaWx0ZXIgd2lsbAotCQkJCQkJCQkJCWV4YW1pbmUgYW5kIHByb2Nlc3MgcGFja2V0cyBhY2NvcmRpbmcgdG8gYWxsIG90aGVyIChpbmRpdmlkdWFsKSBQSUQKLQkJCQkJCQkJCQlmaWx0ZXJpbmcgY29udHJvbHMuIElmIGl0IGEgemVybywgbm8gcGFja2V0IHByb2Nlc3Npbmcgb2YgYW55IGtpbmQgd2lsbAotCQkJCQkJCQkJCXRha2UgcGxhY2UuIEFsbCBkYXRhIGZyb20gdGhlIHR1bmVyIHdpbGwgYmUgdGhyb3duIGF3YXkuICovCi0KLQkJdTMyIERNQTFfSVJRX0VuYWJsZV9zaWcgOiAxOyAvKiBXaGVuIHNldCwgYSBEV09SRCBjb3VudGVyIGlzIGVuYWJsZWQgb24gUENJIERNQTEgdGhhdCBhc3NlcnRzIHRoZSBQQ0kKLQkJCQkJCQkJCSAgKiBpbnRlcnJ1cHQgYWZ0ZXIgdGhlIHNwZWNpZmllZCBjb3VudCBmb3IgZmlsbGluZyB0aGUgYnVmZmVyLiAqLwotCQl1MzIgRE1BMV9UaW1lcl9FbmFibGVfc2lnIDogMTsgLyogV2hlbiBzZXQsIGEgdGltZXIgaXMgZW5hYmxlZCBvbiBQQ0kgRE1BMSB0aGF0IGFzc2VydHMgdGhlIFBDSSBpbnRlcnJ1cHQKLQkJCQkJCQkJCQkJYWZ0ZXIgYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUuICovCi0JCXUzMiBETUEyX0lSUV9FbmFibGVfc2lnIDogMTsgICAvKiBzYW1lIGFzIERNQTFfSVJRX0VuYWJsZV9zaWcgYnV0IGZvciBETUEyICovCi0JCXUzMiBETUEyX1RpbWVyX0VuYWJsZV9zaWcgOiAxOyAgIC8qIHNhbWUgYXMgRE1BMV9UaW1lcl9FbmFibGVfc2lnIGJ1dCBmb3IgRE1BMiAqLwotCi0JCXUzMiBETUExX1NpemVfSVJRX0VuYWJsZV9zaWcgOiAxOyAvKiBXaGVuIHNldCwgYSBwYWNrZXQgY291bnQgZGV0ZWN0b3IgaXMgZW5hYmxlZCBvbiBQQ0kgRE1BMSB0aGF0IGFzc2VydHMgdGhlIFBDSSBpbnRlcnJ1cHQuICovCi0JCXUzMiBETUEyX1NpemVfSVJRX0VuYWJsZV9zaWcgOiAxOyAvKiBXaGVuIHNldCwgYSBwYWNrZXQJY291bnQgZGV0ZWN0b3IgaXMgZW5hYmxlZCBvbiBQQ0kgRE1BMiB0aGF0IGFzc2VydHMgdGhlIFBDSSBpbnRlcnJ1cHQuICovCi0JCXUzMiBNYWlsYm94X2Zyb21fVjhfRW5hYmxlX3NpZzogMTsgLyogV2hlbiBzZXQsIHdyaXRlcyB0byB0aGUgbWFpbGJveCByZWdpc3RlciBwcm9kdWNlIGFuIGludGVycnVwdCB0byB0aGUKLQkJCQkJCQkJCQkJUENJIGhvc3QgdG8gaW5kaWNhdGUgdGhhdCBtYWlsYm94IGRhdGEgaXMgYXZhaWxhYmxlLiAqLwotCi0JCXUzMiB1bnVzZWQgICAgICAgICAgICA6IDk7Ci0JfSBjdHJsXzIwODsKLQotLyogR2VuZXJhbCBzdGF0dXMuIFdoZW4gYSBQQ0kgaW50ZXJydXB0IG9jY3VycywgdGhpcyByZWdpc3RlciBpcyByZWFkIHRvCi0gKiBkaXNjb3ZlciB0aGUgcmVhc29uIGZvciB0aGUgaW50ZXJydXB0LgotICovCi0Jc3RydWN0IHsKLQkJdTMyIERNQTFfSVJRX1N0YXR1cyAgIDogMTsgICAvKiBXaGVuIHNldCgxKSB0aGUgRE1BMSBjb3VudGVyIGhhZCBnZW5lcmF0ZWQgYW4gSVJRLiBSZWFkIE9ubHkuICovCi0JCXUzMiBETUExX1RpbWVyX1N0YXR1cyA6IDE7ICAgLyogV2hlbiBzZXQoMSkgdGhlIERNQTEgdGltZXIgaGFkIGdlbmVyYXRlZCBhbiBJUlEuIFJlYWQgT25seS4gKi8KLQkJdTMyIERNQTJfSVJRX1N0YXR1cyAgIDogMTsgICAvKiBXaGVuIHNldCgxKSB0aGUgRE1BMiBjb3VudGVyIGhhZCBnZW5lcmF0ZWQgYW4gSVJRLiBSZWFkIE9ubHkuICovCi0JCXUzMiBETUEyX1RpbWVyX1N0YXR1cyA6IDE7ICAgLyogV2hlbiBzZXQoMSkgdGhlIERNQTIgdGltZXIgaGFkIGdlbmVyYXRlZCBhbiBJUlEuIFJlYWQgT25seS4gKi8KLQkJdTMyIERNQTFfU2l6ZV9JUlFfU3RhdHVzIDogMTsgLyogKFJlYWQgb25seSkuIFRoaXMgcmVnaXN0ZXIgaXMgcmVhZCBhZnRlciBhbiBpbnRlcnJ1cHQgdG8gKi8KLQkJdTMyIERNQTJfU2l6ZV9JUlFfU3RhdHVzIDogMTsgLyogZmluZCBvdXQgd2h5IHdlIGhhZCBhbiBJUlEuIFJlYWRpbmcgdGhpcyByZWdpc3RlciB3aWxsIGNsZWFyIHRoaXMgYml0LiBQYWNrZXQgY291bnQqLwotCQl1MzIgTWFpbGJveF9mcm9tX1Y4X1N0YXR1c19zaWc6IDE7IC8qIFNhbWUgYXMgYWJvdmUuIFJlYWRpbmcgdGhpcyByZWdpc3RlciB3aWxsIGNsZWFyIHRoaXMgYml0LiAqLwotCQl1MzIgRGF0YV9yZWNlaXZlcl9lcnJvciA6IDE7IC8qIDEgaW5kaWNhdGUgYW4gZXJyb3IgaW4gdGhlIHJlY2VpdmVyIEZyb250IEVuZCAoVHVuZXIgbW9kdWxlKSAqLwotCQl1MzIgQ29udGludWl0eV9lcnJvcl9mbGFnIDogMTsgICAvKiAxIGluZGljYXRlcyBhIGNvbnRpbnVpdHkgZXJyb3IgaW4gdGhlIFRTIHN0cmVhbS4gKi8KLQkJdTMyIExMQ19TTkFQX0ZMQUdfc2V0IDogMTsgICAvKiAxIGluZGljYXRlcyB0aGF0IHRoZSBMQ0NfU05BUF9GTEFHIHdhcyBzZXQuICovCi0JCXUzMiBUcmFuc3BvcnRfRXJyb3IgICA6IDE7ICAgLyogIFdoZW4gc2V0IGluZGljYXRlcyB0aGF0IGFuIHVuZXhwZWN0ZWQgcGFja2V0IHdhcyByZWNlaXZlZC4gKi8KLQkJdTMyIHJlc2VydmVkICAgICAgICAgIDoyMTsKLQl9IGlycV8yMGM7Ci0KLQotLyogU29mdHdhcmUgcmVzZXQgcmVnaXN0ZXIgKi8KLQlzdHJ1Y3QgewotCQl1MzIgcmVzZXRfYmxvY2tzICAgICAgOiA4OyAgIC8qIEVuYWJsZWQgd2hlbiBCbG9ja19yZXNldF9lbmFibGUgPSAweEIyIGFuZCAweDIwOCBiaXRzIDE1OjggPSAweDAwLgotCQkJCQkJCQkJCUVhY2ggYml0IGxvY2F0aW9uIHJlcHJlc2VudHMgYSAweDEwMCBibG9jayBvZiByZWdpc3RlcnMuIFdyaXRpbmcKLQkJCQkJCQkJCQlhIG9uZSBpbiBhIGJpdCBsb2NhdGlvbiByZXNldHMgdGhhdCBibG9jayBvZiByZWdpc3RlcnMgYW5kIHRoZSBsb2dpYwotCQkJCQkJCQkJCXRoYXQgaXQgY29udHJvbHMuICovCi0JCXUzMiBCbG9ja19yZXNldF9lbmFibGUgOiA4OyAgLyogVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gMHhCMiB3aGVuIHRoZSByZWdpc3RlciBpcyB3cml0dGVuLiAqLwotCQl1MzIgU3BlY2lhbF9jb250cm9scyAgOjE2OyAgIC8qIEFzc2VydHMgUmVzZXRfVjggPT4gMHhDMjU4OyBUdXJucyBvbiBwY2kgZW5jcnlwdGlvbiA9PiAweEMyNUE7Ci0JCQkJCQkJCQkJVHVybnMgb2ZmIHBjaSBlbmNyeXB0aW9uID0+IDB4QzI1OSBOb3RlOiBwY2lfZW5jcnlwdGlvbiBkZWZhdWx0Ci0JCQkJCQkJCQkJYXQgcG93ZXItdXAgaXMgT04uICovCi0JfSBzd19yZXNldF8yMTA7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgdnVhcnRfb2Vfc2lnICAgICAgOiAxOyAgIC8qIFdoZW4gY2xlYXIsIHRoZSBWOCBwcm9jZXNzb3IgaGFzIHNvbGUgY29udHJvbCBvZiB0aGUgc2VyaWFsIFVBUlQKLQkJCQkJCQkJCQkoUlMtMjMyIFNtYXJ0IENhcmQgaW50ZXJmYWNlKS4gV2hlbiBzZXQsIHRoZSBJQkkgaW50ZXJmYWNlCi0JCQkJCQkJCQkJZGVmaW5lZCBieSByZWdpc3RlciAweDYwMCBjb250cm9scyB0aGUgc2VyaWFsIFVBUlQuICovCi0JCXUzMiB2MldTX29lX3NpZyAgICAgICA6IDE7ICAgLyogV2hlbiBjbGVhciwgdGhlIFY4IHByb2Nlc3NvciBoYXMgZGlyZWN0IGNvbnRyb2wgb2YgdGhlIFR3by1saW5lCi0JCQkJCQkJCQkJU2VyaWFsIE1hc3RlciBFRVBST00gdGFyZ2V0LiBXaGVuIHNldCwgdGhlIFR3by1saW5lIFNlcmlhbCBNYXN0ZXIKLQkJCQkJCQkJCQlFRVBST00gdGFyZ2V0IGludGVyZmFjZSBpcyBjb250cm9sbGVkIGJ5IElCSSByZWdpc3RlciAweDEwMC4gKi8KLQkJdTMyIGhhbHRfVjhfc2lnICAgICAgIDogMTsgICAvKiBXaGVuIHNldCwgY29udGlndW91cyB3YWl0IHN0YXRlcyBhcmUgYXBwbGllZCB0byB0aGUgVjgtc3BhY2UKLQkJCQkJCQkJCQlidXMgbWFzdGVycy4gT25jZSB0aGlzIHNpZ25hbCBpcyBjbGVhcmVkLCBub3JtYWwgVjgtc3BhY2UKLQkJCQkJCQkJCQlvcGVyYXRpb25zIHJlc3VtZS4gKi8KLQkJdTMyIHNlY3Rpb25fcGtnX2VuYWJsZV9zaWc6IDE7IC8qIFdoZW4gc2V0LCB0aGlzIHNpZ25hbCBlbmFibGVzIHRoZSBmcm9udCBlbmQgdHJhbnNsYXRpb24gY2lyY3VpdHJ5Ci0JCQkJCQkJCQkJICB0byBwcm9jZXNzIHNlY3Rpb24gcGFja2VkIHRyYW5zcG9ydCBzdHJlYW1zLiAqLwotCQl1MzIgczJwX3NlbF9zaWcgICAgICAgOiAxOyAgIC8qIFNlcmlhbCB0byBwYXJhbGxlbCBjb252ZXJzaW9uLiBXaGVuIHNldCwgcG9sYXJpemVkIHRyYW5zcG9ydCBkYXRhCi0JCQkJCQkJCQkJd2l0aGluIHRoZSBGbGV4Q29wMyBmcm9udCBlbmQgY2lyY3VpdHJ5IGlzIGNvbnZlcnRlZCBmcm9tIGEgc2VyaWFsCi0JCQkJCQkJCQkJc3RyZWFtIGludG8gcGFyYWxsZWwgZGF0YSBiZWZvcmUgZG93bnN0cmVhbSBwcm9jZXNzaW5nIG90aGVyd2lzZQotCQkJCQkJCQkJCWludGVycHJldHMgdGhlIGRhdGEuICovCi0JCXUzMiB1bnVzZWQxICAgICAgICAgICA6IDM7Ci0JCXUzMiBwb2xhcml0eV9QU19DTEtfc2lnOiAxOyAgLyogVGhpcyBzaWduYWwgaXMgdXNlZCB0byBpbnZlcnQgdGhlIGlucHV0IHBvbGFyaXR5IG9mIHRoZSB0cmFucG9ydAotCQkJCQkJCQkJCXN0cmVhbSBDTE9DSyBzaWduYWwgYmVmb3JlIGFueSBwcm9jZXNzaW5nIG9jY3VycyBvbiB0aGUgdHJhbnNwb3J0Ci0JCQkJCQkJCQkJc3RyZWFtIHdpdGhpbiBGbGV4Q29wMy4gKi8KLQkJdTMyIHBvbGFyaXR5X1BTX1ZBTElEX3NpZzogMTsgLyogVGhpcyBzaWduYWwgaXMgdXNlZCB0byBpbnZlcnQgdGhlIGlucHV0IHBvbGFyaXR5IG9mIHRoZSB0cmFucG9ydAotCQkJCQkJCQkJCXN0cmVhbSBWQUxJRCBzaWduYWwgYmVmb3JlIGFueSBwcm9jZXNzaW5nIG9jY3VycyBvbiB0aGUgdHJhbnNwb3J0Ci0JCQkJCQkJCQkJc3RyZWFtIHdpdGhpbiBGbGV4Q29wMy4gKi8KLQkJdTMyIHBvbGFyaXR5X1BTX1NZTkNfc2lnOiAxOyAvKiBUaGlzIHNpZ25hbCBpcyB1c2VkIHRvIGludmVydCB0aGUgaW5wdXQgcG9sYXJpdHkgb2YgdGhlIHRyYW5wb3J0Ci0JCQkJCQkJCQkJc3RyZWFtIFNZTkMgc2lnbmFsIGJlZm9yZSBhbnkgcHJvY2Vzc2luZyBvY2N1cnMgb24gdGhlIHRyYW5zcG9ydAotCQkJCQkJCQkJCXN0cmVhbSB3aXRoaW4gRmxleENvcDMuICovCi0JCXUzMiBwb2xhcml0eV9QU19FUlJfc2lnOiAxOyAgLyogVGhpcyBzaWduYWwgaXMgdXNlZCB0byBpbnZlcnQgdGhlIGlucHV0IHBvbGFyaXR5IG9mIHRoZSB0cmFucG9ydAotCQkJCQkJCQkJCXN0cmVhbSBFUlJPUiBzaWduYWwgYmVmb3JlIGFueSBwcm9jZXNzaW5nIG9jY3VycyBvbiB0aGUgdHJhbnNwb3J0Ci0JCQkJCQkJCQkJc3RyZWFtIHdpdGhpbiBGbGV4Q29wMy4gKi8KLQkJdTMyIHVudXNlZDIgICAgICAgICAgIDoyMDsKLQl9IG1pc2NfMjE0OwotCi0vKiBNYWlsYm94IGZyb20gVjggdG8gaG9zdCAqLwotCXN0cnVjdCB7Ci0JCXUzMiBNYWlsYm94X2Zyb21fVjggICA6MzI7ICAgLyogV2hlbiB0aGlzIHJlZ2lzdGVyIGlzIHdyaXR0ZW4gYnkgZWl0aGVyIHRoZSBWOCBwcm9jZXNzb3Igb3IgYnkgYW4KLQkJCQkJCQkJCQllbmQgaG9zdCwgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCB0byB0aGUgUENJIGhvc3QgdG8gaW5kaWNhdGUKLQkJCQkJCQkJCQl0aGF0IG1haWxib3ggZGF0YSBpcyBhdmFpbGFibGUuIFJlYWRpbmcgcmVnaXN0ZXIgMjBjIHdpbGwgY2xlYXIKLQkJCQkJCQkJCQl0aGUgSVJRLiAqLwotCX0gbWJveF92OF90b19ob3N0XzIxODsKLQotLyogTWFpbGJveCBmcm9tIGhvc3QgdG8gdjggTWFpbGJveF90b19WOAotICogTWFpbGJveF90b19WOCBtYWlsYm94IHN0b3JhZ2UgcmVnaXN0ZXIKLSAqIHVzZWQgdG8gc2VuZCBtZXNzYWdlcyBmcm9tIFBDSSB0byBWOC4gV3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIHdpbGwgc2VuZCBhbgotICogSVJRIHRvIHRoZSBWOC4gVGhlbiBpdCBjYW4gcmVhZCB0aGUgZGF0YSBmcm9tIGhlcmUuIFJlYWRpbmcgdGhpcyByZWdpc3RlcgotICogd2lsbCBjbGVhciB0aGUgSVJRLiBJZiB0aGUgVjggaXMgaGFsdGVkIGFuZCBiaXQgMzEgb2YgdGhpcyByZWdpc3RlciBpcyBzZXQsCi0gKiB0aGVuIHRoaXMgcmVnaXN0ZXIgaXMgdXNlZCBpbnN0ZWFkIGFzIGEgZGlyZWN0IGludGVyZmFjZSB0byBhY2Nlc3MgdGhlCi0gKiBWOHNwYWNlIG1lbW9yeS4KLSAqLwotCXN0cnVjdCB7Ci0JCXUzMiBzeXNyYW1hY2Nlc3NfZGF0YSA6IDg7ICAgLyogRGF0YSBieXRlIHdyaXR0ZW4gb3IgcmVhZCBmcm9tIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBWOCBTeXNSQU0uICovCi0JCXUzMiBzeXNyYW1hY2Nlc3NfYWRkciA6MTU7ICAgLyogMTUgYml0IGFkZHJlc3MgdXNlZCB0byBhY2Nlc3MgVjggU3lzLVJBTS4gKi8KLQkJdTMyIHVudXNlZCAgICAgICAgICAgIDogNzsKLQkJdTMyIHN5c3JhbWFjY2Vzc193cml0ZTogMTsgICAvKiBXcml0ZSBmbGFnIHVzZWQgdG8gbGF0Y2ggZGF0YSBpbnRvIHRoZSBWOCBTeXNSQU0uICovCi0JCXUzMiBzeXNyYW1hY2Nlc3NfYnVzbXVzdGVyOiAxOyAvKiBTZXR0aW5nIHRoaXMgYml0IHdoZW4gdGhlIFY4IGlzIGhhbHRlZCBhdCAweDIxNCBCaXQoMikgYWxsb3dzCi0JCQkJCQkJCQkJICB0aGlzIElCSSByZWdpc3RlciBpbnRlcmZhY2UgdG8gZGlyZWN0bHkgZHJpdmUgdGhlIFY4LXNwYWNlIG1lbW9yeS4gKi8KLQl9IG1ib3hfaG9zdF90b192OF8yMWM7Ci0KLQotLyogUElEcywgVHJhbnNsYXRpb24gQml0LCBTTUMgRmlsdGVyIFNlbGVjdCAweDMwMCB0byAweDMxYyAqLwotCXN0cnVjdCB7Ci0JCXUzMiBTdHJlYW0xX1BJRCAgICAgICA6MTM7ICAgLyogUHJpbWFyeSB1c2UgaXMgcmVjZWl2aW5nIE5ldCBkYXRhLCBzbyB0aGVzZSAxMyBiaXRzIG5vcm1hbGx5Ci0JCQkJCQkJCQkJaG9sZCB0aGUgUElEIHZhbHVlIGZvciB0aGUgZGVzaXJlZCBuZXR3b3JrIHN0cmVhbS4gKi8KLQkJdTMyIFN0cmVhbTFfdHJhbnMgICAgIDogMTsgICAvKiBXaGVuIHNldCwgTmV0IHRyYW5zbGF0aW9uIHdpbGwgdGFrZSBwbGFjZSBmb3IgTmV0IGRhdGEgZmVycmllZCBpbiBUUyBwYWNrZXRzLiAqLwotCQl1MzIgTUFDX011bHRpY2FzdF9maWx0ZXIgOiAxOyAgIC8qIFdoZW4gY2xlYXIsIG11bHRpY2FzdCBNQUMgZmlsdGVyaW5nIGlzIG5vdCBhbGxvd2VkIGZvciBTdHJlYW0xIGFuZCBQSURfbiBmaWx0ZXJzLiAqLwotCQl1MzIgZGVidWdfZmxhZ19waWRfc2F2ZWQgOiAxOwotCQl1MzIgU3RyZWFtMl9QSUQgICAgICAgOjEzOyAgIC8qIDEzIGJpdHMgZm9yIFN0cmVhbSAyIFBJRCBmaWx0ZXIgdmFsdWUuIEdlbmVyYWwgdXNlLiAqLwotCQl1MzIgU3RyZWFtMl90cmFucyAgICAgOiAxOyAgIC8qIFdoZW4gc2V0IFRhYmxlcy9DQUkgdHJhbnNsYXRpb24gd2lsbCB0YWtlIHBsYWNlIGZvciB0aGUgZGF0YSBmZXJyaWVkIGluCi0JCQkJCQkJCQkJU3RyZWFtMl9QSUQgVFMgcGFja2V0cy4gKi8KLQkJdTMyIGRlYnVnX2ZsYWdfd3JpdGVfc3RhdHVzMDAgOiAxOwotCQl1MzIgZGVidWdfZmlmb19wcm9ibGVtIDogMTsKLQl9IHBpZF9maWx0ZXJfMzAwOwotCi0Jc3RydWN0IHsKLQkJdTMyIFBDUl9QSUQgICAgICAgICAgIDoxMzsgICAvKiBQQ1Igc3RyZWFtIFBJRCBmaWx0ZXIgdmFsdWUuIFByaW1hcnkgdXNlIGlzIFByb2dyYW0gQ2xvY2sgUmVmZXJlbmNlIHN0cmVhbSBmaWx0ZXJpbmcuICovCi0JCXUzMiBQQ1JfdHJhbnMgICAgICAgICA6IDE7ICAgLyogV2hlbiBzZXQsIFRhYmxlcy9DQUkgdHJhbnNsYXRpb24gd2lsbCB0YWtlIHBsYWNlIGZvciB0aGVzZSBwYWNrZXRzLiAqLwotCQl1MzIgZGVidWdfb3ZlcnJ1bjMgICAgOiAxOwotCQl1MzIgZGVidWdfb3ZlcnJ1bjIgICAgOiAxOwotCQl1MzIgUE1UX1BJRCAgICAgICAgICAgOjEzOyAgIC8qIHN0cmVhbSBQSUQgZmlsdGVyIHZhbHVlLiBQcmltYXJ5IHVzZSBpcyBQcm9ncmFtIE1hbmFnZW1lbnQgVGFibGUgc2VnbWVudCBmaWx0ZXJpbmcuICovCi0JCXUzMiBQTVRfdHJhbnMgICAgICAgICA6IDE7ICAgLyogV2hlbiBzZXQsIFRhYmxlcy9DQUkgdHJhbnNsYXRpb24gd2lsbCB0YWtlIHBsYWNlIGZvciB0aGVzZSBwYWNrZXRzLiAqLwotCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgOiAyOwotCX0gcGlkX2ZpbHRlcl8zMDQ7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgRU1NX1BJRCAgICAgICAgICAgOjEzOyAgIC8qIEVNTSBQSUQgZmlsdGVyIHZhbHVlLiBQcmltYXJ5IHVzZSBpcyBFbnRpdGxlbWVudCBNYW5hZ2VtZW50IE1lc3NhZ2luZyBmb3IKLQkJCQkJCQkJCQljb25kaXRpb25hbCBhY2Nlc3MtcmVsYXRlZCBkYXRhLiAqLwotCQl1MzIgRU1NX3RyYW5zICAgICAgICAgOiAxOyAgIC8qIFdoZW4gc2V0LCBUYWJsZXMvQ0FJIHRyYW5zbGF0aW9uIHdpbGwgdGFrZSBwbGFjZSBmb3IgdGhlc2UgcGFja2V0cy4gKi8KLQkJdTMyIEVNTV9maWx0ZXJfNCAgICAgIDogMTsgICAvKiBXaGVuIHNldCB3aWxsIHBhc3Mgb25seSBFTU0gZGF0YSBwb3NzZXNzaW5nIHRoZSBzYW1lIElEIGNvZGUgYXMgdGhlCi0JCQkJCQkJCQkJZmlyc3QgZm91ciBieXRlcyAoMzIgYml0cykgb2YgdGhlIGVuZC11c2VyIHMgNi1ieXRlIFNtYXJ0IENhcmQgSUQgbnVtYmVyIFNlbGVjdCAqLwotCQl1MzIgRU1NX2ZpbHRlcl82ICAgICAgOiAxOyAgIC8qIFdoZW4gc2V0IHdpbGwgcGFzcyBvbmx5IEVNTSBkYXRhIHBvc3Nlc3NpbmcgdGhlIHNhbWUgNi1ieXRlIGNvZGUgYXMgdGhlIGVuZC11c2VycwotCQkJCQkJCQkJCWNvbXBsZXRlIDYtYnl0ZSBTbWFydCBDYXJkIElEIG51bWJlci4gKi8KLQkJdTMyIEVDTV9QSUQgICAgICAgICAgIDoxMzsgICAvKiBFQ00gUElEIGZpbHRlciB2YWx1ZS4gUHJpbWFyeSB1c2UgaXMgRW50aXRsZW1lbnQgQ29udHJvbCBNZXNzYWdpbmcgZm9yIGNvbmRpdGlvbmFsCi0JCQkJCQkJCQkJYWNjZXNzLXJlbGF0ZWQgZGF0YS4gKi8KLQkJdTMyIEVDTV90cmFucyAgICAgICAgIDogMTsgICAvKiBXaGVuIHNldCwgVGFibGVzL0NBSSB0cmFuc2xhdGlvbiB3aWxsIHRha2UgcGxhY2UgZm9yIHRoZXNlIHBhY2tldHMuICovCi0JCXUzMiByZXNlcnZlZCAgICAgICAgICA6IDI7Ci0JfSBwaWRfZmlsdGVyXzMwODsKLQotCXN0cnVjdCB7Ci0JCXUzMiBHcm91cF9QSUQgICAgIDoxMzsgICAvKiBQSUQgdmFsdWUgZm9yIGdyb3VwIGZpbHRlcmluZy4gKi8KLQkJdTMyIEdyb3VwX3RyYW5zICAgOiAxOyAgIC8qIFdoZW4gc2V0LCBUYWJsZXMvQ0FJIHRyYW5zbGF0aW9uIHdpbGwgdGFrZSBwbGFjZSBmb3IgdGhlc2UgcGFja2V0cy4gKi8KLQkJdTMyIHVudXNlZDEgICAgICAgOiAyOwotCQl1MzIgR3JvdXBfbWFzayAgICA6MTM7ICAgLyogTWFzayB2YWx1ZSB1c2VkIGluIGxvZ2ljYWwgImFuZCIgZXF1YXRpb24gdGhhdCBkZWZpbmVzIGdyb3VwIGZpbHRlcmluZyAqLwotCQl1MzIgdW51c2VkMiAgICAgICA6IDM7Ci0JfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzBfNzsKLQotCXN0cnVjdCB7Ci0JCXUzMiBuZXRfbWFzdGVyX3JlYWQgOjE3OwotCQl1MzIgdW51c2VkICAgICAgICA6MTU7Ci0JfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzE7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgbmV0X21hc3Rlcl93cml0ZSA6MTc7Ci0JCXUzMiB1bnVzZWQgICAgICAgIDoxNTsKLQl9IHBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfMjsKLQotCXN0cnVjdCB7Ci0JCXUzMiBuZXh0X25ldF9tYXN0ZXJfd3JpdGUgOjE3OwotCQl1MzIgdW51c2VkICAgICAgICA6MTU7Ci0JfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzM7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgdW51c2VkMSAgICAgICA6IDE7Ci0JCXUzMiBzdGF0ZV93cml0ZSAgIDoxMDsKLQkJdTMyIHJlc2VydmVkMSAgICAgOiA2OyAgIC8qIGRlZmF1bHQ6IDAwMDEwMCAqLwotCQl1MzIgc3RhY2tfcmVhZCAgICA6MTA7Ci0JCXUzMiByZXNlcnZlZDIgICAgIDogNTsgICAvKiBkZWZhdWx0OiAwMDEwMCAqLwotCX0gcGlkX2ZpbHRlcl8zMGNfZXh0X2luZF80OwotCi0Jc3RydWN0IHsKLQkJdTMyIHN0YWNrX2NudCAgICAgOjEwOwotCQl1MzIgdW51c2VkICAgICAgICA6MjI7Ci0JfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzU7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzAgOiAyOwotCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzEgOiAyOwotCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzIgOiAyOwotCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzMgOiAyOwotCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzQgOiAyOwotCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzMwMCA6IDI7Ci0JCXUzMiB3cml0ZV9zdGF0dXMxIDogMjsKLQkJdTMyIHdyaXRlX3N0YXR1czQgOiAyOwotCQl1MzIgZGF0YV9zaXplX3JlZyA6MTI7Ci0JCXUzMiB1bnVzZWQgICAgICAgIDogNDsKLQl9IHBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfNjsKLQotCXN0cnVjdCB7Ci0JCXUzMiBpbmRleF9yZWcgICAgICAgICA6IDU7ICAgLyogKEluZGV4IHBvaW50ZXIpIFBvaW50cyBhdCBhbiBpbnRlcm5hbCBQSURuIHJlZ2lzdGVyLiBBIGJpbmFyeSBjb2RlCi0JCQkJCQkJCQkJcmVwcmVzZW50aW5nIG9uZSBvZiAzMiBpbnRlcm5hbCBQSURuIHJlZ2lzdGVycyBhcyB3ZWxsIGFzIGl0cwotCQkJCQkJCQkJCWNvcnJlc3BvbmRpbmcgaW50ZXJuYWwgTUFDX2xvd24gcmVnaXN0ZXIuICovCi0JCXUzMiBleHRyYV9pbmRleF9yZWcgICA6IDM7ICAgLyogVGhpcyB2ZWN0b3IgaXMgdXNlZCB0byBzZWxlY3QgYmV0d2VlbiBzZXRzIG9mIGRlYnVnIHNpZ25hbHMgcm91dGVkIHRvIHJlZ2lzdGVyIDB4MzBjLiAqLwotCQl1MzIgQUJfc2VsZWN0ICAgICAgICAgOiAxOyAgIC8qIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAweDMxYy4gcmVhZC93cml0ZSB0byB0aGUgTUFDX2hpZ2hBIG9yIE1BQ19oaWdoQiByZWdpc3RlcgotCQkJCQkJCQkJCTA9TUFDX2hpZ2hCIHJlZ2lzdGVyLCAxPU1BQ19oaWdoQSAqLwotCQl1MzIgcGFzc19hbGx0YWJsZXMgICAgOiAxOyAgIC8qIDE9TmV0IHBhY2tldHMgYXJlIG5vdCBmaWx0ZXJlZCBhZ2FpbnN0IHRoZSBOZXR3b3JrIFRhYmxlIElEIGZvdW5kIGluIHJlZ2lzdGVyIDB4NDAwLgotCQkJCQkJCQkJCUFsbCB0eXBlcyBvZiBuZXR3b3JrcyAoRFZCLCBBVFNDLCBJU0RCKSBhcmUgcGFzc2VkLiAqLwotCQl1MzIgdW51c2VkICAgICAgICAgICAgOjIyOwotCX0gaW5kZXhfcmVnXzMxMDsKLQotCXN0cnVjdCB7Ci0JCXUzMiBQSUQgICAgICAgICAgICAgICA6MTM7ICAgLyogUElEIHZhbHVlICovCi0JCXUzMiBQSURfdHJhbnMgICAgICAgICA6IDE7ICAgLyogdHJhbnNsYXRpb24gd2lsbCB0YWtlIHBsYWNlIGZvciBwYWNrZXRzIGZpbHRlcmVkICovCi0JCXUzMiBQSURfZW5hYmxlX2JpdCAgICA6IDE7ICAgLyogV2hlbiBzZXQgdGhpcyBQSUQgZmlsdGVyIGlzIGVuYWJsZWQgKi8KLQkJdTMyIHJlc2VydmVkICAgICAgICAgIDoxNzsKLQl9IHBpZF9uX3JlZ18zMTQ7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgQTRfYnl0ZSAgICAgICAgICAgOiA4OwotCQl1MzIgQTVfYnl0ZSAgICAgICAgICAgOiA4OwotCQl1MzIgQTZfYnl0ZSAgICAgICAgICAgOiA4OwotCQl1MzIgRW5hYmxlX2JpdCAgICAgICAgOiAxOyAgIC8qIGVuYWJsZWQgKDEpIG9yIGRpc2FibGVkICgxKSAqLwotCQl1MzIgSGlnaEFCX2JpdCAgICAgICAgOiAxOyAgIC8qIHVzZSBNQUNfaGlnaEEgKDEpIG9yIE1BQ19oaWdoQiAoMCkgYXMgTVNCICovCi0JCXUzMiByZXNlcnZlZCAgICAgICAgICA6IDY7Ci0JfSBtYWNfbG93X3JlZ18zMTg7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgQTFfYnl0ZSAgICAgICAgICAgOiA4OwotCQl1MzIgQTJfYnl0ZSAgICAgICAgICAgOiA4OwotCQl1MzIgQTNfYnl0ZSAgICAgICAgICAgOiA4OwotCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgOiA4OwotCX0gbWFjX2hpZ2hfcmVnXzMxYzsKLQotLyogVGFibGUsIFNNQ0lELE1BQ0Rlc3RpbmF0aW9uIEZpbHRlcnMgMHg0MDAgdG8gMHg0MWMgKi8KLQlzdHJ1Y3QgewotCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgOjE2OwogI2RlZmluZSBmY19kYXRhX1RhZ19JRF9EVkIgIDB4M2UKICNkZWZpbmUgZmNfZGF0YV9UYWdfSURfQVRTQyAweDNmCiAjZGVmaW5lIGZjX2RhdGFfVGFnX0lEX0lEU0IgMHg4YgotCQl1MzIgZGF0YV9UYWdfSUQgICAgICAgOjE2OwotCX0gZGF0YV90YWdfNDAwOwogCi0Jc3RydWN0IHsKLQkJdTMyIENhcmRfSURieXRlNiAgICAgIDogODsKLQkJdTMyIENhcmRfSURieXRlNSAgICAgIDogODsKLQkJdTMyIENhcmRfSURieXRlNCAgICAgIDogODsKLQkJdTMyIENhcmRfSURieXRlMyAgICAgIDogODsKLQl9IGNhcmRfaWRfNDA4OwotCi0Jc3RydWN0IHsKLQkJdTMyIENhcmRfSURieXRlMiAgICAgIDogODsKLQkJdTMyIENhcmRfSURieXRlMSAgICAgIDogODsKLQl9IGNhcmRfaWRfNDBjOwotCi0JLyogaG9sZGluZyB0aGUgdW5pcXVlIG1hYyBhZGRyZXNzIG9mIHRoZSByZWNlaXZlciB3aGljaCBob3VzZXMgdGhlIEZsZXhDb3BJSUkgKi8KLQlzdHJ1Y3QgewotCQl1MzIgTUFDMSAgICAgICAgICAgICAgOiA4OwotCQl1MzIgTUFDMiAgICAgICAgICAgICAgOiA4OwotCQl1MzIgTUFDMyAgICAgICAgICAgICAgOiA4OwotCQl1MzIgTUFDNiAgICAgICAgICAgICAgOiA4OwotCX0gbWFjX2FkZHJlc3NfNDE4OwotCi0Jc3RydWN0IHsKLQkJdTMyIE1BQzcgICAgICAgICAgICAgIDogODsKLQkJdTMyIE1BQzggICAgICAgICAgICAgIDogODsKLQkJdTMyIHJlc2VydmVkICAgICAgICAgIDogMTY7Ci0JfSBtYWNfYWRkcmVzc180MWM7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgdHJhbnNtaXR0ZXJfZGF0YV9ieXRlIDogODsKLQkJdTMyIFJlY2VpdmVEYXRhUmVhZHkgIDogMTsKLQkJdTMyIFJlY2VpdmVCeXRlRnJhbWVFcnJvcjogMTsKLQkJdTMyIHR4YnVmZmVtcHR5ICAgICAgIDogMTsKLQkJdTMyIHJlc2VydmVkICAgICAgICAgIDoyMTsKLQl9IGNpXzYwMDsKLQotCXN0cnVjdCB7Ci0JCXUzMiBwaV9kICAgICAgICAgICAgICA6IDg7Ci0JCXUzMiBwaV9oYSAgICAgICAgICAgICA6MjA7Ci0JCXUzMiBwaV9ydyAgICAgICAgICAgICA6IDE7Ci0JCXUzMiBwaV9jb21wb25lbnRfcmVnICA6IDM7Ci0JfSBwaV82MDQ7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgc2VyaWFsUmVzZXQgICAgICAgOiAxOwotCQl1MzIgb25jZWN5Y2xlX3JlYWQgICAgOiAxOwotCQl1MzIgVGltZXJfUmVhZF9yZXEgICAgOiAxOwotCQl1MzIgVGltZXJfTG9hZF9yZXEgICAgOiAxOwotCQl1MzIgdGltZXJfZGF0YSAgICAgICAgOiA3OwotCQl1MzIgdW51c2VkICAgICAgICAgICAgOiAxOyAvKiA/Pz8gbm90IG1lbnRpb25lZCBpbiBkYXRhIGJvb2sgKi8KLQkJdTMyIFRpbWVyX2FkZHIgICAgICAgIDogNTsKLQkJdTMyIHJlc2VydmVkICAgICAgICAgIDogMzsKLQkJdTMyIHBjbWNpYV9hX21vZF9wd3JfbiA6IDE7Ci0JCXUzMiBwY21jaWFfYl9tb2RfcHdyX24gOiAxOwotCQl1MzIgY29uZmlnX0RvbmVfc3RhdCAgOiAxOwotCQl1MzIgY29uZmlnX0luaXRfc3RhdCAgOiAxOwotCQl1MzIgY29uZmlnX1Byb2dfbiAgICAgOiAxOwotCQl1MzIgY29uZmlnX3dyX24gICAgICAgOiAxOwotCQl1MzIgY29uZmlnX2NzX24gICAgICAgOiAxOwotCQl1MzIgY29uZmlnX2NjbGsgICAgICAgOiAxOwotCQl1MzIgcGlfQ2lNYXhfSVJRX24gICAgOiAxOwotCQl1MzIgcGlfdGltZW91dF9zdGF0dXMgOiAxOwotCQl1MzIgcGlfd2FpdF9uICAgICAgICAgOiAxOwotCQl1MzIgcGlfYnVzeV9uICAgICAgICAgOiAxOwotCX0gcGlfNjA4OwotCi0Jc3RydWN0IHsKLQkJdTMyIFBJRCAgICAgICAgICAgICAgIDoxMzsKLQkJdTMyIGtleV9lbmFibGUgICAgICAgIDogMTsKICNkZWZpbmUgZmNfa2V5X2NvZGVfZGVmYXVsdCAweDEKICNkZWZpbmUgZmNfa2V5X2NvZGVfZXZlbiAgICAweDIKICNkZWZpbmUgZmNfa2V5X2NvZGVfb2RkICAgICAweDMKLQkJdTMyIGtleV9jb2RlICAgICAgICAgIDogMjsKLQkJdTMyIGtleV9hcnJheV9jb2wgICAgIDogMzsKLQkJdTMyIGtleV9hcnJheV9yb3cgICAgIDogNTsKLQkJdTMyIGR2Yl9lbiAgICAgICAgICAgIDogMTsgLyogMD1UUyBieXBhc3NlcyB0aGUgRGVzY3JhbWJsZXIgKi8KLQkJdTMyIHJ3X2ZsYWcgICAgICAgICAgIDogMTsKLQkJdTMyIHJlc2VydmVkICAgICAgICAgIDogNjsKLQl9IGR2Yl9yZWdfNjBjOwotCi0vKiBTUkFNIGFuZCBPdXRwdXQgRGVzdGluYXRpb24gMHg3MDAgdG8gMHg3MTQgKi8KLQlzdHJ1Y3QgewotCQl1MzIgc3JhbV9hZGRyICAgICAgICAgOjE1OwotCQl1MzIgc3JhbV9ydyAgICAgICAgICAgOiAxOyAgIC8qIDA9d3JpdGUsIDE9cmVhZCAqLwotCQl1MzIgc3JhbV9kYXRhICAgICAgICAgOiA4OwotCQl1MzIgc2NfeGZlcl9iaXQgICAgICAgOiAxOwotCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgOiAzOwotCQl1MzIgb2VfcGluX3JlZyAgICAgICAgOiAxOwotCQl1MzIgY2VfcGluX3JlZyAgICAgICAgOiAxOwotCQl1MzIgcmVzZXJ2ZWQyICAgICAgICAgOiAxOwotCQl1MzIgc3RhcnRfc3JhbV9pYmkgICAgOiAxOwotCX0gc3JhbV9jdHJsX3JlZ183MDA7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgbmV0X2FkZHJfcmVhZCAgICAgOjE2OwotCQl1MzIgbmV0X2FkZHJfd3JpdGUgICAgOjE2OwotCX0gbmV0X2J1Zl9yZWdfNzA0OwotCi0Jc3RydWN0IHsKLQkJdTMyIGNhaV9yZWFkICAgICAgICAgIDoxMTsKLQkJdTMyIHJlc2VydmVkMSAgICAgICAgIDogNTsKLQkJdTMyIGNhaV93cml0ZSAgICAgICAgIDoxMTsKLQkJdTMyIHJlc2VydmVkMiAgICAgICAgIDogNjsKLQkJdTMyIGNhaV9jbnQgICAgICAgICAgIDogNDsKLQl9IGNhaV9idWZfcmVnXzcwODsKLQotCXN0cnVjdCB7Ci0JCXUzMiBjYW9fcmVhZCAgICAgICAgICA6MTE7Ci0JCXUzMiByZXNlcnZlZDEgICAgICAgICA6IDU7Ci0JCXUzMiBjYXBfd3JpdGUgICAgICAgICA6MTE7Ci0JCXUzMiByZXNlcnZlZDIgICAgICAgICA6IDY7Ci0JCXUzMiBjYW9fY250ICAgICAgICAgICA6IDQ7Ci0JfSBjYW9fYnVmX3JlZ183MGM7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgbWVkaWFfcmVhZCAgICAgICAgOjExOwotCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgOiA1OwotCQl1MzIgbWVkaWFfd3JpdGUgICAgICAgOjExOwotCQl1MzIgcmVzZXJ2ZWQyICAgICAgICAgOiA2OwotCQl1MzIgbWVkaWFfY250ICAgICAgICAgOiA0OwotCX0gbWVkaWFfYnVmX3JlZ183MTA7Ci0KLQlzdHJ1Y3QgewotCQl1MzIgTkVUX0Rlc3QgICAgICAgICAgOiAyOwotCQl1MzIgQ0FJX0Rlc3QgICAgICAgICAgOiAyOwotCQl1MzIgQ0FPX0Rlc3QgICAgICAgICAgOiAyOwotCQl1MzIgTUVESUFfRGVzdCAgICAgICAgOiAyOwotCQl1MzIgbmV0X292Zmxvd19lcnJvciAgOiAxOwotCQl1MzIgbWVkaWFfb3ZmbG93X2Vycm9yIDogMTsKLQkJdTMyIGNhaV9vdmZsb3dfZXJyb3IgIDogMTsKLQkJdTMyIGNhb19vdmZsb3dfZXJyb3IgIDogMTsKLQkJdTMyIGN0cmxfdXNiX3dhbiAgICAgIDogMTsKLQkJdTMyIGN0cmxfc3JhbWRtYSAgICAgIDogMTsKLQkJdTMyIGN0cmxfbWF4aW11bWZpbGwgIDogMTsKLQkJdTMyIHJlc2VydmVkICAgICAgICAgIDoxNzsKLQl9IHNyYW1fZGVzdF9yZWdfNzE0OwotCi0Jc3RydWN0IHsKLQkJdTMyIG5ldF9jbnQgICAgICAgICAgIDoxMjsKLQkJdTMyIHJlc2VydmVkMSAgICAgICAgIDogNDsKLQkJdTMyIG5ldF9hZGRyX3JlYWQgICAgIDogMTsKLQkJdTMyIHJlc2VydmVkMiAgICAgICAgIDogMzsKLQkJdTMyIG5ldF9hZGRyX3dyaXRlICAgIDogMTsKLQkJdTMyIHJlc2VydmVkMyAgICAgICAgIDoxMTsKLQl9IG5ldF9idWZfcmVnXzcxODsKLQotCXN0cnVjdCB7Ci0JCXUzMiB3YW5fc3BlZWRfc2lnICAgICA6IDI7Ci0JCXUzMiByZXNlcnZlZDEgICAgICAgICA6IDY7Ci0JCXUzMiB3YW5fd2FpdF9zdGF0ZSAgICA6IDg7Ci0JCXUzMiBzcmFtX2NoaXAgICAgICAgICA6IDI7Ci0JCXUzMiBzcmFtX21lbW1hcCAgICAgICA6IDI7Ci0JCXUzMiByZXNlcnZlZDIgICAgICAgICA6IDQ7Ci0JCXUzMiB3YW5fcGt0X2ZyYW1lICAgICA6IDQ7Ci0JCXUzMiByZXNlcnZlZDMgICAgICAgICA6IDQ7Ci0JfSB3YW5fY3RybF9yZWdfNzFjOwotfSBmbGV4Y29wX2liaV92YWx1ZTsKIAogZXh0ZXJuIGZsZXhjb3BfaWJpX3ZhbHVlIGliaV96ZXJvOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMKaW5kZXggMDExMzQ0OS4uMGE3OGJhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYwpAQCAtNTQ1LDcgKzU0NSw3IEBACiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZmxleGNvcF91c2JfZHJpdmVyID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiVGVjaG5pc2F0L0IyQzIgRmxleENvcCBJSS9JSWIvSUlJIFVTQiIsCisJLm5hbWUJCT0gImIyYzJfZmxleGNvcF91c2IiLAogCS5wcm9iZQkJPSBmbGV4Y29wX3VzYl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGZsZXhjb3BfdXNiX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlCT0gZmxleGNvcF91c2JfdGFibGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCmluZGV4IDhiNWQxNGQuLjEyODczZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCkBAIC00Niw3ICs0Niw3IEBACiAKIGludCBiMmMyX2ZsZXhjb3BfZGVidWc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGIyYzJfZmxleGNvcF9kZWJ1ZywgIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnIGxldmVsICgxPWluZm8sMj10dW5lciw0PWkyYyw4PXRzLDE2PXNyYW0gKHwtYWJsZSkpLiIgREVCU1RBVFVTKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKDE9aW5mbywyPXR1bmVyLDQ9aTJjLDg9dHMsMTY9c3JhbSwzMj1yZWcgKHwtYWJsZSkpLiIgREVCU1RBVFVTKTsKICN1bmRlZiBERUJTVEFUVVMKIAogLyogZ2xvYmFsIHplcm8gZm9yIGliaSB2YWx1ZXMgKi8KQEAgLTE3Myw5ICsxNzMsMjAgQEAKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxjdHJsXzIwOCxpYmlfemVybyk7CiAKIAl2MjEwLnJhdyA9IDA7Ci0JdjIxMC5zd19yZXNldF8yMTAucmVzZXRfYmxvY2tzID0gMHhmZjsKKwl2MjEwLnN3X3Jlc2V0XzIxMC5yZXNldF9ibG9ja18wMDAgPSAxOworCXYyMTAuc3dfcmVzZXRfMjEwLnJlc2V0X2Jsb2NrXzEwMCA9IDE7CisJdjIxMC5zd19yZXNldF8yMTAucmVzZXRfYmxvY2tfMjAwID0gMTsKKwl2MjEwLnN3X3Jlc2V0XzIxMC5yZXNldF9ibG9ja18zMDAgPSAxOworCXYyMTAuc3dfcmVzZXRfMjEwLnJlc2V0X2Jsb2NrXzQwMCA9IDE7CisJdjIxMC5zd19yZXNldF8yMTAucmVzZXRfYmxvY2tfNTAwID0gMTsKKwl2MjEwLnN3X3Jlc2V0XzIxMC5yZXNldF9ibG9ja182MDAgPSAxOworCXYyMTAuc3dfcmVzZXRfMjEwLnJlc2V0X2Jsb2NrXzcwMCA9IDE7CiAJdjIxMC5zd19yZXNldF8yMTAuQmxvY2tfcmVzZXRfZW5hYmxlID0gMHhiMjsKKworCXYyMTAuc3dfcmVzZXRfMjEwLlNwZWNpYWxfY29udHJvbHMgPSAweGMyNTk7CisKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxzd19yZXNldF8yMTAsdjIxMCk7CisJbXNsZWVwKDEpOwogCiAvKiByZXNldCB0aGUgcGVyaXBoaWNhbCBkZXZpY2VzICovCiAKQEAgLTE4Niw2ICsxOTcsMjUgQEAKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxtaXNjXzIwNCx2MjA0KTsKIH0KIAordm9pZCBmbGV4Y29wX3Jlc2V0X2Jsb2NrXzMwMChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQoreworCWZsZXhjb3BfaWJpX3ZhbHVlIHYyMDhfc2F2ZSA9IGZjLT5yZWFkX2liaV9yZWcoZmMsY3RybF8yMDgpLAorCQkJCQkgIHYyMTAgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHN3X3Jlc2V0XzIxMCk7CisKKwlkZWJfcmR1bXAoIjIwODogJTA4eCwgMjEwOiAlMDh4XG4iLHYyMDhfc2F2ZS5yYXcsdjIxMC5yYXcpOworCisJZmMtPndyaXRlX2liaV9yZWcoZmMsY3RybF8yMDgsaWJpX3plcm8pOworCisJdjIxMC5zd19yZXNldF8yMTAucmVzZXRfYmxvY2tfMzAwID0gMTsKKwl2MjEwLnN3X3Jlc2V0XzIxMC5CbG9ja19yZXNldF9lbmFibGUgPSAweGIyOworCisJZmMtPndyaXRlX2liaV9yZWcoZmMsc3dfcmVzZXRfMjEwLHYyMTApOworCW1zbGVlcCgxKTsKKworCWZjLT53cml0ZV9pYmlfcmVnKGZjLGN0cmxfMjA4LHYyMDhfc2F2ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGZsZXhjb3BfcmVzZXRfYmxvY2tfMzAwKTsKKwogc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmbGV4Y29wX2RldmljZV9rbWFsbG9jKHNpemVfdCBidXNfc3BlY2lmaWNfbGVuKQogewogCXZvaWQgKmJ1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmgKaW5kZXggY2FhMzQzYS4uMGNlYmUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmgKQEAgLTI2LDUgKzI2LDYgQEAKICNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSAgIGRwcmludGsoMHgwNCxhcmdzKQogI2RlZmluZSBkZWJfdHMoYXJncy4uLikgICAgZHByaW50aygweDA4LGFyZ3MpCiAjZGVmaW5lIGRlYl9zcmFtKGFyZ3MuLi4pICBkcHJpbnRrKDB4MTAsYXJncykKKyNkZWZpbmUgZGViX3JkdW1wKGFyZ3MuLi4pICBkcHJpbnRrKDB4MjAsYXJncykKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2JlLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5YTY3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfYmUuaApAQCAtMCwwICsxLDQ1OCBAQAorLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqCisgKiByZWdpc3RlciBkZXNjcmlwdGlvbnMKKyAqCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKi8KKworLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCB0aGluZ3MgaGVyZS4gKi8KKyNpZm5kZWYgX19GTEVYQ09QX0lCSV9WQUxVRV9JTkNMVURFRF9fCisjZGVmaW5lIF9fRkxFWENPUF9JQklfVkFMVUVfSU5DTFVERURfXworCit0eXBlZGVmIHVuaW9uIHsKKwl1MzIgcmF3OworCisJc3RydWN0IHsKKwkJdTMyIGRtYV9hZGRyZXNzMCAgICAgICAgICAgICAgICAgICA6MzA7CisJCXUzMiBkbWFfME5vX3VwZGF0ZSAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgZG1hXzBzdGFydCAgICAgICAgICAgICAgICAgICAgIDogMTsKKwl9IGRtYV8weDA7CisKKwlzdHJ1Y3QgeworCQl1MzIgZG1hX2FkZHJfc2l6ZSAgICAgICAgICAgICAgICAgIDoyNDsKKwkJdTMyIERNQV9tYXhwYWNrZXRzICAgICAgICAgICAgICAgICA6IDg7CisJfSBkbWFfMHg0X3JlbWFwOworCisJc3RydWN0IHsKKwkJdTMyIGRtYV9hZGRyX3NpemUgICAgICAgICAgICAgICAgICA6MjQ7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgZG1hMXRpbWVyICAgICAgICAgICAgICAgICAgICAgIDogNzsKKwl9IGRtYV8weDRfcmVhZDsKKworCXN0cnVjdCB7CisJCXUzMiBkbWFfYWRkcl9zaXplICAgICAgICAgICAgICAgICAgOjI0OworCQl1MzIgZG1hdGltZXIgICAgICAgICAgICAgICAgICAgICAgIDogNzsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJfSBkbWFfMHg0X3dyaXRlOworCisJc3RydWN0IHsKKwkJdTMyIGRtYV9jdXJfYWRkciAgICAgICAgICAgICAgICAgICA6MzA7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCX0gZG1hXzB4ODsKKworCXN0cnVjdCB7CisJCXUzMiBkbWFfYWRkcmVzczEgICAgICAgICAgICAgICAgICAgOjMwOworCQl1MzIgcmVtYXBfZW5hYmxlICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGRtYV8xc3RhcnQgICAgICAgICAgICAgICAgICAgICA6IDE7CisJfSBkbWFfMHhjOworCisJc3RydWN0IHsKKwkJdTMyIHN0X2RvbmUgICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBub19iYXNlX2FkZHJfYWNrX2Vycm9yICAgICAgICAgOiAxOworCQl1MzIgdHdvV1NfcG9ydF9yZWcgICAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIHRvdGFsX2J5dGVzICAgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiB0d29XU19ydyAgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgd29ya2luZ19zdGFydCAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGRhdGExX3JlZyAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBiYXNlYWRkciAgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGNoaXBhZGRyICAgICAgICAgICAgICAgICAgICAgICA6IDc7CisJfSB0d19zbV9jXzEwMDsKKworCXN0cnVjdCB7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgZm9yY2Vfc3RvcCAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGV4bGljaXRfc3RvcHMgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBkYXRhNF9yZWcgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgZGF0YTNfcmVnICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIGRhdGEyX3JlZyAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJfSB0d19zbV9jXzEwNDsKKworCXN0cnVjdCB7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOjE5OworCQl1MzIgdGxvMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNTsKKwkJdTMyIHJlc2VydmVkMSAgICAgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiB0aGkxICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA2OworCX0gdHdfc21fY18xMDg7CisKKwlzdHJ1Y3QgeworCQl1MzIgcmVzZXJ2ZWQyICAgICAgICAgICAgICAgICAgICAgIDoxOTsKKwkJdTMyIHRsbzEgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDU7CisJCXUzMiByZXNlcnZlZDEgICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgdGhpMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNjsKKwl9IHR3X3NtX2NfMTBjOworCisJc3RydWN0IHsKKwkJdTMyIHJlc2VydmVkMiAgICAgICAgICAgICAgICAgICAgICA6MTk7CisJCXUzMiB0bG8xICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA1OworCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIHRoaTEgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDY7CisJfSB0d19zbV9jXzExMDsKKworCXN0cnVjdCB7CisJCXUzMiBMTkJfQ1RMUHJlc2NhbGVyX3NpZyAgICAgICAgICAgOiAyOworCQl1MzIgTE5CX0NUTExvd0NvdW50X3NpZyAgICAgICAgICAgIDoxNTsKKwkJdTMyIExOQl9DVExIaWdoQ291bnRfc2lnICAgICAgICAgICA6MTU7CisJfSBsbmJfc3dpdGNoX2ZyZXFfMjAwOworCisJc3RydWN0IHsKKwkJdTMyIFJldl9OX3NpZ19yZXNlcnZlZDIgICAgICAgICAgICA6IDE7CisJCXUzMiBSZXZfTl9zaWdfY2FwcyAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgUmV2X05fc2lnX3Jlc2VydmVkMSAgICAgICAgICAgIDogMjsKKwkJdTMyIFJldl9OX3NpZ19yZXZpc2lvbl9oaSAgICAgICAgICA6IDQ7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOjIwOworCQl1MzIgUGVyX3Jlc2V0X3NpZyAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIExOQl9MX0hfc2lnICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBBQ1BJM19zaWcgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgQUNQSTFfc2lnICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwl9IG1pc2NfMjA0OworCisJc3RydWN0IHsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6IDk7CisJCXUzMiBNYWlsYm94X2Zyb21fVjhfRW5hYmxlX3NpZyAgICAgOiAxOworCQl1MzIgRE1BMl9TaXplX0lSUV9FbmFibGVfc2lnICAgICAgIDogMTsKKwkJdTMyIERNQTFfU2l6ZV9JUlFfRW5hYmxlX3NpZyAgICAgICA6IDE7CisJCXUzMiBETUEyX1RpbWVyX0VuYWJsZV9zaWcgICAgICAgICAgOiAxOworCQl1MzIgRE1BMl9JUlFfRW5hYmxlX3NpZyAgICAgICAgICAgIDogMTsKKwkJdTMyIERNQTFfVGltZXJfRW5hYmxlX3NpZyAgICAgICAgICA6IDE7CisJCXUzMiBETUExX0lSUV9FbmFibGVfc2lnICAgICAgICAgICAgOiAxOworCQl1MzIgUmN2X0RhdGFfc2lnICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIE1BQ19maWx0ZXJfTW9kZV9zaWcgICAgICAgICAgICA6IDE7CisJCXUzMiBNdWx0aTJfRW5hYmxlX3NpZyAgICAgICAgICAgICAgOiAxOworCQl1MzIgUGVyX0NBX0VuYWJsZV9zaWcgICAgICAgICAgICAgIDogMTsKKwkJdTMyIFNNQ19FbmFibGVfc2lnICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBDQV9FbmFibGVfc2lnICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgV0FOX0NBX0VuYWJsZV9zaWcgICAgICAgICAgICAgIDogMTsKKwkJdTMyIFdBTl9FbmFibGVfc2lnICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBNYXNrX2ZpbHRlcl9zaWcgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgTnVsbF9maWx0ZXJfc2lnICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIEVDTV9maWx0ZXJfc2lnICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBFTU1fZmlsdGVyX3NpZyAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgUE1UX2ZpbHRlcl9zaWcgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIFBDUl9maWx0ZXJfc2lnICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBTdHJlYW0yX2ZpbHRlcl9zaWcgICAgICAgICAgICAgOiAxOworCQl1MzIgU3RyZWFtMV9maWx0ZXJfc2lnICAgICAgICAgICAgIDogMTsKKwl9IGN0cmxfMjA4OworCisJc3RydWN0IHsKKwkJdTMyIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICA6MjE7CisJCXUzMiBUcmFuc3BvcnRfRXJyb3IgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgTExDX1NOQVBfRkxBR19zZXQgICAgICAgICAgICAgIDogMTsKKwkJdTMyIENvbnRpbnVpdHlfZXJyb3JfZmxhZyAgICAgICAgICA6IDE7CisJCXUzMiBEYXRhX3JlY2VpdmVyX2Vycm9yICAgICAgICAgICAgOiAxOworCQl1MzIgTWFpbGJveF9mcm9tX1Y4X1N0YXR1c19zaWcgICAgIDogMTsKKwkJdTMyIERNQTJfU2l6ZV9JUlFfU3RhdHVzICAgICAgICAgICA6IDE7CisJCXUzMiBETUExX1NpemVfSVJRX1N0YXR1cyAgICAgICAgICAgOiAxOworCQl1MzIgRE1BMl9UaW1lcl9TdGF0dXMgICAgICAgICAgICAgIDogMTsKKwkJdTMyIERNQTJfSVJRX1N0YXR1cyAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBETUExX1RpbWVyX1N0YXR1cyAgICAgICAgICAgICAgOiAxOworCQl1MzIgRE1BMV9JUlFfU3RhdHVzICAgICAgICAgICAgICAgIDogMTsKKwl9IGlycV8yMGM7CisKKwlzdHJ1Y3QgeworCQl1MzIgU3BlY2lhbF9jb250cm9scyAgICAgICAgICAgICAgIDoxNjsKKwkJdTMyIEJsb2NrX3Jlc2V0X2VuYWJsZSAgICAgICAgICAgICA6IDg7CisJCXUzMiByZXNldF9ibG9ja183MDAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXRfYmxvY2tfNjAwICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHJlc2V0X2Jsb2NrXzUwMCAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNldF9ibG9ja180MDAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXRfYmxvY2tfMzAwICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHJlc2V0X2Jsb2NrXzIwMCAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNldF9ibG9ja18xMDAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXRfYmxvY2tfMDAwICAgICAgICAgICAgICAgIDogMTsKKwl9IHN3X3Jlc2V0XzIxMDsKKworCXN0cnVjdCB7CisJCXUzMiB1bnVzZWQyICAgICAgICAgICAgICAgICAgICAgICAgOjIwOworCQl1MzIgcG9sYXJpdHlfUFNfRVJSX3NpZyAgICAgICAgICAgIDogMTsKKwkJdTMyIHBvbGFyaXR5X1BTX1NZTkNfc2lnICAgICAgICAgICA6IDE7CisJCXUzMiBwb2xhcml0eV9QU19WQUxJRF9zaWcgICAgICAgICAgOiAxOworCQl1MzIgcG9sYXJpdHlfUFNfQ0xLX3NpZyAgICAgICAgICAgIDogMTsKKwkJdTMyIHVudXNlZDEgICAgICAgICAgICAgICAgICAgICAgICA6IDM7CisJCXUzMiBzMnBfc2VsX3NpZyAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgc2VjdGlvbl9wa2dfZW5hYmxlX3NpZyAgICAgICAgIDogMTsKKwkJdTMyIGhhbHRfVjhfc2lnICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiB2MldTX29lX3NpZyAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgdnVhcnRfb2Vfc2lnICAgICAgICAgICAgICAgICAgIDogMTsKKwl9IG1pc2NfMjE0OworCisJc3RydWN0IHsKKwkJdTMyIE1haWxib3hfZnJvbV9WOCAgICAgICAgICAgICAgICA6MzI7CisJfSBtYm94X3Y4X3RvX2hvc3RfMjE4OworCisJc3RydWN0IHsKKwkJdTMyIHN5c3JhbWFjY2Vzc19idXNtdXN0ZXIgICAgICAgICA6IDE7CisJCXUzMiBzeXNyYW1hY2Nlc3Nfd3JpdGUgICAgICAgICAgICAgOiAxOworCQl1MzIgdW51c2VkICAgICAgICAgICAgICAgICAgICAgICAgIDogNzsKKwkJdTMyIHN5c3JhbWFjY2Vzc19hZGRyICAgICAgICAgICAgICA6MTU7CisJCXUzMiBzeXNyYW1hY2Nlc3NfZGF0YSAgICAgICAgICAgICAgOiA4OworCX0gbWJveF9ob3N0X3RvX3Y4XzIxYzsKKworCXN0cnVjdCB7CisJCXUzMiBkZWJ1Z19maWZvX3Byb2JsZW0gICAgICAgICAgICAgOiAxOworCQl1MzIgZGVidWdfZmxhZ193cml0ZV9zdGF0dXMwMCAgICAgIDogMTsKKwkJdTMyIFN0cmVhbTJfdHJhbnMgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBTdHJlYW0yX1BJRCAgICAgICAgICAgICAgICAgICAgOjEzOworCQl1MzIgZGVidWdfZmxhZ19waWRfc2F2ZWQgICAgICAgICAgIDogMTsKKwkJdTMyIE1BQ19NdWx0aWNhc3RfZmlsdGVyICAgICAgICAgICA6IDE7CisJCXUzMiBTdHJlYW0xX3RyYW5zICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgU3RyZWFtMV9QSUQgICAgICAgICAgICAgICAgICAgIDoxMzsKKwl9IHBpZF9maWx0ZXJfMzAwOworCisJc3RydWN0IHsKKwkJdTMyIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiBQTVRfdHJhbnMgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgUE1UX1BJRCAgICAgICAgICAgICAgICAgICAgICAgIDoxMzsKKwkJdTMyIGRlYnVnX292ZXJydW4yICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBkZWJ1Z19vdmVycnVuMyAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgUENSX3RyYW5zICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIFBDUl9QSUQgICAgICAgICAgICAgICAgICAgICAgICA6MTM7CisJfSBwaWRfZmlsdGVyXzMwNDsKKworCXN0cnVjdCB7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgRUNNX3RyYW5zICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIEVDTV9QSUQgICAgICAgICAgICAgICAgICAgICAgICA6MTM7CisJCXUzMiBFTU1fZmlsdGVyXzYgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgRU1NX2ZpbHRlcl80ICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIEVNTV90cmFucyAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBFTU1fUElEICAgICAgICAgICAgICAgICAgICAgICAgOjEzOworCX0gcGlkX2ZpbHRlcl8zMDg7CisKKwlzdHJ1Y3QgeworCQl1MzIgdW51c2VkMiAgICAgICAgICAgICAgICAgICAgICAgIDogMzsKKwkJdTMyIEdyb3VwX21hc2sgICAgICAgICAgICAgICAgICAgICA6MTM7CisJCXUzMiB1bnVzZWQxICAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgR3JvdXBfdHJhbnMgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIEdyb3VwX1BJRCAgICAgICAgICAgICAgICAgICAgICA6MTM7CisJfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzBfNzsKKworCXN0cnVjdCB7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOjE1OworCQl1MzIgbmV0X21hc3Rlcl9yZWFkICAgICAgICAgICAgICAgIDoxNzsKKwl9IHBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfMTsKKworCXN0cnVjdCB7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOjE1OworCQl1MzIgbmV0X21hc3Rlcl93cml0ZSAgICAgICAgICAgICAgIDoxNzsKKwl9IHBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfMjsKKworCXN0cnVjdCB7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOjE1OworCQl1MzIgbmV4dF9uZXRfbWFzdGVyX3dyaXRlICAgICAgICAgIDoxNzsKKwl9IHBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfMzsKKworCXN0cnVjdCB7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOiA1OworCQl1MzIgc3RhY2tfcmVhZCAgICAgICAgICAgICAgICAgICAgIDoxMDsKKwkJdTMyIHJlc2VydmVkMSAgICAgICAgICAgICAgICAgICAgICA6IDY7CisJCXUzMiBzdGF0ZV93cml0ZSAgICAgICAgICAgICAgICAgICAgOjEwOworCQl1MzIgdW51c2VkMSAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwl9IHBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfNDsKKworCXN0cnVjdCB7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOjIyOworCQl1MzIgc3RhY2tfY250ICAgICAgICAgICAgICAgICAgICAgIDoxMDsKKwl9IHBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfNTsKKworCXN0cnVjdCB7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiA0OworCQl1MzIgZGF0YV9zaXplX3JlZyAgICAgICAgICAgICAgICAgIDoxMjsKKwkJdTMyIHdyaXRlX3N0YXR1czQgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiB3cml0ZV9zdGF0dXMxICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzMwMCAgICAgICAgICAgIDogMjsKKwkJdTMyIHBpZF9mc21fc2F2ZV9yZWc0ICAgICAgICAgICAgICA6IDI7CisJCXUzMiBwaWRfZnNtX3NhdmVfcmVnMyAgICAgICAgICAgICAgOiAyOworCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzIgICAgICAgICAgICAgIDogMjsKKwkJdTMyIHBpZF9mc21fc2F2ZV9yZWcxICAgICAgICAgICAgICA6IDI7CisJCXUzMiBwaWRfZnNtX3NhdmVfcmVnMCAgICAgICAgICAgICAgOiAyOworCX0gcGlkX2ZpbHRlcl8zMGNfZXh0X2luZF82OworCisJc3RydWN0IHsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6MjI7CisJCXUzMiBwYXNzX2FsbHRhYmxlcyAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgQUJfc2VsZWN0ICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGV4dHJhX2luZGV4X3JlZyAgICAgICAgICAgICAgICA6IDM7CisJCXUzMiBpbmRleF9yZWcgICAgICAgICAgICAgICAgICAgICAgOiA1OworCX0gaW5kZXhfcmVnXzMxMDsKKworCXN0cnVjdCB7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOjE3OworCQl1MzIgUElEX2VuYWJsZV9iaXQgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIFBJRF90cmFucyAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBQSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEzOworCX0gcGlkX25fcmVnXzMxNDsKKworCXN0cnVjdCB7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgSGlnaEFCX2JpdCAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIEVuYWJsZV9iaXQgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBBNl9ieXRlICAgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgQTVfYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIEE0X2J5dGUgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJfSBtYWNfbG93X3JlZ18zMTg7CisKKwlzdHJ1Y3QgeworCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIEEzX2J5dGUgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBBMl9ieXRlICAgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgQTFfYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwl9IG1hY19oaWdoX3JlZ18zMWM7CisKKwlzdHJ1Y3QgeworCQl1MzIgZGF0YV9UYWdfSUQgICAgICAgICAgICAgICAgICAgIDoxNjsKKwkJdTMyIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICA6MTY7CisJfSBkYXRhX3RhZ180MDA7CisKKwlzdHJ1Y3QgeworCQl1MzIgQ2FyZF9JRGJ5dGUzICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIENhcmRfSURieXRlNCAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBDYXJkX0lEYnl0ZTUgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgQ2FyZF9JRGJ5dGU2ICAgICAgICAgICAgICAgICAgIDogODsKKwl9IGNhcmRfaWRfNDA4OworCisJc3RydWN0IHsKKwkJdTMyIENhcmRfSURieXRlMSAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBDYXJkX0lEYnl0ZTIgICAgICAgICAgICAgICAgICAgOiA4OworCX0gY2FyZF9pZF80MGM7CisKKwlzdHJ1Y3QgeworCQl1MzIgTUFDNiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIE1BQzMgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBNQUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgTUFDMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwl9IG1hY19hZGRyZXNzXzQxODsKKworCXN0cnVjdCB7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOjE2OworCQl1MzIgTUFDOCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIE1BQzcgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJfSBtYWNfYWRkcmVzc180MWM7CisKKwlzdHJ1Y3QgeworCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgIDoyMTsKKwkJdTMyIHR4YnVmZmVtcHR5ICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBSZWNlaXZlQnl0ZUZyYW1lRXJyb3IgICAgICAgICAgOiAxOworCQl1MzIgUmVjZWl2ZURhdGFSZWFkeSAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHRyYW5zbWl0dGVyX2RhdGFfYnl0ZSAgICAgICAgICA6IDg7CisJfSBjaV82MDA7CisKKwlzdHJ1Y3QgeworCQl1MzIgcGlfY29tcG9uZW50X3JlZyAgICAgICAgICAgICAgIDogMzsKKwkJdTMyIHBpX3J3ICAgICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBwaV9oYSAgICAgICAgICAgICAgICAgICAgICAgICAgOjIwOworCQl1MzIgcGlfZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwl9IHBpXzYwNDsKKworCXN0cnVjdCB7CisJCXUzMiBwaV9idXN5X24gICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcGlfd2FpdF9uICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHBpX3RpbWVvdXRfc3RhdHVzICAgICAgICAgICAgICA6IDE7CisJCXUzMiBwaV9DaU1heF9JUlFfbiAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgY29uZmlnX2NjbGsgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGNvbmZpZ19jc19uICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBjb25maWdfd3JfbiAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgY29uZmlnX1Byb2dfbiAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGNvbmZpZ19Jbml0X3N0YXQgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBjb25maWdfRG9uZV9zdGF0ICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcGNtY2lhX2JfbW9kX3B3cl9uICAgICAgICAgICAgIDogMTsKKwkJdTMyIHBjbWNpYV9hX21vZF9wd3JfbiAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOiAzOworCQl1MzIgVGltZXJfYWRkciAgICAgICAgICAgICAgICAgICAgIDogNTsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiB0aW1lcl9kYXRhICAgICAgICAgICAgICAgICAgICAgOiA3OworCQl1MzIgVGltZXJfTG9hZF9yZXEgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIFRpbWVyX1JlYWRfcmVxICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBvbmNlY3ljbGVfcmVhZCAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgc2VyaWFsUmVzZXQgICAgICAgICAgICAgICAgICAgIDogMTsKKwl9IHBpXzYwODsKKworCXN0cnVjdCB7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgcndfZmxhZyAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGR2Yl9lbiAgICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBrZXlfYXJyYXlfcm93ICAgICAgICAgICAgICAgICAgOiA1OworCQl1MzIga2V5X2FycmF5X2NvbCAgICAgICAgICAgICAgICAgIDogMzsKKwkJdTMyIGtleV9jb2RlICAgICAgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiBrZXlfZW5hYmxlICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgUElEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxMzsKKwl9IGR2Yl9yZWdfNjBjOworCisJc3RydWN0IHsKKwkJdTMyIHN0YXJ0X3NyYW1faWJpICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgY2VfcGluX3JlZyAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIG9lX3Bpbl9yZWcgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNlcnZlZDEgICAgICAgICAgICAgICAgICAgICAgOiAzOworCQl1MzIgc2NfeGZlcl9iaXQgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHNyYW1fZGF0YSAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBzcmFtX3J3ICAgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgc3JhbV9hZGRyICAgICAgICAgICAgICAgICAgICAgIDoxNTsKKwl9IHNyYW1fY3RybF9yZWdfNzAwOworCisJc3RydWN0IHsKKwkJdTMyIG5ldF9hZGRyX3dyaXRlICAgICAgICAgICAgICAgICA6MTY7CisJCXUzMiBuZXRfYWRkcl9yZWFkICAgICAgICAgICAgICAgICAgOjE2OworCX0gbmV0X2J1Zl9yZWdfNzA0OworCisJc3RydWN0IHsKKwkJdTMyIGNhaV9jbnQgICAgICAgICAgICAgICAgICAgICAgICA6IDQ7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgY2FpX3dyaXRlICAgICAgICAgICAgICAgICAgICAgIDoxMTsKKwkJdTMyIHJlc2VydmVkMSAgICAgICAgICAgICAgICAgICAgICA6IDU7CisJCXUzMiBjYWlfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgOjExOworCX0gY2FpX2J1Zl9yZWdfNzA4OworCisJc3RydWN0IHsKKwkJdTMyIGNhb19jbnQgICAgICAgICAgICAgICAgICAgICAgICA6IDQ7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgY2FwX3dyaXRlICAgICAgICAgICAgICAgICAgICAgIDoxMTsKKwkJdTMyIHJlc2VydmVkMSAgICAgICAgICAgICAgICAgICAgICA6IDU7CisJCXUzMiBjYW9fcmVhZCAgICAgICAgICAgICAgICAgICAgICAgOjExOworCX0gY2FvX2J1Zl9yZWdfNzBjOworCisJc3RydWN0IHsKKwkJdTMyIG1lZGlhX2NudCAgICAgICAgICAgICAgICAgICAgICA6IDQ7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgbWVkaWFfd3JpdGUgICAgICAgICAgICAgICAgICAgIDoxMTsKKwkJdTMyIHJlc2VydmVkMSAgICAgICAgICAgICAgICAgICAgICA6IDU7CisJCXUzMiBtZWRpYV9yZWFkICAgICAgICAgICAgICAgICAgICAgOjExOworCX0gbWVkaWFfYnVmX3JlZ183MTA7CisKKwlzdHJ1Y3QgeworCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgIDoxNzsKKwkJdTMyIGN0cmxfbWF4aW11bWZpbGwgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBjdHJsX3NyYW1kbWEgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgY3RybF91c2Jfd2FuICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGNhb19vdmZsb3dfZXJyb3IgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBjYWlfb3ZmbG93X2Vycm9yICAgICAgICAgICAgICAgOiAxOworCQl1MzIgbWVkaWFfb3ZmbG93X2Vycm9yICAgICAgICAgICAgIDogMTsKKwkJdTMyIG5ldF9vdmZsb3dfZXJyb3IgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBNRURJQV9EZXN0ICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgQ0FPX0Rlc3QgICAgICAgICAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIENBSV9EZXN0ICAgICAgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiBORVRfRGVzdCAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCX0gc3JhbV9kZXN0X3JlZ183MTQ7CisKKwlzdHJ1Y3QgeworCQl1MzIgcmVzZXJ2ZWQzICAgICAgICAgICAgICAgICAgICAgIDoxMTsKKwkJdTMyIG5ldF9hZGRyX3dyaXRlICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOiAzOworCQl1MzIgbmV0X2FkZHJfcmVhZCAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHJlc2VydmVkMSAgICAgICAgICAgICAgICAgICAgICA6IDQ7CisJCXUzMiBuZXRfY250ICAgICAgICAgICAgICAgICAgICAgICAgOjEyOworCX0gbmV0X2J1Zl9yZWdfNzE4OworCisJc3RydWN0IHsKKwkJdTMyIHJlc2VydmVkMyAgICAgICAgICAgICAgICAgICAgICA6IDQ7CisJCXUzMiB3YW5fcGt0X2ZyYW1lICAgICAgICAgICAgICAgICAgOiA0OworCQl1MzIgcmVzZXJ2ZWQyICAgICAgICAgICAgICAgICAgICAgIDogNDsKKwkJdTMyIHNyYW1fbWVtbWFwICAgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiBzcmFtX2NoaXAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgd2FuX3dhaXRfc3RhdGUgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIHJlc2VydmVkMSAgICAgICAgICAgICAgICAgICAgICA6IDY7CisJCXUzMiB3YW5fc3BlZWRfc2lnICAgICAgICAgICAgICAgICAgOiAyOworCX0gd2FuX2N0cmxfcmVnXzcxYzsKK30gZmxleGNvcF9pYmlfdmFsdWU7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9sZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9sZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZjIzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2xlLmgKQEAgLTAsMCArMSw0NTggQEAKKy8qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKgorICogcmVnaXN0ZXIgZGVzY3JpcHRpb25zCisgKgorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICovCisKKy8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgdGhpbmdzIGhlcmUuICovCisjaWZuZGVmIF9fRkxFWENPUF9JQklfVkFMVUVfSU5DTFVERURfXworI2RlZmluZSBfX0ZMRVhDT1BfSUJJX1ZBTFVFX0lOQ0xVREVEX18KKwordHlwZWRlZiB1bmlvbiB7CisJdTMyIHJhdzsKKworCXN0cnVjdCB7CisJCXUzMiBkbWFfMHN0YXJ0ICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgZG1hXzBOb191cGRhdGUgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGRtYV9hZGRyZXNzMCAgICAgICAgICAgICAgICAgICA6MzA7CisJfSBkbWFfMHgwOworCisJc3RydWN0IHsKKwkJdTMyIERNQV9tYXhwYWNrZXRzICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBkbWFfYWRkcl9zaXplICAgICAgICAgICAgICAgICAgOjI0OworCX0gZG1hXzB4NF9yZW1hcDsKKworCXN0cnVjdCB7CisJCXUzMiBkbWExdGltZXIgICAgICAgICAgICAgICAgICAgICAgOiA3OworCQl1MzIgdW51c2VkICAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGRtYV9hZGRyX3NpemUgICAgICAgICAgICAgICAgICA6MjQ7CisJfSBkbWFfMHg0X3JlYWQ7CisKKwlzdHJ1Y3QgeworCQl1MzIgdW51c2VkICAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGRtYXRpbWVyICAgICAgICAgICAgICAgICAgICAgICA6IDc7CisJCXUzMiBkbWFfYWRkcl9zaXplICAgICAgICAgICAgICAgICAgOjI0OworCX0gZG1hXzB4NF93cml0ZTsKKworCXN0cnVjdCB7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgZG1hX2N1cl9hZGRyICAgICAgICAgICAgICAgICAgIDozMDsKKwl9IGRtYV8weDg7CisKKwlzdHJ1Y3QgeworCQl1MzIgZG1hXzFzdGFydCAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHJlbWFwX2VuYWJsZSAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBkbWFfYWRkcmVzczEgICAgICAgICAgICAgICAgICAgOjMwOworCX0gZG1hXzB4YzsKKworCXN0cnVjdCB7CisJCXUzMiBjaGlwYWRkciAgICAgICAgICAgICAgICAgICAgICAgOiA3OworCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGJhc2VhZGRyICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBkYXRhMV9yZWcgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgd29ya2luZ19zdGFydCAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHR3b1dTX3J3ICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiB0b3RhbF9ieXRlcyAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgdHdvV1NfcG9ydF9yZWcgICAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIG5vX2Jhc2VfYWRkcl9hY2tfZXJyb3IgICAgICAgICA6IDE7CisJCXUzMiBzdF9kb25lICAgICAgICAgICAgICAgICAgICAgICAgOiAxOworCX0gdHdfc21fY18xMDA7CisKKwlzdHJ1Y3QgeworCQl1MzIgZGF0YTJfcmVnICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIGRhdGEzX3JlZyAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBkYXRhNF9yZWcgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgZXhsaWNpdF9zdG9wcyAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGZvcmNlX3N0b3AgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiA2OworCX0gdHdfc21fY18xMDQ7CisKKwlzdHJ1Y3QgeworCQl1MzIgdGhpMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNjsKKwkJdTMyIHJlc2VydmVkMSAgICAgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiB0bG8xICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA1OworCQl1MzIgcmVzZXJ2ZWQyICAgICAgICAgICAgICAgICAgICAgIDoxOTsKKwl9IHR3X3NtX2NfMTA4OworCisJc3RydWN0IHsKKwkJdTMyIHRoaTEgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDY7CisJCXUzMiByZXNlcnZlZDEgICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgdGxvMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNTsKKwkJdTMyIHJlc2VydmVkMiAgICAgICAgICAgICAgICAgICAgICA6MTk7CisJfSB0d19zbV9jXzEwYzsKKworCXN0cnVjdCB7CisJCXUzMiB0aGkxICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIHRsbzEgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDU7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOjE5OworCX0gdHdfc21fY18xMTA7CisKKwlzdHJ1Y3QgeworCQl1MzIgTE5CX0NUTEhpZ2hDb3VudF9zaWcgICAgICAgICAgIDoxNTsKKwkJdTMyIExOQl9DVExMb3dDb3VudF9zaWcgICAgICAgICAgICA6MTU7CisJCXUzMiBMTkJfQ1RMUHJlc2NhbGVyX3NpZyAgICAgICAgICAgOiAyOworCX0gbG5iX3N3aXRjaF9mcmVxXzIwMDsKKworCXN0cnVjdCB7CisJCXUzMiBBQ1BJMV9zaWcgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgQUNQSTNfc2lnICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIExOQl9MX0hfc2lnICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBQZXJfcmVzZXRfc2lnICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgIDoyMDsKKwkJdTMyIFJldl9OX3NpZ19yZXZpc2lvbl9oaSAgICAgICAgICA6IDQ7CisJCXUzMiBSZXZfTl9zaWdfcmVzZXJ2ZWQxICAgICAgICAgICAgOiAyOworCQl1MzIgUmV2X05fc2lnX2NhcHMgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIFJldl9OX3NpZ19yZXNlcnZlZDIgICAgICAgICAgICA6IDE7CisJfSBtaXNjXzIwNDsKKworCXN0cnVjdCB7CisJCXUzMiBTdHJlYW0xX2ZpbHRlcl9zaWcgICAgICAgICAgICAgOiAxOworCQl1MzIgU3RyZWFtMl9maWx0ZXJfc2lnICAgICAgICAgICAgIDogMTsKKwkJdTMyIFBDUl9maWx0ZXJfc2lnICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBQTVRfZmlsdGVyX3NpZyAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgRU1NX2ZpbHRlcl9zaWcgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIEVDTV9maWx0ZXJfc2lnICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBOdWxsX2ZpbHRlcl9zaWcgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgTWFza19maWx0ZXJfc2lnICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIFdBTl9FbmFibGVfc2lnICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBXQU5fQ0FfRW5hYmxlX3NpZyAgICAgICAgICAgICAgOiAxOworCQl1MzIgQ0FfRW5hYmxlX3NpZyAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIFNNQ19FbmFibGVfc2lnICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBQZXJfQ0FfRW5hYmxlX3NpZyAgICAgICAgICAgICAgOiAxOworCQl1MzIgTXVsdGkyX0VuYWJsZV9zaWcgICAgICAgICAgICAgIDogMTsKKwkJdTMyIE1BQ19maWx0ZXJfTW9kZV9zaWcgICAgICAgICAgICA6IDE7CisJCXUzMiBSY3ZfRGF0YV9zaWcgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgRE1BMV9JUlFfRW5hYmxlX3NpZyAgICAgICAgICAgIDogMTsKKwkJdTMyIERNQTFfVGltZXJfRW5hYmxlX3NpZyAgICAgICAgICA6IDE7CisJCXUzMiBETUEyX0lSUV9FbmFibGVfc2lnICAgICAgICAgICAgOiAxOworCQl1MzIgRE1BMl9UaW1lcl9FbmFibGVfc2lnICAgICAgICAgIDogMTsKKwkJdTMyIERNQTFfU2l6ZV9JUlFfRW5hYmxlX3NpZyAgICAgICA6IDE7CisJCXUzMiBETUEyX1NpemVfSVJRX0VuYWJsZV9zaWcgICAgICAgOiAxOworCQl1MzIgTWFpbGJveF9mcm9tX1Y4X0VuYWJsZV9zaWcgICAgIDogMTsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6IDk7CisJfSBjdHJsXzIwODsKKworCXN0cnVjdCB7CisJCXUzMiBETUExX0lSUV9TdGF0dXMgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgRE1BMV9UaW1lcl9TdGF0dXMgICAgICAgICAgICAgIDogMTsKKwkJdTMyIERNQTJfSVJRX1N0YXR1cyAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBETUEyX1RpbWVyX1N0YXR1cyAgICAgICAgICAgICAgOiAxOworCQl1MzIgRE1BMV9TaXplX0lSUV9TdGF0dXMgICAgICAgICAgIDogMTsKKwkJdTMyIERNQTJfU2l6ZV9JUlFfU3RhdHVzICAgICAgICAgICA6IDE7CisJCXUzMiBNYWlsYm94X2Zyb21fVjhfU3RhdHVzX3NpZyAgICAgOiAxOworCQl1MzIgRGF0YV9yZWNlaXZlcl9lcnJvciAgICAgICAgICAgIDogMTsKKwkJdTMyIENvbnRpbnVpdHlfZXJyb3JfZmxhZyAgICAgICAgICA6IDE7CisJCXUzMiBMTENfU05BUF9GTEFHX3NldCAgICAgICAgICAgICAgOiAxOworCQl1MzIgVHJhbnNwb3J0X0Vycm9yICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICA6MjE7CisJfSBpcnFfMjBjOworCisJc3RydWN0IHsKKwkJdTMyIHJlc2V0X2Jsb2NrXzAwMCAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNldF9ibG9ja18xMDAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXRfYmxvY2tfMjAwICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHJlc2V0X2Jsb2NrXzMwMCAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNldF9ibG9ja180MDAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXRfYmxvY2tfNTAwICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHJlc2V0X2Jsb2NrXzYwMCAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNldF9ibG9ja183MDAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgQmxvY2tfcmVzZXRfZW5hYmxlICAgICAgICAgICAgIDogODsKKwkJdTMyIFNwZWNpYWxfY29udHJvbHMgICAgICAgICAgICAgICA6MTY7CisJfSBzd19yZXNldF8yMTA7CisKKwlzdHJ1Y3QgeworCQl1MzIgdnVhcnRfb2Vfc2lnICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHYyV1Nfb2Vfc2lnICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBoYWx0X1Y4X3NpZyAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgc2VjdGlvbl9wa2dfZW5hYmxlX3NpZyAgICAgICAgIDogMTsKKwkJdTMyIHMycF9zZWxfc2lnICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiB1bnVzZWQxICAgICAgICAgICAgICAgICAgICAgICAgOiAzOworCQl1MzIgcG9sYXJpdHlfUFNfQ0xLX3NpZyAgICAgICAgICAgIDogMTsKKwkJdTMyIHBvbGFyaXR5X1BTX1ZBTElEX3NpZyAgICAgICAgICA6IDE7CisJCXUzMiBwb2xhcml0eV9QU19TWU5DX3NpZyAgICAgICAgICAgOiAxOworCQl1MzIgcG9sYXJpdHlfUFNfRVJSX3NpZyAgICAgICAgICAgIDogMTsKKwkJdTMyIHVudXNlZDIgICAgICAgICAgICAgICAgICAgICAgICA6MjA7CisJfSBtaXNjXzIxNDsKKworCXN0cnVjdCB7CisJCXUzMiBNYWlsYm94X2Zyb21fVjggICAgICAgICAgICAgICAgOjMyOworCX0gbWJveF92OF90b19ob3N0XzIxODsKKworCXN0cnVjdCB7CisJCXUzMiBzeXNyYW1hY2Nlc3NfZGF0YSAgICAgICAgICAgICAgOiA4OworCQl1MzIgc3lzcmFtYWNjZXNzX2FkZHIgICAgICAgICAgICAgIDoxNTsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6IDc7CisJCXUzMiBzeXNyYW1hY2Nlc3Nfd3JpdGUgICAgICAgICAgICAgOiAxOworCQl1MzIgc3lzcmFtYWNjZXNzX2J1c211c3RlciAgICAgICAgIDogMTsKKwl9IG1ib3hfaG9zdF90b192OF8yMWM7CisKKwlzdHJ1Y3QgeworCQl1MzIgU3RyZWFtMV9QSUQgICAgICAgICAgICAgICAgICAgIDoxMzsKKwkJdTMyIFN0cmVhbTFfdHJhbnMgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBNQUNfTXVsdGljYXN0X2ZpbHRlciAgICAgICAgICAgOiAxOworCQl1MzIgZGVidWdfZmxhZ19waWRfc2F2ZWQgICAgICAgICAgIDogMTsKKwkJdTMyIFN0cmVhbTJfUElEICAgICAgICAgICAgICAgICAgICA6MTM7CisJCXUzMiBTdHJlYW0yX3RyYW5zICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgZGVidWdfZmxhZ193cml0ZV9zdGF0dXMwMCAgICAgIDogMTsKKwkJdTMyIGRlYnVnX2ZpZm9fcHJvYmxlbSAgICAgICAgICAgICA6IDE7CisJfSBwaWRfZmlsdGVyXzMwMDsKKworCXN0cnVjdCB7CisJCXUzMiBQQ1JfUElEICAgICAgICAgICAgICAgICAgICAgICAgOjEzOworCQl1MzIgUENSX3RyYW5zICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGRlYnVnX292ZXJydW4zICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBkZWJ1Z19vdmVycnVuMiAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgUE1UX1BJRCAgICAgICAgICAgICAgICAgICAgICAgIDoxMzsKKwkJdTMyIFBNVF90cmFucyAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCX0gcGlkX2ZpbHRlcl8zMDQ7CisKKwlzdHJ1Y3QgeworCQl1MzIgRU1NX1BJRCAgICAgICAgICAgICAgICAgICAgICAgIDoxMzsKKwkJdTMyIEVNTV90cmFucyAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBFTU1fZmlsdGVyXzQgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgRU1NX2ZpbHRlcl82ICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIEVDTV9QSUQgICAgICAgICAgICAgICAgICAgICAgICA6MTM7CisJCXUzMiBFQ01fdHJhbnMgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgIDogMjsKKwl9IHBpZF9maWx0ZXJfMzA4OworCisJc3RydWN0IHsKKwkJdTMyIEdyb3VwX1BJRCAgICAgICAgICAgICAgICAgICAgICA6MTM7CisJCXUzMiBHcm91cF90cmFucyAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgdW51c2VkMSAgICAgICAgICAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIEdyb3VwX21hc2sgICAgICAgICAgICAgICAgICAgICA6MTM7CisJCXUzMiB1bnVzZWQyICAgICAgICAgICAgICAgICAgICAgICAgOiAzOworCX0gcGlkX2ZpbHRlcl8zMGNfZXh0X2luZF8wXzc7CisKKwlzdHJ1Y3QgeworCQl1MzIgbmV0X21hc3Rlcl9yZWFkICAgICAgICAgICAgICAgIDoxNzsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6MTU7CisJfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzE7CisKKwlzdHJ1Y3QgeworCQl1MzIgbmV0X21hc3Rlcl93cml0ZSAgICAgICAgICAgICAgIDoxNzsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6MTU7CisJfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzI7CisKKwlzdHJ1Y3QgeworCQl1MzIgbmV4dF9uZXRfbWFzdGVyX3dyaXRlICAgICAgICAgIDoxNzsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6MTU7CisJfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzM7CisKKwlzdHJ1Y3QgeworCQl1MzIgdW51c2VkMSAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHN0YXRlX3dyaXRlICAgICAgICAgICAgICAgICAgICA6MTA7CisJCXUzMiByZXNlcnZlZDEgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgc3RhY2tfcmVhZCAgICAgICAgICAgICAgICAgICAgIDoxMDsKKwkJdTMyIHJlc2VydmVkMiAgICAgICAgICAgICAgICAgICAgICA6IDU7CisJfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzQ7CisKKwlzdHJ1Y3QgeworCQl1MzIgc3RhY2tfY250ICAgICAgICAgICAgICAgICAgICAgIDoxMDsKKwkJdTMyIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA6MjI7CisJfSBwaWRfZmlsdGVyXzMwY19leHRfaW5kXzU7CisKKwlzdHJ1Y3QgeworCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIHBpZF9mc21fc2F2ZV9yZWcxICAgICAgICAgICAgICA6IDI7CisJCXUzMiBwaWRfZnNtX3NhdmVfcmVnMiAgICAgICAgICAgICAgOiAyOworCQl1MzIgcGlkX2ZzbV9zYXZlX3JlZzMgICAgICAgICAgICAgIDogMjsKKwkJdTMyIHBpZF9mc21fc2F2ZV9yZWc0ICAgICAgICAgICAgICA6IDI7CisJCXUzMiBwaWRfZnNtX3NhdmVfcmVnMzAwICAgICAgICAgICAgOiAyOworCQl1MzIgd3JpdGVfc3RhdHVzMSAgICAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIHdyaXRlX3N0YXR1czQgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiBkYXRhX3NpemVfcmVnICAgICAgICAgICAgICAgICAgOjEyOworCQl1MzIgdW51c2VkICAgICAgICAgICAgICAgICAgICAgICAgIDogNDsKKwl9IHBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfNjsKKworCXN0cnVjdCB7CisJCXUzMiBpbmRleF9yZWcgICAgICAgICAgICAgICAgICAgICAgOiA1OworCQl1MzIgZXh0cmFfaW5kZXhfcmVnICAgICAgICAgICAgICAgIDogMzsKKwkJdTMyIEFCX3NlbGVjdCAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBwYXNzX2FsbHRhYmxlcyAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgdW51c2VkICAgICAgICAgICAgICAgICAgICAgICAgIDoyMjsKKwl9IGluZGV4X3JlZ18zMTA7CisKKwlzdHJ1Y3QgeworCQl1MzIgUElEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxMzsKKwkJdTMyIFBJRF90cmFucyAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBQSURfZW5hYmxlX2JpdCAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgIDoxNzsKKwl9IHBpZF9uX3JlZ18zMTQ7CisKKwlzdHJ1Y3QgeworCQl1MzIgQTRfYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIEE1X2J5dGUgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBBNl9ieXRlICAgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgRW5hYmxlX2JpdCAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIEhpZ2hBQl9iaXQgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOiA2OworCX0gbWFjX2xvd19yZWdfMzE4OworCisJc3RydWN0IHsKKwkJdTMyIEExX2J5dGUgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBBMl9ieXRlICAgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgQTNfYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJfSBtYWNfaGlnaF9yZWdfMzFjOworCisJc3RydWN0IHsKKwkJdTMyIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICA6MTY7CisJCXUzMiBkYXRhX1RhZ19JRCAgICAgICAgICAgICAgICAgICAgOjE2OworCX0gZGF0YV90YWdfNDAwOworCisJc3RydWN0IHsKKwkJdTMyIENhcmRfSURieXRlNiAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBDYXJkX0lEYnl0ZTUgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgQ2FyZF9JRGJ5dGU0ICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIENhcmRfSURieXRlMyAgICAgICAgICAgICAgICAgICA6IDg7CisJfSBjYXJkX2lkXzQwODsKKworCXN0cnVjdCB7CisJCXUzMiBDYXJkX0lEYnl0ZTIgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgQ2FyZF9JRGJ5dGUxICAgICAgICAgICAgICAgICAgIDogODsKKwl9IGNhcmRfaWRfNDBjOworCisJc3RydWN0IHsKKwkJdTMyIE1BQzEgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBNQUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA4OworCQl1MzIgTUFDMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIE1BQzYgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJfSBtYWNfYWRkcmVzc180MTg7CisKKwlzdHJ1Y3QgeworCQl1MzIgTUFDNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogODsKKwkJdTMyIE1BQzggICAgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOjE2OworCX0gbWFjX2FkZHJlc3NfNDFjOworCisJc3RydWN0IHsKKwkJdTMyIHRyYW5zbWl0dGVyX2RhdGFfYnl0ZSAgICAgICAgICA6IDg7CisJCXUzMiBSZWNlaXZlRGF0YVJlYWR5ICAgICAgICAgICAgICAgOiAxOworCQl1MzIgUmVjZWl2ZUJ5dGVGcmFtZUVycm9yICAgICAgICAgIDogMTsKKwkJdTMyIHR4YnVmZmVtcHR5ICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgOjIxOworCX0gY2lfNjAwOworCisJc3RydWN0IHsKKwkJdTMyIHBpX2QgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBwaV9oYSAgICAgICAgICAgICAgICAgICAgICAgICAgOjIwOworCQl1MzIgcGlfcncgICAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHBpX2NvbXBvbmVudF9yZWcgICAgICAgICAgICAgICA6IDM7CisJfSBwaV82MDQ7CisKKwlzdHJ1Y3QgeworCQl1MzIgc2VyaWFsUmVzZXQgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIG9uY2VjeWNsZV9yZWFkICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBUaW1lcl9SZWFkX3JlcSAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgVGltZXJfTG9hZF9yZXEgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHRpbWVyX2RhdGEgICAgICAgICAgICAgICAgICAgICA6IDc7CisJCXUzMiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgVGltZXJfYWRkciAgICAgICAgICAgICAgICAgICAgIDogNTsKKwkJdTMyIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICA6IDM7CisJCXUzMiBwY21jaWFfYV9tb2RfcHdyX24gICAgICAgICAgICAgOiAxOworCQl1MzIgcGNtY2lhX2JfbW9kX3B3cl9uICAgICAgICAgICAgIDogMTsKKwkJdTMyIGNvbmZpZ19Eb25lX3N0YXQgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBjb25maWdfSW5pdF9zdGF0ICAgICAgICAgICAgICAgOiAxOworCQl1MzIgY29uZmlnX1Byb2dfbiAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGNvbmZpZ193cl9uICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBjb25maWdfY3NfbiAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgY29uZmlnX2NjbGsgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHBpX0NpTWF4X0lSUV9uICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBwaV90aW1lb3V0X3N0YXR1cyAgICAgICAgICAgICAgOiAxOworCQl1MzIgcGlfd2FpdF9uICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHBpX2J1c3lfbiAgICAgICAgICAgICAgICAgICAgICA6IDE7CisJfSBwaV82MDg7CisKKwlzdHJ1Y3QgeworCQl1MzIgUElEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxMzsKKwkJdTMyIGtleV9lbmFibGUgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBrZXlfY29kZSAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIga2V5X2FycmF5X2NvbCAgICAgICAgICAgICAgICAgIDogMzsKKwkJdTMyIGtleV9hcnJheV9yb3cgICAgICAgICAgICAgICAgICA6IDU7CisJCXUzMiBkdmJfZW4gICAgICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcndfZmxhZyAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICA6IDY7CisJfSBkdmJfcmVnXzYwYzsKKworCXN0cnVjdCB7CisJCXUzMiBzcmFtX2FkZHIgICAgICAgICAgICAgICAgICAgICAgOjE1OworCQl1MzIgc3JhbV9ydyAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHNyYW1fZGF0YSAgICAgICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBzY194ZmVyX2JpdCAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgICAgICAgICAgICAgIDogMzsKKwkJdTMyIG9lX3Bpbl9yZWcgICAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBjZV9waW5fcmVnICAgICAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXJ2ZWQyICAgICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHN0YXJ0X3NyYW1faWJpICAgICAgICAgICAgICAgICA6IDE7CisJfSBzcmFtX2N0cmxfcmVnXzcwMDsKKworCXN0cnVjdCB7CisJCXUzMiBuZXRfYWRkcl9yZWFkICAgICAgICAgICAgICAgICAgOjE2OworCQl1MzIgbmV0X2FkZHJfd3JpdGUgICAgICAgICAgICAgICAgIDoxNjsKKwl9IG5ldF9idWZfcmVnXzcwNDsKKworCXN0cnVjdCB7CisJCXUzMiBjYWlfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgOjExOworCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgICAgICAgICAgICAgIDogNTsKKwkJdTMyIGNhaV93cml0ZSAgICAgICAgICAgICAgICAgICAgICA6MTE7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgY2FpX2NudCAgICAgICAgICAgICAgICAgICAgICAgIDogNDsKKwl9IGNhaV9idWZfcmVnXzcwODsKKworCXN0cnVjdCB7CisJCXUzMiBjYW9fcmVhZCAgICAgICAgICAgICAgICAgICAgICAgOjExOworCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgICAgICAgICAgICAgIDogNTsKKwkJdTMyIGNhcF93cml0ZSAgICAgICAgICAgICAgICAgICAgICA6MTE7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgY2FvX2NudCAgICAgICAgICAgICAgICAgICAgICAgIDogNDsKKwl9IGNhb19idWZfcmVnXzcwYzsKKworCXN0cnVjdCB7CisJCXUzMiBtZWRpYV9yZWFkICAgICAgICAgICAgICAgICAgICAgOjExOworCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgICAgICAgICAgICAgIDogNTsKKwkJdTMyIG1lZGlhX3dyaXRlICAgICAgICAgICAgICAgICAgICA6MTE7CisJCXUzMiByZXNlcnZlZDIgICAgICAgICAgICAgICAgICAgICAgOiA2OworCQl1MzIgbWVkaWFfY250ICAgICAgICAgICAgICAgICAgICAgIDogNDsKKwl9IG1lZGlhX2J1Zl9yZWdfNzEwOworCisJc3RydWN0IHsKKwkJdTMyIE5FVF9EZXN0ICAgICAgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiBDQUlfRGVzdCAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgQ0FPX0Rlc3QgICAgICAgICAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIE1FRElBX0Rlc3QgICAgICAgICAgICAgICAgICAgICA6IDI7CisJCXUzMiBuZXRfb3ZmbG93X2Vycm9yICAgICAgICAgICAgICAgOiAxOworCQl1MzIgbWVkaWFfb3ZmbG93X2Vycm9yICAgICAgICAgICAgIDogMTsKKwkJdTMyIGNhaV9vdmZsb3dfZXJyb3IgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBjYW9fb3ZmbG93X2Vycm9yICAgICAgICAgICAgICAgOiAxOworCQl1MzIgY3RybF91c2Jfd2FuICAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIGN0cmxfc3JhbWRtYSAgICAgICAgICAgICAgICAgICA6IDE7CisJCXUzMiBjdHJsX21heGltdW1maWxsICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgIDoxNzsKKwl9IHNyYW1fZGVzdF9yZWdfNzE0OworCisJc3RydWN0IHsKKwkJdTMyIG5ldF9jbnQgICAgICAgICAgICAgICAgICAgICAgICA6MTI7CisJCXUzMiByZXNlcnZlZDEgICAgICAgICAgICAgICAgICAgICAgOiA0OworCQl1MzIgbmV0X2FkZHJfcmVhZCAgICAgICAgICAgICAgICAgIDogMTsKKwkJdTMyIHJlc2VydmVkMiAgICAgICAgICAgICAgICAgICAgICA6IDM7CisJCXUzMiBuZXRfYWRkcl93cml0ZSAgICAgICAgICAgICAgICAgOiAxOworCQl1MzIgcmVzZXJ2ZWQzICAgICAgICAgICAgICAgICAgICAgIDoxMTsKKwl9IG5ldF9idWZfcmVnXzcxODsKKworCXN0cnVjdCB7CisJCXUzMiB3YW5fc3BlZWRfc2lnICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgcmVzZXJ2ZWQxICAgICAgICAgICAgICAgICAgICAgIDogNjsKKwkJdTMyIHdhbl93YWl0X3N0YXRlICAgICAgICAgICAgICAgICA6IDg7CisJCXUzMiBzcmFtX2NoaXAgICAgICAgICAgICAgICAgICAgICAgOiAyOworCQl1MzIgc3JhbV9tZW1tYXAgICAgICAgICAgICAgICAgICAgIDogMjsKKwkJdTMyIHJlc2VydmVkMiAgICAgICAgICAgICAgICAgICAgICA6IDQ7CisJCXUzMiB3YW5fcGt0X2ZyYW1lICAgICAgICAgICAgICAgICAgOiA0OworCQl1MzIgcmVzZXJ2ZWQzICAgICAgICAgICAgICAgICAgICAgIDogNDsKKwl9IHdhbl9jdHJsX3JlZ183MWM7Cit9IGZsZXhjb3BfaWJpX3ZhbHVlOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvc2t5c3RhcjIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvc2t5c3RhcjIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiYzRjMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL3NreXN0YXIyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjQ0ICswLDAgQEAKLS8qCi0gKiBza3lzdGFyMi5jIC0gZHJpdmVyIGZvciB0aGUgVGVjaG5pc2F0IFNreVN0YXIyIFBDSSBEVkIgY2FyZAotICogICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBGbGV4Q29wSUkgYnkgQjJDMixJbmMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzICBWYWRpbSBDYXRhbmEsIHNreXN0YXJAbW9sZG92YS5jYwotICoKLSAqIEZJWDogRElTRVFDIFRvbmUgQnVyc3QgaW4gZmxleGNvcF9kaXNlcWNfaW9jdGwoKQotICogRklYOiBGVUxMIHNvZnQgRGlTRXFDIGZvciBza3lzdGFyMiAoRmxleENvcElJIHJldiAxMzApIFZQMzEwIGVxdWlwcGVkCi0gKiAgICAgVmluY2Vuem8gRGkgTWFzc2EsIGhhd2suaXQgYXQgdGlzY2FsaW5ldC5pdAotICoKLSAqIENvbnZlcnRlZCB0byBMaW51eCBjb2Rpbmcgc3R5bGUKLSAqIE1pc2MgcmVvcmdhbml6YXRpb24sIHBvbGlzaGluZywgcmVzdHlsaW5nCi0gKiAgICAgUm9iZXJ0byBSYWd1c2EsIHNreXN0YXIyLWM1YjggYXQgcm9iZXJ0b3JhZ3VzYSBkb3QgaXQKLSAqCi0gKiBBZGRlZCBoYXJkd2FyZSBmaWx0ZXJpbmcgc3VwcG9ydCwKLSAqICAgICBOaWtsYXMgUGVpbmVja2UsIHBlaW5lY2tlIGF0IGdkdi51bmktaGFubm92ZXIuZGUKLSAqCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCi0KLSNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9kdmIvZG14Lmg+Ci0jaW5jbHVkZSAiZHZiX2RlbXV4LmgiCi0jaW5jbHVkZSAiZG14ZGV2LmgiCi0jaW5jbHVkZSAiZHZiX2ZpbHRlci5oIgotI2luY2x1ZGUgImR2YmRldi5oIgotI2luY2x1ZGUgImRlbXV4LmgiCi0jaW5jbHVkZSAiZHZiX25ldC5oIgotI2luY2x1ZGUgInN0djAyOTkuaCIKLSNpbmNsdWRlICJtdDM1Mi5oIgotI2luY2x1ZGUgIm10MzEyLmgiCi0jaW5jbHVkZSAibnh0MjAwMi5oIgotCi1zdGF0aWMgaW50IGRlYnVnOwotc3RhdGljIGludCBlbmFibGVfaHdfZmlsdGVycyA9IDI7Ci0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJTZXQgZGVidWdnaW5nIGxldmVsICgwID0gZGVmYXVsdCwgMSA9IG1vc3QgbWVzc2FnZXMsIDIgPSBhbGwgbWVzc2FnZXMpLiIpOwotbW9kdWxlX3BhcmFtKGVuYWJsZV9od19maWx0ZXJzLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfaHdfZmlsdGVycywgImVuYWJsZSBoYXJkd2FyZSBmaWx0ZXJzOiBzdXBwb3J0ZWQgdmFsdWVzOiAwIChub25lKSwgMSwgMiIpOwotCi0jZGVmaW5lIGRwcmludGsoeC4uLikJZG8geyBpZiAoZGVidWc+PTEpIHByaW50ayh4KTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZGRwcmludGsoeC4uLikJZG8geyBpZiAoZGVidWc+PTIpIHByaW50ayh4KTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTSVpFX09GX0JVRl9ETUExCTB4M2FjMDAKLSNkZWZpbmUgU0laRV9PRl9CVUZfRE1BMgkweDc1OAotCi0jZGVmaW5lIE1BWF9OX0hXX0ZJTFRFUlMJKDYrMzIpCi0jZGVmaW5lIE5fUElEX1NMT1RTCQkyNTYKLQotc3RydWN0IGRtYXEgewotCXUzMiBidXNfYWRkcjsKLQl1MzIgaGVhZDsKLQl1MzIgdGFpbDsKLQl1MzIgYnVmZmVyX3NpemU7Ci0JdTggKmJ1ZmZlcjsKLX07Ci0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsOSkKLSNkZWZpbmUgX19pb21lbQotI2VuZGlmCi0KLXN0cnVjdCBhZGFwdGVyIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQotCXU4IGNhcmRfcmV2aXNpb247Ci0JdTMyIGIyYzJfcmV2aXNpb247Ci0JdTMyIHBpZF9maWx0ZXJfbWF4OwotCXUzMiBtYWNfZmlsdGVyX21heDsKLQl1MzIgaXJxOwotCXZvaWQgX19pb21lbSAqaW9fbWVtOwotCXVuc2lnbmVkIGxvbmcgaW9fcG9ydDsKLQl1OCBtYWNfYWRkcls4XTsKLQl1MzIgZHdfc3JhbV90eXBlOwotCi0Jc3RydWN0IGR2Yl9hZGFwdGVyIGR2Yl9hZGFwdGVyOwotCXN0cnVjdCBkdmJfZGVtdXggZGVtdXg7Ci0Jc3RydWN0IGRteGRldiBkbXhkZXY7Ci0Jc3RydWN0IGRteF9mcm9udGVuZCBod19mcm9udGVuZDsKLQlzdHJ1Y3QgZG14X2Zyb250ZW5kIG1lbV9mcm9udGVuZDsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7Ci0Jc3RydWN0IGR2Yl9uZXQgZHZibmV0OwotCi0Jc3RydWN0IHNlbWFwaG9yZSBpMmNfc2VtOwotCi0Jc3RydWN0IGRtYXEgZG1hcTE7Ci0Jc3RydWN0IGRtYXEgZG1hcTI7Ci0KLQl1MzIgZG1hX2N0cmw7Ci0JdTMyIGRtYV9zdGF0dXM7Ci0KLQlpbnQgY2FwdHVyaW5nOwotCi0Jc3BpbmxvY2tfdCBsb2NrOwotCi0JaW50IHVzZWFibGVfaHdfZmlsdGVyczsKLQl1MTYgaHdfcGlkc1tNQVhfTl9IV19GSUxURVJTXTsKLQl1MTYgcGlkX2xpc3RbTl9QSURfU0xPVFNdOwotCWludCBwaWRfcmNbTl9QSURfU0xPVFNdOwkvLyByZWYgY291bnRlcnMgZm9yIHRoZSBwaWRzCi0JaW50IHBpZF9jb3VudDsKLQlpbnQgd2hvbGVfYmFuZHdpZHRoX2NvdW50OwotCXUzMiBtYWNfZmlsdGVyOwotCi0Jc3RydWN0IGR2Yl9mcm9udGVuZCogZmU7Ci0JaW50ICgqZmVfc2xlZXApKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKLX07Ci0KLSNkZWZpbmUgd3JpdGVfcmVnX2R3KGFkYXB0ZXIscmVnLHZhbHVlKSB3cml0ZWwodmFsdWUsIGFkYXB0ZXItPmlvX21lbSArIHJlZykKLSNkZWZpbmUgcmVhZF9yZWdfZHcoYWRhcHRlcixyZWcpIHJlYWRsKGFkYXB0ZXItPmlvX21lbSArIHJlZykKLQotc3RhdGljIHZvaWQgd3JpdGVfcmVnX2JpdGZpZWxkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgemVyb21hc2ssIHUzMiBvcnZhbHVlKQotewotCXUzMiB0bXA7Ci0KLQl0bXAgPSByZWFkX3JlZ19kdyhhZGFwdGVyLCByZWcpOwotCXRtcCA9ICh0bXAgJiB+emVyb21hc2spIHwgb3J2YWx1ZTsKLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgcmVnLCB0bXApOwotfQotCi0vKiBpMmMgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IGkyY19tYWluX3dyaXRlX2Zvcl9mbGV4MihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbW1hbmQsIHU4ICpidWYsIGludCByZXRyaWVzKQotewotCWludCBpOwotCXUzMiB2YWx1ZTsKLQotCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDEwMCwgMCk7Ci0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MTAwLCBjb21tYW5kKTsKLQotCWZvciAoaSA9IDA7IGkgPCByZXRyaWVzOyBpKyspIHsKLQkJdmFsdWUgPSByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDEwMCk7Ci0KLQkJaWYgKCh2YWx1ZSAmIDB4NDAwMDAwMDApID09IDApIHsKLQkJCWlmICgodmFsdWUgJiAweDgxMDAwMDAwKSA9PSAweDgwMDAwMDAwKSB7Ci0JCQkJaWYgKGJ1ZiAhPSAwKQotCQkJCQkqYnVmID0gKHZhbHVlID4+IDB4MTApICYgMHhmZjsKLQotCQkJCXJldHVybiAxOwotCQkJfQotCQl9IGVsc2UgewotCQkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MTAwLCAwKTsKLQkJCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDEwMCwgY29tbWFuZCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogZGV2aWNlID0gMHgxMDAwMDAwMCBmb3IgdHVuZXIsIDB4MjAwMDAwMDAgZm9yIGVlcHJvbSAqLwotc3RhdGljIHZvaWQgaTJjX21haW5fc2V0dXAodTMyIGRldmljZSwgdTMyIGNoaXBfYWRkciwgdTggb3AsIHU4IGFkZHIsIHUzMiB2YWx1ZSwgdTMyIGxlbiwgdTMyICpjb21tYW5kKQotewotCSpjb21tYW5kID0gZGV2aWNlIHwgKChsZW4gLSAxKSA8PCAyNikgfCAodmFsdWUgPDwgMTYpIHwgKGFkZHIgPDwgOCkgfCBjaGlwX2FkZHI7Ci0KLQlpZiAob3AgIT0gMCkKLQkJKmNvbW1hbmQgPSAqY29tbWFuZCB8IDB4MDMwMDAwMDA7Ci0JZWxzZQotCQkqY29tbWFuZCA9ICpjb21tYW5kIHwgMHgwMTAwMDAwMDsKLX0KLQotc3RhdGljIGludCBmbGV4X2kyY19yZWFkNChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGRldmljZSwgdTMyIGNoaXBfYWRkciwgdTE2IGFkZHIsIHU4ICpidWYsIHU4IGxlbikKLXsKLQl1MzIgY29tbWFuZDsKLQl1MzIgdmFsdWU7Ci0KLQlpbnQgcmVzdWx0LCBpOwotCi0JaTJjX21haW5fc2V0dXAoZGV2aWNlLCBjaGlwX2FkZHIsIDEsIGFkZHIsIDAsIGxlbiwgJmNvbW1hbmQpOwotCi0JcmVzdWx0ID0gaTJjX21haW5fd3JpdGVfZm9yX2ZsZXgyKGFkYXB0ZXIsIGNvbW1hbmQsIGJ1ZiwgMTAwMDAwKTsKLQotCWlmICgocmVzdWx0ICYgMHhmZikgIT0gMCkgewotCQlpZiAobGVuID4gMSkgewotCQkJdmFsdWUgPSByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDEwNCk7Ci0KLQkJCWZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykgewotCQkJCWJ1ZltpXSA9IHZhbHVlICYgMHhmZjsKLQkJCQl2YWx1ZSA9IHZhbHVlID4+IDg7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IGZsZXhfaTJjX3dyaXRlNChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGRldmljZSwgdTMyIGNoaXBfYWRkciwgdTMyIGFkZHIsIHU4ICpidWYsIHU4IGxlbikKLXsKLQl1MzIgY29tbWFuZDsKLQl1MzIgdmFsdWU7Ci0JaW50IGk7Ci0KLQlpZiAobGVuID4gMSkgewotCQl2YWx1ZSA9IDA7Ci0KLQkJZm9yIChpID0gbGVuOyBpID4gMTsgaS0tKSB7Ci0JCQl2YWx1ZSA9IHZhbHVlIDw8IDg7Ci0JCQl2YWx1ZSA9IHZhbHVlIHwgYnVmW2kgLSAxXTsKLQkJfQotCi0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDEwNCwgdmFsdWUpOwotCX0KLQotCWkyY19tYWluX3NldHVwKGRldmljZSwgY2hpcF9hZGRyLCAwLCBhZGRyLCBidWZbMF0sIGxlbiwgJmNvbW1hbmQpOwotCi0JcmV0dXJuIGkyY19tYWluX3dyaXRlX2Zvcl9mbGV4MihhZGFwdGVyLCBjb21tYW5kLCBOVUxMLCAxMDAwMDApOwotfQotCi1zdGF0aWMgdm9pZCBmaXhjaGlwYWRkcih1MzIgZGV2aWNlLCB1MzIgYnVzLCB1MzIgYWRkciwgdTMyICpyZXQpCi17Ci0JaWYgKGRldmljZSA9PSAweDIwMDAwMDAwKQotCQkqcmV0ID0gYnVzIHwgKChhZGRyID4+IDgpICYgMyk7Ci0JZWxzZQotCQkqcmV0ID0gYnVzOwotfQotCi1zdGF0aWMgdTMyIGZsZXhfaTJjX3JlYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBkZXZpY2UsIHUzMiBidXMsIHUzMiBhZGRyLCB1OCAqYnVmLCB1MzIgbGVuKQotewotCXUzMiBjaGlwYWRkcjsKLQl1MzIgYnl0ZXNfdG9fdHJhbnNmZXI7Ci0JdTggKnN0YXJ0OwotCi0JZGRwcmludGsoIiVzOlxuIiwgX19GVU5DVElPTl9fKTsKLQotCXN0YXJ0ID0gYnVmOwotCi0Jd2hpbGUgKGxlbiAhPSAwKSB7Ci0JCWJ5dGVzX3RvX3RyYW5zZmVyID0gbGVuOwotCi0JCWlmIChieXRlc190b190cmFuc2ZlciA+IDQpCi0JCQlieXRlc190b190cmFuc2ZlciA9IDQ7Ci0KLQkJZml4Y2hpcGFkZHIoZGV2aWNlLCBidXMsIGFkZHIsICZjaGlwYWRkcik7Ci0KLQkJaWYgKGZsZXhfaTJjX3JlYWQ0KGFkYXB0ZXIsIGRldmljZSwgY2hpcGFkZHIsIGFkZHIsIGJ1ZiwgYnl0ZXNfdG9fdHJhbnNmZXIpID09IDApCi0JCQlyZXR1cm4gYnVmIC0gc3RhcnQ7Ci0KLQkJYnVmID0gYnVmICsgYnl0ZXNfdG9fdHJhbnNmZXI7Ci0JCWFkZHIgPSBhZGRyICsgYnl0ZXNfdG9fdHJhbnNmZXI7Ci0JCWxlbiA9IGxlbiAtIGJ5dGVzX3RvX3RyYW5zZmVyOwotCX07Ci0KLQlyZXR1cm4gYnVmIC0gc3RhcnQ7Ci19Ci0KLXN0YXRpYyB1MzIgZmxleF9pMmNfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBkZXZpY2UsIHUzMiBidXMsIHUzMiBhZGRyLCB1OCAqYnVmLCB1MzIgbGVuKQotewotCXUzMiBjaGlwYWRkcjsKLQl1MzIgYnl0ZXNfdG9fdHJhbnNmZXI7Ci0JdTggKnN0YXJ0OwotCi0JZGRwcmludGsoIiVzOlxuIiwgX19GVU5DVElPTl9fKTsKLQotCXN0YXJ0ID0gYnVmOwotCi0Jd2hpbGUgKGxlbiAhPSAwKSB7Ci0JCWJ5dGVzX3RvX3RyYW5zZmVyID0gbGVuOwotCi0JCWlmIChieXRlc190b190cmFuc2ZlciA+IDQpCi0JCQlieXRlc190b190cmFuc2ZlciA9IDQ7Ci0KLQkJZml4Y2hpcGFkZHIoZGV2aWNlLCBidXMsIGFkZHIsICZjaGlwYWRkcik7Ci0KLQkJaWYgKGZsZXhfaTJjX3dyaXRlNChhZGFwdGVyLCBkZXZpY2UsIGNoaXBhZGRyLCBhZGRyLCBidWYsIGJ5dGVzX3RvX3RyYW5zZmVyKSA9PSAwKQotCQkJcmV0dXJuIGJ1ZiAtIHN0YXJ0OwotCi0JCWJ1ZiA9IGJ1ZiArIGJ5dGVzX3RvX3RyYW5zZmVyOwotCQlhZGRyID0gYWRkciArIGJ5dGVzX3RvX3RyYW5zZmVyOwotCQlsZW4gPSBsZW4gLSBieXRlc190b190cmFuc2ZlcjsKLQl9Ci0KLQlyZXR1cm4gYnVmIC0gc3RhcnQ7Ci19Ci0KLXN0YXRpYyBpbnQgbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyKiBhZGFwdGVyLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqdG1wID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKLQlpbnQgaSwgcmV0ID0gMDsKLQotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnRtcC0+aTJjX3NlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlkZHByaW50aygiJXM6ICVkIG1lc3NhZ2VzIHRvIHRyYW5zZmVyXG4iLCBfX0ZVTkNUSU9OX18sIG51bSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCWRkcHJpbnRrKCJtZXNzYWdlICVkOiBmbGFncz0weCV4LCBhZGRyPTB4JXgsIGJ1Zj0weCV4LCBsZW49JWQgXG4iLCBpLAotCQkJIG1zZ3NbaV0uZmxhZ3MsIG1zZ3NbaV0uYWRkciwgbXNnc1tpXS5idWZbMF0sIG1zZ3NbaV0ubGVuKTsKLQl9Ci0KLQkvLyByZWFkIGNvbW1hbmQKLQlpZiAoKG51bSA9PSAyKSAmJiAobXNnc1swXS5mbGFncyA9PSAwKSAmJiAobXNnc1sxXS5mbGFncyA9PSBJMkNfTV9SRCkgJiYgKG1zZ3NbMF0uYnVmICE9IE5VTEwpICYmIChtc2dzWzFdLmJ1ZiAhPSBOVUxMKSkgewotCi0JCXJldCA9IGZsZXhfaTJjX3JlYWQodG1wLCAweDEwMDAwMDAwLCBtc2dzWzBdLmFkZHIsIG1zZ3NbMF0uYnVmWzBdLCBtc2dzWzFdLmJ1ZiwgbXNnc1sxXS5sZW4pOwotCi0JCXVwKCZ0bXAtPmkyY19zZW0pOwotCi0JCWlmIChyZXQgIT0gbXNnc1sxXS5sZW4pIHsKLQkJCWRwcmludGsoIiVzOiByZWFkIGVycm9yICFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJCQlkcHJpbnRrKCJtZXNzYWdlICVkOiBmbGFncz0weCV4LCBhZGRyPTB4JXgsIGJ1Zj0weCV4LCBsZW49JWQgXG4iLCBpLAotCQkJCSAgICAgICBtc2dzW2ldLmZsYWdzLCBtc2dzW2ldLmFkZHIsIG1zZ3NbaV0uYnVmWzBdLCBtc2dzW2ldLmxlbik7Ci0JCX0KLQotCQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0JCX0KLQotCQlyZXR1cm4gbnVtOwotCX0KLQkvLyB3cml0ZSBjb21tYW5kCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0KLQkJaWYgKChtc2dzW2ldLmZsYWdzICE9IDApIHx8IChtc2dzW2ldLmJ1ZiA9PSBOVUxMKSB8fCAobXNnc1tpXS5sZW4gPCAyKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXJldCA9IGZsZXhfaTJjX3dyaXRlKHRtcCwgMHgxMDAwMDAwMCwgbXNnc1tpXS5hZGRyLCBtc2dzW2ldLmJ1ZlswXSwgJm1zZ3NbaV0uYnVmWzFdLCBtc2dzW2ldLmxlbiAtIDEpOwotCi0JCXVwKCZ0bXAtPmkyY19zZW0pOwotCi0JCWlmIChyZXQgIT0gbXNnc1swXS5sZW4gLSAxKSB7Ci0JCQlkcHJpbnRrKCIlczogd3JpdGUgZXJyb3IgJWkgIVxuIiwgX19GVU5DVElPTl9fLCByZXQpOwotCi0JCQlkcHJpbnRrKCJtZXNzYWdlICVkOiBmbGFncz0weCV4LCBhZGRyPTB4JXgsIGJ1ZlswXT0weCV4LCBsZW49JWQgXG4iLCBpLAotCQkJICAgICAgIG1zZ3NbaV0uZmxhZ3MsIG1zZ3NbaV0uYWRkciwgbXNnc1tpXS5idWZbMF0sIG1zZ3NbaV0ubGVuKTsKLQotCQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0JCX0KLQotCQlyZXR1cm4gbnVtOwotCX0KLQotCXByaW50aygiJXM6IHVua25vd24gY29tbWFuZCBmb3JtYXQgIVxuIiwgX19GVU5DVElPTl9fKTsKLQotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKiBTUkFNIChTa3lzdGFyMiByZXYyLjMgaGFzIG9uZSAiSVNTSSBJUzYxTFYyNTYiIGNoaXAgb24gYm9hcmQsCi0gICBidXQgaXQgc2VlbXMgdGhhdCBGbGV4Q29wSUkgY2FuIHdvcmsgd2l0aCBtb3JlIHRoYW4gb25lIGNoaXApICovCi1zdGF0aWMgdm9pZCBzcmFtX3NldF9uZXRfZGVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTggZGVzdCkKLXsKLQl1MzIgdG1wOwotCi0JdWRlbGF5KDEwMDApOwotCi0JdG1wID0gKHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzE0KSAmIDB4ZmZmZmZmZmMpIHwgKGRlc3QgJiAzKTsKLQotCXVkZWxheSgxMDAwKTsKLQotCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxNCwgdG1wKTsKLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MTQsIHRtcCk7Ci0KLQl1ZGVsYXkoMTAwMCk7Ci0KLQkvKiByZXR1cm4gdmFsdWUgaXMgbmV2ZXIgdXNlZD8gKi8KLS8qCXJldHVybiB0bXA7ICovCi19Ci0KLXN0YXRpYyB2b2lkIHNyYW1fc2V0X2NhaV9kZXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1OCBkZXN0KQotewotCXUzMiB0bXA7Ci0KLQl1ZGVsYXkoMTAwMCk7Ci0KLQl0bXAgPSAocmVhZF9yZWdfZHcoYWRhcHRlciwgMHg3MTQpICYgMHhmZmZmZmZmMykgfCAoKGRlc3QgJiAzKSA8PCAyKTsKLQotCXVkZWxheSgxMDAwKTsKLQl1ZGVsYXkoMTAwMCk7Ci0KLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MTQsIHRtcCk7Ci0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzE0LCB0bXApOwotCi0JdWRlbGF5KDEwMDApOwotCi0JLyogcmV0dXJuIHZhbHVlIGlzIG5ldmVyIHVzZWQ/ICovCi0vKglyZXR1cm4gdG1wOyAqLwotfQotCi1zdGF0aWMgdm9pZCBzcmFtX3NldF9jYW9fZGVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTggZGVzdCkKLXsKLQl1MzIgdG1wOwotCi0JdWRlbGF5KDEwMDApOwotCi0JdG1wID0gKHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzE0KSAmIDB4ZmZmZmZmY2YpIHwgKChkZXN0ICYgMykgPDwgNCk7Ci0KLQl1ZGVsYXkoMTAwMCk7Ci0JdWRlbGF5KDEwMDApOwotCi0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzE0LCB0bXApOwotCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxNCwgdG1wKTsKLQotCXVkZWxheSgxMDAwKTsKLQotCS8qIHJldHVybiB2YWx1ZSBpcyBuZXZlciB1c2VkPyAqLwotLyoJcmV0dXJuIHRtcDsgKi8KLX0KLQotc3RhdGljIHZvaWQgc3JhbV9zZXRfbWVkaWFfZGVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTggZGVzdCkKLXsKLQl1MzIgdG1wOwotCi0JdWRlbGF5KDEwMDApOwotCi0JdG1wID0gKHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzE0KSAmIDB4ZmZmZmZmM2YpIHwgKChkZXN0ICYgMykgPDwgNik7Ci0KLQl1ZGVsYXkoMTAwMCk7Ci0JdWRlbGF5KDEwMDApOwotCi0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzE0LCB0bXApOwotCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxNCwgdG1wKTsKLQotCXVkZWxheSgxMDAwKTsKLQotCS8qIHJldHVybiB2YWx1ZSBpcyBuZXZlciB1c2VkPyAqLwotLyoJcmV0dXJuIHRtcDsgKi8KLX0KLQotLyogU1JBTSBtZW1vcnkgaXMgYWNjZXNzZWQgdGhyb3VnaCBhIGJ1ZmZlciByZWdpc3RlciBpbiB0aGUgRmxleENvcAotICAgY2hpcCAoMHg3MDApLiBUaGlzIHJlZ2lzdGVyIGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKLSAgICBiaXRzIDAtMTQgIDogYWRkcmVzcwotICAgIGJpdCAgMTUgICAgOiByZWFkL3dyaXRlIGZsYWcKLSAgICBiaXRzIDE2LTIzIDogOC1iaXQgd29yZCB0byB3cml0ZQotICAgIGJpdHMgMjQtMjcgOiA9IDQKLSAgICBiaXRzIDI4LTI5IDogbWVtb3J5IGJhbmsgc2VsZWN0b3IKLSAgICBiaXQgIDMxICAgIDogYnVzeSBmbGFnCi0qLwotc3RhdGljIHZvaWQgZmxleF9zcmFtX3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYmFuaywgdTMyIGFkZHIsIHU4ICpidWYsIHUzMiBsZW4pCi17Ci0JaW50IGksIHJldHJpZXM7Ci0JdTMyIGNvbW1hbmQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJY29tbWFuZCA9IGJhbmsgfCBhZGRyIHwgMHgwNDAwMDAwMCB8ICgqYnVmIDw8IDB4MTApOwotCi0JCXJldHJpZXMgPSAyOwotCi0JCXdoaWxlICgoKHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzAwKSAmIDB4ODAwMDAwMDApICE9IDApICYmIChyZXRyaWVzID4gMCkpIHsKLQkJCW1kZWxheSgxKTsKLQkJCXJldHJpZXMtLTsKLQkJfTsKLQotCQlpZiAocmV0cmllcyA9PSAwKQotCQkJcHJpbnRrKCIlczogU1JBTSB0aW1lb3V0XG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcwMCwgY29tbWFuZCk7Ci0KLQkJYnVmKys7Ci0JCWFkZHIrKzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGZsZXhfc3JhbV9yZWFkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYmFuaywgdTMyIGFkZHIsIHU4ICpidWYsIHUzMiBsZW4pCi17Ci0JaW50IGksIHJldHJpZXM7Ci0JdTMyIGNvbW1hbmQsIHZhbHVlOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWNvbW1hbmQgPSBiYW5rIHwgYWRkciB8IDB4MDQwMDgwMDA7Ci0KLQkJcmV0cmllcyA9IDEwMDAwOwotCi0JCXdoaWxlICgoKHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzAwKSAmIDB4ODAwMDAwMDApICE9IDApICYmIChyZXRyaWVzID4gMCkpIHsKLQkJCW1kZWxheSgxKTsKLQkJCXJldHJpZXMtLTsKLQkJfTsKLQotCQlpZiAocmV0cmllcyA9PSAwKQotCQkJcHJpbnRrKCIlczogU1JBTSB0aW1lb3V0XG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcwMCwgY29tbWFuZCk7Ci0KLQkJcmV0cmllcyA9IDEwMDAwOwotCi0JCXdoaWxlICgoKHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzAwKSAmIDB4ODAwMDAwMDApICE9IDApICYmIChyZXRyaWVzID4gMCkpIHsKLQkJCW1kZWxheSgxKTsKLQkJCXJldHJpZXMtLTsKLQkJfTsKLQotCQlpZiAocmV0cmllcyA9PSAwKQotCQkJcHJpbnRrKCIlczogU1JBTSB0aW1lb3V0XG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JCXZhbHVlID0gcmVhZF9yZWdfZHcoYWRhcHRlciwgMHg3MDApID4+IDB4MTA7Ci0KLQkJKmJ1ZiA9ICh2YWx1ZSAmIDB4ZmYpOwotCi0JCWFkZHIrKzsKLQkJYnVmKys7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzcmFtX3dyaXRlX2NodW5rKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKLXsKLQl1MzIgYmFuazsKLQotCWJhbmsgPSAwOwotCi0JaWYgKGFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9PSAweDIwMDAwKSB7Ci0JCWJhbmsgPSAoYWRkciAmIDB4MTgwMDApIDw8IDB4MGQ7Ci0JfQotCi0JaWYgKGFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9PSAweDAwMDAwKSB7Ci0JCWlmICgoYWRkciA+PiAweDBmKSA9PSAwKQotCQkJYmFuayA9IDB4MjAwMDAwMDA7Ci0JCWVsc2UKLQkJCWJhbmsgPSAweDEwMDAwMDAwOwotCX0KLQotCWZsZXhfc3JhbV93cml0ZShhZGFwdGVyLCBiYW5rLCBhZGRyICYgMHg3ZmZmLCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNyYW1fcmVhZF9jaHVuayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCi17Ci0JdTMyIGJhbms7Ci0KLQliYW5rID0gMDsKLQotCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgyMDAwMCkgewotCQliYW5rID0gKGFkZHIgJiAweDE4MDAwKSA8PCAweDBkOwotCX0KLQotCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgwMDAwMCkgewotCQlpZiAoKGFkZHIgPj4gMHgwZikgPT0gMCkKLQkJCWJhbmsgPSAweDIwMDAwMDAwOwotCQllbHNlCi0JCQliYW5rID0gMHgxMDAwMDAwMDsKLQl9Ci0KLQlmbGV4X3NyYW1fcmVhZChhZGFwdGVyLCBiYW5rLCBhZGRyICYgMHg3ZmZmLCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNyYW1fcmVhZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHU4ICpidWYsIHUzMiBsZW4pCi17Ci0JdTMyIGxlbmd0aDsKLQotCXdoaWxlIChsZW4gIT0gMCkgewotCQlsZW5ndGggPSBsZW47Ci0KLQkJLy8gY2hlY2sgaWYgdGhlIGFkZHJlc3MgcmFuZ2UgYmVsb25ncyB0byB0aGUgc2FtZSAKLQkJLy8gMzJLIG1lbW9yeSBjaGlwLiBJZiBub3QsIHRoZSBkYXRhIGlzIHJlYWQgZnJvbSAKLQkJLy8gb25lIGNoaXAgYXQgYSB0aW1lLgotCQlpZiAoKGFkZHIgPj4gMHgwZikgIT0gKChhZGRyICsgbGVuIC0gMSkgPj4gMHgwZikpIHsKLQkJCWxlbmd0aCA9ICgoKGFkZHIgPj4gMHgwZikgKyAxKSA8PCAweDBmKSAtIGFkZHI7Ci0JCX0KLQotCQlzcmFtX3JlYWRfY2h1bmsoYWRhcHRlciwgYWRkciwgYnVmLCBsZW5ndGgpOwotCi0JCWFkZHIgPSBhZGRyICsgbGVuZ3RoOwotCQlidWYgPSBidWYgKyBsZW5ndGg7Ci0JCWxlbiA9IGxlbiAtIGxlbmd0aDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNyYW1fd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1OCAqYnVmLCB1MzIgbGVuKQotewotCXUzMiBsZW5ndGg7Ci0KLQl3aGlsZSAobGVuICE9IDApIHsKLQkJbGVuZ3RoID0gbGVuOwotCi0JCS8vIGNoZWNrIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNhbWUgCi0JCS8vIDMySyBtZW1vcnkgY2hpcC4gSWYgbm90LCB0aGUgZGF0YSBpcyB3cml0dGVuIHRvCi0JCS8vIG9uZSBjaGlwIGF0IGEgdGltZS4KLQkJaWYgKChhZGRyID4+IDB4MGYpICE9ICgoYWRkciArIGxlbiAtIDEpID4+IDB4MGYpKSB7Ci0JCQlsZW5ndGggPSAoKChhZGRyID4+IDB4MGYpICsgMSkgPDwgMHgwZikgLSBhZGRyOwotCQl9Ci0KLQkJc3JhbV93cml0ZV9jaHVuayhhZGFwdGVyLCBhZGRyLCBidWYsIGxlbmd0aCk7Ci0KLQkJYWRkciA9IGFkZHIgKyBsZW5ndGg7Ci0JCWJ1ZiA9IGJ1ZiArIGxlbmd0aDsKLQkJbGVuID0gbGVuIC0gbGVuZ3RoOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc3JhbV9zZXRfc2l6ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIG1hc2spCi17Ci0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLCAobWFzayB8ICh+MHgzMDAwMCAmIHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjKSkpKTsKLX0KLQotc3RhdGljIHZvaWQgc3JhbV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXUzMiB0bXA7Ci0KLQl0bXAgPSByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYyk7Ci0KLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIDEpOwotCi0JaWYgKHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjKSAhPSAwKSB7Ci0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxYywgdG1wKTsKLQotCQlhZGFwdGVyLT5kd19zcmFtX3R5cGUgPSB0bXAgJiAweDMwMDAwOwotCi0JCWRkcHJpbnRrKCIlczogZHdfc3JhbV90eXBlID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+ZHdfc3JhbV90eXBlKTsKLQotCX0gZWxzZSB7Ci0KLQkJYWRhcHRlci0+ZHdfc3JhbV90eXBlID0gMHgxMDAwMDsKLQotCQlkZHByaW50aygiJXM6IGR3X3NyYW1fdHlwZSA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPmR3X3NyYW1fdHlwZSk7Ci0JfQotCi0JLyogcmV0dXJuIHZhbHVlIGlzIG5ldmVyIHVzZWQ/ICovCi0vKglyZXR1cm4gYWRhcHRlci0+ZHdfc3JhbV90eXBlOyAqLwotfQotCi1zdGF0aWMgaW50IHNyYW1fdGVzdF9sb2NhdGlvbihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIG1hc2ssIHUzMiBhZGRyKQotewotCXU4IHRtcDEsIHRtcDI7Ci0KLQlkcHJpbnRrKCIlczogbWFzayA9ICV4LCBhZGRyID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgbWFzaywgYWRkcik7Ci0KLQlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIG1hc2spOwotCXNyYW1faW5pdChhZGFwdGVyKTsKLQotCXRtcDIgPSAweGE1OwotCXRtcDEgPSAweDRmOwotCi0Jc3JhbV93cml0ZShhZGFwdGVyLCBhZGRyLCAmdG1wMiwgMSk7Ci0Jc3JhbV93cml0ZShhZGFwdGVyLCBhZGRyICsgNCwgJnRtcDEsIDEpOwotCi0JdG1wMiA9IDA7Ci0KLQltZGVsYXkoMjApOwotCi0Jc3JhbV9yZWFkKGFkYXB0ZXIsIGFkZHIsICZ0bXAyLCAxKTsKLQlzcmFtX3JlYWQoYWRhcHRlciwgYWRkciwgJnRtcDIsIDEpOwotCi0JZHByaW50aygiJXM6IHdyb3RlIDB4YTUsIHJlYWQgMHglMnhcbiIsIF9fRlVOQ1RJT05fXywgdG1wMik7Ci0KLQlpZiAodG1wMiAhPSAweGE1KQotCQlyZXR1cm4gMDsKLQotCXRtcDIgPSAweDVhOwotCXRtcDEgPSAweGY0OwotCi0Jc3JhbV93cml0ZShhZGFwdGVyLCBhZGRyLCAmdG1wMiwgMSk7Ci0Jc3JhbV93cml0ZShhZGFwdGVyLCBhZGRyICsgNCwgJnRtcDEsIDEpOwotCi0JdG1wMiA9IDA7Ci0KLQltZGVsYXkoMjApOwotCi0Jc3JhbV9yZWFkKGFkYXB0ZXIsIGFkZHIsICZ0bXAyLCAxKTsKLQlzcmFtX3JlYWQoYWRhcHRlciwgYWRkciwgJnRtcDIsIDEpOwotCi0JZHByaW50aygiJXM6IHdyb3RlIDB4NWEsIHJlYWQgMHglMnhcbiIsIF9fRlVOQ1RJT05fXywgdG1wMik7Ci0KLQlpZiAodG1wMiAhPSAweDVhKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdTMyIHNyYW1fbGVuZ3RoKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgxMDAwMCkKLQkJcmV0dXJuIDMyNzY4OwkvLyAgMzJLCi0JaWYgKGFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9PSAweDAwMDAwKQotCQlyZXR1cm4gNjU1MzY7CS8vICA2NEsgICAgICAgIAotCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgyMDAwMCkKLQkJcmV0dXJuIDEzMTA3MjsJLy8gMTI4SwotCi0JcmV0dXJuIDMyNzY4OwkJLy8gMzJLCi19Ci0KLS8qIEZsZXhjb3BJSSBjYW4gd29yayB3aXRoIDMySywgNjRLIG9yIDEyOEsgb2YgZXh0ZXJuYWwgU1JBTSBtZW1vcnkuCi0gICAgLSBmb3IgMTI4SyB0aGVyZSBhcmUgNHgzMksgY2hpcHMgYXQgYmFuayAwLDEsMiwzLgotICAgIC0gZm9yICA2NEsgdGhlcmUgYXJlIDJ4MzJLIGNoaXBzIGF0IGJhbmsgMSwyLgotICAgIC0gZm9yICAzMksgdGhlcmUgaXMgb25lIDMySyBjaGlwIGF0IGJhbmsgMC4KLQotICAgRmxleENvcCB3b3JrcyBvbmx5IHdpdGggb25lIGJhbmsgYXQgYSB0aW1lLiBUaGUgYmFuayBpcyBzZWxlY3RlZAotICAgYnkgYml0cyAyOC0yOSBvZiB0aGUgMHg3MDAgcmVnaXN0ZXIuCi0gIAotICAgYmFuayAwIGNvdmVycyBhZGRyZXNzZXMgMHgwMDAwMC0weDA3ZmZmCi0gICBiYW5rIDEgY292ZXJzIGFkZHJlc3NlcyAweDA4MDAwLTB4MGZmZmYKLSAgIGJhbmsgMiBjb3ZlcnMgYWRkcmVzc2VzIDB4MTAwMDAtMHgxN2ZmZgotICAgYmFuayAzIGNvdmVycyBhZGRyZXNzZXMgMHgxODAwMC0weDFmZmZmCi0qLwotc3RhdGljIGludCBzcmFtX2RldGVjdF9mb3JfZmxleDIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JdTMyIHRtcCwgdG1wMiwgdG1wMzsKLQotCWRwcmludGsoIiVzOlxuIiwgX19GVU5DVElPTl9fKTsKLQotCXRtcCA9IHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4KTsKLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIDApOwotCi0JdG1wMiA9IHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjKTsKLQotCWRwcmludGsoIiVzOiB0bXAyID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgdG1wMik7Ci0KLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIDEpOwotCi0JdG1wMyA9IHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjKTsKLQotCWRwcmludGsoIiVzOiB0bXAzID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgdG1wMyk7Ci0KLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIHRtcDIpOwotCi0JLy8gY2hlY2sgZm9yIGludGVybmFsIFNSQU0gPz8/Ci0JdG1wMy0tOwotCWlmICh0bXAzICE9IDApIHsKLQkJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCAweDEwMDAwKTsKLQkJc3JhbV9pbml0KGFkYXB0ZXIpOwotCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIHRtcCk7Ci0KLQkJZHByaW50aygiJXM6IHNyYW0gc2l6ZSA9IDMyS1xuIiwgX19GVU5DVElPTl9fKTsKLQotCQlyZXR1cm4gMzI7Ci0JfQotCi0JaWYgKHNyYW1fdGVzdF9sb2NhdGlvbihhZGFwdGVyLCAweDIwMDAwLCAweDE4MDAwKSAhPSAwKSB7Ci0JCXNyYW1fc2V0X3NpemUoYWRhcHRlciwgMHgyMDAwMCk7Ci0JCXNyYW1faW5pdChhZGFwdGVyKTsKLQkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB0bXApOwotCi0JCWRwcmludGsoIiVzOiBzcmFtIHNpemUgPSAxMjhLXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JCXJldHVybiAxMjg7Ci0JfQotCi0JaWYgKHNyYW1fdGVzdF9sb2NhdGlvbihhZGFwdGVyLCAweDAwMDAwLCAweDEwMDAwKSAhPSAwKSB7Ci0JCXNyYW1fc2V0X3NpemUoYWRhcHRlciwgMHgwMDAwMCk7Ci0JCXNyYW1faW5pdChhZGFwdGVyKTsKLQkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB0bXApOwotCi0JCWRwcmludGsoIiVzOiBzcmFtIHNpemUgPSA2NEtcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQkJcmV0dXJuIDY0OwotCX0KLQotCWlmIChzcmFtX3Rlc3RfbG9jYXRpb24oYWRhcHRlciwgMHgxMDAwMCwgMHgwMDAwMCkgIT0gMCkgewotCQlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIDB4MTAwMDApOwotCQlzcmFtX2luaXQoYWRhcHRlcik7Ci0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwOCwgdG1wKTsKLQotCQlkcHJpbnRrKCIlczogc3JhbSBzaXplID0gMzJLXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JCXJldHVybiAzMjsKLQl9Ci0KLQlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIDB4MTAwMDApOwotCXNyYW1faW5pdChhZGFwdGVyKTsKLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIHRtcCk7Ci0KLQlkcHJpbnRrKCIlczogU1JBTSBkZXRlY3Rpb24gZmFpbGVkLiBTZXQgdG8gMzJLIFxuIiwgX19GVU5DVElPTl9fKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzbGxfZGV0ZWN0X3NyYW1fc2l6ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzcmFtX2RldGVjdF9mb3JfZmxleDIoYWRhcHRlcik7Ci19Ci0KLS8qIEVFUFJPTSAoU2t5c3RhcjIgaGFzIG9uZSAiMjRMQzA4QiIgY2hpcCBvbiBib2FyZCkgKi8KLS8qCi1zdGF0aWMgaW50IGVlcHJvbV93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTE2IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCi17Ci0JcmV0dXJuIGZsZXhfaTJjX3dyaXRlKGFkYXB0ZXIsIDB4MjAwMDAwMDAsIDB4NTAsIGFkZHIsIGJ1ZiwgbGVuKTsKLX0KLSovCi0KLXN0YXRpYyBpbnQgZWVwcm9tX3JlYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQotewotCXJldHVybiBmbGV4X2kyY19yZWFkKGFkYXB0ZXIsIDB4MjAwMDAwMDAsIDB4NTAsIGFkZHIsIGJ1ZiwgbGVuKTsKLX0KLQotc3RhdGljIHU4IGNhbGNfbHJjKHU4ICpidWYsIGludCBsZW4pCi17Ci0JaW50IGk7Ci0JdTggc3VtOwotCi0Jc3VtID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJc3VtID0gc3VtIF4gYnVmW2ldOwotCi0JcmV0dXJuIHN1bTsKLX0KLQotc3RhdGljIGludCBlZXByb21fbHJjX3JlYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgbGVuLCB1OCAqYnVmLCBpbnQgcmV0cmllcykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCByZXRyaWVzOyBpKyspIHsKLQkJaWYgKGVlcHJvbV9yZWFkKGFkYXB0ZXIsIGFkZHIsIGJ1ZiwgbGVuKSA9PSBsZW4pIHsKLQkJCWlmIChjYWxjX2xyYyhidWYsIGxlbiAtIDEpID09IGJ1ZltsZW4gLSAxXSkKLQkJCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotc3RhdGljIGludCBlZXByb21fbHJjX3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGxlbiwgdTggKndidWYsIHU4ICpyYnVmLCBpbnQgcmV0cmllcykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCByZXRyaWVzOyBpKyspIHsKLQkJaWYgKGVlcHJvbV93cml0ZShhZGFwdGVyLCBhZGRyLCB3YnVmLCBsZW4pID09IGxlbikgewotCQkJaWYgKGVlcHJvbV9scmNfcmVhZChhZGFwdGVyLCBhZGRyLCBsZW4sIHJidWYsIHJldHJpZXMpID09IDEpCi0JCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLSovCi0KLQotLyogVGhlc2UgZnVuY3Rpb25zIGNvdWxkIGJlIHVzZWQgdG8gdW5sb2NrIFNreVN0YXIyIGNhcmRzLiAqLwotCi0vKgotc3RhdGljIGludCBlZXByb21fd3JpdGVLZXkoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHU4ICprZXksIHUzMiBsZW4pCi17Ci0JdTggcmJ1ZlsyMF07Ci0JdTggd2J1ZlsyMF07Ci0KLQlpZiAobGVuICE9IDE2KQotCQlyZXR1cm4gMDsKLQotCW1lbWNweSh3YnVmLCBrZXksIGxlbik7Ci0KLQl3YnVmWzE2XSA9IDA7Ci0Jd2J1ZlsxN10gPSAwOwotCXdidWZbMThdID0gMDsKLQl3YnVmWzE5XSA9IGNhbGNfbHJjKHdidWYsIDE5KTsKLQotCXJldHVybiBlZXByb21fbHJjX3dyaXRlKGFkYXB0ZXIsIDB4M2U0LCAyMCwgd2J1ZiwgcmJ1ZiwgNCk7Ci19Ci0KLXN0YXRpYyBpbnQgZWVwcm9tX3JlYWRLZXkoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHU4ICprZXksIHUzMiBsZW4pCi17Ci0JdTggYnVmWzIwXTsKLQotCWlmIChsZW4gIT0gMTYpCi0JCXJldHVybiAwOwotCi0JaWYgKGVlcHJvbV9scmNfcmVhZChhZGFwdGVyLCAweDNlNCwgMjAsIGJ1ZiwgNCkgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQltZW1jcHkoa2V5LCBidWYsIGxlbik7Ci0KLQlyZXR1cm4gMTsKLX0KLSovCi0KLXN0YXRpYyBpbnQgZWVwcm9tX2dldF9tYWNfYWRkcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY2hhciB0eXBlLCB1OCAqbWFjKQotewotCXU4IHRtcFs4XTsKLQotCWlmIChlZXByb21fbHJjX3JlYWQoYWRhcHRlciwgMHgzZjgsIDgsIHRtcCwgNCkgIT0gMCkgewotCQlpZiAodHlwZSAhPSAwKSB7Ci0JCQltYWNbMF0gPSB0bXBbMF07Ci0JCQltYWNbMV0gPSB0bXBbMV07Ci0JCQltYWNbMl0gPSB0bXBbMl07Ci0JCQltYWNbM10gPSAweGZlOwotCQkJbWFjWzRdID0gMHhmZjsKLQkJCW1hY1s1XSA9IHRtcFszXTsKLQkJCW1hY1s2XSA9IHRtcFs0XTsKLQkJCW1hY1s3XSA9IHRtcFs1XTsKLQotCQl9IGVsc2UgewotCi0JCQltYWNbMF0gPSB0bXBbMF07Ci0JCQltYWNbMV0gPSB0bXBbMV07Ci0JCQltYWNbMl0gPSB0bXBbMl07Ci0JCQltYWNbM10gPSB0bXBbM107Ci0JCQltYWNbNF0gPSB0bXBbNF07Ci0JCQltYWNbNV0gPSB0bXBbNV07Ci0JCX0KLQotCQlyZXR1cm4gMTsKLQotCX0gZWxzZSB7Ci0KLQkJaWYgKHR5cGUgPT0gMCkgewotCQkJbWVtc2V0KG1hYywgMCwgNik7Ci0KLQkJfSBlbHNlIHsKLQotCQkJbWVtc2V0KG1hYywgMCwgOCk7Ci0JCX0KLQotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLS8qCi1zdGF0aWMgY2hhciBlZXByb21fc2V0X21hY19hZGRyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyIHR5cGUsIHU4ICptYWMpCi17Ci0JdTggdG1wWzhdOwotCi0JaWYgKHR5cGUgIT0gMCkgewotCQl0bXBbMF0gPSBtYWNbMF07Ci0JCXRtcFsxXSA9IG1hY1sxXTsKLQkJdG1wWzJdID0gbWFjWzJdOwotCQl0bXBbM10gPSBtYWNbNV07Ci0JCXRtcFs0XSA9IG1hY1s2XTsKLQkJdG1wWzVdID0gbWFjWzddOwotCi0JfSBlbHNlIHsKLQotCQl0bXBbMF0gPSBtYWNbMF07Ci0JCXRtcFsxXSA9IG1hY1sxXTsKLQkJdG1wWzJdID0gbWFjWzJdOwotCQl0bXBbM10gPSBtYWNbM107Ci0JCXRtcFs0XSA9IG1hY1s0XTsKLQkJdG1wWzVdID0gbWFjWzVdOwotCX0KLQotCXRtcFs2XSA9IDA7Ci0JdG1wWzddID0gY2FsY19scmModG1wLCA3KTsKLQotCWlmIChlZXByb21fd3JpdGUoYWRhcHRlciwgMHgzZjgsIHRtcCwgOCkgPT0gOCkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLSovCi0KLS8qIFBJRCBmaWx0ZXIgKi8KLQotLyogZXZlcnkgZmxleGNvcCBoYXMgNiAibG93ZXIiIGh3IFBJRCBmaWx0ZXJzICAgICAqLwotLyogdGhlc2UgYXJlIGVuYWJsZWQgYnkgc2V0dGluZyBiaXRzIDAtNSBvZiAweDIwOCAqLwotLyogZm9yIHRoZSAzMiBhZGRpdGlvbmFsIGZpbHRlcnMgd2UgaGF2ZSB0byBzZWxlY3Qgb25lICovCi0vKiBvZiB0aGVtIHRocm91Z2ggMHgzMTAgYW5kIG1vZGlmeSB0aHJvdWdoIDB4MzE0ICovCi0vKiBvcDogMD1kaXNhYmxlLCAxPWVuYWJsZSAqLwotc3RhdGljIHZvaWQgZmlsdGVyX2VuYWJsZV9od19maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZCwgdTggb3ApCi17Ci0JZHByaW50aygiJXM6IGlkPSVkIG9wPSVkXG4iLCBfX0ZVTkNUSU9OX18sIGlkLCBvcCk7Ci0JaWYgKGlkIDw9IDUpIHsKLQkJdTMyIG1hc2sgPSAoMHgwMDAwMDAwMSA8PCBpZCk7Ci0JCXdyaXRlX3JlZ19iaXRmaWVsZChhZGFwdGVyLCAweDIwOCwgbWFzaywgb3AgPyBtYXNrIDogMCk7Ci0JfSBlbHNlIHsKLQkJLyogc2VsZWN0ICovCi0JCXdyaXRlX3JlZ19iaXRmaWVsZChhZGFwdGVyLCAweDMxMCwgMHgxZiwgKGlkIC0gNikgJiAweDFmKTsKLQkJLyogbW9kaWZ5ICovCi0JCXdyaXRlX3JlZ19iaXRmaWVsZChhZGFwdGVyLCAweDMxNCwgMHgwMDAwNjAwMCwgb3AgPyAweDAwMDA0MDAwIDogMCk7Ci0JfQotfQotCi0vKiB0aGlzIHNldHMgdGhlIFBJRCB0aGF0IHNob3VsZCBwYXNzIHRoZSBzcGVjaWZpZWQgZmlsdGVyICovCi1zdGF0aWMgdm9pZCBwaWRfc2V0X2h3X3BpZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkLCB1MTYgcGlkKQotewotCWRwcmludGsoIiVzOiBpZD0lZCAgcGlkPSVkXG4iLCBfX0ZVTkNUSU9OX18sIGlkLCBwaWQpOwotCWlmIChpZCA8PSA1KSB7Ci0JCXUzMiBhZHIgPSAweDMwMCArICgoaWQgJiA2KSA8PCAxKTsKLQkJaW50IHNoaWZ0ID0gKGlkICYgMSkgPyAxNiA6IDA7Ci0JCWRwcmludGsoIiVzOiBpZD0lZCAgYWRkcj0leCAlYyAgcGlkPSVkXG4iLCBfX0ZVTkNUSU9OX18sIGlkLCBhZHIsIChpZCAmIDEpID8gJ2gnIDogJ2wnLCBwaWQpOwotCQl3cml0ZV9yZWdfYml0ZmllbGQoYWRhcHRlciwgYWRyLCAoMHg3ZmZmKSA8PCBzaGlmdCwgKHBpZCAmIDB4MWZmZikgPDwgc2hpZnQpOwotCX0gZWxzZSB7Ci0JCS8qIHNlbGVjdCAqLwotCQl3cml0ZV9yZWdfYml0ZmllbGQoYWRhcHRlciwgMHgzMTAsIDB4MWYsIChpZCAtIDYpICYgMHgxZik7Ci0JCS8qIG1vZGlmeSAqLwotCQl3cml0ZV9yZWdfYml0ZmllbGQoYWRhcHRlciwgMHgzMTQsIDB4MWZmZiwgcGlkICYgMHgxZmZmKTsKLQl9Ci19Ci0KLQotLyoKLXN0YXRpYyB2b2lkIGZpbHRlcl9lbmFibGVfbnVsbF9maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBvcCkKLXsKLQlkcHJpbnRrKCIlczogb3A9JXhcbiIsIF9fRlVOQ1RJT05fXywgb3ApOwotCi0Jd3JpdGVfcmVnX2JpdGZpZWxkKGFkYXB0ZXIsIDB4MjA4LCAweDAwMDAwMDQwLCBvcD8weDAwMDAwMDQwOjApOwotfQotKi8KLQotc3RhdGljIHZvaWQgZmlsdGVyX2VuYWJsZV9tYXNrX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIG9wKQotewotCWRwcmludGsoIiVzOiBvcD0leFxuIiwgX19GVU5DVElPTl9fLCBvcCk7Ci0KLQl3cml0ZV9yZWdfYml0ZmllbGQoYWRhcHRlciwgMHgyMDgsIDB4MDAwMDAwODAsIG9wID8gMHgwMDAwMDA4MCA6IDApOwotfQotCi0KLXN0YXRpYyB2b2lkIGN0cmxfZW5hYmxlX21hYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIG9wKQotewotCXdyaXRlX3JlZ19iaXRmaWVsZChhZGFwdGVyLCAweDIwOCwgMHgwMDAwNDAwMCwgb3AgPyAweDAwMDA0MDAwIDogMCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2Ffc2V0X21hY19kc3RfYWRkcl9maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWMpCi17Ci0JdTMyIHRtcDEsIHRtcDI7Ci0KLQl0bXAxID0gKG1hY1szXSA8PCAweDE4KSB8IChtYWNbMl0gPDwgMHgxMCkgfCAobWFjWzFdIDw8IDB4MDgpIHwgbWFjWzBdOwotCXRtcDIgPSAobWFjWzVdIDw8IDB4MDgpIHwgbWFjWzRdOwotCi0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NDE4LCB0bXAxKTsKLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg0MWMsIHRtcDIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi1zdGF0aWMgdm9pZCBzZXRfaWdub3JlX21hY19maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHU4IG9wKQotewotCWlmIChvcCAhPSAwKSB7Ci0JCXdyaXRlX3JlZ19iaXRmaWVsZChhZGFwdGVyLCAweDIwOCwgMHgwMDAwNDAwMCwgMCk7Ci0JCWFkYXB0ZXItPm1hY19maWx0ZXIgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChhZGFwdGVyLT5tYWNfZmlsdGVyICE9IDApIHsKLQkJCWFkYXB0ZXItPm1hY19maWx0ZXIgPSAwOwotCQkJd3JpdGVfcmVnX2JpdGZpZWxkKGFkYXB0ZXIsIDB4MjA4LCAweDAwMDA0MDAwLCAweDAwMDA0MDAwKTsKLQkJfQotCX0KLX0KLSovCi0KLS8qCi1zdGF0aWMgdm9pZCBjaGVja19udWxsX2ZpbHRlcl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JZmlsdGVyX2VuYWJsZV9udWxsX2ZpbHRlcihhZGFwdGVyLCAxKTsKLQlmaWx0ZXJfZW5hYmxlX21hc2tfZmlsdGVyKGFkYXB0ZXIsIDEpOwotfQotKi8KLQotc3RhdGljIHZvaWQgcGlkX3NldF9ncm91cF9waWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBwaWQpCi17Ci0JdTMyIHZhbHVlOwotCi0JZHByaW50aygiJXM6IHBpZD0leFxuIiwgX19GVU5DVElPTl9fLCBwaWQpOwotCXZhbHVlID0gKHBpZCAmIDB4M2ZmZikgfCAocmVhZF9yZWdfZHcoYWRhcHRlciwgMHgzMGMpICYgMHhmZmZmMDAwMCk7Ci0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MzBjLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBpZF9zZXRfZ3JvdXBfbWFzayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTE2IHBpZCkKLXsKLQl1MzIgdmFsdWU7Ci0KLQlkcHJpbnRrKCIlczogcGlkPSV4XG4iLCBfX0ZVTkNUSU9OX18sIHBpZCk7Ci0JdmFsdWUgPSAoKHBpZCAmIDB4M2ZmZikgPDwgMHgxMCkgfCAocmVhZF9yZWdfZHcoYWRhcHRlciwgMHgzMGMpICYgMHhmZmZmKTsKLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgzMGMsIHZhbHVlKTsKLX0KLQotLyoKLXN0YXRpYyBpbnQgcGlkX2dldF9ncm91cF9waWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JcmV0dXJuIHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4MzBjKSAmIDB4MDAwMDFmZmY7Ci19Ci0KLXN0YXRpYyBpbnQgcGlkX2dldF9ncm91cF9tYXNrKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiAocmVhZF9yZWdfZHcoYWRhcHRlciwgMHgzMGMpID4+IDB4MTApJiAweDAwMDAxZmZmOwotfQotKi8KLQotLyoKLXN0YXRpYyB2b2lkIHJlc2V0X2hhcmR3YXJlX3BpZF9maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JcGlkX3NldF9zdHJlYW0xX3BpZChhZGFwdGVyLCAweDFmZmYpOwotCi0JcGlkX3NldF9zdHJlYW0yX3BpZChhZGFwdGVyLCAweDFmZmYpOwotCWZpbHRlcl9lbmFibGVfc3RyZWFtMl9maWx0ZXIoYWRhcHRlciwgMCk7Ci0KLQlwaWRfc2V0X3Bjcl9waWQoYWRhcHRlciwgMHgxZmZmKTsKLQlmaWx0ZXJfZW5hYmxlX3Bjcl9maWx0ZXIoYWRhcHRlciwgMCk7Ci0KLQlwaWRfc2V0X3BtdF9waWQoYWRhcHRlciwgMHgxZmZmKTsKLQlmaWx0ZXJfZW5hYmxlX3BtdF9maWx0ZXIoYWRhcHRlciwgMCk7Ci0KLQlwaWRfc2V0X2VjbV9waWQoYWRhcHRlciwgMHgxZmZmKTsKLQlmaWx0ZXJfZW5hYmxlX2VjbV9maWx0ZXIoYWRhcHRlciwgMCk7Ci0KLQlwaWRfc2V0X2VtbV9waWQoYWRhcHRlciwgMHgxZmZmKTsKLQlmaWx0ZXJfZW5hYmxlX2VtbV9maWx0ZXIoYWRhcHRlciwgMCk7Ci19Ci0qLwotCi1zdGF0aWMgdm9pZCBpbml0X3BpZHMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGk7Ci0KLQlhZGFwdGVyLT5waWRfY291bnQgPSAwOwotCWFkYXB0ZXItPndob2xlX2JhbmR3aWR0aF9jb3VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnVzZWFibGVfaHdfZmlsdGVyczsgaSsrKSB7Ci0JCWRwcmludGsoIiVzOiBzZXR0aW5nIGZpbHRlciAlZCB0byAweDFmZmZcbiIsIF9fRlVOQ1RJT05fXywgaSk7Ci0JCWFkYXB0ZXItPmh3X3BpZHNbaV0gPSAweDFmZmY7Ci0JCXBpZF9zZXRfaHdfcGlkKGFkYXB0ZXIsIGksIDB4MWZmZik7Ci19Ci0KLQlwaWRfc2V0X2dyb3VwX3BpZChhZGFwdGVyLCAwKTsKLQlwaWRfc2V0X2dyb3VwX21hc2soYWRhcHRlciwgMHgxZmUwKTsKLX0KLQotc3RhdGljIHZvaWQgb3Blbl93aG9sZV9iYW5kd2lkdGgoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JZHByaW50aygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOwotCXBpZF9zZXRfZ3JvdXBfcGlkKGFkYXB0ZXIsIDApOwotCXBpZF9zZXRfZ3JvdXBfbWFzayhhZGFwdGVyLCAwKTsKLS8qCi0JZmlsdGVyX2VuYWJsZV9tYXNrX2ZpbHRlcihhZGFwdGVyLCAxKTsKLSovCi19Ci0KLXN0YXRpYyB2b2lkIGNsb3NlX3dob2xlX2JhbmR3aWR0aChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlkcHJpbnRrKCIlczpcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JcGlkX3NldF9ncm91cF9waWQoYWRhcHRlciwgMCk7Ci0JcGlkX3NldF9ncm91cF9tYXNrKGFkYXB0ZXIsIDB4MWZlMCk7Ci0vKgotCWZpbHRlcl9lbmFibGVfbWFza19maWx0ZXIoYWRhcHRlciwgMSk7Ci0qLwotfQotCi1zdGF0aWMgdm9pZCB3aG9sZV9iYW5kd2lkdGhfaW5jKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCWlmIChhZGFwdGVyLT53aG9sZV9iYW5kd2lkdGhfY291bnQrKyA9PSAwKQotCQlvcGVuX3dob2xlX2JhbmR3aWR0aChhZGFwdGVyKTsKLX0KLQotc3RhdGljIHZvaWQgd2hvbGVfYmFuZHdpZHRoX2RlYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoLS1hZGFwdGVyLT53aG9sZV9iYW5kd2lkdGhfY291bnQgPD0gMCkKLQkJY2xvc2Vfd2hvbGVfYmFuZHdpZHRoKGFkYXB0ZXIpOwotfQotCi0vKiBUaGUgc3BlY2lmaWVkIFBJRCBoYXMgdG8gYmUgbGV0IHRocm91Z2ggdGhlCi0gICBodyBmaWx0ZXJzLgotICAgV2UgdHJ5IHRvIGFsbG9jYXRlIGFuIGhhcmR3YXJlIGZpbHRlciBhbmQgb3BlbiB3aG9sZQotICAgYmFuZHdpZHRoIHdoZW4gYWxsb2NhdGlvbiBpcyBpbXBvc3NpYmxlLgotICAgQWxsIHBpZHM8PTB4MWYgcGFzcyB0aHJvdWdoIHRoZSBncm91cCBmaWx0ZXIuCi0gICBSZXR1cm5zIDEgb24gc3VjY2VzcywgLTEgb24gZXJyb3IgKi8KLXN0YXRpYyBpbnQgYWRkX2h3X3BpZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTE2IHBpZCkKLXsKLQlpbnQgaTsKLQotCWRwcmludGsoIiVzOiBwaWQ9JWRcbiIsIF9fRlVOQ1RJT05fXywgcGlkKTsKLQotCWlmIChwaWQgPD0gMHgxZikKLQkJcmV0dXJuIDE7Ci0KLQkvKiB3ZSBjYW4ndCB1c2UgYSBmaWx0ZXIgZm9yIDB4MjAwMCwgc28gbm8gc2VhcmNoICovCi0JaWYgKHBpZCAhPSAweDIwMDApIHsKLQkJLyogZmluZCBhbiB1bnVzZWQgaGFyZHdhcmUgZmlsdGVyICovCi0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT51c2VhYmxlX2h3X2ZpbHRlcnM7IGkrKykgewotCQkJZHByaW50aygiJXM6IHBpZD0lZCBzZWFyY2hpbmcgc2xvdD0lZFxuIiwgX19GVU5DVElPTl9fLCBwaWQsIGkpOwotCQkJaWYgKGFkYXB0ZXItPmh3X3BpZHNbaV0gPT0gMHgxZmZmKSB7Ci0JCQkJZHByaW50aygiJXM6IHBpZD0lZCBzbG90PSVkXG4iLCBfX0ZVTkNUSU9OX18sIHBpZCwgaSk7Ci0JCQkJYWRhcHRlci0+aHdfcGlkc1tpXSA9IHBpZDsKLQkJCQlwaWRfc2V0X2h3X3BpZChhZGFwdGVyLCBpLCBwaWQpOwotCQkJCWZpbHRlcl9lbmFibGVfaHdfZmlsdGVyKGFkYXB0ZXIsIGksIDEpOwotCQlyZXR1cm4gMTsKLQl9Ci0JfQotCX0KLQkvKiBpZiB3ZSBoYXZlIG5vdCB1c2VkIGEgZmlsdGVyLCB0aGlzIHBpZCBkZXBlbmRzIG9uIHdob2xlIGJhbmR3aWR0aCAqLwotCWRwcmludGsoIiVzOiBwaWQ9JWQgd2hvbGVfYmFuZHdpZHRoXG4iLCBfX0ZVTkNUSU9OX18sIHBpZCk7Ci0Jd2hvbGVfYmFuZHdpZHRoX2luYyhhZGFwdGVyKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0vKiByZXR1cm5zIC0xIGlmIHRoZSBwaWQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBmaWx0ZXJzICovCi1zdGF0aWMgaW50IHJlbW92ZV9od19waWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBwaWQpCi17Ci0JaW50IGk7Ci0KLQlkcHJpbnRrKCIlczogcGlkPSVkXG4iLCBfX0ZVTkNUSU9OX18sIHBpZCk7Ci0KLQlpZiAocGlkIDw9IDB4MWYpCi0JCXJldHVybiAxOwotCi0JLyogd2UgY2FuJ3QgdXNlIGEgZmlsdGVyIGZvciAweDIwMDAsIHNvIG5vIHNlYXJjaCAqLwotCWlmIChwaWQgIT0gMHgyMDAwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT51c2VhYmxlX2h3X2ZpbHRlcnM7IGkrKykgewotCQkJZHByaW50aygiJXM6IHBpZD0lZCBzZWFyY2hpbmcgc2xvdD0lZFxuIiwgX19GVU5DVElPTl9fLCBwaWQsIGkpOwotCQkJaWYgKGFkYXB0ZXItPmh3X3BpZHNbaV0gPT0gcGlkKSB7CS8vIGZpbmQgdGhlIHBpZCBzbG90Ci0JCQkJZHByaW50aygiJXM6IHBpZD0lZCBzbG90PSVkXG4iLCBfX0ZVTkNUSU9OX18sIHBpZCwgaSk7Ci0JCQkJYWRhcHRlci0+aHdfcGlkc1tpXSA9IDB4MWZmZjsKLQkJCQlwaWRfc2V0X2h3X3BpZChhZGFwdGVyLCBpLCAweDFmZmYpOwotCQkJCWZpbHRlcl9lbmFibGVfaHdfZmlsdGVyKGFkYXB0ZXIsIGksIDApOwotCQlyZXR1cm4gMTsKLQl9Ci0JfQotCX0KLQkvKiBpZiB3ZSBoYXZlIG5vdCB1c2VkIGEgZmlsdGVyLCB0aGlzIHBpZCBkZXBlbmRlZCBvbiB3aG9sZSBiYW5kd2l0aCAqLwotCWRwcmludGsoIiVzOiBwaWQ9JWQgd2hvbGVfYmFuZHdpZHRoXG4iLCBfX0ZVTkNUSU9OX18sIHBpZCk7Ci0Jd2hvbGVfYmFuZHdpZHRoX2RlYyhhZGFwdGVyKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0vKiBBZGRzIGEgUElEIHRvIHRoZSBmaWx0ZXJzLgotICAgQWRkaW5nIGEgcGlkIG1vcmUgdGhhbiBvbmNlIGlzIHBvc3NpYmxlLCB3ZSBrZWVwIHJlZmVyZW5jZSBjb3VudHMuCi0gICBXaG9sZSBzdHJlYW0gYXZhaWxhYmxlIHRocm91Z2ggcGlkPT0weDIwMDAuCi0gICBSZXR1cm5zIDEgb24gc3VjY2VzcywgLTEgb24gZXJyb3IgKi8KLXN0YXRpYyBpbnQgYWRkX3BpZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTE2IHBpZCkKLXsKLQlpbnQgaTsKLQotCWRwcmludGsoIiVzOiBwaWQ9JWRcbiIsIF9fRlVOQ1RJT05fXywgcGlkKTsKLQotCWlmIChwaWQgPiAweDFmZmUgJiYgcGlkICE9IDB4MjAwMCkKLQkJcmV0dXJuIC0xOwotCi0JLy8gY2hlY2sgaWYgdGhlIHBpZCBpcyBhbHJlYWR5IHByZXNlbnQKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cGlkX2NvdW50OyBpKyspCi0JCWlmIChhZGFwdGVyLT5waWRfbGlzdFtpXSA9PSBwaWQpIHsKLQkJCWFkYXB0ZXItPnBpZF9yY1tpXSsrOwkvLyBpbmNyZW1lbnQgcmVmIGNvdW50ZXIKLQkJcmV0dXJuIDE7Ci0JCX0KLQotCWlmIChhZGFwdGVyLT5waWRfY291bnQgPT0gTl9QSURfU0xPVFMpCi0JCXJldHVybiAtMTsJLy8gbm8gbW9yZSBwaWRzIGNhbiBiZSBhZGRlZAotCWFkYXB0ZXItPnBpZF9saXN0W2FkYXB0ZXItPnBpZF9jb3VudF0gPSBwaWQ7CS8vIHJlZ2lzdGVyIHBpZAotCWFkYXB0ZXItPnBpZF9yY1thZGFwdGVyLT5waWRfY291bnRdID0gMTsKLQlhZGFwdGVyLT5waWRfY291bnQrKzsKLQkvLyBoYXJkd2FyZSBzZXR0aW5nCi0JYWRkX2h3X3BpZChhZGFwdGVyLCBwaWQpOwotCi0JCQlyZXR1cm4gMTsKLQkJfQotCi0vKiBSZW1vdmVzIGEgUElEIGZyb20gdGhlIGZpbHRlcnMuICovCi1zdGF0aWMgaW50IHJlbW92ZV9waWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBwaWQpCi17Ci0JaW50IGk7Ci0KLQlkcHJpbnRrKCIlczogcGlkPSVkXG4iLCBfX0ZVTkNUSU9OX18sIHBpZCk7Ci0KLQlpZiAocGlkID4gMHgxZmZlICYmIHBpZCAhPSAweDIwMDApCi0JCXJldHVybiAtMTsKLQotCS8vIGNoZWNrIGlmIHRoZSBwaWQgaXMgcHJlc2VudCAoaXQgbXVzdCBiZSEpCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnBpZF9jb3VudDsgaSsrKSB7Ci0JCWlmIChhZGFwdGVyLT5waWRfbGlzdFtpXSA9PSBwaWQpIHsKLQkJCWFkYXB0ZXItPnBpZF9yY1tpXS0tOwotCQkJaWYgKGFkYXB0ZXItPnBpZF9yY1tpXSA8PSAwKSB7Ci0JCQkJLy8gcmVtb3ZlIGZyb20gdGhlIGxpc3QKLQkJCQlhZGFwdGVyLT5waWRfY291bnQtLTsKLQkJCQlhZGFwdGVyLT5waWRfbGlzdFtpXT1hZGFwdGVyLT5waWRfbGlzdFthZGFwdGVyLT5waWRfY291bnRdOwotCQkJCWFkYXB0ZXItPnBpZF9yY1tpXSA9IGFkYXB0ZXItPnBpZF9yY1thZGFwdGVyLT5waWRfY291bnRdOwotCQkJCS8vIGhhcmR3YXJlIHNldHRpbmcKLQkJCQlyZW1vdmVfaHdfcGlkKGFkYXB0ZXIsIHBpZCk7Ci0JCQl9Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXJldHVybiAtMTsKLX0KLQotCi0vKiBkbWEgJiBpcnEgKi8KLXN0YXRpYyB2b2lkIGN0cmxfZW5hYmxlX3NtYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIG9wKQotewotCXdyaXRlX3JlZ19iaXRmaWVsZChhZGFwdGVyLCAweDIwOCwgMHgwMDAwMDgwMCwgb3AgPyAweDAwMDAwODAwIDogMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV9lbmFibGVfZGlzYWJsZV9pcnEoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBmbGFnMSwgdTMyIGZsYWcyLCB1MzIgZmxhZzMpCi17Ci0JYWRhcHRlci0+ZG1hX2N0cmwgPSBhZGFwdGVyLT5kbWFfY3RybCAmIDB4MDAwZjAwMDA7Ci0KLQlpZiAoZmxhZzEgPT0gMCkgewotCQlpZiAoZmxhZzIgPT0gMCkKLQkJCWFkYXB0ZXItPmRtYV9jdHJsID0gYWRhcHRlci0+ZG1hX2N0cmwgJiB+MHgwMDAxMDAwMDsKLQkJZWxzZQotCQkJYWRhcHRlci0+ZG1hX2N0cmwgPSBhZGFwdGVyLT5kbWFfY3RybCB8IDB4MDAwMTAwMDA7Ci0KLQkJaWYgKGZsYWczID09IDApCi0JCQlhZGFwdGVyLT5kbWFfY3RybCA9IGFkYXB0ZXItPmRtYV9jdHJsICYgfjB4MDAwMjAwMDA7Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPmRtYV9jdHJsID0gYWRhcHRlci0+ZG1hX2N0cmwgfCAweDAwMDIwMDAwOwotCi0JfSBlbHNlIHsKLQotCQlpZiAoZmxhZzIgPT0gMCkKLQkJCWFkYXB0ZXItPmRtYV9jdHJsID0gYWRhcHRlci0+ZG1hX2N0cmwgJiB+MHgwMDA0MDAwMDsKLQkJZWxzZQotCQkJYWRhcHRlci0+ZG1hX2N0cmwgPSBhZGFwdGVyLT5kbWFfY3RybCB8IDB4MDAwNDAwMDA7Ci0KLQkJaWYgKGZsYWczID09IDApCi0JCQlhZGFwdGVyLT5kbWFfY3RybCA9IGFkYXB0ZXItPmRtYV9jdHJsICYgfjB4MDAwODAwMDA7Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPmRtYV9jdHJsID0gYWRhcHRlci0+ZG1hX2N0cmwgfCAweDAwMDgwMDAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaXJxX2RtYV9lbmFibGVfZGlzYWJsZV9pcnEoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBvcCkKLXsKLQl1MzIgdmFsdWU7Ci0KLQl2YWx1ZSA9IHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4KSAmIDB4ZmZmMGZmZmY7Ci0KLQlpZiAob3AgIT0gMCkKLQkJdmFsdWUgPSB2YWx1ZSB8IChhZGFwdGVyLT5kbWFfY3RybCAmIDB4MDAwZjAwMDApOwotCi0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB2YWx1ZSk7Ci19Ci0KLS8qIEZsZXhDb3BJSSBoYXMgMiBkbWEgY2hhbm5lbHMuIERNQTEgaXMgdXNlZCB0byB0cmFuc2ZlciBUUyBkYXRhIHRvCi0gICBzeXN0ZW0gbWVtb3J5LgotCi0gICBUaGUgRE1BMSBidWZmZXIgaXMgZGl2aWRlZCBpbiAyIHN1YmJ1ZmZlcnMgb2YgZXF1YWwgc2l6ZS4KLSAgIEZsZXhDb3BJSSB3aWxsIHRyYW5zZmVyIFRTIGRhdGEgdG8gb25lIHN1YmJ1ZmZlciwgc2lnbmFsIGFuIGludGVycnVwdAotICAgd2hlbiB0aGUgc3ViYnVmZmVyIGlzIGZ1bGwgYW5kIGNvbnRpbnVlIGZpbGxpZyB0aGUgc2Vjb25kIHN1YmJ1ZmZlci4KLQotICAgRm9yIERNQTE6Ci0gICAgICAgc3ViYnVmZmVyIHNpemUgaW4gMzItYml0IHdvcmRzIGlzIHN0b3JlZCBpbiB0aGUgZmlyc3QgMjQgYml0cyBvZgotICAgICAgIHJlZ2lzdGVyIDB4MDA0LiBUaGUgbGFzdCA4IGJpdHMgb2YgcmVnaXN0ZXIgMHgwMDQgY29udGFpbiB0aGUgbnVtYmVyCi0gICAgICAgb2Ygc3ViYnVmZmVycy4KLSAgICAgICAKLSAgICAgICB0aGUgZmlyc3QgMzAgYml0cyBvZiByZWdpc3RlciAweDAwMCBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdAotICAgICAgIHN1YmJ1ZmZlci4gVGhlIGxhc3QgMiBiaXRzIGNvbnRhaW4gMCwgd2hlbiBkbWExIGlzIGRpc2FibGVkIGFuZCAxLAotICAgICAgIHdoZW4gZG1hMSBpcyBlbmFibGVkLgotCi0gICAgICAgdGhlIGZpcnN0IDMwIGJpdHMgb2YgcmVnaXN0ZXIgMHgwMGMgY29udGFpbiB0aGUgYWRkcmVzcyBvZiB0aGUgc2Vjb25kCi0gICAgICAgc3ViYnVmZmVyLiB0aGUgbGFzdCAyIGJpdHMgY29udGFpbiAxLgotCi0gICAgICAgcmVnaXN0ZXIgMHgwMDggd2lsbCBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZSBzdWJidWZmZXIgdGhhdCB3YXMgZmlsbGVkCi0gICAgICAgd2l0aCBUUyBkYXRhLCB3aGVuIEZsZXhDb3BJSSB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4KLQotICAgRm9yIERNQTI6Ci0gICAgICAgc3ViYnVmZmVyIHNpemUgaW4gMzItYml0IHdvcmRzIGlzIHN0b3JlZCBpbiB0aGUgZmlyc3QgMjQgYml0cyBvZgotICAgICAgIHJlZ2lzdGVyIDB4MDE0LiBUaGUgbGFzdCA4IGJpdHMgb2YgcmVnaXN0ZXIgMHgwMTQgY29udGFpbiB0aGUgbnVtYmVyCi0gICAgICAgb2Ygc3ViYnVmZmVycy4KLSAgICAgICAKLSAgICAgICB0aGUgZmlyc3QgMzAgYml0cyBvZiByZWdpc3RlciAweDAxMCBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdAotICAgICAgIHN1YmJ1ZmZlci4gIFRoZSBsYXN0IDIgYml0cyBjb250YWluIDAsIHdoZW4gZG1hMSBpcyBkaXNhYmxlZCBhbmQgMSwKLSAgICAgICB3aGVuIGRtYTEgaXMgZW5hYmxlZC4KLQotICAgICAgIHRoZSBmaXJzdCAzMCBiaXRzIG9mIHJlZ2lzdGVyIDB4MDFjIGNvbnRhaW4gdGhlIGFkZHJlc3Mgb2YgdGhlIHNlY29uZAotICAgICAgIHN1YmJ1ZmZlci4gdGhlIGxhc3QgMiBiaXRzIGNvbnRhaW4gMS4KLQotICAgICAgIHJlZ2lzdGVyIDB4MDE4IGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBzdWJidWZmZXIgdGhhdCB3YXMgZmlsbGVkCi0gICAgICAgd2l0aCBUUyBkYXRhLCB3aGVuIEZsZXhDb3BJSSBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0LgotKi8KLXN0YXRpYyBpbnQgZG1hX2luaXRfZG1hKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgZG1hX2NoYW5uZWwpCi17Ci0JdTMyIHN1YmJ1ZmZlcnMsIHN1YmJ1ZnNpemUsIHN1YmJ1ZjAsIHN1YmJ1ZjE7Ci0KLQlpZiAoZG1hX2NoYW5uZWwgPT0gMCkgewotCQlkcHJpbnRrKCIlczogSW5pdGlhbGl6aW5nIERNQTEgY2hhbm5lbFxuIiwgX19GVU5DVElPTl9fKTsKLQotCQlzdWJidWZmZXJzID0gMjsKLQotCQlzdWJidWZzaXplID0gKCgoYWRhcHRlci0+ZG1hcTEuYnVmZmVyX3NpemUgLyAyKSAvIDQpIDw8IDgpIHwgc3ViYnVmZmVyczsKLQotCQlzdWJidWYwID0gYWRhcHRlci0+ZG1hcTEuYnVzX2FkZHIgJiAweGZmZmZmZmZjOwotCi0JCXN1YmJ1ZjEgPSAoKGFkYXB0ZXItPmRtYXExLmJ1c19hZGRyICsgYWRhcHRlci0+ZG1hcTEuYnVmZmVyX3NpemUgLyAyKSAmIDB4ZmZmZmZmZmMpIHwgMTsKLQotCQlkcHJpbnRrKCIlczogZmlyc3Qgc3ViYnVmZmVyIGFkZHJlc3MgPSAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIHN1YmJ1ZjApOwotCQl1ZGVsYXkoMTAwMCk7Ci0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDAwMCwgc3ViYnVmMCk7Ci0KLQkJZHByaW50aygiJXM6IHN1YmJ1ZmZlciBzaXplID0gMHgleFxuIiwgX19GVU5DVElPTl9fLCAoc3ViYnVmc2l6ZSA+PiA4KSAqIDQpOwotCQl1ZGVsYXkoMTAwMCk7Ci0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDAwNCwgc3ViYnVmc2l6ZSk7Ci0KLQkJZHByaW50aygiJXM6IHNlY29uZCBzdWJidWZmZXIgYWRkcmVzcyA9IDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgc3ViYnVmMSk7Ci0JCXVkZWxheSgxMDAwKTsKLQkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MDBjLCBzdWJidWYxKTsKLQotCQlkcHJpbnRrKCIlczogY291bnRlciA9IDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+ZG1hcTEuYnVzX2FkZHIgJiAweGZmZmZmZmZjKTsKLQkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MDA4LCBhZGFwdGVyLT5kbWFxMS5idXNfYWRkciAmIDB4ZmZmZmZmZmMpOwotCQl1ZGVsYXkoMTAwMCk7Ci0KLQkJZG1hX2VuYWJsZV9kaXNhYmxlX2lycShhZGFwdGVyLCAwLCAxLCBzdWJidWZmZXJzID8gMSA6IDApOwotCi0JCWlycV9kbWFfZW5hYmxlX2Rpc2FibGVfaXJxKGFkYXB0ZXIsIDEpOwotCi0JCXNyYW1fc2V0X21lZGlhX2Rlc3QoYWRhcHRlciwgMSk7Ci0JCXNyYW1fc2V0X25ldF9kZXN0KGFkYXB0ZXIsIDEpOwotCQlzcmFtX3NldF9jYWlfZGVzdChhZGFwdGVyLCAyKTsKLQkJc3JhbV9zZXRfY2FvX2Rlc3QoYWRhcHRlciwgMik7Ci0JfQotCi0JaWYgKGRtYV9jaGFubmVsID09IDEpIHsKLQkJZHByaW50aygiJXM6IEluaXRpYWxpemluZyBETUEyIGNoYW5uZWxcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQkJc3ViYnVmZmVycyA9IDI7Ci0KLQkJc3ViYnVmc2l6ZSA9ICgoKGFkYXB0ZXItPmRtYXEyLmJ1ZmZlcl9zaXplIC8gMikgLyA0KSA8PCA4KSB8IHN1YmJ1ZmZlcnM7Ci0KLQkJc3ViYnVmMCA9IGFkYXB0ZXItPmRtYXEyLmJ1c19hZGRyICYgMHhmZmZmZmZmYzsKLQotCQlzdWJidWYxID0gKChhZGFwdGVyLT5kbWFxMi5idXNfYWRkciArIGFkYXB0ZXItPmRtYXEyLmJ1ZmZlcl9zaXplIC8gMikgJiAweGZmZmZmZmZjKSB8IDE7Ci0KLQkJZHByaW50aygiJXM6IGZpcnN0IHN1YmJ1ZmZlciBhZGRyZXNzID0gMHgleFxuIiwgX19GVU5DVElPTl9fLCBzdWJidWYwKTsKLQkJdWRlbGF5KDEwMDApOwotCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgwMTAsIHN1YmJ1ZjApOwotCi0JCWRwcmludGsoIiVzOiBzdWJidWZmZXIgc2l6ZSA9IDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgKHN1YmJ1ZnNpemUgPj4gOCkgKiA0KTsKLQkJdWRlbGF5KDEwMDApOwotCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgwMTQsIHN1YmJ1ZnNpemUpOwotCi0JCWRwcmludGsoIiVzOiBzZWNvbmQgYnVmZmVyIGFkZHJlc3MgPSAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIHN1YmJ1ZjEpOwotCQl1ZGVsYXkoMTAwMCk7Ci0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDAxYywgc3ViYnVmMSk7Ci0KLQkJc3JhbV9zZXRfY2FpX2Rlc3QoYWRhcHRlciwgMik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGN0cmxfZW5hYmxlX3JlY2VpdmVfZGF0YShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIG9wKQotewotCWlmIChvcCA9PSAwKSB7Ci0JCXdyaXRlX3JlZ19iaXRmaWVsZChhZGFwdGVyLCAweDIwOCwgMHgwMDAwODAwMCwgMCk7Ci0JCWFkYXB0ZXItPmRtYV9zdGF0dXMgPSBhZGFwdGVyLT5kbWFfc3RhdHVzICYgfjB4MDAwMDAwMDQ7Ci0JfSBlbHNlIHsKLQkJd3JpdGVfcmVnX2JpdGZpZWxkKGFkYXB0ZXIsIDB4MjA4LCAweDAwMDA4MDAwLCAweDAwMDA4MDAwKTsKLQkJYWRhcHRlci0+ZG1hX3N0YXR1cyA9IGFkYXB0ZXItPmRtYV9zdGF0dXMgfCAweDAwMDAwMDA0OwotCX0KLX0KLQotLyogYml0IDAgb2YgZG1hX21hc2sgaXMgc2V0IHRvIDEgaWYgZG1hMSBjaGFubmVsIGhhcyB0byBiZSBlbmFibGVkL2Rpc2FibGVkCi0gICBiaXQgMSBvZiBkbWFfbWFzayBpcyBzZXQgdG8gMSBpZiBkbWEyIGNoYW5uZWwgaGFzIHRvIGJlIGVuYWJsZWQvZGlzYWJsZWQKLSovCi1zdGF0aWMgdm9pZCBkbWFfc3RhcnRfc3RvcChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGRtYV9tYXNrLCBpbnQgc3RhcnRfc3RvcCkKLXsKLQl1MzIgZG1hX2VuYWJsZSwgZG1hMV9lbmFibGUsIGRtYTJfZW5hYmxlOwotCi0JZHByaW50aygiJXM6IGRtYV9tYXNrPSV4XG4iLCBfX0ZVTkNUSU9OX18sIGRtYV9tYXNrKTsKLQotCWlmIChzdGFydF9zdG9wID09IDEpIHsKLQkJZHByaW50aygiJXM6IHN0YXJ0aW5nIGRtYVxuIiwgX19GVU5DVElPTl9fKTsKLQotCQlkbWExX2VuYWJsZSA9IDA7Ci0JCWRtYTJfZW5hYmxlID0gMDsKLQotCQlpZiAoKChkbWFfbWFzayAmIDEpICE9IDApICYmICgoYWRhcHRlci0+ZG1hX3N0YXR1cyAmIDEpID09IDApICYmIChhZGFwdGVyLT5kbWFxMS5idXNfYWRkciAhPSAwKSkgewotCQkJYWRhcHRlci0+ZG1hX3N0YXR1cyA9IGFkYXB0ZXItPmRtYV9zdGF0dXMgfCAxOwotCQkJZG1hMV9lbmFibGUgPSAxOwotCQl9Ci0KLQkJaWYgKCgoZG1hX21hc2sgJiAyKSAhPSAwKSAmJiAoKGFkYXB0ZXItPmRtYV9zdGF0dXMgJiAyKSA9PSAwKSAmJiAoYWRhcHRlci0+ZG1hcTIuYnVzX2FkZHIgIT0gMCkpIHsKLQkJCWFkYXB0ZXItPmRtYV9zdGF0dXMgPSBhZGFwdGVyLT5kbWFfc3RhdHVzIHwgMjsKLQkJCWRtYTJfZW5hYmxlID0gMTsKLQkJfQotCQkvLyBlbmFibGUgZG1hMSBhbmQgZG1hMgotCQlpZiAoKGRtYTFfZW5hYmxlID09IDEpICYmIChkbWEyX2VuYWJsZSA9PSAxKSkgewotCQkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MDAwLCBhZGFwdGVyLT5kbWFxMS5idXNfYWRkciB8IDEpOwotCQkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MDBjLCAoYWRhcHRlci0+ZG1hcTEuYnVzX2FkZHIgKyBhZGFwdGVyLT5kbWFxMS5idWZmZXJfc2l6ZSAvIDIpIHwgMSk7Ci0JCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgwMTAsIGFkYXB0ZXItPmRtYXEyLmJ1c19hZGRyIHwgMSk7Ci0KLQkJCWN0cmxfZW5hYmxlX3JlY2VpdmVfZGF0YShhZGFwdGVyLCAxKTsKLQotCQkJcmV0dXJuOwotCQl9Ci0JCS8vIGVuYWJsZSBkbWExCi0JCWlmICgoZG1hMV9lbmFibGUgPT0gMSkgJiYgKGRtYTJfZW5hYmxlID09IDApKSB7Ci0JCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgwMDAsIGFkYXB0ZXItPmRtYXExLmJ1c19hZGRyIHwgMSk7Ci0JCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgwMGMsIChhZGFwdGVyLT5kbWFxMS5idXNfYWRkciArIGFkYXB0ZXItPmRtYXExLmJ1ZmZlcl9zaXplIC8gMikgfCAxKTsKLQotCQkJY3RybF9lbmFibGVfcmVjZWl2ZV9kYXRhKGFkYXB0ZXIsIDEpOwotCi0JCQlyZXR1cm47Ci0JCX0KLQkJLy8gZW5hYmxlIGRtYTIKLQkJaWYgKChkbWExX2VuYWJsZSA9PSAwKSAmJiAoZG1hMl9lbmFibGUgPT0gMSkpIHsKLQkJCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDAxMCwgYWRhcHRlci0+ZG1hcTIuYnVzX2FkZHIgfCAxKTsKLQotCQkJY3RybF9lbmFibGVfcmVjZWl2ZV9kYXRhKGFkYXB0ZXIsIDEpOwotCi0JCQlyZXR1cm47Ci0JCX0KLQkJLy8gc3RhcnQgZG1hCi0JCWlmICgoZG1hMV9lbmFibGUgPT0gMCkgJiYgKGRtYTJfZW5hYmxlID09IDApKSB7Ci0JCQljdHJsX2VuYWJsZV9yZWNlaXZlX2RhdGEoYWRhcHRlciwgMSk7Ci0KLQkJCXJldHVybjsKLQkJfQotCi0JfSBlbHNlIHsKLQotCQlkcHJpbnRrKCIlczogc3RvcHBpbmcgZG1hXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JCWRtYV9lbmFibGUgPSBhZGFwdGVyLT5kbWFfc3RhdHVzICYgMHgwMDAwMDAwMzsKLQotCQlpZiAoKChkbWFfbWFzayAmIDEpICE9IDApICYmICgoYWRhcHRlci0+ZG1hX3N0YXR1cyAmIDEpICE9IDApKSB7Ci0JCQlkbWFfZW5hYmxlID0gZG1hX2VuYWJsZSAmIDB4ZmZmZmZmZmU7Ci0JCX0KLQotCQlpZiAoKChkbWFfbWFzayAmIDIpICE9IDApICYmICgoYWRhcHRlci0+ZG1hX3N0YXR1cyAmIDIpICE9IDApKSB7Ci0JCQlkbWFfZW5hYmxlID0gZG1hX2VuYWJsZSAmIDB4ZmZmZmZmZmQ7Ci0JCX0KLQkJLy9zdG9wIGRtYQotCQlpZiAoKGRtYV9lbmFibGUgPT0gMCkgJiYgKChhZGFwdGVyLT5kbWFfc3RhdHVzICYgNCkgIT0gMCkpIHsKLQkJCWN0cmxfZW5hYmxlX3JlY2VpdmVfZGF0YShhZGFwdGVyLCAwKTsKLQotCQkJdWRlbGF5KDMwMDApOwotCQl9Ci0JCS8vZGlzYWJsZSBkbWExCi0JCWlmICgoKGRtYV9tYXNrICYgMSkgIT0gMCkgJiYgKChhZGFwdGVyLT5kbWFfc3RhdHVzICYgMSkgIT0gMCkgJiYgKGFkYXB0ZXItPmRtYXExLmJ1c19hZGRyICE9IDApKSB7Ci0JCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgwMDAsIGFkYXB0ZXItPmRtYXExLmJ1c19hZGRyKTsKLQkJCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDAwYywgKGFkYXB0ZXItPmRtYXExLmJ1c19hZGRyICsgYWRhcHRlci0+ZG1hcTEuYnVmZmVyX3NpemUgLyAyKSB8IDEpOwotCi0JCQlhZGFwdGVyLT5kbWFfc3RhdHVzID0gYWRhcHRlci0+ZG1hX3N0YXR1cyAmIH4weDAwMDAwMDAxOwotCQl9Ci0JCS8vZGlzYWJsZSBkbWEyCi0JCWlmICgoKGRtYV9tYXNrICYgMikgIT0gMCkgJiYgKChhZGFwdGVyLT5kbWFfc3RhdHVzICYgMikgIT0gMCkgJiYgKGFkYXB0ZXItPmRtYXEyLmJ1c19hZGRyICE9IDApKSB7Ci0JCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgwMTAsIGFkYXB0ZXItPmRtYXEyLmJ1c19hZGRyKTsKLQotCQkJYWRhcHRlci0+ZG1hX3N0YXR1cyA9IGFkYXB0ZXItPmRtYV9zdGF0dXMgJiB+MHgwMDAwMDAwMjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgb3Blbl9zdHJlYW0oc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBwaWQpCi17Ci0JdTMyIGRtYV9tYXNrOwotCi0JKythZGFwdGVyLT5jYXB0dXJpbmc7Ci0KLQlmaWx0ZXJfZW5hYmxlX21hc2tfZmlsdGVyKGFkYXB0ZXIsIDEpOwotCi0JYWRkX3BpZChhZGFwdGVyLCBwaWQpOwotCi0JZHByaW50aygiJXM6IGFkYXB0ZXItPmRtYV9zdGF0dXM9JXhcbiIsIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+ZG1hX3N0YXR1cyk7Ci0KLQlpZiAoKGFkYXB0ZXItPmRtYV9zdGF0dXMgJiA3KSAhPSA3KSB7Ci0JCWRtYV9tYXNrID0gMDsKLQotCQlpZiAoKChhZGFwdGVyLT5kbWFfc3RhdHVzICYgMHgxMDAwMDAwMCkgIT0gMCkgJiYgKChhZGFwdGVyLT5kbWFfc3RhdHVzICYgMSkgPT0gMCkpIHsKLQkJCWRtYV9tYXNrID0gZG1hX21hc2sgfCAxOwotCi0JCQlhZGFwdGVyLT5kbWFxMS5oZWFkID0gMDsKLQkJCWFkYXB0ZXItPmRtYXExLnRhaWwgPSAwOwotCi0JCQltZW1zZXQoYWRhcHRlci0+ZG1hcTEuYnVmZmVyLCAwLCBhZGFwdGVyLT5kbWFxMS5idWZmZXJfc2l6ZSk7Ci0JCX0KLQotCQlpZiAoKChhZGFwdGVyLT5kbWFfc3RhdHVzICYgMHgyMDAwMDAwMCkgIT0gMCkgJiYgKChhZGFwdGVyLT5kbWFfc3RhdHVzICYgMikgPT0gMCkpIHsKLQkJCWRtYV9tYXNrID0gZG1hX21hc2sgfCAyOwotCi0JCQlhZGFwdGVyLT5kbWFxMi5oZWFkID0gMDsKLQkJCWFkYXB0ZXItPmRtYXEyLnRhaWwgPSAwOwotCQl9Ci0KLQkJaWYgKGRtYV9tYXNrICE9IDApIHsKLQkJCWlycV9kbWFfZW5hYmxlX2Rpc2FibGVfaXJxKGFkYXB0ZXIsIDEpOwotCi0JCQlkbWFfc3RhcnRfc3RvcChhZGFwdGVyLCBkbWFfbWFzaywgMSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGNsb3NlX3N0cmVhbShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTE2IHBpZCkKLXsKLQlpZiAoYWRhcHRlci0+Y2FwdHVyaW5nID4gMCkKLQkJLS1hZGFwdGVyLT5jYXB0dXJpbmc7Ci0KLQlkcHJpbnRrKCIlczogZG1hX3N0YXR1cz0leFxuIiwgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5kbWFfc3RhdHVzKTsKLQotCWlmIChhZGFwdGVyLT5jYXB0dXJpbmcgPT0gMCkgewotCQl1MzIgZG1hX21hc2sgPSAwOwotCi0JaWYgKChhZGFwdGVyLT5kbWFfc3RhdHVzICYgMSkgIT0gMCkKLQkJZG1hX21hc2sgPSBkbWFfbWFzayB8IDB4MDAwMDAwMDE7Ci0JaWYgKChhZGFwdGVyLT5kbWFfc3RhdHVzICYgMikgIT0gMCkKLQkJZG1hX21hc2sgPSBkbWFfbWFzayB8IDB4MDAwMDAwMDI7Ci0KLQlpZiAoZG1hX21hc2sgIT0gMCkgewotCQkJZG1hX3N0YXJ0X3N0b3AoYWRhcHRlciwgZG1hX21hc2ssIDApOwotCX0KLQl9Ci0JcmVtb3ZlX3BpZChhZGFwdGVyLCBwaWQpOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlcnJ1cHRfc2VydmljZV9kbWExKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9ICZhZGFwdGVyLT5kZW11eDsKLQotCWludCBuX2N1cl9kbWFfY291bnRlcjsKLQl1MzIgbl9udW1fYnl0ZXNfcGFyc2VkOwotCXUzMiBuX251bV9uZXdfYnl0ZXNfdHJhbnNmZXJyZWQ7Ci0JdTMyIGR3X2RlZmF1bHRfcGFja2V0X3NpemUgPSAxODg7Ci0JdTggZ2JfdG1wX2J1ZmZlclsxODhdOwotCXU4ICpwYl9kbWFfYnVmX2N1cl9wb3M7Ci0KLQluX2N1cl9kbWFfY291bnRlciA9IHJlYWRsKGFkYXB0ZXItPmlvX21lbSArIDB4MDA4KSAtIGFkYXB0ZXItPmRtYXExLmJ1c19hZGRyOwotCW5fY3VyX2RtYV9jb3VudGVyID0gKG5fY3VyX2RtYV9jb3VudGVyIC8gZHdfZGVmYXVsdF9wYWNrZXRfc2l6ZSkgKiBkd19kZWZhdWx0X3BhY2tldF9zaXplOwotCi0JaWYgKChuX2N1cl9kbWFfY291bnRlciA8IDApIHx8IChuX2N1cl9kbWFfY291bnRlciA+IGFkYXB0ZXItPmRtYXExLmJ1ZmZlcl9zaXplKSkgewotCQlkcHJpbnRrKCIlczogZG1hIGNvdW50ZXIgb3V0c2lkZSBkbWEgYnVmZmVyXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm47Ci0JfQotCi0JYWRhcHRlci0+ZG1hcTEuaGVhZCA9IG5fY3VyX2RtYV9jb3VudGVyOwotCi0JaWYgKGFkYXB0ZXItPmRtYXExLnRhaWwgPD0gbl9jdXJfZG1hX2NvdW50ZXIpIHsKLQkJbl9udW1fbmV3X2J5dGVzX3RyYW5zZmVycmVkID0gbl9jdXJfZG1hX2NvdW50ZXIgLSBhZGFwdGVyLT5kbWFxMS50YWlsOwotCi0JfSBlbHNlIHsKLQotCQluX251bV9uZXdfYnl0ZXNfdHJhbnNmZXJyZWQgPSAoYWRhcHRlci0+ZG1hcTEuYnVmZmVyX3NpemUgLSBhZGFwdGVyLT5kbWFxMS50YWlsKSArIG5fY3VyX2RtYV9jb3VudGVyOwotCX0KLQotCWRkcHJpbnRrKCIlczogbl9jdXJfZG1hX2NvdW50ZXIgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBuX2N1cl9kbWFfY291bnRlcik7Ci0JZGRwcmludGsoIiVzOiBkbWFxMS50YWlsICAgICAgICA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPmRtYXExLnRhaWwpOwotCWRkcHJpbnRrKCIlczogYnl0ZXNfdHJhbnNmZXJyZWQgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBuX251bV9uZXdfYnl0ZXNfdHJhbnNmZXJyZWQpOwotCi0JaWYgKG5fbnVtX25ld19ieXRlc190cmFuc2ZlcnJlZCA8IGR3X2RlZmF1bHRfcGFja2V0X3NpemUpCi0JCXJldHVybjsKLQotCW5fbnVtX2J5dGVzX3BhcnNlZCA9IDA7Ci0KLQl3aGlsZSAobl9udW1fYnl0ZXNfcGFyc2VkIDwgbl9udW1fbmV3X2J5dGVzX3RyYW5zZmVycmVkKSB7Ci0JCXBiX2RtYV9idWZfY3VyX3BvcyA9IGFkYXB0ZXItPmRtYXExLmJ1ZmZlciArIGFkYXB0ZXItPmRtYXExLnRhaWw7Ci0KLQkJaWYgKGFkYXB0ZXItPmRtYXExLmJ1ZmZlciArIGFkYXB0ZXItPmRtYXExLmJ1ZmZlcl9zaXplIDwgYWRhcHRlci0+ZG1hcTEuYnVmZmVyICsgYWRhcHRlci0+ZG1hcTEudGFpbCArIDE4OCkgewotCQkJbWVtY3B5KGdiX3RtcF9idWZmZXIsIGFkYXB0ZXItPmRtYXExLmJ1ZmZlciArIGFkYXB0ZXItPmRtYXExLnRhaWwsCi0JCQkgICAgICAgYWRhcHRlci0+ZG1hcTEuYnVmZmVyX3NpemUgLSBhZGFwdGVyLT5kbWFxMS50YWlsKTsKLQkJCW1lbWNweShnYl90bXBfYnVmZmVyICsgKGFkYXB0ZXItPmRtYXExLmJ1ZmZlcl9zaXplIC0gYWRhcHRlci0+ZG1hcTEudGFpbCksIGFkYXB0ZXItPmRtYXExLmJ1ZmZlciwKLQkJCSAgICAgICAoMTg4IC0gKGFkYXB0ZXItPmRtYXExLmJ1ZmZlcl9zaXplIC0gYWRhcHRlci0+ZG1hcTEudGFpbCkpKTsKLQotCQkJcGJfZG1hX2J1Zl9jdXJfcG9zID0gZ2JfdG1wX2J1ZmZlcjsKLQkJfQotCi0JCWlmIChhZGFwdGVyLT5jYXB0dXJpbmcgIT0gMCkgewotCQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKGR2YmRteCwgcGJfZG1hX2J1Zl9jdXJfcG9zLCBkd19kZWZhdWx0X3BhY2tldF9zaXplIC8gMTg4KTsKLQkJfQotCi0JCW5fbnVtX2J5dGVzX3BhcnNlZCA9IG5fbnVtX2J5dGVzX3BhcnNlZCArIGR3X2RlZmF1bHRfcGFja2V0X3NpemU7Ci0KLQkJYWRhcHRlci0+ZG1hcTEudGFpbCA9IGFkYXB0ZXItPmRtYXExLnRhaWwgKyBkd19kZWZhdWx0X3BhY2tldF9zaXplOwotCi0JCWlmIChhZGFwdGVyLT5kbWFxMS50YWlsID49IGFkYXB0ZXItPmRtYXExLmJ1ZmZlcl9zaXplKQotCQkJYWRhcHRlci0+ZG1hcTEudGFpbCA9IGFkYXB0ZXItPmRtYXExLnRhaWwgLSBhZGFwdGVyLT5kbWFxMS5idWZmZXJfc2l6ZTsKLQl9OwotfQotCi1zdGF0aWMgdm9pZCBpbnRlcnJ1cHRfc2VydmljZV9kbWEyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXByaW50aygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKnRtcCA9IGRldl9pZDsKLQotCXUzMiB2YWx1ZTsKLQotCWRkcHJpbnRrKCIlczpcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlzcGluX2xvY2tfaXJxKCZ0bXAtPmxvY2spOwotCi0JaWYgKDAgPT0gKCh2YWx1ZSA9IHJlYWRfcmVnX2R3KHRtcCwgMHgyMGMpKSAmIDB4MGYpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycSgmdG1wLT5sb2NrKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQkKLQl3aGlsZSAodmFsdWUgIT0gMCkgewotCQlpZiAoKHZhbHVlICYgMHgwMykgIT0gMCkKLQkJCWludGVycnVwdF9zZXJ2aWNlX2RtYTEodG1wKTsKLQkJaWYgKCh2YWx1ZSAmIDB4MGMpICE9IDApCi0JCQlpbnRlcnJ1cHRfc2VydmljZV9kbWEyKHRtcCk7Ci0JCXZhbHVlID0gcmVhZF9yZWdfZHcodG1wLCAweDIwYykgJiAweDBmOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycSgmdG1wLT5sb2NrKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9kbWFfcXVldWVfb25lKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZG1hcSAqZG1hcSwKLQkJCSAgICAgIGludCBzaXplLCBpbnQgZG1hcV9vZmZzZXQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0KLQlkbWFxLT5oZWFkID0gMDsKLQlkbWFxLT50YWlsID0gMDsKLQotCWRtYXEtPmJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemUgKyAweDgwLCAmZG1hX2FkZHIpOwotCWlmICghZG1hcS0+YnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRtYXEtPmJ1c19hZGRyID0gZG1hX2FkZHI7Ci0JZG1hcS0+YnVmZmVyX3NpemUgPSBzaXplOwotCi0JZG1hX2luaXRfZG1hKGFkYXB0ZXIsIGRtYXFfb2Zmc2V0KTsKLQotCWRkcHJpbnRrKCIlczogYWxsb2NhdGVkIGRtYSBidWZmZXIgYXQgMHglcCwgbGVuZ3RoPSVkXG4iLAotCQkgX19GVU5DVElPTl9fLCBkbWFxLT5idWZmZXIsIHNpemUpOwotCi0JcmV0dXJuIDA7Ci0JfQotCi1zdGF0aWMgaW50IGluaXRfZG1hX3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCB7Ci0JCXN0cnVjdCBkbWFxICpkbWFxOwotCQl1MzIgZG1hX3N0YXR1czsKLQkJaW50IHNpemU7Ci0JfSBkbWFxX2Rlc2NbXSA9IHsKLQkJeyAmYWRhcHRlci0+ZG1hcTEsIDB4MTAwMDAwMDAsIFNJWkVfT0ZfQlVGX0RNQTEgfSwKLQkJeyAmYWRhcHRlci0+ZG1hcTIsIDB4MjAwMDAwMDAsIFNJWkVfT0ZfQlVGX0RNQTIgfQotCX0sICpwID0gZG1hcV9kZXNjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKywgcCsrKSB7Ci0JCWlmIChpbml0X2RtYV9xdWV1ZV9vbmUoYWRhcHRlciwgcC0+ZG1hcSwgcC0+c2l6ZSwgaSkgPCAwKQotCQkJYWRhcHRlci0+ZG1hX3N0YXR1cyAmPSB+cC0+ZG1hX3N0YXR1czsKLQkJZWxzZQotCQkJYWRhcHRlci0+ZG1hX3N0YXR1cyB8PSBwLT5kbWFfc3RhdHVzOwotCX0KLQlyZXR1cm4gKGFkYXB0ZXItPmRtYV9zdGF0dXMgJiAweDMwMDAwMDAwKSA/IDAgOiAtRU5PTUVNOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2RtYV9xdWV1ZV9vbmUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBkbWFxICpkbWFxKQotewotCWlmIChkbWFxLT5idWZmZXIpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBkbWFxLT5idWZmZXJfc2l6ZSArIDB4ODAsCi0JCQkJICAgIGRtYXEtPmJ1ZmZlciwgZG1hcS0+YnVzX2FkZHIpOwotCQltZW1zZXQoZG1hcSwgMCwgc2l6ZW9mKCpkbWFxKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2RtYV9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgZG1hcSAqZG1hcVtdID0gewotCQkmYWRhcHRlci0+ZG1hcTEsCi0JCSZhZGFwdGVyLT5kbWFxMiwKLQkJTlVMTAotCX0sICoqcDsKLQotCWZvciAocCA9IGRtYXE7ICpwOyBwKyspCi0JCWZyZWVfZG1hX3F1ZXVlX29uZShhZGFwdGVyLCAqcCk7Ci0JfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX2FkYXB0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCi0JaW91bm1hcChhZGFwdGVyLT5pb19tZW0pOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci0JcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDEpOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2FkYXB0ZXJfb2JqZWN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCWRwcmludGsoIiVzOlxuIiwgX19GVU5DVElPTl9fKTsKLQotCWNsb3NlX3N0cmVhbShhZGFwdGVyLCAwKTsKLQkJZnJlZV9pcnEoYWRhcHRlci0+aXJxLCBhZGFwdGVyKTsKLQlmcmVlX2RtYV9xdWV1ZShhZGFwdGVyKTsKLQlyZWxlYXNlX2FkYXB0ZXIoYWRhcHRlcik7Ci0Ja2ZyZWUoYWRhcHRlcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBza3lzdGFyMl9wY2lfZHJpdmVyOwotCi1zdGF0aWMgaW50IGNsYWltX2FkYXB0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCXUxNiB2YXI7Ci0JaW50IHJldDsKLQotCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAxLCBza3lzdGFyMl9wY2lfZHJpdmVyLm5hbWUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCBza3lzdGFyMl9wY2lfZHJpdmVyLm5hbWUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9wY2lfcmVsZWFzZV8xOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmYWRhcHRlci0+Y2FyZF9yZXZpc2lvbik7Ci0KLQlkcHJpbnRrKCIlczogY2FyZCByZXZpc2lvbiAleCBcbiIsIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+Y2FyZF9yZXZpc2lvbik7Ci0KLQlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfcGNpX3JlbGVhc2VfMDsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDQsICZ2YXIpOwotCi0JaWYgKCh2YXIgJiA0KSA9PSAwKQotCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCWFkYXB0ZXItPmlvX3BvcnQgPSBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydDsKLQotCWFkYXB0ZXItPmlvX21lbSA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIDB4ODAwKTsKLQotCWlmICghYWRhcHRlci0+aW9fbWVtKSB7Ci0JCWRwcmludGsoIiVzOiBjYW4gbm90IG1hcCBpbyBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyX3BjaV9kaXNhYmxlOwotCX0KLQotCWRwcmludGsoIiVzOiBpbyBtZW1vcnkgbWFwZWQgYXQgJXBcbiIsIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+aW9fbWVtKTsKLQotCXJldCA9IDE7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLQotZXJyX3BjaV9kaXNhYmxlOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLWVycl9wY2lfcmVsZWFzZV8wOgotCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKLWVycl9wY2lfcmVsZWFzZV8xOgotCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAxKTsKLQlnb3RvIG91dDsKLX0KLQotLyoKLXN0YXRpYyBpbnQgc2xsX3Jlc2V0X2ZsZXhjb3Aoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCAwKTsKLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMTAsIDB4YjJmZik7Ci0KLQlyZXR1cm4gMDsKLX0KLSovCi0KLXN0YXRpYyB2b2lkIGRlY2lkZV9ob3dfbWFueV9od19maWx0ZXJzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCWludCBod19maWx0ZXJzOwotCWludCBtb2Rfb3B0aW9uX2h3X2ZpbHRlcnM7Ci0KLQkvLyBGbGV4Q29wIElJYiAmIElJSSBoYXZlIDYrMzIgaHcgZmlsdGVycyAgICAKLQkvLyBGbGV4Q29wIElJIGhhcyA2IGh3IGZpbHRlcnMsIGV2ZXJ5IG90aGVyIHNob3VsZCBoYXZlIGF0IGxlYXN0IDYKLQlzd2l0Y2ggKGFkYXB0ZXItPmIyYzJfcmV2aXNpb24pIHsKLQljYXNlIDB4ODI6CQkvKiBJSSAqLwotCQlod19maWx0ZXJzID0gNjsKLQkJYnJlYWs7Ci0JY2FzZSAweGMzOgkJLyogSUlCICovCi0JCWh3X2ZpbHRlcnMgPSA2ICsgMzI7Ci0JCWJyZWFrOwotCWNhc2UgMHhjMDoJCS8qIElJSSAqLwotCQlod19maWx0ZXJzID0gNiArIDMyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlod19maWx0ZXJzID0gNjsKLQkJYnJlYWs7Ci0JfQotCXByaW50aygiJXM6IHRoZSBjaGlwIGhhcyAlaSBoYXJkd2FyZSBmaWx0ZXJzIiwgX19GSUxFX18sIGh3X2ZpbHRlcnMpOwotCi0JbW9kX29wdGlvbl9od19maWx0ZXJzID0gMDsKLQlpZiAoZW5hYmxlX2h3X2ZpbHRlcnMgPj0gMSkKLQkJbW9kX29wdGlvbl9od19maWx0ZXJzICs9IDY7Ci0JaWYgKGVuYWJsZV9od19maWx0ZXJzID49IDIpCi0JCW1vZF9vcHRpb25faHdfZmlsdGVycyArPSAzMjsKLQotCWlmIChtb2Rfb3B0aW9uX2h3X2ZpbHRlcnMgPj0gaHdfZmlsdGVycykgewotCQlhZGFwdGVyLT51c2VhYmxlX2h3X2ZpbHRlcnMgPSBod19maWx0ZXJzOwotCX0gZWxzZSB7Ci0JCWFkYXB0ZXItPnVzZWFibGVfaHdfZmlsdGVycyA9IG1vZF9vcHRpb25faHdfZmlsdGVyczsKLQkJcHJpbnRrKCIsIGJ1dCBvbmx5ICVkIHdpbGwgYmUgdXNlZCBiZWNhdXNlIG9mIG1vZHVsZSBvcHRpb24iLCBtb2Rfb3B0aW9uX2h3X2ZpbHRlcnMpOwotCX0KLQlwcmludGsoIlxuIik7Ci0JZHByaW50aygiJXM6IHVzZWFibGVfaGFyZHdhcmVfZmlsdGVycyBzZXQgdG8gJWlcbiIsIF9fRklMRV9fLCBhZGFwdGVyLT51c2VhYmxlX2h3X2ZpbHRlcnMpOwotfQotCi1zdGF0aWMgaW50IGRyaXZlcl9pbml0aWFsaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwotCXUzMiB0bXA7Ci0JaW50IHJldCA9IC1FTk9NRU07Ci0KLQlhZGFwdGVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJZHByaW50aygiJXM6IG91dCBvZiBtZW1vcnkhXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltZW1zZXQoYWRhcHRlciwgMCwgc2l6ZW9mKHN0cnVjdCBhZGFwdGVyKSk7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldixhZGFwdGVyKTsKLQotCWFkYXB0ZXItPnBkZXYgPSBwZGV2OwotCWFkYXB0ZXItPmlycSA9IHBkZXYtPmlycTsKLQotCXJldCA9IGNsYWltX2FkYXB0ZXIoYWRhcHRlcik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX2tmcmVlOwotCi0JaXJxX2RtYV9lbmFibGVfZGlzYWJsZV9pcnEoYWRhcHRlciwgMCk7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGlzciwgMHg0MDAwMDAwLCAiU2t5c3RhcjIiLCBhZGFwdGVyKTsKLQlpZiAocmV0IDwgMCkgewotCQlkcHJpbnRrKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGlycT0lZCAhXG4iLCBfX0ZVTkNUSU9OX18sIHBkZXYtPmlycSk7Ci0JCWdvdG8gZXJyX3JlbGVhc2VfYWRhcHRlcjsKLQl9Ci0KLQlyZWFkX3JlZ19kdyhhZGFwdGVyLCAweDIwOCk7Ci0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCAwKTsKLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMTAsIDB4YjJmZik7Ci0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCAweDQwKTsKLQotCXJldCA9IGluaXRfZG1hX3F1ZXVlKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9mcmVlX2lycTsKLQotCWFkYXB0ZXItPmIyYzJfcmV2aXNpb24gPSAocmVhZF9yZWdfZHcoYWRhcHRlciwgMHgyMDQpID4+IDB4MTgpOwotCi0Jc3dpdGNoIChhZGFwdGVyLT5iMmMyX3JldmlzaW9uKSB7Ci0JY2FzZSAweDgyOgotCQlwcmludGsoIiVzOiBGbGV4Q29wSUkocmV2LjEzMCkgY2hpcCBmb3VuZFxuIiwgX19GSUxFX18pOwotCQlicmVhazsKLQljYXNlIDB4YzM6Ci0JCXByaW50aygiJXM6IEZsZXhDb3BJSUIocmV2LjE5NSkgY2hpcCBmb3VuZFxuIiwgX19GSUxFX18pOwotCQlicmVhazsKLQljYXNlIDB4YzA6Ci0JCXByaW50aygiJXM6IEZsZXhDb3BJSUkocmV2LjE5MikgY2hpcCBmb3VuZFxuIiwgX19GSUxFX18pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBUaGUgcmV2aXNpb24gb2YgdGhlIEZsZXhDb3AgY2hpcCBvbiB5b3VyIGNhcmQgaXMgJWRcbiIsIF9fRklMRV9fLCBhZGFwdGVyLT5iMmMyX3JldmlzaW9uKTsKLQkJcHJpbnRrKCIlczogVGhpcyBkcml2ZXIgd29ya3Mgb25seSB3aXRoIEZsZXhDb3BJSShyZXYuMTMwKSwgRmxleENvcElJQihyZXYuMTk1KSBhbmQgRmxleENvcElJSShyZXYuMTkyKS5cbiIsIF9fRklMRV9fKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnJfZnJlZV9kbWFfcXVldWU7Ci0JCX0KLQotCWRlY2lkZV9ob3dfbWFueV9od19maWx0ZXJzKGFkYXB0ZXIpOwotCi0JaW5pdF9waWRzKGFkYXB0ZXIpOwotCi0JdG1wID0gcmVhZF9yZWdfZHcoYWRhcHRlciwgMHgyMDQpOwotCi0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA0LCAwKTsKLQltZGVsYXkoMjApOwotCi0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA0LCB0bXApOwotCW1kZWxheSgxMCk7Ci0KLQl0bXAgPSByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDMwOCk7Ci0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MzA4LCAweDQwMDAgfCB0bXApOwotCi0JYWRhcHRlci0+ZHdfc3JhbV90eXBlID0gMHgxMDAwMDsKLQotCXNsbF9kZXRlY3Rfc3JhbV9zaXplKGFkYXB0ZXIpOwotCi0JZHByaW50aygiJXMgc3JhbSBsZW5ndGggPSAlZCwgc3JhbSB0eXBlPSAleFxuIiwgX19GVU5DVElPTl9fLCBzcmFtX2xlbmd0aChhZGFwdGVyKSwgYWRhcHRlci0+ZHdfc3JhbV90eXBlKTsKLQotCXNyYW1fc2V0X21lZGlhX2Rlc3QoYWRhcHRlciwgMSk7Ci0Jc3JhbV9zZXRfbmV0X2Rlc3QoYWRhcHRlciwgMSk7Ci0KLQljdHJsX2VuYWJsZV9zbWMoYWRhcHRlciwgMCk7Ci0KLQlzcmFtX3NldF9jYWlfZGVzdChhZGFwdGVyLCAyKTsKLQlzcmFtX3NldF9jYW9fZGVzdChhZGFwdGVyLCAyKTsKLQotCWRtYV9lbmFibGVfZGlzYWJsZV9pcnEoYWRhcHRlciwgMSwgMCwgMCk7Ci0KLQlpZiAoZWVwcm9tX2dldF9tYWNfYWRkcihhZGFwdGVyLCAwLCBhZGFwdGVyLT5tYWNfYWRkcikgIT0gMCkgewotCQlwcmludGsoIiVzIE1BQyBhZGRyZXNzID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFxuIiwgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5tYWNfYWRkclswXSwKLQkJICAgICAgIGFkYXB0ZXItPm1hY19hZGRyWzFdLCBhZGFwdGVyLT5tYWNfYWRkclsyXSwgYWRhcHRlci0+bWFjX2FkZHJbM10sIGFkYXB0ZXItPm1hY19hZGRyWzRdLCBhZGFwdGVyLT5tYWNfYWRkcls1XSwKLQkJICAgICAgIGFkYXB0ZXItPm1hY19hZGRyWzZdLCBhZGFwdGVyLT5tYWNfYWRkcls3XQotCQkgICAgKTsKLQotCQljYV9zZXRfbWFjX2RzdF9hZGRyX2ZpbHRlcihhZGFwdGVyLCBhZGFwdGVyLT5tYWNfYWRkcik7Ci0JCWN0cmxfZW5hYmxlX21hYyhhZGFwdGVyLCAxKTsKLQl9Ci0KLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bG9jayk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotCi1lcnJfZnJlZV9kbWFfcXVldWU6Ci0JZnJlZV9kbWFfcXVldWUoYWRhcHRlcik7Ci1lcnJfZnJlZV9pcnE6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBhZGFwdGVyKTsKLWVycl9yZWxlYXNlX2FkYXB0ZXI6Ci0JcmVsZWFzZV9hZGFwdGVyKGFkYXB0ZXIpOwotZXJyX2tmcmVlOgotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlrZnJlZShhZGFwdGVyKTsKLQlnb3RvIG91dDsKLX0KLQotc3RhdGljIHZvaWQgZHJpdmVyX2hhbHQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0KLQlpcnFfZG1hX2VuYWJsZV9kaXNhYmxlX2lycShhZGFwdGVyLCAwKTsKLQotCWN0cmxfZW5hYmxlX3JlY2VpdmVfZGF0YShhZGFwdGVyLCAwKTsKLQotCWZyZWVfYWRhcHRlcl9vYmplY3QoYWRhcHRlcik7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHZiX3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQotewotCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OwotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopIGR2YmRteC0+cHJpdjsKLQotCWRwcmludGsoIiVzOiBQSUQ9JWQsIHR5cGU9JWRcbiIsIF9fRlVOQ1RJT05fXywgZHZiZG14ZmVlZC0+cGlkLCBkdmJkbXhmZWVkLT50eXBlKTsKLQotCW9wZW5fc3RyZWFtKGFkYXB0ZXIsIGR2YmRteGZlZWQtPnBpZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkdmJfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCkKLXsKLQlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkbXggPSBkdmJkbXhmZWVkLT5kZW11eDsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKSBkdmJkbXgtPnByaXY7Ci0KLQlkcHJpbnRrKCIlczogUElEPSVkLCB0eXBlPSVkXG4iLCBfX0ZVTkNUSU9OX18sIGR2YmRteGZlZWQtPnBpZCwgZHZiZG14ZmVlZC0+dHlwZSk7Ci0KLQljbG9zZV9zdHJlYW0oYWRhcHRlciwgZHZiZG14ZmVlZC0+cGlkKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBsbmIgY29udHJvbCAqLwotc3RhdGljIHZvaWQgc2V0X3R1bmVyX3RvbmUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHU4IHRvbmUpCi17Ci0JdTE2IHd6X2hhbGZfcGVyaW9kX2Zvcl80NV9taHpbXSA9IHsgMHgwMWZmLCAweDAxNTQsIDB4MDBmZiwgMHgwMGNjIH07Ci0JdTE2IGF4OwotCi0JZHByaW50aygiJXM6ICV1XG4iLCBfX0ZVTkNUSU9OX18sIHRvbmUpOwotCi0Jc3dpdGNoICh0b25lKSB7Ci0JY2FzZSAxOgotCQlheCA9IHd6X2hhbGZfcGVyaW9kX2Zvcl80NV9taHpbMF07Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJYXggPSB3el9oYWxmX3BlcmlvZF9mb3JfNDVfbWh6WzFdOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWF4ID0gd3pfaGFsZl9wZXJpb2RfZm9yXzQ1X21oelsyXTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQlheCA9IHd6X2hhbGZfcGVyaW9kX2Zvcl80NV9taHpbM107Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYXggPSAwOwotCX0KLQotCWlmIChheCAhPSAwKSB7Ci0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwMCwgKChheCA8PCAweDBmKSArIChheCAmIDB4N2ZmZikpIHwgMHg0MDAwMDAwMCk7Ci0KLQl9IGVsc2UgewotCi0JCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwMCwgMHg0MGZmODAwMCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzZXRfdHVuZXJfcG9sYXJpdHkoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHU4IHBvbGFyaXR5KQotewotCXUzMiB2YXI7Ci0KLQlkcHJpbnRrKCIlcyA6IHBvbGFyaXR5ID0gJXUgXG4iLCBfX0ZVTkNUSU9OX18sIHBvbGFyaXR5KTsKLQotCXZhciA9IHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4MjA0KTsKLQotCWlmIChwb2xhcml0eSA9PSAwKSB7Ci0JCWRwcmludGsoIiVzOiBMTkIgcG93ZXIgb2ZmXG4iLCBfX0ZVTkNUSU9OX18pOwotCQl2YXIgPSB2YXIgfCAxOwotCX07Ci0KLQlpZiAocG9sYXJpdHkgPT0gMSkgewotCQl2YXIgPSB2YXIgJiB+MTsKLQkJdmFyID0gdmFyICYgfjQ7Ci0JfTsKLQotCWlmIChwb2xhcml0eSA9PSAyKSB7Ci0JCXZhciA9IHZhciAmIH4xOwotCQl2YXIgPSB2YXIgfCA0OwotCX0KLQotCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwNCwgdmFyKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzZXFjX3NlbmRfYml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgZGF0YSkKLXsKLQlzZXRfdHVuZXJfdG9uZShhZGFwdGVyLCAxKTsKLQl1ZGVsYXkoZGF0YSA/IDUwMCA6IDEwMDApOwotCXNldF90dW5lcl90b25lKGFkYXB0ZXIsIDApOwotCXVkZWxheShkYXRhID8gMTAwMCA6IDUwMCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgZGlzZXFjX3NlbmRfYnl0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGRhdGEpCi0JCXsKLQlpbnQgaSwgcGFyID0gMSwgZDsKLQotCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7Ci0JCWQgPSAoZGF0YSA+PiBpKSAmIDE7Ci0JCXBhciBePSBkOwotCQlkaXNlcWNfc2VuZF9iaXQoYWRhcHRlciwgZCk7Ci0JfQotCi0JZGlzZXFjX3NlbmRfYml0KGFkYXB0ZXIsIHBhcik7Ci0JCX0KLQotCi1zdGF0aWMgaW50IHNlbmRfZGlzZXFjX21zZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGxlbiwgdTggKm1zZywgdW5zaWduZWQgbG9uZyBidXJzdCkKLXsKLQlpbnQgaTsKLQotCXNldF90dW5lcl90b25lKGFkYXB0ZXIsIDApOwotCW1kZWxheSgxNik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCWRpc2VxY19zZW5kX2J5dGUoYWRhcHRlciwgbXNnW2ldKTsKLQotCW1kZWxheSgxNik7Ci0KLQlpZiAoYnVyc3QgIT0gLTEpIHsKLQkJaWYgKGJ1cnN0KQotCQkJZGlzZXFjX3NlbmRfYnl0ZShhZGFwdGVyLCAweGZmKTsKLQkJZWxzZSB7Ci0JCQlzZXRfdHVuZXJfdG9uZShhZGFwdGVyLCAxKTsKLQkJCXVkZWxheSgxMjUwMCk7Ci0JCQlzZXRfdHVuZXJfdG9uZShhZGFwdGVyLCAwKTsKLQkJfQotCQltc2xlZXAoMjApOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZsZXhjb3Bfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY190b25lX21vZGVfdCB0b25lKQotewotCXN0cnVjdCBhZGFwdGVyKiBhZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyKikgZmUtPmR2Yi0+cHJpdjsKLQotCXN3aXRjaCh0b25lKSB7Ci0JCWNhc2UgU0VDX1RPTkVfT046Ci0JCQlzZXRfdHVuZXJfdG9uZShhZGFwdGVyLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIFNFQ19UT05FX09GRjoKLQkJCXNldF90dW5lcl90b25lKGFkYXB0ZXIsIDApOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBmbGV4Y29wX2Rpc2VxY19zZW5kX21hc3Rlcl9jbWQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQqIGNtZCkKLQkJewotCXN0cnVjdCBhZGFwdGVyKiBhZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyKikgZmUtPmR2Yi0+cHJpdjsKLQotCQkJc2VuZF9kaXNlcWNfbXNnKGFkYXB0ZXIsIGNtZC0+bXNnX2xlbiwgY21kLT5tc2csIDApOwotCi0JcmV0dXJuIDA7Ci0JCX0KLQotc3RhdGljIGludCBmbGV4Y29wX2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfbWluaV9jbWRfdCBtaW5pY21kKQotewotCXN0cnVjdCBhZGFwdGVyKiBhZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyKikgZmUtPmR2Yi0+cHJpdjsKLQotCXNlbmRfZGlzZXFjX21zZyhhZGFwdGVyLCAwLCBOVUxMLCBtaW5pY21kKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZsZXhjb3Bfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKLQkJewotCXN0cnVjdCBhZGFwdGVyKiBhZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyKikgZmUtPmR2Yi0+cHJpdjsKLQotCWRwcmludGsoIiVzOiBGRV9TRVRfVk9MVEFHRVxuIiwgX19GVU5DVElPTl9fKTsKLQotCXN3aXRjaCAodm9sdGFnZSkgewotCWNhc2UgU0VDX1ZPTFRBR0VfMTM6Ci0JCWRwcmludGsoIiVzOiBTRUNfVk9MVEFHRV8xMywgJXhcbiIsIF9fRlVOQ1RJT05fXywgU0VDX1ZPTFRBR0VfMTMpOwotCQlzZXRfdHVuZXJfcG9sYXJpdHkoYWRhcHRlciwgMSk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTRUNfVk9MVEFHRV8xODoKLQkJZHByaW50aygiJXM6IFNFQ19WT0xUQUdFXzE4LCAleFxuIiwgX19GVU5DVElPTl9fLCBTRUNfVk9MVEFHRV8xOCk7Ci0JCXNldF90dW5lcl9wb2xhcml0eShhZGFwdGVyLCAyKTsKLQkJCXJldHVybiAwOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCX0KLQotc3RhdGljIGludCBmbGV4Y29wX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQotCQl7Ci0Jc3RydWN0IGFkYXB0ZXIqIGFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIqKSBmZS0+ZHZiLT5wcml2OwotCi0JZHByaW50aygiJXM6IEZFX1NMRUVQXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJc2V0X3R1bmVyX3BvbGFyaXR5KGFkYXB0ZXIsIDApOwotCi0JaWYgKGFkYXB0ZXItPmZlX3NsZWVwKSByZXR1cm4gYWRhcHRlci0+ZmVfc2xlZXAoZmUpOwotCXJldHVybiAwOwotCQl9Ci0KLXN0YXRpYyB1MzIgZmxleGNvcF9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi0JCXsKLQlwcmludGsoImZsZXhjb3BfaTJjX2Z1bmNcbiIpOwotCi0JcmV0dXJuIEkyQ19GVU5DX0kyQzsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtICAgIGZsZXhjb3BfYWxnbyA9IHsKLQkubmFtZQkJPSAiZmxleGNvcCBpMmMgYWxnb3JpdGhtIiwKLQkuaWQJCT0gSTJDX0FMR09fQklULAotCS5tYXN0ZXJfeGZlcgk9IG1hc3Rlcl94ZmVyLAotCS5mdW5jdGlvbmFsaXR5CT0gZmxleGNvcF9pMmNfZnVuYywKLX07Ci0KLQotCi0KLXN0YXRpYyBpbnQgc2Ftc3VuZ190Ym11MjQxMTJfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIgc3JhdGUsIHUzMiByYXRpbykKLXsKLQl1OCBhY2xrID0gMDsKLQl1OCBiY2xrID0gMDsKLQotCWlmIChzcmF0ZSA8IDE1MDAwMDApIHsgYWNsayA9IDB4Yjc7IGJjbGsgPSAweDQ3OyB9Ci0JZWxzZSBpZiAoc3JhdGUgPCAzMDAwMDAwKSB7IGFjbGsgPSAweGI3OyBiY2xrID0gMHg0YjsgfQotCWVsc2UgaWYgKHNyYXRlIDwgNzAwMDAwMCkgeyBhY2xrID0gMHhiNzsgYmNsayA9IDB4NGY7IH0KLQllbHNlIGlmIChzcmF0ZSA8IDE0MDAwMDAwKSB7IGFjbGsgPSAweGI3OyBiY2xrID0gMHg1MzsgfQotCWVsc2UgaWYgKHNyYXRlIDwgMzAwMDAwMDApIHsgYWNsayA9IDB4YjY7IGJjbGsgPSAweDUzOyB9Ci0JZWxzZSBpZiAoc3JhdGUgPCA0NTAwMDAwMCkgeyBhY2xrID0gMHhiNDsgYmNsayA9IDB4NTE7IH0KLQotCXN0djAyOTlfd3JpdGVyZWcgKGZlLCAweDEzLCBhY2xrKTsKLQlzdHYwMjk5X3dyaXRlcmVnIChmZSwgMHgxNCwgYmNsayk7Ci0Jc3R2MDI5OV93cml0ZXJlZyAoZmUsIDB4MWYsIChyYXRpbyA+PiAxNikgJiAweGZmKTsKLQlzdHYwMjk5X3dyaXRlcmVnIChmZSwgMHgyMCwgKHJhdGlvID4+ICA4KSAmIDB4ZmYpOwotCXN0djAyOTlfd3JpdGVyZWcgKGZlLCAweDIxLCAocmF0aW8gICAgICApICYgMHhmMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYW1zdW5nX3RibXUyNDExMl9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKLXsKLQl1OCBidWZbNF07Ci0JdTMyIGRpdjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHg2MSwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07Ci0Jc3RydWN0IGFkYXB0ZXIqIGFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIqKSBmZS0+ZHZiLT5wcml2OwotCi0JZGl2ID0gcGFyYW1zLT5mcmVxdWVuY3kgLyAxMjU7Ci0KLQlidWZbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKLQlidWZbMV0gPSBkaXYgJiAweGZmOwotCWJ1ZlsyXSA9IDB4ODQ7ICAvLyAweEM0Ci0JYnVmWzNdID0gMHgwODsKLQotCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA8IDE1MDAwMDApIGJ1ZlszXSB8PSAweDEwOwotCi0JaWYgKGkyY190cmFuc2ZlciAoJmFkYXB0ZXItPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSByZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHU4IHNhbXN1bmdfdGJtdTI0MTEyX2luaXR0YWJbXSA9IHsKLQkgICAgIDB4MDEsIDB4MTUsCi0JICAgICAweDAyLCAweDMwLAotCSAgICAgMHgwMywgMHgwMCwKLQkgICAgIDB4MDQsIDB4N0QsCi0JICAgICAweDA1LCAweDM1LAotCSAgICAgMHgwNiwgMHgwMiwKLQkgICAgIDB4MDcsIDB4MDAsCi0JICAgICAweDA4LCAweEMzLAotCSAgICAgMHgwQywgMHgwMCwKLQkgICAgIDB4MEQsIDB4ODEsCi0JICAgICAweDBFLCAweDIzLAotCSAgICAgMHgwRiwgMHgxMiwKLQkgICAgIDB4MTAsIDB4N0UsCi0JICAgICAweDExLCAweDg0LAotCSAgICAgMHgxMiwgMHhCOSwKLQkgICAgIDB4MTMsIDB4ODgsCi0JICAgICAweDE0LCAweDg5LAotCSAgICAgMHgxNSwgMHhDOSwKLQkgICAgIDB4MTYsIDB4MDAsCi0JICAgICAweDE3LCAweDVDLAotCSAgICAgMHgxOCwgMHgwMCwKLQkgICAgIDB4MTksIDB4MDAsCi0JICAgICAweDFBLCAweDAwLAotCSAgICAgMHgxQywgMHgwMCwKLQkgICAgIDB4MUQsIDB4MDAsCi0JICAgICAweDFFLCAweDAwLAotCSAgICAgMHgxRiwgMHgzQSwKLQkgICAgIDB4MjAsIDB4MkUsCi0JICAgICAweDIxLCAweDgwLAotCSAgICAgMHgyMiwgMHhGRiwKLQkgICAgIDB4MjMsIDB4QzEsCi0JICAgICAweDI4LCAweDAwLAotCSAgICAgMHgyOSwgMHgxRSwKLQkgICAgIDB4MkEsIDB4MTQsCi0JICAgICAweDJCLCAweDBGLAotCSAgICAgMHgyQywgMHgwOSwKLQkgICAgIDB4MkQsIDB4MDUsCi0JICAgICAweDMxLCAweDFGLAotCSAgICAgMHgzMiwgMHgxOSwKLQkgICAgIDB4MzMsIDB4RkUsCi0JICAgICAweDM0LCAweDkzLAotCSAgICAgMHhmZiwgMHhmZiwKLQkJCX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgc2Ftc3VuZ190Ym11MjQxMTJfY29uZmlnID0gewotCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKLQkuaW5pdHRhYiA9IHNhbXN1bmdfdGJtdTI0MTEyX2luaXR0YWIsCi0JLm1jbGsgPSA4ODAwMDAwMFVMLAotCS5pbnZlcnQgPSAwLAotCS5lbmhhbmNlZF90dW5pbmcgPSAwLAotCS5za2lwX3JlaW5pdCA9IDAsCi0JLmxvY2tfb3V0cHV0ID0gU1RWMDIyOV9MT0NLT1VUUFVUX0xLLAotCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKLQkubWluX2RlbGF5X21zID0gMTAwLAotCS5zZXRfc3ltYm9sX3JhdGUgPSBzYW1zdW5nX3RibXUyNDExMl9zZXRfc3ltYm9sX3JhdGUsCi0gICAJLnBsbF9zZXQgPSBzYW1zdW5nX3RibXUyNDExMl9wbGxfc2V0LAotfTsKLQotCi0KLXN0YXRpYyBpbnQgbnh0MjAwMl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywgY2hhciogbmFtZSkKLXsKLQlzdHJ1Y3QgYWRhcHRlciogYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciopIGZlLT5kdmItPnByaXY7Ci0KLQlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZShmdywgbmFtZSwgJmFkYXB0ZXItPnBkZXYtPmRldik7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBueHQyMDAyX2NvbmZpZyBzYW1zdW5nX3RibXZfY29uZmlnID0gewotCS5kZW1vZF9hZGRyZXNzID0gMHgwQSwKLQkucmVxdWVzdF9maXJtd2FyZSA9IG54dDIwMDJfcmVxdWVzdF9maXJtd2FyZSwKLX07Ci0KLXN0YXRpYyBpbnQgc2Ftc3VuZ190ZHRjOTI1MWRoMF9kZW1vZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQotewotCXN0YXRpYyB1OCBtdDM1Ml9jbG9ja19jb25maWcgW10gPSB7IDB4ODksIDB4MTgsIDB4MmQgfTsKLQlzdGF0aWMgdTggbXQzNTJfcmVzZXQgW10gPSB7IDB4NTAsIDB4ODAgfTsKLQlzdGF0aWMgdTggbXQzNTJfYWRjX2N0bF8xX2NmZyBbXSA9IHsgMHg4RSwgMHg0MCB9OwotCXN0YXRpYyB1OCBtdDM1Ml9hZ2NfY2ZnIFtdID0geyAweDY3LCAweDI4LCAweGExIH07Ci0Jc3RhdGljIHU4IG10MzUyX2NhcHRfcmFuZ2VfY2ZnW10gPSB7IDB4NzUsIDB4MzIgfTsKLQotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9jbG9ja19jb25maWcsIHNpemVvZihtdDM1Ml9jbG9ja19jb25maWcpKTsKLQl1ZGVsYXkoMjAwMCk7Ci0JbXQzNTJfd3JpdGUoZmUsIG10MzUyX3Jlc2V0LCBzaXplb2YobXQzNTJfcmVzZXQpKTsKLQltdDM1Ml93cml0ZShmZSwgbXQzNTJfYWRjX2N0bF8xX2NmZywgc2l6ZW9mKG10MzUyX2FkY19jdGxfMV9jZmcpKTsKLQotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9hZ2NfY2ZnLCBzaXplb2YobXQzNTJfYWdjX2NmZykpOwotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9jYXB0X3JhbmdlX2NmZywgc2l6ZW9mKG10MzUyX2NhcHRfcmFuZ2VfY2ZnKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYW1zdW5nX3RkdGM5MjUxZGgwX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zLCB1OCogcGxsYnVmKQotewotCXUzMiBkaXY7Ci0JdW5zaWduZWQgY2hhciBicyA9IDA7Ci0KLQkjZGVmaW5lIElGX0ZSRVFVRU5DWXg2IDIxNyAgICAvKiA2ICogMzYuMTY2NjY2NjY2NjdNSHogKi8KLQlkaXYgPSAoKChwYXJhbXMtPmZyZXF1ZW5jeSArIDgzMzMzKSAqIDMpIC8gNTAwMDAwKSArIElGX0ZSRVFVRU5DWXg2OwotCi0JaWYgKHBhcmFtcy0+ZnJlcXVlbmN5ID49IDQ4MDAwMDAwICYmIHBhcmFtcy0+ZnJlcXVlbmN5IDw9IDE1NDAwMDAwMCkgYnMgPSAweDA5OwotCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+PSAxNjEwMDAwMDAgJiYgcGFyYW1zLT5mcmVxdWVuY3kgPD0gNDM5MDAwMDAwKSBicyA9IDB4MGE7Ci0JaWYgKHBhcmFtcy0+ZnJlcXVlbmN5ID49IDQ0NzAwMDAwMCAmJiBwYXJhbXMtPmZyZXF1ZW5jeSA8PSA4NjMwMDAwMDApIGJzID0gMHgwODsKLQotCXBsbGJ1ZlswXSA9IDB4YzI7IC8vIE5vdGU6IG5vbi1saW51eCBzdGFuZGFyZCBQTEwgaTJjIGFkZHJlc3MKLQlwbGxidWZbMV0gPSBkaXYgPj4gODsKLSAgIAlwbGxidWZbMl0gPSBkaXYgJiAweGZmOwotICAgCXBsbGJ1ZlszXSA9IDB4Y2M7Ci0gICAJcGxsYnVmWzRdID0gYnM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBtdDM1Ml9jb25maWcgc2Ftc3VuZ190ZHRjOTI1MWRoMF9jb25maWcgPSB7Ci0KLQkuZGVtb2RfYWRkcmVzcyA9IDB4MGYsCi0JLmRlbW9kX2luaXQgPSBzYW1zdW5nX3RkdGM5MjUxZGgwX2RlbW9kX2luaXQsCi0gICAJLnBsbF9zZXQgPSBzYW1zdW5nX3RkdGM5MjUxZGgwX3BsbF9zZXQsCi19OwotCi1zdGF0aWMgaW50IHNreXN0YXIyM19zYW1zdW5nX3RiZHUxODEzMl9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKLXsKLQl1OCBidWZbNF07Ci0JdTMyIGRpdjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHg2MSwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07Ci0Jc3RydWN0IGFkYXB0ZXIqIGFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIqKSBmZS0+ZHZiLT5wcml2OwotCi0JZGl2ID0gKHBhcmFtcy0+ZnJlcXVlbmN5ICsgKDEyNS8yKSkgLyAxMjU7Ci0KLQlidWZbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKLQlidWZbMV0gPSAoZGl2ID4+IDApICYgMHhmZjsKLQlidWZbMl0gPSAweDg0IHwgKChkaXYgPj4gMTApICYgMHg2MCk7Ci0JYnVmWzNdID0gMHg4MDsKLQotCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA8IDE1NTAwMDApCi0JCWJ1ZlszXSB8PSAweDAyOwotCi0JaWYgKGkyY190cmFuc2ZlciAoJmFkYXB0ZXItPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSByZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBtdDMxMl9jb25maWcgc2t5c3RhcjIzX3NhbXN1bmdfdGJkdTE4MTMyX2NvbmZpZyA9IHsKLQotCS5kZW1vZF9hZGRyZXNzID0gMHgwZSwKLSAgIAkucGxsX3NldCA9IHNreXN0YXIyM19zYW1zdW5nX3RiZHUxODEzMl9wbGxfc2V0LAotfTsKLQotCi0KLQotc3RhdGljIHZvaWQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgYWRhcHRlciAqc2t5c3RhcjIpCi17Ci0Jc3dpdGNoKHNreXN0YXIyLT5wZGV2LT5kZXZpY2UpIHsKLQljYXNlIDB4MjEwMzogLy8gVGVjaG5pc2F0IFNreXN0YXIyIE9SIFRlY2huaXNhdCBBaXJzdGFyMiAoRFZCLVQgb3IgQVRTQykKLQotCQkvLyBBdHRlbXB0IHRvIGxvYWQgdGhlIE5leHR3YXZlIG54dDIwMDIgZm9yIEFUU0Mgc3VwcG9ydCAKLQkJc2t5c3RhcjItPmZlID0gbnh0MjAwMl9hdHRhY2goJnNhbXN1bmdfdGJtdl9jb25maWcsICZza3lzdGFyMi0+aTJjX2FkYXApOwotCQlpZiAoc2t5c3RhcjItPmZlICE9IE5VTEwpIHsKLQkJCXNreXN0YXIyLT5mZV9zbGVlcCA9IHNreXN0YXIyLT5mZS0+b3BzLT5zbGVlcDsKLQkJCXNreXN0YXIyLT5mZS0+b3BzLT5zbGVlcCA9IGZsZXhjb3Bfc2xlZXA7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8vIHRyeSB0aGUgc2t5c3RhcjIgdjIuNiBmaXJzdCAoc3R2MDI5OS9TYW1zdW5nIHRibXUyNDExMihzbDE5MzUpKQotCQlza3lzdGFyMi0+ZmUgPSBzdHYwMjk5X2F0dGFjaCgmc2Ftc3VuZ190Ym11MjQxMTJfY29uZmlnLCAmc2t5c3RhcjItPmkyY19hZGFwKTsKLQkJaWYgKHNreXN0YXIyLT5mZSAhPSBOVUxMKSB7Ci0JCQlza3lzdGFyMi0+ZmUtPm9wcy0+c2V0X3ZvbHRhZ2UgPSBmbGV4Y29wX3NldF92b2x0YWdlOwotCQkJc2t5c3RhcjItPmZlX3NsZWVwID0gc2t5c3RhcjItPmZlLT5vcHMtPnNsZWVwOwotCQkJc2t5c3RhcjItPmZlLT5vcHMtPnNsZWVwID0gZmxleGNvcF9zbGVlcDsKLQkJCWJyZWFrOwotfQotCi0JCS8vIHRyeSB0aGUgYWlyc3RhcjIgKG10MzUyL1NhbXN1bmcgdGR0YzkyNTFkaDAoPz8pKQotCQlza3lzdGFyMi0+ZmUgPSBtdDM1Ml9hdHRhY2goJnNhbXN1bmdfdGR0YzkyNTFkaDBfY29uZmlnLCAmc2t5c3RhcjItPmkyY19hZGFwKTsKLQkJaWYgKHNreXN0YXIyLT5mZSAhPSBOVUxMKSB7Ci0JCQlza3lzdGFyMi0+ZmUtPm9wcy0+aW5mby5mcmVxdWVuY3lfbWluID0gNDc0MDAwMDAwOwotCQkJc2t5c3RhcjItPmZlLT5vcHMtPmluZm8uZnJlcXVlbmN5X21heCA9IDg1ODAwMDAwMDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLy8gdHJ5IHRoZSBza3lzdGFyMiB2Mi4zICh2cDMxMC9TYW1zdW5nIHRiZHUxODEzMih0c2E1MDU5KSkKLQkJc2t5c3RhcjItPmZlID0gdnAzMTBfYXR0YWNoKCZza3lzdGFyMjNfc2Ftc3VuZ190YmR1MTgxMzJfY29uZmlnLCAmc2t5c3RhcjItPmkyY19hZGFwKTsKLQkJaWYgKHNreXN0YXIyLT5mZSAhPSBOVUxMKSB7Ci0JCQlza3lzdGFyMi0+ZmUtPm9wcy0+ZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCA9IGZsZXhjb3BfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZDsKLQkJCXNreXN0YXIyLT5mZS0+b3BzLT5kaXNlcWNfc2VuZF9idXJzdCA9IGZsZXhjb3BfZGlzZXFjX3NlbmRfYnVyc3Q7Ci0JCQlza3lzdGFyMi0+ZmUtPm9wcy0+c2V0X3RvbmUgPSBmbGV4Y29wX3NldF90b25lOwotCQkJc2t5c3RhcjItPmZlLT5vcHMtPnNldF92b2x0YWdlID0gZmxleGNvcF9zZXRfdm9sdGFnZTsKLQkJCXNreXN0YXIyLT5mZV9zbGVlcCA9IHNreXN0YXIyLT5mZS0+b3BzLT5zbGVlcDsKLQkJCXNreXN0YXIyLT5mZS0+b3BzLT5zbGVlcCA9IGZsZXhjb3Bfc2xlZXA7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlpZiAoc2t5c3RhcjItPmZlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJza3lzdGFyMjogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlICUwNHgvJTA0eCBzdWJzeXN0ZW0gJTA0eC8lMDR4XG4iLAotCQkgICAgICAgc2t5c3RhcjItPnBkZXYtPnZlbmRvciwKLQkJICAgICAgIHNreXN0YXIyLT5wZGV2LT5kZXZpY2UsCi0JCSAgICAgICBza3lzdGFyMi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciwKLQkJICAgICAgIHNreXN0YXIyLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKLQl9IGVsc2UgewotCQlpZiAoZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZza3lzdGFyMi0+ZHZiX2FkYXB0ZXIsIHNreXN0YXIyLT5mZSkpIHsKLQkJCXByaW50aygic2t5c3RhcjI6IEZyb250ZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQhXG4iKTsKLQkJCWlmIChza3lzdGFyMi0+ZmUtPm9wcy0+cmVsZWFzZSkKLQkJCQlza3lzdGFyMi0+ZmUtPm9wcy0+cmVsZWFzZShza3lzdGFyMi0+ZmUpOwotCQkJc2t5c3RhcjItPmZlID0gTlVMTDsKLQkJfQotCX0KLX0KLQotCi1zdGF0aWMgaW50IHNreXN0YXIyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXI7Ci0Jc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXg7Ci0Jc3RydWN0IGRteF9kZW11eCAqZG14OwotCWludCByZXQgPSAtRU5PREVWOwotCi0JaWYgKCFwZGV2KQotCQlnb3RvIG91dDsKLQotCXJldCA9IGRyaXZlcl9pbml0aWFsaXplKHBkZXYpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCWFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JZHZiX2FkYXB0ZXIgPSAmYWRhcHRlci0+ZHZiX2FkYXB0ZXI7Ci0KLQlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcihkdmJfYWRhcHRlciwgc2t5c3RhcjJfcGNpX2RyaXZlci5uYW1lLAotCQkJCSAgIFRISVNfTU9EVUxFKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIiVzOiBFcnJvciByZWdpc3RlcmluZyBEVkIgYWRhcHRlclxuIiwgX19GVU5DVElPTl9fKTsKLQkJZ290byBlcnJfaGFsdDsKLQl9Ci0KLQlkdmJfYWRhcHRlci0+cHJpdiA9IGFkYXB0ZXI7Ci0KLQotCWluaXRfTVVURVgoJmFkYXB0ZXItPmkyY19zZW0pOwotCi0KLQltZW1zZXQoJmFkYXB0ZXItPmkyY19hZGFwLCAwLCBzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7Ci0Jc3RyY3B5KGFkYXB0ZXItPmkyY19hZGFwLm5hbWUsICJTa3lTdGFyMiIpOwotCi0JaTJjX3NldF9hZGFwZGF0YSgmYWRhcHRlci0+aTJjX2FkYXAsIGFkYXB0ZXIpOwotCi0jaWZkZWYgSTJDX0FEQVBfQ0xBU1NfVFZfRElHSVRBTAotCWFkYXB0ZXItPmkyY19hZGFwLmNsYXNzIAkgICAgPSBJMkNfQURBUF9DTEFTU19UVl9ESUdJVEFMOwotI2Vsc2UKLQlhZGFwdGVyLT5pMmNfYWRhcC5jbGFzcyAJICAgID0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7Ci0jZW5kaWYKLQlhZGFwdGVyLT5pMmNfYWRhcC5hbGdvICAgICAgICAgICAgICA9ICZmbGV4Y29wX2FsZ287Ci0JYWRhcHRlci0+aTJjX2FkYXAuYWxnb19kYXRhICAgICAgICAgPSBOVUxMOwotCWFkYXB0ZXItPmkyY19hZGFwLmlkICAgICAgICAgICAgICAgID0gSTJDX0FMR09fQklUOwotCi0JcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZhZGFwdGVyLT5pMmNfYWRhcCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX2R2Yl91bnJlZ2lzdGVyOwotCi0JZHZiZGVtdXggPSAmYWRhcHRlci0+ZGVtdXg7Ci0KLQlkdmJkZW11eC0+cHJpdiA9IGFkYXB0ZXI7Ci0JZHZiZGVtdXgtPmZpbHRlcm51bSA9IE5fUElEX1NMT1RTOwotCWR2YmRlbXV4LT5mZWVkbnVtID0gTl9QSURfU0xPVFM7Ci0JZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBkdmJfc3RhcnRfZmVlZDsKLQlkdmJkZW11eC0+c3RvcF9mZWVkID0gZHZiX3N0b3BfZmVlZDsKLQlkdmJkZW11eC0+d3JpdGVfdG9fZGVjb2RlciA9IE5VTEw7Ci0JZHZiZGVtdXgtPmRteC5jYXBhYmlsaXRpZXMgPSAoRE1YX1RTX0ZJTFRFUklORyB8IERNWF9TRUNUSU9OX0ZJTFRFUklORyB8IERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HKTsKLQotCXJldCA9IGR2Yl9kbXhfaW5pdCgmYWRhcHRlci0+ZGVtdXgpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9pMmNfZGVsOwotCi0JZG14ID0gJmR2YmRlbXV4LT5kbXg7Ci0KLQlhZGFwdGVyLT5od19mcm9udGVuZC5zb3VyY2UgPSBETVhfRlJPTlRFTkRfMDsKLQlhZGFwdGVyLT5kbXhkZXYuZmlsdGVybnVtID0gTl9QSURfU0xPVFM7Ci0JYWRhcHRlci0+ZG14ZGV2LmRlbXV4ID0gZG14OwotCWFkYXB0ZXItPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOwotCi0JcmV0ID0gZHZiX2RteGRldl9pbml0KCZhZGFwdGVyLT5kbXhkZXYsICZhZGFwdGVyLT5kdmJfYWRhcHRlcik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX2RteF9yZWxlYXNlOwotCi0JcmV0ID0gZG14LT5hZGRfZnJvbnRlbmQoZG14LCAmYWRhcHRlci0+aHdfZnJvbnRlbmQpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9kbXhkZXZfcmVsZWFzZTsKLQotCWFkYXB0ZXItPm1lbV9mcm9udGVuZC5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOwotCi0JcmV0ID0gZG14LT5hZGRfZnJvbnRlbmQoZG14LCAmYWRhcHRlci0+bWVtX2Zyb250ZW5kKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfcmVtb3ZlX2h3X2Zyb250ZW5kOwotCi0JcmV0ID0gZG14LT5jb25uZWN0X2Zyb250ZW5kKGRteCwgJmFkYXB0ZXItPmh3X2Zyb250ZW5kKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfcmVtb3ZlX21lbV9mcm9udGVuZDsKLQotCWR2Yl9uZXRfaW5pdCgmYWRhcHRlci0+ZHZiX2FkYXB0ZXIsICZhZGFwdGVyLT5kdmJuZXQsICZkdmJkZW11eC0+ZG14KTsKLQotCWZyb250ZW5kX2luaXQoYWRhcHRlcik7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLQotZXJyX3JlbW92ZV9tZW1fZnJvbnRlbmQ6Ci0JZHZiZGVtdXgtPmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsICZhZGFwdGVyLT5tZW1fZnJvbnRlbmQpOwotZXJyX3JlbW92ZV9od19mcm9udGVuZDoKLQlkdmJkZW11eC0+ZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiZGVtdXgtPmRteCwgJmFkYXB0ZXItPmh3X2Zyb250ZW5kKTsKLWVycl9kbXhkZXZfcmVsZWFzZToKLQlkdmJfZG14ZGV2X3JlbGVhc2UoJmFkYXB0ZXItPmRteGRldik7Ci1lcnJfZG14X3JlbGVhc2U6Ci0JZHZiX2RteF9yZWxlYXNlKCZhZGFwdGVyLT5kZW11eCk7Ci1lcnJfaTJjX2RlbDoKLQlpMmNfZGVsX2FkYXB0ZXIoJmFkYXB0ZXItPmkyY19hZGFwKTsKLWVycl9kdmJfdW5yZWdpc3RlcjoKLQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZhZGFwdGVyLT5kdmJfYWRhcHRlcik7Ci1lcnJfaGFsdDoKLQlkcml2ZXJfaGFsdChwZGV2KTsKLQlnb3RvIG91dDsKLX0KLQotc3RhdGljIHZvaWQgc2t5c3RhcjJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4OwotCXN0cnVjdCBkbXhfZGVtdXggKmRteDsKLQotCWlmICghYWRhcHRlcikKLQkJcmV0dXJuOwotCi0JCWR2Yl9uZXRfcmVsZWFzZSgmYWRhcHRlci0+ZHZibmV0KTsKLQkJZHZiZGVtdXggPSAmYWRhcHRlci0+ZGVtdXg7Ci0JZG14ID0gJmR2YmRlbXV4LT5kbXg7Ci0KLQlkbXgtPmNsb3NlKGRteCk7Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmYWRhcHRlci0+aHdfZnJvbnRlbmQpOwotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmFkYXB0ZXItPm1lbV9mcm9udGVuZCk7Ci0KLQkJZHZiX2RteGRldl9yZWxlYXNlKCZhZGFwdGVyLT5kbXhkZXYpOwotCWR2Yl9kbXhfcmVsZWFzZShkdmJkZW11eCk7Ci0KLQlpZiAoYWRhcHRlci0+ZmUgIT0gTlVMTCkKLQkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoYWRhcHRlci0+ZmUpOwotCi0JZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmYWRhcHRlci0+ZHZiX2FkYXB0ZXIpOwotCi0JCQlpMmNfZGVsX2FkYXB0ZXIoJmFkYXB0ZXItPmkyY19hZGFwKTsKLQotCQlkcml2ZXJfaGFsdChwZGV2KTsKLQl9Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBza3lzdGFyMl9wY2lfdGJsW10gPSB7Ci0JezB4MDAwMDEzZDAsIDB4MDAwMDIxMDMsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotLyoJezB4MDAwMDEzZDAsIDB4MDAwMDIyMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LCBVTkRFRklORUQgSEFSRFdBUkUgLSBtYWlsIGxpbnV4dHYub3JnIGxpc3QgKi8JLy9GQ0lJSQotCXswLH0sCi19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2t5c3RhcjJfcGNpX3RibCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBza3lzdGFyMl9wY2lfZHJpdmVyID0gewotCS5uYW1lID0gIlNreVN0YXIyIiwKLQkuaWRfdGFibGUgPSBza3lzdGFyMl9wY2lfdGJsLAotCS5wcm9iZSA9IHNreXN0YXIyX3Byb2JlLAotCS5yZW1vdmUgPSBza3lzdGFyMl9yZW1vdmUsCi19OwotCi1zdGF0aWMgaW50IHNreXN0YXIyX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2t5c3RhcjJfcGNpX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNreXN0YXIyX2NsZWFudXAodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNreXN0YXIyX3BjaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChza3lzdGFyMl9pbml0KTsKLW1vZHVsZV9leGl0KHNreXN0YXIyX2NsZWFudXApOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlRlY2huaXNhdCBTa3lTdGFyMiBEVkIgUENJIERyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwppbmRleCAxMzM5OTEyLi45YmQxMjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwpAQCAtMjU4LDEwICsyNTgsMTAgQEAKIAlpZiAoZGVidWcgJiYgKHZlcmJvc2UgPiA0KSkgewogCQl1OCBpOwogCQlpZiAodmVyYm9zZSA+IDQpIHsKLQkJCWRwcmludGsoIiVzIHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQkJZHByaW50aygiJXMgd3JpdGluZyBbICIsIF9fRlVOQ1RJT05fXyk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQkJZHByaW50aygiICUwMngiLCBkYXRhW2ldKTsKLQkJCWRwcmludGsoIlxuIik7CisJCQkJZHByaW50aygiJTAyeCAiLCBkYXRhW2ldKTsKKwkJCWRwcmludGsoIl1cbiIpOwogCQl9CiAJfQogCWZvciAoY250ID0gMDsgY250IDwgMjsgY250KyspIHsKQEAgLTMyMCwxMCArMzIwLDI5IEBACiB9CiBFWFBPUlRfU1lNQk9MKHJlYWRfZHN0KTsKIAorc3RhdGljIGludCBkc3Rfc2V0X3BvbGFyaXphdGlvbihzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlLT52b2x0YWdlKSB7CisJCWNhc2UgU0VDX1ZPTFRBR0VfMTM6CS8vIHZlcnRpY2FsCisJCQlwcmludGsoIiVzOiBQb2xhcml6YXRpb249W1ZlcnRpY2FsXVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXN0YXRlLT50eF90dW5hWzhdICY9IH4weDQwOyAgLy8xCisJCQlicmVhazsKKworCQljYXNlIFNFQ19WT0xUQUdFXzE4OgkvLyBob3Jpem9udGFsCisJCQlwcmludGsoIiVzOiBQb2xhcml6YXRpb249W0hvcml6b250YWxdXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJc3RhdGUtPnR4X3R1bmFbOF0gfD0gMHg0MDsgIC8vIDAKKwkJCWJyZWFrOworCisJCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkc3Rfc2V0X2ZyZXEoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHUzMiBmcmVxKQogewotCXU4ICp2YWw7Ci0KIAlzdGF0ZS0+ZnJlcXVlbmN5ID0gZnJlcTsKIAlpZiAoZGVidWcgPiA0KQogCQlkcHJpbnRrKCIlczogc2V0IEZyZXF1ZW5jeSAldVxuIiwgX19GVU5DVElPTl9fLCBmcmVxKTsKQEAgLTMzMiw0NiArMzUxLDMwIEBACiAJCWZyZXEgPSBmcmVxIC8gMTAwMDsKIAkJaWYgKGZyZXEgPCA5NTAgfHwgZnJlcSA+IDIxNTApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJdmFsID0gJnN0YXRlLT50eF90dW5hWzBdOwotCQl2YWxbMl0gPSAoZnJlcSA+PiA4KSAmIDB4N2Y7Ci0JCXZhbFszXSA9ICh1OCkgZnJlcTsKLQkJdmFsWzRdID0gMTsKLQkJdmFsWzhdICY9IH40OwotCQlpZiAoZnJlcSA8IDE1MzEpCi0JCQl2YWxbOF0gfD0gNDsKKworCQlzdGF0ZS0+dHhfdHVuYVsyXSA9IChmcmVxID4+IDgpOworCQlzdGF0ZS0+dHhfdHVuYVszXSA9ICh1OCkgZnJlcTsKKwkJc3RhdGUtPnR4X3R1bmFbNF0gPSAweDAxOworCQlzdGF0ZS0+dHhfdHVuYVs4XSAmPSB+MHgwNDsKKwkJaWYgKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX09CU19SRUdTKSB7CisJCQlpZiAoZnJlcSA8IDE1MzEpCisJCQkJc3RhdGUtPnR4X3R1bmFbOF0gfD0gMHgwNDsKKwkJfQorCiAJfSBlbHNlIGlmIChzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfVEVSUikgewogCQlmcmVxID0gZnJlcSAvIDEwMDA7CiAJCWlmIChmcmVxIDwgMTM3MDAwIHx8IGZyZXEgPiA4NTgwMDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJdmFsID0gJnN0YXRlLT50eF90dW5hWzBdOwotCQl2YWxbMl0gPSAoZnJlcSA+PiAxNikgJiAweGZmOwotCQl2YWxbM10gPSAoZnJlcSA+PiA4KSAmIDB4ZmY7Ci0JCXZhbFs0XSA9ICh1OCkgZnJlcTsKLQkJdmFsWzVdID0gMDsKLQkJc3dpdGNoIChzdGF0ZS0+YmFuZHdpZHRoKSB7Ci0JCWNhc2UgQkFORFdJRFRIXzZfTUhaOgotCQkJdmFsWzZdID0gNjsKLQkJCWJyZWFrOwogCi0JCWNhc2UgQkFORFdJRFRIXzdfTUhaOgotCQljYXNlIEJBTkRXSURUSF9BVVRPOgotCQkJdmFsWzZdID0gNzsKLQkJCWJyZWFrOworCQlzdGF0ZS0+dHhfdHVuYVsyXSA9IChmcmVxID4+IDE2KSAmIDB4ZmY7CisJCXN0YXRlLT50eF90dW5hWzNdID0gKGZyZXEgPj4gOCkgJiAweGZmOworCQlzdGF0ZS0+dHhfdHVuYVs0XSA9ICh1OCkgZnJlcTsKIAotCQljYXNlIEJBTkRXSURUSF84X01IWjoKLQkJCXZhbFs2XSA9IDg7Ci0JCQlicmVhazsKLQkJfQotCi0JCXZhbFs3XSA9IDA7Ci0JCXZhbFs4XSA9IDA7CiAJfSBlbHNlIGlmIChzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfQ0FCTEUpIHsKLQkJLyogZ3Vlc3MgdGlsbCB3aWxsIGdldCBvbmUgKi8KLQkJZnJlcSA9IGZyZXEgLyAxMDAwOwotCQl2YWwgPSAmc3RhdGUtPnR4X3R1bmFbMF07Ci0JCXZhbFsyXSA9IChmcmVxID4+IDE2KSAmIDB4ZmY7Ci0JCXZhbFszXSA9IChmcmVxID4+IDgpICYgMHhmZjsKLQkJdmFsWzRdID0gKHU4KSBmcmVxOworCQlzdGF0ZS0+dHhfdHVuYVsyXSA9IChmcmVxID4+IDE2KSAmIDB4ZmY7CisJCXN0YXRlLT50eF90dW5hWzNdID0gKGZyZXEgPj4gOCkgJiAweGZmOworCQlzdGF0ZS0+dHhfdHVuYVs0XSA9ICh1OCkgZnJlcTsKKwogCX0gZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKQEAgLTM3OSw1MSArMzgyLDU4IEBACiAKIHN0YXRpYyBpbnQgZHN0X3NldF9iYW5kd2lkdGgoc3RydWN0IGRzdF9zdGF0ZSogc3RhdGUsIGZlX2JhbmR3aWR0aF90IGJhbmR3aWR0aCkKIHsKLQl1OCAqdmFsOwotCiAJc3RhdGUtPmJhbmR3aWR0aCA9IGJhbmR3aWR0aDsKIAogCWlmIChzdGF0ZS0+ZHN0X3R5cGUgIT0gRFNUX1RZUEVfSVNfVEVSUikKIAkJcmV0dXJuIDA7CiAKLQl2YWwgPSAmc3RhdGUtPnR4X3R1bmFbMF07CiAJc3dpdGNoIChiYW5kd2lkdGgpIHsKLQljYXNlIEJBTkRXSURUSF82X01IWjoKLQkJdmFsWzZdID0gNjsKLQkJYnJlYWs7CisJCWNhc2UgQkFORFdJRFRIXzZfTUhaOgorCQkJaWYgKHN0YXRlLT5kc3RfaHdfY2FwICYgRFNUX1RZUEVfSEFTX0NBKQorCQkJCXN0YXRlLT50eF90dW5hWzddID0gMHgwNjsKKwkJCWVsc2UgeworCQkJCXN0YXRlLT50eF90dW5hWzZdID0gMHgwNjsKKwkJCQlzdGF0ZS0+dHhfdHVuYVs3XSA9IDB4MDA7CisJCQl9CisJCQlicmVhazsKIAotCWNhc2UgQkFORFdJRFRIXzdfTUhaOgotCQl2YWxbNl0gPSA3OwotCQlicmVhazsKKwkJY2FzZSBCQU5EV0lEVEhfN19NSFo6CisJCQlpZiAoc3RhdGUtPmRzdF9od19jYXAgJiBEU1RfVFlQRV9IQVNfQ0EpCisJCQkJc3RhdGUtPnR4X3R1bmFbN10gPSAweDA3OworCQkJZWxzZSB7CisJCQkJc3RhdGUtPnR4X3R1bmFbNl0gPSAweDA3OworCQkJCXN0YXRlLT50eF90dW5hWzddID0gMHgwMDsKKwkJCX0KKwkJCWJyZWFrOwogCi0JY2FzZSBCQU5EV0lEVEhfOF9NSFo6Ci0JCXZhbFs2XSA9IDg7Ci0JCWJyZWFrOworCQljYXNlIEJBTkRXSURUSF84X01IWjoKKwkJCWlmIChzdGF0ZS0+ZHN0X2h3X2NhcCAmIERTVF9UWVBFX0hBU19DQSkKKwkJCQlzdGF0ZS0+dHhfdHVuYVs3XSA9IDB4MDg7CisJCQllbHNlIHsKKwkJCQlzdGF0ZS0+dHhfdHVuYVs2XSA9IDB4MDg7CisJCQkJc3RhdGUtPnR4X3R1bmFbN10gPSAweDAwOworCQkJfQorCQkJYnJlYWs7CiAKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkc3Rfc2V0X2ludmVyc2lvbihzdHJ1Y3QgZHN0X3N0YXRlKiBzdGF0ZSwgZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQogewotCXU4ICp2YWw7Ci0KIAlzdGF0ZS0+aW52ZXJzaW9uID0gaW52ZXJzaW9uOwotCi0JdmFsID0gJnN0YXRlLT50eF90dW5hWzBdOwotCi0JdmFsWzhdICY9IH4weDgwOwotCiAJc3dpdGNoIChpbnZlcnNpb24pIHsKLQljYXNlIElOVkVSU0lPTl9PRkY6Ci0JCWJyZWFrOwotCWNhc2UgSU5WRVJTSU9OX09OOgotCQl2YWxbOF0gfD0gMHg4MDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWNhc2UgSU5WRVJTSU9OX09GRjoJLy8gSW52ZXJzaW9uID0gTm9ybWFsCisJCQlzdGF0ZS0+dHhfdHVuYVs4XSAmPSB+MHg4MDsKKwkJCWJyZWFrOworCisJCWNhc2UgSU5WRVJTSU9OX09OOgorCQkJc3RhdGUtPnR4X3R1bmFbOF0gfD0gMHg4MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDc4LDYgKzQ4OCw1MiBAQAogCXJldHVybiAwOwogfQogCisKK3N0YXRpYyBpbnQgZHN0X3NldF9tb2R1bGF0aW9uKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCBmZV9tb2R1bGF0aW9uX3QgbW9kdWxhdGlvbikKK3sKKwlpZiAoc3RhdGUtPmRzdF90eXBlICE9IERTVF9UWVBFX0lTX0NBQkxFKQorCQlyZXR1cm4gMDsKKworCXN0YXRlLT5tb2R1bGF0aW9uID0gbW9kdWxhdGlvbjsKKwlzd2l0Y2ggKG1vZHVsYXRpb24pIHsKKwkJY2FzZSBRQU1fMTY6CisJCQlzdGF0ZS0+dHhfdHVuYVs4XSA9IDB4MTA7CisJCQlicmVhazsKKworCQljYXNlIFFBTV8zMjoKKwkJCXN0YXRlLT50eF90dW5hWzhdID0gMHgyMDsKKwkJCWJyZWFrOworCisJCWNhc2UgUUFNXzY0OgorCQkJc3RhdGUtPnR4X3R1bmFbOF0gPSAweDQwOworCQkJYnJlYWs7CisKKwkJY2FzZSBRQU1fMTI4OgorCQkJc3RhdGUtPnR4X3R1bmFbOF0gPSAweDgwOworCQkJYnJlYWs7CisKKwkJY2FzZSBRQU1fMjU2OgorCQkJc3RhdGUtPnR4X3R1bmFbOF0gPSAweDAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBRUFNLOgorCQljYXNlIFFBTV9BVVRPOgorCQljYXNlIFZTQl84OgorCQljYXNlIFZTQl8xNjoKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBmZV9tb2R1bGF0aW9uX3QgZHN0X2dldF9tb2R1bGF0aW9uKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBzdGF0ZS0+bW9kdWxhdGlvbjsKK30KKworCiB1OCBkc3RfY2hlY2tfc3VtKHU4ICogYnVmLCB1MzIgbGVuKQogewogCXUzMiBpOwpAQCAtNTc3LDcgKzYzMyw3IEBACiAJCS5kZXZpY2VfaWQgPSAiMjAwMTAzQSIsCiAJCS5vZmZzZXQgPSAwLAogCQkuZHN0X3R5cGUgPSAgRFNUX1RZUEVfSVNfU0FULAotCQkudHlwZV9mbGFncyA9IERTVF9UWVBFX0hBU19TWU1ESVYgfCBEU1RfVFlQRV9IQVNfRldfMSwKKwkJLnR5cGVfZmxhZ3MgPSBEU1RfVFlQRV9IQVNfU1lNRElWIHwgRFNUX1RZUEVfSEFTX0ZXXzEgfCBEU1RfVFlQRV9IQVNfT0JTX1JFR1MsCiAJCS5kc3RfZmVhdHVyZSA9IDAKIAl9LAkvKglvYnNvbGV0ZQkqLwogCkBAIC02MjYsNyArNjgyLDcgQEAKIAkJLmRldmljZV9pZCA9ICJEU1RNQ0kiLAogCQkub2Zmc2V0ID0gMSwKIAkJLmRzdF90eXBlID0gRFNUX1RZUEVfSVNfU0FULAotCQkudHlwZV9mbGFncyA9IERTVF9UWVBFX0hBU19ORVdUVU5FIHwgRFNUX1RZUEVfSEFTX0ZXXzIgfCBEU1RfVFlQRV9IQVNfRldfQlVJTEQsCisJCS50eXBlX2ZsYWdzID0gRFNUX1RZUEVfSEFTX05FV1RVTkUgfCBEU1RfVFlQRV9IQVNfRldfMiB8IERTVF9UWVBFX0hBU19GV19CVUlMRCB8IERTVF9UWVBFX0hBU19JTkNfQ09VTlQsCiAJCS5kc3RfZmVhdHVyZSA9IERTVF9UWVBFX0hBU19DQSB8IERTVF9UWVBFX0hBU19ESVNFUUMzIHwgRFNUX1RZUEVfSEFTX0RJU0VRQzQKIAkJCQkJCQl8IERTVF9UWVBFX0hBU19NT1RPIHwgRFNUX1RZUEVfSEFTX01BQwogCX0sCkBAIC04NzIsNyArOTI4LDcgQEAKIHsKIAlpbnQgcmV0dmFsOwogCXU4IGdldF9zaWduYWxbXSA9IHsgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiB9OwotCisJcHJpbnRrKCIlczogR2V0dGluZyBTaWduYWwgc3RyZW5ndGggYW5kIG90aGVyIHBhcmFtZXRlcnMgISEhISEhISFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJaWYgKChzdGF0ZS0+ZGlzZXFfZmxhZ3MgJiBBVFRFTVBUX1RVTkUpID09IDApIHsKIAkJc3RhdGUtPmRlY29kZV9sb2NrID0gc3RhdGUtPmRlY29kZV9zdHJlbmd0aCA9IHN0YXRlLT5kZWNvZGVfc25yID0gMDsKIAkJcmV0dXJuIDA7CkBAIC05NTQsMTUgKzEwMTAsOCBAQAogCXN0YXRlLT5kZWNvZGVfZnJlcSA9ICgoc3RhdGUtPnJ4X3R1bmFbMl0gJiAweDdmKSA8PCA4KSArIHN0YXRlLT5yeF90dW5hWzNdOwogCiAJc3RhdGUtPmRlY29kZV9sb2NrID0gMTsKLQkvKgotCSAgIGRzdC0+ZGVjb2RlX24xID0gKGRzdC0+cnhfdHVuYVs0XSA8PCA4KSArCi0JICAgKGRzdC0+cnhfdHVuYVs1XSk7Ci0KLQkgICBkc3QtPmRlY29kZV9uMiA9IChkc3QtPnJ4X3R1bmFbOF0gPDwgOCkgKwotCSAgIChkc3QtPnJ4X3R1bmFbN10pOwotCSAqLwogCXN0YXRlLT5kaXNlcV9mbGFncyB8PSBIQVNfTE9DSzsKLQkvKiBkc3QtPmN1cl9qaWZmID0gamlmZmllczsgKi8KKwogCXJldHVybiAxOwogfQogCkBAIC0xMDk4LDcgKzExNDcsMTEgQEAKIAogCXN3aXRjaCAodG9uZSkgewogCQljYXNlIFNFQ19UT05FX09GRjoKLQkJCXN0YXRlLT50eF90dW5hWzJdID0gMHhmZjsKKwkJCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19PQlNfUkVHUykKKwkJCSAgICBzdGF0ZS0+dHhfdHVuYVsyXSA9IDB4MDA7CisJCQllbHNlCisJCQkgICAgc3RhdGUtPnR4X3R1bmFbMl0gPSAweGZmOworCiAJCQlicmVhazsKIAogCQljYXNlIFNFQ19UT05FX09OOgpAQCAtMTE0NSw3ICsxMTk4LDggQEAKIAlzdGF0aWMgdTggaW5pX3R2Y2lfdHVuYVtdID0geyA5LCAwLCAzLCAweGI2LCAxLCA3LCAweDAsIDB4MCwgMCwgMCB9OwogCXN0YXRpYyB1OCBpbmlfY2FiZnRhX3R1bmFbXSA9IHsgMCwgMCwgMywgMHhiNiwgMSwgNywgMHgwLCAweDAsIDAsIDAgfTsKIAlzdGF0aWMgdTggaW5pX2NhYmNpX3R1bmFbXSA9IHsgOSwgMCwgMywgMHhiNiwgMSwgNywgMHgwLCAweDAsIDAsIDAgfTsKLQlzdGF0ZS0+aW52ZXJzaW9uID0gSU5WRVJTSU9OX09OOworLy8Jc3RhdGUtPmludmVyc2lvbiA9IElOVkVSU0lPTl9PTjsKKwlzdGF0ZS0+aW52ZXJzaW9uID0gSU5WRVJTSU9OX09GRjsKIAlzdGF0ZS0+dm9sdGFnZSA9IFNFQ19WT0xUQUdFXzEzOwogCXN0YXRlLT50b25lID0gU0VDX1RPTkVfT0ZGOwogCXN0YXRlLT5zeW1ib2xfcmF0ZSA9IDI5NDczMDAwOwpAQCAtMTE3NCw3ICsxMjI4LDcgQEAKIAogCSpzdGF0dXMgPSAwOwogCWlmIChzdGF0ZS0+ZGlzZXFfZmxhZ3MgJiBIQVNfTE9DSykgewotCQlkc3RfZ2V0X3NpZ25hbChzdGF0ZSk7CisvLwkJZHN0X2dldF9zaWduYWwoc3RhdGUpOwkvLyBkb24ndCByZXF1aXJlKD8pIHRvIGFzayBNQ1UKIAkJaWYgKHN0YXRlLT5kZWNvZGVfbG9jaykKIAkJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0sgfCBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfU1lOQyB8IEZFX0hBU19WSVRFUkJJOwogCX0KQEAgLTEyMDgsMjAgKzEyNjIsMjUgQEAKIAogCWRzdF9zZXRfZnJlcShzdGF0ZSwgcC0+ZnJlcXVlbmN5KTsKIAlpZiAodmVyYm9zZSA+IDQpCi0JCWRwcmludGsoIlNldCBGcmVxdWVuY3kgPSBbJWRdXG4iLCBwLT5mcmVxdWVuY3kpOworCQlkcHJpbnRrKCJTZXQgRnJlcXVlbmN5PVslZF1cbiIsIHAtPmZyZXF1ZW5jeSk7CiAKLQlkc3Rfc2V0X2ludmVyc2lvbihzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKKy8vCWRzdF9zZXRfaW52ZXJzaW9uKHN0YXRlLCBwLT5pbnZlcnNpb24pOwogCWlmIChzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfU0FUKSB7CisJCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19PQlNfUkVHUykKKwkJCWRzdF9zZXRfaW52ZXJzaW9uKHN0YXRlLCBwLT5pbnZlcnNpb24pOworCiAJCWRzdF9zZXRfZmVjKHN0YXRlLCBwLT51LnFwc2suZmVjX2lubmVyKTsKIAkJZHN0X3NldF9zeW1ib2xyYXRlKHN0YXRlLCBwLT51LnFwc2suc3ltYm9sX3JhdGUpOworCQlkc3Rfc2V0X3BvbGFyaXphdGlvbihzdGF0ZSk7CiAJCWlmICh2ZXJib3NlID4gNCkKLQkJCWRwcmludGsoIlNldCBTeW1ib2xyYXRlID0gWyVkXVxuIiwgcC0+dS5xcHNrLnN5bWJvbF9yYXRlKTsKKwkJCWRwcmludGsoIlNldCBTeW1ib2xyYXRlPVslZF1cbiIsIHAtPnUucXBzay5zeW1ib2xfcmF0ZSk7CiAKIAl9IGVsc2UgaWYgKHN0YXRlLT5kc3RfdHlwZSA9PSBEU1RfVFlQRV9JU19URVJSKSB7CiAJCWRzdF9zZXRfYmFuZHdpZHRoKHN0YXRlLCBwLT51Lm9mZG0uYmFuZHdpZHRoKTsKIAl9IGVsc2UgaWYgKHN0YXRlLT5kc3RfdHlwZSA9PSBEU1RfVFlQRV9JU19DQUJMRSkgewogCQlkc3Rfc2V0X2ZlYyhzdGF0ZSwgcC0+dS5xYW0uZmVjX2lubmVyKTsKIAkJZHN0X3NldF9zeW1ib2xyYXRlKHN0YXRlLCBwLT51LnFhbS5zeW1ib2xfcmF0ZSk7CisJCWRzdF9zZXRfbW9kdWxhdGlvbihzdGF0ZSwgcC0+dS5xYW0ubW9kdWxhdGlvbik7CiAJfQogCWRzdF93cml0ZV90dW5hKGZlKTsKIApAQCAtMTIzMyw4ICsxMjkyLDExIEBACiAJc3RydWN0IGRzdF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCXAtPmZyZXF1ZW5jeSA9IHN0YXRlLT5kZWNvZGVfZnJlcTsKLQlwLT5pbnZlcnNpb24gPSBzdGF0ZS0+aW52ZXJzaW9uOworLy8JcC0+aW52ZXJzaW9uID0gc3RhdGUtPmludmVyc2lvbjsKIAlpZiAoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX1NBVCkgeworCQlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfT0JTX1JFR1MpCisJCQlwLT5pbnZlcnNpb24gPSBzdGF0ZS0+aW52ZXJzaW9uOworCiAJCXAtPnUucXBzay5zeW1ib2xfcmF0ZSA9IHN0YXRlLT5zeW1ib2xfcmF0ZTsKIAkJcC0+dS5xcHNrLmZlY19pbm5lciA9IGRzdF9nZXRfZmVjKHN0YXRlKTsKIAl9IGVsc2UgaWYgKHN0YXRlLT5kc3RfdHlwZSA9PSBEU1RfVFlQRV9JU19URVJSKSB7CkBAIC0xMjQyLDcgKzEzMDQsOCBAQAogCX0gZWxzZSBpZiAoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX0NBQkxFKSB7CiAJCXAtPnUucWFtLnN5bWJvbF9yYXRlID0gc3RhdGUtPnN5bWJvbF9yYXRlOwogCQlwLT51LnFhbS5mZWNfaW5uZXIgPSBkc3RfZ2V0X2ZlYyhzdGF0ZSk7Ci0JCXAtPnUucWFtLm1vZHVsYXRpb24gPSBRQU1fQVVUTzsKKy8vCQlwLT51LnFhbS5tb2R1bGF0aW9uID0gUUFNX0FVVE87CisJCXAtPnUucWFtLm1vZHVsYXRpb24gPSBkc3RfZ2V0X21vZHVsYXRpb24oc3RhdGUpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYwppbmRleCBkNzgxNTA0Li5iZmFhY2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgImRzdF9jYS5oIgogI2luY2x1ZGUgImRzdF9jb21tb24uaCIKIAotc3RhdGljIHVuc2lnbmVkIGludCB2ZXJib3NlID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmVyYm9zZSA9IDU7CiBtb2R1bGVfcGFyYW0odmVyYm9zZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmVyYm9zZSwgInZlcmJvc2Ugc3RhcnR1cCBtZXNzYWdlcywgZGVmYXVsdCBpcyAxICh5ZXMpIik7CiAKQEAgLTI5NSwzNCArMjk1LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGFuZGxlX2VuNTAyMjFfdGFnKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY2FfbXNnICpwX2NhX21lc3NhZ2UsIHN0cnVjdCBjYV9tc2cgKmh3X2J1ZmZlcikKK3N0YXRpYyBpbnQgaGFuZGxlX2RzdF90YWcoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZSwgc3RydWN0IGNhX21zZyAqaHdfYnVmZmVyLCB1MzIgbGVuZ3RoKQogewogCWlmIChzdGF0ZS0+ZHN0X2h3X2NhcCAmIERTVF9UWVBFX0hBU19TRVNTSU9OKSB7CiAJCWh3X2J1ZmZlci0+bXNnWzJdID0gcF9jYV9tZXNzYWdlLT5tc2dbMV07CQkvKgkJTVNCCQkJKi8KIAkJaHdfYnVmZmVyLT5tc2dbM10gPSBwX2NhX21lc3NhZ2UtPm1zZ1syXTsJCS8qCQlMU0IJCQkqLwogCX0KIAllbHNlIHsKKwkJaHdfYnVmZmVyLT5tc2dbMF0gPSAobGVuZ3RoICYgMHhmZikgKyA3OworCQlod19idWZmZXItPm1zZ1sxXSA9IDB4NDA7CiAJCWh3X2J1ZmZlci0+bXNnWzJdID0gMHgwMzsKIAkJaHdfYnVmZmVyLT5tc2dbM10gPSAweDAwOworCQlod19idWZmZXItPm1zZ1s0XSA9IDB4MDM7CisJCWh3X2J1ZmZlci0+bXNnWzVdID0gbGVuZ3RoICYgMHhmZjsKKwkJaHdfYnVmZmVyLT5tc2dbNl0gPSAweDAwOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkZWJ1Z184ODIwX2J1ZmZlcihzdHJ1Y3QgY2FfbXNnICpod19idWZmZXIpCisKK3N0YXRpYyBpbnQgd3JpdGVfdG9fODgyMChzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX21zZyAqaHdfYnVmZmVyLCB1OCBsZW5ndGgsIHU4IHJlcGx5KQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZHByaW50aygiJXM6RGVidWc9WyIsIF9fRlVOQ1RJT05fXyk7Ci0JZm9yIChpID0gMDsgaSA8IChod19idWZmZXItPm1zZ1swXSArIDEpOyBpKyspCi0JCWRwcmludGsoIiAlMDJ4IiwgaHdfYnVmZmVyLT5tc2dbaV0pOwotCWRwcmludGsoIl1cbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfdG9fODgyMChzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX21zZyAqaHdfYnVmZmVyLCB1OCByZXBseSkKLXsKLQlpZiAoKGRzdF9wdXRfY2koc3RhdGUsIGh3X2J1ZmZlci0+bXNnLCAoaHdfYnVmZmVyLT5sZW5ndGggKyAxKSwgaHdfYnVmZmVyLT5tc2csIHJlcGx5KSkgPCAwKSB7CisJaWYgKChkc3RfcHV0X2NpKHN0YXRlLCBod19idWZmZXItPm1zZywgbGVuZ3RoLCBod19idWZmZXItPm1zZywgcmVwbHkpKSA8IDApIHsKIAkJZHByaW50aygiJXM6IERTVC1DSSBDb21tYW5kIGZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWRwcmludGsoIiVzOiBSZXNldHRpbmcgRFNULlxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmRjX3Jlc2V0X3N0YXRlKHN0YXRlKTsKQEAgLTMzNCwyMzQgKzMyOCwxNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IGNhX3NldF9wbXQoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZSwgc3RydWN0IGNhX21zZyAqaHdfYnVmZmVyLCB1OCByZXBseSwgdTggcXVlcnkpCit1MzIgYXNuXzFfZGVjb2RlKHU4ICphc25fMV9hcnJheSkKIHsKLQl1MzIgaHdfb2Zmc2V0LCBidWZfb2Zmc2V0LCBpLCBrOwotCXUzMiBwcm9ncmFtX2luZm9fbGVuZ3RoID0gMCwgZXNfaW5mb19sZW5ndGggPSAwLCBsZW5ndGggPSAwLCB3b3JkcyA9IDA7Ci0JdTggZm91bmRfcHJvZ19jYV9kZXNjID0gMCwgZm91bmRfc3RyZWFtX2NhX2Rlc2MgPSAwLCBlcnJvcl9jb25kaXRpb24gPSAwLCBod19idWZmZXJfbGVuZ3RoID0gMDsKKwl1OCBsZW5ndGhfZmllbGQgPSAwLCB3b3JkX2NvdW50ID0gMCwgY291bnQgPSAwOworCXUzMiBsZW5ndGggPSAwOwogCi0JaWYgKHZlcmJvc2UgPiAzKQotCQlkcHJpbnRrKCIlcywgcF9jYV9tZXNzYWdlIGxlbmd0aCAlZCAoMHgleClcbiIsIF9fRlVOQ1RJT05fXyxwX2NhX21lc3NhZ2UtPmxlbmd0aCxwX2NhX21lc3NhZ2UtPmxlbmd0aCApOwotCi0JaGFuZGxlX2VuNTAyMjFfdGFnKHN0YXRlLCBwX2NhX21lc3NhZ2UsIGh3X2J1ZmZlcik7CQkJLyoJRU41MDIyMSB0YWcJCSovCi0KLQkvKglIYW5kbGUgdGhlIGxlbmd0aCBmaWVsZCAodmFyaWFibGUpCSovCi0JaWYgKCEocF9jYV9tZXNzYWdlLT5tc2dbM10gJiAweDgwKSkgewkJCQkvKglMZW5ndGggPSAxCQkqLwotCQlsZW5ndGggPSBwX2NhX21lc3NhZ2UtPm1zZ1szXSAmIDB4N2Y7Ci0JCXdvcmRzID0gMDsJCQkJCQkvKglkb21pJ3Mgc3VnZ2VzdGlvbgkqLwotCX0KLQllbHNlIHsJCQkJCQkJCS8qCUxlbmd0aCA9IHdvcmRzCQkqLwotCQl3b3JkcyA9IHBfY2FfbWVzc2FnZS0+bXNnWzNdICYgMHg3ZjsKLQkJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKLQkJCWxlbmd0aCA9IGxlbmd0aCA8PCA4OwotCQkJbGVuZ3RoID0gbGVuZ3RoIHwgcF9jYV9tZXNzYWdlLT5tc2dbNCArIGldOworCWxlbmd0aF9maWVsZCA9IGFzbl8xX2FycmF5WzBdOworCWRwcmludGsoIiVzOiBMZW5ndGggZmllbGQ9WyUwMnhdXG4iLCBfX0ZVTkNUSU9OX18sIGxlbmd0aF9maWVsZCk7CisJaWYgKGxlbmd0aF9maWVsZCA8IDB4ODApIHsKKwkJbGVuZ3RoID0gbGVuZ3RoX2ZpZWxkICYgMHg3ZjsKKwkJZHByaW50aygiJXM6IExlbmd0aD1bJTAyeF1cbiIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwl9IGVsc2UgeworCQl3b3JkX2NvdW50ID0gbGVuZ3RoX2ZpZWxkICYgMHg3ZjsKKwkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgd29yZF9jb3VudDsgY291bnQrKykgeworCQkJbGVuZ3RoID0gKGxlbmd0aCB8IGFzbl8xX2FycmF5W2NvdW50ICsgMV0pIDw8IDg7CisJCQlkcHJpbnRrKCIlczogTGVuZ3RoPVslMDR4XVxuIiwgX19GVU5DVElPTl9fLCBsZW5ndGgpOwogCQl9CiAJfQotCWlmICh2ZXJib3NlID4gNCkgewotCQlkcHJpbnRrKCIlczpMZW5ndGg9WyVkICgweCV4KV0sIFdvcmRzPVslZF1cbiIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoLGxlbmd0aCwgd29yZHMpOworCXJldHVybiBsZW5ndGg7Cit9CiAKLQkJLyoJRGVidWcgSW5wdXQgc3RyaW5nCQkqLwotCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0JCQlkcHJpbnRrKCIgJTAyeCIsIHBfY2FfbWVzc2FnZS0+bXNnW2ldKTsKLQkJZHByaW50aygiXVxuIik7Ci0JfQotCi0JaHdfb2Zmc2V0ID0gNzsKLQlidWZfb2Zmc2V0ID0gd29yZHMgKyA0OwotCi0JLyoJCVByb2dyYW0gSGVhZGVyCQkJKi8KLQlpZiAodmVyYm9zZSA+IDQpCi0JCWRwcmludGsoIlxuJXM6UHJvZ3JhbSBIZWFkZXI9WyIsIF9fRlVOQ1RJT05fXyk7Ci0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQlod19idWZmZXItPm1zZ1tod19vZmZzZXRdID0gcF9jYV9tZXNzYWdlLT5tc2dbYnVmX29mZnNldF07Ci0JCWlmICh2ZXJib3NlID4gNCkKLQkJCWRwcmludGsoIiAlMDJ4IiwgcF9jYV9tZXNzYWdlLT5tc2dbYnVmX29mZnNldF0pOwotCQlod19vZmZzZXQrKywgYnVmX29mZnNldCsrLCBod19idWZmZXJfbGVuZ3RoKys7Ci0JfQotCWlmICh2ZXJib3NlID4gNCkKLQkJZHByaW50aygiXVxuIik7Ci0KLQlwcm9ncmFtX2luZm9fbGVuZ3RoID0gMDsKLQlwcm9ncmFtX2luZm9fbGVuZ3RoID0gKCgocHJvZ3JhbV9pbmZvX2xlbmd0aCB8IHBfY2FfbWVzc2FnZS0+bXNnW3dvcmRzICsgOF0pICYgMHgwZikgPDwgOCkgfCBwX2NhX21lc3NhZ2UtPm1zZ1t3b3JkcyArIDldOwotCWlmICh2ZXJib3NlID4gNCkKLQkJZHByaW50aygiJXM6UHJvZ3JhbSBpbmZvIExlbmd0aD1bJWRdWyUwMnhdLCBod19vZmZzZXQ9WyVkXSwgYnVmX29mZnNldD1bJWRdIFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgcHJvZ3JhbV9pbmZvX2xlbmd0aCwgcHJvZ3JhbV9pbmZvX2xlbmd0aCwgaHdfb2Zmc2V0LCBidWZfb2Zmc2V0KTsKLQotCWlmIChwcm9ncmFtX2luZm9fbGVuZ3RoICYmIChwcm9ncmFtX2luZm9fbGVuZ3RoIDwgMjU2KSkgewkvKglJZiBwcm9ncmFtX2luZm9fbGVuZ3RoCQkqLwotCQlod19idWZmZXItPm1zZ1sxMV0gPSBod19idWZmZXItPm1zZ1sxMV0gJiAweDBmOwkJLyoJcmVxIG9ubHkgNCBiaXRzCQkJKi8KLQkJaHdfYnVmZmVyLT5tc2dbMTJdID0gaHdfYnVmZmVyLT5tc2dbMTJdICsgMTsJCS8qCWluY3JlbWVudCEgQVNJQyBidWchCQkqLwotCi0JCWlmIChwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0ICsgMV0gPT0gMHgwOSkgewkvKglDaGVjayBDQSBkZXNjcmlwdG9yCQkqLwotCQkJZm91bmRfcHJvZ19jYV9kZXNjID0gMTsKLQkJCWlmICh2ZXJib3NlID4gNCkKLQkJCQlkcHJpbnRrKCIlczogRm91bmQgQ0EgZGVzY3JpcHRvciBAIFByb2dyYW0gbGV2ZWxcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCX0KLQotCQlpZiAoZm91bmRfcHJvZ19jYV9kZXNjKSB7CQkJCS8qCUNvbW1hbmQgb25seSBpZiBDQSBkZXNjcmlwdG9yCSovCi0JCQlod19idWZmZXItPm1zZ1sxM10gPSBwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0XTsJLyoJQ0EgUE1UIGNvbW1hbmQgSUQJKi8KLQkJCWh3X29mZnNldCsrLCBidWZfb2Zmc2V0KyssIGh3X2J1ZmZlcl9sZW5ndGgrKzsKLQkJfQotCi0JCS8qCQkJUHJvZ3JhbSBkZXNjcmlwdG9ycwkJCQkqLwotCQlpZiAodmVyYm9zZSA+IDQpIHsKLQkJCWRwcmludGsoIiVzOioqKioqKioqKio+YnVmX29mZnNldD1bJWRdLCBod19vZmZzZXQ9WyVkXVxuIiwgX19GVU5DVElPTl9fLCBidWZfb2Zmc2V0LCBod19vZmZzZXQpOwotCQkJZHByaW50aygiJXM6UHJvZ3JhbSBkZXNjcmlwdG9ycz1bIiwgX19GVU5DVElPTl9fKTsKLQkJfQotCQl3aGlsZSAocHJvZ3JhbV9pbmZvX2xlbmd0aCAmJiAhZXJyb3JfY29uZGl0aW9uKSB7CQkvKglDb3B5IHByb2cgZGVzY3JpcHRvcnMJKi8KLQkJCWlmIChwcm9ncmFtX2luZm9fbGVuZ3RoID4gcF9jYV9tZXNzYWdlLT5sZW5ndGgpIHsJLyoJRXJyb3Igc2l0dWF0aW9uCQkqLwotCQkJCWRwcmludGsgKCIlczpcIldBUk5JTkdcIiBMZW5ndGggZXJyb3IsIGxpbmU9WyVkXSwgcHJvZ19pbmZvX2xlbmd0aD1bJWRdXG4iLAotCQkJCQkJCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBwcm9ncmFtX2luZm9fbGVuZ3RoKTsKLQkJCQlkcHJpbnRrKCIlczpcIldBUk5JTkdcIiBCYWlsaW5nIG91dCBvZiBwb3NzaWJsZSBsb29wXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCWVycm9yX2NvbmRpdGlvbiA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWh3X2J1ZmZlci0+bXNnW2h3X29mZnNldF0gPSBwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0XTsKLQkJCWRwcmludGsoIiAlMDJ4IiwgcF9jYV9tZXNzYWdlLT5tc2dbYnVmX29mZnNldF0pOwotCQkJaHdfb2Zmc2V0KyssIGJ1Zl9vZmZzZXQrKywgaHdfYnVmZmVyX2xlbmd0aCsrLCBwcm9ncmFtX2luZm9fbGVuZ3RoLS07Ci0JCX0KLQkJaWYgKHZlcmJvc2UgPiA0KSB7Ci0JCQlkcHJpbnRrKCJdXG4iKTsKLQkJCWRwcmludGsoIiVzOioqKioqKioqKio+YnVmX29mZnNldD1bJWRdLCBod19vZmZzZXQ9WyVkXVxuIiwgX19GVU5DVElPTl9fLCBidWZfb2Zmc2V0LCBod19vZmZzZXQpOwotCQl9Ci0JCWlmIChmb3VuZF9wcm9nX2NhX2Rlc2MpIHsKLQkJCWlmICghcmVwbHkpIHsKLQkJCQlod19idWZmZXItPm1zZ1sxM10gPSAweDAxOwkJLyoJT0sgZGVzY3JhbWJsaW5nCQkJKi8KLQkJCQlpZiAodmVyYm9zZSA+IDEpCi0JCQkJCWRwcmludGsoIkNBIFBNVCBDb21tYW5kID0gT0sgRGVzY3JhbWJsaW5nXG4iKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWh3X2J1ZmZlci0+bXNnWzEzXSA9IDB4MDI7CQkvKglPayBNTUkJCQkJKi8KLQkJCQlpZiAodmVyYm9zZSA+IDEpCi0JCQkJCWRwcmludGsoIkNBIFBNVCBDb21tYW5kID0gT2sgTU1JXG4iKTsKLQkJCX0KLQkJCWlmIChxdWVyeSkgewotCQkJCWh3X2J1ZmZlci0+bXNnWzEzXSA9IDB4MDM7CQkvKglRdWVyeQkJCQkqLwotCQkJCWlmICh2ZXJib3NlID4gMSkKLQkJCQkJZHByaW50aygiQ0EgUE1UIENvbW1hbmQgPSBDQSBQTVQgcXVlcnlcbiIpOwotCQkJfQotCQl9Ci0JfQotCWVsc2UgewotCQlod19idWZmZXItPm1zZ1sxMV0gPSBod19idWZmZXItPm1zZ1sxMV0gJiAweGYwOwkJLyoJRG9uJ3Qgd3JpdGUgdG8gQVNJQwkJKi8KLQkJaHdfYnVmZmVyLT5tc2dbMTJdID0gaHdfYnVmZmVyLT5tc2dbMTJdID0gMHgwMDsKLQl9Ci0JaWYgKHZlcmJvc2UgPiA0KQotCQlkcHJpbnRrKCIlczoqKioqKioqKioqPnBfY2FfbWVzc2FnZS0+bGVuZ3RoPVslZF0sIGJ1Zl9vZmZzZXQ9WyVkXSwgaHdfb2Zmc2V0PVslZF1cbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgcF9jYV9tZXNzYWdlLT5sZW5ndGgsIGJ1Zl9vZmZzZXQsIGh3X29mZnNldCk7Ci0KLQl3aGlsZSAoKGJ1Zl9vZmZzZXQgIDwgcF9jYV9tZXNzYWdlLT5sZW5ndGgpICAmJiAhZXJyb3JfY29uZGl0aW9uKSB7Ci0JCS8qCUJhaWwgb3V0IGluIGNhc2Ugb2YgYW4gaW5kZWZpbml0ZSBsb29wCQkqLwotCQlpZiAoKGVzX2luZm9fbGVuZ3RoID4gcF9jYV9tZXNzYWdlLT5sZW5ndGgpIHx8IChidWZfb2Zmc2V0ID4gcF9jYV9tZXNzYWdlLT5sZW5ndGgpKSB7Ci0JCQlkcHJpbnRrKCIlczpcIldBUk5JTkdcIiBMZW5ndGggZXJyb3IsIGxpbmU9WyVkXSwgcHJvZ19pbmZvX2xlbmd0aD1bJWRdLCBidWZfb2Zmc2V0PVslZF1cbiIsCi0JCQkJCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXywgcHJvZ3JhbV9pbmZvX2xlbmd0aCwgYnVmX29mZnNldCk7Ci0KLQkJCWRwcmludGsoIiVzOlwiV0FSTklOR1wiIEJhaWxpbmcgb3V0IG9mIHBvc3NpYmxlIGxvb3BcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQllcnJvcl9jb25kaXRpb24gPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgkJU3RyZWFtIEhlYWRlcgkJCQkqLwotCi0JCWZvciAoayA9IDA7IGsgPCA1OyBrKyspIHsKLQkJCWh3X2J1ZmZlci0+bXNnW2h3X29mZnNldCArIGtdID0gcF9jYV9tZXNzYWdlLT5tc2dbYnVmX29mZnNldCArIGtdOwotCQl9Ci0KLQkJZXNfaW5mb19sZW5ndGggPSAwOwotCQllc19pbmZvX2xlbmd0aCA9IChlc19pbmZvX2xlbmd0aCB8IChwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0ICsgM10gJiAweDBmKSkgPDwgOCB8IHBfY2FfbWVzc2FnZS0+bXNnW2J1Zl9vZmZzZXQgKyA0XTsKLQotCQlpZiAodmVyYm9zZSA+IDQpIHsKLQkJCWRwcmludGsoIlxuJXM6LS0tLS0+U3RyZWFtIGhlYWRlcj1bJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XVxuIiwgX19GVU5DVElPTl9fLAotCQkJCXBfY2FfbWVzc2FnZS0+bXNnW2J1Zl9vZmZzZXQgKyAwXSwgcF9jYV9tZXNzYWdlLT5tc2dbYnVmX29mZnNldCArIDFdLAotCQkJCXBfY2FfbWVzc2FnZS0+bXNnW2J1Zl9vZmZzZXQgKyAyXSwgcF9jYV9tZXNzYWdlLT5tc2dbYnVmX29mZnNldCArIDNdLAotCQkJCXBfY2FfbWVzc2FnZS0+bXNnW2J1Zl9vZmZzZXQgKyA0XSk7Ci0KLQkJCWRwcmludGsoIiVzOi0tLS0tPlN0cmVhbSB0eXBlPVslMDJ4XSwgZXMgbGVuZ3RoPVslZCAoMHgleCldLCBDaGFycz1bJTAyeF0gWyUwMnhdLCBidWZfb2Zmc2V0PVslZF1cbiIsIF9fRlVOQ1RJT05fXywKLQkJCQlwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0ICsgMF0sIGVzX2luZm9fbGVuZ3RoLCBlc19pbmZvX2xlbmd0aCwKLQkJCQlwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0ICsgM10sIHBfY2FfbWVzc2FnZS0+bXNnW2J1Zl9vZmZzZXQgKyA0XSwgYnVmX29mZnNldCk7Ci0JCX0KLQotCQlod19idWZmZXItPm1zZ1tod19vZmZzZXQgKyAzXSAmPSAweDBmOwkJCS8qCXJlcSBvbmx5IDQgYml0cwkJCSovCi0KLQkJaWYgKGZvdW5kX3Byb2dfY2FfZGVzYykgewotCQkJaHdfYnVmZmVyLT5tc2dbaHdfb2Zmc2V0ICsgM10gPSAweDAwOwotCQkJaHdfYnVmZmVyLT5tc2dbaHdfb2Zmc2V0ICsgNF0gPSAweDAwOwotCQl9Ci0KLQkJaHdfb2Zmc2V0ICs9IDUsIGJ1Zl9vZmZzZXQgKz0gNSwgaHdfYnVmZmVyX2xlbmd0aCArPSA1OwotCi0JCS8qCQlDaGVjayBmb3IgQ0EgZGVzY3JpcHRvcgkJCSovCi0JCWlmIChwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0ICsgMV0gPT0gMHgwOSkgewotCQkJaWYgKHZlcmJvc2UgPiA0KQotCQkJCWRwcmludGsoIiVzOkZvdW5kIENBIGRlc2NyaXB0b3IgQCBTdHJlYW0gbGV2ZWxcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQlmb3VuZF9zdHJlYW1fY2FfZGVzYyA9IDE7Ci0JCX0KLQotCQkvKgkJRVMgZGVzY3JpcHRvcnMJCQkJKi8KLQotCQlpZiAoZXNfaW5mb19sZW5ndGggJiYgIWVycm9yX2NvbmRpdGlvbiAmJiAhZm91bmRfcHJvZ19jYV9kZXNjICYmIGZvdW5kX3N0cmVhbV9jYV9kZXNjKSB7Ci0vLwkJCWlmICghY2FfcG10X2RvbmUpIHsKLQkJCQlod19idWZmZXItPm1zZ1tod19vZmZzZXRdID0gcF9jYV9tZXNzYWdlLT5tc2dbYnVmX29mZnNldF07CS8qCUNBIFBNVCBjbWQoZXMpCSovCi0JCQkJaWYgKHZlcmJvc2UgPiA0KQotCQkJCQlwcmludGsoIiVzOi0tLS0tPkNBIFBNVCBDb21tYW5kIElEPVslMDJ4XVxuIiwgX19GVU5DVElPTl9fLCBwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0XSk7Ci0vLwkJCQlod19vZmZzZXQrKywgYnVmX29mZnNldCsrLCBod19idWZmZXJfbGVuZ3RoKyssIGVzX2luZm9fbGVuZ3RoLS0sIGNhX3BtdF9kb25lID0gMTsKLQkJCQlod19vZmZzZXQrKywgYnVmX29mZnNldCsrLCBod19idWZmZXJfbGVuZ3RoKyssIGVzX2luZm9fbGVuZ3RoLS07Ci0vLwkJCX0KLQkJCWlmICh2ZXJib3NlID4gNCkKLQkJCQlkcHJpbnRrKCIlczotLS0tLT5FUyBkZXNjcmlwdG9ycz1bIiwgX19GVU5DVElPTl9fKTsKLQotCQkJd2hpbGUgKGVzX2luZm9fbGVuZ3RoICYmICFlcnJvcl9jb25kaXRpb24pIHsJLyoJRVMgZGVzY3JpcHRvcnMJCQkqLwotCQkJCWlmICgoZXNfaW5mb19sZW5ndGggPiBwX2NhX21lc3NhZ2UtPmxlbmd0aCkgfHwgKGJ1Zl9vZmZzZXQgPiBwX2NhX21lc3NhZ2UtPmxlbmd0aCkpIHsKLQkJCQkJaWYgKHZlcmJvc2UgPiA0KSB7Ci0JCQkJCQlkcHJpbnRrKCIlczpcIldBUk5JTkdcIiBFUyBMZW5ndGggZXJyb3IsIGxpbmU9WyVkXSwgZXNfaW5mb19sZW5ndGg9WyVkXSwgYnVmX29mZnNldD1bJWRdXG4iLAotCQkJCQkJCQkJCV9fRlVOQ1RJT05fXywgX19MSU5FX18sIGVzX2luZm9fbGVuZ3RoLCBidWZfb2Zmc2V0KTsKLQotCQkJCQkJZHByaW50aygiJXM6XCJXQVJOSU5HXCIgQmFpbGluZyBvdXQgb2YgcG9zc2libGUgbG9vcFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQkJfQotCQkJCQllcnJvcl9jb25kaXRpb24gPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlod19idWZmZXItPm1zZ1tod19vZmZzZXRdID0gcF9jYV9tZXNzYWdlLT5tc2dbYnVmX29mZnNldF07Ci0JCQkJaWYgKHZlcmJvc2UgPiAzKQotCQkJCQlkcHJpbnRrKCIlMDJ4ICIsIGh3X2J1ZmZlci0+bXNnW2h3X29mZnNldF0pOwotCQkJCWh3X29mZnNldCsrLCBidWZfb2Zmc2V0KyssIGh3X2J1ZmZlcl9sZW5ndGgrKywgZXNfaW5mb19sZW5ndGgtLTsKLQkJCX0KLQkJCWZvdW5kX3N0cmVhbV9jYV9kZXNjID0gMDsJCQkvKgl1bnNldCBmb3IgbmV3IHN0cmVhbXMJCSovCi0JCQlkcHJpbnRrKCJdXG4iKTsKLQkJfQotCX0KLQotCS8qCQlNQ1UgTWFnaWMgd29yZHMJCQkJCSovCi0KLQlod19idWZmZXJfbGVuZ3RoICs9IDc7Ci0JaHdfYnVmZmVyLT5tc2dbMF0gPSBod19idWZmZXJfbGVuZ3RoOwotCWh3X2J1ZmZlci0+bXNnWzFdID0gNjQ7Ci0JaHdfYnVmZmVyLT5tc2dbNF0gPSAzOwotCWh3X2J1ZmZlci0+bXNnWzVdID0gaHdfYnVmZmVyLT5tc2dbMF0gLSA3OwotCWh3X2J1ZmZlci0+bXNnWzZdID0gMDsKLQotCi0JLyogICAgICBGaXggbGVuZ3RoICAgICAgKi8KLQlod19idWZmZXItPmxlbmd0aCA9IGh3X2J1ZmZlci0+bXNnWzBdOwotCi0JcHV0X2NoZWNrc3VtKCZod19idWZmZXItPm1zZ1swXSwgaHdfYnVmZmVyLT5tc2dbMF0pOwotCS8qICAgICAgRG8gdGhlIGFjdHVhbCB3cml0ZSAgICAgKi8KLQlpZiAodmVyYm9zZSA+IDQpIHsKLQkJZHByaW50aygiJXM6PT09PT09PT09PT09PT09PT09PT09PURFQlVHR0lORz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iLCBfX0ZVTkNUSU9OX18pOwotCQlkcHJpbnRrKCIlczogQWN0dWFsIExlbmd0aD1bJWRdXG4iLCBfX0ZVTkNUSU9OX18sIGh3X2J1ZmZlcl9sZW5ndGgpOwotCX0KLQkvKiAgICAgIE9ubHkgZm9yIGRlYnVnZ2luZyEgICAgICovCi0JaWYgKHZlcmJvc2UgPiAyKQotCQlkZWJ1Z184ODIwX2J1ZmZlcihod19idWZmZXIpOwotCWlmICh2ZXJib3NlID4gMykKLQkJZHByaW50aygiJXM6IFJlcGx5ID0gWyVkXVxuIiwgX19GVU5DVElPTl9fLCByZXBseSk7Ci0Jd3JpdGVfdG9fODgyMChzdGF0ZSwgaHdfYnVmZmVyLCByZXBseSk7CitzdGF0aWMgaW50IGluaXRfYnVmZmVyKHU4ICpidWZmZXIsIHUzMiBsZW5ndGgpCit7CisJdTMyIGk7CisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorCQlidWZmZXJbaV0gPSAwOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZGVidWdfc3RyaW5nKHU4ICptc2csIHUzMiBsZW5ndGgsIHUzMiBvZmZzZXQpCit7CisJdTMyIGk7CisKKwlkcHJpbnRrKCIgU3RyaW5nPVsgIik7CisJZm9yIChpID0gb2Zmc2V0OyBpIDwgbGVuZ3RoOyBpKyspCisJCWRwcmludGsoIiUwMnggIiwgbXNnW2ldKTsKKwlkcHJpbnRrKCJdXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcHlfc3RyaW5nKHU4ICpkZXN0aW5hdGlvbiwgdTggKnNvdXJjZSwgdTMyIGRlc3Rfb2Zmc2V0LCB1MzIgc291cmNlX29mZnNldCwgdTMyIGxlbmd0aCkKK3sKKwl1MzIgaTsKKwlkcHJpbnRrKCIlczogQ29weWluZyBbIiwgX19GVU5DVElPTl9fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJZGVzdGluYXRpb25baSArIGRlc3Rfb2Zmc2V0XSA9IHNvdXJjZVtpICsgc291cmNlX29mZnNldF07CisJCWRwcmludGsoIiAlMDJ4Iiwgc291cmNlW2kgKyBzb3VyY2Vfb2Zmc2V0XSk7CisJfQorCWRwcmludGsoIl1cbiIpOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgbW9kaWZ5XzRfYml0cyh1OCAqbWVzc2FnZSwgdTMyIHBvcykKK3sKKwltZXNzYWdlW3Bvc10gJj0gMHgwZjsKKworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBjYV9zZXRfcG10KHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY2FfbXNnICpwX2NhX21lc3NhZ2UsIHN0cnVjdCBjYV9tc2cgKmh3X2J1ZmZlciwgdTggcmVwbHksIHU4IHF1ZXJ5KQoreworCXUzMiBsZW5ndGggPSAwLCBjb3VudCA9IDA7CisJdTggYXNuXzFfd29yZHMsIHByb2dyYW1faGVhZGVyX2xlbmd0aDsKKwl1MTYgcHJvZ3JhbV9pbmZvX2xlbmd0aCA9IDAsIGVzX2luZm9fbGVuZ3RoID0gMDsKKwl1MzIgaHdfb2Zmc2V0ID0gMCwgYnVmX29mZnNldCA9IDAsIGk7CisJdTggZHN0X3RhZ19sZW5ndGg7CisKKwlsZW5ndGggPSBhc25fMV9kZWNvZGUoJnBfY2FfbWVzc2FnZS0+bXNnWzNdKTsKKwlkcHJpbnRrKCIlczogQ0EgTWVzc2FnZSBsZW5ndGg9WyVkXVxuIiwgX19GVU5DVElPTl9fLCBsZW5ndGgpOworCWRwcmludGsoIiVzOiBBU04uMSAiLCBfX0ZVTkNUSU9OX18pOworCWRlYnVnX3N0cmluZygmcF9jYV9tZXNzYWdlLT5tc2dbNF0sIGxlbmd0aCwgMCk7IC8vIGxlbmd0aCBkb2VzIG5vdCBpbmNsdWRlIHRhZyBhbmQgbGVuZ3RoCisKKwlpbml0X2J1ZmZlcihod19idWZmZXItPm1zZywgbGVuZ3RoKTsKKwloYW5kbGVfZHN0X3RhZyhzdGF0ZSwgcF9jYV9tZXNzYWdlLCBod19idWZmZXIsIGxlbmd0aCk7CisKKwlod19vZmZzZXQgPSA3OworCWFzbl8xX3dvcmRzID0gMTsgLy8ganVzdCBhIGhhY2sgdG8gdGVzdCwgc2hvdWxkIGNvbXB1dGUgdGhpcyBvbmUKKwlidWZfb2Zmc2V0ID0gMzsKKwlwcm9ncmFtX2hlYWRlcl9sZW5ndGggPSA2OworCWRzdF90YWdfbGVuZ3RoID0gNzsKKworLy8JZGVidWdfdHdpbmhhbl9jYV9wYXJhbXMoc3RhdGUsIHBfY2FfbWVzc2FnZSwgaHdfYnVmZmVyLCByZXBseSwgcXVlcnksIGxlbmd0aCwgaHdfb2Zmc2V0LCBidWZfb2Zmc2V0KTsKKy8vCWRwcmludGsoIiVzOiBQcm9ncmFtIEhlYWRlcihCVUYpIiwgX19GVU5DVElPTl9fKTsKKy8vCWRlYnVnX3N0cmluZygmcF9jYV9tZXNzYWdlLT5tc2dbNF0sIHByb2dyYW1faGVhZGVyX2xlbmd0aCwgMCk7CisvLwlkcHJpbnRrKCIlczogQ29weWluZyBQcm9ncmFtIGhlYWRlclxuIiwgX19GVU5DVElPTl9fKTsKKwljb3B5X3N0cmluZyhod19idWZmZXItPm1zZywgcF9jYV9tZXNzYWdlLT5tc2csIGh3X29mZnNldCwgKGJ1Zl9vZmZzZXQgKyBhc25fMV93b3JkcyksIHByb2dyYW1faGVhZGVyX2xlbmd0aCk7CisJYnVmX29mZnNldCArPSBwcm9ncmFtX2hlYWRlcl9sZW5ndGgsIGh3X29mZnNldCArPSBwcm9ncmFtX2hlYWRlcl9sZW5ndGg7CisJbW9kaWZ5XzRfYml0cyhod19idWZmZXItPm1zZywgKGh3X29mZnNldCAtIDIpKTsKKwlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfSU5DX0NPVU5UKSB7CS8vIHdvcmthcm91bmQKKwkJZHByaW50aygiJXM6IFByb2JhYmx5IGFuIEFTSUMgYnVnICEhIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZGVidWdfc3RyaW5nKGh3X2J1ZmZlci0+bXNnLCAoaHdfb2Zmc2V0ICsgcHJvZ3JhbV9oZWFkZXJfbGVuZ3RoKSwgMCk7CisJCWh3X2J1ZmZlci0+bXNnW2h3X29mZnNldCAtIDFdICs9IDE7CisJfQorCisvLwlkcHJpbnRrKCIlczogUHJvZ3JhbSBIZWFkZXIoSFcpLCBDb3VudD1bJWRdIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisvLwlkZWJ1Z19zdHJpbmcoaHdfYnVmZmVyLT5tc2csIGh3X29mZnNldCwgMCk7CisKKwlwcm9ncmFtX2luZm9fbGVuZ3RoID0gICgocHJvZ3JhbV9pbmZvX2xlbmd0aCB8IChwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0IC0gMV0gJiAweDBmKSkgPDwgOCkgfCBwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0XTsKKwlkcHJpbnRrKCIlczogUHJvZ3JhbSBpbmZvIGxlbmd0aD1bJTAyeF1cbiIsIF9fRlVOQ1RJT05fXywgcHJvZ3JhbV9pbmZvX2xlbmd0aCk7CisJaWYgKHByb2dyYW1faW5mb19sZW5ndGgpIHsKKwkJY291bnQgPSBjb3B5X3N0cmluZyhod19idWZmZXItPm1zZywgcF9jYV9tZXNzYWdlLT5tc2csIGh3X29mZnNldCwgKGJ1Zl9vZmZzZXQgKyAxKSwgKHByb2dyYW1faW5mb19sZW5ndGggKyAxKSApOyAvLyBjb3B5IG5leHQgZWxlbSwgbm90IGN1cnJlbnQKKwkJYnVmX29mZnNldCArPSBjb3VudCwgaHdfb2Zmc2V0ICs9IGNvdW50OworLy8JCWRwcmludGsoIiVzOiBQcm9ncmFtIGxldmVsICIsIF9fRlVOQ1RJT05fXyk7CisvLwkJZGVidWdfc3RyaW5nKGh3X2J1ZmZlci0+bXNnLCBod19vZmZzZXQsIDApOworCX0KKworCWJ1Zl9vZmZzZXQgKz0gMTsvLyBod19vZmZzZXQgKz0gMTsKKwlmb3IgKGkgPSBidWZfb2Zmc2V0OyBpIDwgbGVuZ3RoOyBpKyspIHsKKy8vCQlkcHJpbnRrKCIlczogU3RyZWFtIEhlYWRlciAiLCBfX0ZVTkNUSU9OX18pOworCQljb3VudCA9IGNvcHlfc3RyaW5nKGh3X2J1ZmZlci0+bXNnLCBwX2NhX21lc3NhZ2UtPm1zZywgaHdfb2Zmc2V0LCBidWZfb2Zmc2V0LCA1KTsKKwkJbW9kaWZ5XzRfYml0cyhod19idWZmZXItPm1zZywgKGh3X29mZnNldCArIDMpKTsKKworCQlod19vZmZzZXQgKz0gNSwgYnVmX29mZnNldCArPSA1LCBpICs9IDQ7CisvLwkJZGVidWdfc3RyaW5nKGh3X2J1ZmZlci0+bXNnLCBod19vZmZzZXQsIChod19vZmZzZXQgLSA1KSk7CisJCWVzX2luZm9fbGVuZ3RoID0gKChlc19pbmZvX2xlbmd0aCB8IChwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0IC0gMV0gJiAweDBmKSkgPDwgOCkgfCBwX2NhX21lc3NhZ2UtPm1zZ1tidWZfb2Zmc2V0XTsKKwkJZHByaW50aygiJXM6IEVTIGluZm8gbGVuZ3RoPVslMDJ4XVxuIiwgX19GVU5DVElPTl9fLCBlc19pbmZvX2xlbmd0aCk7CisJCWlmIChlc19pbmZvX2xlbmd0aCkgeworCQkJLy8gY29weSBkZXNjcmlwdG9ycyBAIFNUUkVBTSBsZXZlbAorCQkJZHByaW50aygiJXM6IERlc2NyaXB0b3JzIEAgU1RSRUFNIGxldmVsLi4uISEhIFxuIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCisJfQorCWh3X2J1ZmZlci0+bXNnW2xlbmd0aCArIGRzdF90YWdfbGVuZ3RoXSA9IGRzdF9jaGVja19zdW0oaHdfYnVmZmVyLT5tc2csIChsZW5ndGggKyBkc3RfdGFnX2xlbmd0aCkpOworLy8JZHByaW50aygiJXM6IFRvdGFsIGxlbmd0aD1bJWRdLCBDaGVja3N1bT1bJTAyeF1cbiIsIF9fRlVOQ1RJT05fXywgKGxlbmd0aCArIGRzdF90YWdfbGVuZ3RoKSwgaHdfYnVmZmVyLT5tc2dbbGVuZ3RoICsgZHN0X3RhZ19sZW5ndGhdKTsKKwlkZWJ1Z19zdHJpbmcoaHdfYnVmZmVyLT5tc2csIChsZW5ndGggKyBkc3RfdGFnX2xlbmd0aCArIDEpLCAwKTsJLy8gZHN0IHRhZ3MgYWxzbworCXdyaXRlX3RvXzg4MjAoc3RhdGUsIGh3X2J1ZmZlciwgKGxlbmd0aCArIGRzdF90YWdfbGVuZ3RoICsgMSksIHJlcGx5KTsJLy8gY2hlY2tzdW0KKworCXJldHVybiAwOworfQorCisKIC8qCUJvYXJkIHN1cHBvcnRzIENBIFBNVCByZXBseSA/CQkqLwogc3RhdGljIGludCBkc3RfY2hlY2tfY2FfcG10KHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY2FfbXNnICpwX2NhX21lc3NhZ2UsIHN0cnVjdCBjYV9tc2cgKmh3X2J1ZmZlcikKIHsKQEAgLTYwNSw3ICs1MDYsNyBAQAogCXN0cnVjdCBjYV9tc2cgKmh3X2J1ZmZlcjsKIAogCWlmICgoaHdfYnVmZmVyID0gKHN0cnVjdCBjYV9tc2cgKikga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjYV9tc2cpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmICh2ZXJib3NlID4gMykKQEAgLTYzMCw4ICs1MzEsMTAgQEAKIAkJc3dpdGNoIChjb21tYW5kKSB7CiAJCQljYXNlIENBX1BNVDoKIAkJCQlpZiAodmVyYm9zZSA+IDMpCisvLwkJCQkJZHByaW50aygiQ29tbWFuZCA9IFNFTkRfQ0FfUE1UXG4iKTsKIAkJCQkJZHByaW50aygiQ29tbWFuZCA9IFNFTkRfQ0FfUE1UXG4iKTsKLQkJCQlpZiAoKGNhX3NldF9wbXQoc3RhdGUsIHBfY2FfbWVzc2FnZSwgaHdfYnVmZmVyLCAwLCAwKSkgPCAwKSB7CisvLwkJCQlpZiAoKGNhX3NldF9wbXQoc3RhdGUsIHBfY2FfbWVzc2FnZSwgaHdfYnVmZmVyLCAwLCAwKSkgPCAwKSB7CisJCQkJaWYgKChjYV9zZXRfcG10KHN0YXRlLCBwX2NhX21lc3NhZ2UsIGh3X2J1ZmZlciwgMCwgMCkpIDwgMCkgewkvLyBjb2RlIHNpbXBsaWZpY2F0aW9uIHN0YXJ0ZWQKIAkJCQkJZHByaW50aygiJXM6IC0tPkNBX1BNVCBGYWlsZWQgIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KQEAgLTY2NCw3ICs1NjcsNyBAQAogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQogCQkJCWlmICh2ZXJib3NlID4gMykKLQkJCQkJcHJpbnRrKCIlczogLS0+Q0FfQVBQX0lORk9fRU5RVUlSWSBTdWNjZXNzICFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWRwcmludGsoIiVzOiAtLT5DQV9BUFBfSU5GT19FTlFVSVJZIFN1Y2Nlc3MgIVxuIiwgX19GVU5DVElPTl9fKTsKIAogCQkJCWJyZWFrOwogCQl9CkBAIC02ODEsMTcgKzU4NCwxNyBAQAogCXN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZTsKIAogCWlmICgocF9jYV9tZXNzYWdlID0gKHN0cnVjdCBjYV9tc2cgKikga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjYV9tc2cpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJaWYgKChwX2NhX3Nsb3RfaW5mbyA9IChzdHJ1Y3QgY2Ffc2xvdF9pbmZvICopIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2Ffc2xvdF9pbmZvKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZHByaW50aygiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWlmICgocF9jYV9jYXBzID0gKHN0cnVjdCBjYV9jYXBzICopIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2FfY2FwcyksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCXByaW50aygiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRwcmludGsoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jb21tb24uaAppbmRleCAwYjNkYTI5Li5lZjUzMmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY29tbW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NvbW1vbi5oCkBAIC00Nyw2ICs0Nyw4IEBACiAjZGVmaW5lIERTVF9UWVBFX0hBU19GV18yCTE2CiAjZGVmaW5lIERTVF9UWVBFX0hBU19GV18zCTMyCiAjZGVmaW5lIERTVF9UWVBFX0hBU19GV19CVUlMRAk2NAorI2RlZmluZSBEU1RfVFlQRV9IQVNfT0JTX1JFR1MJMTI4CisjZGVmaW5lIERTVF9UWVBFX0hBU19JTkNfQ09VTlQJMjU2CiAKIC8qCUNhcmQgY2FwYWJpbGl0eSBsaXN0CSovCiAKQEAgLTExMCw2ICsxMTIsNyBAQAogCXUzMiBkc3RfaHdfY2FwOwogCXU4IGRzdF9md192ZXJzaW9uOwogCWZlX3NlY19taW5pX2NtZF90IG1pbmljbWQ7CisJZmVfbW9kdWxhdGlvbl90IG1vZHVsYXRpb247CiAJdTggbWVzc2FnZXNbMjU2XTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwppbmRleCA5NmM1N2ZkLi43ZDhiM2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCkBAIC02OTksNiArNjk5LDggQEAKIAlmb3IgKG49MDsgbGVuPjAgJiYgbjwobGVuL3NpemVvZihyY19ldmVudHNbMF0pKTsgbisrKSB7CiAJCWludCBpOwogCisvKgkJZHByaW50aygxLCJyY19ldmVudHNbJWRdLnZhbHVlID0gJXgsIHR5cGU9JXhcbiIsbixsZTMyX3RvX2NwdShyY19ldmVudHNbbl0udmFsdWUpLHJjX2V2ZW50c1tuXS50eXBlKTsqLworCiAJCWlmIChyY19ldmVudHNbbl0udHlwZSA9PSBDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMgJiYKIAkJICAgIHJjX2V2ZW50c1tuXS52YWx1ZSA9PSB+MCkKIAkJewpAQCAtNzE0LDcgKzcxNiw3IEBACiAJCQljaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50ID0gS0VZX01BWDsKIAkJCWZvciAoaT0wOyBpPHNpemVvZihyY19rZXlzKS9zaXplb2YocmNfa2V5c1swXSk7IGkrPTMpIHsKIAkJCQlpZiAocmNfa2V5c1tpKzBdID09IHJjX2V2ZW50c1tuXS50eXBlICYmCi0JCQkJICAgIHJjX2tleXNbaSsxXSA9PSByY19ldmVudHNbbl0udmFsdWUpCisJCQkJICAgIHJjX2tleXNbaSsxXSA9PSBsZTMyX3RvX2NwdShyY19ldmVudHNbbl0udmFsdWUpKQogCQkJCXsKIAkJCQkJY2luZXJneXQyLT5yY19pbnB1dF9ldmVudCA9IHJjX2tleXNbaSsyXTsKIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCmluZGV4IGMyMjVkZTcuLjY4MDUwY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCkBAIC00MiwxMiArNDIsNiBAQAogCiAjZGVmaW5lIGRwcmludGsJaWYgKGRlYnVnKSBwcmludGsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqCi1kdmJfZG14ZGV2X2ZpbGVfdG9fZmlsdGVyKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAoc3RydWN0IGRteGRldl9maWx0ZXIgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZHZiX2RteGRldl9idWZmZXJfaW5pdChzdHJ1Y3QgZG14ZGV2X2J1ZmZlciAqYnVmZmVyKQogewogCWJ1ZmZlci0+ZGF0YT1OVUxMOwpAQCAtNjY5LDggKzY2MywxMCBAQAogCiAJCXJldCA9IGZpbHRlci0+ZmVlZC50cy0+c3RhcnRfZmlsdGVyaW5nKGZpbHRlci0+ZmVlZC50cyk7CiAKLQkJaWYgKHJldCA8IDApCisJCWlmIChyZXQgPCAwKSB7CisJCQlkbXhkZXYtPmRlbXV4LT5yZWxlYXNlX3RzX2ZlZWQoZG14ZGV2LT5kZW11eCwgKnRzZmVlZCk7CiAJCQlyZXR1cm4gcmV0OworCQl9CiAKIAkJYnJlYWs7CiAJfQpAQCAtODQyLDcgKzgzOCw3IEBACiBzdGF0aWMgc3NpemVfdAogZHZiX2RlbXV4X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXI9ZHZiX2RteGRldl9maWxlX3RvX2ZpbHRlcihmaWxlKTsKKwlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldD0wOwogCiAJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZG14ZGV2ZmlsdGVyLT5tdXRleCkpCkBAIC04NjMsNyArODU5LDcgQEAKIHN0YXRpYyBpbnQgZHZiX2RlbXV4X2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZykKIHsKLQlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyPWR2Yl9kbXhkZXZfZmlsZV90b19maWx0ZXIoZmlsZSk7CisJc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZG14ZGV2ICpkbXhkZXY9ZG14ZGV2ZmlsdGVyLT5kZXY7CiAJdW5zaWduZWQgbG9uZyBhcmc9KHVuc2lnbmVkIGxvbmcpIHBhcmc7CiAJaW50IHJldD0wOwpAQCAtOTYwLDcgKzk1Niw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZHZiX2RlbXV4X3BvbGwgKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIgPSBkdmJfZG14ZGV2X2ZpbGVfdG9fZmlsdGVyKGZpbGUpOworCXN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCiAJaWYgKCFkbXhkZXZmaWx0ZXIpCkBAIC05ODUsNyArOTgxLDcgQEAKIAogc3RhdGljIGludCBkdmJfZGVtdXhfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyID0gZHZiX2RteGRldl9maWxlX3RvX2ZpbHRlcihmaWxlKTsKKwlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkbXhkZXYgKmRteGRldiA9IGRteGRldmZpbHRlci0+ZGV2OwogCiAJcmV0dXJuIGR2Yl9kbXhkZXZfZmlsdGVyX2ZyZWUoZG14ZGV2LCBkbXhkZXZmaWx0ZXIpOwpAQCAtMTEwOSw3ICsxMTA1LDYgQEAKIAkJZHZiX2RteGRldl9maWx0ZXJfc3RhdGVfc2V0KCZkbXhkZXYtPmZpbHRlcltpXSwgRE1YREVWX1NUQVRFX0ZSRUUpOwogCQlkbXhkZXYtPmR2cltpXS5kZXY9ZG14ZGV2OwogCQlkbXhkZXYtPmR2cltpXS5idWZmZXIuZGF0YT1OVUxMOwotCQlkdmJfZG14ZGV2X2ZpbHRlcl9zdGF0ZV9zZXQoJmRteGRldi0+ZmlsdGVyW2ldLCBETVhERVZfU1RBVEVfRlJFRSk7CiAJCWR2Yl9kbXhkZXZfZHZyX3N0YXRlX3NldCgmZG14ZGV2LT5kdnJbaV0sIERNWERFVl9TVEFURV9GUkVFKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggZjExZGFhZS4uYThiYzg0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkdmJkZXYuaCIKIAorLy8gI2RlZmluZSBERUJVR19MT0NLTE9TUyAxCisKIHN0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2RlYnVnOwogc3RhdGljIGludCBkdmJfc2h1dGRvd25fdGltZW91dCA9IDU7CiBzdGF0aWMgaW50IGR2Yl9mb3JjZV9hdXRvX2ludmVyc2lvbjsKQEAgLTExMyw2ICsxMTUsNyBAQAogCWludCBleGl0OwogCWludCB3YWtldXA7CiAJZmVfc3RhdHVzX3Qgc3RhdHVzOworCWZlX3NlY190b25lX21vZGVfdCB0b25lOwogfTsKIAogCkBAIC00MzQsOSArNDM3LDI2IEBACiAJCQkvKiB3ZSdyZSB0dW5lZCwgYW5kIHRoZSBsb2NrIGlzIHN0aWxsIGdvb2QuLi4gKi8KIAkJCWlmIChzICYgRkVfSEFTX0xPQ0spCiAJCQkJY29udGludWU7Ci0JCQllbHNlIHsKLQkJCQkvKiBpZiB3ZSBfV0VSRV8gdHVuZWQsIGJ1dCBub3cgZG9uJ3QgaGF2ZSBhIGxvY2ssCi0JCQkJICogbmVlZCB0byB6aWd6YWcgKi8KKwkJCWVsc2UgeyAvKiBpZiB3ZSBfV0VSRV8gdHVuZWQsIGJ1dCBub3cgZG9uJ3QgaGF2ZSBhIGxvY2sgKi8KKyNpZmRlZiBERUJVR19MT0NLTE9TUworCQkJCS8qIGZpcnN0IG9mIGFsbCB0cnkgc2V0dGluZyB0aGUgdG9uZSBhZ2FpbiBpZiBpdCB3YXMgb24gLSB0aGlzCisJCQkJICogc29tZXRpbWVzIHdvcmtzIGFyb3VuZCBwcm9ibGVtcyB3aXRoIG5vaXN5IHBvd2VyIHN1cHBsaWVzICovCisJCQkJaWYgKGZlLT5vcHMtPnNldF90b25lICYmIChmZXByaXYtPnRvbmUgPT0gU0VDX1RPTkVfT04pKSB7CisJCQkJCWZlLT5vcHMtPnNldF90b25lKGZlLCBmZXByaXYtPnRvbmUpOworCQkJCQltZGVsYXkoMTAwKTsKKwkJCQkJcyA9IDA7CisJCQkJCWZlLT5vcHMtPnJlYWRfc3RhdHVzKGZlLCAmcyk7CisJCQkJCWlmIChzICYgRkVfSEFTX0xPQ0spIHsKKwkJCQkJCXByaW50aygiRFZCJWk6IExvY2sgd2FzIGxvc3QsIGJ1dCByZWdhaW5lZCBieSBzZXR0aW5nICIKKwkJCQkJCSAgICAgICAidGhlIHRvbmUuIFRoaXMgbWF5IGluZGljYXRlIHlvdXIgcG93ZXIgc3VwcGx5ICIKKwkJCQkJCSAgICAgICAiaXMgbm9pc3kvc2xpZ2h0bHkgaW5jb21wYXRhYmxlIHdpdGggdGhpcyBEVkItUyAiCisJCQkJCQkgICAgICAgImFkYXB0ZXJcbiIsIGZlLT5kdmItPm51bSk7CisJCQkJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9UVU5FRDsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJfQorI2VuZGlmCisJCQkJLyogc29tZSBvdGhlciByZWFzb24gZm9yIGxvc2luZyB0aGUgbG9jayAtIHN0YXJ0IHppZ3phZ2dpbmcgKi8KIAkJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9aSUdaQUdfRkFTVDsKIAkJCQlmZXByaXYtPnN0YXJ0ZWRfYXV0b19zdGVwID0gZmVwcml2LT5hdXRvX3N0ZXA7CiAJCQkJY2hlY2tfd3JhcHBlZCA9IDA7CkBAIC02MjYsMTEgKzY0NiwyMSBAQAogCQlicmVhazsKIAl9CiAKLQljYXNlIEZFX1JFQURfU1RBVFVTOgotCQlpZiAoZmUtPm9wcy0+cmVhZF9zdGF0dXMpCi0JCQllcnIgPSBmZS0+b3BzLT5yZWFkX3N0YXR1cyhmZSwgKGZlX3N0YXR1c190KikgcGFyZyk7Ci0JCWJyZWFrOworCWNhc2UgRkVfUkVBRF9TVEFUVVM6IHsKKwkJZmVfc3RhdHVzX3QqIHN0YXR1cyA9IHBhcmc7CiAKKwkJLyogaWYgcmV0dW5lIHdhcyByZXF1ZXN0ZWQgYnV0IGhhc24ndCBvY2N1cmVkIHlldCwgcHJldmVudAorCQkgKiB0aGF0IHVzZXIgZ2V0IHNpZ25hbCBzdGF0ZSBmcm9tIHByZXZpb3VzIHR1bmluZyAqLworCQlpZihmZXByaXYtPnN0YXRlID09IEZFU1RBVEVfUkVUVU5FKSB7CisJCQllcnI9MDsKKwkJCSpzdGF0dXMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZmUtPm9wcy0+cmVhZF9zdGF0dXMpCisJCQllcnIgPSBmZS0+b3BzLT5yZWFkX3N0YXR1cyhmZSwgc3RhdHVzKTsKKwkJYnJlYWs7CisJfQogCWNhc2UgRkVfUkVBRF9CRVI6CiAJCWlmIChmZS0+b3BzLT5yZWFkX2JlcikKIAkJCWVyciA9IGZlLT5vcHMtPnJlYWRfYmVyKGZlLCAoX191MzIqKSBwYXJnKTsKQEAgLTY4MSw2ICs3MTEsNyBAQAogCQkJZXJyID0gZmUtPm9wcy0+c2V0X3RvbmUoZmUsIChmZV9zZWNfdG9uZV9tb2RlX3QpIHBhcmcpOwogCQkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfRElTRVFDOwogCQkJZmVwcml2LT5zdGF0dXMgPSAwOworCQkJZmVwcml2LT50b25lID0gKGZlX3NlY190b25lX21vZGVfdCkgcGFyZzsKIAkJfQogCQlicmVhazsKIApAQCAtODgzLDYgKzkxNCw3IEBACiAJaW5pdF9NVVRFWCAoJmZlcHJpdi0+ZXZlbnRzLnNlbSk7CiAJZmUtPmR2YiA9IGR2YjsKIAlmZXByaXYtPmludmVyc2lvbiA9IElOVkVSU0lPTl9PRkY7CisJZmVwcml2LT50b25lID0gU0VDX1RPTkVfT0ZGOwogCiAJcHJpbnRrICgiRFZCOiByZWdpc3RlcmluZyBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAogCQlmZS0+ZHZiLT5udW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCmluZGV4IGQyYjAyMTcuLjljMmMxZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCkBAIC00MCwyOCArNDAsNiBAQAogCiAjaW5jbHVkZSAiZHZiZGV2LmgiCiAKLS8qIEZJWE1FOiBNb3ZlIHRvIGkyYy1pZC5oICovCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9EVkJGRV9TUDg4NzAJSTJDX0RSSVZFUklEX0VYUDIKLSNkZWZpbmUgSTJDX0RSSVZFUklEX0RWQkZFX0NYMjI3MDAJSTJDX0RSSVZFUklEX0VYUDIKLSNkZWZpbmUgSTJDX0RSSVZFUklEX0RWQkZFX0FUNzZDNjUxCUkyQ19EUklWRVJJRF9FWFAyCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9EVkJGRV9DWDI0MTEwCUkyQ19EUklWRVJJRF9FWFAyCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9EVkJGRV9DWDIyNzAyCUkyQ19EUklWRVJJRF9FWFAyCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9EVkJGRV9ESUIzMDAwTUIJSTJDX0RSSVZFUklEX0VYUDIKLSNkZWZpbmUgSTJDX0RSSVZFUklEX0RWQkZFX0RTVAkJSTJDX0RSSVZFUklEX0VYUDIKLSNkZWZpbmUgSTJDX0RSSVZFUklEX0RWQkZFX0RVTU1ZCUkyQ19EUklWRVJJRF9FWFAyCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9EVkJGRV9MNjQ3ODEJSTJDX0RSSVZFUklEX0VYUDIKLSNkZWZpbmUgSTJDX0RSSVZFUklEX0RWQkZFX01UMzEyCUkyQ19EUklWRVJJRF9FWFAyCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9EVkJGRV9NVDM1MglJMkNfRFJJVkVSSURfRVhQMgotI2RlZmluZSBJMkNfRFJJVkVSSURfRFZCRkVfTlhUNjAwMAlJMkNfRFJJVkVSSURfRVhQMgotI2RlZmluZSBJMkNfRFJJVkVSSURfRFZCRkVfU1A4ODdYCUkyQ19EUklWRVJJRF9FWFAyCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9EVkJGRV9TVFYwMjk5CUkyQ19EUklWRVJJRF9FWFAyCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9EVkJGRV9UREExMDA0WAlJMkNfRFJJVkVSSURfRVhQMgotI2RlZmluZSBJMkNfRFJJVkVSSURfRFZCRkVfVERBODA4MwlJMkNfRFJJVkVSSURfRVhQMgotI2RlZmluZSBJMkNfRFJJVkVSSURfRFZCRkVfVkVTMTgyMAlJMkNfRFJJVkVSSURfRVhQMgotI2RlZmluZSBJMkNfRFJJVkVSSURfRFZCRkVfVkVTMVg5MwlJMkNfRFJJVkVSSURfRVhQMgotI2RlZmluZSBJMkNfRFJJVkVSSURfRFZCRkVfVERBODBYWAlJMkNfRFJJVkVSSURfRVhQMgotCi0KIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyB7CiAgICAgICAgIGludCBtaW5fZGVsYXlfbXM7CiAgICAgICAgIGludCBzdGVwX3NpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggOGFhMzJmNi4uNjEyZTViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtMywzMCArMywzNSBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgVVNCCiAJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKLQkgIEJ5IGVuYWJsaW5nIHRoaXMgeW91IHdpbGwgYmUgYWJsZSB0byBjaG9vc2UgdGhlIHZhcmlvdXMgVVNCIDEuMSBhbmQKLQkgIFVTQjIuMCBEVkIgZGV2aWNlcy4KKwkgIEJ5IGVuYWJsaW5nIHRoaXMgeW91IHdpbGwgYmUgYWJsZSB0byBjaG9vc2UgdGhlIHZhcmlvdXMgc3VwcG9ydGVkCisJICBVU0IxLjEgYW5kIFVTQjIuMCBEVkIgZGV2aWNlcy4KIAogCSAgQWxtb3N0IGV2ZXJ5IFVTQiBkZXZpY2UgbmVlZHMgYSBmaXJtd2FyZSwgcGxlYXNlIGxvb2sgaW50bwotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2I+CisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYj4uCiAKLQkgIFNheSBZIGlmIHlvdSBvd24gYW4gVVNCIERWQiBkZXZpY2UuCisJICBGb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyBzZWUgdGhlIExpbnV4VFYgRFZCIFdpa2k6CisJICA8aHR0cDovL3d3dy5saW51eHR2Lm9yZy93aWtpL2luZGV4LnBocC9EVkJfVVNCPgorCisJICBTYXkgWSBpZiB5b3Ugb3duIGEgVVNCIERWQiBkZXZpY2UuCiAKIGNvbmZpZyBEVkJfVVNCX0RFQlVHCiAJYm9vbCAiRW5hYmxlIGV4dGVuZGVkIGRlYnVnIHN1cHBvcnQgZm9yIGFsbCBEVkItVVNCIGRldmljZXMiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGRlYnVnaW5nLiBTZWUgbW9kaW5mbyBkdmItdXNiIChhbmQgdGhlCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZGVidWdnaW5nLiBTZWUgbW9kaW5mbyBkdmItdXNiIChhbmQgdGhlCiAJICBhcHByb3ByaWF0ZSBkcml2ZXJzKSBmb3IgZGVidWcgbGV2ZWxzLgogCiBjb25maWcgRFZCX1VTQl9BODAwCiAJdHJpc3RhdGUgIkFWZXJNZWRpYSBBdmVyVFYgRFZCLVQgVVNCIDIuMCAoQTgwMCkiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9ESUIzMDAwTUMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFWZXJNZWRpYSBBdmVyVFYgRFZCLVQgVVNCIDIuMCAoQTgwMCkgcmVjZWl2ZXIuCiAKIGNvbmZpZyBEVkJfVVNCX0RJQlVTQl9NQgogCXRyaXN0YXRlICJEaUJjb20gVVNCIERWQi1UIGRldmljZXMgKGJhc2VkIG9uIHRoZSBEaUIzMDAwTS1CKSAoc2VlIGhlbHAgZm9yIGRldmljZSBsaXN0KSIKIAlkZXBlbmRzIG9uIERWQl9VU0IKKwlzZWxlY3QgRFZCX0RJQjMwMDBNQgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFVTQiAxLjEgYW5kIDIuMCBEVkItVCByZWNlaXZlcnMgYmFzZWQgb24gcmVmZXJlbmNlIGRlc2lnbnMgbWFkZSBieQogCSAgRGlCY29tICg8aHR0cDovL3d3dy5kaWJjb20uZnI+KSBlcXVpcHBlZCB3aXRoIGEgRGlCMzAwME0tQiBkZW1vZHVsYXRvci4KQEAgLTUyLDYgKzU3LDcgQEAKIGNvbmZpZyBEVkJfVVNCX0RJQlVTQl9NQwogCXRyaXN0YXRlICJEaUJjb20gVVNCIERWQi1UIGRldmljZXMgKGJhc2VkIG9uIHRoZSBEaUIzMDAwTS1DL1ApIChzZWUgaGVscCBmb3IgZGV2aWNlIGxpc3QpIgogCWRlcGVuZHMgb24gRFZCX1VTQgorCXNlbGVjdCBEVkJfRElCMzAwME1DCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgMi4wIERWQi1UIHJlY2VpdmVycyBiYXNlZCBvbiByZWZlcmVuY2UgZGVzaWducyBtYWRlIGJ5CiAJICBEaUJjb20gKDxodHRwOi8vd3d3LmRpYmNvbS5mcj4pIGVxdWlwcGVkIHdpdGggYSBEaUIzMDAwTS1DL1AgZGVtb2R1bGF0b3IuCkBAIC02NiwxMiArNzIsMjMgQEAKIGNvbmZpZyBEVkJfVVNCX1VNVF8wMTAKIAl0cmlzdGF0ZSAiSGFuZlRlayBVTVQtMDEwIERWQi1UIFVTQjIuMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgorCXNlbGVjdCBEVkJfRElCMzAwME1DCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBIYW5mVGVrIFVNVC0wMTAgVVNCMi4wIHN0aWNrLXNpemVkIERWQi1UIHJlY2VpdmVyLgogCitjb25maWcgRFZCX1VTQl9DWFVTQgorCXRyaXN0YXRlICJNZWRpb24gTUQ5NTcwMCBoeWJyaWQgVVNCMi4wIChDb25leGFudCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9VU0IKKwlzZWxlY3QgRFZCX0NYMjI3MDIKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIE1lZGlvbiBNRDk1NzAwIGh5YnJpZCBVU0IyLjAgZGV2aWNlLiBDdXJyZW50bHkKKwkgIG9ubHkgdGhlIERWQi1UIHBhcnQgaXMgc3VwcG9ydGVkLgorCiBjb25maWcgRFZCX1VTQl9ESUdJVFYKIAl0cmlzdGF0ZSAiTmVidWxhIEVsZWN0cm9uaWNzIHVEaWdpVFYgRFZCLVQgVVNCMi4wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9OWFQ2MDAwCisJc2VsZWN0IERWQl9NVDM1MgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgTmVidWxhIEVsZWN0cm9uaWNzIHVEaWdpdFYgVVNCMi4wIERWQi1UIHJlY2VpdmVyLgogCkBAIC04NywxMyArMTA0LDE2IEBACiBjb25maWcgRFZCX1VTQl9OT1ZBX1RfVVNCMgogCXRyaXN0YXRlICJIYXVwcGF1Z2UgV2luVFYtTk9WQS1UIHVzYjIgRFZCLVQgVVNCMi4wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9ESUIzMDAwTUMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEhhdXBwYXVnZSBXaW5UVi1OT1ZBLVQgdXNiMiBEVkItVCBVU0IyLjAgcmVjZWl2ZXIuCiAKIGNvbmZpZyBEVkJfVVNCX0RUVDIwMFUKLQl0cmlzdGF0ZSAiWWFrdW1vL0hhbWEvVHlwaG9vbi9ZdWFuIERWQi1UIFVTQjIuMCBzdXBwb3J0IgorCXRyaXN0YXRlICJXaWRlVmlldyBXVC0yMDBVIGFuZCBXVC0yMjBVIChwZW4pIERWQi1UIFVTQjIuMCBzdXBwb3J0IChZYWt1bW8vSGFtYS9UeXBob29uL1l1YW4pIgogCWRlcGVuZHMgb24gRFZCX1VTQgogCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgWWFrdW1vL0hhbWEvVHlwaG9vbi9ZdWFuIERWQi1UIFVTQjIuMCByZWNlaXZlci4KKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgV2lkZVZpZXcvWWFrdW1vL0hhbWEvVHlwaG9vbi9ZdWFuIERWQi1UIFVTQjIuMCByZWNlaXZlci4KIAogCSAgVGhlIHJlY2VpdmVycyBhcmUgYWxzbyBrbm93biBhcyBEVFQyMDBVIChZYWt1bW8pIGFuZCBVQjMwMCAoWXVhbikuCisKKwkgIFRoZSBXVC0yMjBVIGFuZCBpdHMgY2xvbmVzIGFyZSBwZW4tc2l6ZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQppbmRleCBkNjViNTBmLi43NDZkODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKQEAgLTI3LDQgKzI3LDcgQEAKIGR2Yi11c2ItZGlnaXR2LW9ianMgPSBkaWdpdHYubwogb2JqLSQoQ09ORklHX0RWQl9VU0JfRElHSVRWKSArPSBkdmItdXNiLWRpZ2l0di5vCiAKK2R2Yi11c2ItY3h1c2Itb2JqcyA9IGN4dXNiLm8KK29iai0kKENPTkZJR19EVkJfVVNCX0NYVVNCKSArPSBkdmItdXNiLWN4dXNiLm8KKwogRVhUUkFfQ0ZMQUdTID0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCmluZGV4IGEzNTQyOTMuLmYyZmNjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCkBAIC02MSw2ICs2MSwxMiBAQAogCXsgMHgwMiwgMHgwMCwgS0VZX0xBU1QgfSwgICAgICAgIC8qID4+fCAvIEJMVUUgKi8KIAl7IDB4MDIsIDB4MDQsIEtFWV9FUEcgfSwgICAgICAgICAvKiBFUEcgKi8KIAl7IDB4MDIsIDB4MTUsIEtFWV9NRU5VIH0sICAgICAgICAvKiBNRU5VICovCisKKwl7IDB4MDMsIDB4MDMsIEtFWV9DSEFOTkVMVVAgfSwgICAvKiBDSCBVUCAqLworCXsgMHgwMywgMHgwMiwgS0VZX0NIQU5ORUxET1dOIH0sIC8qIENIIERPV04gKi8KKwl7IDB4MDMsIDB4MDEsIEtFWV9GSVJTVCB9LCAgICAgICAvKiB8PDwgLyBHUkVFTiAqLworCXsgMHgwMywgMHgwMCwgS0VZX0xBU1QgfSwgICAgICAgIC8qID4+fCAvIEJMVUUgKi8KKwogfTsKIAogaW50IGE4MDBfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQpAQCAtNjgsNyArNzQsNyBAQAogCXU4IGtleVs1XTsKIAlpZiAodXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsdXNiX3JjdmN0cmxwaXBlKGQtPnVkZXYsMCksCiAJCQkJMHgwNCwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiwgMCwgMCwga2V5LCA1LAotCQkJCTIqSFopICE9IDUpCisJCQkJMjAwMCkgIT0gNSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBjYWxsIHRoZSB1bml2ZXJzYWwgTkVDIHJlbW90ZSBwcm9jZXNzb3IsIHRvIGZpbmQgb3V0IHRoZSBrZXkncyBzdGF0ZSBhbmQgZXZlbnQgKi8KQEAgLTE0Myw3ICsxNDksNyBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYTgwMF9kcml2ZXIgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJBVmVyTWVkaWEgQXZlclRWIERWQi1UIFVTQiAyLjAgKEE4MDApIiwKKwkubmFtZQkJPSAiZHZiX3VzYl9hODAwIiwKIAkucHJvYmUJCT0gYTgwMF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCiAJLmlkX3RhYmxlCT0gYTgwMF90YWJsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2UxYjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC0wLDAgKzEsMjk1IEBACisvKiBEVkIgVVNCIGNvbXBsaWFudCBsaW51eCBkcml2ZXIgZm9yIENvbmV4YW50IFVTQiByZWZlcmVuY2UgZGVzaWduLgorICoKKyAqIFRoZSBDb25leGFudCByZWZlcmVuY2UgZGVzaWduIEkgc2F3IG9uIHRoZWlyIHdlYnNpdGUgd2FzIG9ubHkgZm9yIGFuYWxvZ3VlCisgKiBjYXB0dXJpbmcgKHVzaW5nIHRoZSBjeDI1ODQyKS4gVGhlIGJveCBJIHRvb2sgdG8gd3JpdGUgdGhpcyBkcml2ZXIgKHJldmVyc2UKKyAqIGVuZ2luZWVyZWQpIGlzIHRoZSBvbmUgbGFiZWxlZCBNZWRpb24gTUQ5NTcwMC4gSW4gYWRkaXRpb24gdG8gdGhlIGN4MjU4NDIKKyAqIGZvciBhbmFsb2d1ZSBjYXB0dXJpbmcgaXQgYWxzbyBoYXMgYSBjeDIyNzAyIERWQi1UIGRlbW9kdWxhdG9yIG9uIHRoZSBtYWluCisgKiBib2FyZC4gQmVzaWRlcyBpdCBoYXMgYSBhdGlyZW1vdGUgKFgxMCkgYW5kIGEgVVNCMi4wIGh1YiBvbmJvYXJkLgorICoKKyAqIE1heWJlIGl0IGlzIGEgbGl0dGxlIGJpdCBwcmVtYXR1cmUgdG8gY2FsbCB0aGlzIGRyaXZlciBjeHVzYiwgYnV0IEkgYXNzdW1lCisgKiB0aGUgVVNCIHByb3RvY29sIGlzIGlkZW50aWNhbCBvciBhdCBsZWFzdCBpbmhlcml0ZWQgZnJvbSB0aGUgcmVmZXJlbmNlCisgKiBkZXNpZ24sIHNvIGl0IGNhbiBiZSByZXVzZWQgZm9yIHRoZSAiYW5hbG9ndWUtb25seSIgZGV2aWNlIChpZiBpdCB3aWxsCisgKiBhcHBlYXIgYXQgYWxsKS4KKyAqCisgKiBUT0RPOiBjaGVjayBpZiB0aGUgY3gyNTg0MC1kcml2ZXIgKGZyb20gaXZ0dikgY2FuIGJlIHVzZWQgZm9yIHRoZSBhbmFsb2d1ZQorICogcGFydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqLworI2luY2x1ZGUgImN4dXNiLmgiCisKKyNpbmNsdWRlICJjeDIyNzAyLmgiCisKKy8qIGRlYnVnICovCitpbnQgZHZiX3VzYl9jeHVzYl9kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZyxkdmJfdXNiX2N4dXNiX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9cmMgKG9yLWFibGUpKS4iIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKKworc3RhdGljIGludCBjeHVzYl9jdHJsX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsCisJCXU4IGNtZCwgdTggKndidWYsIGludCB3bGVuLCB1OCAqcmJ1ZiwgaW50IHJsZW4pCit7CisJaW50IHdvID0gKHJidWYgPT0gTlVMTCB8fCBybGVuID09IDApOyAvKiB3cml0ZS1vbmx5ICovCisJdTggc25kYnVmWzErd2xlbl07CisJbWVtc2V0KHNuZGJ1ZiwwLDErd2xlbik7CisKKwlzbmRidWZbMF0gPSBjbWQ7CisJbWVtY3B5KCZzbmRidWZbMV0sd2J1Zix3bGVuKTsKKwlpZiAod28pCisJCWR2Yl91c2JfZ2VuZXJpY193cml0ZShkLHNuZGJ1ZiwxK3dsZW4pOworCWVsc2UKKwkJZHZiX3VzYl9nZW5lcmljX3J3KGQsc25kYnVmLDErd2xlbixyYnVmLHJsZW4sMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogSTJDICovCitzdGF0aWMgdm9pZCBjeHVzYl9zZXRfaTJjX3BhdGgoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBlbnVtIGN4dXNiX2kyY19wYXRoZXMgcGF0aCkKK3sKKwlzdHJ1Y3QgY3h1c2Jfc3RhdGUgKnN0ID0gZC0+cHJpdjsKKwl1OCBvWzJdLGk7CisKKwlpZiAocGF0aCA9PSBzdC0+Y3VyX2kyY19wYXRoKQorCQlyZXR1cm47CisKKwlvWzBdID0gSU9DVExfU0VUX0kyQ19QQVRIOworCXN3aXRjaCAocGF0aCkgeworCQljYXNlIFBBVEhfQ1gyMjcwMjoKKwkJCW9bMV0gPSAwOworCQkJYnJlYWs7CisJCWNhc2UgUEFUSF9UVU5FUl9PVEhFUjoKKwkJCW9bMV0gPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIoInVua293biBpMmMgcGF0aCIpOworCQkJcmV0dXJuOworCX0KKwljeHVzYl9jdHJsX21zZyhkLENNRF9JT0NUTCxvLDIsJmksMSk7CisKKwlpZiAoaSAhPSAweDAxKQorCQlkZWJfaW5mbygiaTJjX3BhdGggc2V0dGluZyBmYWlsZWQuXG4iKTsKKworCXN0LT5jdXJfaTJjX3BhdGggPSBwYXRoOworfQorCitzdGF0aWMgaW50IGN4dXNiX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCxzdHJ1Y3QgaTJjX21zZyBtc2dbXSxpbnQgbnVtKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IGk7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfc2VtKSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKG51bSA+IDIpCisJCXdhcm4oIm1vcmUgdGhhbiAyIGkyYyBtZXNzYWdlcyBhdCBhIHRpbWUgaXMgbm90IGhhbmRsZWQgeWV0LiBUT0RPLiIpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisKKwkJc3dpdGNoIChtc2dbaV0uYWRkcikgeworCQkJY2FzZSAweDYzOgorCQkJCWN4dXNiX3NldF9pMmNfcGF0aChkLFBBVEhfQ1gyMjcwMik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWN4dXNiX3NldF9pMmNfcGF0aChkLFBBVEhfVFVORVJfT1RIRVIpOworCQkJCWJyZWFrOworCQl9CisKKwkJLyogcmVhZCByZXF1ZXN0ICovCisJCWlmIChpKzEgPCBudW0gJiYgKG1zZ1tpKzFdLmZsYWdzICYgSTJDX01fUkQpKSB7CisJCQl1OCBvYnVmWzMrbXNnW2ldLmxlbl0sIGlidWZbMSttc2dbaSsxXS5sZW5dOworCQkJb2J1ZlswXSA9IG1zZ1tpXS5sZW47CisJCQlvYnVmWzFdID0gbXNnW2krMV0ubGVuOworCQkJb2J1ZlsyXSA9IG1zZ1tpXS5hZGRyOworCQkJbWVtY3B5KCZvYnVmWzNdLG1zZ1tpXS5idWYsbXNnW2ldLmxlbik7CisKKwkJCWlmIChjeHVzYl9jdHJsX21zZyhkLCBDTURfSTJDX1JFQUQsCisJCQkJCQlvYnVmLCAzK21zZ1tpXS5sZW4sCisJCQkJCQlpYnVmLCAxK21zZ1tpKzFdLmxlbikgPCAwKQorCQkJCWJyZWFrOworCisJCQlpZiAoaWJ1ZlswXSAhPSAweDA4KQorCQkJCWRlYl9pbmZvKCJpMmMgcmVhZCBjb3VsZCBoYXZlIGJlZW4gZmFpbGVkXG4iKTsKKworCQkJbWVtY3B5KG1zZ1tpKzFdLmJ1ZiwmaWJ1ZlsxXSxtc2dbaSsxXS5sZW4pOworCisJCQlpKys7CisJCX0gZWxzZSB7IC8qIHdyaXRlICovCisJCQl1OCBvYnVmWzIrbXNnW2ldLmxlbl0sIGlidWY7CisJCQlvYnVmWzBdID0gbXNnW2ldLmFkZHI7CisJCQlvYnVmWzFdID0gbXNnW2ldLmxlbjsKKwkJCW1lbWNweSgmb2J1ZlsyXSxtc2dbaV0uYnVmLG1zZ1tpXS5sZW4pOworCisJCQlpZiAoY3h1c2JfY3RybF9tc2coZCxDTURfSTJDX1dSSVRFLCBvYnVmLCAyK21zZ1tpXS5sZW4sICZpYnVmLDEpIDwgMCkKKwkJCQlicmVhazsKKwkJCWlmIChpYnVmICE9IDB4MDgpCisJCQkJZGViX2luZm8oImkyYyB3cml0ZSBjb3VsZCBoYXZlIGJlZW4gZmFpbGVkXG4iKTsKKwkJfQorCX0KKworCXVwKCZkLT5pMmNfc2VtKTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHUzMiBjeHVzYl9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGN4dXNiX2kyY19hbGdvID0geworCS5uYW1lICAgICAgICAgID0gIkNvbmV4YW50IFVTQiBJMkMgYWxnb3JpdGhtIiwKKwkuaWQgICAgICAgICAgICA9IEkyQ19BTEdPX0JJVCwKKwkubWFzdGVyX3hmZXIgICA9IGN4dXNiX2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gY3h1c2JfaTJjX2Z1bmMsCit9OworCitzdGF0aWMgaW50IGN4dXNiX3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3h1c2Jfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCit7CisJdTggYnVmWzJdID0geyAweDAzLCAweDAwIH07CisJaWYgKG9ub2ZmKQorCQljeHVzYl9jdHJsX21zZyhkLDB4MzYsIGJ1ZiwgMiwgTlVMTCwgMCk7CisJZWxzZQorCQljeHVzYl9jdHJsX21zZyhkLDB4MzcsIE5VTEwsIDAsIE5VTEwsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjeDIyNzAyX2NvbmZpZyBjeHVzYl9jeDIyNzAyX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjMsCisKKwkub3V0cHV0X21vZGUgPSBDWDIyNzAyX1BBUkFMTEVMX09VVFBVVCwKKworCS5wbGxfaW5pdCA9IGR2Yl91c2JfcGxsX2luaXRfaTJjLAorCS5wbGxfc2V0ICA9IGR2Yl91c2JfcGxsX3NldF9pMmMsCit9OworCisvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KK3N0YXRpYyBpbnQgY3h1c2JfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwl1OCBicGxsWzRdID0geyAweDBiLCAweGRjLCAweDljLCAweGEwIH07CisJZC0+cGxsX2FkZHIgPSAweDYxOworCW1lbWNweShkLT5wbGxfaW5pdCxicGxsLDQpOworCWQtPnBsbF9kZXNjID0gJmR2Yl9wbGxfZm1kMTIxNm1lOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4dXNiX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJdTggYnVmWzJdID0geyAweDAzLCAweDAwIH07CisJdTggYiA9IDA7CisKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwwLDApIDwgMCkKKwkJZXJyKCJzZXQgaW50ZXJmYWNlIHRvIGFsdHM9MCBmYWlsZWQiKTsKKworCWN4dXNiX2N0cmxfbXNnKGQsMHhkZSwmYiwwLE5VTEwsMCk7CisJY3h1c2Jfc2V0X2kyY19wYXRoKGQsUEFUSF9UVU5FUl9PVEhFUik7CisJY3h1c2JfY3RybF9tc2coZCxDTURfUE9XRVJfT0ZGLCBOVUxMLCAwLCAmYiwgMSk7CisKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwwLDYpIDwgMCkKKwkJZXJyKCJzZXQgaW50ZXJmYWNlIGZhaWxlZCIpOworCisJY3h1c2JfY3RybF9tc2coZCwweDM2LCBidWYsIDIsIE5VTEwsIDApOworCWN4dXNiX3NldF9pMmNfcGF0aChkLFBBVEhfQ1gyMjcwMik7CisJY3h1c2JfY3RybF9tc2coZCxDTURfUE9XRVJfT04sIE5VTEwsIDAsICZiLCAxKTsKKworCWlmICgoZC0+ZmUgPSBjeDIyNzAyX2F0dGFjaCgmY3h1c2JfY3gyMjcwMl9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKKy8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBjeHVzYl9wcm9wZXJ0aWVzOworCitzdGF0aWMgaW50IGN4dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwmY3h1c2JfcHJvcGVydGllcyxUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjeHVzYl90YWJsZSBbXSA9IHsKKwkJeyBVU0JfREVWSUNFKFVTQl9WSURfTUVESU9OLCBVU0JfUElEX01FRElPTl9NRDk1NzAwKSB9LAorCQl7fQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGN4dXNiX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgY3h1c2JfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisKKwkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKKworCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBjeHVzYl9zdGF0ZSksCisKKwkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAorCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfcG93ZXJfY3RybCwKKwkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX2Zyb250ZW5kX2F0dGFjaCwKKwkudHVuZXJfYXR0YWNoICAgICA9IGN4dXNiX3R1bmVyX2F0dGFjaCwKKworCS5pMmNfYWxnbyAgICAgICAgID0gJmN4dXNiX2kyY19hbGdvLAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJLnVyYiA9IHsKKwkJLnR5cGUgPSBEVkJfVVNCX0lTT0MsCisJCS5jb3VudCA9IDUsCisJCS5lbmRwb2ludCA9IDB4MDIsCisJCS51ID0geworCQkJLmlzb2MgPSB7CisJCQkJLmZyYW1lc3BlcnVyYiA9IDMyLAorCQkJCS5mcmFtZXNpemUgPSA5NDAsCisJCQkJLmludGVydmFsID0gNSwKKwkJCX0KKwkJfQorCX0sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsgICAiTWVkaW9uIE1EOTU3MDAgKE1EVVNCVFYtSFlCUklEKSIsCisJCQl7IE5VTEwgfSwKKwkJCXsgJmN4dXNiX3RhYmxlWzBdLCBOVUxMIH0sCisJCX0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN4dXNiX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gImR2Yl91c2JfY3h1c2IiLAorCS5wcm9iZQkJPSBjeHVzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCisJLmlkX3RhYmxlCT0gY3h1c2JfdGFibGUsCit9OworCisvKiBtb2R1bGUgc3R1ZmYgKi8KK3N0YXRpYyBpbnQgX19pbml0IGN4dXNiX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKwlpZiAoKHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmY3h1c2JfZHJpdmVyKSkpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeHVzYl9tb2R1bGVfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgZnJvbSB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZjeHVzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCAoY3h1c2JfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQgKGN4dXNiX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiUGF0cmljayBCb2V0dGNoZXIgPHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQ29uZXhhbnQgVVNCMi4wIGh5YnJpZCByZWZlcmVuY2UgZGVzaWduIik7CitNT0RVTEVfVkVSU0lPTigiMS4wLWFscGhhIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3OTAxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9EVkJfVVNCX0NYVVNCX0hfCisjZGVmaW5lIF9EVkJfVVNCX0NYVVNCX0hfCisKKyNkZWZpbmUgRFZCX1VTQl9MT0dfUFJFRklYICJkaWdpdHYiCisjaW5jbHVkZSAiZHZiLXVzYi5oIgorCitleHRlcm4gaW50IGR2Yl91c2JfY3h1c2JfZGVidWc7CisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2N4dXNiX2RlYnVnLDB4MDEsYXJncykKKworLyogdXNiIGNvbW1hbmRzIC0gc29tZSBvZiBpdCBhcmUgZ3Vlc3NlcywgZG9uJ3QgaGF2ZSBhIHJlZmVyZW5jZSB5ZXQgKi8KKyNkZWZpbmUgQ01EX0kyQ19XUklURSAgICAweDA4CisjZGVmaW5lIENNRF9JMkNfUkVBRCAgICAgMHgwOQorCisjZGVmaW5lIENNRF9JT0NUTCAgICAgICAgMHgwZQorI2RlZmluZSAgICBJT0NUTF9TRVRfSTJDX1BBVEggMHgwMgorCisjZGVmaW5lIENNRF9QT1dFUl9PRkYgICAgMHg1MAorI2RlZmluZSBDTURfUE9XRVJfT04gICAgIDB4NTEKKworZW51bSBjeHVzYl9pMmNfcGF0aGVzIHsKKwlQQVRIX1VOREVGICAgICAgID0gMHgwMCwKKwlQQVRIX0NYMjI3MDIgICAgID0gMHgwMSwKKwlQQVRIX1RVTkVSX09USEVSID0gMHgwMiwKK307CisKK3N0cnVjdCBjeHVzYl9zdGF0ZSB7CisJZW51bSBjeHVzYl9pMmNfcGF0aGVzIGN1cl9pMmNfcGF0aDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKaW5kZXggYTBmZmJiNS4uODI4YjUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCkBAIC0zMSwxMCArMzEsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogc29tZSBvZiB0aGUgZGlidXNiIDEuMSBkZXZpY2UgYXJlbid0IGVxdWlwcGVkIHdpdGggdGhlIGRlZmF1bHQgdHVuZXIKK3N0YXRpYyBpbnQgZGlidXNiX3Rob21zb25fdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlkLT5wbGxfYWRkciA9IDB4NjE7CisJZC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90dWE2MDEweHM7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNvbWUgb2YgdGhlIEFydGVjIDEuMSBkZXZpY2UgYXJlbid0IGVxdWlwcGVkIHdpdGggdGhlIGRlZmF1bHQgdHVuZXIKICAqIChUaG9tc29uIENhYmxlKSwgYnV0IHdpdGggYSBQYW5hc29uaWMgRU5WNzdIMTFENS4gIFRoaXMgZnVuY3Rpb24gZmlndXJlcwogICogdGhpcyBvdXQuICovCi1zdGF0aWMgaW50IGRpYnVzYl9kaWIzMDAwbWJfdHVuZXJfYXR0YWNoIChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitzdGF0aWMgaW50IGRpYnVzYl90dW5lcl9wcm9iZV9hbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKIAl1OCBiWzJdID0geyAwLDAgfSwgYjJbMV07CiAJaW50IHJldCA9IDA7CkBAIC01OSw4ICs2Niw3IEBACiAKIAlpZiAoYjJbMF0gPT0gMHhmZSkgewogCQlpbmZvKCJ0aGlzIGRldmljZSBoYXMgdGhlIFRob21zb24gQ2FibGUgb25ib2FyZC4gV2hpY2ggaXMgZGVmYXVsdC4iKTsKLQkJZC0+cGxsX2FkZHIgPSAweDYxOwotCQlkLT5wbGxfZGVzYyA9ICZkdmJfcGxsX3R1YTYwMTB4czsKKwkJZGlidXNiX3Rob21zb25fdHVuZXJfYXR0YWNoKGQpOwogCX0gZWxzZSB7CiAJCXU4IGJwbGxbNF0gPSB7IDB4MGIsIDB4ZjUsIDB4ODUsIDB4YWIgfTsKIAkJaW5mbygidGhpcyBkZXZpY2UgaGFzIHRoZSBQYW5hc29uaWMgRU5WNzdIMTFENSBvbmJvYXJkLiIpOwpAQCAtOTAsOCArOTYsOCBAQAogCiAvKiBkbyBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgSUQgdGFibGUgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkaWJ1c2JfZGliMzAwMG1iX3RhYmxlIFtdID0gewotLyogMDAgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfQVZFUk1FRElBX1VOSywJVVNCX1BJRF9BVkVSTUVESUFfRFZCVF9VU0JfQ09MRCl9LAotLyogMDEgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfQVZFUk1FRElBX1VOSywJVVNCX1BJRF9BVkVSTUVESUFfRFZCVF9VU0JfV0FSTSl9LAorLyogMDAgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfV0lERVZJRVcsCQlVU0JfUElEX0FWRVJNRURJQV9EVkJUX1VTQl9DT0xEKX0sCisvKiAwMSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywJCVVTQl9QSURfQVZFUk1FRElBX0RWQlRfVVNCX1dBUk0pfSwKIC8qIDAyICovCXsgVVNCX0RFVklDRShVU0JfVklEX0NPTVBSTywJCVVTQl9QSURfQ09NUFJPX0RWQlUyMDAwX0NPTEQpIH0sCiAvKiAwMyAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9DT01QUk8sCQlVU0JfUElEX0NPTVBST19EVkJVMjAwMF9XQVJNKSB9LAogLyogMDQgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfQ09NUFJPX1VOSywJVVNCX1BJRF9DT01QUk9fRFZCVTIwMDBfVU5LX0NPTEQpIH0sCkBAIC0xMTQsNyArMTIwLDE3IEBACiAvKiAyMSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU4yMjM1X0NPTEQpIH0sCiAvKiAyMiAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU4yMjM1X1dBUk0pIH0sCiAvKiAyMyAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BRFNURUNILAkJVVNCX1BJRF9BRFNURUNIX1VTQjJfQ09MRCkgfSwKKworLyogZGV2aWNlIElEIHdpdGggZGVmYXVsdCBESUJVU0IyXzAtZmlybXdhcmUgYW5kIHdpdGggdGhlIGhhY2tlZCBmaXJtd2FyZSAqLwogLyogMjQgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfQURTVEVDSCwJCVVTQl9QSURfQURTVEVDSF9VU0IyX1dBUk0pIH0sCisvKiAyNSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9LWUUsCQkJVVNCX1BJRF9LWUVfRFZCX1RfQ09MRCkgfSwKKy8qIDI2ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0tZRSwJCQlVU0JfUElEX0tZRV9EVkJfVF9XQVJNKSB9LAorCisvLyAjZGVmaW5lIERWQl9VU0JfRElCVVNCX01CX0ZBVUxUWV9VU0JfSURzCisKKyNpZmRlZiBEVkJfVVNCX0RJQlVTQl9NQl9GQVVMVFlfVVNCX0lEcworLyogMjcgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfQU5DSE9SLAkJVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU5DSE9SX0NPTEQpIH0sCisjZW5kaWYKIAkJCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRpYnVzYl9kaWIzMDAwbWJfdGFibGUpOwpAQCAtMTM0LDcgKzE1MCw3IEBACiAJLnBpZF9maWx0ZXJfY3RybCAgPSBkaWJ1c2JfcGlkX2ZpbHRlcl9jdHJsLAogCS5wb3dlcl9jdHJsICAgICAgID0gZGlidXNiX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBkaWJ1c2JfZGliMzAwMG1iX2Zyb250ZW5kX2F0dGFjaCwKLQkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl9kaWIzMDAwbWJfdHVuZXJfYXR0YWNoLAorCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCiAKIAkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCiAJLnJjX2tleV9tYXAgICAgICAgPSBkaWJ1c2JfcmNfa2V5cywKQEAgLTE1Niw3ICsxNzIsNyBAQAogCQl9CiAJfSwKIAotCS5udW1fZGV2aWNlX2Rlc2NzID0gOCwKKwkubnVtX2RldmljZV9kZXNjcyA9IDksCiAJLmRldmljZXMgPSB7CiAJCXsJIkFWZXJNZWRpYSBBdmVyVFYgRFZCVCBVU0IxLjEiLAogCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVswXSwgIE5VTEwgfSwKQEAgLTE5MCwxMSArMjA2LDE3IEBACiAJCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzE5XSwgTlVMTCB9LAogCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVsyMF0sIE5VTEwgfSwKIAkJfSwKKwkJewkiVmlkZW9XYWxrZXIgRFZCLVQgVVNCIiwKKwkJCXsgJmRpYnVzYl9kaWIzMDAwbWJfdGFibGVbMjVdLCBOVUxMIH0sCisJCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzI2XSwgTlVMTCB9LAorCQl9LAogCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGRpYnVzYjFfMV9hbjIyMzVfcHJvcGVydGllcyA9IHsKIAkuY2FwcyA9IERWQl9VU0JfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYgfCBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS5waWRfZmlsdGVyX2NvdW50ID0gMTYsCisKIAkudXNiX2N0cmwgPSBDWVBSRVNTX0FOMjIzNSwKIAogCS5maXJtd2FyZSA9ICJkdmItdXNiLWRpYnVzYi1hbjIyMzUtMDEuZnciLApAQCAtMjA2LDcgKzIyOCw3IEBACiAJLnBpZF9maWx0ZXJfY3RybCAgPSBkaWJ1c2JfcGlkX2ZpbHRlcl9jdHJsLAogCS5wb3dlcl9jdHJsICAgICAgID0gZGlidXNiX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBkaWJ1c2JfZGliMzAwMG1iX2Zyb250ZW5kX2F0dGFjaCwKLQkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl9kaWIzMDAwbWJfdHVuZXJfYXR0YWNoLAorCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCiAKIAkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCiAJLnJjX2tleV9tYXAgICAgICAgPSBkaWJ1c2JfcmNfa2V5cywKQEAgLTIyOCwyMCArMjUwLDMyIEBACiAJCX0KIAl9LAogCisjaWZkZWYgRFZCX1VTQl9ESUJVU0JfTUJfRkFVTFRZX1VTQl9JRHMKKwkubnVtX2RldmljZV9kZXNjcyA9IDIsCisjZWxzZQogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKyNlbmRpZgogCS5kZXZpY2VzID0gewogCQl7CSJBcnRlYyBUMSBVU0IxLjEgVFZCT1ggd2l0aCBBTjIyMzUiLAogCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVsyMF0sIE5VTEwgfSwKIAkJCXsgJmRpYnVzYl9kaWIzMDAwbWJfdGFibGVbMjFdLCBOVUxMIH0sCiAJCX0sCisjaWZkZWYgRFZCX1VTQl9ESUJVU0JfTUJfRkFVTFRZX1VTQl9JRHMKKwkJewkiQXJ0ZWMgVDEgVVNCMS4xIFRWQk9YIHdpdGggQU4yMjM1IChmYXVsdHkgVVNCIElEcykiLAorCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVsyN10sIE5VTEwgfSwKKwkJCXsgTlVMTCB9LAorCQl9LAorI2VuZGlmCiAJfQogfTsKIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZGlidXNiMl8wYl9wcm9wZXJ0aWVzID0gewogCS5jYXBzID0gRFZCX1VTQl9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiB8IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisJLnBpZF9maWx0ZXJfY291bnQgPSAzMiwKKwogCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAogCi0JLmZpcm13YXJlID0gImR2Yi11c2ItYWRzdGVjaC11c2IyLTAxLmZ3IiwKKwkuZmlybXdhcmUgPSAiZHZiLXVzYi1hZHN0ZWNoLXVzYjItMDIuZnciLAogCiAJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGRpYnVzYl9zdGF0ZSksCiAKQEAgLTI1MCw3ICsyODQsNyBAQAogCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKIAkucG93ZXJfY3RybCAgICAgICA9IGRpYnVzYjJfMF9wb3dlcl9jdHJsLAogCS5mcm9udGVuZF9hdHRhY2ggID0gZGlidXNiX2RpYjMwMDBtYl9mcm9udGVuZF9hdHRhY2gsCi0JLnR1bmVyX2F0dGFjaCAgICAgPSBkaWJ1c2JfZGliMzAwMG1iX3R1bmVyX2F0dGFjaCwKKwkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl90aG9tc29uX3R1bmVyX2F0dGFjaCwKIAogCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKIAkucmNfa2V5X21hcCAgICAgICA9IGRpYnVzYl9yY19rZXlzLApAQCAtMjcyLDE4ICszMDYsMTggQEAKIAkJfQogCX0sCiAKLQkubnVtX2RldmljZV9kZXNjcyA9IDIsCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAogCS5kZXZpY2VzID0gewogCQl7CSJLV29ybGQvQURTVGVjaCBJbnN0YW50IERWQi1UIFVTQiAyLjAiLAogCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVsyM10sIE5VTEwgfSwKLQkJCXsgJmRpYnVzYl9kaWIzMDAwbWJfdGFibGVbMjRdLCBOVUxMIH0sIC8qIGRldmljZSBJRCB3aXRoIGRlZmF1bHQgRElCVVNCMl8wLWZpcm13YXJlICovCisJCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzI0XSwgTlVMTCB9LAogCQl9LAogCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkaWJ1c2JfZHJpdmVyID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiRGlCY29tIGJhc2VkIFVTQiBEVkItVCBkZXZpY2VzIChEaUIzMDAwTS1CIGJhc2VkKSIsCisJLm5hbWUJCT0gImR2Yl91c2JfZGlidXNiX21iIiwKIAkucHJvYmUJCT0gZGlidXNiX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gZHZiX3VzYl9kZXZpY2VfZXhpdCwKIAkuaWRfdGFibGUJPSBkaWJ1c2JfZGliMzAwMG1iX3RhYmxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMKaW5kZXggYWFkOGVkMy4uZTlkYWM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jCkBAIC04Myw3ICs4Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkaWJ1c2JfbWNfZHJpdmVyID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiRGlCY29tIGJhc2VkIFVTQjIuMCBEVkItVCAoRGlCMzAwME0tQy9QIGJhc2VkKSBkZXZpY2VzIiwKKwkubmFtZQkJPSAiZHZiX3VzYl9kaWJ1c2JfbWMiLAogCS5wcm9iZQkJPSBkaWJ1c2JfbWNfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LAogCS5pZF90YWJsZQk9IGRpYnVzYl9kaWIzMDAwbWNfdGFibGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYwppbmRleCA1YWNmM2ZkLi45YTY3NmFmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCkBAIC0xLDEwICsxLDkgQEAKIC8qIERWQiBVU0IgY29tcGxpYW50IGxpbnV4IGRyaXZlciBmb3IgTmVidWxhIEVsZWN0cm9uaWNzIHVEaWdpVFYgRFZCLVQgVVNCMi4wCiAgKiByZWNlaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSkgYW5kCi0gKiAgICAgICAgICAgICAgICAgICAgQWxsYW4gVGhpcmQgKGFsbGFuLnRoaXJkQGNzLm1hbi5hYy51aykKKyAqIENvcHlyaWdodCAoQykgMjAwNSBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSkKICAqCi0gKiBwYXJ0bHkgYmFzZWQgb24gdGhlIFNESyBwdWJsaXNoZWQgYnkgTmVidWxhIEVsZWN0cm9uaWNzIChUT0RPIGRvIHdlIHdhbnQgdGhpcyBsaW5lID8pCisgKiBwYXJ0bHkgYmFzZWQgb24gdGhlIFNESyBwdWJsaXNoZWQgYnkgTmVidWxhIEVsZWN0cm9uaWNzCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCkBAIC0zOCw3ICszNyw3IEBACiAJCWR2Yl91c2JfZ2VuZXJpY193cml0ZShkLHNuZGJ1Ziw3KTsKIAl9IGVsc2UgewogCQlkdmJfdXNiX2dlbmVyaWNfcncoZCxzbmRidWYsNyxyY3ZidWYsNywxMCk7Ci0JCW1lbWNweSgmcmJ1ZiwmcmN2YnVmWzNdLHJsZW4pOworCQltZW1jcHkocmJ1ZiwmcmN2YnVmWzNdLHJsZW4pOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTk1LDQxICs5NCwyMCBAQAogCiBzdGF0aWMgaW50IGRpZ2l0dl9tdDM1Ml9kZW1vZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0YXRpYyB1OCBtdDM1Ml9jbG9ja19jb25maWdbXSA9IHsgMHg4OSwgMHgzOCwgMHgyZCB9OwotCXN0YXRpYyB1OCBtdDM1Ml9yZXNldFtdID0geyAweDUwLCAweDgwIH07Ci0Jc3RhdGljIHU4IG10MzUyX21jbGtfcmF0aW9bXSA9IHsgMHg4YiwgMHgwMCB9OworCXN0YXRpYyB1OCByZXNldF9idWZbXSA9IHsgMHg4OSwgMHgzOCwgIDB4OGEsIDB4MmQsIDB4NTAsIDB4ODAgfTsKKwlzdGF0aWMgdTggaW5pdF9idWZbXSA9IHsgMHg2OCwgMHhhMCwgIDB4OGUsIDB4NDAsICAweDUzLCAweDUwLAorCQkJMHg2NywgMHgyMCwgIDB4N2QsIDB4MDEsICAweDdjLCAweDAwLCAgMHg3YSwgMHgwMCwKKwkJCTB4NzksIDB4MjAsICAweDU3LCAweDA1LCAgMHg1NiwgMHgzMSwgIDB4ODgsIDB4MGYsCisJCQkweDc1LCAweDMyIH07CisJaW50IGk7CiAKLQlzdGF0aWMgdTggbXQzNTJfYWdjX2NmZ1tdID0geyAweDY4LCAweGEwIH07Ci0Jc3RhdGljIHU4IG10MzUyX2FkY19jdGxfMV9jZmdbXSA9IHsgMHg4RSwgMHhhMCB9OwotCXN0YXRpYyB1OCBtdDM1Ml9hY3FfY3RsW10gPSB7IDB4NTMsIDB4NTAgfTsKLQlzdGF0aWMgdTggbXQzNTJfYWdjX3RhcmdldFtdID0geyAweDY3LCAweDIwIH07CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVzZXRfYnVmKTsgaSArPSAyKQorCQltdDM1Ml93cml0ZShmZSwgJnJlc2V0X2J1ZltpXSwgMik7CiAKLQlzdGF0aWMgdTggbXQzNTJfcnNfZXJyX3BlcltdID0geyAweDdjLCAweDAwLCAweDAxIH07Ci0Jc3RhdGljIHU4IG10MzUyX3Nucl9zZWxlY3RbXSA9IHsgMHg3OSwgMHgwMCwgMHgyMCB9OwotCi0Jc3RhdGljIHU4IG10MzUyX2lucHV0X2ZyZXFfMVtdID0geyAweDU2LCAweDMxLCAweDA1IH07Ci0KLQlzdGF0aWMgdTggbXQzNTJfc2Nhbl9jdGxbXSA9IHsgMHg4OCwgMHgwZiB9OwotCXN0YXRpYyB1OCBtdDM1Ml9jYXB0X3JhbmdlW10gPSB7IDB4NzUsIDB4MzIgfTsKLQotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9jbG9ja19jb25maWcsIHNpemVvZihtdDM1Ml9jbG9ja19jb25maWcpKTsKLQltdDM1Ml93cml0ZShmZSwgbXQzNTJfcmVzZXQsIHNpemVvZihtdDM1Ml9yZXNldCkpOwogCW1zbGVlcCgxKTsKLQltdDM1Ml93cml0ZShmZSwgbXQzNTJfbWNsa19yYXRpbywgc2l6ZW9mKG10MzUyX21jbGtfcmF0aW8pKTsKIAotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9hZ2NfY2ZnLCBzaXplb2YobXQzNTJfYWdjX2NmZykpOwotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9hZGNfY3RsXzFfY2ZnLCBzaXplb2YobXQzNTJfYWRjX2N0bF8xX2NmZykpOwotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9hY3FfY3RsLCBzaXplb2YobXQzNTJfYWNxX2N0bCkpOwotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9hZ2NfdGFyZ2V0LCBzaXplb2YobXQzNTJfYWdjX3RhcmdldCkpOwotCi0KLQltdDM1Ml93cml0ZShmZSwgbXQzNTJfcnNfZXJyX3Blciwgc2l6ZW9mKG10MzUyX3JzX2Vycl9wZXIpKTsKLQltdDM1Ml93cml0ZShmZSwgbXQzNTJfc25yX3NlbGVjdCwgc2l6ZW9mKG10MzUyX3Nucl9zZWxlY3QpKTsKLQotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9pbnB1dF9mcmVxXzEsIHNpemVvZihtdDM1Ml9pbnB1dF9mcmVxXzEpKTsKLQotCW10MzUyX3dyaXRlKGZlLCBtdDM1Ml9zY2FuX2N0bCwgc2l6ZW9mKG10MzUyX3NjYW5fY3RsKSk7Ci0JbXQzNTJfd3JpdGUoZmUsIG10MzUyX2NhcHRfcmFuZ2UsIHNpemVvZihtdDM1Ml9jYXB0X3JhbmdlKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF9idWYpOyBpICs9IDIpCisJCW10MzUyX3dyaXRlKGZlLCAmaW5pdF9idWZbaV0sIDIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzcsNyArMTE1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbXQzNTJfY29uZmlnIGRpZ2l0dl9tdDM1Ml9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDAsIC8qIGlnbm9yZWQgYnkgdGhlIGRpZ2l0diBhbnl3YXkgKi8KIAkuZGVtb2RfaW5pdCA9IGRpZ2l0dl9tdDM1Ml9kZW1vZF9pbml0LAotCS5wbGxfc2V0ID0gTlVMTCwgLyogVE9ETyAqLworCS5wbGxfc2V0ID0gZHZiX3VzYl9wbGxfc2V0LAogfTsKIAogc3RhdGljIHN0cnVjdCBueHQ2MDAwX2NvbmZpZyBkaWdpdHZfbnh0NjAwMF9jb25maWcgPSB7CkBAIC0xNTAsOSArMTI4LDkgQEAKIAogc3RhdGljIGludCBkaWdpdHZfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKLQlpZiAoKGQtPmZlID0gbXQzNTJfYXR0YWNoKCZkaWdpdHZfbXQzNTJfY29uZmlnLCAmZC0+aTJjX2FkYXApKSA9PSBOVUxMKQorCWlmICgoZC0+ZmUgPSBtdDM1Ml9hdHRhY2goJmRpZ2l0dl9tdDM1Ml9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpCiAJCXJldHVybiAwOwotCWlmICgoZC0+ZmUgPSBueHQ2MDAwX2F0dGFjaCgmZGlnaXR2X254dDYwMDBfY29uZmlnLCAmZC0+aTJjX2FkYXApKSA9PSBOVUxMKSB7CisJaWYgKChkLT5mZSA9IG54dDYwMDBfYXR0YWNoKCZkaWdpdHZfbnh0NjAwMF9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKIAogCQl3YXJuKCJueHQ2MDAwIHN1cHBvcnQgaXMgbm90IGRvbmUgeWV0LCBpbiBmYWN0IHlvdSBhcmUgb25lIG9mIHRoZSBmaXJzdCAiCiAJCQkJInBlcnNvbiB3aG8gd2FudHMgdG8gdXNlIHRoaXMgZGV2aWNlIGluIExpbnV4LiBQbGVhc2UgcmVwb3J0IHRvICIKQEAgLTE2Myw2ICsxNDEsMTMgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAorc3RhdGljIGludCBkaWdpdHZfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlkLT5wbGxfYWRkciA9IDB4NjA7CisJZC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90ZGVkNDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkaWdpdHZfcmNfa2V5c1tdID0gewogCXsgMHgwMCwgMHgxNiwgS0VZX1BPV0VSIH0sIC8qIGR1bW15IGtleSAqLwogfTsKQEAgLTE4NCw3ICsxNjksNiBAQAogCXJldHVybiAwOwogfQogCi0KIC8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWdpdHZfcHJvcGVydGllczsKIApAQCAtMjA4LDEzICsxOTIsOCBAQAogCiAJLnNpemVfb2ZfcHJpdiAgICAgPSAwLAogCi0JLnN0cmVhbWluZ19jdHJsICAgPSBOVUxMLAotCS5waWRfZmlsdGVyICAgICAgID0gTlVMTCwKLQkucGlkX2ZpbHRlcl9jdHJsICA9IE5VTEwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBOVUxMLAogCS5mcm9udGVuZF9hdHRhY2ggID0gZGlnaXR2X2Zyb250ZW5kX2F0dGFjaCwKLQkudHVuZXJfYXR0YWNoICAgICA9IE5VTEwsIC8vIGRpZ2l0dl90dW5lcl9hdHRhY2gsCi0JLnJlYWRfbWFjX2FkZHJlc3MgPSBOVUxMLAorCS50dW5lcl9hdHRhY2ggICAgID0gZGlnaXR2X3R1bmVyX2F0dGFjaCwKIAogCS5yY19pbnRlcnZhbCAgICAgID0gMTAwMCwKIAkucmNfa2V5X21hcCAgICAgICA9IGRpZ2l0dl9yY19rZXlzLApAQCAtMjM4LDcgKzIxNyw3IEBACiAJCX0KIAl9LAogCi0JLm51bV9kZXZpY2VfZGVzY3MgPSAyLAorCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKIAkJeyAgICJOZWJ1bGEgRWxlY3Ryb25pY3MgdURpZ2lUViBEVkItVCBVU0IyLjApIiwKIAkJCXsgJmRpZ2l0dl90YWJsZVswXSwgTlVMTCB9LApAQCAtMjQ5LDcgKzIyOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkaWdpdHZfZHJpdmVyID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiTmVidWxhIEVsZWN0cm9uaWNzIHVEaWdpVFYgRFZCLVQgVVNCMi4wIGRldmljZSIsCisJLm5hbWUJCT0gImR2Yl91c2JfZGlnaXR2IiwKIAkucHJvYmUJCT0gZGlnaXR2X3Byb2JlLAogCS5kaXNjb25uZWN0ID0gZHZiX3VzYl9kZXZpY2VfZXhpdCwKIAkuaWRfdGFibGUJPSBkaWdpdHZfdGFibGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUtZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS1mZS5jCmluZGV4IGQxN2Q3NjguLmIwMzI1MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS1mZS5jCkBAIC0xLDUgKzEsNSBAQAotLyogRnJvbnRlbmQgcGFydCBvZiB0aGUgTGludXggZHJpdmVyIGZvciB0aGUgWWFrdW1vL0hhbWEvVHlwaG9vbiBEVkItVAotICogVVNCMi4wIHJlY2VpdmVyLgorLyogRnJvbnRlbmQgcGFydCBvZiB0aGUgTGludXggZHJpdmVyIGZvciB0aGUgV2lkZVZpZXcvIFlha3Vtby8gSGFtYS8KKyAqIFR5cGhvb24vIFl1YW4gRFZCLVQgVVNCMi4wIHJlY2VpdmVyLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBQYXRyaWNrIEJvZXR0Y2hlciA8cGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZT4KICAqCkBAIC0xNCw2MSArMTQsNTggQEAKIHN0cnVjdCBkdHQyMDB1X2ZlX3N0YXRlIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQ7CiAKKwlmZV9zdGF0dXNfdCBzdGF0OworCiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIGZlcDsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwogfTsKIAotI2RlZmluZSBtb2FuKHdoaWNoLHdoYXQpIGluZm8oInVuZXhwZWN0ZWQgdmFsdWUgaW4gJyVzJyBmb3IgY21kICclMDJ4JyAtIHBsZWFzZSByZXBvcnQgdG8gbGludXgtZHZiQGxpbnV4dHYub3JnIix3aGljaCx3aGF0KQotCiBzdGF0aWMgaW50IGR0dDIwMHVfZmVfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190ICpzdGF0KQogewogCXN0cnVjdCBkdHQyMDB1X2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXU4IGJ3ID0gR0VUX1RVTkVfU1RBVDsKLQl1OCBiclszXSA9IHsgMCB9OwotLy8JdTggYmRlYls1XSA9IHsgMCB9OworCXU4IHN0ID0gR0VUX1RVTkVfU1RBVFVTLCBiWzNdOwogCi0JZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLCZidywxLGJyLDMsMCk7Ci0Jc3dpdGNoIChiclswXSkgeworCWR2Yl91c2JfZ2VuZXJpY19ydyhzdGF0ZS0+ZCwmc3QsMSxiLDMsMCk7CisKKwlzd2l0Y2ggKGJbMF0pIHsKIAkJY2FzZSAweDAxOgotCQkJKnN0YXQgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfVklURVJCSSB8IEZFX0hBU19TWU5DIHwgRkVfSEFTX0xPQ0s7CisJCQkqc3RhdCA9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUiB8CisJCQkJRkVfSEFTX1ZJVEVSQkkgfCBGRV9IQVNfU1lOQyB8IEZFX0hBU19MT0NLOwogCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMDoKLQkJCSpzdGF0ID0gMDsKKwkJY2FzZSAweDAwOiAvKiBwZW5kaW5nICovCisJCQkqc3RhdCA9IEZFX1RJTUVET1VUOyAvKiBkdXJpbmcgc2V0X2Zyb250ZW5kICovCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCW1vYW4oImJyWzBdIixHRVRfVFVORV9TVEFUKTsKKwkJY2FzZSAweDAyOiAvKiBmYWlsZWQgKi8KKwkJCSpzdGF0ID0gMDsKIAkJCWJyZWFrOwogCX0KLQotLy8JYndbMF0gPSAweDg4OwotLy8JZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLGJ3LDEsYmRlYiw1LDApOwotCi0vLwlkZWJfaW5mbygiJTAyeDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLGJ3WzBdLGJkZWJbMF0sYmRlYlsxXSxiZGViWzJdLGJkZWJbM10sYmRlYls0XSk7Ci0KIAlyZXR1cm4gMDsKIH0KKwogc3RhdGljIGludCBkdHQyMDB1X2ZlX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIgKmJlcikKIHsKIAlzdHJ1Y3QgZHR0MjAwdV9mZV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1OCBidyA9IEdFVF9CRVI7Ci0JKmJlciA9IDA7Ci0JZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLCZidywxLCh1OCopIGJlciwzLDApOworCXU4IGJ3ID0gR0VUX1ZJVF9FUlJfQ05ULGJbM107CisJZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLCZidywxLGIsMywwKTsKKwkqYmVyID0gKGJbMF0gPDwgMTYpIHwgKGJbMV0gPDwgOCkgfCBiWzJdOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGR0dDIwMHVfZmVfcmVhZF91bmNfYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIgKnVuYykKIHsKIAlzdHJ1Y3QgZHR0MjAwdV9mZV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1OCBidyA9IEdFVF9VTks7Ci0JKnVuYyA9IDA7Ci0JZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLCZidywxLCh1OCopIHVuYywzLDApOworCXU4IGJ3ID0gR0VUX1JTX1VOQ09SX0JMS19DTlQsYlsyXTsKKworCWR2Yl91c2JfZ2VuZXJpY19ydyhzdGF0ZS0+ZCwmYncsMSxiLDIsMCk7CisJKnVuYyA9IChiWzBdIDw8IDgpIHwgYlsxXTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkdHQyMDB1X2ZlX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYgKnN0cmVuZ3RoKQogewogCXN0cnVjdCBkdHQyMDB1X2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXU4IGJ3ID0gR0VUX1NJR19TVFJFTkdUSCwgYjsKKwl1OCBidyA9IEdFVF9BR0MsIGI7CiAJZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLCZidywxLCZiLDEsMCk7CiAJKnN0cmVuZ3RoID0gKGIgPDwgOCkgfCBiOwogCXJldHVybiAwOwpAQCAtODYsNyArODMsNyBAQAogc3RhdGljIGludCBkdHQyMDB1X2ZlX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCiB7CiAJc3RydWN0IGR0dDIwMHVfZmVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JdTggYiA9IFJFU0VUX0RFTU9EOworCXU4IGIgPSBTRVRfSU5JVDsKIAlyZXR1cm4gZHZiX3VzYl9nZW5lcmljX3dyaXRlKHN0YXRlLT5kLCZiLDEpOwogfQogCkBAIC05OCw4ICs5NSw4IEBACiBzdGF0aWMgaW50IGR0dDIwMHVfZmVfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqdHVuZSkKIHsKIAl0dW5lLT5taW5fZGVsYXlfbXMgPSAxNTAwOwotCXR1bmUtPnN0ZXBfc2l6ZSA9IDE2NjY2NzsKLQl0dW5lLT5tYXhfZHJpZnQgPSAxNjY2NjcgKiAyOworCXR1bmUtPnN0ZXBfc2l6ZSA9IDA7CisJdHVuZS0+bWF4X2RyaWZ0ID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA3LDI3ICsxMDQsMzIgQEAKIAkJCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQogewogCXN0cnVjdCBkdHQyMDB1X2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpOworCWZlX3N0YXR1c190IHN0OwogCXUxNiBmcmVxID0gZmVwLT5mcmVxdWVuY3kgLyAyNTAwMDA7Ci0JdTggYncsYndidWZbMl0gPSB7IFNFVF9CQU5EV0lEVEgsIDAgfSwgZnJlcWJ1ZlszXSA9IHsgU0VUX0ZSRVFVRU5DWSwgMCwgMCB9OworCXU4IGJ3YnVmWzJdID0geyBTRVRfQkFORFdJRFRILCAwIH0sZnJlcWJ1ZlszXSA9IHsgU0VUX1JGX0ZSRVEsIDAsIDAgfTsKIAogCXN3aXRjaCAoZmVwLT51Lm9mZG0uYmFuZHdpZHRoKSB7Ci0JCWNhc2UgQkFORFdJRFRIXzhfTUhaOiBidyA9IDg7IGJyZWFrOwotCQljYXNlIEJBTkRXSURUSF83X01IWjogYncgPSA3OyBicmVhazsKLQkJY2FzZSBCQU5EV0lEVEhfNl9NSFo6IGJ3ID0gNjsgYnJlYWs7CisJCWNhc2UgQkFORFdJRFRIXzhfTUhaOiBid2J1ZlsxXSA9IDg7IGJyZWFrOworCQljYXNlIEJBTkRXSURUSF83X01IWjogYndidWZbMV0gPSA3OyBicmVhazsKKwkJY2FzZSBCQU5EV0lEVEhfNl9NSFo6IGJ3YnVmWzFdID0gNjsgYnJlYWs7CiAJCWNhc2UgQkFORFdJRFRIX0FVVE86IHJldHVybiAtRU9QTk9UU1VQUDsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KLQlkZWJfaW5mbygic2V0X2Zyb250ZW5kXG4iKTsKIAotCWJ3YnVmWzFdID0gYnc7CiAJZHZiX3VzYl9nZW5lcmljX3dyaXRlKHN0YXRlLT5kLGJ3YnVmLDIpOwogCiAJZnJlcWJ1ZlsxXSA9IGZyZXEgJiAweGZmOwogCWZyZXFidWZbMl0gPSAoZnJlcSA+PiA4KSAmIDB4ZmY7CiAJZHZiX3VzYl9nZW5lcmljX3dyaXRlKHN0YXRlLT5kLGZyZXFidWYsMyk7CiAKLQltZW1jcHkoJnN0YXRlLT5mZXAsZmVwLHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzA7IGkrKykgeworCQltc2xlZXAoMjApOworCQlkdHQyMDB1X2ZlX3JlYWRfc3RhdHVzKGZlLCAmc3QpOworCQlpZiAoc3QgJiBGRV9USU1FRE9VVCkKKwkJCWNvbnRpbnVlOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTc0LDcgKzE3Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkdHQyMDB1X2ZlX29wcyA9IHsKIAkuaW5mbyA9IHsKLQkJLm5hbWUJCQk9ICJEVFQyMDBVIChZYWt1bW8vVHlwaG9vbi9IYW1hKSBEVkItVCIsCisJCS5uYW1lCQkJPSAiV2lkZVZpZXcgVVNCIERWQi1UIiwKIAkJLnR5cGUJCQk9IEZFX09GRE0sCiAJCS5mcmVxdWVuY3lfbWluCQk9IDQ0MjUwMDAwLAogCQkuZnJlcXVlbmN5X21heAkJPSA4NjcyNTAwMDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jCmluZGV4IGZiMmI1YTIuLjQ3ZGJhNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jCkBAIC0xLDggKzEsMTAgQEAKLS8qIERWQiBVU0IgbGlicmFyeSBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUgWWFrdW1vL0hhbWEvVHlwaG9vbiBEVkItVAotICogVVNCMi4wIHJlY2VpdmVyLgorLyogRFZCIFVTQiBsaWJyYXJ5IGNvbXBsaWFudCBMaW51eCBkcml2ZXIgZm9yIHRoZSBXaWRlVmlldy8gWWFrdW1vLyBIYW1hLworICogVHlwaG9vbi8gWXVhbiBEVkItVCBVU0IyLjAgcmVjZWl2ZXIuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTUgUGF0cmljayBCb2V0dGNoZXIgKHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUpCiAgKgorICogVGhhbmtzIHRvIFN0ZXZlIENoYW5nIGZyb20gV2lkZVZpZXcgZm9yIHByb3ZpZGluZyBzdXBwb3J0IGZvciB0aGUgV1QtMjIwVS4KKyAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKICAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KQEAgLTE2LDE0ICsxOCwyNCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGR2Yl91c2JfZHR0MjAwdV9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8seGZlcj0yIChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CiAKK3N0YXRpYyBpbnQgZHR0MjAwdV9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQoreworCXU4IGIgPSBTRVRfSU5JVDsKKworCWlmIChvbm9mZikKKwkJZHZiX3VzYl9nZW5lcmljX3dyaXRlKGQsJmIsMik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkdHQyMDB1X3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQogewotCXU4IGJfc3RyZWFtaW5nWzJdID0geyBTRVRfVFNfQ1RSTCwgb25vZmYgfTsKKwl1OCBiX3N0cmVhbWluZ1syXSA9IHsgU0VUX1NUUkVBTUlORywgb25vZmYgfTsKIAl1OCBiX3JzdF9waWQgPSBSRVNFVF9QSURfRklMVEVSOwogCiAJZHZiX3VzYl9nZW5lcmljX3dyaXRlKGQsYl9zdHJlYW1pbmcsMik7CiAKLQlpZiAoIW9ub2ZmKQorCWlmIChvbm9mZiA9PSAwKQogCQlkdmJfdXNiX2dlbmVyaWNfd3JpdGUoZCwmYl9yc3RfcGlkLDEpOwogCXJldHVybiAwOwogfQpAQCAtMzYsNyArNDgsNyBAQAogCWJfcGlkWzBdID0gU0VUX1BJRF9GSUxURVI7CiAJYl9waWRbMV0gPSBpbmRleDsKIAliX3BpZFsyXSA9IHBpZCAmIDB4ZmY7Ci0JYl9waWRbM10gPSAocGlkID4+IDgpICYgMHhmZjsKKwliX3BpZFszXSA9IChwaWQgPj4gOCkgJiAweDFmOwogCiAJcmV0dXJuIGR2Yl91c2JfZ2VuZXJpY193cml0ZShkLGJfcGlkLDQpOwogfQpAQCAtNTQsOSArNjYsOSBAQAogCXsgMHg4MCwgMHgwOCwgS0VZXzUgfSwKIAl7IDB4ODAsIDB4MDksIEtFWV82IH0sCiAJeyAweDgwLCAweDBhLCBLRVlfNyB9LAotCXsgMHgwMCwgMHgwYywgS0VZX1pPT00gfSwKKwl7IDB4ODAsIDB4MGMsIEtFWV9aT09NIH0sCiAJeyAweDgwLCAweDBkLCBLRVlfMCB9LAotCXsgMHgwMCwgMHgwZSwgS0VZX1NFTEVDVCB9LAorCXsgMHg4MCwgMHgwZSwgS0VZX1NFTEVDVCB9LAogCXsgMHg4MCwgMHgxMiwgS0VZX1BPV0VSIH0sCiAJeyAweDgwLCAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCiAJeyAweDgwLCAweDFiLCBLRVlfOCB9LApAQCAtNjYsNyArNzgsNyBAQAogCiBzdGF0aWMgaW50IGR0dDIwMHVfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQogewotCXU4IGtleVs1XSxjbWQgPSBHRVRfUkNfS0VZOworCXU4IGtleVs1XSxjbWQgPSBHRVRfUkNfQ09ERTsKIAlkdmJfdXNiX2dlbmVyaWNfcncoZCwmY21kLDEsa2V5LDUsMCk7CiAJZHZiX3VzYl9uZWNfcmNfa2V5X3RvX2V2ZW50KGQsa2V5LGV2ZW50LHN0YXRlKTsKIAlpZiAoa2V5WzBdICE9IDApCkBAIC04MSwzMiArOTMsNDEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZHR0MjAwdV9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgd3QyMjB1X3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgZHR0MjAwdV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZkdHQyMDB1X3Byb3BlcnRpZXMsVEhJU19NT0RVTEUpOworCWlmIChkdmJfdXNiX2RldmljZV9pbml0KGludGYsJmR0dDIwMHVfcHJvcGVydGllcyxUSElTX01PRFVMRSkgPT0gMCB8fAorCQlkdmJfdXNiX2RldmljZV9pbml0KGludGYsJnd0MjIwdV9wcm9wZXJ0aWVzLFRISVNfTU9EVUxFKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZHR0MjAwdV91c2JfdGFibGUgW10gPSB7Ci0JICAgIHsgVVNCX0RFVklDRShVU0JfVklEX0FWRVJNRURJQV9VTkssIFVTQl9QSURfRFRUMjAwVV9DT0xEKSB9LAotCSAgICB7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BVkVSTUVESUFfVU5LLCBVU0JfUElEX0RUVDIwMFVfV0FSTSkgfSwKKy8vCQl7IFVTQl9ERVZJQ0UoMHgwNGI0LDB4ODYxMykgfSwKKwkgICAgeyBVU0JfREVWSUNFKFVTQl9WSURfV0lERVZJRVcsIFVTQl9QSURfRFRUMjAwVV9DT0xEKSB9LAorCSAgICB7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywgVVNCX1BJRF9EVFQyMDBVX1dBUk0pIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLCBVU0JfUElEX1dUMjIwVV9DT0xEKSAgfSwKKwkJeyBVU0JfREVWSUNFKFVTQl9WSURfV0lERVZJRVcsIFVTQl9QSURfV1QyMjBVX1dBUk0pICB9LAogCSAgICB7IDAgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZHR0MjAwdV91c2JfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkdHQyMDB1X3Byb3BlcnRpZXMgPSB7CiAJLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9ORUVEX1BJRF9GSUxURVJJTkcsCi0JLnBpZF9maWx0ZXJfY291bnQgPSAyNTUsIC8qIEl0IGlzIGEgZ3Vlc3MsIGJ1dCB0aGVyZSBhcmUgYXQgbGVhc3QgMTAgKi8KKwkucGlkX2ZpbHRlcl9jb3VudCA9IDE1LAogCiAJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCiAJLmZpcm13YXJlID0gImR2Yi11c2ItZHR0MjAwdS0wMS5mdyIsCiAKKwkucG93ZXJfY3RybCAgICAgID0gZHR0MjAwdV9wb3dlcl9jdHJsLAogCS5zdHJlYW1pbmdfY3RybCAgPSBkdHQyMDB1X3N0cmVhbWluZ19jdHJsLAogCS5waWRfZmlsdGVyICAgICAgPSBkdHQyMDB1X3BpZF9maWx0ZXIsCiAJLmZyb250ZW5kX2F0dGFjaCA9IGR0dDIwMHVfZnJvbnRlbmRfYXR0YWNoLAogCi0JLnJjX2ludGVydmFsICAgICA9IDIwMCwKKwkucmNfaW50ZXJ2YWwgICAgID0gMzAwLAogCS5yY19rZXlfbWFwICAgICAgPSBkdHQyMDB1X3JjX2tleXMsCiAJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoZHR0MjAwdV9yY19rZXlzKSwKIAkucmNfcXVlcnkgICAgICAgID0gZHR0MjAwdV9yY19xdWVyeSwKQEAgLTEyNywxOCArMTQ4LDU5IEBACiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7Ci0JCXsgLm5hbWUgPSAiWWFrdW1vL0hhbWEvVHlwaG9vbiBEVkItVCBVU0IyLjApIiwKLQkJICAuY29sZF9pZHMgPSB7ICZkdHQyMDB1X3VzYl90YWJsZVswXSwgJmR0dDIwMHVfdXNiX3RhYmxlWzJdIH0sCisJCXsgLm5hbWUgPSAiV2lkZVZpZXcvWXVhbi9ZYWt1bW8vSGFtYS9UeXBob29uIERWQi1UIFVTQjIuMCAoV1QtMjAwVSkiLAorCQkgIC5jb2xkX2lkcyA9IHsgJmR0dDIwMHVfdXNiX3RhYmxlWzBdLCBOVUxMIH0sCiAJCSAgLndhcm1faWRzID0geyAmZHR0MjAwdV91c2JfdGFibGVbMV0sIE5VTEwgfSwKIAkJfSwKIAkJeyAwIH0sCiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgd3QyMjB1X3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9ORUVEX1BJRF9GSUxURVJJTkcsCisJLnBpZF9maWx0ZXJfY291bnQgPSAxNSwKKworCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAorCS5maXJtd2FyZSA9ICJkdmItdXNiLXd0MjIwdS0wMS5mdyIsCisKKwkucG93ZXJfY3RybCAgICAgID0gZHR0MjAwdV9wb3dlcl9jdHJsLAorCS5zdHJlYW1pbmdfY3RybCAgPSBkdHQyMDB1X3N0cmVhbWluZ19jdHJsLAorCS5waWRfZmlsdGVyICAgICAgPSBkdHQyMDB1X3BpZF9maWx0ZXIsCisJLmZyb250ZW5kX2F0dGFjaCA9IGR0dDIwMHVfZnJvbnRlbmRfYXR0YWNoLAorCisJLnJjX2ludGVydmFsICAgICA9IDMwMCwKKwkucmNfa2V5X21hcCAgICAgID0gZHR0MjAwdV9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGR0dDIwMHVfcmNfa2V5cyksCisJLnJjX3F1ZXJ5ICAgICAgICA9IGR0dDIwMHVfcmNfcXVlcnksCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAorCisJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCS51cmIgPSB7CisJCS50eXBlID0gRFZCX1VTQl9CVUxLLAorCQkuY291bnQgPSA3LAorCQkuZW5kcG9pbnQgPSAweDAyLAorCQkudSA9IHsKKwkJCS5idWxrID0geworCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCX0KKwkJfQorCX0sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsgLm5hbWUgPSAiV2lkZVZpZXcgV1QtMjIwVSBQZW5UeXBlIFJlY2VpdmVyIChhbmQgY2xvbmVzKSIsCisJCSAgLmNvbGRfaWRzID0geyAmZHR0MjAwdV91c2JfdGFibGVbMl0sIE5VTEwgfSwKKwkJICAud2FybV9pZHMgPSB7ICZkdHQyMDB1X3VzYl90YWJsZVszXSwgTlVMTCB9LAorCQl9LAorCQl7IDAgfSwKKwl9Cit9OworCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZHR0MjAwdV91c2JfZHJpdmVyID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiWWFrdW1vL0hhbWEvVHlwaG9vbiBEVkItVCBVU0IyLjAiLAorCS5uYW1lCQk9ICJkdmJfdXNiX2R0dDIwMHUiLAogCS5wcm9iZSAJCT0gZHR0MjAwdV91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LAogCS5pZF90YWJsZSAJPSBkdHQyMDB1X3VzYl90YWJsZSwKQEAgLTE2Niw2ICsyMjgsNiBAQAogbW9kdWxlX2V4aXQoZHR0MjAwdV91c2JfbW9kdWxlX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIEJvZXR0Y2hlciA8cGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgWWFrdW1vL0hhbWEvVHlwaG9vbiBEVkItVCBVU0IyLjAgZGV2aWNlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIFdpZGVWaWV3L1lha3Vtby9IYW1hL1R5cGhvb24gRFZCLVQgVVNCMi4wIGRldmljZXMiKTsKIE1PRFVMRV9WRVJTSU9OKCIxLjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmgKaW5kZXggZWQ0MTQyMC4uNmYxZjMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmgKQEAgLTEsNSArMSw1IEBACi0vKiBDb21tb24gaGVhZGVyIGZpbGUgb2YgTGludXggZHJpdmVyIGZvciB0aGUgWWFrdW1vL0hhbWEvVHlwaG9vbiBEVkItVAotICogVVNCMi4wIHJlY2VpdmVyLgorLyogQ29tbW9uIGhlYWRlciBmaWxlIG9mIExpbnV4IGRyaXZlciBmb3IgdGhlIFdpZGVWaWV3LyBZYWt1bW8vIEhhbWEvCisgKiBUeXBob29uLyBZdWFuIERWQi1UIFVTQjIuMCByZWNlaXZlci4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtNSBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSkKICAqCkBAIC0yMiw0NCArMjIsMzQgQEAKIC8qIGd1ZXNzZWQgcHJvdG9jb2wgZGVzY3JpcHRpb24gKHJldmVyc2UgZW5naW5lZXJlZCk6CiAgKiByZWFkCiAgKiAgMDAgLSBVU0IgdHlwZSAweDAyIGZvciB1c2IyLjAsIDB4MDEgZm9yIHVzYjEuMQotICogIDgxIC0gPFRTX0xPQ0s+IDxjdXJyZW50IGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDI1MDAwMD4KLSAqICA4MiAtIGNyYXNoIC0gZG8gbm90IHRvdWNoCi0gKiAgODMgLSBjcmFzaCAtIGRvIG5vdCB0b3VjaAotICogIDg0IC0gcmVtb3RlIGNvbnRyb2wKLSAqICA4NSAtIGNyYXNoIC0gZG8gbm90IHRvdWNoIChPSywgc3RvcCB0ZXN0aW5nIGhlcmUpCiAgKiAgODggLSBsb2NraW5nIDIgYnl0ZXMgKDB4ODAgMHg0MCA9PSBubyBzaWduYWwsIDB4ODkgMHgyMCA9PSBuaWNlIHNpZ25hbCkKLSAqICA4OSAtIG5vaXNlLXRvLXNpZ25hbAotICoJOGEgLSB1bmtvd24gMSBieXRlIC0gc2lnbmFsX3N0cmVuZ3RoCi0gKiAgOGMgLSBiZXIgPz8/Ci0gKiAgOGQgLSBiZXIKLSAqICA4ZSAtIHVuYwogICovCiAKLSNkZWZpbmUgR0VUX1NQRUVEICAgICAgICAweDAwCi0jZGVmaW5lIEdFVF9UVU5FX1NUQVQgICAgMHg4MQotI2RlZmluZSBHRVRfUkNfS0VZICAgICAgIDB4ODQKLSNkZWZpbmUgR0VUX1NUQVRVUyAgICAgICAweDg4Ci0jZGVmaW5lIEdFVF9TTlIgICAgICAgICAgMHg4OQotI2RlZmluZSBHRVRfU0lHX1NUUkVOR1RIIDB4OGEKLSNkZWZpbmUgR0VUX1VOSyAgICAgICAgICAweDhjCi0jZGVmaW5lIEdFVF9CRVIgICAgICAgICAgMHg4ZAotI2RlZmluZSBHRVRfVU5DICAgICAgICAgIDB4OGUKKyNkZWZpbmUgR0VUX1NQRUVEICAgICAgICAgICAgMHgwMAorI2RlZmluZSBHRVRfVFVORV9TVEFUVVMgICAgICAweDgxCisjZGVmaW5lIEdFVF9SQ19DT0RFICAgICAgICAgIDB4ODQKKyNkZWZpbmUgR0VUX0NPTkZJR1VSQVRJT04gICAgMHg4OAorI2RlZmluZSBHRVRfQUdDICAgICAgICAgICAgICAweDg5CisjZGVmaW5lIEdFVF9TTlIgICAgICAgICAgICAgIDB4OGEKKyNkZWZpbmUgR0VUX1ZJVF9FUlJfQ05UICAgICAgMHg4YworI2RlZmluZSBHRVRfUlNfRVJSX0NOVCAgICAgICAweDhkCisjZGVmaW5lIEdFVF9SU19VTkNPUl9CTEtfQ05UIDB4OGUKIAogLyogd3JpdGUKLSAqICAwMSAtIHJlc2V0IHRoZSBkZW1vZAorICogIDAxIC0gaW5pdAogICogIDAyIC0gZnJlcXVlbmN5IChkaXZpZGVkIGJ5IDI1MDAwMCkKICAqICAwMyAtIGJhbmR3aWR0aAogICogIDA0IC0gcGlkIHRhYmxlIChpbmRleCBwaWQoNzowKSBwaWQoMTI6OCkpCiAgKiAgMDUgLSByZXNldCB0aGUgcGlkIHRhYmxlCi0gKiAgMDggLSBkZW1vZCB0cmFuc2ZlciBlbmFibGVkIG9yIG5vdCAoRlgyIHRyYW5zZmVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCkKKyAqICAwOCAtIHRyYW5zZmVyIHN3aXRjaAogICovCiAKLSNkZWZpbmUgUkVTRVRfREVNT0QgICAgICAweDAxCi0jZGVmaW5lIFNFVF9GUkVRVUVOQ1kgICAgMHgwMgorI2RlZmluZSBTRVRfSU5JVCAgICAgICAgIDB4MDEKKyNkZWZpbmUgU0VUX1JGX0ZSRVEgICAgICAweDAyCiAjZGVmaW5lIFNFVF9CQU5EV0lEVEggICAgMHgwMwogI2RlZmluZSBTRVRfUElEX0ZJTFRFUiAgIDB4MDQKICNkZWZpbmUgUkVTRVRfUElEX0ZJTFRFUiAweDA1Ci0jZGVmaW5lIFNFVF9UU19DVFJMICAgICAgMHgwOAorI2RlZmluZSBTRVRfU1RSRUFNSU5HICAgIDB4MDgKIAogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBkdHQyMDB1X2ZlX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItY29tbW9uLmgKaW5kZXggNjdlMGQ3My4uNzMwMDQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1jb21tb24uaApAQCAtMTIsMTQgKzEyLDE2IEBACiAjaW5jbHVkZSAiZHZiLXVzYi5oIgogCiBleHRlcm4gaW50IGR2Yl91c2JfZGVidWc7CitleHRlcm4gaW50IGR2Yl91c2JfZGlzYWJsZV9yY19wb2xsaW5nOwogCiAjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDAxLGFyZ3MpCiAjZGVmaW5lIGRlYl94ZmVyKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDAyLGFyZ3MpCi0jZGVmaW5lIGRlYl9wbGwoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4MDQsYXJncykKKyNkZWZpbmUgZGViX3BsbChhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4MDQsYXJncykKICNkZWZpbmUgZGViX3RzKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4MDgsYXJncykKICNkZWZpbmUgZGViX2VycihhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4MTAsYXJncykKICNkZWZpbmUgZGViX3JjKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4MjAsYXJncykKICNkZWZpbmUgZGViX2Z3KGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4NDAsYXJncykKKyNkZWZpbmUgZGViX21lbShhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4ODAsYXJncykKIAogLyogY29tbW9ubHkgdXNlZCAgbWV0aG9kcyAqLwogZXh0ZXJuIGludCB1c2JfY3lwcmVzc19sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAppbmRleCBiY2IzNDE5Li43OTRkNTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC0xMiw3ICsxMiw3IEBACiAvKiBWZW5kb3IgSURzICovCiAjZGVmaW5lIFVTQl9WSURfQURTVEVDSAkJCQkJCTB4MDZlMQogI2RlZmluZSBVU0JfVklEX0FOQ0hPUgkJCQkJCTB4MDU0NwotI2RlZmluZSBVU0JfVklEX0FWRVJNRURJQV9VTksJCQkJMHgxNGFhCisjZGVmaW5lIFVTQl9WSURfV0lERVZJRVcJCQkJCTB4MTRhYQogI2RlZmluZSBVU0JfVklEX0FWRVJNRURJQQkJCQkJMHgwN2NhCiAjZGVmaW5lIFVTQl9WSURfQ09NUFJPCQkJCQkJMHgxODViCiAjZGVmaW5lIFVTQl9WSURfQ09NUFJPX1VOSwkJCQkJMHgxNDVmCkBAIC0yNCw2ICsyNCw4IEBACiAjZGVmaW5lIFVTQl9WSURfSEFORlRFSwkJCQkJCTB4MTVmNAogI2RlZmluZSBVU0JfVklEX0hBVVBQQVVHRQkJCQkJMHgyMDQwCiAjZGVmaW5lIFVTQl9WSURfSFlQRVJfUEFMVEVLCQkJCTB4MTAyNQorI2RlZmluZSBVU0JfVklEX0tZRQkJCQkJCQkweDA0NTgKKyNkZWZpbmUgVVNCX1ZJRF9NRURJT04JCQkJCQkweDE2NjAKICNkZWZpbmUgVVNCX1ZJRF9WSVNJT05QTFVTCQkJCQkweDEzZDMKICNkZWZpbmUgVVNCX1ZJRF9UV0lOSEFOCQkJCQkJMHgxODIyCiAjZGVmaW5lIFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMJCQkweDA1ZDgKQEAgLTcwLDYgKzcyLDggQEAKICNkZWZpbmUgVVNCX1BJRF9IQU5GVEVLX1VNVF8wMTBfV0FSTQkJMHgwMDE1CiAjZGVmaW5lIFVTQl9QSURfRFRUMjAwVV9DT0xECQkJCTB4MDIwMQogI2RlZmluZSBVU0JfUElEX0RUVDIwMFVfV0FSTQkJCQkweDAzMDEKKyNkZWZpbmUgVVNCX1BJRF9XVDIyMFVfQ09MRAkJCQkJMHgwMjIyCisjZGVmaW5lIFVTQl9QSURfV1QyMjBVX1dBUk0JCQkJCTB4MDIyMQogI2RlZmluZSBVU0JfUElEX1dJTlRWX05PVkFfVF9VU0IyX0NPTEQJCTB4OTMwMAogI2RlZmluZSBVU0JfUElEX1dJTlRWX05PVkFfVF9VU0IyX1dBUk0JCTB4OTMwMQogI2RlZmluZSBVU0JfUElEX05FQlVMQV9ESUdJVFYJCQkJMHgwMjAxCkBAIC03OCw2ICs4Miw4IEBACiAjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfTEdEVAkJCTB4ZDgyMAogI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHWjIwMV8xCQkweGRiMDEKICNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9USDc1NzlfMgkJMHhkYjExCi0KKyNkZWZpbmUgVVNCX1BJRF9NRURJT05fTUQ5NTcwMAkJCQkweDA5MzIKKyNkZWZpbmUgVVNCX1BJRF9LWUVfRFZCX1RfQ09MRAkJCQkweDcwMWUKKyNkZWZpbmUgVVNCX1BJRF9LWUVfRFZCX1RfV0FSTQkJCQkweDcwMWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYwppbmRleCAzYWFkZWM5Li5jM2IzYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKQEAgLTE4LDYgKzE4LDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsZHZiX3VzYl9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8seGZlcj0yLHBsbD00LHRzPTgsZXJyPTE2LHJjPTMyLGZ3PTY0IChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CiAKK2ludCBkdmJfdXNiX2Rpc2FibGVfcmNfcG9sbGluZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlX3JjX3BvbGxpbmcsIGR2Yl91c2JfZGlzYWJsZV9yY19wb2xsaW5nLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3JjX3BvbGxpbmcsICJkaXNhYmxlIHJlbW90ZSBjb250cm9sIHBvbGxpbmcgKGRlZmF1bHQ6IDApLiIpOworCiAvKiBnZW5lcmFsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqLwogaW50IGR2Yl91c2JfZXhpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKaW5kZXggOWYxZTIzZi4uZmM3ODAwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwpAQCAtMjEsNiArMjEsMTAgQEAKIAkvKiBUT0RPOiBuZWVkIGEgbG9jayBoZXJlLiAgV2UgY2FuIHNpbXBseSBza2lwIGNoZWNraW5nIGZvciB0aGUgcmVtb3RlIGNvbnRyb2wKIAkgICBpZiB3ZSdyZSBidXN5LiAqLwogCisJLyogd2hlbiB0aGUgcGFyYW1ldGVyIGhhcyBiZWVuIHNldCB0byAxIHZpYSBzeXNmcyB3aGlsZSB0aGUgZHJpdmVyIHdhcyBydW5uaW5nICovCisJaWYgKGR2Yl91c2JfZGlzYWJsZV9yY19wb2xsaW5nKQorCQlyZXR1cm47CisKIAlpZiAoZC0+cHJvcHMucmNfcXVlcnkoZCwmZXZlbnQsJnN0YXRlKSkgewogCQllcnIoImVycm9yIHdoaWxlIHF1ZXJ5aW5nIGZvciBhbiByZW1vdGUgY29udHJvbCBldmVudC4iKTsKIAkJZ290byBzY2hlZHVsZTsKQEAgLTM1LDcgKzM5LDcgQEAKIAkJCWQtPmxhc3RfZXZlbnQgPSBldmVudDsKIAkJY2FzZSBSRU1PVEVfS0VZX1JFUEVBVDoKIAkJCWRlYl9yYygia2V5IHJlcGVhdGVkXG4iKTsKLQkJCWlucHV0X2V2ZW50KCZkLT5yY19pbnB1dF9kZXYsIEVWX0tFWSwgZXZlbnQsIDEpOworCQkJaW5wdXRfZXZlbnQoJmQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBkLT5sYXN0X2V2ZW50LCAxKTsKIAkJCWlucHV0X2V2ZW50KCZkLT5yY19pbnB1dF9kZXYsIEVWX0tFWSwgZC0+bGFzdF9ldmVudCwgMCk7CiAJCQlpbnB1dF9zeW5jKCZkLT5yY19pbnB1dF9kZXYpOwogCQkJYnJlYWs7CkBAIC04NSw3ICs4OSw5IEBACiBpbnQgZHZiX3VzYl9yZW1vdGVfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJaW50IGk7Ci0JaWYgKGQtPnByb3BzLnJjX2tleV9tYXAgPT0gTlVMTCkKKwlpZiAoZC0+cHJvcHMucmNfa2V5X21hcCA9PSBOVUxMIHx8CisJCWQtPnByb3BzLnJjX3F1ZXJ5ID09IE5VTEwgfHwKKwkJZHZiX3VzYl9kaXNhYmxlX3JjX3BvbGxpbmcpCiAJCXJldHVybiAwOwogCiAJLyogSW5pdGlhbGlzZSB0aGUgcmVtb3RlLWNvbnRyb2wgc3RydWN0dXJlcy4qLwpAQCAtMTU0LDEyICsxNjAsMTIgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJCS8qIFNlZSBpZiB3ZSBjYW4gbWF0Y2ggdGhlIHJhdyBrZXkgY29kZS4gKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoa2V5bWFwKS9zaXplb2Yoc3RydWN0IGR2Yl91c2JfcmNfa2V5KTsgaSsrKQorCQkJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKQogCQkJCWlmIChrZXltYXBbaV0uY3VzdG9tID09IGtleWJ1ZlsxXSAmJgogCQkJCQlrZXltYXBbaV0uZGF0YSA9PSBrZXlidWZbM10pIHsKIAkJCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwogCQkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQkJCWJyZWFrOworCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQlkZWJfZXJyKCJrZXkgbWFwcGluZyBmYWlsZWQgLSBubyBhcHByb3ByaWF0ZSBrZXkgZm91bmQgaW4ga2V5bWFwcGluZ1xuIik7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi11cmIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi11cmIuYwppbmRleCA4M2Q0NzZmLi5mNTc5OWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItdXJiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXVyYi5jCkBAIC0yNCwxMSArMjQsMTIgQEAKIAlpZiAoKHJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmZC0+dXNiX3NlbSkpKQogCQlyZXR1cm4gcmV0OwogCisJZGViX3hmZXIoIj4+PiAiKTsKIAlkZWJ1Z19kdW1wKHdidWYsd2xlbixkZWJfeGZlcik7CiAKIAlyZXQgPSB1c2JfYnVsa19tc2coZC0+dWRldix1c2Jfc25kYnVsa3BpcGUoZC0+dWRldiwKIAkJCWQtPnByb3BzLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50KSwgd2J1Zix3bGVuLCZhY3RsZW4sCi0JCQkyKkhaKTsKKwkJCTIwMDApOwogCiAJaWYgKHJldCkKIAkJZXJyKCJidWxrIG1lc3NhZ2UgZmFpbGVkOiAlZCAoJWQvJWQpIixyZXQsd2xlbixhY3RsZW4pOwpAQCAtNDIsMTIgKzQzLDE0IEBACiAKIAkJcmV0ID0gdXNiX2J1bGtfbXNnKGQtPnVkZXYsdXNiX3JjdmJ1bGtwaXBlKGQtPnVkZXYsCiAJCQkJZC0+cHJvcHMuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQpLHJidWYscmxlbiwmYWN0bGVuLAotCQkJCTIqSFopOworCQkJCTIwMDApOwogCiAJCWlmIChyZXQpCiAJCQllcnIoInJlY3YgYnVsayBtZXNzYWdlIGZhaWxlZDogJWQiLHJldCk7Ci0JCWVsc2UKKwkJZWxzZSB7CisJCQlkZWJfeGZlcigiPDw8ICIpOwogCQkJZGVidWdfZHVtcChyYnVmLGFjdGxlbixkZWJfeGZlcik7CisJCX0KIAl9CiAKIAl1cCgmZC0+dXNiX3NlbSk7CkBAIC02MSwxMiArNjQsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHZiX3VzYl9nZW5lcmljX3dyaXRlKTsKIAotc3RhdGljIHZvaWQgZHZiX3VzYl9idWxrX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpwdHJlZ3MpCisKKy8qIFVSQiBzdHVmZiBmb3Igc3RyZWFtaW5nICovCitzdGF0aWMgdm9pZCBkdmJfdXNiX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpwdHJlZ3MpCiB7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gdXJiLT5jb250ZXh0OworCWludCBwdHlwZSA9IHVzYl9waXBldHlwZSh1cmItPnBpcGUpOworCWludCBpOworCXU4ICpiOwogCi0JZGViX3RzKCJidWxrIHVyYiBjb21wbGV0ZWQuIGZlZWRjb3VudDogJWQsIHN0YXR1czogJWQsIGxlbmd0aDogJWRcbiIsZC0+ZmVlZGNvdW50LHVyYi0+c3RhdHVzLAotCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlkZWJfdHMoIiclcycgdXJiIGNvbXBsZXRlZC4gZmVlZGNvdW50OiAlZCwgc3RhdHVzOiAlZCwgbGVuZ3RoOiAlZC8lZCwgcGFja19udW06ICVkLCBlcnJvcnM6ICVkXG4iLAorCQkJcHR5cGUgPT0gUElQRV9JU09DSFJPTk9VUyA/ICJpc29jIiA6ICJidWxrIiwgZC0+ZmVlZGNvdW50LAorCQkJdXJiLT5zdGF0dXMsdXJiLT5hY3R1YWxfbGVuZ3RoLHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMsdXJiLT5lcnJvcl9jb3VudCk7CiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJCWNhc2UgMDogICAgICAgICAvKiBzdWNjZXNzICovCkBAIC04MSwxMSArOTEsMzMgQEAKIAkJCWJyZWFrOwogCX0KIAotCWlmIChkLT5mZWVkY291bnQgPiAwICYmIHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApIHsKLQkJaWYgKGQtPnN0YXRlICYgRFZCX1VTQl9TVEFURV9EVkIpCi0JCQlkdmJfZG14X3N3ZmlsdGVyKCZkLT5kZW11eCwgKHU4KikgdXJiLT50cmFuc2Zlcl9idWZmZXIsdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQl9IGVsc2UKLQkJZGViX3RzKCJVUkIgZHJvcHBlZCBiZWNhdXNlIG9mIGZlZWRjb3VudC5cbiIpOworCWlmIChkLT5mZWVkY291bnQgPiAwKSB7CisJCWlmIChkLT5zdGF0ZSAmIERWQl9VU0JfU1RBVEVfRFZCKSB7CisJCQlzd2l0Y2ggKHB0eXBlKSB7CisJCQkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQkJCQliID0gKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQkJCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCQkJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgIT0gMCkKKwkJCQkJCQlkZWJfdHMoImlzbyBmcmFtZSBkZXNjcmlwdG9yIGhhcyBhbiBlcnJvcjogJWRcbiIsdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOworCQkJCQkJZWxzZSBpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID4gMCkgeworCQkJCQkJCQlkdmJfZG14X3N3ZmlsdGVyKCZkLT5kZW11eCxiICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQsCisJCQkJCQkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKKwkJCQkJCQl9CisJCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7CisJCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPSAwOworCQkJCQl9CisJCQkJCWRlYnVnX2R1bXAoYiwyMCxkZWJfdHMpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBJUEVfQlVMSzoKKwkJCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApCisJCQkJCQlkdmJfZG14X3N3ZmlsdGVyKCZkLT5kZW11eCwgKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyLHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWVycigidW5rb3duIGVuZHBvaW50IHR5cGUgaW4gY29tcGxldGl0aW9uIGhhbmRsZXIuIik7CisJCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KIAogCXVzYl9zdWJtaXRfdXJiKHVyYixHRlBfQVRPTUlDKTsKIH0KQEAgLTk0LDcgKzEyNiw3IEBACiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IGQtPnVyYnNfc3VibWl0dGVkOyBpKyspIHsKLQkJZGViX2luZm8oImtpbGxpbmcgVVJCIG5vLiAlZC5cbiIsaSk7CisJCWRlYl90cygia2lsbGluZyBVUkIgbm8uICVkLlxuIixpKTsKIAogCQkvKiBzdG9wIHRoZSBVUkIgKi8KIAkJdXNiX2tpbGxfdXJiKGQtPnVyYl9saXN0W2ldKTsKQEAgLTEwNyw5ICsxMzksOSBAQAogewogCWludCBpLHJldDsKIAlmb3IgKGkgPSAwOyBpIDwgZC0+dXJic19pbml0aWFsaXplZDsgaSsrKSB7Ci0JCWRlYl9pbmZvKCJzdWJtaXR0aW5nIFVSQiBuby4gJWRcbiIsaSk7CisJCWRlYl90cygic3VibWl0dGluZyBVUkIgbm8uICVkXG4iLGkpOwogCQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKGQtPnVyYl9saXN0W2ldLEdGUF9BVE9NSUMpKSkgewotCQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IFVSQiBuby4gJWQgLSBnZXQgdGhlbSBhbGwgYmFja1xuIixpKTsKKwkJCWVycigiY291bGQgbm90IHN1Ym1pdCBVUkIgbm8uICVkIC0gZ2V0IHRoZW0gYWxsIGJhY2siLGkpOwogCQkJZHZiX3VzYl91cmJfa2lsbChkKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTExOCwzMiArMTUwLDc4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHZiX3VzYl9idWxrX3VyYl9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3N0YXRpYyBpbnQgZHZiX3VzYl9mcmVlX3N0cmVhbV9idWZmZXJzKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKLQlpbnQgaSxidWZzaXplID0gZC0+cHJvcHMudXJiLmNvdW50ICogZC0+cHJvcHMudXJiLnUuYnVsay5idWZmZXJzaXplOworCWlmIChkLT5zdGF0ZSAmIERWQl9VU0JfU1RBVEVfVVJCX0JVRikgeworCQl3aGlsZSAoZC0+YnVmX251bSkgeworCQkJZC0+YnVmX251bS0tOworCQkJZGViX21lbSgiZnJlZWluZyBidWZmZXIgJWRcbiIsZC0+YnVmX251bSk7CisJCQl1c2JfYnVmZmVyX2ZyZWUoZC0+dWRldiwgZC0+YnVmX3NpemUsCisJCQkJCWQtPmJ1Zl9saXN0W2QtPmJ1Zl9udW1dLCBkLT5kbWFfYWRkcltkLT5idWZfbnVtXSk7CisJCX0KKwkJa2ZyZWUoZC0+YnVmX2xpc3QpOworCQlrZnJlZShkLT5kbWFfYWRkcik7CisJfQogCi0JZGViX2luZm8oImFsbG9jYXRlICVkIGJ5dGVzIGFzIGJ1ZmZlcnNpemUgZm9yIGFsbCBVUkJzXG4iLGJ1ZnNpemUpOwotCS8qIGFsbG9jYXRlIHRoZSBhY3R1YWwgYnVmZmVyIGZvciB0aGUgVVJCcyAqLwotCWlmICgoZC0+YnVmZmVyID0gIHVzYl9idWZmZXJfYWxsb2MoZC0+dWRldiwgYnVmc2l6ZSwgU0xBQl9BVE9NSUMsICZkLT5kbWFfaGFuZGxlKSkgPT0gTlVMTCkgewotCQlkZWJfaW5mbygibm90IGVub3VnaCBtZW1vcnkgZm9yIHVyYi1idWZmZXIgYWxsb2NhdGlvbi5cbiIpOworCWQtPnN0YXRlICY9IH5EVkJfVVNCX1NUQVRFX1VSQl9CVUY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdmJfdXNiX2FsbG9jYXRlX3N0cmVhbV9idWZmZXJzKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG51bSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWQtPmJ1Zl9udW0gPSAwOworCWQtPmJ1Zl9zaXplID0gc2l6ZTsKKworCWRlYl9tZW0oImFsbCBpbiBhbGwgSSB3aWxsIHVzZSAlbHUgYnl0ZXMgZm9yIHN0cmVhbWluZ1xuIixudW0qc2l6ZSk7CisKKwlpZiAoKGQtPmJ1Zl9saXN0ID0ga21hbGxvYyhudW0qc2l6ZW9mKHU4ICopLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoKGQtPmRtYV9hZGRyID0ga21hbGxvYyhudW0qc2l6ZW9mKGRtYV9hZGRyX3QpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgeworCQlrZnJlZShkLT5idWZfbGlzdCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlkZWJfaW5mbygiYWxsb2NhdGlvbiBzdWNjZXNzZnVsXG4iKTsKLQltZW1zZXQoZC0+YnVmZmVyLDAsYnVmc2l6ZSk7CisJbWVtc2V0KGQtPmJ1Zl9saXN0LDAsbnVtKnNpemVvZih1OCAqKSk7CisJbWVtc2V0KGQtPmRtYV9hZGRyLDAsbnVtKnNpemVvZihkbWFfYWRkcl90KSk7CiAKIAlkLT5zdGF0ZSB8PSBEVkJfVVNCX1NUQVRFX1VSQl9CVUY7CiAKLQkvKiBhbGxvY2F0ZSB0aGUgVVJCcyAqLwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy51cmIuY291bnQ7IGkrKykgewotCQlpZiAoIShkLT51cmJfbGlzdFtpXSA9IHVzYl9hbGxvY191cmIoMCxHRlBfQVRPTUlDKSkpIHsKKwlmb3IgKGQtPmJ1Zl9udW0gPSAwOyBkLT5idWZfbnVtIDwgbnVtOyBkLT5idWZfbnVtKyspIHsKKwkJZGViX21lbSgiYWxsb2NhdGluZyBidWZmZXIgJWRcbiIsZC0+YnVmX251bSk7CisJCWlmICgoIGQtPmJ1Zl9saXN0W2QtPmJ1Zl9udW1dID0KKwkJCQkJdXNiX2J1ZmZlcl9hbGxvYyhkLT51ZGV2LCBzaXplLCBTTEFCX0FUT01JQywKKwkJCQkJJmQtPmRtYV9hZGRyW2QtPmJ1Zl9udW1dKSApID09IE5VTEwpIHsKKwkJCWRlYl9tZW0oIm5vdCBlbm91Z2ggbWVtb3J5IGZvciB1cmItYnVmZmVyIGFsbG9jYXRpb24uXG4iKTsKKwkJCWR2Yl91c2JfZnJlZV9zdHJlYW1fYnVmZmVycyhkKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CisJCWRlYl9tZW0oImJ1ZmZlciAlZDogJXAgKGRtYTogJWQpXG4iLGQtPmJ1Zl9udW0sZC0+YnVmX2xpc3RbZC0+YnVmX251bV0sZC0+ZG1hX2FkZHJbZC0+YnVmX251bV0pOworCQltZW1zZXQoZC0+YnVmX2xpc3RbZC0+YnVmX251bV0sMCxzaXplKTsKKwl9CisJZGViX21lbSgiYWxsb2NhdGlvbiBzdWNjZXNzZnVsXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR2Yl91c2JfYnVsa191cmJfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJaW50IGk7CisKKwlpZiAoKGkgPSBkdmJfdXNiX2FsbG9jYXRlX3N0cmVhbV9idWZmZXJzKGQsZC0+cHJvcHMudXJiLmNvdW50LAorCQkJCQlkLT5wcm9wcy51cmIudS5idWxrLmJ1ZmZlcnNpemUpKSA8IDApCisJCXJldHVybiBpOworCisJLyogYWxsb2NhdGUgdGhlIFVSQnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMudXJiLmNvdW50OyBpKyspIHsKKwkJaWYgKChkLT51cmJfbGlzdFtpXSA9IHVzYl9hbGxvY191cmIoMCxHRlBfQVRPTUlDKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOwogCiAJCXVzYl9maWxsX2J1bGtfdXJiKCBkLT51cmJfbGlzdFtpXSwgZC0+dWRldiwKIAkJCQl1c2JfcmN2YnVsa3BpcGUoZC0+dWRldixkLT5wcm9wcy51cmIuZW5kcG9pbnQpLAotCQkJCSZkLT5idWZmZXJbaSpkLT5wcm9wcy51cmIudS5idWxrLmJ1ZmZlcnNpemVdLAorCQkJCWQtPmJ1Zl9saXN0W2ldLAogCQkJCWQtPnByb3BzLnVyYi51LmJ1bGsuYnVmZmVyc2l6ZSwKLQkJCQlkdmJfdXNiX2J1bGtfdXJiX2NvbXBsZXRlLCBkKTsKKwkJCQlkdmJfdXNiX3VyYl9jb21wbGV0ZSwgZCk7CiAKIAkJZC0+dXJiX2xpc3RbaV0tPnRyYW5zZmVyX2ZsYWdzID0gMDsKIAkJZC0+dXJic19pbml0aWFsaXplZCsrOwpAQCAtMTUxLDYgKzIyOSw0NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGR2Yl91c2JfaXNvY191cmJfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJaW50IGksajsKKworCWlmICgoaSA9IGR2Yl91c2JfYWxsb2NhdGVfc3RyZWFtX2J1ZmZlcnMoZCxkLT5wcm9wcy51cmIuY291bnQsCisJCQkJCWQtPnByb3BzLnVyYi51Lmlzb2MuZnJhbWVzaXplKmQtPnByb3BzLnVyYi51Lmlzb2MuZnJhbWVzcGVydXJiKSkgPCAwKQorCQlyZXR1cm4gaTsKKworCS8qIGFsbG9jYXRlIHRoZSBVUkJzICovCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnVyYi5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKwkJaW50IGZyYW1lX29mZnNldCA9IDA7CisJCWlmICgoZC0+dXJiX2xpc3RbaV0gPQorCQkJCQl1c2JfYWxsb2NfdXJiKGQtPnByb3BzLnVyYi51Lmlzb2MuZnJhbWVzcGVydXJiLEdGUF9BVE9NSUMpKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdXJiID0gZC0+dXJiX2xpc3RbaV07CisKKwkJdXJiLT5kZXYgPSBkLT51ZGV2OworCQl1cmItPmNvbnRleHQgPSBkOworCQl1cmItPmNvbXBsZXRlID0gZHZiX3VzYl91cmJfY29tcGxldGU7CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkLT51ZGV2LGQtPnByb3BzLnVyYi5lbmRwb2ludCk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJdXJiLT5pbnRlcnZhbCA9IGQtPnByb3BzLnVyYi51Lmlzb2MuaW50ZXJ2YWw7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBkLT5wcm9wcy51cmIudS5pc29jLmZyYW1lc3BlcnVyYjsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gZC0+YnVmX3NpemU7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gZC0+YnVmX2xpc3RbaV07CisJCXVyYi0+dHJhbnNmZXJfZG1hID0gZC0+ZG1hX2FkZHJbaV07CisKKwkJZm9yIChqID0gMDsgaiA8IGQtPnByb3BzLnVyYi51Lmlzb2MuZnJhbWVzcGVydXJiOyBqKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gZnJhbWVfb2Zmc2V0OworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBkLT5wcm9wcy51cmIudS5pc29jLmZyYW1lc2l6ZTsKKwkJCWZyYW1lX29mZnNldCArPSBkLT5wcm9wcy51cmIudS5pc29jLmZyYW1lc2l6ZTsKKwkJfQorCisJCWQtPnVyYnNfaW5pdGlhbGl6ZWQrKzsKKwl9CisJcmV0dXJuIDA7CisKK30KKwogaW50IGR2Yl91c2JfdXJiX2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQogewogCS8qCkBAIC0xNzQsOCArMjkzLDcgQEAKIAkJY2FzZSBEVkJfVVNCX0JVTEs6CiAJCQlyZXR1cm4gZHZiX3VzYl9idWxrX3VyYl9pbml0KGQpOwogCQljYXNlIERWQl9VU0JfSVNPQzoKLQkJCWVycigiaXNvY2hyb25vdXMgdHJhbnNmZXIgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBkdmItdXNiLiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gZHZiX3VzYl9pc29jX3VyYl9pbml0KGQpOwogCQlkZWZhdWx0OgogCQkJZXJyKCJ1bmtvd24gVVJCLXR5cGUgZm9yIGRhdGEgdHJhbnNmZXIuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE5MSw3ICszMDksNyBAQAogCWlmIChkLT5zdGF0ZSAmIERWQl9VU0JfU1RBVEVfVVJCX0xJU1QpIHsKIAkJZm9yIChpID0gMDsgaSA8IGQtPnVyYnNfaW5pdGlhbGl6ZWQ7IGkrKykgewogCQkJaWYgKGQtPnVyYl9saXN0W2ldICE9IE5VTEwpIHsKLQkJCQlkZWJfaW5mbygiZnJlZWluZyBVUkIgbm8uICVkLlxuIixpKTsKKwkJCQlkZWJfbWVtKCJmcmVlaW5nIFVSQiBuby4gJWQuXG4iLGkpOwogCQkJCS8qIGZyZWUgdGhlIFVSQnMgKi8KIAkJCQl1c2JfZnJlZV91cmIoZC0+dXJiX2xpc3RbaV0pOwogCQkJfQpAQCAtMjAyLDEwICszMjAsNiBAQAogCQlkLT5zdGF0ZSAmPSB+RFZCX1VTQl9TVEFURV9VUkJfTElTVDsKIAl9CiAKLQlpZiAoZC0+c3RhdGUgJiBEVkJfVVNCX1NUQVRFX1VSQl9CVUYpCi0JCXVzYl9idWZmZXJfZnJlZShkLT51ZGV2LCBkLT5wcm9wcy51cmIudS5idWxrLmJ1ZmZlcnNpemUgKiBkLT5wcm9wcy51cmIuY291bnQsCi0JCQkJZC0+YnVmZmVyLCBkLT5kbWFfaGFuZGxlKTsKLQotCWQtPnN0YXRlICY9IH5EVkJfVVNCX1NUQVRFX1VSQl9CVUY7CisJZHZiX3VzYl9mcmVlX3N0cmVhbV9idWZmZXJzKGQpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaAppbmRleCBhYmNlZTE5Li5hODA1NjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaApAQCAtMTg5LDEyICsxODksMTMgQEAKIAkJCXN0cnVjdCB7CiAJCQkJaW50IGZyYW1lc3BlcnVyYjsKIAkJCQlpbnQgZnJhbWVzaXplOworCQkJCWludCBpbnRlcnZhbDsKIAkJCX0gaXNvYzsKIAkJfSB1OwogCX0gdXJiOwogCiAJaW50IG51bV9kZXZpY2VfZGVzY3M7Ci0Jc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uIGRldmljZXNbOF07CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uIGRldmljZXNbOV07CiB9OwogCiAKQEAgLTIwNywxOSArMjA4LDI4IEBACiAgKiBAdWRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlJ3Mgc3RydWN0IHVzYl9kZXZpY2UuCiAgKiBAdXJiX2xpc3Q6IGFycmF5IG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJ1Y3QgdXJiIGZvciB0aGUgTVBFRzItVFMtCiAgKiAgc3RyZWFtaW5nLgotICogQGJ1ZmZlcjogYnVmZmVyIHVzZWQgdG8gc3RyZWFtaW5nLgotICogQGRtYV9oYW5kbGU6IGRtYV9hZGRyX3QgZm9yIGJ1ZmZlci4KKyAqCisgKiBAYnVmX251bTogbnVtYmVyIG9mIGJ1ZmZlciBhbGxvY2F0ZWQuCisgKiBAYnVmX3NpemU6IHNpemUgb2YgZWFjaCBidWZmZXIgaW4gYnVmX2xpc3QuCisgKiBAYnVmX2xpc3Q6IGFycmF5IGNvbnRhaW5pbmcgYWxsIGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIHN0cmVhbWluZy4KKyAqIEBkbWFfYWRkcjogbGlzdCBvZiBkbWFfYWRkcl90IGZvciBlYWNoIGJ1ZmZlciBpbiBidWZfbGlzdC4KKyAqCiAgKiBAdXJic19pbml0aWFsaXplZDogbnVtYmVyIG9mIFVSQnMgaW5pdGlhbGl6ZWQuCiAgKiBAdXJic19zdWJtaXR0ZWQ6IG51bWJlciBvZiBVUkJzIHN1Ym1pdHRlZC4KKyAqCiAgKiBAZmVlZGNvdW50OiBudW1iZXIgb2YgcmVxZXN0ZWQgZmVlZHMgKHVzZWQgZm9yIHN0cmVhbWluZy1hY3RpdmF0aW9uKQogICogQHBpZF9maWx0ZXJpbmc6IGlzIGhhcmR3YXJlIHBpZF9maWx0ZXJpbmcgdXNlZCBvciBub3QuCisgKgogICogQHVzYl9zZW06IHNlbWFwaG9yZSBvZiBVU0IgY29udHJvbCBtZXNzYWdlcyAocmVhZGluZyBuZWVkcyB0d28gbWVzc2FnZXMpCiAgKiBAaTJjX3NlbTogc2VtYXBob3JlIGZvciBpMmMtdHJhbnNmZXJzCisgKgogICogQGkyY19hZGFwOiBkZXZpY2UncyBpMmNfYWRhcHRlciBpZiBpdCB1c2VzIEkyQ292ZXJVU0IKICAqIEBwbGxfYWRkcjogSTJDIGFkZHJlc3Mgb2YgdGhlIHR1bmVyIGZvciBwcm9ncmFtbWluZwogICogQHBsbF9pbml0OiBhcnJheSBjb250YWluaW5nIHRoZSBpbml0aWFsaXphdGlvbiBidWZmZXIKICAqIEBwbGxfZGVzYzogcG9pbnRlciB0byB0aGUgYXBwcm9wcmlhdGUgc3RydWN0IGR2Yl9wbGxfZGVzYwotICogQHR1bmVyX3Bhc3NfY3RybDogY2FsbGVkIHRvIChkZSlhY3RpdmF0ZSB0dW5lciBwYXNzdGhydSBvZiB0aGUgZGVtb2QKKyAqCisgKiBAdHVuZXJfcGFzc19jdHJsOiBjYWxsZWQgdG8gKGRlKWFjdGl2YXRlIHR1bmVyIHBhc3N0aHJ1IG9mIHRoZSBkZW1vZCBvciB0aGUgYm9hcmQKKyAqCiAgKiBAZHZiX2FkYXA6IGRldmljZSdzIGR2Yl9hZGFwdGVyLgogICogQGRteGRldjogZGV2aWNlJ3MgZG14ZGV2LgogICogQGRlbXV4OiBkZXZpY2UncyBzb2Z0d2FyZSBkZW11eGVyLgpAQCAtMjUzLDggKzI2MywxMiBAQAogCS8qIHVzYiAqLwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXN0cnVjdCB1cmIgKip1cmJfbGlzdDsKLQl1OCAqYnVmZmVyOwotCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKworCWludCBidWZfbnVtOworCXVuc2lnbmVkIGxvbmcgYnVmX3NpemU7CisJdTggKipidWZfbGlzdDsKKwlkbWFfYWRkcl90ICpkbWFfYWRkcjsKKwogCWludCB1cmJzX2luaXRpYWxpemVkOwogCWludCB1cmJzX3N1Ym1pdHRlZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jCmluZGV4IDlkODM3ODEuLjI1OGE5MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbm92YV90X2RyaXZlciA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1OT1ZBLVQgdXNiMiIsCisJLm5hbWUJCT0gImR2Yl91c2Jfbm92YV90X3VzYjIiLAogCS5wcm9iZQkJPSBub3ZhX3RfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LAogCS5pZF90YWJsZQk9IG5vdmFfdF90YWJsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdW10LTAxMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91bXQtMDEwLmMKaW5kZXggYWE1NjA0Mi4uMjExMmFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91bXQtMDEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91bXQtMDEwLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdW10X2RyaXZlciA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIkhhbmZUZWsgVU1ULTAxMCBVU0IyLjAgRFZCLVQgZGV2aWNlcyIsCisJLm5hbWUJCT0gImR2Yl91c2JfdW10XzAxMCIsCiAJLnByb2JlCQk9IHVtdF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCiAJLmlkX3RhYmxlCT0gdW10X3RhYmxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKaW5kZXggMDJlY2M5YS4uNWFkYzVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCkBAIC00NCw3ICs0NCw3IEBACiAJaWYgKHVzYl9jb250cm9sX21zZyhkLT51ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsMCksCiAJCQlUSF9DT01NQU5EX09VVCwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQsIDAsIDAsCi0JCQlvdXRidWYsIDIwLCAyKkhaKSAhPSAyMCkgeworCQkJb3V0YnVmLCAyMCwgMjAwMCkgIT0gMjApIHsKIAkJZXJyKCJVU0IgY29udHJvbCBtZXNzYWdlICdvdXQnIHdlbnQgd3JvbmcuIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gdW5sb2NrOwpAQCAtNTUsNyArNTUsNyBAQAogCWlmICh1c2JfY29udHJvbF9tc2coZC0+dWRldiwKIAkJCXVzYl9yY3ZjdHJscGlwZShkLT51ZGV2LDApLAogCQkJVEhfQ09NTUFORF9JTiwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiwgMCwgMCwKLQkJCWluYnVmLCAxMiwgMipIWikgIT0gMTIpIHsKKwkJCWluYnVmLCAxMiwgMjAwMCkgIT0gMTIpIHsKIAkJZXJyKCJVU0IgY29udHJvbCBtZXNzYWdlICdpbicgd2VudCB3cm9uZy4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byB1bmxvY2s7CkBAIC05NCwxMyArOTQsMzggQEAKIC8qIFRoZSBrZXltYXBwaW5nIHN0cnVjdC4gU29tZWhvdyB0aGlzIHNob3VsZCBiZSBsb2FkZWQgdG8gdGhlIGRyaXZlciwgYnV0CiAgKiBjdXJyZW50bHkgaXQgaXMgaGFyZGNvZGVkLiAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSB2cDcwNDVfcmNfa2V5c1tdID0gewotCS8qIGluc2VydCB0aGUga2V5cyBsaWtlIHRoaXMuIHRvIG1ha2UgdGhlIHJhdyBrZXlzIHZpc2libGUsIGVuYWJsZQotCSAqIGRlYnVnPTB4MDQgd2hlbiBsb2FkaW5nIGR2Yi11c2ItdnA3MDQ1LiAqLwotCi0JLyogdGhlc2Uga2V5cyBhcmUgcHJvYmFibHkgd3JvbmcuIEkgZG9uJ3QgaGF2ZSBhIHdvcmtpbmcgSVItcmVjZWl2ZXIgb24gbXkKLQkgKiB2cDcwNDUsIHNvIEkgY2FuJ3QgdGVzdCBpdC4gIFBhdGNoZXMgYXJlIHdlbGNvbWUuICovCi0JeyAweDAwLCAweDAxLCBLRVlfMSB9LAotCXsgMHgwMCwgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDAsIDB4MTYsIEtFWV9QT1dFUiB9LAorCXsgMHgwMCwgMHgxMCwgS0VZX01VVEUgfSwKKwl7IDB4MDAsIDB4MDMsIEtFWV8xIH0sCisJeyAweDAwLCAweDAxLCBLRVlfMiB9LAorCXsgMHgwMCwgMHgwNiwgS0VZXzMgfSwKKwl7IDB4MDAsIDB4MDksIEtFWV80IH0sCisJeyAweDAwLCAweDFkLCBLRVlfNSB9LAorCXsgMHgwMCwgMHgxZiwgS0VZXzYgfSwKKwl7IDB4MDAsIDB4MGQsIEtFWV83IH0sCisJeyAweDAwLCAweDE5LCBLRVlfOCB9LAorCXsgMHgwMCwgMHgxYiwgS0VZXzkgfSwKKwl7IDB4MDAsIDB4MTUsIEtFWV8wIH0sCisJeyAweDAwLCAweDA1LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAwLCAweDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDAsIDB4MWUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMCwgMHgwYSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDAsIDB4MTEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDAsIDB4MTcsIEtFWV9GQVZPUklURVMgfSwgLyogSGVhcnQgc3ltYm9sIC0gQ2hhbm5lbCBsaXN0LiAqLworCXsgMHgwMCwgMHgxNCwgS0VZX1BMQVkgfSwKKwl7IDB4MDAsIDB4MWEsIEtFWV9TVE9QIH0sCisJeyAweDAwLCAweDQwLCBLRVlfUkVXSU5EIH0sCisJeyAweDAwLCAweDEyLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4MDAsIDB4MGUsIEtFWV9QUkVWSU9VUyB9LCAvKiBSZWNhbGwgLSBQcmV2aW91cyBjaGFubmVsLiAqLworCXsgMHgwMCwgMHg0YywgS0VZX1BBVVNFIH0sCisJeyAweDAwLCAweDRkLCBLRVlfU0NSRUVOIH0sIC8qIEZ1bGwgc2NyZWVuIG1vZGUuICovCisJeyAweDAwLCAweDU0LCBLRVlfQVVESU8gfSwgLyogTVRTIC0gU3dpdGNoIHRvIHNlY29uZGFyeSBhdWRpby4gKi8KKwl7IDB4MDAsIDB4MGMsIEtFWV9DQU5DRUwgfSwgLyogQ2FuY2VsICovCisJeyAweDAwLCAweDFjLCBLRVlfRVBHIH0sIC8qIEVQRyAqLworCXsgMHgwMCwgMHgwMCwgS0VZX1RBQiB9LCAvKiBUYWIgKi8KKwl7IDB4MDAsIDB4NDgsIEtFWV9JTkZPIH0sIC8qIFByZXZpZXcgKi8KKwl7IDB4MDAsIDB4MDQsIEtFWV9MSVNUIH0sIC8qIFJlY29yZExpc3QgKi8KKwl7IDB4MDAsIDB4MGYsIEtFWV9URVhUIH0gLyogVGVsZXRleHQgKi8KIH07CiAKIHN0YXRpYyBpbnQgdnA3MDQ1X3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICprZXlfYnVmLCBpbnQgKnN0YXRlKQpAQCAtMjMwLDcgKzI1NSw3IEBACiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnA3MDQ1X3VzYl9kcml2ZXIgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJkdmItdXNiLXZwNzA0NSIsCisJLm5hbWUJCT0gImR2Yl91c2JfdnA3MDQ1IiwKIAkucHJvYmUgCQk9IHZwNzA0NV91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LAogCS5pZF90YWJsZSAJPSB2cDcwNDVfdXNiX3RhYmxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwppbmRleCBiNGZkZGY1Li5kODQ3YzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwpAQCAtNDAsNiArNDAsMTIgQEAKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfUzVIMTQyMAorCXRyaXN0YXRlICJTYW1zdW5nIFM1SDE0MjAgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRQorCWhlbHAKKwkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwogY29tbWVudCAiRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCkBAIC0xODEsNCArMTg3LDExIEBACiAJICBBbiBBVFNDIDhWU0IvMTZWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8KIAkgIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9MR0RUMzMwMgorCXRyaXN0YXRlICJMR0RUMzMwMiBiYXNlZCAoRFZpQ08gRnVzaW9uSERUVjMgR29sZCkiCisJZGVwZW5kcyBvbiBEVkJfQ09SRQorCWhlbHAKKwkgIEFuIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudAorCSAgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggOTFkNmQzNS4uZGU1ZTI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtMjksMyArMjksNSBAQAogb2JqLSQoQ09ORklHX0RWQl9PUjUxMjExKSArPSBvcjUxMjExLm8KIG9iai0kKENPTkZJR19EVkJfT1I1MTEzMikgKz0gb3I1MTEzMi5vCiBvYmotJChDT05GSUdfRFZCX0JDTTM1MTApICs9IGJjbTM1MTAubworb2JqLSQoQ09ORklHX0RWQl9TNUgxNDIwKSArPSBzNWgxNDIwLm8KK29iai0kKENPTkZJR19EVkJfTEdEVDMzMDIpICs9IGxnZHQzMzAyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCmluZGV4IGY0YWE0NDEuLjlmNjM5MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYwpAQCAtNzYsNyArNzYsNiBAQAogCTB4NDksIDB4NTYsCiAJMHg2YiwgMHgxZSwKIAkweGM4LCAweDAyLAotCTB4ZjgsIDB4MDIsCiAJMHhmOSwgMHgwMCwKIAkweGZhLCAweDAwLAogCTB4ZmIsIDB4MDAsCkBAIC0yMDMsNyArMjAyLDcgQEAKIAlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCS8qIHNldCBQTEwgKi8KLSAgICAgICAgY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwweDBEKSAmMHhmZSk7CisJY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwweDBEKSAmMHhmZSk7CiAJaWYgKHN0YXRlLT5jb25maWctPnBsbF9zZXQpIHsKIAkJc3RhdGUtPmNvbmZpZy0+cGxsX3NldChmZSwgcCk7CiAJfSBlbHNlIGlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfZGVzYykgewpAQCAtMjE3LDcgKzIxNiw3IEBACiAJfSBlbHNlIHsKIAkJQlVHKCk7CiAJfQotICAgICAgICBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLDB4MEQpIHwgMSk7CisJY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwweDBEKSB8IDEpOwogCiAJLyogc2V0IGludmVyc2lvbiAqLwogCWN4MjI3MDJfc2V0X2ludmVyc2lvbiAoc3RhdGUsIHAtPmludmVyc2lvbik7CkBAIC0yNTYsNyArMjU1LDcgQEAKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQiwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBCKSAmIDB4ZmMgKTsKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweEJGKSB8IDB4NDAgKTsKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMSk7IC8qIEJlZ2luIGFxdWlzaXRpb24gKi8KLQkJcHJpbnRrKCIlczogQXV0b2RldGVjdGluZ1xuIixfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlczogQXV0b2RldGVjdGluZ1xuIixfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM0NywxMCArMzQ2LDExIEBACiAJZm9yIChpPTA7IGk8c2l6ZW9mKGluaXRfdGFiKTsgaSs9MikKIAkJY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIGluaXRfdGFiW2ldLCBpbml0X3RhYltpKzFdKTsKIAorCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweGY4LCAoc3RhdGUtPmNvbmZpZy0+b3V0cHV0X21vZGUgPDwgMSkgJiAweDAyKTsKIAogCS8qIGluaXQgUExMICovCiAJaWYgKHN0YXRlLT5jb25maWctPnBsbF9pbml0KSB7Ci0JICAgICAgICBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLDB4MEQpICYweGZlKTsKKwkJY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwweDBEKSAmIDB4ZmUpOwogCQlzdGF0ZS0+Y29uZmlnLT5wbGxfaW5pdChmZSk7CiAJCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBELCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsMHgwRCkgfCAxKTsKIAl9CkBAIC00NDAsOCArNDQwLDEwIEBACiAKIAkvKiBSUyBVbmNvcnJlY3RhYmxlIFBhY2tldCBDb3VudCB0aGVuIHJlc2V0ICovCiAJX3VjYmxvY2tzID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhFMyk7Ci0JaWYgKHN0YXRlLT5wcmV2VUNCbG9ja3MgPCBfdWNibG9ja3MpICp1Y2Jsb2NrcyA9IChfdWNibG9ja3MgLSBzdGF0ZS0+cHJldlVDQmxvY2tzKTsKLQllbHNlICp1Y2Jsb2NrcyA9IHN0YXRlLT5wcmV2VUNCbG9ja3MgLSBfdWNibG9ja3M7CisJaWYgKHN0YXRlLT5wcmV2VUNCbG9ja3MgPCBfdWNibG9ja3MpCisJCSp1Y2Jsb2NrcyA9IChfdWNibG9ja3MgLSBzdGF0ZS0+cHJldlVDQmxvY2tzKTsKKwllbHNlCisJCSp1Y2Jsb2NrcyA9IHN0YXRlLT5wcmV2VUNCbG9ja3MgLSBfdWNibG9ja3M7CiAJc3RhdGUtPnByZXZVQ0Jsb2NrcyA9IF91Y2Jsb2NrczsKIAogCXJldHVybiAwOwpAQCAtNDU3LDYgKzQ1OSwxMiBAQAogCXJldHVybiBjeDIyNzAyX2dldF90cHMgKHN0YXRlLCAmcC0+dS5vZmRtKTsKIH0KIAorc3RhdGljIGludCBjeDIyNzAyX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCit7CisJdHVuZS0+bWluX2RlbGF5X21zID0gMTAwMDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY3gyMjcwMl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewogCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwpAQCAtNDcyLDcgKzQ4MCw4IEBACiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGN4MjI3MDJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3RhdGUgPT0gTlVMTCkgZ290byBlcnJvcjsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKIAogCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CkBAIC00ODEsNyArNDkwLDggQEAKIAlzdGF0ZS0+cHJldlVDQmxvY2tzID0gMDsKIAogCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLwotCWlmIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MWYpICE9IDB4MykgZ290byBlcnJvcjsKKwlpZiAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDFmKSAhPSAweDMpCisJCWdvdG8gZXJyb3I7CiAKIAkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCiAJc3RhdGUtPmZyb250ZW5kLm9wcyA9ICZzdGF0ZS0+b3BzOwpAQCAtNTE0LDYgKzUyNCw3IEBACiAKIAkuc2V0X2Zyb250ZW5kID0gY3gyMjcwMl9zZXRfdHBzLAogCS5nZXRfZnJvbnRlbmQgPSBjeDIyNzAyX2dldF9mcm9udGVuZCwKKwkuZ2V0X3R1bmVfc2V0dGluZ3MgPSBjeDIyNzAyX2dldF90dW5lX3NldHRpbmdzLAogCiAJLnJlYWRfc3RhdHVzID0gY3gyMjcwMl9yZWFkX3N0YXR1cywKIAkucmVhZF9iZXIgPSBjeDIyNzAyX3JlYWRfYmVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKaW5kZXggNTU5ZmRiOS4uMTFmODY4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCkBAIC0zNSw2ICszNSwxMSBAQAogCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCiAJdTggZGVtb2RfYWRkcmVzczsKIAorCS8qIHNlcmlhbC9wYXJhbGxlbCBvdXRwdXQgKi8KKyNkZWZpbmUgQ1gyMjcwMl9QQVJBTExFTF9PVVRQVVQgMAorI2RlZmluZSBDWDIyNzAyX1NFUklBTF9PVVRQVVQgICAxCisJdTggb3V0cHV0X21vZGU7CisKIAkvKiBQTEwgbWFpbnRlbmFuY2UgKi8KIAl1OCBwbGxfYWRkcmVzczsKIAlzdHJ1Y3QgZHZiX3BsbF9kZXNjICpwbGxfZGVzYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCmluZGV4IGY3M2I1ZjQuLjVhZmVhYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwpAQCAtNTUsNyArNTUsNyBAQAogfTsKIEVYUE9SVF9TWU1CT0woZHZiX3BsbF90aG9tc29uX2R0dDc2MTApOwogCi1zdGF0aWMgdm9pZCB0aG9tc29uX2R0dDc1OXhfYncodTggKmJ1ZiwgaW50IGJhbmR3aWR0aCkKK3N0YXRpYyB2b2lkIHRob21zb25fZHR0NzU5eF9idyh1OCAqYnVmLCB1MzIgZnJlcSwgaW50IGJhbmR3aWR0aCkKIHsKIAlpZiAoQkFORFdJRFRIXzdfTUhaID09IGJhbmR3aWR0aCkKIAkJYnVmWzNdIHw9IDB4MTA7CkBAIC05Myw2ICs5MywzMiBAQAogfTsKIEVYUE9SVF9TWU1CT0woZHZiX3BsbF9sZ196MjAxKTsKIAorc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX21pY3JvdHVuZV80MDQyID0geworCS5uYW1lICA9ICJNaWNyb3R1bmUgNDA0MiBGSTUiLAorCS5taW4gICA9ICA1NzAwMDAwMCwKKwkubWF4ICAgPSA4NTgwMDAwMDAsCisJLmNvdW50ID0gMywKKwkuZW50cmllcyA9IHsKKwkJeyAxNjIwMDAwMDAsIDQ0MDAwMDAwLCA2MjUwMCwgMHg4ZSwgMHhhMSB9LAorCQl7IDQ1NzAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweDhlLCAweDkxIH0sCisJCXsgOTk5OTk5OTk5LCA0NDAwMDAwMCwgNjI1MDAsIDB4OGUsIDB4MzEgfSwKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0woZHZiX3BsbF9taWNyb3R1bmVfNDA0Mik7CisKK3N0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90aG9tc29uX2R0dDc2MTEgPSB7CisJLm5hbWUgID0gIlRob21zb24gZHR0NzYxMSIsCisJLm1pbiAgID0gIDQ0MDAwMDAwLAorCS5tYXggICA9IDk1ODAwMDAwMCwKKwkuY291bnQgPSAzLAorCS5lbnRyaWVzID0geworCQl7IDE1NzI1MDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweDhlLCAweDM5IH0sCisJCXsgNDU0MDAwMDAwLCA0NDAwMDAwMCwgNjI1MDAsIDB4OGUsIDB4M2EgfSwKKwkJeyA5OTk5OTk5OTksIDQ0MDAwMDAwLCA2MjUwMCwgMHg4ZSwgMHgzYyB9LAorCX0sCit9OworRVhQT1JUX1NZTUJPTChkdmJfcGxsX3Rob21zb25fZHR0NzYxMSk7CisKIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF91bmtub3duXzEgPSB7CiAJLm5hbWUgID0gInVua25vd24gMSIsIC8qIHVzZWQgYnkgZG50diBsaXZlIGR2Yi10ICovCiAJLm1pbiAgID0gMTc0MDAwMDAwLApAQCAtMTQ2LDcgKzE3Miw3IEBACiAvKiBQaGlsaXBzIFREQTY2NTAvVERBNjY1MQogICogdXNlZCBpbiBQYW5hc29uaWMgRU5WNzdIMTFENQogICovCi1zdGF0aWMgdm9pZCB0ZGE2NjV4X2J3KHU4ICpidWYsIGludCBiYW5kd2lkdGgpCitzdGF0aWMgdm9pZCB0ZGE2NjV4X2J3KHU4ICpidWYsIHUzMiBmcmVxLCBpbnQgYmFuZHdpZHRoKQogewogCWlmIChiYW5kd2lkdGggPT0gQkFORFdJRFRIXzhfTUhaKQogCQlidWZbM10gfD0gMHgwODsKQEAgLTE3OCw3ICsyMDQsNyBAQAogLyogSW5maW5lb24gVFVBNjAzNAogICogdXNlZCBpbiBMRyBURFRQIEUxMDJQCiAgKi8KLXN0YXRpYyB2b2lkIHR1YTYwMzRfYncodTggKmJ1ZiwgaW50IGJhbmR3aWR0aCkKK3N0YXRpYyB2b2lkIHR1YTYwMzRfYncodTggKmJ1ZiwgdTMyIGZyZXEsIGludCBiYW5kd2lkdGgpCiB7CiAJaWYgKEJBTkRXSURUSF83X01IWiAhPSBiYW5kd2lkdGgpCiAJCWJ1ZlszXSB8PSAweDA4OwpAQCAtMTk4LDYgKzIyNCw1NyBAQAogfTsKIEVYUE9SVF9TWU1CT0woZHZiX3BsbF90dWE2MDM0KTsKIAorLyogUGhpbGlwcyBGTUQxMjE2TUUKKyAqIHVzZWQgaW4gTWVkaW9uIEh5YnJpZCBQQ01DSUEgY2FyZCBhbmQgVVNCIEJveAorICovCitzdGF0aWMgdm9pZCBmbWQxMjE2bWVfYncodTggKmJ1ZiwgdTMyIGZyZXEsIGludCBiYW5kd2lkdGgpCit7CisJaWYgKGJhbmR3aWR0aCA9PSBCQU5EV0lEVEhfOF9NSFogJiYgZnJlcSA+PSAxNTg4NzAwMDApCisJCWJ1ZlszXSB8PSAweDA4OworfQorCitzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfZm1kMTIxNm1lID0geworCS5uYW1lID0gIlBoaWxpcHMgRk1EMTIxNk1FIiwKKwkubWluID0gNTA4NzAwMDAsCisJLm1heCA9IDg1ODAwMDAwMCwKKwkuc2V0YncgPSBmbWQxMjE2bWVfYncsCisJLmNvdW50ID0gNywKKwkuZW50cmllcyA9IHsKKwkJeyAxNDM4NzAwMDAsIDM2MjEzMzMzLCAxNjY2NjcsIDB4YmMsIDB4NDEgfSwKKwkJeyAxNTg4NzAwMDAsIDM2MjEzMzMzLCAxNjY2NjcsIDB4ZjQsIDB4NDEgfSwKKwkJeyAzMjk4NzAwMDAsIDM2MjEzMzMzLCAxNjY2NjcsIDB4YmMsIDB4NDIgfSwKKwkJeyA0NDE4NzAwMDAsIDM2MjEzMzMzLCAxNjY2NjcsIDB4ZjQsIDB4NDIgfSwKKwkJeyA2MjU4NzAwMDAsIDM2MjEzMzMzLCAxNjY2NjcsIDB4YmMsIDB4NDQgfSwKKwkJeyA4MDM4NzAwMDAsIDM2MjEzMzMzLCAxNjY2NjcsIDB4ZjQsIDB4NDQgfSwKKwkJeyA5OTk5OTk5OTksIDM2MjEzMzMzLCAxNjY2NjcsIDB4ZmMsIDB4NDQgfSwKKwl9Cit9OworRVhQT1JUX1NZTUJPTChkdmJfcGxsX2ZtZDEyMTZtZSk7CisKKy8qIEFMUFMgVERFRDQKKyAqIHVzZWQgaW4gTmVidWxhLUNhcmRzIGFuZCBVU0IgYm94ZXMKKyAqLworc3RhdGljIHZvaWQgdGRlZDRfYncodTggKmJ1ZiwgdTMyIGZyZXEsIGludCBiYW5kd2lkdGgpCit7CisJaWYgKGJhbmR3aWR0aCA9PSBCQU5EV0lEVEhfOF9NSFopCisJCWJ1ZlszXSB8PSAweDA0OworfQorCitzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdGRlZDQgPSB7CisJLm5hbWUgPSAiQUxQUyBUREVENCIsCisJLm1pbiA9IDQ3MDAwMDAwLAorCS5tYXggPSA4NjMwMDAwMDAsCisJLnNldGJ3ID0gdGRlZDRfYncsCisJLmNvdW50ID0gNCwKKwkuZW50cmllcyA9IHsKKwkJeyAxNTMwMDAwMDAsIDM2MTY2NjY3LCAxNjY2NjcsIDB4ODUsIDB4MDEgfSwKKwkJeyA0NzAwMDAwMDAsIDM2MTY2NjY3LCAxNjY2NjcsIDB4ODUsIDB4MDIgfSwKKwkJeyA4MjMwMDAwMDAsIDM2MTY2NjY3LCAxNjY2NjcsIDB4ODUsIDB4MDggfSwKKwkJeyA5OTk5OTk5OTksIDM2MTY2NjY3LCAxNjY2NjcsIDB4ODUsIDB4ODggfSwKKwl9Cit9OworRVhQT1JUX1NZTUJPTChkdmJfcGxsX3RkZWQ0KTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTIzMSw3ICszMDgsNyBAQAogCWJ1ZlszXSA9IGRlc2MtPmVudHJpZXNbaV0uY2IyOwogCiAJaWYgKGRlc2MtPnNldGJ3KQotCQlkZXNjLT5zZXRidyhidWYsIGJhbmR3aWR0aCk7CisJCWRlc2MtPnNldGJ3KGJ1ZiwgZnJlcSwgYmFuZHdpZHRoKTsKIAogCWlmIChkZWJ1ZykKIAkJcHJpbnRrKCJwbGw6ICVzOiBkaXY9JWQgfCBidWY9MHglMDJ4LDB4JTAyeCwweCUwMngsMHglMDJ4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmgKaW5kZXggYjc5Njc3OC4uY2I3OTQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oCkBAIC05LDcgKzksNyBAQAogCWNoYXIgKm5hbWU7CiAJdTMyICBtaW47CiAJdTMyICBtYXg7Ci0Jdm9pZCAoKnNldGJ3KSh1OCAqYnVmLCBpbnQgYmFuZHdpZHRoKTsKKwl2b2lkICgqc2V0YncpKHU4ICpidWYsIHUzMiBmcmVxLCBpbnQgYmFuZHdpZHRoKTsKIAlpbnQgIGNvdW50OwogCXN0cnVjdCB7CiAJCXUzMiBsaW1pdDsKQEAgLTI0LDEyICsyNCwxNiBAQAogZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90aG9tc29uX2R0dDc1OXg7CiBleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3Rob21zb25fZHR0NzYxMDsKIGV4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfbGdfejIwMTsKK2V4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfbWljcm90dW5lXzQwNDI7CitleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3Rob21zb25fZHR0NzYxMTsKIGV4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdW5rbm93bl8xOwogCiBleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3R1YTYwMTB4czsKIGV4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfZW52NTdoMXhkNTsKIGV4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdHVhNjAzNDsKIGV4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdGRhNjY1eDsKK2V4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfZm1kMTIxNm1lOworZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90ZGVkNDsKIAogaW50IGR2Yl9wbGxfY29uZmlndXJlKHN0cnVjdCBkdmJfcGxsX2Rlc2MgKmRlc2MsIHU4ICpidWYsCiAJCSAgICAgIHUzMiBmcmVxLCBpbnQgYmFuZHdpZHRoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sNjQ3ODEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sNjQ3ODEuYwppbmRleCAwMzFhMWRkLi5mYWFhZDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbDY0NzgxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2w2NDc4MS5jCkBAIC00NzQsMTEgKzQ3NCwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGw2NDc4MV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzKiBmZXNldHRpbmdzKQorc3RhdGljIGludCBsNjQ3ODFfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCisJCQkJICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyogZmVzZXR0aW5ncykKIHsKLSAgICAgICAgZmVzZXR0aW5ncy0+bWluX2RlbGF5X21zID0gMjAwOwotICAgICAgICBmZXNldHRpbmdzLT5zdGVwX3NpemUgPSAxNjY2Njc7Ci0gICAgICAgIGZlc2V0dGluZ3MtPm1heF9kcmlmdCA9IDE2NjY2NyoyOworICAgICAgICBmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSA0MDAwOworICAgICAgICBmZXNldHRpbmdzLT5zdGVwX3NpemUgPSAwOworICAgICAgICBmZXNldHRpbmdzLT5tYXhfZHJpZnQgPSAwOwogICAgICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWM5MTQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzAyLmMKQEAgLTAsMCArMSw2MTEgQEAKKy8qCisgKiAkSWQ6IGxnZHQzMzAyLmMsdiAxLjUgMjAwNS8wNy8wNyAwMzo0NzoxNSBta3J1Zmt5IEV4cCAkCisgKgorICogICAgU3VwcG9ydCBmb3IgTEdEVDMzMDIgKERWaUNPIEZ1c3Rpb25IRFRWIDMgR29sZCkgLSBWU0IvUUFNCisgKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA1IFdpbHNvbiBNaWNoYWVscyA8d2lsc29ubWljaGFlbHNAZWFydGhsaW5rLm5ldD4KKyAqCisgKiAgICBCYXNlZCBvbiBjb2RlIGZyb20gIEtpcmsgTGFwcmF5IDxraXJrX2xhcHJheUBiaWdmb290LmNvbT4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA1CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKy8qCisgKiAgICAgICAgICAgICAgICAgICAgICBOT1RFUyBBQk9VVCBUSElTIERSSVZFUgorICoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIERWaUNPIEZ1c2lvbkhEVFYgMyBHb2xkIHVuZGVyIExpbnV4LgorICoKKyAqIFRPRE86CisgKiBCRVIgYW5kIHNpZ25hbCBzdHJlbmd0aCBhbHdheXMgcmV0dXJuIDAuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImR2Yi1wbGwuaCIKKyNpbmNsdWRlICJsZ2R0MzMwMl9wcml2LmgiCisjaW5jbHVkZSAibGdkdDMzMDIuaCIKKworc3RhdGljIGludCBkZWJ1ZyA9IDA7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCJUdXJuIG9uL29mZiBsZ2R0MzMwMiBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCitkbyB7IFwKK2lmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgImxnZHQzMzAyOiAiIGFyZ3MpOyBcCit9IHdoaWxlICgwKQorCitzdHJ1Y3QgbGdkdDMzMDJfc3RhdGUKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBvcHM7CisKKwkvKiBDb25maWd1cmF0aW9uIHNldHRpbmdzICovCisJY29uc3Qgc3RydWN0IGxnZHQzMzAyX2NvbmZpZyogY29uZmlnOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKKworCS8qIERlbW9kdWxhdG9yIHByaXZhdGUgZGF0YSAqLworCWZlX21vZHVsYXRpb25fdCBjdXJyZW50X21vZHVsYXRpb247CisKKwkvKiBUdW5lciBwcml2YXRlIGRhdGEgKi8KKwl1MzIgY3VycmVudF9mcmVxdWVuY3k7Cit9OworCitzdGF0aWMgaW50IGkyY193cml0ZWJ5dGVzIChzdHJ1Y3QgbGdkdDMzMDJfc3RhdGUqIHN0YXRlLAorCQkJICAgdTggYWRkciwgLyogZGVtb2RfYWRkcmVzcyBvciBwbGxfYWRkcmVzcyAqLworCQkJICAgdTggKmJ1ZiwgLyogZGF0YSBieXRlcyB0byBzZW5kICovCisJCQkgICBpbnQgbGVuICAvKiBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAqLyApCit7CisJaWYgKGFkZHIgPT0gc3RhdGUtPmNvbmZpZy0+cGxsX2FkZHJlc3MpIHsKKwkJc3RydWN0IGkyY19tc2cgbXNnID0KKwkJCXsgLmFkZHIgPSBhZGRyLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAgLmxlbiA9IGxlbiB9OworCQlpbnQgZXJyOworCisJCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpKSAhPSAxKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJsZ2R0MzMwMjogJXMgZXJyb3IgKGFkZHIgJTAyeCA8LSAlMDJ4LCBlcnIgPT0gJWkpXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIsIGJ1ZlswXSwgZXJyKTsKKwkJCXJldHVybiAtRVJFTU9URUlPOworCQl9CisJfSBlbHNlIHsKKwkJdTggdG1wW10gPSB7IGJ1ZlswXSwgYnVmWzFdIH07CisJCXN0cnVjdCBpMmNfbXNnIG1zZyA9CisJCQl7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IHRtcCwgIC5sZW4gPSAyIH07CisJCWludCBlcnI7CisJCWludCBpOworCisJCWZvciAoaT0xOyBpPGxlbjsgaSsrKSB7CisJCQl0bXBbMV0gPSBidWZbaV07CisJCQlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImxnZHQzMzAyOiAlcyBlcnJvciAoYWRkciAlMDJ4IDwtICUwMngsIGVyciA9PSAlaSlcbiIsIF9fRlVOQ1RJT05fXywgYWRkciwgYnVmWzBdLCBlcnIpOworCQkJCXJldHVybiAtRVJFTU9URUlPOworCQkJfQorCQkJdG1wWzBdKys7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IGkyY19yZWFkYnl0ZXMgKHN0cnVjdCBsZ2R0MzMwMl9zdGF0ZSogc3RhdGUsCisJCQkgIHU4IGFkZHIsIC8qIGRlbW9kX2FkZHJlc3Mgb3IgcGxsX2FkZHJlc3MgKi8KKwkJCSAgdTggKmJ1ZiwgLyogaG9sZHMgZGF0YSBieXRlcyByZWFkICovCisJCQkgIGludCBsZW4gIC8qIG51bWJlciBvZiBieXRlcyB0byByZWFkICovICkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPQorCQl7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBidWYsICAubGVuID0gbGVuIH07CisJaW50IGVycjsKKworCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpKSAhPSAxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImxnZHQzMzAyOiAlcyBlcnJvciAoYWRkciAlMDJ4LCBlcnIgPT0gJWkpXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIsIGVycik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSB3cml0ZXMgdGhlIHJlZ2lzdGVyIChyZWcpIHRvIHRoZSBkZW1vZCBidXMKKyAqIHRoZW4gcmVhZHMgdGhlIGRhdGEgcmV0dXJuZWQgZm9yIChsZW4pIGJ5dGVzLgorICovCisKK3N0YXRpYyB1OCBpMmNfc2VsZWN0cmVhZGJ5dGVzIChzdHJ1Y3QgbGdkdDMzMDJfc3RhdGUqIHN0YXRlLAorCQkJICAgICAgIGVudW0gSTJDX1JFRyByZWcsIHU4KiBidWYsIGludCBsZW4pCit7CisJdTggd3IgW10gPSB7IHJlZyB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCSAgLmZsYWdzID0gMCwgLmJ1ZiA9IHdyLCAgLmxlbiA9IDEgfSwKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCSAgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBidWYsIC5sZW4gPSBsZW4gfSwKKwl9OworCWludCByZXQ7CisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisJaWYgKHJldCAhPSAyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImxnZHQzMzAyOiAlczogYWRkciAweCUwMnggc2VsZWN0IDB4JTAyeCBlcnJvciAocmV0ID09ICVpKVxuIiwgX19GVU5DVElPTl9fLCBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCByZWcsIHJldCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogU29mdHdhcmUgcmVzZXQgKi8KK2ludCBsZ2R0MzMwMl9Td1Jlc2V0KHN0cnVjdCBsZ2R0MzMwMl9zdGF0ZSogc3RhdGUpCit7CisJdTggcmV0OworCXU4IHJlc2V0W10gPSB7CisJCUlSUV9NQVNLLAorCQkweDAwIC8qIGJpdCA2IGlzIGFjdGl2ZSBsb3cgc29mdHdhcmUgcmVzZXQKKwkJICAgICAgKgliaXRzIDUtMCBhcmUgMSB0byBtYXNrIGludGVycnVwdHMgKi8KKwl9OworCisJcmV0ID0gaTJjX3dyaXRlYnl0ZXMoc3RhdGUsCisJCQkgICAgIHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCQkgICAgIHJlc2V0LCBzaXplb2YocmVzZXQpKTsKKwlpZiAocmV0ID09IDApIHsKKwkJLyogc3BlYyBzYXlzIHJlc2V0IHRha2VzIDEwMCBucyB3aHkgd2FpdCAqLworCQkvKiBtZGVsYXkoMTAwKTsgICAgKi8gLyoga2VlcCBsb3cgZm9yIDEwMG1TICovCisJCXJlc2V0WzFdID0gMHg3ZjsgICAgICAvKiBmb3JjZSByZXNldCBoaWdoIChpbmFjdGl2ZSkKKwkJCQkgICAgICAgKiBhbmQgdW5tYXNrIGludGVycnVwdHMgKi8KKwkJcmV0ID0gaTJjX3dyaXRlYnl0ZXMoc3RhdGUsCisJCQkJICAgICBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJCSAgICAgcmVzZXQsIHNpemVvZihyZXNldCkpOworCX0KKwkvKiBTcGVjIGRvZXMgbm90IGluZGljYXRlIGEgbmVlZCBmb3IgdGhpcyBlaXRoZXIgKi8KKwkvKm1kZWxheSg1KTsgKi8gICAgICAgICAgICAgICAvKiB3YWl0IDUgbXNlYyBiZWZvcmUgZG9pbmcgbW9yZSAqLworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwkvKiBIYXJkd2FyZSByZXNldCBpcyBkb25lIHVzaW5nIGdwaW9bMF0gb2YgY3gyMzg4MHggY2hpcC4KKwkgKiBJJ2QgbGlrZSB0byBkbyBpdCBoZXJlLCBidXQgZG9uJ3Qga25vdyBob3cgdG8gZmluZCBjaGlwIGFkZHJlc3MuCisJICogY3g4OC1jYXJkcy5jIGFycmFuZ2VzIGZvciB0aGUgcmVzZXQgYml0IHRvIGJlIGluYWN0aXZlIChoaWdoKS4KKwkgKiBNYXliZSB0aGVyZSBuZWVkcyB0byBiZSBhIGNhbGxhYmxlIGZ1bmN0aW9uIGluIGN4ODgtY29yZSBvcgorCSAqIHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBkbyBpdC4gKi8KKworCWRwcmludGsoIiVzIGVudGVyZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIGxnZHQzMzAyX1N3UmVzZXQoKHN0cnVjdCBsZ2R0MzMwMl9zdGF0ZSopIGZlLT5kZW1vZHVsYXRvcl9wcml2KTsKK30KKworc3RhdGljIGludCBsZ2R0MzMwMl9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyKiBiZXIpCit7CisJKmJlciA9IDA7IC8qIER1bW15IG91dCBmb3Igbm93ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyKiB1Y2Jsb2NrcykKK3sKKwlzdHJ1Y3QgbGdkdDMzMDJfc3RhdGUqIHN0YXRlID0gKHN0cnVjdCBsZ2R0MzMwMl9zdGF0ZSopIGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJ1ZlsyXTsKKworCWkyY19zZWxlY3RyZWFkYnl0ZXMoc3RhdGUsIFBBQ0tFVF9FUlJfQ09VTlRFUjEsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJKnVjYmxvY2tzID0gKGJ1ZlswXSA8PCA4KSB8IGJ1ZlsxXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwMl9zZXRfcGFyYW1ldGVycyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKKwkJCQkgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXU4IGJ1Zls0XTsKKwlzdHJ1Y3QgbGdkdDMzMDJfc3RhdGUqIHN0YXRlID0KKwkJKHN0cnVjdCBsZ2R0MzMwMl9zdGF0ZSopIGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJLyogVXNlIDUwTUh6IHBhcmFtZXRlciB2YWx1ZXMgZnJvbSBzcGVjIHNoZWV0IHNpbmNlIHh0YWwgaXMgNTAgKi8KKwlzdGF0aWMgdTggdG9wX2N0cmxfY2ZnW10gICA9IHsgVE9QX0NPTlRST0wsIDB4MDMgfTsKKwlzdGF0aWMgdTggdnNiX2ZyZXFfY2ZnW10gICA9IHsgVlNCX0NBUlJJRVJfRlJFUTAsIDB4MDAsIDB4ODcsIDB4OGUsIDB4MDEgfTsKKwlzdGF0aWMgdTggZGVtdXhfY3RybF9jZmdbXSA9IHsgREVNVVhfQ09OVFJPTCwgMHhmYiB9OworCXN0YXRpYyB1OCBhZ2NfcmZfY2ZnW10gICAgID0geyBBR0NfUkZfQkFORFdJRFRIMCwgMHg0MCwgMHg5MywgMHgwMCB9OworCXN0YXRpYyB1OCBhZ2NfY3RybF9jZmdbXSAgID0geyBBR0NfRlVOQ19DVFJMMiwgMHhjNiwgMHg0MCB9OworCXN0YXRpYyB1OCBhZ2NfZGVsYXlfY2ZnW10gID0geyBBR0NfREVMQVkwLCAweDAwLCAweDAwLCAweDAwIH07CisJc3RhdGljIHU4IGFnY19sb29wX2NmZ1tdICAgPSB7IEFHQ19MT09QX0JBTkRXSURUSDAsIDB4MDgsIDB4OWEgfTsKKworCS8qIENoYW5nZSBvbmx5IGlmIHdlIGFyZSBhY3R1YWxseSBjaGFuZ2luZyB0aGUgbW9kdWxhdGlvbiAqLworCWlmIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uICE9IHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJCXN3aXRjaChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCQljYXNlIFZTQl84OgorCQkJZHByaW50aygiJXM6IFZTQl84IE1PREVcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJCS8qIFNlbGVjdCBWU0IgbW9kZSBhbmQgc2VyaWFsIE1QRUcgaW50ZXJmYWNlICovCisJCQl0b3BfY3RybF9jZmdbMV0gPSAweDA3OworCQkJYnJlYWs7CisKKwkJY2FzZSBRQU1fNjQ6CisJCQlkcHJpbnRrKCIlczogUUFNXzY0IE1PREVcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJCS8qIFNlbGVjdCBRQU1fNjQgbW9kZSBhbmQgc2VyaWFsIE1QRUcgaW50ZXJmYWNlICovCisJCQl0b3BfY3RybF9jZmdbMV0gPSAweDA0OworCQkJYnJlYWs7CisKKwkJY2FzZSBRQU1fMjU2OgorCQkJZHByaW50aygiJXM6IFFBTV8yNTYgTU9ERVxuIiwgX19GVU5DVElPTl9fKTsKKworCQkJLyogU2VsZWN0IFFBTV8yNTYgbW9kZSBhbmQgc2VyaWFsIE1QRUcgaW50ZXJmYWNlICovCisJCQl0b3BfY3RybF9jZmdbMV0gPSAweDA1OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJsZ2R0MzMwMjogJXM6IE1vZHVsYXRpb24gdHlwZSglZCkgVU5TVVBQT1JURURcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnUudnNiLm1vZHVsYXRpb24pOworCQkJcmV0dXJuIC0xOworCQl9CisJCS8qIEluaXRpYWxpemF0aW9ucyBjb21tb24gdG8gYWxsIG1vZGVzICovCisKKwkJLyogU2VsZWN0IHRoZSByZXF1ZXN0ZWQgbW9kZSAqLworCQlpMmNfd3JpdGVieXRlcyhzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCSAgICAgICB0b3BfY3RybF9jZmcsIHNpemVvZih0b3BfY3RybF9jZmcpKTsKKworCQkvKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIElGQldbMTE6MF0KKwkJICAgb2YgQUdDIElGL1JGIGxvb3AgZmlsdGVyIGJhbmR3aWR0aCByZWdpc3RlciAqLworCQlpMmNfd3JpdGVieXRlcyhzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCSAgICAgICBhZ2NfcmZfY2ZnLCBzaXplb2YoYWdjX3JmX2NmZykpOworCisJCS8qIENoYW5nZSB0aGUgdmFsdWUgb2YgYml0IDYsICduSU5BR0NCWScgYW5kCisJCSAgICdOU1NFTFsxOjBdIG9mIEFDRyBmdW5jdGlvbiBjb250cm9sIHJlZ2lzdGVyIDIgKi8KKwkJLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBiaXQgNiAnUkZGSVgnCisJCSAgIG9mIEFHQyBmdW5jdGlvbiBjb250cm9sIHJlZ2lzdGVyIDMgKi8KKwkJaTJjX3dyaXRlYnl0ZXMoc3RhdGUsIHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCQkgICAgICAgYWdjX2N0cmxfY2ZnLCBzaXplb2YoYWdjX2N0cmxfY2ZnKSk7CisKKwkJLyogQ2hhbmdlIHRoZSBUUENMSyBwaW4gcG9sYXJpdHkKKwkJICAgZGF0YSBpcyB2YWxpZCBvbiBmYWxsaW5nIGNsb2NrICovCisJCWkyY193cml0ZWJ5dGVzKHN0YXRlLCBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJICAgICAgIGRlbXV4X2N0cmxfY2ZnLCBzaXplb2YoZGVtdXhfY3RybF9jZmcpKTsKKworCQlpZiAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24gPT0gVlNCXzgpIHsKKwkJCS8qIEluaXRpYWxpemF0aW9uIGZvciBWU0IgbW9kZXMgb25seSAqLworCQkJLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBOQ09DVEZWWzI1OjBdb2YgY2FycmllcgorCQkJICAgcmVjb3ZlcnkgY2VudGVyIGZyZXF1ZW5jeSByZWdpc3RlciBmb3IgVlNCICovCisJCQlpMmNfd3JpdGVieXRlcyhzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCQkgICAgICAgdnNiX2ZyZXFfY2ZnLCBzaXplb2YodnNiX2ZyZXFfY2ZnKSk7CisJCX0gZWxzZSB7CisJCQkvKiBJbml0aWFsaXphdGlvbiBmb3IgUUFNIG1vZGVzIG9ubHkgKi8KKwkJCS8qIFNldCB0aGUgdmFsdWUgb2YgJ0lOTFZUSEQnIHJlZ2lzdGVyIDB4MmEvMHgyYworCQkJICAgdG8gdmFsdWUgZnJvbSAnSUZBQ0MnIHJlZ2lzdGVyIDB4MzkvMHgzYiAtMSAqLworCQkJaW50IHZhbHVlOworCQkJaTJjX3NlbGVjdHJlYWRieXRlcyhzdGF0ZSwgQUdDX1JGSUZfQUNDMCwKKwkJCQkJICAgICZhZ2NfZGVsYXlfY2ZnWzFdLCAzKTsKKwkJCXZhbHVlID0gKChhZ2NfZGVsYXlfY2ZnWzFdICYgMHgwZikgPDwgOCkgfCBhZ2NfZGVsYXlfY2ZnWzNdOworCQkJdmFsdWUgPSB2YWx1ZSAtMTsKKwkJCWRwcmludGsoIiVzIElGQUNDIC0xID0gMHglMDN4XG4iLCBfX0ZVTkNUSU9OX18sIHZhbHVlKTsKKwkJCWFnY19kZWxheV9jZmdbMV0gPSAodmFsdWUgPj4gOCkgJiAweDBmOworCQkJYWdjX2RlbGF5X2NmZ1syXSA9IDB4MDA7CisJCQlhZ2NfZGVsYXlfY2ZnWzNdID0gdmFsdWUgJiAweGZmOworCQkJaTJjX3dyaXRlYnl0ZXMoc3RhdGUsIHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCQkJICAgICAgIGFnY19kZWxheV9jZmcsIHNpemVvZihhZ2NfZGVsYXlfY2ZnKSk7CisKKwkJCS8qIENoYW5nZSB0aGUgdmFsdWUgb2YgSUFHQ0JXWzE1OjhdCisJCQkgICBvZiBpbm5lciBBR0MgbG9vcCBmaWx0ZXIgYmFuZHdpdGggKi8KKwkJCWkyY193cml0ZWJ5dGVzKHN0YXRlLCBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJCSAgICAgICBhZ2NfbG9vcF9jZmcsIHNpemVvZihhZ2NfbG9vcF9jZmcpKTsKKwkJfQorCisJCXN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMoZmUsIDApOworCQlsZ2R0MzMwMl9Td1Jlc2V0KHN0YXRlKTsKKwkJc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9IHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uOworCX0KKworCS8qIENoYW5nZSBvbmx5IGlmIHdlIGFyZSBhY3R1YWxseSBjaGFuZ2luZyB0aGUgY2hhbm5lbCAqLworCWlmIChzdGF0ZS0+Y3VycmVudF9mcmVxdWVuY3kgIT0gcGFyYW0tPmZyZXF1ZW5jeSkgeworCQlkdmJfcGxsX2NvbmZpZ3VyZShzdGF0ZS0+Y29uZmlnLT5wbGxfZGVzYywgYnVmLAorCQkJCSAgcGFyYW0tPmZyZXF1ZW5jeSwgMCk7CisJCWRwcmludGsoIiVzOiB0dW5lciBieXRlczogMHglMDJ4IDB4JTAyeCAiCisJCQkiMHglMDJ4IDB4JTAyeFxuIiwgX19GVU5DVElPTl9fLCBidWZbMF0sYnVmWzFdLGJ1ZlsyXSxidWZbM10pOworCQlpMmNfd3JpdGVieXRlcyhzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+cGxsX2FkZHJlc3MgLGJ1ZiwgNCk7CisKKwkJLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgdHVuZXIgcGxsICovCisJCWkyY19yZWFkYnl0ZXMoc3RhdGUsIHN0YXRlLT5jb25maWctPnBsbF9hZGRyZXNzLCBidWYsIDEpOworCQlkcHJpbnRrKCIlczogdHVuZXIgc3RhdHVzIGJ5dGUgPSAweCUwMnhcbiIsIF9fRlVOQ1RJT05fXywgYnVmWzBdKTsKKworCQlsZ2R0MzMwMl9Td1Jlc2V0KHN0YXRlKTsKKworCQkvKiBVcGRhdGUgY3VycmVudCBmcmVxdWVuY3kgKi8KKwkJc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5ID0gcGFyYW0tPmZyZXF1ZW5jeTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDJfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtKQoreworCXN0cnVjdCBsZ2R0MzMwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlwYXJhbS0+ZnJlcXVlbmN5ID0gc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzAyX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQoreworCXN0cnVjdCBsZ2R0MzMwMl9zdGF0ZSogc3RhdGUgPSAoc3RydWN0IGxnZHQzMzAyX3N0YXRlKikgZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggYnVmWzNdOworCisJKnN0YXR1cyA9IDA7IC8qIFJlc2V0IHN0YXR1cyByZXN1bHQgKi8KKworCS8qIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHR1bmVyIHBsbCAqLworCWkyY19yZWFkYnl0ZXMoc3RhdGUsIHN0YXRlLT5jb25maWctPnBsbF9hZGRyZXNzLCBidWYsIDEpOworCWRwcmludGsoIiVzOiB0dW5lciBzdGF0dXMgYnl0ZSA9IDB4JTAyeFxuIiwgX19GVU5DVElPTl9fLCBidWZbMF0pOworCWlmICgoYnVmWzBdICYgMHhjMCkgIT0gMHg0MCkKKwkJcmV0dXJuIDA7IC8qIFR1bmVyIFBMTCBub3QgbG9ja2VkIG9yIG5vdCBwb3dlcmVkIG9uICovCisKKwkvKgorCSAqIFlvdSBtdXN0IHNldCB0aGUgTWFzayBiaXRzIHRvIDEgaW4gdGhlIElSUV9NQVNLIGluIG9yZGVyCisJICogdG8gc2VlIHRoYXQgc3RhdHVzIGJpdCBpbiB0aGUgSVJRX1NUQVRVUyByZWdpc3Rlci4KKwkgKiBUaGlzIGlzIGRvbmUgaW4gU3dSZXNldCgpOworCSAqLworCisJLyogQUdDIHN0YXR1cyByZWdpc3RlciAqLworCWkyY19zZWxlY3RyZWFkYnl0ZXMoc3RhdGUsIEFHQ19TVEFUVVMsIGJ1ZiwgMSk7CisJZHByaW50aygiJXM6IEFHQ19TVEFUVVMgPSAweCUwMnhcbiIsIF9fRlVOQ1RJT05fXywgYnVmWzBdKTsKKwlpZiAoKGJ1ZlswXSAmIDB4MGMpID09IDB4OCl7CisJCS8qIFRlc3Qgc2lnbmFsIGRvZXMgbm90IGV4aXN0IGZsYWcgKi8KKwkJLyogYXMgd2VsbCBhcyB0aGUgQUdDIGxvY2sgZmxhZy4gICAqLworCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisJfSBlbHNlIHsKKwkJLyogV2l0aG91dCBhIHNpZ25hbCBhbGwgb3RoZXIgc3RhdHVzIGJpdHMgYXJlIG1lYW5pbmdsZXNzICovCisJCXJldHVybiAwOworCX0KKworCS8qIHNpZ25hbCBzdGF0dXMgKi8KKwlpMmNfc2VsZWN0cmVhZGJ5dGVzKHN0YXRlLCBUT1BfQ09OVFJPTCwgYnVmLCBzaXplb2YoYnVmKSk7CisJZHByaW50aygiJXM6IFRPUF9DT05UUk9MID0gMHglMDJ4LCBJUk9fTUFTSyA9IDB4JTAyeCwgSVJRX1NUQVRVUyA9IDB4JTAyeFxuIiwgX19GVU5DVElPTl9fLCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdKTsKKworI2lmIDAKKwkvKiBBbHRlcm5hdGl2ZSBtZXRob2QgdG8gY2hlY2sgZm9yIGEgc2lnbmFsICovCisJLyogdXNpbmcgdGhlIFNOUiBnb29kL2JhZCBpbnRlcnJ1cHRzLiAgICovCisJaWYgKChidWZbMl0gJiAweDMwKSA9PSAweDEwKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisjZW5kaWYKKworCS8qIHN5bmMgc3RhdHVzICovCisJaWYgKChidWZbMl0gJiAweDAzKSA9PSAweDAxKSB7CisJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7CisJfQorCisJLyogRkVDIGVycm9yIHN0YXR1cyAqLworCWlmICgoYnVmWzJdICYgMHgwYykgPT0gMHgwOCkgeworCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLOworCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOworCX0KKworCS8qIENhcnJpZXIgUmVjb3ZlcnkgTG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KKwlpMmNfc2VsZWN0cmVhZGJ5dGVzKHN0YXRlLCBDQVJSSUVSX0xPQ0ssIGJ1ZiwgMSk7CisJZHByaW50aygiJXM6IENBUlJJRVJfTE9DSyA9IDB4JTAyeFxuIiwgX19GVU5DVElPTl9fLCBidWZbMF0pOworCXN3aXRjaCAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCWNhc2UgUUFNXzI1NjoKKwljYXNlIFFBTV82NDoKKwkJLyogTmVlZCB0byB1bmRlc3RhbmQgd2h5IHRoZXJlIGFyZSAzIGxvY2sgbGV2ZWxzIGhlcmUgKi8KKwkJaWYgKChidWZbMF0gJiAweDA3KSA9PSAweDA3KQorCQkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwkJYnJlYWs7CisJY2FzZSBWU0JfODoKKwkJaWYgKChidWZbMF0gJiAweDgwKSA9PSAweDgwKQorCQkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJLRVJOX1dBUk5JTkcgbGdkdDMzMDI6ICVzOiBNb2R1bGF0aW9uIHNldCB0byB1bnN1cHBvcnRlZCB2YWx1ZVxuIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwMl9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzdHJlbmd0aCkKK3sKKwkvKiBub3QgZGlyZWN0bHkgYXZhaWxhYmxlLiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzAyX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNucikKK3sKKyNpZmRlZiBTTlJfSU5fREIKKwkvKgorCSAqIFNwZWMgc2hlZXQgc2hvd3MgZm9ybXVsYSBmb3IgU05SX0VRID0gMTAgbG9nMTAoMjUgKiAyNCoqMiAvIG5vaXNlKQorCSAqIGFuZCBTTlJfUEggPSAxMCBsb2cxMCgyNSAqIDMyKioyIC8gbm9pc2UpIGZvciBlcXVhbGl6ZXIgYW5kIHBoYXNlIHRyYWNrZXIKKwkgKiByZXNwZWN0aXZlbHkuIFRoZSBmb2xsb3dpbmcgdGFibGVzIGFyZSBidWlsdCBvbiB0aGVzZSBmb3JtdWxhcy4KKwkgKiBUaGUgdXN1YWwgZGVmaW5pdGlvbiBpcyBTTlIgPSAyMCBsb2cxMChzaWduYWwvbm9pc2UpCisJICogSWYgdGhlIHNwZWNpZmljYXRpb24gaXMgd3JvbmcgdGhlIHZhbHVlIHJldHVuZWQgaXMgMS8yIHRoZSBhY3R1YWwgU05SIGluIGRiLgorCSAqCisJICogVGhpcyB0YWJsZSBpcyBhIGFuIG9yZGVyZWQgbGlzdCBvZiBub2lzZSB2YWx1ZXMgY29tcHV0ZWQgYnkgdGhlCisJICogZm9ybXVsYSBmcm9tIHRoZSBzcGVjIHNoZWV0IHN1Y2ggdGhhdCB0aGUgaW5kZXggaW50byB0aGUgdGFibGUKKwkgKiBzdGFydGluZyBhdCA0MyBvciA0NSBpcyB0aGUgU05SIHZhbHVlIGluIGRiLiBUaGVyZSBhcmUgZHVwbGljYXRlIG5vaXNlCisJICogdmFsdWUgZW50cmllcyBhdCB0aGUgYmVnaW5uaW5nIGJlY2F1c2UgdGhlIFNOUiB2YXJpZXMgbW9yZSB0aGFuCisJICogMSBkYiBmb3IgYSBjaGFuZ2Ugb2YgMSBkaWdpdCBpbiBub2lzZSBhdCB2ZXJ5IHNtYWxsIHZhbHVlcyBvZiBub2lzZS4KKwkgKgorCSAqIEV4YW1wbGVzIGZyb20gU05SX0VRIHRhYmxlOgorCSAqIG5vaXNlIFNOUgorCSAqICAgMCAgICA0MworCSAqICAgMSAgICA0MgorCSAqICAgMiAgICAzOQorCSAqICAgMyAgICAzNworCSAqICAgNCAgICAzNgorCSAqICAgNSAgICAzNQorCSAqICAgNiAgICAzNAorCSAqICAgNyAgICAzMworCSAqICAgOCAgICAzMworCSAqICAgOSAgICAzMgorCSAqICAgMTAgICAzMgorCSAqICAgMTEgICAzMQorCSAqICAgMTIgICAzMQorCSAqICAgMTMgICAzMAorCSAqLworCisJc3RhdGljIGNvbnN0IHUzMiBTTlJfRVFbXSA9CisJCXsgMSwgICAgIDIsICAgICAgMiwgICAgICAyLCAzLCAgICAgIDMsICAgICAgNCwgICAgIDQsICAgICA1LCAgICAgNywKKwkJICA5LCAgICAgMTEsICAgICAxMywgICAgIDE3LCAyMSwgICAgIDI2LCAgICAgMzMsICAgIDQxLCAgICA1MiwgICAgNjUsCisJCSAgODEsICAgIDEwMiwgICAgMTI5LCAgICAxNjIsIDIwNCwgICAgMjU3LCAgICAzMjMsICAgNDA2LCAgIDUxMSwgICA2NDQsCisJCSAgODEwLCAgIDEwMjAsICAgMTI4NCwgICAxNjE2LCAyMDM1LCAgIDI1NjEsICAgMzIyNCwgIDQwNTksICA1MTEwLCAgNjQzMywKKwkJICA4MDk4LCAgMTAxOTUsICAxMjgzNSwgIDE2MTU4LCAyMDM0MSwgIDI1NjA4LCAgMzIyMzgsIDQwNTg1LCA1MTA5NCwgNjQzMjMsCisJCSAgODA5NzgsIDEwMTk0NSwgMTI4MzQxLCAxNjE1NzEsIDIwMzQwNiwgMjU2MDczLCAweDQwMDAwCisJCX07CisKKwlzdGF0aWMgY29uc3QgdTMyIFNOUl9QSFtdID0KKwkJeyAxLCAgICAgMiwgICAgICAyLCAgICAgIDIsICAgICAgMywgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgOCwKKwkJICAxMCwgICAgMTIsICAgICAxNSwgICAgIDE5LCAgICAgMjMsICAgICAyOSwgMzcsICAgIDQ2LCAgICA1OCwgICAgNzMsCisJCSAgOTEsICAgIDExNSwgICAgMTQ0LCAgICAxODIsICAgIDIyOSwgICAgMjg4LCAzNjIsICAgNDU2LCAgIDU3NCwgICA3MjIsCisJCSAgOTA5LCAgIDExNDQsICAgMTQ0MCwgICAxODEzLCAgIDIyODIsICAgMjg3MywgMzYxNywgIDQ1NTMsICA1NzMyLCAgNzIxNiwKKwkJICA5MDg0LCAgMTE0MzYsICAxNDM5NiwgIDE4MTI0LCAgMjI4MTcsICAyODcyNCwgIDM2MTYxLCA0NTUyNCwgNTczMTIsIDcyMTUxLAorCQkgIDkwODMzLCAxMTQzNTEsIDE0Mzk2MCwgMTgxMjM1LCAyMjgxNjEsIDB4MDQwMDAwCisJCX07CisKKwlzdGF0aWMgdTggYnVmWzVdOy8qIHJlYWQgZGF0YSBidWZmZXIgKi8KKwlzdGF0aWMgdTMyIG5vaXNlOyAgIC8qIG5vaXNlIHZhbHVlICovCisJc3RhdGljIHUzMiBzbnJfZGI7ICAvKiBpbmRleCBpbnRvIFNOUl9FUVtdICovCisJc3RydWN0IGxnZHQzMzAyX3N0YXRlKiBzdGF0ZSA9IChzdHJ1Y3QgbGdkdDMzMDJfc3RhdGUqKSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCS8qIHJlYWQgYm90aCBlcXVhbGl6ZXIgYW5kIHBhc2UgdHJhY2tlciBub2lzZSBkYXRhICovCisJaTJjX3NlbGVjdHJlYWRieXRlcyhzdGF0ZSwgRVFQSF9FUlIwLCBidWYsIHNpemVvZihidWYpKTsKKworCWlmIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID09IFZTQl84KSB7CisJCS8qIEVxdWFsaXplciBNZWFuLVNxdWFyZSBFcnJvciBSZWdpc3RlciBmb3IgVlNCICovCisJCW5vaXNlID0gKChidWZbMF0gJiA3KSA8PCAxNikgfCAoYnVmWzFdIDw8IDgpIHwgYnVmWzJdOworCisJCS8qCisJCSAqIExvb2sgdXAgbm9pc2UgdmFsdWUgaW4gdGFibGUuCisJCSAqIEEgYmV0dGVyIHNlYXJjaCBhbGdvcml0aG0gY291bGQgYmUgdXNlZC4uLgorCQkgKiB3YXRjaCBvdXQgdGhlcmUgYXJlIGR1cGxpY2F0ZSBlbnRyaWVzLgorCQkgKi8KKwkJZm9yIChzbnJfZGIgPSAwOyBzbnJfZGIgPCBzaXplb2YoU05SX0VRKTsgc25yX2RiKyspIHsKKwkJCWlmIChub2lzZSA8IFNOUl9FUVtzbnJfZGJdKSB7CisJCQkJKnNuciA9IDQzIC0gc25yX2RiOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogUGhhc2UgVHJhY2tlciBNZWFuLVNxdWFyZSBFcnJvciBSZWdpc3RlciBmb3IgUUFNICovCisJCW5vaXNlID0gKChidWZbMF0gJiA3PDwzKSA8PCAxMykgfCAoYnVmWzNdIDw8IDgpIHwgYnVmWzRdOworCisJCS8qIExvb2sgdXAgbm9pc2UgdmFsdWUgaW4gdGFibGUuICovCisJCWZvciAoc25yX2RiID0gMDsgc25yX2RiIDwgc2l6ZW9mKFNOUl9QSCk7IHNucl9kYisrKSB7CisJCQlpZiAobm9pc2UgPCBTTlJfUEhbc25yX2RiXSkgeworCQkJCSpzbnIgPSA0NSAtIHNucl9kYjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKyNlbHNlCisJLyogUmV0dXJuIHRoZSByYXcgbm9pc2UgdmFsdWUgKi8KKwlzdGF0aWMgdTggYnVmWzVdOy8qIHJlYWQgZGF0YSBidWZmZXIgKi8KKwlzdGF0aWMgdTMyIG5vaXNlOyAgIC8qIG5vaXNlIHZhbHVlICovCisJc3RydWN0IGxnZHQzMzAyX3N0YXRlKiBzdGF0ZSA9IChzdHJ1Y3QgbGdkdDMzMDJfc3RhdGUqKSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCS8qIHJlYWQgYm90aCBlcXVhbGl6ZXIgYW5kIHBhc2UgdHJhY2tlciBub2lzZSBkYXRhICovCisJaTJjX3NlbGVjdHJlYWRieXRlcyhzdGF0ZSwgRVFQSF9FUlIwLCBidWYsIHNpemVvZihidWYpKTsKKworCWlmIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID09IFZTQl84KSB7CisJCS8qIEVxdWFsaXplciBNZWFuLVNxdWFyZSBFcnJvciBSZWdpc3RlciBmb3IgVlNCICovCisJCW5vaXNlID0gKChidWZbMF0gJiA3KSA8PCAxNikgfCAoYnVmWzFdIDw8IDgpIHwgYnVmWzJdOworCX0gZWxzZSB7CisJCS8qIFBoYXNlIFRyYWNrZXIgTWVhbi1TcXVhcmUgRXJyb3IgUmVnaXN0ZXIgZm9yIFFBTSAqLworCQlub2lzZSA9ICgoYnVmWzBdICYgNzw8MykgPDwgMTMpIHwgKGJ1ZlszXSA8PCA4KSB8IGJ1Zls0XTsKKwl9CisKKwkvKiBTbWFsbCB2YWx1ZXMgZm9yIG5vaXNlIG1lYW4gc2lnbmFsIGlzIGJldHRlciBzbyBpbnZlcnQgbm9pc2UgKi8KKwkvKiBOb2lzZSBpcyAxOSBiaXQgdmFsdWUgc28gZGlzY2FyZCAzIExTQiovCisJKnNuciA9IH5ub2lzZT4+MzsKKyNlbmRpZgorCisJZHByaW50aygiJXM6IG5vaXNlID0gMHglMDV4LCBzbnIgPSAlaWRiXG4iLF9fRlVOQ1RJT05fXywgbm9pc2UsICpzbnIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDJfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyogZmVfdHVuZV9zZXR0aW5ncykKK3sKKwkvKiBJIGhhdmUgbm8gaWRlYSBhYm91dCB0aGlzIC0gaXQgbWF5IG5vdCBiZSBuZWVkZWQgKi8KKwlmZV90dW5lX3NldHRpbmdzLT5taW5fZGVsYXlfbXMgPSA1MDA7CisJZmVfdHVuZV9zZXR0aW5ncy0+c3RlcF9zaXplID0gMDsKKwlmZV90dW5lX3NldHRpbmdzLT5tYXhfZHJpZnQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsZ2R0MzMwMl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCXN0cnVjdCBsZ2R0MzMwMl9zdGF0ZSogc3RhdGUgPSAoc3RydWN0IGxnZHQzMzAyX3N0YXRlKikgZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgbGdkdDMzMDJfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBsZ2R0MzMwMl9hdHRhY2goY29uc3Qgc3RydWN0IGxnZHQzMzAyX2NvbmZpZyogY29uZmlnLAorCQkJCSAgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCit7CisJc3RydWN0IGxnZHQzMzAyX3N0YXRlKiBzdGF0ZSA9IE5VTEw7CisJdTggYnVmWzFdOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlzdGF0ZSA9IChzdHJ1Y3QgbGdkdDMzMDJfc3RhdGUqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGdkdDMzMDJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKwltZW1zZXQoc3RhdGUsMCxzaXplb2YoKnN0YXRlKSk7CisKKwkvKiBTZXR1cCB0aGUgc3RhdGUgKi8KKwlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOworCXN0YXRlLT5pMmMgPSBpMmM7CisJbWVtY3B5KCZzdGF0ZS0+b3BzLCAmbGdkdDMzMDJfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwkvKiBWZXJpZnkgY29tbXVuaWNhdGlvbiB3aXRoIGRlbW9kIGNoaXAgKi8KKwlpZiAoaTJjX3NlbGVjdHJlYWRieXRlcyhzdGF0ZSwgMiwgYnVmLCAxKSkKKwkJZ290byBlcnJvcjsKKworCXN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IC0xOworCXN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24gPSAtMTsKKworCS8qIENyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwlzdGF0ZS0+ZnJvbnRlbmQub3BzID0gJnN0YXRlLT5vcHM7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKKworZXJyb3I6CisJaWYgKHN0YXRlKQorCQlrZnJlZShzdGF0ZSk7CisJZHByaW50aygiJXM6IEVSUk9SXG4iLF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBsZ2R0MzMwMl9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lPSAiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDIgVlNCL1FBTSBGcm9udGVuZCIsCisJCS50eXBlID0gRkVfQVRTQywKKwkJLmZyZXF1ZW5jeV9taW49IDU0MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heD0gODU4MDAwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplPSA2MjUwMCwKKwkJLyogU3ltYm9sIHJhdGUgaXMgZm9yIGFsbCBWU0IgbW9kZXMgbmVlZCB0byBjaGVjayBRQU0gKi8KKwkJLnN5bWJvbF9yYXRlX21pbiAgICA9IDEwNzYyMDAwLAorCQkuc3ltYm9sX3JhdGVfbWF4ICAgID0gMTA3NjIwMDAsCisJCS5jYXBzID0gRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fMjU2IHwgRkVfQ0FOXzhWU0IKKwl9LAorCS5pbml0ICAgICAgICAgICAgICAgICA9IGxnZHQzMzAyX2luaXQsCisJLnNldF9mcm9udGVuZCAgICAgICAgID0gbGdkdDMzMDJfc2V0X3BhcmFtZXRlcnMsCisJLmdldF9mcm9udGVuZCAgICAgICAgID0gbGdkdDMzMDJfZ2V0X2Zyb250ZW5kLAorCS5nZXRfdHVuZV9zZXR0aW5ncyAgICA9IGxnZHQzMzAyX2dldF90dW5lX3NldHRpbmdzLAorCS5yZWFkX3N0YXR1cyAgICAgICAgICA9IGxnZHQzMzAyX3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciAgICAgICAgICAgICA9IGxnZHQzMzAyX3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGxnZHQzMzAyX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciAgICAgICAgICAgICA9IGxnZHQzMzAyX3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzICAgICAgICA9IGxnZHQzMzAyX3JlYWRfdWNibG9ja3MsCisJLnJlbGVhc2UgICAgICAgICAgICAgID0gbGdkdDMzMDJfcmVsZWFzZSwKK307CisKK01PRFVMRV9ERVNDUklQVElPTigiTEdEVDMzMDIgW0RWaUNPIEZ1c2lvbkhEVFYgMyBHb2xkXSAoQVRTQyA4VlNCICYgSVRVLVQgSi44MyBBbm5leEIgNjQvMjU2IFFBTSkgRGVtb2R1bGF0b3IgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJXaWxzb24gTWljaGFlbHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworRVhQT1JUX1NZTUJPTChsZ2R0MzMwMl9hdHRhY2gpOworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIGNvbXBpbGUtY29tbWFuZDogIm1ha2UgRFZCPTEiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwMi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzAyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1ODdhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwMi5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiAkSWQ6IGxnZHQzMzAyLmgsdiAxLjIgMjAwNS8wNi8yOCAyMzo1MDo0OCBta3J1Zmt5IEV4cCAkCisgKgorICogICAgU3VwcG9ydCBmb3IgTEdEVDMzMDIgKERWaUNPIEZ1c3Rpb25IRFRWIDMgR29sZCkgLSBWU0IvUUFNCisgKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA1IFdpbHNvbiBNaWNoYWVscyA8d2lsc29ubWljaGFlbHNAZWFydGhsaW5rLm5ldD4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBMR0RUMzMwMl9ICisjZGVmaW5lIExHRFQzMzAyX0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCitzdHJ1Y3QgbGdkdDMzMDJfY29uZmlnCit7CisJLyogVGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KKwl1OCBkZW1vZF9hZGRyZXNzOworCXU4IHBsbF9hZGRyZXNzOworCXN0cnVjdCBkdmJfcGxsX2Rlc2MgKnBsbF9kZXNjOworCisJLyogTmVlZCB0byBzZXQgZGV2aWNlIHBhcmFtIGZvciBzdGFydF9kbWEgKi8KKwlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGlzX3B1bmN0dXJlZCk7Cit9OworCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbGdkdDMzMDJfYXR0YWNoKGNvbnN0IHN0cnVjdCBsZ2R0MzMwMl9jb25maWcqIGNvbmZpZywKKwkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKworI2VuZGlmIC8qIExHRFQzMzAyX0ggKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwMl9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDJfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOTNmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDJfcHJpdi5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAkSWQ6IGxnZHQzMzAyX3ByaXYuaCx2IDEuMiAyMDA1LzA2LzI4IDIzOjUwOjQ4IG1rcnVma3kgRXhwICQKKyAqCisgKiAgICBTdXBwb3J0IGZvciBMR0RUMzMwMiAoRFZpQ08gRnVzdGlvbkhEVFYgMyBHb2xkKSAtIFZTQi9RQU0KKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDUgV2lsc29uIE1pY2hhZWxzIDx3aWxzb25taWNoYWVsc0BlYXJ0aGxpbmsubmV0PgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9MR0RUMzMwMl9QUklWXworI2RlZmluZSBfTEdEVDMzMDJfUFJJVl8KKworLyogaTJjIGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzc2VzICovCitlbnVtIEkyQ19SRUcgeworCVRPUF9DT05UUk9MPSAweDAwLAorCUlSUV9NQVNLPSAweDAxLAorCUlSUV9TVEFUVVM9IDB4MDIsCisJVlNCX0NBUlJJRVJfRlJFUTA9IDB4MTYsCisJVlNCX0NBUlJJRVJfRlJFUTE9IDB4MTcsCisJVlNCX0NBUlJJRVJfRlJFUTI9IDB4MTgsCisJVlNCX0NBUlJJRVJfRlJFUTM9IDB4MTksCisJQ0FSUklFUl9NU0VRQU0xPSAweDFhLAorCUNBUlJJRVJfTVNFUUFNMj0gMHgxYiwKKwlDQVJSSUVSX0xPQ0s9IDB4MWMsCisJVElNSU5HX1JFQ09WRVJZPSAweDFkLAorCUFHQ19ERUxBWTA9IDB4MmEsCisJQUdDX0RFTEFZMT0gMHgyYiwKKwlBR0NfREVMQVkyPSAweDJjLAorCUFHQ19SRl9CQU5EV0lEVEgwPSAweDJkLAorCUFHQ19SRl9CQU5EV0lEVEgxPSAweDJlLAorCUFHQ19SRl9CQU5EV0lEVEgyPSAweDJmLAorCUFHQ19MT09QX0JBTkRXSURUSDA9IDB4MzAsCisJQUdDX0xPT1BfQkFORFdJRFRIMT0gMHgzMSwKKwlBR0NfRlVOQ19DVFJMMT0gMHgzMiwKKwlBR0NfRlVOQ19DVFJMMj0gMHgzMywKKwlBR0NfRlVOQ19DVFJMMz0gMHgzNCwKKwlBR0NfUkZJRl9BQ0MwPSAweDM5LAorCUFHQ19SRklGX0FDQzE9IDB4M2EsCisJQUdDX1JGSUZfQUNDMj0gMHgzYiwKKwlBR0NfU1RBVFVTPSAweDNmLAorCVNZTkNfU1RBVFVTX1ZTQj0gMHg0MywKKwlFUVBIX0VSUjA9IDB4NDcsCisJRVFfRVJSMT0gMHg0OCwKKwlFUV9FUlIyPSAweDQ5LAorCVBIX0VSUjE9IDB4NGEsCisJUEhfRVJSMj0gMHg0YiwKKwlERU1VWF9DT05UUk9MPSAweDY2LAorCVBBQ0tFVF9FUlJfQ09VTlRFUjE9IDB4NmEsCisJUEFDS0VUX0VSUl9DT1VOVEVSMj0gMHg2YiwKK307CisKKyNlbmRpZiAvKiBfTEdEVDMzMDJfUFJJVl8gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMzk2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5jCkBAIC0wLDAgKzEsODAwIEBACisvKgorRHJpdmVyIGZvciBTYW1zdW5nIFM1SDE0MjAgUVBTSyBEZW1vZHVsYXRvcgorCitDb3B5cmlnaHQgKEMpIDIwMDUgQW5kcmV3IGRlIFF1aW5jZXkgPGFkcV9kdmJAbGlkc2tpYWxmLm5ldD4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiczVoMTQyMC5oIgorCisKKworI2RlZmluZSBUT05FX0ZSRVEgMjIwMDAKKworc3RydWN0IHM1aDE0MjBfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjOworCXN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIG9wczsKKwljb25zdCBzdHJ1Y3QgczVoMTQyMF9jb25maWcqIGNvbmZpZzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCisJdTggcG9zdGxvY2tlZDoxOworCXUzMiBmY2xrOworCXUzMiB0dW5lZGZyZXE7CisJZmVfY29kZV9yYXRlX3QgZmVjX2lubmVyOworCXUzMiBzeW1ib2xfcmF0ZTsKK307CisKK3N0YXRpYyB1MzIgczVoMTQyMF9nZXRzeW1ib2xyYXRlKHN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSk7CitzdGF0aWMgaW50IHM1aDE0MjBfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyogZmVzZXR0aW5ncyk7CisKKworc3RhdGljIGludCBkZWJ1ZyA9IDA7CisjZGVmaW5lIGRwcmludGsgaWYgKGRlYnVnKSBwcmludGsKKworc3RhdGljIGludCBzNWgxNDIwX3dyaXRlcmVnIChzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUsIHU4IHJlZywgdTggZGF0YSkKK3sKKwl1OCBidWYgW10gPSB7IHJlZywgZGF0YSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMiB9OworCWludCBlcnI7CisKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlciAoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwkJZHByaW50ayAoIiVzOiB3cml0ZXJlZyBlcnJvciAoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4LCBkYXRhID09IDB4JTAyeClcbiIsIF9fRlVOQ1RJT05fXywgZXJyLCByZWcsIGRhdGEpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU4IHM1aDE0MjBfcmVhZHJlZyAoc3RydWN0IHM1aDE0MjBfc3RhdGUqIHN0YXRlLCB1OCByZWcpCit7CisJaW50IHJldDsKKwl1OCBiMCBbXSA9IHsgcmVnIH07CisJdTggYjEgW10gPSB7IDAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cxID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBiMCwgLmxlbiA9IDEgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cyID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjEsIC5sZW4gPSAxIH07CisKKwlpZiAoKHJldCA9IGkyY190cmFuc2ZlciAoc3RhdGUtPmkyYywgJm1zZzEsIDEpKSAhPSAxKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBpMmNfdHJhbnNmZXIgKHN0YXRlLT5pMmMsICZtc2cyLCAxKSkgIT0gMSkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBiMVswXTsKK30KKworc3RhdGljIGludCBzNWgxNDIwX3NldF92b2x0YWdlIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCXN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJc3dpdGNoKHZvbHRhZ2UpIHsKKwljYXNlIFNFQ19WT0xUQUdFXzEzOgorCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNjLCAoczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDNjKSAmIDB4ZmUpIHwgMHgwMik7CisJCWJyZWFrOworCisJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzYywgczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDNjKSB8IDB4MDMpOworCQlicmVhazsKKworCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNjLCBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4M2MpICYgMHhmZCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1aDE0MjBfc2V0X3RvbmUgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN3aXRjaCh0b25lKSB7CisJY2FzZSBTRUNfVE9ORV9PTjoKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzYiwgKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgzYikgJiAweDc0KSB8IDB4MDgpOworCQlicmVhazsKKworCWNhc2UgU0VDX1RPTkVfT0ZGOgorCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNiLCAoczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDNiKSAmIDB4NzQpIHwgMHgwMSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1aDE0MjBfc2VuZF9tYXN0ZXJfY21kIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCogY21kKQoreworCXN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHZhbDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKiBzZXR1cCBmb3IgRElTRVFDICovCisJdmFsID0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDNiKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNiLCAweDAyKTsKKwltc2xlZXAoMTUpOworCisJLyogd3JpdGUgdGhlIERJU0VRQyBjb21tYW5kIGJ5dGVzICovCisJZm9yKGk9MDsgaTwgY21kLT5tc2dfbGVuOyBpKyspIHsKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzYyArIGksIGNtZC0+bXNnW2ldKTsKKwl9CisKKwkvKiBraWNrIG9mZiB0cmFuc21pc3Npb24gKi8KKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNiLCBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4M2IpIHwgKChjbWQtPm1zZ19sZW4tMSkgPDwgNCkgfCAweDA4KTsKKworCS8qIHdhaXQgZm9yIHRyYW5zbWlzc2lvbiB0byBjb21wbGV0ZSAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgKCgxMDAqSFopIC8gMTAwMCk7CisJd2hpbGUodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJaWYgKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgzYikgJiAweDA4KQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKDUpOworCX0KKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKKworCS8qIHJlc3RvcmUgb3JpZ2luYWwgc2V0dGluZ3MgKi8KKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNiLCB2YWwpOworCW1zbGVlcCgxNSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBzNWgxNDIwX3JlY3Zfc2xhdmVfcmVwbHkgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Rpc2VxY19zbGF2ZV9yZXBseSogcmVwbHkpCit7CisJc3RydWN0IHM1aDE0MjBfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggdmFsOworCWludCBpOworCWludCBsZW5ndGg7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCByZXN1bHQgPSAwOworCisJLyogc2V0dXAgZm9yIERJU0VRQyByZWNpZXZlICovCisJdmFsID0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDNiKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNiLCAweDgyKTsgLyogRklYTUU6IGd1ZXNzIC0gZG8gd2UgbmVlZCB0byBzZXQgRElTX1JEWSgweDA4KSBpbiByZWNlaXZlIG1vZGU/ICovCisJbXNsZWVwKDE1KTsKKworCS8qIHdhaXQgZm9yIHJlY2VwdGlvbiB0byBjb21wbGV0ZSAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgKChyZXBseS0+dGltZW91dCpIWikgLyAxMDAwKTsKKwl3aGlsZSh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQlpZiAoIShzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4M2IpICYgMHg4MCkpIC8qIEZJWE1FOiBkbyB3ZSB0ZXN0IERJU19SRFkoMHgwOCkgb3IgUkNWX0VOKDB4ODApPyAqLworCQkJYnJlYWs7CisKKwkJbXNsZWVwKDUpOworCX0KKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQlyZXN1bHQgPSAtRVRJTUVET1VUOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogY2hlY2sgZXJyb3IgZmxhZyAtIEZJWE1FOiBub3Qgc3VyZSB3aGF0IHRoaXMgZG9lcyAtIGRvY3MgZG8gbm90IGRlc2NyaWJlCisJICogYmV5b25kICJlcnJvciBmbGFnIGZvciBkaXNlcWMgcmVjZWl2ZSBkYXRhIDooICovCisJaWYgKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHg0OSkpIHsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCS8qIGNoZWNrIGxlbmd0aCAqLworCWxlbmd0aCA9IChzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4M2IpICYgMHg3MCkgPj4gNDsKKwlpZiAobGVuZ3RoID4gc2l6ZW9mKHJlcGx5LT5tc2cpKSB7CisJCXJlc3VsdCA9IC1FT1ZFUkZMT1c7CisJCWdvdG8gZXhpdDsKKwl9CisJcmVwbHktPm1zZ19sZW4gPSBsZW5ndGg7CisKKwkvKiBleHRyYWN0IGRhdGEgKi8KKwlmb3IoaT0wOyBpPCBsZW5ndGg7IGkrKykgeworCQlyZXBseS0+bXNnW2ldID0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDNjICsgaSk7CisJfQorCitleGl0OgorCS8qIHJlc3RvcmUgb3JpZ2luYWwgc2V0dGluZ3MgKi8KKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNiLCB2YWwpOworCW1zbGVlcCgxNSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBzNWgxNDIwX3NlbmRfYnVyc3QgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfbWluaV9jbWRfdCBtaW5pY21kKQoreworCXN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHZhbDsKKwlpbnQgcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwkvKiBzZXR1cCBmb3IgdG9uZSBidXJzdCAqLworCXZhbCA9IHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgzYik7CisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzYiwgKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgzYikgJiAweDcwKSB8IDB4MDEpOworCisJLyogc2V0IHZhbHVlIGZvciBCIHBvc2l0aW9uIGlmIHJlcXVlc3RlZCAqLworCWlmIChtaW5pY21kID09IFNFQ19NSU5JX0IpIHsKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzYiwgczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDNiKSB8IDB4MDQpOworCX0KKwltc2xlZXAoMTUpOworCisJLyogc3RhcnQgdHJhbnNtaXNzaW9uICovCisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzYiwgczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDNiKSB8IDB4MDgpOworCisJLyogd2FpdCBmb3IgdHJhbnNtaXNzaW9uIHRvIGNvbXBsZXRlICovCisJdGltZW91dCA9IGppZmZpZXMgKyAoKDIwKkhaKSAvIDEwMDApOworCXdoaWxlKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCWlmICghKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgzYikgJiAweDA4KSkKKwkJCWJyZWFrOworCisJCW1zbGVlcCg1KTsKKwl9CisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisKKwkvKiByZXN0b3JlIG9yaWdpbmFsIHNldHRpbmdzICovCisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzYiwgdmFsKTsKKwltc2xlZXAoMTUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBmZV9zdGF0dXNfdCBzNWgxNDIwX2dldF9zdGF0dXNfYml0cyhzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUpCit7CisJdTggdmFsOworCWZlX3N0YXR1c190IHN0YXR1cyA9IDA7CisKKwl2YWwgPSBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4MTQpOworCWlmICh2YWwgJiAweDAyKQorCQlzdGF0dXMgfD0gIEZFX0hBU19TSUdOQUw7IC8vIEZJWE1FOiBub3Qgc3VyZSBpZiB0aGlzIGlzIHJpZ2h0CisJaWYgKHZhbCAmIDB4MDEpCisJCXN0YXR1cyB8PSAgRkVfSEFTX0NBUlJJRVI7IC8vIEZJWE1FOiBub3Qgc3VyZSBpZiB0aGlzIGlzIHJpZ2h0CisJdmFsID0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDM2KTsKKwlpZiAodmFsICYgMHgwMSkKKwkJc3RhdHVzIHw9ICBGRV9IQVNfVklURVJCSTsKKwlpZiAodmFsICYgMHgyMCkKKwkJc3RhdHVzIHw9ICBGRV9IQVNfU1lOQzsKKwlpZiAoc3RhdHVzID09IChGRV9IQVNfU0lHTkFMfEZFX0hBU19DQVJSSUVSfEZFX0hBU19WSVRFUkJJfEZFX0hBU19TWU5DKSkKKwkJc3RhdHVzIHw9ICBGRV9IQVNfTE9DSzsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgczVoMTQyMF9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc3RhdHVzX3QqIHN0YXR1cykKK3sKKwlzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCB2YWw7CisKKwlpZiAoc3RhdHVzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZGV0ZXJtaW5lIGxvY2sgc3RhdGUgKi8KKwkqc3RhdHVzID0gczVoMTQyMF9nZXRfc3RhdHVzX2JpdHMoc3RhdGUpOworCisJLyogZml4IGZvciBGRUMgNS82IGludmVyc2lvbiBpc3N1ZSAtIGlmIGl0IGRvZXNuJ3QgcXVpdGUgbG9jaywgaW52ZXJ0IHRoZSBpbnZlcnNpb24sCisJd2FpdCBhIGJpdCBhbmQgY2hlY2sgYWdhaW4gKi8KKwlpZiAoKnN0YXR1cyA9PSAoRkVfSEFTX1NJR05BTHxGRV9IQVNfQ0FSUklFUnxGRV9IQVNfVklURVJCSSkpIHsKKwkJdmFsID0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDMyKTsKKwkJaWYgKCh2YWwgJiAweDA3KSA9PSAweDAzKSB7CisJCQlpZiAodmFsICYgMHgwOCkKKwkJCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDMxLCAweDEzKTsKKwkJCWVsc2UKKwkJCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDMxLCAweDFiKTsKKworCQkJLyogd2FpdCBhIGJpdCB0aGVuIHVwZGF0ZSBsb2NrIHN0YXR1cyAqLworCQkJbWRlbGF5KDIwMCk7CisJCQkqc3RhdHVzID0gczVoMTQyMF9nZXRfc3RhdHVzX2JpdHMoc3RhdGUpOworCQl9CisJfQorCisJLyogcGVyZm9ybSBwb3N0IGxvY2sgc2V0dXAgKi8KKwlpZiAoKCpzdGF0dXMgJiBGRV9IQVNfTE9DSykgJiYgKCFzdGF0ZS0+cG9zdGxvY2tlZCkpIHsKKworCQkvKiBjYWxjdWxhdGUgdGhlIGRhdGEgcmF0ZSAqLworCQl1MzIgdG1wID0gczVoMTQyMF9nZXRzeW1ib2xyYXRlKHN0YXRlKTsKKwkJc3dpdGNoKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgzMikgJiAweDA3KSB7CisJCWNhc2UgMDoKKwkJCXRtcCA9ICh0bXAgKiAyICogMSkgLyAyOworCQkJYnJlYWs7CisKKwkJY2FzZSAxOgorCQkJdG1wID0gKHRtcCAqIDIgKiAyKSAvIDM7CisJCQlicmVhazsKKworCQljYXNlIDI6CisJCQl0bXAgPSAodG1wICogMiAqIDMpIC8gNDsKKwkJCWJyZWFrOworCisJCWNhc2UgMzoKKwkJCXRtcCA9ICh0bXAgKiAyICogNSkgLyA2OworCQkJYnJlYWs7CisKKwkJY2FzZSA0OgorCQkJdG1wID0gKHRtcCAqIDIgKiA2KSAvIDc7CisJCQlicmVhazsKKworCQljYXNlIDU6CisJCQl0bXAgPSAodG1wICogMiAqIDcpIC8gODsKKwkJCWJyZWFrOworCQl9CisJCXRtcCA9IHN0YXRlLT5mY2xrIC8gdG1wOworCisJCS8qIHNldCB0aGUgTVBFR19DTEtfSU5UTCBmb3IgdGhlIGNhbGN1bGF0ZWQgZGF0YSByYXRlICovCisJCWlmICh0bXAgPCA0KQorCQkJdmFsID0gMHgwMDsKKwkJZWxzZSBpZiAodG1wIDwgOCkKKwkJCXZhbCA9IDB4MDE7CisJCWVsc2UgaWYgKHRtcCA8IDEyKQorCQkJdmFsID0gMHgwMjsKKwkJZWxzZSBpZiAodG1wIDwgMTYpCisJCQl2YWwgPSAweDAzOworCQllbHNlIGlmICh0bXAgPCAyNCkKKwkJCXZhbCA9IDB4MDQ7CisJCWVsc2UgaWYgKHRtcCA8IDMyKQorCQkJdmFsID0gMHgwNTsKKwkJZWxzZQorCQkJdmFsID0gMHgwNjsKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgyMiwgdmFsKTsKKworCQkvKiBEQyBmcmVlemUgKi8KKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgxZiwgczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDFmKSB8IDB4MDEpOworCisJCS8qIGtpY2tlciBkaXNhYmxlICsgcmVtb3ZlIERDIG9mZnNldCAqLworCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDA1LCBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4MDUpICYgMHg2Zik7CisKKwkJLyogcG9zdC1sb2NrIHByb2Nlc3NpbmcgaGFzIGJlZW4gZG9uZSEgKi8KKwkJc3RhdGUtPnBvc3Rsb2NrZWQgPSAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1aDE0MjBfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogYmVyKQoreworCXN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHg0NiwgMHgxZCk7CisJbWRlbGF5KDI1KTsKKwlyZXR1cm4gKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHg0OCkgPDwgOCkgfCBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4NDcpOworfQorCitzdGF0aWMgaW50IHM1aDE0MjBfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc3RyZW5ndGgpCit7CisJc3RydWN0IHM1aDE0MjBfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwl1OCB2YWwgPSAweGZmIC0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDE1KTsKKworCXJldHVybiAoaW50KSAoKHZhbCA8PCA4KSB8IHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgczVoMTQyMF9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQoreworCXN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHg0NiwgMHgxZik7CisJbWRlbGF5KDI1KTsKKwlyZXR1cm4gKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHg0OCkgPDwgOCkgfCBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4NDcpOworfQorCitzdGF0aWMgdm9pZCBzNWgxNDIwX3Jlc2V0KHN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSkKK3sKKwlzNWgxNDIwX3dyaXRlcmVnIChzdGF0ZSwgMHgwMSwgMHgwOCk7CisJczVoMTQyMF93cml0ZXJlZyAoc3RhdGUsIDB4MDEsIDB4MDApOworCXVkZWxheSgxMCk7Cit9CisKK3N0YXRpYyB2b2lkIHM1aDE0MjBfc2V0c3ltYm9scmF0ZShzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwl1NjQgdmFsOworCisJdmFsID0gKHAtPnUucXBzay5zeW1ib2xfcmF0ZSAvIDEwMDApICogKDE8PDI0KTsKKwlpZiAocC0+dS5xcHNrLnN5bWJvbF9yYXRlIDw9IDIxMDAwMDAwKSB7CisJCXZhbCAqPSAyOworCX0KKwlkb19kaXYodmFsLCAoc3RhdGUtPmZjbGsgLyAxMDAwKSk7CisKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDA5LCBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4MDkpICYgMHg3Zik7CisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgxMSwgdmFsID4+IDE2KTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDEyLCB2YWwgPj4gOCk7CisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgxMywgdmFsICYgMHhmZik7CisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgwOSwgczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDA5KSB8IDB4ODApOworfQorCitzdGF0aWMgdTMyIHM1aDE0MjBfZ2V0c3ltYm9scmF0ZShzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUpCit7CisJdTY0IHZhbDsKKwlpbnQgc2FtcGxpbmcgPSAyOworCisJaWYgKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgwNSkgJiAweDIpCisJCXNhbXBsaW5nID0gMTsKKworCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MDYsIHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgwNikgfCAweDA4KTsKKwl2YWwgID0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDExKSA8PCAxNjsKKwl2YWwgfD0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDEyKSA8PCA4OworCXZhbCB8PSBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4MTMpOworCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MDYsIHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgwNikgJiAweGY3KTsKKworCXZhbCAqPSAoc3RhdGUtPmZjbGsgLyAxMDAwKTsKKwlkb19kaXYodmFsLCAoKDE8PDI0KSAqIHNhbXBsaW5nKSk7CisKKwlyZXR1cm4gKHUzMikgKHZhbCAqIDEwMDApOworfQorCitzdGF0aWMgdm9pZCBzNWgxNDIwX3NldGZyZXFvZmZzZXQoc3RydWN0IHM1aDE0MjBfc3RhdGUqIHN0YXRlLCBpbnQgZnJlcW9mZnNldCkKK3sKKwlpbnQgdmFsOworCisJLyogcmVtZW1iZXIgZnJlcW9mZnNldCBpcyBpbiBrSHosIGJ1dCB0aGUgY2hpcCB3YW50cyB0aGUgb2Zmc2V0IGluIEh6LCBzbworCSAqIGRpdmlkZSBmY2xrIGJ5IDEwMDAwMDAgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlLiAqLworCXZhbCA9IC0oaW50KSAoKGZyZXFvZmZzZXQgKiAoMTw8MjQpKSAvIChzdGF0ZS0+ZmNsayAvIDEwMDAwMDApKTsKKworCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MDksIHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgwOSkgJiAweGJmKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDBlLCB2YWwgPj4gMTYpOworCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIHZhbCA+PiA4KTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDEwLCB2YWwgJiAweGZmKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDA5LCBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4MDkpIHwgMHg0MCk7Cit9CisKK3N0YXRpYyBpbnQgczVoMTQyMF9nZXRmcmVxb2Zmc2V0KHN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSkKK3sKKwlpbnQgdmFsOworCisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgwNiwgczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDA2KSB8IDB4MDgpOworCXZhbCAgPSBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4MGUpIDw8IDE2OworCXZhbCB8PSBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4MGYpIDw8IDg7CisJdmFsIHw9IHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgxMCk7CisJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgwNiwgczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDA2KSAmIDB4ZjcpOworCisJaWYgKHZhbCAmIDB4ODAwMDAwKQorCQl2YWwgfD0gMHhmZjAwMDAwMDsKKworCS8qIHJlbWVtYmVyIGZyZXFvZmZzZXQgaXMgaW4ga0h6LCBidXQgdGhlIGNoaXAgd2FudHMgdGhlIG9mZnNldCBpbiBIeiwgc28KKwkgKiBkaXZpZGUgZmNsayBieSAxMDAwMDAwIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS4gKi8KKwl2YWwgPSAtICgodmFsICogKHN0YXRlLT5mY2xrLzEwMDAwMDApKSAvICgxPDwyNCkpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQgczVoMTQyMF9zZXRmZWMoc3RydWN0IHM1aDE0MjBfc3RhdGUqIHN0YXRlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJaWYgKChwLT51LnFwc2suZmVjX2lubmVyID09IEZFQ19BVVRPKSB8fCAocC0+aW52ZXJzaW9uID09IElOVkVSU0lPTl9BVVRPKSkgeworCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDMxLCAweDAwKTsKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzMCwgMHgzZik7CisJfSBlbHNlIHsKKwkJc3dpdGNoKHAtPnUucXBzay5mZWNfaW5uZXIpIHsKKwkJY2FzZSBGRUNfMV8yOgorCQkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzMSwgMHgxMCk7CisJCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDMwLCAweDAxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRkVDXzJfMzoKKwkJCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MzEsIDB4MTEpOworCQkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzMCwgMHgwMik7CisJCQlicmVhazsKKworCQljYXNlIEZFQ18zXzQ6CisJCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDMxLCAweDEyKTsKKwkJCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MzAsIDB4MDQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGRUNfNV82OgorCQkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzMSwgMHgxMyk7CisJCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDMwLCAweDA4KTsKKwkJCWJyZWFrOworCisJCWNhc2UgRkVDXzZfNzoKKwkJCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MzEsIDB4MTQpOworCQkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzMCwgMHgxMCk7CisJCQlicmVhazsKKworCQljYXNlIEZFQ183Xzg6CisJCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDMxLCAweDE1KTsKKwkJCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MzAsIDB4MjApOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIGZlX2NvZGVfcmF0ZV90IHM1aDE0MjBfZ2V0ZmVjKHN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSkKK3sKKwlzd2l0Y2goczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDMyKSAmIDB4MDcpIHsKKwljYXNlIDA6CisJCXJldHVybiBGRUNfMV8yOworCisJY2FzZSAxOgorCQlyZXR1cm4gRkVDXzJfMzsKKworCWNhc2UgMjoKKwkJcmV0dXJuIEZFQ18zXzQ7CisKKwljYXNlIDM6CisJCXJldHVybiBGRUNfNV82OworCisJY2FzZSA0OgorCQlyZXR1cm4gRkVDXzZfNzsKKworCWNhc2UgNToKKwkJcmV0dXJuIEZFQ183Xzg7CisJfQorCisJcmV0dXJuIEZFQ19OT05FOworfQorCitzdGF0aWMgdm9pZCBzNWgxNDIwX3NldGludmVyc2lvbihzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlpZiAoKHAtPnUucXBzay5mZWNfaW5uZXIgPT0gRkVDX0FVVE8pIHx8IChwLT5pbnZlcnNpb24gPT0gSU5WRVJTSU9OX0FVVE8pKSB7CisJCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MzEsIDB4MDApOworCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDMwLCAweDNmKTsKKwl9IGVsc2UgeworCQl1OCB0bXAgPSBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4MzEpICYgMHhmNzsKKwkJCXRtcCB8PSAweDEwOworCisJCWlmIChwLT5pbnZlcnNpb24gPT0gSU5WRVJTSU9OX09OKQorCQkJdG1wIHw9IDB4ODA7CisKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgzMSwgdG1wKTsKKwl9Cit9CisKK3N0YXRpYyBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBzNWgxNDIwX2dldGludmVyc2lvbihzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUpCit7CisJaWYgKHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwgMHgzMikgJiAweDA4KQorCQlyZXR1cm4gSU5WRVJTSU9OX09OOworCisJcmV0dXJuIElOVkVSU0lPTl9PRkY7Cit9CisKK3N0YXRpYyBpbnQgczVoMTQyMF9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MzIgZnJlcXVlbmN5X2RlbHRhOworCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyBmZXNldHRpbmdzOworCisJLyogY2hlY2sgaWYgd2Ugc2hvdWxkIGRvIGEgZmFzdC10dW5lICovCisJbWVtY3B5KCZmZXNldHRpbmdzLnBhcmFtZXRlcnMsIHAsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMpKTsKKwlzNWgxNDIwX2dldF90dW5lX3NldHRpbmdzKGZlLCAmZmVzZXR0aW5ncyk7CisJZnJlcXVlbmN5X2RlbHRhID0gcC0+ZnJlcXVlbmN5IC0gc3RhdGUtPnR1bmVkZnJlcTsKKwlpZiAoKGZyZXF1ZW5jeV9kZWx0YSA+IC1mZXNldHRpbmdzLm1heF9kcmlmdCkgJiYgKGZyZXF1ZW5jeV9kZWx0YSA8IGZlc2V0dGluZ3MubWF4X2RyaWZ0KSAmJgorCSAgICAoZnJlcXVlbmN5X2RlbHRhICE9IDApICYmCisJICAgIChzdGF0ZS0+ZmVjX2lubmVyID09IHAtPnUucXBzay5mZWNfaW5uZXIpICYmCisJICAgIChzdGF0ZS0+c3ltYm9sX3JhdGUgPT0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSkgeworCisJCXM1aDE0MjBfc2V0ZnJlcW9mZnNldChzdGF0ZSwgZnJlcXVlbmN5X2RlbHRhKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogZmlyc3Qgb2YgYWxsLCBzb2Z0d2FyZSByZXNldCAqLworCXM1aDE0MjBfcmVzZXQoc3RhdGUpOworCisJLyogc2V0IHR1bmVyIFBMTCAqLworCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfc2V0KSB7CisJCXM1aDE0MjBfd3JpdGVyZWcgKHN0YXRlLCAweDAyLCBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsMHgwMikgfCAxKTsKKwkJc3RhdGUtPmNvbmZpZy0+cGxsX3NldChmZSwgcCwgJnN0YXRlLT50dW5lZGZyZXEpOworCQlzNWgxNDIwX3dyaXRlcmVnIChzdGF0ZSwgMHgwMiwgczVoMTQyMF9yZWFkcmVnKHN0YXRlLDB4MDIpICYgMHhmZSk7CisJfQorCisJLyogc2V0IHM1aDE0MjAgZmNsayBQTEwgYWNjb3JkaW5nIHRvIGRlc2lyZWQgc3ltYm9sIHJhdGUgKi8KKwlpZiAocC0+dS5xcHNrLnN5bWJvbF9yYXRlID4gMjgwMDAwMDApIHsKKwkJc3RhdGUtPmZjbGsgPSA4ODAwMDAwMDsKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgwMywgMHg1MCk7CisJCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MDQsIDB4NDApOworCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDA1LCAweGFlKTsKKwl9IGVsc2UgaWYgKHAtPnUucXBzay5zeW1ib2xfcmF0ZSA+IDIxMDAwMDAwKSB7CisJCXN0YXRlLT5mY2xrID0gNTkwMDAwMDA7CisJCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MDMsIDB4MzMpOworCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDA0LCAweDQwKTsKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgwNSwgMHhhZSk7CisJfSBlbHNlIHsKKwkJc3RhdGUtPmZjbGsgPSA4ODAwMDAwMDsKKwkJczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgwMywgMHg1MCk7CisJCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MDQsIDB4NDApOworCQlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDA1LCAweGFjKTsKKwl9CisKKwkvKiBzZXQgbWlzYyByZWdpc3RlcnMgKi8KKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDAyLCAweDAwKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDA3LCAweGIwKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDBhLCAweDY3KTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDBiLCAweDc4KTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDBjLCAweDQ4KTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDBkLCAweDZiKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDJlLCAweDhlKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDM1LCAweDMzKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDM4LCAweDAxKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDM5LCAweDdkKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNhLCAoc3RhdGUtPmZjbGsgKyAoVE9ORV9GUkVRICogMzIpIC0gMSkgLyAoVE9ORV9GUkVRICogMzIpKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNjLCAweDAwKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDQ1LCAweDYxKTsKKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDQ2LCAweDFkKTsKKworCS8qIHN0YXJ0IFFQU0sgKi8KKwlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDA1LCBzNWgxNDIwX3JlYWRyZWcoc3RhdGUsIDB4MDUpIHwgMSk7CisKKwkvKiBzZXQgdGhlIGZyZXF1ZW5jeSBvZmZzZXQgdG8gYWRqdXN0IGZvciBQTEwgaW5hY2N1cmFjeSAqLworCXM1aDE0MjBfc2V0ZnJlcW9mZnNldChzdGF0ZSwgcC0+ZnJlcXVlbmN5IC0gc3RhdGUtPnR1bmVkZnJlcSk7CisKKwkvKiBzZXQgdGhlIHJlc2V0IG9mIHRoZSBwYXJhbWV0ZXJzICovCisJczVoMTQyMF9zZXRzeW1ib2xyYXRlKHN0YXRlLCBwKTsKKwlzNWgxNDIwX3NldGludmVyc2lvbihzdGF0ZSwgcCk7CisJczVoMTQyMF9zZXRmZWMoc3RhdGUsIHApOworCisJc3RhdGUtPmZlY19pbm5lciA9IHAtPnUucXBzay5mZWNfaW5uZXI7CisJc3RhdGUtPnN5bWJvbF9yYXRlID0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlOworCXN0YXRlLT5wb3N0bG9ja2VkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNWgxNDIwX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJcC0+ZnJlcXVlbmN5ID0gc3RhdGUtPnR1bmVkZnJlcSArIHM1aDE0MjBfZ2V0ZnJlcW9mZnNldChzdGF0ZSk7CisJcC0+aW52ZXJzaW9uID0gczVoMTQyMF9nZXRpbnZlcnNpb24oc3RhdGUpOworCXAtPnUucXBzay5zeW1ib2xfcmF0ZSA9IHM1aDE0MjBfZ2V0c3ltYm9scmF0ZShzdGF0ZSk7CisJcC0+dS5xcHNrLmZlY19pbm5lciA9IHM1aDE0MjBfZ2V0ZmVjKHN0YXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1aDE0MjBfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyogZmVzZXR0aW5ncykKK3sKKwlpZiAoZmVzZXR0aW5ncy0+cGFyYW1ldGVycy51LnFwc2suc3ltYm9sX3JhdGUgPiAyMDAwMDAwMCkgeworCQlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSA1MDsKKwkJZmVzZXR0aW5ncy0+c3RlcF9zaXplID0gMjAwMDsKKwkJZmVzZXR0aW5ncy0+bWF4X2RyaWZ0ID0gODAwMDsKKwl9IGVsc2UgaWYgKGZlc2V0dGluZ3MtPnBhcmFtZXRlcnMudS5xcHNrLnN5bWJvbF9yYXRlID4gMTIwMDAwMDApIHsKKwkJZmVzZXR0aW5ncy0+bWluX2RlbGF5X21zID0gMTAwOworCQlmZXNldHRpbmdzLT5zdGVwX3NpemUgPSAxNTAwOworCQlmZXNldHRpbmdzLT5tYXhfZHJpZnQgPSA5MDAwOworCX0gZWxzZSBpZiAoZmVzZXR0aW5ncy0+cGFyYW1ldGVycy51LnFwc2suc3ltYm9sX3JhdGUgPiA4MDAwMDAwKSB7CisJCWZlc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDEwMDsKKwkJZmVzZXR0aW5ncy0+c3RlcF9zaXplID0gMTAwMDsKKwkJZmVzZXR0aW5ncy0+bWF4X2RyaWZ0ID0gODAwMDsKKwl9IGVsc2UgaWYgKGZlc2V0dGluZ3MtPnBhcmFtZXRlcnMudS5xcHNrLnN5bWJvbF9yYXRlID4gNDAwMDAwMCkgeworCQlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSAxMDA7CisJCWZlc2V0dGluZ3MtPnN0ZXBfc2l6ZSA9IDUwMDsKKwkJZmVzZXR0aW5ncy0+bWF4X2RyaWZ0ID0gNzAwMDsKKwl9IGVsc2UgaWYgKGZlc2V0dGluZ3MtPnBhcmFtZXRlcnMudS5xcHNrLnN5bWJvbF9yYXRlID4gMjAwMDAwMCkgeworCQlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSAyMDA7CisJCWZlc2V0dGluZ3MtPnN0ZXBfc2l6ZSA9IChmZXNldHRpbmdzLT5wYXJhbWV0ZXJzLnUucXBzay5zeW1ib2xfcmF0ZSAvIDgwMDApOworCQlmZXNldHRpbmdzLT5tYXhfZHJpZnQgPSAxNCAqIGZlc2V0dGluZ3MtPnN0ZXBfc2l6ZTsKKwl9IGVsc2UgeworCQlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSAyMDA7CisJCWZlc2V0dGluZ3MtPnN0ZXBfc2l6ZSA9IChmZXNldHRpbmdzLT5wYXJhbWV0ZXJzLnUucXBzay5zeW1ib2xfcmF0ZSAvIDgwMDApOworCQlmZXNldHRpbmdzLT5tYXhfZHJpZnQgPSAxOCAqIGZlc2V0dGluZ3MtPnN0ZXBfc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNWgxNDIwX2luaXQgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCXN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJLyogZGlzYWJsZSBwb3dlciBkb3duIGFuZCBkbyByZXNldCAqLworCXM1aDE0MjBfd3JpdGVyZWcoc3RhdGUsIDB4MDIsIDB4MTApOworCW1zbGVlcCgxMCk7CisJczVoMTQyMF9yZXNldChzdGF0ZSk7CisKKwkvKiBpbml0IFBMTCAqLworCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfaW5pdCkgeworCQlzNWgxNDIwX3dyaXRlcmVnIChzdGF0ZSwgMHgwMiwgczVoMTQyMF9yZWFkcmVnKHN0YXRlLDB4MDIpIHwgMSk7CisJCXN0YXRlLT5jb25maWctPnBsbF9pbml0KGZlKTsKKwkJczVoMTQyMF93cml0ZXJlZyAoc3RhdGUsIDB4MDIsIHM1aDE0MjBfcmVhZHJlZyhzdGF0ZSwweDAyKSAmIDB4ZmUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1aDE0MjBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCit7CisJc3RydWN0IHM1aDE0MjBfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlyZXR1cm4gczVoMTQyMF93cml0ZXJlZyhzdGF0ZSwgMHgwMiwgMHgxMik7Cit9CisKK3N0YXRpYyB2b2lkIHM1aDE0MjBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdHJ1Y3QgczVoMTQyMF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzNWgxNDIwX29wczsKKworc3RydWN0IGR2Yl9mcm9udGVuZCogczVoMTQyMF9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MjBfY29uZmlnKiBjb25maWcsIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXN0cnVjdCBzNWgxNDIwX3N0YXRlKiBzdGF0ZSA9IE5VTEw7CisJdTggaWRlbnRpdHk7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHM1aDE0MjBfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKworCS8qIHNldHVwIHRoZSBzdGF0ZSAqLworCXN0YXRlLT5jb25maWcgPSBjb25maWc7CisJc3RhdGUtPmkyYyA9IGkyYzsKKwltZW1jcHkoJnN0YXRlLT5vcHMsICZzNWgxNDIwX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPnBvc3Rsb2NrZWQgPSAwOworCXN0YXRlLT5mY2xrID0gODgwMDAwMDA7CisJc3RhdGUtPnR1bmVkZnJlcSA9IDA7CisJc3RhdGUtPmZlY19pbm5lciA9IEZFQ19OT05FOworCXN0YXRlLT5zeW1ib2xfcmF0ZSA9IDA7CisKKwkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKyBpZGVudGlmeSBpdCAqLworCWlkZW50aXR5ID0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDAwKTsKKwlpZiAoaWRlbnRpdHkgIT0gMHgwMykKKwkJZ290byBlcnJvcjsKKworCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwlzdGF0ZS0+ZnJvbnRlbmQub3BzID0gJnN0YXRlLT5vcHM7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKKworZXJyb3I6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgczVoMTQyMF9vcHMgPSB7CisKKwkuaW5mbyA9IHsKKwkJLm5hbWUgICAgID0gIlNhbXN1bmcgUzVIMTQyMCBEVkItUyIsCisJCS50eXBlICAgICA9IEZFX1FQU0ssCisJCS5mcmVxdWVuY3lfbWluICAgID0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heCAgICA9IDIxNTAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSAxMjUsICAgICAvKiBrSHogZm9yIFFQU0sgZnJvbnRlbmRzICovCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlICA9IDI5NTAwLAorCQkuc3ltYm9sX3JhdGVfbWluICA9IDEwMDAwMDAsCisJCS5zeW1ib2xfcmF0ZV9tYXggID0gNDUwMDAwMDAsCisJCS8qICAuc3ltYm9sX3JhdGVfdG9sZXJhbmNlICA9ID8/PywqLworCQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8CisJCUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8CisJCUZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ182XzcgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCUZFX0NBTl9RUFNLCisJfSwKKworCS5yZWxlYXNlID0gczVoMTQyMF9yZWxlYXNlLAorCisJLmluaXQgPSBzNWgxNDIwX2luaXQsCisJLnNsZWVwID0gczVoMTQyMF9zbGVlcCwKKworCS5zZXRfZnJvbnRlbmQgPSBzNWgxNDIwX3NldF9mcm9udGVuZCwKKwkuZ2V0X2Zyb250ZW5kID0gczVoMTQyMF9nZXRfZnJvbnRlbmQsCisJLmdldF90dW5lX3NldHRpbmdzID0gczVoMTQyMF9nZXRfdHVuZV9zZXR0aW5ncywKKworCS5yZWFkX3N0YXR1cyA9IHM1aDE0MjBfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyID0gczVoMTQyMF9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBzNWgxNDIwX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3VjYmxvY2tzID0gczVoMTQyMF9yZWFkX3VjYmxvY2tzLAorCisJLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBzNWgxNDIwX3NlbmRfbWFzdGVyX2NtZCwKKwkuZGlzZXFjX3JlY3Zfc2xhdmVfcmVwbHkgPSBzNWgxNDIwX3JlY3Zfc2xhdmVfcmVwbHksCisJLmRpc2VxY19zZW5kX2J1cnN0ID0gczVoMTQyMF9zZW5kX2J1cnN0LAorCS5zZXRfdG9uZSA9IHM1aDE0MjBfc2V0X3RvbmUsCisJLnNldF92b2x0YWdlID0gczVoMTQyMF9zZXRfdm9sdGFnZSwKK307CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIFM1SDE0MjAgRFZCLVMgRGVtb2R1bGF0b3IgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJBbmRyZXcgZGUgUXVpbmNleSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitFWFBPUlRfU1lNQk9MKHM1aDE0MjBfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ODdmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgICAgRHJpdmVyIGZvciBTNUgxNDIwIFFQU0sgRGVtb2R1bGF0b3JzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDUgQW5kcmV3IGRlIFF1aW5jZXkgPGFkcV9kdmJAbGlkc2tpYWxmLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKworICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgUzVIMTQyMF9ICisjZGVmaW5lIFM1SDE0MjBfSAorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKK3N0cnVjdCBzNWgxNDIwX2NvbmZpZworeworCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCisJdTggZGVtb2RfYWRkcmVzczsKKworCS8qIFBMTCBtYWludGVuYW5jZSAqLworCWludCAoKnBsbF9pbml0KShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CisJaW50ICgqcGxsX3NldCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zLCB1MzIqIGZyZXFvdXQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHM1aDE0MjBfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDIwX2NvbmZpZyogY29uZmlnLAorICAgICAgICAgICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKworI2VuZGlmIC8vIFM1SDE0MjBfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTcuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmMKaW5kZXggZTY4MTI2My4uOTI4YWNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTcuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5Ny5jCkBAIC02MTcsNyArNjE3LDcgQEAKIAogCS8qIHdhaXQgZm9yIFdHQUdDIGxvY2sgKi8KIAlzdGFydHRpbWUgPSBqaWZmaWVzOwotCXRpbWVvdXQgPSBqaWZmaWVzICsgKDIwMCAqIEhaKSAvIDEwMDA7CisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwMDApOwogCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewogCQltc2xlZXAoMTApOwogCQlpZiAoc3R2MDI5N19yZWFkcmVnKHN0YXRlLCAweDQzKSAmIDB4MDgpCkBAIC02MjksNyArNjI5LDcgQEAKIAltc2xlZXAoMjApOwogCiAJLyogd2FpdCBmb3IgZXF1YWxpc2VyIHBhcnRpYWwgY29udmVyZ2VuY2UgKi8KLQl0aW1lb3V0ID0gamlmZmllcyArICg1MCAqIEhaKSAvIDEwMDA7CisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMCk7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCW1zbGVlcCgxMCk7CiAKQEAgLTY0Miw3ICs2NDIsNyBAQAogCX0KIAogCS8qIHdhaXQgZm9yIGVxdWFsaXNlciBmdWxsIGNvbnZlcmdlbmNlICovCi0JdGltZW91dCA9IGppZmZpZXMgKyAoZGVsYXkgKiBIWikgLyAxMDAwOworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhkZWxheSk7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCW1zbGVlcCgxMCk7CiAKQEAgLTY1OSw3ICs2NTksNyBAQAogCXN0djAyOTdfd3JpdGVyZWdfbWFzayhzdGF0ZSwgMHg4OCwgOCwgMCk7CiAKIAkvKiB3YWl0IGZvciBtYWluIGxvY2sgKi8KLQl0aW1lb3V0ID0gamlmZmllcyArICgyMCAqIEhaKSAvIDEwMDA7CisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKIAkJbXNsZWVwKDEwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYwppbmRleCAwYmViMzcwLi5hYjBjMDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYwpAQCAtNDksMTAgKzQ5LDggQEAKIAkvKiBwcml2YXRlIGRlbW9kIGRhdGEgKi8KIAl1OCBpbml0aWFsaXNlZDsKIAllbnVtIHRkYTEwMDR4X2RlbW9kIGRlbW9kX3R5cGU7Ci0JdTggZndfdmVyc2lvbjsKIH07CiAKLQogc3RhdGljIGludCBkZWJ1ZzsKICNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCiAJZG8geyBcCkBAIC0xMjIsNiArMTIwLDggQEAKICNkZWZpbmUgVERBMTAwNDZIX0dQSU9fT1VUX1NFTAkgMHg0MQogI2RlZmluZSBUREExMDA0NkhfR1BJT19TRUxFQ1QJIDB4NDIKICNkZWZpbmUgVERBMTAwNDZIX0FHQ19DT05GCSAweDQzCisjZGVmaW5lIFREQTEwMDQ2SF9BR0NfVEhSCSAweDQ0CisjZGVmaW5lIFREQTEwMDQ2SF9BR0NfUkVOT1JNCSAweDQ1CiAjZGVmaW5lIFREQTEwMDQ2SF9BR0NfR0FJTlMJIDB4NDYKICNkZWZpbmUgVERBMTAwNDZIX0FHQ19UVU5fTUlOCSAweDQ3CiAjZGVmaW5lIFREQTEwMDQ2SF9BR0NfVFVOX01BWAkgMHg0OApAQCAtMjc0LDE0ICsyNzQsMjYgQEAKIAlzd2l0Y2ggKGJhbmR3aWR0aCkgewogCWNhc2UgQkFORFdJRFRIXzZfTUhaOgogCQl0ZGExMDA0eF93cml0ZV9idWYoc3RhdGUsIFREQTEwMDQ2SF9USU1FX1dSRUYxLCBiYW5kd2lkdGhfNm1oeiwgc2l6ZW9mKGJhbmR3aWR0aF82bWh6KSk7CisJCWlmIChzdGF0ZS0+Y29uZmlnLT5pZl9mcmVxID09IFREQTEwMDQ2X0ZSRVFfMDQ1KSB7CisJCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9NU0IsIDB4MDkpOworCQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTFNCLCAweDRmKTsKKwkJfQogCQlicmVhazsKIAogCWNhc2UgQkFORFdJRFRIXzdfTUhaOgogCQl0ZGExMDA0eF93cml0ZV9idWYoc3RhdGUsIFREQTEwMDQ2SF9USU1FX1dSRUYxLCBiYW5kd2lkdGhfN21oeiwgc2l6ZW9mKGJhbmR3aWR0aF83bWh6KSk7CisJCWlmIChzdGF0ZS0+Y29uZmlnLT5pZl9mcmVxID09IFREQTEwMDQ2X0ZSRVFfMDQ1KSB7CisJCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9NU0IsIDB4MGEpOworCQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTFNCLCAweDc5KTsKKwkJfQogCQlicmVhazsKIAogCWNhc2UgQkFORFdJRFRIXzhfTUhaOgogCQl0ZGExMDA0eF93cml0ZV9idWYoc3RhdGUsIFREQTEwMDQ2SF9USU1FX1dSRUYxLCBiYW5kd2lkdGhfOG1oeiwgc2l6ZW9mKGJhbmR3aWR0aF84bWh6KSk7CisJCWlmIChzdGF0ZS0+Y29uZmlnLT5pZl9mcmVxID09IFREQTEwMDQ2X0ZSRVFfMDQ1KSB7CisJCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9NU0IsIDB4MGIpOworCQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTFNCLCAweGEzKTsKKwkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0zMTUsMjAgKzMyNywzNSBAQAogCQltZW1jcHkoYnVmICsgMSwgbWVtICsgcG9zLCB0eF9zaXplKTsKIAkJZndfbXNnLmxlbiA9IHR4X3NpemUgKyAxOwogCQlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZmd19tc2csIDEpICE9IDEpIHsKLQkJCXByaW50aygidGRhMTAwNHg6IEVycm9yIGR1cmluZyBmaXJtd2FyZSB1cGxvYWRcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJ0ZGExMDA0eDogRXJyb3IgZHVyaW5nIGZpcm13YXJlIHVwbG9hZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQlwb3MgKz0gdHhfc2l6ZTsKIAogCQlkcHJpbnRrKCIlczogZndfcG9zPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywgcG9zKTsKIAl9CisJLy8gZ2l2ZSB0aGUgRFNQIGEgY2hhbmNlIHRvIHNldHRsZSAwMy8xMC8wNSBIYWMKKwltc2xlZXAoMTAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRkYTEwMDR4X2NoZWNrX3VwbG9hZF9vayhzdHJ1Y3QgdGRhMTAwNHhfc3RhdGUgKnN0YXRlLCB1OCBkc3BWZXJzaW9uKQorc3RhdGljIGludCB0ZGExMDA0eF9jaGVja191cGxvYWRfb2soc3RydWN0IHRkYTEwMDR4X3N0YXRlICpzdGF0ZSkKIHsKIAl1OCBkYXRhMSwgZGF0YTI7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJaWYgKHN0YXRlLT5kZW1vZF90eXBlID09IFREQTEwMDRYX0RFTU9EX1REQTEwMDQ2KSB7CisJCXRpbWVvdXQgPSBqaWZmaWVzICsgMiAqIEhaOworCQl3aGlsZSghKHRkYTEwMDR4X3JlYWRfYnl0ZShzdGF0ZSwgVERBMTAwNFhfU1RBVFVTX0NEKSAmIDB4MjApKSB7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidGRhMTAwNHg6IHRpbWVvdXQgd2FpdGluZyBmb3IgRFNQIHJlYWR5XG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1zbGVlcCgxKTsKKwkJfQorCX0gZWxzZQorCQltc2xlZXAoMTAwKTsKIAogCS8vIGNoZWNrIHVwbG9hZCB3YXMgT0sKIAl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDB4MTAsIDApOyAvLyB3ZSB3YW50IHRvIHJlYWQgZnJvbSB0aGUgRFNQCkBAIC0zMzYsOSArMzYzLDExIEBACiAKIAlkYXRhMSA9IHRkYTEwMDR4X3JlYWRfYnl0ZShzdGF0ZSwgVERBMTAwNFhfRFNQX0RBVEExKTsKIAlkYXRhMiA9IHRkYTEwMDR4X3JlYWRfYnl0ZShzdGF0ZSwgVERBMTAwNFhfRFNQX0RBVEEyKTsKLQlpZiAoKGRhdGExICE9IDB4NjcpIHx8IChkYXRhMiAhPSBkc3BWZXJzaW9uKSkKKwlpZiAoZGF0YTEgIT0gMHg2NyB8fCBkYXRhMiA8IDB4MjAgfHwgZGF0YTIgPiAweDJlKSB7CisJCXByaW50ayhLRVJOX0lORk8gInRkYTEwMDR4OiBmb3VuZCBmaXJtd2FyZSByZXZpc2lvbiAleCAtLSBpbnZhbGlkXG4iLCBkYXRhMik7CiAJCXJldHVybiAtRUlPOwotCisJfQorCXByaW50ayhLRVJOX0lORk8gInRkYTEwMDR4OiBmb3VuZCBmaXJtd2FyZSByZXZpc2lvbiAleCAtLSBva1xuIiwgZGF0YTIpOwogCXJldHVybiAwOwogfQogCkBAIC0zNDksMTQgKzM3OCwxNCBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAKIAkvKiBkb24ndCByZS11cGxvYWQgdW5sZXNzIG5lY2Vzc2FyeSAqLwotCWlmICh0ZGExMDA0eF9jaGVja191cGxvYWRfb2soc3RhdGUsIDB4MmMpID09IDApCisJaWYgKHRkYTEwMDR4X2NoZWNrX3VwbG9hZF9vayhzdGF0ZSkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAkvKiByZXF1ZXN0IHRoZSBmaXJtd2FyZSwgdGhpcyB3aWxsIGJsb2NrIHVudGlsIHNvbWVvbmUgdXBsb2FkcyBpdCAqLwotCXByaW50aygidGRhMTAwNHg6IHdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZCAoJXMpLi4uXG4iLCBUREExMDA0NV9ERUZBVUxUX0ZJUk1XQVJFKTsKKwlwcmludGsoS0VSTl9JTkZPICJ0ZGExMDA0eDogd2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkICglcykuLi5cbiIsIFREQTEwMDQ1X0RFRkFVTFRfRklSTVdBUkUpOwogCXJldCA9IHN0YXRlLT5jb25maWctPnJlcXVlc3RfZmlybXdhcmUoZmUsICZmdywgVERBMTAwNDVfREVGQVVMVF9GSVJNV0FSRSk7CiAJaWYgKHJldCkgewotCQlwcmludGsoInRkYTEwMDR4OiBubyBmaXJtd2FyZSB1cGxvYWQgKHRpbWVvdXQgb3IgZmlsZSBub3QgZm91bmQ/KVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAidGRhMTAwNHg6IG5vIGZpcm13YXJlIHVwbG9hZCAodGltZW91dCBvciBmaWxlIG5vdCBmb3VuZD8pXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTM3MCw5NSArMzk5LDkzIEBACiAJdGRhMTAwNDVoX3NldF9iYW5kd2lkdGgoc3RhdGUsIEJBTkRXSURUSF84X01IWik7CiAKIAlyZXQgPSB0ZGExMDA0eF9kb191cGxvYWQoc3RhdGUsIGZ3LT5kYXRhLCBmdy0+c2l6ZSwgVERBMTAwNDVIX0ZXUEFHRSwgVERBMTAwNDVIX0NPREVfSU4pOworCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0JcHJpbnRrKCJ0ZGExMDA0eDogZmlybXdhcmUgdXBsb2FkIGNvbXBsZXRlXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJ0ZGExMDA0eDogZmlybXdhcmUgdXBsb2FkIGNvbXBsZXRlXG4iKTsKIAogCS8qIHdhaXQgZm9yIERTUCB0byBpbml0aWFsaXNlICovCiAJLyogRFNQUkVBRFkgZG9lc24ndCBzZWVtIHRvIHdvcmsgb24gdGhlIFREQTEwMDQ1SCAqLwogCW1zbGVlcCgxMDApOwogCi0JcmV0dXJuIHRkYTEwMDR4X2NoZWNrX3VwbG9hZF9vayhzdGF0ZSwgMHgyYyk7CisJcmV0dXJuIHRkYTEwMDR4X2NoZWNrX3VwbG9hZF9vayhzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgdGRhMTAwNDZfZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IHRkYTEwMDR4X3N0YXRlICpzdGF0ZSwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQorc3RhdGljIHZvaWQgdGRhMTAwNDZfaW5pdF9wbGxzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgcGF0dGVybltdID0geyAweDY3LCAweDAwLCAweDUwLCAweDYyLCAweDVlLCAweDE4LCAweDY3IH07Ci0JdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHRkYTEwMDR4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JLyogYXJlYSBndWVzc2VkIGZyb20gZmlybXdhcmUgdjIwLCB2MjEgYW5kIHYyNSAqLwotCWZvciAoaSA9IDB4NjYwOyBpIDwgMHg3MDA7IGkrKykgewotCQlpZiAoIW1lbWNtcCgmZnctPmRhdGFbaV0sIHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSkpIHsKLQkJCXN0YXRlLT5md192ZXJzaW9uID0gZnctPmRhdGFbaSArIHNpemVvZihwYXR0ZXJuKV07Ci0JCQlwcmludGsoS0VSTl9JTkZPICJ0ZGExMDA0eDogdXNpbmcgZmlybXdhcmUgdiUwMnhcbiIsCi0JCQkJCXN0YXRlLT5md192ZXJzaW9uKTsKLQkJCXJldHVybiAwOwotCQl9CisJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GUExMMSwgMHhmMCk7CisJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GUExMMiwgMTApOyAvLyBQTEwgTSA9IDEwCisJaWYgKHN0YXRlLT5jb25maWctPnh0YWxfZnJlcSA9PSBUREExMDA0Nl9YVEFMXzRNICkgeworCQlkcHJpbnRrKCIlczogc2V0dGluZyB1cCBQTExzIGZvciBhIDQgTUh6IFh0YWxcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORlBMTDMsIDApOyAvLyBQTEwgUCA9IE4gPSAwCisJfSBlbHNlIHsKKwkJZHByaW50aygiJXM6IHNldHRpbmcgdXAgUExMcyBmb3IgYSAxNiBNSHogWHRhbFxuIiwgX19GVU5DVElPTl9fKTsKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GUExMMywgMyk7IC8vIFBMTCBQID0gMCwgTiA9IDMKIAl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKKwl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfT0ZGU0VULCA5OSk7CisJc3dpdGNoIChzdGF0ZS0+Y29uZmlnLT5pZl9mcmVxKSB7CisJY2FzZSBUREExMDA0Nl9GUkVRXzM2MTc6CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX01TQiwgMHhkNCk7CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfRlJFUV9QSFkyX0xTQiwgMHgyYyk7CisJCWJyZWFrOworCWNhc2UgVERBMTAwNDZfRlJFUV8zNjEzOgorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9NU0IsIDB4ZDQpOworCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9MU0IsIDB4MTMpOworCQlicmVhazsKKwljYXNlIFREQTEwMDQ2X0ZSRVFfMDQ1OgorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9NU0IsIDB4MGIpOworCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9MU0IsIDB4YTMpOworCQlicmVhazsKKwljYXNlIFREQTEwMDQ2X0ZSRVFfMDUyOgorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9NU0IsIDB4MGMpOworCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9MU0IsIDB4MDYpOworCQlicmVhazsKKwl9CisJdGRhMTAwNDZoX3NldF9iYW5kd2lkdGgoc3RhdGUsIEJBTkRXSURUSF84X01IWik7IC8vIGRlZmF1bHQgYmFuZHdpZHRoIDggTUh6CiB9CiAKIHN0YXRpYyBpbnQgdGRhMTAwNDZfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCiB7CiAJc3RydWN0IHRkYTEwMDR4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAKIAkvKiByZXNldCArIHdha2UgdXAgY2hpcCAqLwotCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgMSwgMCk7CisJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgMCk7CiAJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNDZIX0NPTkZfVFJJU1RBVEUxLCAxLCAwKTsKLQltc2xlZXAoMTAwKTsKKwkvKiBsZXQgdGhlIGNsb2NrcyByZWNvdmVyIGZyb20gc2xlZXAgKi8KKwltc2xlZXAoNSk7CiAKIAkvKiBkb24ndCByZS11cGxvYWQgdW5sZXNzIG5lY2Vzc2FyeSAqLwotCWlmICh0ZGExMDA0eF9jaGVja191cGxvYWRfb2soc3RhdGUsIHN0YXRlLT5md192ZXJzaW9uKSA9PSAwKQorCWlmICh0ZGExMDA0eF9jaGVja191cGxvYWRfb2soc3RhdGUpID09IDApCiAJCXJldHVybiAwOwogCi0JLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayB1bnRpbCBzb21lb25lIHVwbG9hZHMgaXQgKi8KLQlwcmludGsoInRkYTEwMDR4OiB3YWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQgKCVzKS4uLlxuIiwgVERBMTAwNDZfREVGQVVMVF9GSVJNV0FSRSk7Ci0JcmV0ID0gc3RhdGUtPmNvbmZpZy0+cmVxdWVzdF9maXJtd2FyZShmZSwgJmZ3LCBUREExMDA0Nl9ERUZBVUxUX0ZJUk1XQVJFKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50aygidGRhMTAwNHg6IG5vIGZpcm13YXJlIHVwbG9hZCAodGltZW91dCBvciBmaWxlIG5vdCBmb3VuZD8pXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoZnctPnNpemUgPCAyNDQ3OCkgeyAvKiBzaXplIG9mIGZpcm13YXJlIHYyMCwgd2hpY2ggaXMgdGhlIHNtYWxsZXN0IG9mIHYyMCwgdjIxIGFuZCB2MjUgKi8KLQkJcHJpbnRrKCJ0ZGExMDA0eDogZmlybXdhcmUgZmlsZSBzZWVtcyB0byBiZSB0b28gc21hbGwgKCVkIGJ5dGVzKVxuIiwgZnctPnNpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPSB0ZGExMDA0Nl9nZXRfZndfdmVyc2lvbihzdGF0ZSwgZncpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygidGRhMTAwNHg6IHVuYWJsZSB0byBmaW5kIGZpcm13YXJlIHZlcnNpb25cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQogCS8qIHNldCBwYXJhbWV0ZXJzICovCi0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GUExMMiwgMTApOwotCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORlBMTDMsIHN0YXRlLT5jb25maWctPm5faTJjKTsKLQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfT0ZGU0VULCA5OSk7Ci0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTVNCLCAweGQ0KTsKLQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0ZSRVFfUEhZMl9MU0IsIDB4MmMpOwotCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgOCwgOCk7IC8vIGdvaW5nIHRvIGJvb3QgZnJvbSBIT1NUCisJdGRhMTAwNDZfaW5pdF9wbGxzKGZlKTsKIAotCXJldCA9IHRkYTEwMDR4X2RvX3VwbG9hZChzdGF0ZSwgZnctPmRhdGEsIGZ3LT5zaXplLCBUREExMDA0NkhfQ09ERV9DUFQsIFREQTEwMDQ2SF9DT0RFX0lOKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXByaW50aygidGRhMTAwNHg6IGZpcm13YXJlIHVwbG9hZCBjb21wbGV0ZVxuIik7Ci0KLQkvKiB3YWl0IGZvciBEU1AgdG8gaW5pdGlhbGlzZSAqLwotCXRpbWVvdXQgPSBqaWZmaWVzICsgSFo7Ci0Jd2hpbGUgKCEodGRhMTAwNHhfcmVhZF9ieXRlKHN0YXRlLCBUREExMDA0WF9TVEFUVVNfQ0QpICYgMHgyMCkpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCXByaW50aygidGRhMTAwNHg6IERTUCBmYWlsZWQgdG8gaW5pdGlhbGlzZWQuXG4iKTsKLQkJCXJldHVybiAtRUlPOworCWlmIChzdGF0ZS0+Y29uZmlnLT5yZXF1ZXN0X2Zpcm13YXJlICE9IE5VTEwpIHsKKwkJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayB1bnRpbCBzb21lb25lIHVwbG9hZHMgaXQgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAidGRhMTAwNHg6IHdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZC4uLlxuIik7CisJCXJldCA9IHN0YXRlLT5jb25maWctPnJlcXVlc3RfZmlybXdhcmUoZmUsICZmdywgVERBMTAwNDZfREVGQVVMVF9GSVJNV0FSRSk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidGRhMTAwNHg6IG5vIGZpcm13YXJlIHVwbG9hZCAodGltZW91dCBvciBmaWxlIG5vdCBmb3VuZD8pXG4iKTsKKyAgIAkgICAJCXJldHVybiByZXQ7CiAJCX0KLQkJbXNsZWVwKDEpOworCQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDgsIDgpOyAvLyBnb2luZyB0byBib290IGZyb20gSE9TVAorCQlyZXQgPSB0ZGExMDA0eF9kb191cGxvYWQoc3RhdGUsIGZ3LT5kYXRhLCBmdy0+c2l6ZSwgVERBMTAwNDZIX0NPREVfQ1BULCBUREExMDA0NkhfQ09ERV9JTik7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQkvKiBib290IGZyb20gZmlybXdhcmUgZWVwcm9tICovCisJCS8qIEhhYyBOb3RlOiB3ZSBtaWdodCBuZWVkIHRvIGRvIHNvbWUgR1BJTyBNYWdpYyBoZXJlICovCisJCXByaW50ayhLRVJOX0lORk8gInRkYTEwMDR4OiBib290aW5nIGZyb20gZWVwcm9tXG4iKTsKKwkJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCA0LCA0KTsKKwkJbXNsZWVwKDMwMCk7CiAJfQotCi0JcmV0dXJuIHRkYTEwMDR4X2NoZWNrX3VwbG9hZF9vayhzdGF0ZSwgc3RhdGUtPmZ3X3ZlcnNpb24pOworCXJldHVybiB0ZGExMDA0eF9jaGVja191cGxvYWRfb2soc3RhdGUpOwogfQogCiBzdGF0aWMgaW50IHRkYTEwMDR4X2VuY29kZV9mZWMoaW50IGZlYykKQEAgLTU2MCwxMiArNTg3LDEwIEBACiAKIAlpZiAodGRhMTAwNDZfZnd1cGxvYWQoZmUpKSB7CiAJCXByaW50aygidGRhMTAwNHg6IGZpcm13YXJlIHVwbG9hZCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVJTzsKKwkJCXJldHVybiAtRUlPOwogCX0KIAotCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgMSwgMCk7IC8vIHdha2UgdXAgdGhlIGNoaXAKLQotCS8vIEluaXQgdGhlIFBMTAorCS8vIEluaXQgdGhlIHR1bmVyIFBMTAogCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfaW5pdCkgewogCQl0ZGExMDA0eF9lbmFibGVfdHVuZXJfaTJjKHN0YXRlKTsKIAkJc3RhdGUtPmNvbmZpZy0+cGxsX2luaXQoZmUpOwpAQCAtNTc0LDMyICs1OTksNDQgQEAKIAogCS8vIHRkYSBzZXR1cAogCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgMHgyMCwgMCk7IC8vIGRpc2FibGUgRFNQIHdhdGNoZG9nIHRpbWVyCi0JdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfQ09ORkMxLCAweDQwLCAweDQwKTsKLQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0WF9BVVRPLCA4LCAwKTsgLy8gc2VsZWN0IEhQIHN0cmVhbQotCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDMSwgMHg4MCwgMCk7IC8vIGRpc2FibGUgcHVsc2Uga2lsbGVyCi0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GUExMMiwgMTApOyAvLyBQTEwgTSA9IDEwCi0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GUExMMywgc3RhdGUtPmNvbmZpZy0+bl9pMmMpOyAvLyBQTEwgUCA9IE4gPSAwCi0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX09GRlNFVCwgOTkpOyAvLyBGUkVRT0ZGUyA9IDk5Ci0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTVNCLCAweGQ0KTsgLy8gfSBQSFkyID0gLTExMjIxCi0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9GUkVRX1BIWTJfTFNCLCAweDJjKTsgLy8gfQotCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX0NPTkYsIDApOyAvLyBBR0Mgc2V0dXAKLQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0NkhfQ09ORl9QT0xBUklUWSwgMHg2MCwgMHg2MCk7IC8vIHNldCBBR0MgcG9sYXJpdGllcworCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9BVVRPLCA3KTsgLy8gc2VsZWN0IEhQIHN0cmVhbQorCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzEsIDgpOyAvLyBkaXNhYmxlIHB1bHNlIGtpbGxlcgorCisJdGRhMTAwNDZfaW5pdF9wbGxzKGZlKTsKKwlzd2l0Y2ggKHN0YXRlLT5jb25maWctPmFnY19jb25maWcpIHsKKwljYXNlIFREQTEwMDQ2X0FHQ19ERUZBVUxUOgorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19DT05GLCAweDAwKTsgLy8gQUdDIHNldHVwCisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORl9QT0xBUklUWSwgMHg2MCk7IC8vIHNldCBBR0MgcG9sYXJpdGllcworCQlicmVhazsKKwljYXNlIFREQTEwMDQ2X0FHQ19JRk9fQVVUT19ORUc6CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX0NPTkYsIDB4MGEpOyAvLyBBR0Mgc2V0dXAKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GX1BPTEFSSVRZLCAweDYwKTsgLy8gc2V0IEFHQyBwb2xhcml0aWVzCisJCWJyZWFrOworCWNhc2UgVERBMTAwNDZfQUdDX0lGT19BVVRPX1BPUzoKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfQ09ORiwgMHgwYSk7IC8vIEFHQyBzZXR1cAorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZfUE9MQVJJVFksIDB4MDApOyAvLyBzZXQgQUdDIHBvbGFyaXRpZXMKKwkJYnJlYWs7CisJY2FzZSBUREExMDA0Nl9BR0NfVERBODI3WDoKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfQ09ORiwgMHgwMik7ICAgLy8gQUdDIHNldHVwCisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX1RIUiwgMHg3MCk7ICAgIC8vIEFHQyBUaHJlc2hvbGQKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfUkVOT1JNLCAweDBFKTsgLy8gR2FpbiBSZW5vcm1hbGl6ZQorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZfUE9MQVJJVFksIDB4NjApOyAvLyBzZXQgQUdDIHBvbGFyaXRpZXMKKwkJYnJlYWs7CisJfQorCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORl9UUklTVEFURTEsIDB4NjEpOyAvLyBUdXJuIGJvdGggQUdDIG91dHB1dHMgb24KIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19UVU5fTUlOLCAwKTsJICAvLyB9CiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfVFVOX01BWCwgMHhmZik7IC8vIH0gQUdDIG1pbi9tYXggdmFsdWVzCiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfSUZfTUlOLCAwKTsJICAvLyB9CiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfSUZfTUFYLCAweGZmKTsgIC8vIH0KLQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0NkhfQ1ZCRVJfQ1RSTCwgMHgzMCwgMHgxMCk7IC8vIDEwXjYgVkJFUiBtZWFzdXJlbWVudCBiaXRzCiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfR0FJTlMsIDEpOyAvLyBJRiBnYWluIDIsIFRVTiBnYWluIDEKLQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0WF9BVVRPLCAweDgwLCAwKTsgLy8gY3J5c3RhbCBpcyA1MHBwbQorCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ1ZCRVJfQ1RSTCwgMHgxYSk7IC8vIDEwXjYgVkJFUiBtZWFzdXJlbWVudCBiaXRzCiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZfVFMxLCA3KTsgLy8gTVBFRzIgaW50ZXJmYWNlIGNvbmZpZwotCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZfVFMyLCAweDMxLCAwKTsgLy8gTVBFRzIgaW50ZXJmYWNlIGNvbmZpZwotCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDQ2SF9DT05GX1RSSVNUQVRFMSwgMHg5ZSwgMCk7IC8vIGRpc2FibGUgQUdDX1RVTgorCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GX1RTMiwgMHhjMCk7IC8vIE1QRUcyIGludGVyZmFjZSBjb25maWcKKwl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCAweDNhLCAweDgwLCBzdGF0ZS0+Y29uZmlnLT5pbnZlcnRfb2NsayA8PCA3KTsKKwogCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORl9UUklTVEFURTIsIDB4ZTEpOyAvLyB0cmlzdGF0ZSBzZXR1cAogCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfR1BJT19PVVRfU0VMLCAweGNjKTsgLy8gR1BJTyBvdXRwdXQgY29uZmlnCi0JdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNDZIX0dQSU9fU0VMRUNULCA4LCA4KTsgLy8gR1BJTyBzZWxlY3QKLQl0ZGExMDA0Nmhfc2V0X2JhbmR3aWR0aChzdGF0ZSwgQkFORFdJRFRIXzhfTUhaKTsgLy8gZGVmYXVsdCBiYW5kd2lkdGggOCBNSHoKLQotCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIDB4M2EsIDB4ODAsIHN0YXRlLT5jb25maWctPmludmVydF9vY2xrIDw8IDcpOworCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfR1BJT19TRUxFQ1QsIDgpOyAvLyBHUElPIHNlbGVjdAogCiAJc3RhdGUtPmluaXRpYWxpc2VkID0gMTsKIAlyZXR1cm4gMDsKQEAgLTYyOSw5ICs2NjYsNiBAQAogCXN0YXRlLT5jb25maWctPnBsbF9zZXQoZmUsIGZlX3BhcmFtcyk7CiAJdGRhMTAwNHhfZGlzYWJsZV90dW5lcl9pMmMoc3RhdGUpOwogCi0JaWYgKHN0YXRlLT5kZW1vZF90eXBlID09IFREQTEwMDRYX0RFTU9EX1REQTEwMDQ2KQotCQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0NkhfQUdDX0NPTkYsIDQsIDQpOwotCiAJLy8gSGFyZGNvZGVkIHRvIHVzZSBhdXRvIGFzIG11Y2ggYXMgcG9zc2libGUgb24gdGhlIFREQTEwMDQ1IGFzIGl0CiAJLy8gaXMgdmVyeSB1bnJlbGlhYmxlIGlmIEFVVE8gbW9kZSBpcyBfbm90XyB1c2VkLgogCWlmIChzdGF0ZS0+ZGVtb2RfdHlwZSA9PSBUREExMDA0WF9ERU1PRF9UREExMDA0NSkgewpAQCAtMTA4OSw2ICsxMTIzLDExIEBACiAJCWJyZWFrOwogCiAJY2FzZSBUREExMDA0WF9ERU1PRF9UREExMDA0NjoKKwkJaWYgKHN0YXRlLT5jb25maWctPnBsbF9zbGVlcCAhPSBOVUxMKSB7CisJCQl0ZGExMDA0eF9lbmFibGVfdHVuZXJfaTJjKHN0YXRlKTsKKwkJCXN0YXRlLT5jb25maWctPnBsbF9zbGVlcChmZSk7CisJCQl0ZGExMDA0eF9kaXNhYmxlX3R1bmVyX2kyYyhzdGF0ZSk7CisJCX0KIAkJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCAxLCAxKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTEwMCw4ICsxMTM5LDkgQEAKIHN0YXRpYyBpbnQgdGRhMTAwNHhfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyogZmVzZXR0aW5ncykKIHsKIAlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSA4MDA7Ci0JZmVzZXR0aW5ncy0+c3RlcF9zaXplID0gMTY2NjY3OwotCWZlc2V0dGluZ3MtPm1heF9kcmlmdCA9IDE2NjY2NyoyOworCS8qIERyaWZ0IGNvbXBlbnNhdGlvbiBtYWtlcyBubyBzZW5zZSBmb3IgRFZCLVQgKi8KKwlmZXNldHRpbmdzLT5zdGVwX3NpemUgPSAwOworCWZlc2V0dGluZ3MtPm1heF9kcmlmdCA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMTYsNyArMTI1Niw2IEBACiAJbWVtY3B5KCZzdGF0ZS0+b3BzLCAmdGRhMTAwNDZfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKIAlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAwOwogCXN0YXRlLT5kZW1vZF90eXBlID0gVERBMTAwNFhfREVNT0RfVERBMTAwNDY7Ci0Jc3RhdGUtPmZ3X3ZlcnNpb24gPSAweDIwOwkvKiBkdW1teSBkZWZhdWx0IHZhbHVlICovCiAKIAkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KIAlpZiAodGRhMTAwNHhfcmVhZF9ieXRlKHN0YXRlLCBUREExMDA0WF9DSElQSUQpICE9IDB4NDYpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmgKaW5kZXggYzhlMWQ1NC4uODY1OWM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmgKQEAgLTI2LDYgKzI2LDI1IEBACiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAorZW51bSB0ZGExMDA0Nl94dGFsIHsKKwlUREExMDA0Nl9YVEFMXzRNLAorCVREQTEwMDQ2X1hUQUxfMTZNLAorfTsKKworZW51bSB0ZGExMDA0Nl9hZ2MgeworCVREQTEwMDQ2X0FHQ19ERUZBVUxULAkJLyogb3JpZ2luYWwgY29uZmlndXJhdGlvbiAqLworCVREQTEwMDQ2X0FHQ19JRk9fQVVUT19ORUcsCS8qIElGIEFHQyBvbmx5LCBhdXRvbWF0aWMsIG5lZ3RpdmUgKi8KKwlUREExMDA0Nl9BR0NfSUZPX0FVVE9fUE9TLAkvKiBJRiBBR0Mgb25seSwgYXV0b21hdGljLCBwb3NpdGl2ZSAqLworCVREQTEwMDQ2X0FHQ19UREE4MjdYLAkgICAgLyogSUYgQUdDIG9ubHksIHNwZWNpYWwgc2V0dXAgZm9yIHRkYTgyN3ggKi8KK307CisKK2VudW0gdGRhMTAwNDZfaWYgeworCVREQTEwMDQ2X0ZSRVFfMzYxNywJCS8qIG9yaWdpbmFsIGNvbmZpZywgMzYsMTY2IE1IWiAqLworCVREQTEwMDQ2X0ZSRVFfMzYxMywJCS8qIDM2LDEzIE1IWiAqLworCVREQTEwMDQ2X0ZSRVFfMDQ1LAkJLyogbG93IElGLCA0LjAsIDQuNSwgb3IgNS4wIE1IWiAqLworCVREQTEwMDQ2X0ZSRVFfMDUyLAkJLyogbG93IElGLCA1LjE2NjcgTUhaIGZvciB0ZGE5ODg5ICovCit9OworCiBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnCiB7CiAJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KQEAgLTM3LDE0ICs1NiwyMiBAQAogCS8qIERvZXMgdGhlIE9DTEsgc2lnbmFsIG5lZWQgaW52ZXJ0ZWQ/ICovCiAJdTggaW52ZXJ0X29jbGs7CiAKLQkvKiB2YWx1ZSBvZiBOX0kyQyBvZiB0aGUgQ09ORl9QTEwzIHJlZ2lzdGVyICovCi0JdTggbl9pMmM7CisJLyogWHRhbCBmcmVxdWVuY3ksIDQgb3IgMTZNSHoqLworCWVudW0gdGRhMTAwNDZfeHRhbCB4dGFsX2ZyZXE7CisKKwkvKiBJRiBmcmVxdWVuY3kgKi8KKwllbnVtIHRkYTEwMDQ2X2lmIGlmX2ZyZXE7CisKKwkvKiBBR0MgY29uZmlndXJhdGlvbiAqLworCWVudW0gdGRhMTAwNDZfYWdjIGFnY19jb25maWc7CiAKIAkvKiBQTEwgbWFpbnRlbmFuY2UgKi8KIAlpbnQgKCpwbGxfaW5pdCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOworCXZvaWQgKCpwbGxfc2xlZXApKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIAlpbnQgKCpwbGxfc2V0KShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpOwogCiAJLyogcmVxdWVzdCBmaXJtd2FyZSBmb3IgZGV2aWNlICovCisJLyogc2V0IHRoaXMgdG8gTlVMTCBpZiB0aGUgY2FyZCBoYXMgYSBmaXJtd2FyZSBFRVBST00gKi8KIAlpbnQgKCpyZXF1ZXN0X2Zpcm13YXJlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNoYXIqIG5hbWUpOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgweHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MHh4LmMKaW5kZXggMDMyZDM0OC4uODhlMTI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgweHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODB4eC5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDI4NDJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL0tjb25maWcKQEAgLTAsMCArMSwxNiBAQAorY29uZmlnIERWQl9QTFVUTzIKKwl0cmlzdGF0ZSAiUGx1dG8yIGNhcmRzIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJCisJc2VsZWN0IEkyQworCXNlbGVjdCBJMkNfQUxHT0JJVAorCXNlbGVjdCBEVkJfVERBMTAwNFgKKwloZWxwCisJICBTdXBwb3J0IGZvciBQQ0kgY2FyZHMgYmFzZWQgb24gdGhlIFBsdXRvMiBGUEdBIGxpa2UgdGhlIFNhdGVsY28KKwkgIEVhc3l3YXRjaCBNb2JpbGUgVGVycmVzdHJpYWwgRFZCLVQgUmVjZWl2ZXIuCisKKyAgICAgICAgICBTaW5jZSB0aGVzZSBjYXJkcyBoYXZlIG5vIE1QRUcgZGVjb2RlciBvbmJvYXJkLCB0aGV5IHRyYW5zbWl0CisJICBvbmx5IGNvbXByZXNzZWQgTVBFRyBkYXRhIG92ZXIgdGhlIFBDSSBidXMsIHNvIHlvdSBuZWVkCisJICBhbiBleHRlcm5hbCBzb2Z0d2FyZSBkZWNvZGVyIHRvIHdhdGNoIFRWIG9uIHlvdXIgY29tcHV0ZXIuCisKKwkgIFNheSBZIG9yIE0gaWYgeW91IG93biBzdWNoIGEgZGV2aWNlIGFuZCB3YW50IHRvIHVzZSBpdC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2Y2E4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmotJChDT05GSUdfRFZCX1BMVVRPMikgPSBwbHV0bzIubworCitFWFRSQV9DRkxBR1MgPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLyAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDZlMGJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCkBAIC0wLDAgKzEsODA5IEBACisvKgorICogcGx1dG8yLmMgLSBTYXRlbGNvIEVhc3l3YXRjaCBNb2JpbGUgVGVycmVzdHJpYWwgUmVjZWl2ZXIgW0RWQi1UXQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBsaW51eHR2Lm9yZz4KKyAqCisgKiBiYXNlZCBvbiBwbHV0bzIuYyAxLjEwIC0gaHR0cDovL2luc3RpbmN0LXdwOC5uby1pcC5vcmcvcGx1dG8vCisgKiAJYnkgRGFueSBTYWxtYW4gPHNhbG1hbmRhbnlAeWFob28uZnI+CisgKglDb3B5cmlnaHQgKGMpIDIwMDQgVERGCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgImRlbXV4LmgiCisjaW5jbHVkZSAiZG14ZGV2LmgiCisjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiZHZiX25ldC5oIgorI2luY2x1ZGUgImR2YmRldi5oIgorI2luY2x1ZGUgInRkYTEwMDR4LmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJCSJwbHV0bzIiCisKKyNkZWZpbmUgUkVHX1BJRG4obikJCSgobikgPDwgMikJLyogUElEIG4gcGF0dGVybiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkVHX1BDQVIJCTB4MDAyMAkJLyogUEMgYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZSBSRUdfVFNDUgkJMHgwMDI0CQkvKiBUUyBjdHJsICYgc3RhdHVzICovCisjZGVmaW5lIFJFR19NSVNDCQkweDAwMjgJCS8qIG1pc2NlbGxhbmVvdXMgKi8KKyNkZWZpbmUgUkVHX01NQUMJCTB4MDAyYwkJLyogTVNCIE1BQyBhZGRyZXNzICovCisjZGVmaW5lIFJFR19JTUFDCQkweDAwMzAJCS8qIElTQiBNQUMgYWRkcmVzcyAqLworI2RlZmluZSBSRUdfTE1BQwkJMHgwMDM0CQkvKiBMU0IgTUFDIGFkZHJlc3MgKi8KKyNkZWZpbmUgUkVHX1NQSUQJCTB4MDAzOAkJLyogU1BJIGRhdGEgKi8KKyNkZWZpbmUgUkVHX1NMQ1MJCTB4MDAzYwkJLyogc2VyaWFsIGxpbmtzIGN0cmwvc3RhdHVzICovCisKKyNkZWZpbmUgUElEMF9OT0ZJTAkJKDB4MDAwMSA8PCAxNikKKyNkZWZpbmUgUElEbl9FTlAJCSgweDAwMDEgPDwgMTUpCisjZGVmaW5lIFBJRDBfRU5ECQkoMHgwMDAxIDw8IDE0KQorI2RlZmluZSBQSUQwX0FGSUwJCSgweDAwMDEgPDwgMTMpCisjZGVmaW5lIFBJRG5fUElECQkoMHgxZmZmIDw8ICAwKQorCisjZGVmaW5lIFRTQ1JfTkJQQUNLRVRTCQkoMHgwMGZmIDw8IDI0KQorI2RlZmluZSBUU0NSX0RFTQkJKDB4MDAwMSA8PCAxNykKKyNkZWZpbmUgVFNDUl9ERQkJCSgweDAwMDEgPDwgMTYpCisjZGVmaW5lIFRTQ1JfUlNUTgkJKDB4MDAwMSA8PCAxNSkKKyNkZWZpbmUgVFNDUl9NU0tPCQkoMHgwMDAxIDw8IDE0KQorI2RlZmluZSBUU0NSX01TS0EJCSgweDAwMDEgPDwgMTMpCisjZGVmaW5lIFRTQ1JfTVNLTAkJKDB4MDAwMSA8PCAxMikKKyNkZWZpbmUgVFNDUl9PVlIJCSgweDAwMDEgPDwgMTEpCisjZGVmaW5lIFRTQ1JfQUZVTAkJKDB4MDAwMSA8PCAxMCkKKyNkZWZpbmUgVFNDUl9MT0NLCQkoMHgwMDAxIDw8ICA5KQorI2RlZmluZSBUU0NSX0lBQ0sJCSgweDAwMDEgPDwgIDgpCisjZGVmaW5lIFRTQ1JfQURFRgkJKDB4MDA3ZiA8PCAgMCkKKworI2RlZmluZSBNSVNDX0RWUgkJKDB4MGZmZiA8PCAgNCkKKyNkZWZpbmUgTUlTQ19BTEVECQkoMHgwMDAxIDw8ICAzKQorI2RlZmluZSBNSVNDX0ZSU1QJCSgweDAwMDEgPDwgIDIpCisjZGVmaW5lIE1JU0NfTEVEMQkJKDB4MDAwMSA8PCAgMSkKKyNkZWZpbmUgTUlTQ19MRUQwCQkoMHgwMDAxIDw8ICAwKQorCisjZGVmaW5lIFNQSURfU1BJRFIJCSgweDAwZmYgPDwgIDApCisKKyNkZWZpbmUgU0xDU19TQ0wJCSgweDAwMDEgPDwgIDcpCisjZGVmaW5lIFNMQ1NfU0RBCQkoMHgwMDAxIDw8ICA2KQorI2RlZmluZSBTTENTX0NTTgkJKDB4MDAwMSA8PCAgMikKKyNkZWZpbmUgU0xDU19PVlIJCSgweDAwMDEgPDwgIDEpCisjZGVmaW5lIFNMQ1NfU1dDCQkoMHgwMDAxIDw8ICAwKQorCisjZGVmaW5lIFRTX0RNQV9QQUNLRVRTCQkoOCkKKyNkZWZpbmUgVFNfRE1BX0JZVEVTCQkoMTg4ICogVFNfRE1BX1BBQ0tFVFMpCisKKyNkZWZpbmUgSTJDX0FERFJfVERBMTAwNDYJMHgxMAorI2RlZmluZSBJMkNfQUREUl9UVUE2MDM0CTB4YzIKKyNkZWZpbmUgTkhXRklMVEVSUwkJOAorCitzdHJ1Y3QgcGx1dG8geworCS8qIHBjaSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXU4IF9faW9tZW0gKmlvX21lbTsKKworCS8qIGR2YiAqLworCXN0cnVjdCBkbXhfZnJvbnRlbmQgaHdfZnJvbnRlbmQ7CisJc3RydWN0IGRteF9mcm9udGVuZCBtZW1fZnJvbnRlbmQ7CisJc3RydWN0IGRteGRldiBkbXhkZXY7CisJc3RydWN0IGR2Yl9hZGFwdGVyIGR2Yl9hZGFwdGVyOworCXN0cnVjdCBkdmJfZGVtdXggZGVtdXg7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJc3RydWN0IGR2Yl9uZXQgZHZibmV0OworCXVuc2lnbmVkIGludCBmdWxsX3RzX3VzZXJzOworCXVuc2lnbmVkIGludCB1c2VyczsKKworCS8qIGkyYyAqLworCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBpMmNfYml0OworCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKKwl1bnNpZ25lZCBpbnQgaTJjYnVnOworCisJLyogaXJxICovCisJdW5zaWduZWQgaW50IG92ZXJmbG93OworCisJLyogZG1hICovCisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwl1OCBkbWFfYnVmW1RTX0RNQV9CWVRFU107CisJdTggZHVtbXlbNDA5Nl07Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbHV0byAqZmVlZF90b19wbHV0byhzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZWVkLT5kZW11eCwgc3RydWN0IHBsdXRvLCBkZW11eCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsdXRvICpmcm9udGVuZF90b19wbHV0byhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGZlLT5kdmIsIHN0cnVjdCBwbHV0bywgZHZiX2FkYXB0ZXIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBwbHV0b19yZWFkcmVnKHN0cnVjdCBwbHV0byAqcGx1dG8sIHUzMiByZWcpCit7CisJcmV0dXJuIHJlYWRsKCZwbHV0by0+aW9fbWVtW3JlZ10pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGx1dG9fd3JpdGVyZWcoc3RydWN0IHBsdXRvICpwbHV0bywgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCAmcGx1dG8tPmlvX21lbVtyZWddKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBsdXRvX3J3KHN0cnVjdCBwbHV0byAqcGx1dG8sIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgYml0cykKK3sKKwl1MzIgdmFsID0gcmVhZGwoJnBsdXRvLT5pb19tZW1bcmVnXSk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBiaXRzOworCXdyaXRlbCh2YWwsICZwbHV0by0+aW9fbWVtW3JlZ10pOworfQorCitzdGF0aWMgdm9pZCBwbHV0b19zZXRzZGEodm9pZCAqZGF0YSwgaW50IHN0YXRlKQoreworCXN0cnVjdCBwbHV0byAqcGx1dG8gPSBkYXRhOworCisJaWYgKHN0YXRlKQorCQlwbHV0b19ydyhwbHV0bywgUkVHX1NMQ1MsIFNMQ1NfU0RBLCBTTENTX1NEQSk7CisJZWxzZQorCQlwbHV0b19ydyhwbHV0bywgUkVHX1NMQ1MsIFNMQ1NfU0RBLCAwKTsKK30KKworc3RhdGljIHZvaWQgcGx1dG9fc2V0c2NsKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGx1dG8gKnBsdXRvID0gZGF0YTsKKworCWlmIChzdGF0ZSkKKwkJcGx1dG9fcncocGx1dG8sIFJFR19TTENTLCBTTENTX1NDTCwgU0xDU19TQ0wpOworCWVsc2UKKwkJcGx1dG9fcncocGx1dG8sIFJFR19TTENTLCBTTENTX1NDTCwgMCk7CisKKwkvKiB0cnkgdG8gZGV0ZWN0IGkyY19pbmIoKSB0byB3b3JrYXJvdW5kIGhhcmR3YXJlIGJ1ZzoKKwkgKiByZXNldCBTREEgdG8gaGlnaCBhZnRlciBTQ0wgaGFzIGJlZW4gc2V0IHRvIGxvdyAqLworCWlmICgoc3RhdGUpICYmIChwbHV0by0+aTJjYnVnID09IDApKSB7CisJCXBsdXRvLT5pMmNidWcgPSAxOworCX0gZWxzZSB7CisJCWlmICgoIXN0YXRlKSAmJiAocGx1dG8tPmkyY2J1ZyA9PSAxKSkKKwkJCXBsdXRvX3NldHNkYShwbHV0bywgMSk7CisJCXBsdXRvLT5pMmNidWcgPSAwOworCX0KK30KKworc3RhdGljIGludCBwbHV0b19nZXRzZGEodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGx1dG8gKnBsdXRvID0gZGF0YTsKKworCXJldHVybiBwbHV0b19yZWFkcmVnKHBsdXRvLCBSRUdfU0xDUykgJiBTTENTX1NEQTsKK30KKworc3RhdGljIGludCBwbHV0b19nZXRzY2wodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGx1dG8gKnBsdXRvID0gZGF0YTsKKworCXJldHVybiBwbHV0b19yZWFkcmVnKHBsdXRvLCBSRUdfU0xDUykgJiBTTENTX1NDTDsKK30KKworc3RhdGljIHZvaWQgcGx1dG9fcmVzZXRfZnJvbnRlbmQoc3RydWN0IHBsdXRvICpwbHV0bywgaW50IHJlZW5hYmxlKQoreworCXUzMiB2YWwgPSBwbHV0b19yZWFkcmVnKHBsdXRvLCBSRUdfTUlTQyk7CisKKwlpZiAodmFsICYgTUlTQ19GUlNUKSB7CisJCXZhbCAmPSB+TUlTQ19GUlNUOworCQlwbHV0b193cml0ZXJlZyhwbHV0bywgUkVHX01JU0MsIHZhbCk7CisJfQorCWlmIChyZWVuYWJsZSkgeworCQl2YWwgfD0gTUlTQ19GUlNUOworCQlwbHV0b193cml0ZXJlZyhwbHV0bywgUkVHX01JU0MsIHZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwbHV0b19yZXNldF90cyhzdHJ1Y3QgcGx1dG8gKnBsdXRvLCBpbnQgcmVlbmFibGUpCit7CisJdTMyIHZhbCA9IHBsdXRvX3JlYWRyZWcocGx1dG8sIFJFR19UU0NSKTsKKworCWlmICh2YWwgJiBUU0NSX1JTVE4pIHsKKwkJdmFsICY9IH5UU0NSX1JTVE47CisJCXBsdXRvX3dyaXRlcmVnKHBsdXRvLCBSRUdfVFNDUiwgdmFsKTsKKwl9CisJaWYgKHJlZW5hYmxlKSB7CisJCXZhbCB8PSBUU0NSX1JTVE47CisJCXBsdXRvX3dyaXRlcmVnKHBsdXRvLCBSRUdfVFNDUiwgdmFsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBsdXRvX3NldF9kbWFfYWRkcihzdHJ1Y3QgcGx1dG8gKnBsdXRvKQoreworCXBsdXRvX3dyaXRlcmVnKHBsdXRvLCBSRUdfUENBUiwgY3B1X3RvX2xlMzIocGx1dG8tPmRtYV9hZGRyKSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBsdXRvX2RtYV9tYXAoc3RydWN0IHBsdXRvICpwbHV0bykKK3sKKwlwbHV0by0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwbHV0by0+cGRldiwgcGx1dG8tPmRtYV9idWYsCisJCQlUU19ETUFfQllURVMsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlyZXR1cm4gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBsdXRvLT5kbWFfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHBsdXRvX2RtYV91bm1hcChzdHJ1Y3QgcGx1dG8gKnBsdXRvKQoreworCXBjaV91bm1hcF9zaW5nbGUocGx1dG8tPnBkZXYsIHBsdXRvLT5kbWFfYWRkciwKKwkJCVRTX0RNQV9CWVRFUywgUENJX0RNQV9GUk9NREVWSUNFKTsKK30KKworc3RhdGljIGludCBwbHV0b19zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZikKK3sKKwlzdHJ1Y3QgcGx1dG8gKnBsdXRvID0gZmVlZF90b19wbHV0byhmKTsKKworCS8qIGVuYWJsZSBQSUQgZmlsdGVyaW5nICovCisJaWYgKHBsdXRvLT51c2VycysrID09IDApCisJCXBsdXRvX3J3KHBsdXRvLCBSRUdfUElEbigwKSwgUElEMF9BRklMIHwgUElEMF9OT0ZJTCwgMCk7CisKKwlpZiAoKGYtPnBpZCA8IDB4MjAwMCkgJiYgKGYtPmluZGV4IDwgTkhXRklMVEVSUykpCisJCXBsdXRvX3J3KHBsdXRvLCBSRUdfUElEbihmLT5pbmRleCksIFBJRG5fRU5QIHwgUElEbl9QSUQsIFBJRG5fRU5QIHwgZi0+cGlkKTsKKwllbHNlIGlmIChwbHV0by0+ZnVsbF90c191c2VycysrID09IDApCisJCXBsdXRvX3J3KHBsdXRvLCBSRUdfUElEbigwKSwgUElEMF9OT0ZJTCwgUElEMF9OT0ZJTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbHV0b19zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQoreworCXN0cnVjdCBwbHV0byAqcGx1dG8gPSBmZWVkX3RvX3BsdXRvKGYpOworCisJLyogZGlzYWJsZSBQSUQgZmlsdGVyaW5nICovCisJaWYgKC0tcGx1dG8tPnVzZXJzID09IDApCisJCXBsdXRvX3J3KHBsdXRvLCBSRUdfUElEbigwKSwgUElEMF9BRklMLCBQSUQwX0FGSUwpOworCisJaWYgKChmLT5waWQgPCAweDIwMDApICYmIChmLT5pbmRleCA8IE5IV0ZJTFRFUlMpKQorCQlwbHV0b19ydyhwbHV0bywgUkVHX1BJRG4oZi0+aW5kZXgpLCBQSURuX0VOUCB8IFBJRG5fUElELCAweDFmZmYpOworCWVsc2UgaWYgKC0tcGx1dG8tPmZ1bGxfdHNfdXNlcnMgPT0gMCkKKwkJcGx1dG9fcncocGx1dG8sIFJFR19QSURuKDApLCBQSUQwX05PRklMLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwbHV0b19kbWFfZW5kKHN0cnVjdCBwbHV0byAqcGx1dG8sIHVuc2lnbmVkIGludCBuYnBhY2tldHMpCit7CisJLyogc3luY2hyb25pemUgdGhlIERNQSB0cmFuc2ZlciB3aXRoIHRoZSBDUFUKKwkgKiBmaXJzdCBzbyB0aGF0IHdlIHNlZSB1cGRhdGVkIGNvbnRlbnRzLiAqLworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwbHV0by0+cGRldiwgcGx1dG8tPmRtYV9hZGRyLAorCQkJVFNfRE1BX0JZVEVTLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJLyogV29ya2Fyb3VuZCBmb3IgYnJva2VuIGhhcmR3YXJlOgorCSAqIFsxXSBPbiBzdGFydHVwIE5CUEFDS0VUUyBzZWVtcyB0byBjb250YWluIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUsCisJICogICAgIGJ1dCBubyBwYWNrZXRzIGhhdmUgYmVlbiB0cmFuc2ZlcmVkLgorCSAqIFsyXSBTb21ldGltZXMgKGFjdHVhbGx5IHZlcnkgb2Z0ZW4pIE5CUEFDS0VUUyBzdGF5cyBhdCB6ZXJvCisJICogICAgIGFsdGhvdWdoIG9uZSBwYWNrZXQgaGFzIGJlZW4gdHJhbnNmZXJlZC4KKwkgKi8KKwlpZiAoKG5icGFja2V0cyA9PSAwKSB8fCAobmJwYWNrZXRzID4gVFNfRE1BX1BBQ0tFVFMpKSB7CisJCXVuc2lnbmVkIGludCBpID0gMCwgdmFsaWQ7CisJCXdoaWxlIChwbHV0by0+ZG1hX2J1ZltpXSA9PSAweDQ3KQorCQkJaSArPSAxODg7CisJCXZhbGlkID0gaSAvIDE4ODsKKwkJaWYgKG5icGFja2V0cyAhPSB2YWxpZCkgeworCQkJZGV2X2VycigmcGx1dG8tPnBkZXYtPmRldiwgIm5icGFja2V0cz0ldSB2YWxpZD0ldVxuIiwKKwkJCQkJbmJwYWNrZXRzLCB2YWxpZCk7CisJCQluYnBhY2tldHMgPSB2YWxpZDsKKwkJfQorCX0KKworCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmcGx1dG8tPmRlbXV4LCBwbHV0by0+ZG1hX2J1ZiwgbmJwYWNrZXRzKTsKKworCS8qIGNsZWFyIHRoZSBkbWEgYnVmZmVyLiB0aGlzIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5CisJICogbmV3IHZhbGlkIHRzIHBhY2tldHMgYWJvdmUgKi8KKwltZW1zZXQocGx1dG8tPmRtYV9idWYsIDAsIG5icGFja2V0cyAqIDE4OCk7CisKKwkvKiByZXNldCB0aGUgZG1hIGFkZHJlc3MgKi8KKwlwbHV0b19zZXRfZG1hX2FkZHIocGx1dG8pOworCisJLyogc3luYyB0aGUgYnVmZmVyIGFuZCBnaXZlIGl0IGJhY2sgdG8gdGhlIGNhcmQgKi8KKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocGx1dG8tPnBkZXYsIHBsdXRvLT5kbWFfYWRkciwKKwkJCVRTX0RNQV9CWVRFUywgUENJX0RNQV9GUk9NREVWSUNFKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHBsdXRvX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwbHV0byAqcGx1dG8gPSBkZXZfaWQ7CisJdTMyIHRzY3I7CisKKwkvKiBjaGVjayB3aGV0aGVyIGFuIGludGVycnVwdCBvY2N1cmVkIG9uIHRoaXMgZGV2aWNlICovCisJdHNjciA9IHBsdXRvX3JlYWRyZWcocGx1dG8sIFJFR19UU0NSKTsKKwlpZiAoISh0c2NyICYgKFRTQ1JfREUgfCBUU0NSX09WUikpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAodHNjciA9PSAweGZmZmZmZmZmKSB7CisJCS8vIEZJWE1FOiBtYXliZSByZWNvdmVyIHNvbWVob3cKKwkJZGV2X2VycigmcGx1dG8tPnBkZXYtPmRldiwgImNhcmQgaHVuZyB1cCA6KFxuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwkvKiBkbWEgZW5kIGludGVycnVwdCAqLworCWlmICh0c2NyICYgVFNDUl9ERSkgeworCQlwbHV0b19kbWFfZW5kKHBsdXRvLCAodHNjciAmIFRTQ1JfTkJQQUNLRVRTKSA+PiAyNCk7CisJCS8qIG92ZXJmbG93IGludGVycnVwdCAqLworCQlpZiAodHNjciAmIFRTQ1JfT1ZSKQorCQkJcGx1dG8tPm92ZXJmbG93Kys7CisJCWlmIChwbHV0by0+b3ZlcmZsb3cpIHsKKwkJCWRldl9lcnIoJnBsdXRvLT5wZGV2LT5kZXYsICJvdmVyZmxvdyBpcnEgKCVkKVxuIiwKKwkJCQkJcGx1dG8tPm92ZXJmbG93KTsKKwkJCXBsdXRvX3Jlc2V0X3RzKHBsdXRvLCAxKTsKKwkJCXBsdXRvLT5vdmVyZmxvdyA9IDA7CisJCX0KKwl9IGVsc2UgaWYgKHRzY3IgJiBUU0NSX09WUikgeworCQlwbHV0by0+b3ZlcmZsb3crKzsKKwl9CisKKwkvKiBBQ0sgdGhlIGludGVycnVwdCAqLworCXBsdXRvX3dyaXRlcmVnKHBsdXRvLCBSRUdfVFNDUiwgdHNjciB8IFRTQ1JfSUFDSyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwbHV0b19lbmFibGVfaXJxcyhzdHJ1Y3QgcGx1dG8gKnBsdXRvKQoreworCXUzMiB2YWwgPSBwbHV0b19yZWFkcmVnKHBsdXRvLCBSRUdfVFNDUik7CisKKwkvKiBzZXQgdGhlIG51bWJlciBvZiBwYWNrZXRzICovCisJdmFsICY9IH5UU0NSX0FERUY7CisJdmFsIHw9IFRTX0RNQV9QQUNLRVRTIC8gMjsKKwkvKiBkaXNhYmxlIEFGVUwgYW5kIExPQ0sgaW50ZXJydXB0cyAqLworCXZhbCB8PSAoVFNDUl9NU0tBIHwgVFNDUl9NU0tMKTsKKwkvKiBlbmFibGUgRE1BIGFuZCBPVkVSRkxPVyBpbnRlcnJ1cHRzICovCisJdmFsICY9IH4oVFNDUl9ERU0gfCBUU0NSX01TS08pOworCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLworCXZhbCB8PSBUU0NSX0lBQ0s7CisKKwlwbHV0b193cml0ZXJlZyhwbHV0bywgUkVHX1RTQ1IsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHBsdXRvX2Rpc2FibGVfaXJxcyhzdHJ1Y3QgcGx1dG8gKnBsdXRvKQoreworCXUzMiB2YWwgPSBwbHV0b19yZWFkcmVnKHBsdXRvLCBSRUdfVFNDUik7CisKKwkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJdmFsIHw9IChUU0NSX0RFTSB8IFRTQ1JfTVNLTyB8IFRTQ1JfTVNLQSB8IFRTQ1JfTVNLTCk7CisJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJdmFsIHw9IFRTQ1JfSUFDSzsKKworCXBsdXRvX3dyaXRlcmVnKHBsdXRvLCBSRUdfVFNDUiwgdmFsKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcGx1dG9faHdfaW5pdChzdHJ1Y3QgcGx1dG8gKnBsdXRvKQoreworCXBsdXRvX3Jlc2V0X2Zyb250ZW5kKHBsdXRvLCAxKTsKKworCS8qIHNldCBhdXRvbWF0aWMgTEVEIGNvbnRyb2wgYnkgRlBHQSAqLworCXBsdXRvX3J3KHBsdXRvLCBSRUdfTUlTQywgTUlTQ19BTEVELCBNSVNDX0FMRUQpOworCisJLyogc2V0IGRhdGEgZW5kaWFuZXNzICovCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisJcGx1dG9fcncocGx1dG8sIFJFR19QSURuKDApLCBQSUQwX0VORCwgUElEMF9FTkQpOworI2Vsc2UKKwlwbHV0b19ydyhwbHV0bywgUkVHX1BJRG4oMCksIFBJRDBfRU5ELCAwKTsKKyNlbmRpZgorCS8qIG1hcCBETUEgYW5kIHNldCBhZGRyZXNzICovCisJcGx1dG9fZG1hX21hcChwbHV0byk7CisJcGx1dG9fc2V0X2RtYV9hZGRyKHBsdXRvKTsKKworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJcGx1dG9fZW5hYmxlX2lycXMocGx1dG8pOworCisJLyogcmVzZXQgVFMgbG9naWMgKi8KKwlwbHV0b19yZXNldF90cyhwbHV0bywgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGx1dG9faHdfZXhpdChzdHJ1Y3QgcGx1dG8gKnBsdXRvKQoreworCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCXBsdXRvX2Rpc2FibGVfaXJxcyhwbHV0byk7CisKKwlwbHV0b19yZXNldF90cyhwbHV0bywgMCk7CisKKwkvKiBMRUQ6IGRpc2FibGUgYXV0b21hdGljIGNvbnRyb2wsIGVuYWJsZSB5ZWxsb3csIGRpc2FibGUgZ3JlZW4gKi8KKwlwbHV0b19ydyhwbHV0bywgUkVHX01JU0MsIE1JU0NfQUxFRCB8IE1JU0NfTEVEMSB8IE1JU0NfTEVEMCwgTUlTQ19MRUQxKTsKKworCS8qIHVubWFwIERNQSAqLworCXBsdXRvX2RtYV91bm1hcChwbHV0byk7CisKKwlwbHV0b19yZXNldF9mcm9udGVuZChwbHV0bywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRpdmlkZSh1MzIgbnVtZXJhdG9yLCB1MzIgZGVub21pbmF0b3IpCit7CisJaWYgKGRlbm9taW5hdG9yID09IDApCisJCXJldHVybiB+MDsKKworCXJldHVybiAobnVtZXJhdG9yICsgZGVub21pbmF0b3IgLyAyKSAvIGRlbm9taW5hdG9yOworfQorCisvKiBMRyBJbm5vdGVrIFREVEUtRTAwMVAgKEluZmluZW9uIFRVQTYwMzQpICovCitzdGF0aWMgaW50IGxnX3RkdHBlMDAxcF9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgcGx1dG8gKnBsdXRvID0gZnJvbnRlbmRfdG9fcGx1dG8oZmUpOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwlpbnQgcmV0OworCXU4IGJ1Zls0XTsKKwl1MzIgZGl2OworCisJLy8gRnJlZiA9IDE2Ni42NjcgSHoKKwkvLyBGcmVmICogMyA9IDUwMC4wMDAgSHoKKwkvLyBJRiA9IDM2MTY2NjY3CisJLy8gSUYgLyBGcmVmID0gMjE3CisJLy9kaXYgPSBkaXZpZGUocC0+ZnJlcXVlbmN5ICsgMzYxNjY2NjcsIDE2NjY2Nyk7CisJZGl2ID0gZGl2aWRlKHAtPmZyZXF1ZW5jeSAqIDMsIDUwMDAwMCkgKyAyMTc7CisJYnVmWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7CisJYnVmWzFdID0gKGRpdiA+PiAwKSAmIDB4ZmY7CisKKwlpZiAocC0+ZnJlcXVlbmN5IDwgNjExMDAwMDAwKQorCQlidWZbMl0gPSAweGI0OworCWVsc2UgaWYgKHAtPmZyZXF1ZW5jeSA8IDgxMTAwMDAwMCkKKwkJYnVmWzJdID0gMHhiYzsKKwllbHNlCisJCWJ1ZlsyXSA9IDB4ZjQ7CisKKwkvLyBWSEY6IDE3NC0yMzAgTUh6CisJLy8gY2VudGVyOiAzNTAgTUh6CisJLy8gVUhGOiA0NzAtODYyIE1IegorCWlmIChwLT5mcmVxdWVuY3kgPCAzNTAwMDAwMDApCisJCWJ1ZlszXSA9IDB4MDI7CisJZWxzZQorCQlidWZbM10gPSAweDA0OworCisJaWYgKHAtPnUub2ZkbS5iYW5kd2lkdGggPT0gQkFORFdJRFRIXzhfTUhaKQorCQlidWZbM10gfD0gMHgwODsKKworCWlmIChzaXplb2YoYnVmKSA9PSA2KSB7CisJCWJ1Zls0XSA9IGJ1ZlsyXTsKKwkJYnVmWzRdICY9IH4weDFjOworCQlidWZbNF0gfD0gIDB4MTg7CisKKwkJYnVmWzVdID0gKDAgPDwgNykgfCAoMiA8PCA0KTsKKwl9CisKKwltc2cuYWRkciA9IEkyQ19BRERSX1RVQTYwMzQgPj4gMTsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5idWYgPSBidWY7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKCZwbHV0by0+aTJjX2FkYXAsICZtc2csIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UgaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBsdXRvMl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3LCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBwbHV0byAqcGx1dG8gPSBmcm9udGVuZF90b19wbHV0byhmZSk7CisKKwlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZShmdywgbmFtZSwgJnBsdXRvLT5wZGV2LT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBwbHV0bzJfZmVfY29uZmlnIF9fZGV2aW5pdGRhdGEgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSBJMkNfQUREUl9UREExMDA0NiA+PiAxLAorCS5pbnZlcnQgPSAxLAorCS5pbnZlcnRfb2NsayA9IDAsCisJLnh0YWxfZnJlcSA9IFREQTEwMDQ2X1hUQUxfMTZNLAorCS5hZ2NfY29uZmlnID0gVERBMTAwNDZfQUdDX0RFRkFVTFQsCisJLmlmX2ZyZXEgPSBUREExMDA0Nl9GUkVRXzM2MTcsCisJLnBsbF9zZXQgPSBsZ190ZHRwZTAwMXBfcGxsX3NldCwKKwkucGxsX3NsZWVwID0gTlVMTCwKKwkucmVxdWVzdF9maXJtd2FyZSA9IHBsdXRvMl9yZXF1ZXN0X2Zpcm13YXJlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgcGx1dG8gKnBsdXRvKQoreworCWludCByZXQ7CisKKwlwbHV0by0+ZmUgPSB0ZGExMDA0Nl9hdHRhY2goJnBsdXRvMl9mZV9jb25maWcsICZwbHV0by0+aTJjX2FkYXApOworCWlmICghcGx1dG8tPmZlKSB7CisJCWRldl9lcnIoJnBsdXRvLT5wZGV2LT5kZXYsICJjb3VsZCBub3QgYXR0YWNoIGZyb250ZW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZwbHV0by0+ZHZiX2FkYXB0ZXIsIHBsdXRvLT5mZSk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHBsdXRvLT5mZS0+b3BzLT5yZWxlYXNlKQorCQkJcGx1dG8tPmZlLT5vcHMtPnJlbGVhc2UocGx1dG8tPmZlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHBsdXRvX3JlYWRfcmV2KHN0cnVjdCBwbHV0byAqcGx1dG8pCit7CisJdTMyIHZhbCA9IHBsdXRvX3JlYWRyZWcocGx1dG8sIFJFR19NSVNDKSAmIE1JU0NfRFZSOworCWRldl9pbmZvKCZwbHV0by0+cGRldi0+ZGV2LCAiYm9hcmQgcmV2aXNpb24gJWQuJWRcbiIsCisJCQkodmFsID4+IDEyKSAmIDB4MGYsICh2YWwgPj4gNCkgJiAweGZmKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHBsdXRvX3JlYWRfbWFjKHN0cnVjdCBwbHV0byAqcGx1dG8sIHU4ICptYWMpCit7CisJdTMyIHZhbCA9IHBsdXRvX3JlYWRyZWcocGx1dG8sIFJFR19NTUFDKTsKKwltYWNbMF0gPSAodmFsID4+IDgpICYgMHhmZjsKKwltYWNbMV0gPSAodmFsID4+IDApICYgMHhmZjsKKworCXZhbCA9IHBsdXRvX3JlYWRyZWcocGx1dG8sIFJFR19JTUFDKTsKKwltYWNbMl0gPSAodmFsID4+IDgpICYgMHhmZjsKKwltYWNbM10gPSAodmFsID4+IDApICYgMHhmZjsKKworCXZhbCA9IHBsdXRvX3JlYWRyZWcocGx1dG8sIFJFR19MTUFDKTsKKwltYWNbNF0gPSAodmFsID4+IDgpICYgMHhmZjsKKwltYWNbNV0gPSAodmFsID4+IDApICYgMHhmZjsKKworCWRldl9pbmZvKCZwbHV0by0+cGRldi0+ZGV2LCAiTUFDICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJbWFjWzBdLCBtYWNbMV0sIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBsdXRvX3JlYWRfc2VyaWFsKHN0cnVjdCBwbHV0byAqcGx1dG8pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwbHV0by0+cGRldjsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl1OCBfX2lvbWVtICpjaXM7CisKKwljaXMgPSBwY2lfaW9tYXAocGRldiwgMSwgMCk7CisJaWYgKCFjaXMpCisJCXJldHVybiAtRUlPOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIlMvTiAiKTsKKworCWZvciAoaSA9IDB4ZTA7IGkgPCAweDEwMDsgaSArPSA0KSB7CisJCXUzMiB2YWwgPSByZWFkbCgmY2lzW2ldKTsKKwkJZm9yIChqID0gMDsgaiA8IDMyOyBqICs9IDgpIHsKKwkJCWlmICgodmFsICYgMHhmZikgPT0gMHhmZikKKwkJCQlnb3RvIG91dDsKKwkJCXByaW50aygiJWMiLCB2YWwgJiAweGZmKTsKKwkJCXZhbCA+Pj0gODsKKwkJfQorCX0KK291dDoKKwlwcmludGsoIlxuIik7CisJcGNpX2lvdW5tYXAocGRldiwgY2lzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbHV0bzJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBwbHV0byAqcGx1dG87CisJc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eDsKKwlzdHJ1Y3QgZG14X2RlbXV4ICpkbXg7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlwbHV0byA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbHV0byksIEdGUF9LRVJORUwpOworCWlmICghcGx1dG8pCisJCWdvdG8gb3V0OworCisJbWVtc2V0KHBsdXRvLCAwLCBzaXplb2Yoc3RydWN0IHBsdXRvKSk7CisJcGx1dG8tPnBkZXYgPSBwZGV2OworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2tmcmVlOworCisJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NmMsIDB4ODAwMCk7CisKKwlyZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOworCisJcGx1dG8tPmlvX21lbSA9IHBjaV9pb21hcChwZGV2LCAwLCAweDQwKTsKKwlpZiAoIXBsdXRvLT5pb19tZW0pIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJfcGNpX3JlbGVhc2VfcmVnaW9uczsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcGx1dG8pOworCisJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBwbHV0b19pcnEsIFNBX1NISVJRLCBEUklWRVJfTkFNRSwgcGx1dG8pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wY2lfaW91bm1hcDsKKworCXJldCA9IHBsdXRvX2h3X2luaXQocGx1dG8pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCS8qIGkyYyAqLworCWkyY19zZXRfYWRhcGRhdGEoJnBsdXRvLT5pMmNfYWRhcCwgcGx1dG8pOworCXN0cmNweShwbHV0by0+aTJjX2FkYXAubmFtZSwgRFJJVkVSX05BTUUpOworCXBsdXRvLT5pMmNfYWRhcC5vd25lciA9IFRISVNfTU9EVUxFOworCXBsdXRvLT5pMmNfYWRhcC5pZCA9IEkyQ19BTEdPX0JJVDsKKwlwbHV0by0+aTJjX2FkYXAuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKKwlwbHV0by0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJcGx1dG8tPmkyY19hZGFwLmFsZ29fZGF0YSA9ICZwbHV0by0+aTJjX2JpdDsKKwlwbHV0by0+aTJjX2JpdC5kYXRhID0gcGx1dG87CisJcGx1dG8tPmkyY19iaXQuc2V0c2RhID0gcGx1dG9fc2V0c2RhOworCXBsdXRvLT5pMmNfYml0LnNldHNjbCA9IHBsdXRvX3NldHNjbDsKKwlwbHV0by0+aTJjX2JpdC5nZXRzZGEgPSBwbHV0b19nZXRzZGE7CisJcGx1dG8tPmkyY19iaXQuZ2V0c2NsID0gcGx1dG9fZ2V0c2NsOworCXBsdXRvLT5pMmNfYml0LnVkZWxheSA9IDEwOworCXBsdXRvLT5pMmNfYml0LnRpbWVvdXQgPSAxMDsKKworCS8qIFJhaXNlIFNDTCBhbmQgU0RBICovCisJcGx1dG9fc2V0c2RhKHBsdXRvLCAxKTsKKwlwbHV0b19zZXRzY2wocGx1dG8sIDEpOworCisJcmV0ID0gaTJjX2JpdF9hZGRfYnVzKCZwbHV0by0+aTJjX2FkYXApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wbHV0b19od19leGl0OworCisJLyogZHZiICovCisJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJnBsdXRvLT5kdmJfYWRhcHRlciwgRFJJVkVSX05BTUUsIFRISVNfTU9EVUxFKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfaTJjX2JpdF9kZWxfYnVzOworCisJZHZiX2FkYXB0ZXIgPSAmcGx1dG8tPmR2Yl9hZGFwdGVyOworCisJcGx1dG9fcmVhZF9yZXYocGx1dG8pOworCXBsdXRvX3JlYWRfc2VyaWFsKHBsdXRvKTsKKwlwbHV0b19yZWFkX21hYyhwbHV0bywgZHZiX2FkYXB0ZXItPnByb3Bvc2VkX21hYyk7CisKKwlkdmJkZW11eCA9ICZwbHV0by0+ZGVtdXg7CisJZHZiZGVtdXgtPmZpbHRlcm51bSA9IDI1NjsKKwlkdmJkZW11eC0+ZmVlZG51bSA9IDI1NjsKKwlkdmJkZW11eC0+c3RhcnRfZmVlZCA9IHBsdXRvX3N0YXJ0X2ZlZWQ7CisJZHZiZGVtdXgtPnN0b3BfZmVlZCA9IHBsdXRvX3N0b3BfZmVlZDsKKwlkdmJkZW11eC0+ZG14LmNhcGFiaWxpdGllcyA9IChETVhfVFNfRklMVEVSSU5HIHwKKwkJCURNWF9TRUNUSU9OX0ZJTFRFUklORyB8IERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HKTsKKwlyZXQgPSBkdmJfZG14X2luaXQoZHZiZGVtdXgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kdmJfdW5yZWdpc3Rlcl9hZGFwdGVyOworCisJZG14ID0gJmR2YmRlbXV4LT5kbXg7CisKKwlwbHV0by0+aHdfZnJvbnRlbmQuc291cmNlID0gRE1YX0ZST05URU5EXzA7CisJcGx1dG8tPm1lbV9mcm9udGVuZC5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOworCXBsdXRvLT5kbXhkZXYuZmlsdGVybnVtID0gTkhXRklMVEVSUzsKKwlwbHV0by0+ZG14ZGV2LmRlbXV4ID0gZG14OworCisJcmV0ID0gZHZiX2RteGRldl9pbml0KCZwbHV0by0+ZG14ZGV2LCBkdmJfYWRhcHRlcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2R2Yl9kbXhfcmVsZWFzZTsKKworCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJnBsdXRvLT5od19mcm9udGVuZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2R2Yl9kbXhkZXZfcmVsZWFzZTsKKworCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJnBsdXRvLT5tZW1fZnJvbnRlbmQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9yZW1vdmVfaHdfZnJvbnRlbmQ7CisKKwlyZXQgPSBkbXgtPmNvbm5lY3RfZnJvbnRlbmQoZG14LCAmcGx1dG8tPmh3X2Zyb250ZW5kKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcmVtb3ZlX21lbV9mcm9udGVuZDsKKworCXJldCA9IGZyb250ZW5kX2luaXQocGx1dG8pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kaXNjb25uZWN0X2Zyb250ZW5kOworCisJZHZiX25ldF9pbml0KGR2Yl9hZGFwdGVyLCAmcGx1dG8tPmR2Ym5ldCwgZG14KTsKK291dDoKKwlyZXR1cm4gcmV0OworCitlcnJfZGlzY29ubmVjdF9mcm9udGVuZDoKKwlkbXgtPmRpc2Nvbm5lY3RfZnJvbnRlbmQoZG14KTsKK2Vycl9yZW1vdmVfbWVtX2Zyb250ZW5kOgorCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJnBsdXRvLT5tZW1fZnJvbnRlbmQpOworZXJyX3JlbW92ZV9od19mcm9udGVuZDoKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZwbHV0by0+aHdfZnJvbnRlbmQpOworZXJyX2R2Yl9kbXhkZXZfcmVsZWFzZToKKwlkdmJfZG14ZGV2X3JlbGVhc2UoJnBsdXRvLT5kbXhkZXYpOworZXJyX2R2Yl9kbXhfcmVsZWFzZToKKwlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOworZXJyX2R2Yl91bnJlZ2lzdGVyX2FkYXB0ZXI6CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcihkdmJfYWRhcHRlcik7CitlcnJfaTJjX2JpdF9kZWxfYnVzOgorCWkyY19iaXRfZGVsX2J1cygmcGx1dG8tPmkyY19hZGFwKTsKK2Vycl9wbHV0b19od19leGl0OgorCXBsdXRvX2h3X2V4aXQocGx1dG8pOworZXJyX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHBkZXYtPmlycSwgcGx1dG8pOworZXJyX3BjaV9pb3VubWFwOgorCXBjaV9pb3VubWFwKHBkZXYsIHBsdXRvLT5pb19tZW0pOworZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9wY2lfZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZXJyX2tmcmVlOgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShwbHV0byk7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBwbHV0bzJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwbHV0byAqcGx1dG8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlciA9ICZwbHV0by0+ZHZiX2FkYXB0ZXI7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAmcGx1dG8tPmRlbXV4OworCXN0cnVjdCBkbXhfZGVtdXggKmRteCA9ICZkdmJkZW11eC0+ZG14OworCisJZG14LT5jbG9zZShkbXgpOworCWR2Yl9uZXRfcmVsZWFzZSgmcGx1dG8tPmR2Ym5ldCk7CisJaWYgKHBsdXRvLT5mZSkKKwkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQocGx1dG8tPmZlKTsKKworCWRteC0+ZGlzY29ubmVjdF9mcm9udGVuZChkbXgpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJnBsdXRvLT5tZW1fZnJvbnRlbmQpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJnBsdXRvLT5od19mcm9udGVuZCk7CisJZHZiX2RteGRldl9yZWxlYXNlKCZwbHV0by0+ZG14ZGV2KTsKKwlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOworCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXB0ZXIpOworCWkyY19iaXRfZGVsX2J1cygmcGx1dG8tPmkyY19hZGFwKTsKKwlwbHV0b19od19leGl0KHBsdXRvKTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIHBsdXRvKTsKKwlwY2lfaW91bm1hcChwZGV2LCBwbHV0by0+aW9fbWVtKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUocGx1dG8pOworfQorCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfU0NNCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0NNCTB4MDQzMgorI2VuZGlmCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfUExVVE8yCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExVVE8yCTB4MDAwMQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwbHV0bzJfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfU0NNLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9QTFVUTzIsCisJCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwl9LCB7CisJCS8qIGVtcHR5ICovCisJfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwbHV0bzJfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGx1dG8yX2RyaXZlciA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IHBsdXRvMl9pZF90YWJsZSwKKwkucHJvYmUgPSBwbHV0bzJfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHBsdXRvMl9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGx1dG8yX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGx1dG8yX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbHV0bzJfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGx1dG8yX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBsdXRvMl9pbml0KTsKK21vZHVsZV9leGl0KHBsdXRvMl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAbGludXh0di5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBsdXRvMiBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCmluZGV4IDdmZmEyYzcuLmJmM2MwMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwpAQCAtMTIsNyArMTIsNyBAQAogCXNlbGVjdCBEVkJfU1RWMDI5NwogCXNlbGVjdCBEVkJfTDY0NzgxCiAJaGVscAotCSAgU3VwcG9ydCBmb3IgU0FBNzE0NiBhbmQgQVY3MTEwIGJhc2VkIERWQiBjYXJkcyBhcyBwcm9kdWNlZCAKKwkgIFN1cHBvcnQgZm9yIFNBQTcxNDYgYW5kIEFWNzExMCBiYXNlZCBEVkIgY2FyZHMgYXMgcHJvZHVjZWQKIAkgIGJ5IEZ1aml0c3UtU2llbWVucywgVGVjaG5vdHJlbmQsIEhhdXBwYXVnZSBhbmQgb3RoZXJzLgogCiAJICBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIHRoZSBmdWxsZmVhdHVyZWQgY2FyZHMgd2l0aApAQCAtMzMsNyArMzMsNyBAQAogCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgZmlybXdhcmUgaW50byB0aGUgZHJpdmVyIHlvdSBuZWVkIHRvIHNheQogCSAgWSBoZXJlIGFuZCBwcm92aWRlIHRoZSBjb3JyZWN0IHBhdGggb2YgdGhlIGZpcm13YXJlLiBZb3UgbmVlZCB0aGlzCiAJICBvcHRpb24gaWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgd2hvbGUgZHJpdmVyIHN0YXRpY2FsbHkgaW50byB0aGUKLQkgIGtlcm5lbC4gCisJICBrZXJuZWwuCiAKIAkgIEFsbCBvdGhlciBwZW9wbGUgc2F5IE4uCiAKQEAgLTY2LDYgKzY2LDcgQEAKIAlzZWxlY3QgRFZCX0w2NDc4MQogCXNlbGVjdCBEVkJfVERBODA4MwogCXNlbGVjdCBEVkJfVERBMTAwMjEKKwlzZWxlY3QgRFZCX1M1SDE0MjAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzaW1wbGUgU0FBNzE0NiBiYXNlZCBEVkIgY2FyZHMKIAkgIChzbyBjYWxsZWQgQnVkZ2V0LSBvciBOb3ZhLVBDSSBjYXJkcykgd2l0aG91dCBvbmJvYXJkCkBAIC0xMTksOSArMTIwLDkgQEAKIAlzZWxlY3QgRFZCX1ZFUzFYOTMKIAlzZWxlY3QgRFZCX1REQTgwODMKIAloZWxwCi0JICBTdXBwb3J0IGZvciBCdWRnZXQgUGF0Y2ggKGZ1bGwgVFMpIG1vZGlmaWNhdGlvbiBvbiAKKwkgIFN1cHBvcnQgZm9yIEJ1ZGdldCBQYXRjaCAoZnVsbCBUUykgbW9kaWZpY2F0aW9uIG9uCiAJICBTQUE3MTQ2K0FWNzExMCBiYXNlZCBjYXJkcyAoRFZCLVMgY2FyZHMpLiBUaGlzCi0JICBkcml2ZXIgZG9lc24ndCB1c2Ugb25ib2FyZCBNUEVHMiBkZWNvZGVyLiBUaGUgCisJICBkcml2ZXIgZG9lc24ndCB1c2Ugb25ib2FyZCBNUEVHMiBkZWNvZGVyLiBUaGUKIAkgIGNhcmQgaXMgZHJpdmVuIGluIEJ1ZGdldC1vbmx5IG1vZGUuIENhcmQgaXMKIAkgIHJlcXVpcmVkIHRvIGhhdmUgbG9hZGVkIGZpcm13YXJlIHRvIHR1bmUgcHJvcGVybHkuCiAJICBGaXJtd2FyZSBjYW4gYmUgbG9hZGVkIGJ5IGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwppbmRleCA4ZTMzYTg1Li5lNGM2ZTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwpAQCAtMTE2LDEzICsxMTYsMTggQEAKIAogc3RhdGljIHZvaWQgaW5pdF9hdjcxMTBfYXYoc3RydWN0IGF2NzExMCAqYXY3MTEwKQogeworCWludCByZXQ7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBhdjcxMTAtPmRldjsKIAogCS8qIHNldCBpbnRlcm5hbCB2b2x1bWUgY29udHJvbCB0byBtYXhpbXVtICovCiAJYXY3MTEwLT5hZGFjX3R5cGUgPSBEVkJfQURBQ19USTsKLQlhdjcxMTBfc2V0X3ZvbHVtZShhdjcxMTAsIGF2NzExMC0+bWl4ZXIudm9sdW1lX2xlZnQsIGF2NzExMC0+bWl4ZXIudm9sdW1lX3JpZ2h0KTsKKwlyZXQgPSBhdjcxMTBfc2V0X3ZvbHVtZShhdjcxMTAsIGF2NzExMC0+bWl4ZXIudm9sdW1lX2xlZnQsIGF2NzExMC0+bWl4ZXIudm9sdW1lX3JpZ2h0KTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKCJkdmItdHRwY2k6Y2Fubm90IHNldCBpbnRlcm5hbCB2b2x1bWUgdG8gbWF4aW11bTolZFxuIixyZXQpOwogCi0JYXY3NzEwX3NldF92aWRlb19tb2RlKGF2NzExMCwgdmlkbW9kZSk7CisJcmV0ID0gYXY3NzEwX3NldF92aWRlb19tb2RlKGF2NzExMCwgdmlkbW9kZSk7CisJaWYgKHJldCA8IDApCisJCXByaW50aygiZHZiLXR0cGNpOmNhbm5vdCBzZXQgdmlkZW8gbW9kZTolZFxuIixyZXQpOwogCiAJLyogaGFuZGxlIGRpZmZlcmVudCBjYXJkIHR5cGVzICovCiAJLyogcmVtYWluaW5nIGluaXRzIGFjY29yZGluZyB0byBjYXJkIGFuZCBmcm9udGVuZCB0eXBlICovCkBAIC0xNTYsOCArMTYxLDEyIEBACiAKIAlpZiAoYXY3MTEwLT5hZGFjX3R5cGUgPT0gRFZCX0FEQUNfTk9ORSB8fCBhdjcxMTAtPmFkYWNfdHlwZSA9PSBEVkJfQURBQ19NU1ApIHsKIAkJLy8gc3dpdGNoIERWQiBTQ0FSVCBvbgotCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9BVURJT0RBQywgTWFpblN3aXRjaCwgMSwgMCk7Ci0JCWF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0FVRElPREFDLCBBRFN3aXRjaCwgMSwgMSk7CisJCXJldCA9IGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0FVRElPREFDLCBNYWluU3dpdGNoLCAxLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlwcmludGsoImR2Yi10dHBjaTpjYW5ub3Qgc3dpdGNoIG9uIFNDQVJUKE1haW4pOiVkXG4iLHJldCk7CisJCXJldCA9IGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0FVRElPREFDLCBBRFN3aXRjaCwgMSwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcHJpbnRrKCJkdmItdHRwY2k6Y2Fubm90IHN3aXRjaCBvbiBTQ0FSVChBRCk6JWRcbiIscmV0KTsKIAkJaWYgKHJnYl9vbiAmJgogCQkgICAgKGF2NzExMC0+ZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMTBhKSAmJiAoYXY3MTEwLT5kZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAwMDApKSB7CiAJCQlzYWE3MTQ2X3NldGdwaW8oZGV2LCAxLCBTQUE3MTQ2X0dQSU9fT1VUSEkpOyAvLyBSR0Igb24sIFNDQVJUIHBpbiAxNgpAQCAtMTY1LDggKzE3NCwxMiBAQAogCQl9CiAJfQogCi0JYXY3MTEwX3NldF92b2x1bWUoYXY3MTEwLCBhdjcxMTAtPm1peGVyLnZvbHVtZV9sZWZ0LCBhdjcxMTAtPm1peGVyLnZvbHVtZV9yaWdodCk7Ci0JYXY3MTEwX3NldHVwX2lyY19jb25maWcoYXY3MTEwLCAwKTsKKwlyZXQgPSBhdjcxMTBfc2V0X3ZvbHVtZShhdjcxMTAsIGF2NzExMC0+bWl4ZXIudm9sdW1lX2xlZnQsIGF2NzExMC0+bWl4ZXIudm9sdW1lX3JpZ2h0KTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKCJkdmItdHRwY2k6Y2Fubm90IHNldCB2b2x1bWUgOiVkXG4iLHJldCk7CisJcmV0ID0gYXY3MTEwX3NldHVwX2lyY19jb25maWcoYXY3MTEwLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKCJkdmItdHRwY2k6Y2Fubm90IHNldHVwIGlyYyBjb25maWcgOiVkXG4iLHJldCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlY292ZXJfYXJtKHN0cnVjdCBhdjcxMTAgKmF2NzExMCkKQEAgLTI1OCw4ICsyNzEsOSBAQAogICoKICAqICBJZiB3ZSB3YW50IHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udHJvbHMgd2Ugd291bGQgaGF2ZSB0byBkbyBtdWNoIG1vcmUuLi4KICAqLwotdm9pZCBhdjcxMTBfc2V0dXBfaXJjX2NvbmZpZyhzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIHUzMiBpcl9jb25maWcpCitpbnQgYXY3MTEwX3NldHVwX2lyY19jb25maWcoc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MzIgaXJfY29uZmlnKQogeworCWludCByZXQgPSAwOwogCXN0YXRpYyBzdHJ1Y3QgYXY3MTEwICpsYXN0OwogCiAJZHByaW50ayg0LCAiJXBcbiIsIGF2NzExMCk7CkBAIC0yNzAsOSArMjg0LDEwIEBACiAJCWxhc3QgPSBhdjcxMTA7CiAKIAlpZiAoYXY3MTEwKSB7Ci0JCWF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1BJREZJTFRFUiwgU2V0SVIsIDEsIGlyX2NvbmZpZyk7CisJCXJldCA9IGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1BJREZJTFRFUiwgU2V0SVIsIDEsIGlyX2NvbmZpZyk7CiAJCWF2NzExMC0+aXJfY29uZmlnID0gaXJfY29uZmlnOwogCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCAoKmlyY19oYW5kbGVyKSh1MzIpOwpAQCAtNzY1LDEzICs3ODAsMTQgQEAKIAkJCSAgICAgcGNycGlkLCB2cGlkLCBhcGlkLCB0dHBpZCwgc3VicGlkKTsKIH0KIAotdm9pZCBDaGFuZ2VQSURzKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTE2IHZwaWQsIHUxNiBhcGlkLCB1MTYgdHRwaWQsCitpbnQgQ2hhbmdlUElEcyhzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIHUxNiB2cGlkLCB1MTYgYXBpZCwgdTE2IHR0cGlkLAogCQl1MTYgc3VicGlkLCB1MTYgcGNycGlkKQogeworCWludCByZXQgPSAwOwogCWRwcmludGsoNCwgIiVwXG4iLCBhdjcxMTApOwogCiAJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXY3MTEwLT5waWRfbXV0ZXgpKQotCQlyZXR1cm47CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoISh2cGlkICYgMHg4MDAwKSkKIAkJYXY3MTEwLT5waWRzW0RNWF9QRVNfVklERU9dID0gdnBpZDsKQEAgLTc4NiwxMCArODAyLDExIEBACiAKIAlpZiAoYXY3MTEwLT5mZV9zeW5jZWQpIHsKIAkJcGNycGlkID0gYXY3MTEwLT5waWRzW0RNWF9QRVNfUENSXTsKLQkJU2V0UElEcyhhdjcxMTAsIHZwaWQsIGFwaWQsIHR0cGlkLCBzdWJwaWQsIHBjcnBpZCk7CisJCXJldCA9IFNldFBJRHMoYXY3MTEwLCB2cGlkLCBhcGlkLCB0dHBpZCwgc3VicGlkLCBwY3JwaWQpOwogCX0KIAogCXVwKCZhdjcxMTAtPnBpZF9tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC04MzIsMTEgKzg0OSwxMyBAQAogCXJldCA9IGF2NzExMF9md19yZXF1ZXN0KGF2NzExMCwgYnVmLCAyMCwgJmhhbmRsZSwgMSk7CiAJaWYgKHJldCAhPSAwIHx8IGhhbmRsZSA+PSAzMikgewogCQlwcmludGsoImR2Yi10dHBjaTogJXMgZXJyb3IgIGJ1ZiAlMDR4ICUwNHggJTA0eCAlMDR4ICAiCi0JCQkJInJldCAleCAgaGFuZGxlICUwNHhcbiIsCisJCQkJInJldCAlZCAgaGFuZGxlICUwNHhcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sCiAJCQkJcmV0LCBoYW5kbGUpOwogCQlkdmJkbXhmaWx0ZXItPmh3X2hhbmRsZSA9IDB4ZmZmZjsKLQkJcmV0dXJuIC0xOworCQlpZiAoIXJldCkKKwkJCXJldCA9IC0xOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWF2NzExMC0+aGFuZGxlMmZpbHRlcltoYW5kbGVdID0gZHZiZG14ZmlsdGVyOwpAQCAtODU5LDcgKzg3OCw3IEBACiAJaWYgKGhhbmRsZSA+PSAzMikgewogCQlwcmludGsoIiVzIHRyaWVkIHRvIHN0b3AgaW52YWxpZCBmaWx0ZXIgJTA0eCwgZmlsdGVyIHR5cGUgPSAleFxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIGhhbmRsZSwgZHZiZG14ZmlsdGVyLT50eXBlKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWF2NzExMC0+aGFuZGxlMmZpbHRlcltoYW5kbGVdID0gTlVMTDsKQEAgLTg3MywxOCArODkyLDIwIEBACiAJCQkJInJlc3AgJTA0eCAlMDR4ICBwaWQgJWRcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCByZXQsCiAJCQkJYW5zd1swXSwgYW5zd1sxXSwgZHZiZG14ZmlsdGVyLT5mZWVkLT5waWQpOwotCQlyZXQgPSAtMTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSAtMTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgdm9pZCBkdmJfZmVlZF9zdGFydF9waWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQorc3RhdGljIGludCBkdmJfZmVlZF9zdGFydF9waWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQogewogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OwogCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopIGR2YmRteC0+cHJpdjsKIAl1MTYgKnBpZCA9IGR2YmRteC0+cGlkcywgbnBpZHNbNV07CiAJaW50IGk7CisJaW50IHJldCA9IDA7CiAKIAlkcHJpbnRrKDQsICIlcFxuIiwgYXY3MTEwKTsKIApAQCAtODkzLDM2ICs5MTQsNDkgQEAKIAlucGlkc1tpXSA9IChwaWRbaV0mMHg4MDAwKSA/IDAgOiBwaWRbaV07CiAJaWYgKChpID09IDIpICYmIG5waWRzW2ldICYmIChkdmJkbXhmZWVkLT50c190eXBlICYgVFNfUEFDS0VUKSkgewogCQlucGlkc1tpXSA9IDA7Ci0JCUNoYW5nZVBJRHMoYXY3MTEwLCBucGlkc1sxXSwgbnBpZHNbMF0sIG5waWRzWzJdLCBucGlkc1szXSwgbnBpZHNbNF0pOwotCQlTdGFydEhXRmlsdGVyKGR2YmRteGZlZWQtPmZpbHRlcik7Ci0JCXJldHVybjsKKwkJcmV0ID0gQ2hhbmdlUElEcyhhdjcxMTAsIG5waWRzWzFdLCBucGlkc1swXSwgbnBpZHNbMl0sIG5waWRzWzNdLCBucGlkc1s0XSk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gU3RhcnRIV0ZpbHRlcihkdmJkbXhmZWVkLT5maWx0ZXIpOworCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAoZHZiZG14ZmVlZC0+cGVzX3R5cGUgPD0gMiB8fCBkdmJkbXhmZWVkLT5wZXNfdHlwZSA9PSA0KQotCQlDaGFuZ2VQSURzKGF2NzExMCwgbnBpZHNbMV0sIG5waWRzWzBdLCBucGlkc1syXSwgbnBpZHNbM10sIG5waWRzWzRdKTsKKwlpZiAoZHZiZG14ZmVlZC0+cGVzX3R5cGUgPD0gMiB8fCBkdmJkbXhmZWVkLT5wZXNfdHlwZSA9PSA0KSB7CisJCXJldCA9IENoYW5nZVBJRHMoYXY3MTEwLCBucGlkc1sxXSwgbnBpZHNbMF0sIG5waWRzWzJdLCBucGlkc1szXSwgbnBpZHNbNF0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAlpZiAoZHZiZG14ZmVlZC0+cGVzX3R5cGUgPCAyICYmIG5waWRzWzBdKQogCQlpZiAoYXY3MTEwLT5mZV9zeW5jZWQpCi0JCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9QSURGSUxURVIsIFNjYW4sIDApOworCQl7CisJCQlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9QSURGSUxURVIsIFNjYW4sIDApOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CiAKIAlpZiAoKGR2YmRteGZlZWQtPnRzX3R5cGUgJiBUU19QQUNLRVQpKSB7CiAJCWlmIChkdmJkbXhmZWVkLT5wZXNfdHlwZSA9PSAwICYmICEoZHZiZG14LT5waWRzWzBdICYgMHg4MDAwKSkKLQkJCWF2NzExMF9hdl9zdGFydF9yZWNvcmQoYXY3MTEwLCBSUF9BVURJTywgZHZiZG14ZmVlZCk7CisJCQlyZXQgPSBhdjcxMTBfYXZfc3RhcnRfcmVjb3JkKGF2NzExMCwgUlBfQVVESU8sIGR2YmRteGZlZWQpOwogCQlpZiAoZHZiZG14ZmVlZC0+cGVzX3R5cGUgPT0gMSAmJiAhKGR2YmRteC0+cGlkc1sxXSAmIDB4ODAwMCkpCi0JCQlhdjcxMTBfYXZfc3RhcnRfcmVjb3JkKGF2NzExMCwgUlBfVklERU8sIGR2YmRteGZlZWQpOworCQkJcmV0ID0gYXY3MTEwX2F2X3N0YXJ0X3JlY29yZChhdjcxMTAsIFJQX1ZJREVPLCBkdmJkbXhmZWVkKTsKIAl9CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZHZiX2ZlZWRfc3RvcF9waWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQorc3RhdGljIGludCBkdmJfZmVlZF9zdG9wX3BpZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCiB7CiAJc3RydWN0IGR2Yl9kZW11eCAqZHZiZG14ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CiAJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKikgZHZiZG14LT5wcml2OwogCXUxNiAqcGlkID0gZHZiZG14LT5waWRzLCBucGlkc1s1XTsKIAlpbnQgaTsKIAorCWludCByZXQgPSAwOworCiAJZHByaW50ayg0LCAiJXBcbiIsIGF2NzExMCk7CiAKIAlpZiAoZHZiZG14ZmVlZC0+cGVzX3R5cGUgPD0gMSkgewotCQlhdjcxMTBfYXZfc3RvcChhdjcxMTAsIGR2YmRteGZlZWQtPnBlc190eXBlID8gIFJQX1ZJREVPIDogUlBfQVVESU8pOworCQlyZXQgPSBhdjcxMTBfYXZfc3RvcChhdjcxMTAsIGR2YmRteGZlZWQtPnBlc190eXBlID8gIFJQX1ZJREVPIDogUlBfQVVESU8pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAkJaWYgKCFhdjcxMTAtPnJlY19tb2RlKQogCQkJZHZiZG14LT5yZWNvcmRpbmcgPSAwOwogCQlpZiAoIWF2NzExMC0+cGxheWluZykKQEAgLTkzMywyNCArOTY3LDI3IEBACiAJc3dpdGNoIChpKSB7CiAJY2FzZSAyOiAvL3RlbGV0ZXh0CiAJCWlmIChkdmJkbXhmZWVkLT50c190eXBlICYgVFNfUEFDS0VUKQotCQkJU3RvcEhXRmlsdGVyKGR2YmRteGZlZWQtPmZpbHRlcik7CisJCQlyZXQgPSBTdG9wSFdGaWx0ZXIoZHZiZG14ZmVlZC0+ZmlsdGVyKTsKIAkJbnBpZHNbMl0gPSAwOwogCQlicmVhazsKIAljYXNlIDA6CiAJY2FzZSAxOgogCWNhc2UgNDoKIAkJaWYgKCFwaWRzX29mZikKLQkJCXJldHVybjsKKwkJCXJldHVybiAwOwogCQlucGlkc1tpXSA9IChwaWRbaV0mMHg4MDAwKSA/IDAgOiBwaWRbaV07CiAJCWJyZWFrOwogCX0KLQlDaGFuZ2VQSURzKGF2NzExMCwgbnBpZHNbMV0sIG5waWRzWzBdLCBucGlkc1syXSwgbnBpZHNbM10sIG5waWRzWzRdKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gQ2hhbmdlUElEcyhhdjcxMTAsIG5waWRzWzFdLCBucGlkc1swXSwgbnBpZHNbMl0sIG5waWRzWzNdLCBucGlkc1s0XSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdjcxMTBfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCiB7CiAJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSBmZWVkLT5kZW11eDsKIAlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSBkZW11eC0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKIAogCWRwcmludGsoNCwgIiVwXG4iLCBhdjcxMTApOwogCkBAIC05NzEsMjEgKzEwMDgsMjIgQEAKIAkJCQkJICAgIShkZW11eC0+cGlkc1sxXSAmIDB4ODAwMCkpIHsKIAkJCQkJICAgICAgIGR2Yl9yaW5nYnVmZmVyX2ZsdXNoX3NwaW5sb2NrX3dha2V1cCgmYXY3MTEwLT5hdm91dCk7CiAJCQkJCSAgICAgICBkdmJfcmluZ2J1ZmZlcl9mbHVzaF9zcGlubG9ja193YWtldXAoJmF2NzExMC0+YW91dCk7Ci0JCQkJCSAgICAgICBhdjcxMTBfYXZfc3RhcnRfcGxheShhdjcxMTAsUlBfQVYpOwotCQkJCQkgICAgICAgZGVtdXgtPnBsYXlpbmcgPSAxOworCQkJCQkgICAgICAgcmV0ID0gYXY3MTEwX2F2X3N0YXJ0X3BsYXkoYXY3MTEwLFJQX0FWKTsKKwkJCQkJICAgICAgIGlmICghcmV0KQorCQkJCQkJICAgICAgIGRlbXV4LT5wbGF5aW5nID0gMTsKIAkJCQkJfQogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlkdmJfZmVlZF9zdGFydF9waWQoZmVlZCk7CisJCQkJcmV0ID0gZHZiX2ZlZWRfc3RhcnRfcGlkKGZlZWQpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgaWYgKChmZWVkLT50c190eXBlICYgVFNfUEFDS0VUKSAmJgogCQkJICAgKGRlbXV4LT5kbXguZnJvbnRlbmQtPnNvdXJjZSAhPSBETVhfTUVNT1JZX0ZFKSkgewotCQkJU3RhcnRIV0ZpbHRlcihmZWVkLT5maWx0ZXIpOworCQkJcmV0ID0gU3RhcnRIV0ZpbHRlcihmZWVkLT5maWx0ZXIpOwogCQl9CiAJfQogCi0JaWYgKGZlZWQtPnR5cGUgPT0gRE1YX1RZUEVfU0VDKSB7CisJZWxzZSBpZiAoZmVlZC0+dHlwZSA9PSBETVhfVFlQRV9TRUMpIHsKIAkJaW50IGk7CiAKIAkJZm9yIChpID0gMDsgaSA8IGRlbXV4LT5maWx0ZXJudW07IGkrKykgewpAQCAtOTk2LDEyICsxMDM0LDE1IEBACiAJCQlpZiAoZGVtdXgtPmZpbHRlcltpXS5maWx0ZXIucGFyZW50ICE9ICZmZWVkLT5mZWVkLnNlYykKIAkJCQljb250aW51ZTsKIAkJCWRlbXV4LT5maWx0ZXJbaV0uc3RhdGUgPSBETVhfU1RBVEVfR087Ci0JCQlpZiAoZGVtdXgtPmRteC5mcm9udGVuZC0+c291cmNlICE9IERNWF9NRU1PUllfRkUpCi0JCQkJU3RhcnRIV0ZpbHRlcigmZGVtdXgtPmZpbHRlcltpXSk7CisJCQlpZiAoZGVtdXgtPmRteC5mcm9udGVuZC0+c291cmNlICE9IERNWF9NRU1PUllfRkUpIHsKKwkJCQlyZXQgPSBTdGFydEhXRmlsdGVyKCZkZW11eC0+ZmlsdGVyW2ldKTsKKwkJCQlpZiAocmV0KQorCQkJCQlicmVhazsKKwkJCX0KIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMTAwOSw3ICsxMDUwLDcgQEAKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OwogCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IGRlbXV4LT5wcml2OwotCisJaW50IGksIHJjLCByZXQgPSAwOwogCWRwcmludGsoNCwgIiVwXG4iLCBhdjcxMTApOwogCiAJaWYgKGZlZWQtPnR5cGUgPT0gRE1YX1RZUEVfVFMpIHsKQEAgLTEwMjIsMjYgKzEwNjMsMjkgQEAKIAkJfQogCQlpZiAoZmVlZC0+dHNfdHlwZSAmIFRTX0RFQ09ERVIgJiYKIAkJICAgIGZlZWQtPnBlc190eXBlIDwgRE1YX1RTX1BFU19PVEhFUikgewotCQkJZHZiX2ZlZWRfc3RvcF9waWQoZmVlZCk7CisJCQlyZXQgPSBkdmJfZmVlZF9zdG9wX3BpZChmZWVkKTsKIAkJfSBlbHNlCiAJCQlpZiAoKGZlZWQtPnRzX3R5cGUgJiBUU19QQUNLRVQpICYmCiAJCQkgICAgKGRlbXV4LT5kbXguZnJvbnRlbmQtPnNvdXJjZSAhPSBETVhfTUVNT1JZX0ZFKSkKLQkJCQlTdG9wSFdGaWx0ZXIoZmVlZC0+ZmlsdGVyKTsKKwkJCQlyZXQgPSBTdG9wSFdGaWx0ZXIoZmVlZC0+ZmlsdGVyKTsKIAl9CiAKLQlpZiAoZmVlZC0+dHlwZSA9PSBETVhfVFlQRV9TRUMpIHsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaTxkZW11eC0+ZmlsdGVybnVtOyBpKyspCisJaWYgKCFyZXQgJiYgZmVlZC0+dHlwZSA9PSBETVhfVFlQRV9TRUMpIHsKKwkJZm9yIChpID0gMDsgaTxkZW11eC0+ZmlsdGVybnVtOyBpKyspIHsKIAkJCWlmIChkZW11eC0+ZmlsdGVyW2ldLnN0YXRlID09IERNWF9TVEFURV9HTyAmJgogCQkJICAgIGRlbXV4LT5maWx0ZXJbaV0uZmlsdGVyLnBhcmVudCA9PSAmZmVlZC0+ZmVlZC5zZWMpIHsKIAkJCQlkZW11eC0+ZmlsdGVyW2ldLnN0YXRlID0gRE1YX1NUQVRFX1JFQURZOwotCQkJCWlmIChkZW11eC0+ZG14LmZyb250ZW5kLT5zb3VyY2UgIT0gRE1YX01FTU9SWV9GRSkKLQkJCQkJU3RvcEhXRmlsdGVyKCZkZW11eC0+ZmlsdGVyW2ldKTsKKwkJCQlpZiAoZGVtdXgtPmRteC5mcm9udGVuZC0+c291cmNlICE9IERNWF9NRU1PUllfRkUpIHsKKwkJCQkJcmMgPSBTdG9wSFdGaWx0ZXIoJmRlbXV4LT5maWx0ZXJbaV0pOworCQkJCQlpZiAoIXJldCkKKwkJCQkJCXJldCA9IHJjOworCQkJCQkvKiBrZWVwIGdvaW5nLCBzdG9wIGFzIG1hbnkgZmlsdGVycyBhcyBwb3NzaWJsZSAqLworCQkJCX0KKwkJCX0KIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMTA5Myw3ICsxMTM3LDcgQEAKIAlyZXQgPSBhdjcxMTBfZndfcmVxdWVzdChhdjcxMTAsICZ0YWcsIDAsIGZ3c3RjLCA0KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF2NzExMF9md19yZXF1ZXN0IGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIHJldDsKIAl9CiAJZHByaW50aygyLCAiZndzdGMgPSAlMDRoeCAlMDRoeCAlMDRoeCAlMDRoeFxuIiwKIAkJZndzdGNbMF0sIGZ3c3RjWzFdLCBmd3N0Y1syXSwgZndzdGNbM10pOwpAQCAtMTExOSwxOCArMTE2MywxNCBAQAogCiAJc3dpdGNoICh0b25lKSB7CiAJY2FzZSBTRUNfVE9ORV9PTjoKLQkJU2V0MjJLKGF2NzExMCwgMSk7Ci0JCWJyZWFrOworCQlyZXR1cm4gU2V0MjJLKGF2NzExMCwgMSk7CiAKIAljYXNlIFNFQ19UT05FX09GRjoKLQkJU2V0MjJLKGF2NzExMCwgMCk7Ci0JCWJyZWFrOworCQlyZXR1cm4gU2V0MjJLKGF2NzExMCwgMCk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdjcxMTBfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKQEAgLTExMzgsOSArMTE3OCw3IEBACiB7CiAJc3RydWN0IGF2NzExMCogYXY3MTEwID0gZmUtPmR2Yi0+cHJpdjsKIAotCWF2NzExMF9kaXNlcWNfc2VuZChhdjcxMTAsIGNtZC0+bXNnX2xlbiwgY21kLT5tc2csIC0xKTsKLQotCXJldHVybiAwOworCXJldHVybiBhdjcxMTBfZGlzZXFjX3NlbmQoYXY3MTEwLCBjbWQtPm1zZ19sZW4sIGNtZC0+bXNnLCAtMSk7CiB9CiAKIHN0YXRpYyBpbnQgYXY3MTEwX2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLApAQCAtMTE0OCw5ICsxMTg2LDcgQEAKIHsKIAlzdHJ1Y3QgYXY3MTEwKiBhdjcxMTAgPSBmZS0+ZHZiLT5wcml2OwogCi0JYXY3MTEwX2Rpc2VxY19zZW5kKGF2NzExMCwgMCwgTlVMTCwgbWluaWNtZCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYXY3MTEwX2Rpc2VxY19zZW5kKGF2NzExMCwgMCwgTlVMTCwgbWluaWNtZCk7CiB9CiAKIC8qIHNpbXBsaWZpZWQgY29kZSBmcm9tIGJ1ZGdldC1jb3JlLmMgKi8KQEAgLTE5OTIsNzYgKzIwMjgsODUgQEAKIAogCiAKLXN0YXRpYyB2b2lkIGF2NzExMF9mZV9sb2NrX2ZpeChzdHJ1Y3QgYXY3MTEwKiBhdjcxMTAsIGZlX3N0YXR1c190IHN0YXR1cykKK3N0YXRpYyBpbnQgYXY3MTEwX2ZlX2xvY2tfZml4KHN0cnVjdCBhdjcxMTAqIGF2NzExMCwgZmVfc3RhdHVzX3Qgc3RhdHVzKQogeworCWludCByZXQgPSAwOwogCWludCBzeW5jZWQgPSAoc3RhdHVzICYgRkVfSEFTX0xPQ0spID8gMSA6IDA7CiAKIAlhdjcxMTAtPmZlX3N0YXR1cyA9IHN0YXR1czsKIAogCWlmIChhdjcxMTAtPmZlX3N5bmNlZCA9PSBzeW5jZWQpCi0JCXJldHVybjsKLQotCWF2NzExMC0+ZmVfc3luY2VkID0gc3luY2VkOworCQlyZXR1cm4gMDsKIAogCWlmIChhdjcxMTAtPnBsYXlpbmcpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhdjcxMTAtPnBpZF9tdXRleCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmIChhdjcxMTAtPmZlX3N5bmNlZCkgewotCQlTZXRQSURzKGF2NzExMCwgYXY3MTEwLT5waWRzW0RNWF9QRVNfVklERU9dLAorCWlmIChzeW5jZWQpIHsKKwkJcmV0ID0gU2V0UElEcyhhdjcxMTAsIGF2NzExMC0+cGlkc1tETVhfUEVTX1ZJREVPXSwKIAkJCWF2NzExMC0+cGlkc1tETVhfUEVTX0FVRElPXSwKIAkJCWF2NzExMC0+cGlkc1tETVhfUEVTX1RFTEVURVhUXSwgMCwKIAkJCWF2NzExMC0+cGlkc1tETVhfUEVTX1BDUl0pOwotCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9QSURGSUxURVIsIFNjYW4sIDApOworCQlpZiAoIXJldCkKKwkJCXJldCA9IGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1BJREZJTFRFUiwgU2NhbiwgMCk7CiAJfSBlbHNlIHsKLQkJU2V0UElEcyhhdjcxMTAsIDAsIDAsIDAsIDAsIDApOwotCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9QSURfRklMVEVSLCBGbHVzaFRTUXVldWUsIDApOwotCQlhdjcxMTBfd2FpdF9tc2dzdGF0ZShhdjcxMTAsIEdQTVFCdXN5KTsKKwkJcmV0ID0gU2V0UElEcyhhdjcxMTAsIDAsIDAsIDAsIDAsIDApOworCQlpZiAoIXJldCkgeworCQkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUElEX0ZJTFRFUiwgRmx1c2hUU1F1ZXVlLCAwKTsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IGF2NzExMF93YWl0X21zZ3N0YXRlKGF2NzExMCwgR1BNUUJ1c3kpOworCQl9CiAJfQogCisJaWYgKCFyZXQpCisJCWF2NzExMC0+ZmVfc3luY2VkID0gc3luY2VkOworCiAJdXAoJmF2NzExMC0+cGlkX211dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF2NzExMF9mZV9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQogewogCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IGZlLT5kdmItPnByaXY7Ci0JYXY3MTEwX2ZlX2xvY2tfZml4KGF2NzExMCwgMCk7Ci0JcmV0dXJuIGF2NzExMC0+ZmVfc2V0X2Zyb250ZW5kKGZlLCBwYXJhbXMpOworCisJaW50IHJldCA9IGF2NzExMF9mZV9sb2NrX2ZpeChhdjcxMTAsIDApOworCWlmICghcmV0KQorCQlyZXQgPSBhdjcxMTAtPmZlX3NldF9mcm9udGVuZChmZSwgcGFyYW1zKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF2NzExMF9mZV9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewogCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IGZlLT5kdmItPnByaXY7CiAKLQlhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAwKTsKLQlyZXR1cm4gYXY3MTEwLT5mZV9pbml0KGZlKTsKKwlpbnQgcmV0ID0gYXY3MTEwX2ZlX2xvY2tfZml4KGF2NzExMCwgMCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGF2NzExMC0+ZmVfaW5pdChmZSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdjcxMTBfZmVfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190KiBzdGF0dXMpCiB7CiAJc3RydWN0IGF2NzExMCogYXY3MTEwID0gZmUtPmR2Yi0+cHJpdjsKLQlpbnQgcmV0OwogCiAJLyogY2FsbCB0aGUgcmVhbCBpbXBsZW1lbnRhdGlvbiAqLwotCXJldCA9IGF2NzExMC0+ZmVfcmVhZF9zdGF0dXMoZmUsIHN0YXR1cyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICgoKCpzdGF0dXMgXiBhdjcxMTAtPmZlX3N0YXR1cykgJiBGRV9IQVNfTE9DSykgJiYgKCpzdGF0dXMgJiBGRV9IQVNfTE9DSykpIHsKLQkJYXY3MTEwX2ZlX2xvY2tfZml4KGF2NzExMCwgKnN0YXR1cyk7Ci0JfQotCi0JcmV0dXJuIDA7CisJaW50IHJldCA9IGF2NzExMC0+ZmVfcmVhZF9zdGF0dXMoZmUsIHN0YXR1cyk7CisJaWYgKCFyZXQpCisJCWlmICgoKCpzdGF0dXMgXiBhdjcxMTAtPmZlX3N0YXR1cykgJiBGRV9IQVNfTE9DSykgJiYgKCpzdGF0dXMgJiBGRV9IQVNfTE9DSykpCisJCQlyZXQgPSBhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAqc3RhdHVzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF2NzExMF9mZV9kaXNlcWNfcmVzZXRfb3ZlcmxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCiB7CiAJc3RydWN0IGF2NzExMCogYXY3MTEwID0gZmUtPmR2Yi0+cHJpdjsKIAotCWF2NzExMF9mZV9sb2NrX2ZpeChhdjcxMTAsIDApOwotCXJldHVybiBhdjcxMTAtPmZlX2Rpc2VxY19yZXNldF9vdmVybG9hZChmZSk7CisJaW50IHJldCA9IGF2NzExMF9mZV9sb2NrX2ZpeChhdjcxMTAsIDApOworCWlmICghcmV0KQorCQlyZXQgPSBhdjcxMTAtPmZlX2Rpc2VxY19yZXNldF9vdmVybG9hZChmZSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdjcxMTBfZmVfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKQEAgLTIwNjksNDAgKzIxMTQsNTAgQEAKIHsKIAlzdHJ1Y3QgYXY3MTEwKiBhdjcxMTAgPSBmZS0+ZHZiLT5wcml2OwogCi0JYXY3MTEwX2ZlX2xvY2tfZml4KGF2NzExMCwgMCk7Ci0JcmV0dXJuIGF2NzExMC0+ZmVfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZChmZSwgY21kKTsKKwlpbnQgcmV0ID0gYXY3MTEwX2ZlX2xvY2tfZml4KGF2NzExMCwgMCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGF2NzExMC0+ZmVfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZChmZSwgY21kKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF2NzExMF9mZV9kaXNlcWNfc2VuZF9idXJzdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX21pbmlfY21kX3QgbWluaWNtZCkKIHsKIAlzdHJ1Y3QgYXY3MTEwKiBhdjcxMTAgPSBmZS0+ZHZiLT5wcml2OwogCi0JYXY3MTEwX2ZlX2xvY2tfZml4KGF2NzExMCwgMCk7Ci0JcmV0dXJuIGF2NzExMC0+ZmVfZGlzZXFjX3NlbmRfYnVyc3QoZmUsIG1pbmljbWQpOworCWludCByZXQgPSBhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAwKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gYXY3MTEwLT5mZV9kaXNlcWNfc2VuZF9idXJzdChmZSwgbWluaWNtZCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdjcxMTBfZmVfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY190b25lX21vZGVfdCB0b25lKQogewogCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IGZlLT5kdmItPnByaXY7CiAKLQlhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAwKTsKLQlyZXR1cm4gYXY3MTEwLT5mZV9zZXRfdG9uZShmZSwgdG9uZSk7CisJaW50IHJldCA9IGF2NzExMF9mZV9sb2NrX2ZpeChhdjcxMTAsIDApOworCWlmICghcmV0KQorCQlyZXQgPSBhdjcxMTAtPmZlX3NldF90b25lKGZlLCB0b25lKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF2NzExMF9mZV9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewogCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IGZlLT5kdmItPnByaXY7CiAKLQlhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAwKTsKLQlyZXR1cm4gYXY3MTEwLT5mZV9zZXRfdm9sdGFnZShmZSwgdm9sdGFnZSk7CisJaW50IHJldCA9IGF2NzExMF9mZV9sb2NrX2ZpeChhdjcxMTAsIDApOworCWlmICghcmV0KQorCQlyZXQgPSBhdjcxMTAtPmZlX3NldF92b2x0YWdlKGZlLCB2b2x0YWdlKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF2NzExMF9mZV9kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1bnNpZ25lZCBpbnQgY21kKQogewogCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IGZlLT5kdmItPnByaXY7CiAKLQlhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAwKTsKLQlyZXR1cm4gYXY3MTEwLT5mZV9kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKGZlLCBjbWQpOworCWludCByZXQgPSBhdjcxMTBfZmVfbG9ja19maXgoYXY3MTEwLCAwKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gYXY3MTEwLT5mZV9kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKGZlLCBjbWQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB1OCByZWFkX3B3bShzdHJ1Y3QgYXY3MTEwKiBhdjcxMTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oCmluZGV4IDRmNjliNGQuLjUwOGI3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oCkBAIC0xMTksOCArMTE5LDcgQEAKIAl2b2xhdGlsZSBpbnQJCWJtcF9zdGF0ZTsKICNkZWZpbmUgQk1QX05PTkUgICAgIDAKICNkZWZpbmUgQk1QX0xPQURJTkcgIDEKLSNkZWZpbmUgQk1QX0xPQURJTkdTIDIKLSNkZWZpbmUgQk1QX0xPQURFRCAgIDMKKyNkZWZpbmUgQk1QX0xPQURFRCAgIDIKIAl3YWl0X3F1ZXVlX2hlYWRfdAlibXBxOwogCiAKQEAgLTI1NSwxMiArMjU0LDEyIEBACiB9OwogCiAKLWV4dGVybiB2b2lkIENoYW5nZVBJRHMoc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MTYgdnBpZCwgdTE2IGFwaWQsIHUxNiB0dHBpZCwKK2V4dGVybiBpbnQgQ2hhbmdlUElEcyhzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIHUxNiB2cGlkLCB1MTYgYXBpZCwgdTE2IHR0cGlkLAogCQkgICAgICAgdTE2IHN1YnBpZCwgdTE2IHBjcnBpZCk7CiAKIGV4dGVybiB2b2lkIGF2NzExMF9yZWdpc3Rlcl9pcmNfaGFuZGxlcih2b2lkICgqZnVuYykodTMyKSk7CiBleHRlcm4gdm9pZCBhdjcxMTBfdW5yZWdpc3Rlcl9pcmNfaGFuZGxlcih2b2lkICgqZnVuYykodTMyKSk7Ci1leHRlcm4gdm9pZCBhdjcxMTBfc2V0dXBfaXJjX2NvbmZpZyAoc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MzIgaXJfY29uZmlnKTsKK2V4dGVybiBpbnQgYXY3MTEwX3NldHVwX2lyY19jb25maWcgKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTMyIGlyX2NvbmZpZyk7CiAKIGV4dGVybiBpbnQgYXY3MTEwX2lyX2luaXQgKHZvaWQpOwogZXh0ZXJuIHZvaWQgYXY3MTEwX2lyX2V4aXQgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwppbmRleCBjY2Y5NDYxLi4wNjk2YTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwpAQCAtMTIxLDYgKzEyMSw3IEBACiBpbnQgYXY3MTEwX2F2X3N0YXJ0X3JlY29yZChzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIGludCBhdiwKIAkJCSAgIHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCkKIHsKKwlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkbXggPSBkdmJkbXhmZWVkLT5kZW11eDsKIAogCWRwcmludGsoMiwgImF2NzExMDolcCwgLCBkdmJfZGVtdXhfZmVlZDolcFxuIiwgYXY3MTEwLCBkdmJkbXhmZWVkKTsKQEAgLTEzNyw3ICsxMzgsNyBAQAogCQkJCSAgICAgICBkdmJkbXgtPnBlc2ZpbHRlclswXS0+cGlkLAogCQkJCSAgICAgICBkdmJfZmlsdGVyX3BlczJ0c19jYiwKIAkJCQkgICAgICAgKHZvaWQgKikgZHZiZG14LT5wZXNmaWx0ZXJbMF0pOwotCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19SZWNvcmQsIDIsIEF1ZGlvUEVTLCAwKTsKKwkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUmVjb3JkLCAyLCBBdWRpb1BFUywgMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBSUF9WSURFTzoKQEAgLTE0NSw3ICsxNDYsNyBAQAogCQkJCSAgICAgICBkdmJkbXgtPnBlc2ZpbHRlclsxXS0+cGlkLAogCQkJCSAgICAgICBkdmJfZmlsdGVyX3BlczJ0c19jYiwKIAkJCQkgICAgICAgKHZvaWQgKikgZHZiZG14LT5wZXNmaWx0ZXJbMV0pOwotCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19SZWNvcmQsIDIsIFZpZGVvUEVTLCAwKTsKKwkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUmVjb3JkLCAyLCBWaWRlb1BFUywgMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBSUF9BVjoKQEAgLTE1NywxNCArMTU4LDE1IEBACiAJCQkJICAgICAgIGR2YmRteC0+cGVzZmlsdGVyWzFdLT5waWQsCiAJCQkJICAgICAgIGR2Yl9maWx0ZXJfcGVzMnRzX2NiLAogCQkJCSAgICAgICAodm9pZCAqKSBkdmJkbXgtPnBlc2ZpbHRlclsxXSk7Ci0JCWF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1JFQ19QTEFZLCBfX1JlY29yZCwgMiwgQVZfUEVTLCAwKTsKKwkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUmVjb3JkLCAyLCBBVl9QRVMsIDApOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2NzExMF9hdl9zdGFydF9wbGF5KHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgaW50IGF2KQogeworCWludCByZXQgPSAwOwogCWRwcmludGsoMiwgImF2NzExMDolcCwgXG4iLCBhdjcxMTApOwogCiAJaWYgKGF2NzExMC0+cmVjX21vZGUpCkBAIC0xODIsNTQgKzE4NCw1NyBAQAogCWF2NzExMC0+cGxheWluZyB8PSBhdjsKIAlzd2l0Y2ggKGF2NzExMC0+cGxheWluZykgewogCWNhc2UgUlBfQVVESU86Ci0JCWF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1JFQ19QTEFZLCBfX1BsYXksIDIsIEF1ZGlvUEVTLCAwKTsKKwkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUGxheSwgMiwgQXVkaW9QRVMsIDApOwogCQlicmVhazsKIAljYXNlIFJQX1ZJREVPOgotCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19QbGF5LCAyLCBWaWRlb1BFUywgMCk7CisJCXJldCA9IGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1JFQ19QTEFZLCBfX1BsYXksIDIsIFZpZGVvUEVTLCAwKTsKIAkJYXY3MTEwLT5zaW5mbyA9IDA7CiAJCWJyZWFrOwogCWNhc2UgUlBfQVY6CiAJCWF2NzExMC0+c2luZm8gPSAwOwotCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19QbGF5LCAyLCBBVl9QRVMsIDApOworCQlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19QbGF5LCAyLCBBVl9QRVMsIDApOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIGF2NzExMC0+cGxheWluZzsKKwlpZiAoIXJldCkKKwkJcmV0ID0gYXY3MTEwLT5wbGF5aW5nOworCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgYXY3MTEwX2F2X3N0b3Aoc3RydWN0IGF2NzExMCAqYXY3MTEwLCBpbnQgYXYpCitpbnQgYXY3MTEwX2F2X3N0b3Aoc3RydWN0IGF2NzExMCAqYXY3MTEwLCBpbnQgYXYpCiB7CisJaW50IHJldCA9IDA7CiAJZHByaW50aygyLCAiYXY3MTEwOiVwLCBcbiIsIGF2NzExMCk7CiAKIAlpZiAoIShhdjcxMTAtPnBsYXlpbmcgJiBhdikgJiYgIShhdjcxMTAtPnJlY19tb2RlICYgYXYpKQotCQlyZXR1cm47Ci0KKwkJcmV0dXJuIDA7CiAJYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fU3RvcCwgMCk7CiAJaWYgKGF2NzExMC0+cGxheWluZykgewogCQlhdjcxMTAtPnBsYXlpbmcgJj0gfmF2OwogCQlzd2l0Y2ggKGF2NzExMC0+cGxheWluZykgewogCQljYXNlIFJQX0FVRElPOgotCQkJYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUGxheSwgMiwgQXVkaW9QRVMsIDApOworCQkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUGxheSwgMiwgQXVkaW9QRVMsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgUlBfVklERU86Ci0JCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19QbGF5LCAyLCBWaWRlb1BFUywgMCk7CisJCQlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19QbGF5LCAyLCBWaWRlb1BFUywgMCk7CiAJCQlicmVhazsKIAkJY2FzZSBSUF9OT05FOgotCQkJYXY3MTEwX3NldF92aWRtb2RlKGF2NzExMCwgYXY3MTEwLT52aWRtb2RlKTsKKwkJCXJldCA9IGF2NzExMF9zZXRfdmlkbW9kZShhdjcxMTAsIGF2NzExMC0+dmlkbW9kZSk7CiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCWF2NzExMC0+cmVjX21vZGUgJj0gfmF2OwogCQlzd2l0Y2ggKGF2NzExMC0+cmVjX21vZGUpIHsKIAkJY2FzZSBSUF9BVURJTzoKLQkJCWF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1JFQ19QTEFZLCBfX1JlY29yZCwgMiwgQXVkaW9QRVMsIDApOworCQkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUmVjb3JkLCAyLCBBdWRpb1BFUywgMCk7CiAJCQlicmVhazsKIAkJY2FzZSBSUF9WSURFTzoKLQkJCWF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1JFQ19QTEFZLCBfX1JlY29yZCwgMiwgVmlkZW9QRVMsIDApOworCQkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUmVjb3JkLCAyLCBWaWRlb1BFUywgMCk7CiAJCQlicmVhazsKIAkJY2FzZSBSUF9OT05FOgogCQkJYnJlYWs7CiAJCX0KIAl9CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0zMTcsMTkgKzMyMiwyMiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGF2NzExMF9zZXRfdmlkbW9kZShzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIGludCBtb2RlKQoraW50IGF2NzExMF9zZXRfdmlkbW9kZShzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIGludCBtb2RlKQogeworCWludCByZXQ7CiAJZHByaW50aygyLCAiYXY3MTEwOiVwLCBcbiIsIGF2NzExMCk7CiAKLQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9FTkNPREVSLCBMb2FkVmlkQ29kZSwgMSwgbW9kZSk7CisJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfRU5DT0RFUiwgTG9hZFZpZENvZGUsIDEsIG1vZGUpOwogCi0JaWYgKCFhdjcxMTAtPnBsYXlpbmcpIHsKLQkJQ2hhbmdlUElEcyhhdjcxMTAsIGF2NzExMC0+cGlkc1tETVhfUEVTX1ZJREVPXSwKKwlpZiAoIXJldCAmJiAhYXY3MTEwLT5wbGF5aW5nKSB7CisJCXJldCA9IENoYW5nZVBJRHMoYXY3MTEwLCBhdjcxMTAtPnBpZHNbRE1YX1BFU19WSURFT10sCiAJCQkgICBhdjcxMTAtPnBpZHNbRE1YX1BFU19BVURJT10sCiAJCQkgICBhdjcxMTAtPnBpZHNbRE1YX1BFU19URUxFVEVYVF0sCiAJCQkgICAwLCBhdjcxMTAtPnBpZHNbRE1YX1BFU19QQ1JdKTsKLQkJYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUElERklMVEVSLCBTY2FuLCAwKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9QSURGSUxURVIsIFNjYW4sIDApOwogCX0KKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTM0MCwxNyArMzQ4LDE4IEBACiAJVklERU9fTU9ERV9QQUwsIFZJREVPX01PREVfUEFMLCBWSURFT19NT0RFX1BBTCwgVklERU9fTU9ERV9QQUwsCiB9OwogCi1zdGF0aWMgdm9pZCBnZXRfdmlkZW9fZm9ybWF0KHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTggKmJ1ZiwgaW50IGNvdW50KQorc3RhdGljIGludCBnZXRfdmlkZW9fZm9ybWF0KHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTggKmJ1ZiwgaW50IGNvdW50KQogewogCWludCBpOwogCWludCBoc2l6ZSwgdnNpemU7CiAJaW50IHN3OwogCXU4ICpwOworCWludCByZXQgPSAwOwogCiAJZHByaW50aygyLCAiYXY3MTEwOiVwLCBcbiIsIGF2NzExMCk7CiAKIAlpZiAoYXY3MTEwLT5zaW5mbykKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAlmb3IgKGkgPSA3OyBpIDwgY291bnQgLSAxMDsgaSsrKSB7CiAJCXAgPSBidWYgKyBpOwogCQlpZiAocFswXSB8fCBwWzFdIHx8IHBbMl0gIT0gMHgwMSB8fCBwWzNdICE9IDB4YjMpCkBAIC0zNTksMTEgKzM2OCwxNCBAQAogCQloc2l6ZSA9ICgocFsxXSAmMHhGMCkgPj4gNCkgfCAocFswXSA8PCA0KTsKIAkJdnNpemUgPSAoKHBbMV0gJjB4MEYpIDw8IDgpIHwgKHBbMl0pOwogCQlzdyA9IChwWzNdICYgMHgwRik7Ci0JCWF2NzExMF9zZXRfdmlkbW9kZShhdjcxMTAsIHN3Mm1vZGVbc3ddKTsKLQkJZHByaW50aygyLCAicGxheWJhY2sgJWR4JWQgZnI9JWRcbiIsIGhzaXplLCB2c2l6ZSwgc3cpOwotCQlhdjcxMTAtPnNpbmZvID0gMTsKKwkJcmV0ID0gYXY3MTEwX3NldF92aWRtb2RlKGF2NzExMCwgc3cybW9kZVtzd10pOworCQlpZiAoIXJldCkgeworCQkJZHByaW50aygyLCAicGxheWJhY2sgJWR4JWQgZnI9JWRcbiIsIGhzaXplLCB2c2l6ZSwgc3cpOworCQkJYXY3MTEwLT5zaW5mbyA9IDE7CisJCX0KIAkJYnJlYWs7CiAJfQorCXJldHVybiByZXQ7CiB9CiAKIApAQCAtOTc0LDcgKzk4Niw3IEBACiAJdW5zaWduZWQgbG9uZyBhcmcgPSAodW5zaWduZWQgbG9uZykgcGFyZzsKIAlpbnQgcmV0ID0gMDsKIAotCWRwcmludGsoMiwgImF2NzExMDolcCwgXG4iLCBhdjcxMTApOworCWRwcmludGsoMSwgImF2NzExMDolcCwgY21kPSUwNHhcbiIsIGF2NzExMCxjbWQpOwogCiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JET05MWSkgewogCQlpZiAoIGNtZCAhPSBWSURFT19HRVRfU1RBVFVTICYmIGNtZCAhPSBWSURFT19HRVRfRVZFTlQgJiYKQEAgLTk4Nyw0OSArOTk5LDU3IEBACiAJY2FzZSBWSURFT19TVE9QOgogCQlhdjcxMTAtPnZpZGVvc3RhdGUucGxheV9zdGF0ZSA9IFZJREVPX1NUT1BQRUQ7CiAJCWlmIChhdjcxMTAtPnZpZGVvc3RhdGUuc3RyZWFtX3NvdXJjZSA9PSBWSURFT19TT1VSQ0VfTUVNT1JZKQotCQkJYXY3MTEwX2F2X3N0b3AoYXY3MTEwLCBSUF9WSURFTyk7CisJCQlyZXQgPSBhdjcxMTBfYXZfc3RvcChhdjcxMTAsIFJQX1ZJREVPKTsKIAkJZWxzZQotCQkJdmlkY29tKGF2NzExMCwgVklERU9fQ01EX1NUT1AsCisJCQlyZXQgPSB2aWRjb20oYXY3MTEwLCBWSURFT19DTURfU1RPUCwKIAkJCSAgICAgICBhdjcxMTAtPnZpZGVvc3RhdGUudmlkZW9fYmxhbmsgPyAwIDogMSk7Ci0JCWF2NzExMC0+dHJpY2ttb2RlID0gVFJJQ0tfTk9ORTsKKwkJaWYgKCFyZXQpCisJCQlhdjcxMTAtPnRyaWNrbW9kZSA9IFRSSUNLX05PTkU7CiAJCWJyZWFrOwogCiAJY2FzZSBWSURFT19QTEFZOgogCQlhdjcxMTAtPnRyaWNrbW9kZSA9IFRSSUNLX05PTkU7CiAJCWlmIChhdjcxMTAtPnZpZGVvc3RhdGUucGxheV9zdGF0ZSA9PSBWSURFT19GUkVFWkVEKSB7CiAJCQlhdjcxMTAtPnZpZGVvc3RhdGUucGxheV9zdGF0ZSA9IFZJREVPX1BMQVlJTkc7Ci0JCQl2aWRjb20oYXY3MTEwLCBWSURFT19DTURfUExBWSwgMCk7CisJCQlyZXQgPSB2aWRjb20oYXY3MTEwLCBWSURFT19DTURfUExBWSwgMCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKGF2NzExMC0+dmlkZW9zdGF0ZS5zdHJlYW1fc291cmNlID09IFZJREVPX1NPVVJDRV9NRU1PUlkpIHsKIAkJCWlmIChhdjcxMTAtPnBsYXlpbmcgPT0gUlBfQVYpIHsKLQkJCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19TdG9wLCAwKTsKKwkJCQlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19TdG9wLCAwKTsKKwkJCQlpZiAocmV0KQorCQkJCQlicmVhazsKIAkJCQlhdjcxMTAtPnBsYXlpbmcgJj0gflJQX1ZJREVPOwogCQkJfQotCQkJYXY3MTEwX2F2X3N0YXJ0X3BsYXkoYXY3MTEwLCBSUF9WSURFTyk7Ci0JCQl2aWRjb20oYXY3MTEwLCBWSURFT19DTURfUExBWSwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQkvL2F2NzExMF9hdl9zdG9wKGF2NzExMCwgUlBfVklERU8pOwotCQkJdmlkY29tKGF2NzExMCwgVklERU9fQ01EX1BMQVksIDApOworCQkJcmV0ID0gYXY3MTEwX2F2X3N0YXJ0X3BsYXkoYXY3MTEwLCBSUF9WSURFTyk7CiAJCX0KLQkJYXY3MTEwLT52aWRlb3N0YXRlLnBsYXlfc3RhdGUgPSBWSURFT19QTEFZSU5HOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHZpZGNvbShhdjcxMTAsIFZJREVPX0NNRF9QTEFZLCAwKTsKKwkJaWYgKCFyZXQpCisJCQlhdjcxMTAtPnZpZGVvc3RhdGUucGxheV9zdGF0ZSA9IFZJREVPX1BMQVlJTkc7CiAJCWJyZWFrOwogCiAJY2FzZSBWSURFT19GUkVFWkU6CiAJCWF2NzExMC0+dmlkZW9zdGF0ZS5wbGF5X3N0YXRlID0gVklERU9fRlJFRVpFRDsKIAkJaWYgKGF2NzExMC0+cGxheWluZyAmIFJQX1ZJREVPKQotCQkJYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUGF1c2UsIDApOworCQkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fUGF1c2UsIDApOwogCQllbHNlCi0JCQl2aWRjb20oYXY3MTEwLCBWSURFT19DTURfRlJFRVpFLCAxKTsKLQkJYXY3MTEwLT50cmlja21vZGUgPSBUUklDS19GUkVFWkU7CisJCQlyZXQgPSB2aWRjb20oYXY3MTEwLCBWSURFT19DTURfRlJFRVpFLCAxKTsKKwkJaWYgKCFyZXQpCisJCQlhdjcxMTAtPnRyaWNrbW9kZSA9IFRSSUNLX0ZSRUVaRTsKIAkJYnJlYWs7CiAKIAljYXNlIFZJREVPX0NPTlRJTlVFOgogCQlpZiAoYXY3MTEwLT5wbGF5aW5nICYgUlBfVklERU8pCi0JCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19Db250aW51ZSwgMCk7Ci0JCXZpZGNvbShhdjcxMTAsIFZJREVPX0NNRF9QTEFZLCAwKTsKLQkJYXY3MTEwLT52aWRlb3N0YXRlLnBsYXlfc3RhdGUgPSBWSURFT19QTEFZSU5HOwotCQlhdjcxMTAtPnRyaWNrbW9kZSA9IFRSSUNLX05PTkU7CisJCQlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwgX19Db250aW51ZSwgMCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gdmlkY29tKGF2NzExMCwgVklERU9fQ01EX1BMQVksIDApOworCQlpZiAoIXJldCkgeworCQkJYXY3MTEwLT52aWRlb3N0YXRlLnBsYXlfc3RhdGUgPSBWSURFT19QTEFZSU5HOworCQkJYXY3MTEwLT50cmlja21vZGUgPSBUUklDS19OT05FOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBWSURFT19TRUxFQ1RfU09VUkNFOgpAQCAtMTA0NSw3ICsxMDY1LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFZJREVPX0dFVF9FVkVOVDoKLQkJcmV0PWR2Yl92aWRlb19nZXRfZXZlbnQoYXY3MTEwLCBwYXJnLCBmaWxlLT5mX2ZsYWdzKTsKKwkJcmV0ID0gZHZiX3ZpZGVvX2dldF9ldmVudChhdjcxMTAsIHBhcmcsIGZpbGUtPmZfZmxhZ3MpOwogCQlicmVhazsKIAogCWNhc2UgVklERU9fR0VUX1NJWkU6CkBAIC0xMTA1LDI1ICsxMTI1LDMyIEBACiAJY2FzZSBWSURFT19GQVNUX0ZPUldBUkQ6CiAJCS8vbm90ZTogYXJnIGlzIGlnbm9yZWQgYnkgZmlybXdhcmUKIAkJaWYgKGF2NzExMC0+cGxheWluZyAmIFJQX1ZJREVPKQotCQkJYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksCi0JCQkJICAgICAgX19TY2FuX0ksIDIsIEFWX1BFUywgMCk7CisJCQlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwKKwkJCQkJICAgIF9fU2Nhbl9JLCAyLCBBVl9QRVMsIDApOwogCQllbHNlCi0JCQl2aWRjb20oYXY3MTEwLCBWSURFT19DTURfRkZXRCwgYXJnKTsKLQkJYXY3MTEwLT50cmlja21vZGUgPSBUUklDS19GQVNUOwotCQlhdjcxMTAtPnZpZGVvc3RhdGUucGxheV9zdGF0ZSA9IFZJREVPX1BMQVlJTkc7CisJCQlyZXQgPSB2aWRjb20oYXY3MTEwLCBWSURFT19DTURfRkZXRCwgYXJnKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWF2NzExMC0+dHJpY2ttb2RlID0gVFJJQ0tfRkFTVDsKKwkJCWF2NzExMC0+dmlkZW9zdGF0ZS5wbGF5X3N0YXRlID0gVklERU9fUExBWUlORzsKKwkJfQogCQlicmVhazsKIAogCWNhc2UgVklERU9fU0xPV01PVElPTjoKIAkJaWYgKGF2NzExMC0+cGxheWluZyZSUF9WSURFTykgewotCQkJYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksIF9fU2xvdywgMiwgMCwgMCk7Ci0JCQl2aWRjb20oYXY3MTEwLCBWSURFT19DTURfU0xPVywgYXJnKTsKKwkJCXJldCA9IGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1JFQ19QTEFZLCBfX1Nsb3csIDIsIDAsIDApOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gdmlkY29tKGF2NzExMCwgVklERU9fQ01EX1NMT1csIGFyZyk7CiAJCX0gZWxzZSB7Ci0JCQl2aWRjb20oYXY3MTEwLCBWSURFT19DTURfUExBWSwgMCk7Ci0JCQl2aWRjb20oYXY3MTEwLCBWSURFT19DTURfU1RPUCwgMCk7Ci0JCQl2aWRjb20oYXY3MTEwLCBWSURFT19DTURfU0xPVywgYXJnKTsKKwkJCXJldCA9IHZpZGNvbShhdjcxMTAsIFZJREVPX0NNRF9QTEFZLCAwKTsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IHZpZGNvbShhdjcxMTAsIFZJREVPX0NNRF9TVE9QLCAwKTsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IHZpZGNvbShhdjcxMTAsIFZJREVPX0NNRF9TTE9XLCBhcmcpOwogCQl9Ci0JCWF2NzExMC0+dHJpY2ttb2RlID0gVFJJQ0tfU0xPVzsKLQkJYXY3MTEwLT52aWRlb3N0YXRlLnBsYXlfc3RhdGUgPSBWSURFT19QTEFZSU5HOworCQlpZiAoIXJldCkgeworCQkJYXY3MTEwLT50cmlja21vZGUgPSBUUklDS19TTE9XOworCQkJYXY3MTEwLT52aWRlb3N0YXRlLnBsYXlfc3RhdGUgPSBWSURFT19QTEFZSU5HOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBWSURFT19HRVRfQ0FQQUJJTElUSUVTOgpAQCAtMTEzNiwxOCArMTE2MywyMSBAQAogCQlhdjcxMTBfaXBhY2tfcmVzZXQoJmF2NzExMC0+aXBhY2tbMV0pOwogCiAJCWlmIChhdjcxMTAtPnBsYXlpbmcgPT0gUlBfQVYpIHsKLQkJCWF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1JFQ19QTEFZLAotCQkJCSAgICAgIF9fUGxheSwgMiwgQVZfUEVTLCAwKTsKKwkJCXJldCA9IGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1JFQ19QTEFZLAorCQkJCQkgICAgX19QbGF5LCAyLCBBVl9QRVMsIDApOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKIAkJCWlmIChhdjcxMTAtPnRyaWNrbW9kZSA9PSBUUklDS19GQVNUKQotCQkJCWF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX1JFQ19QTEFZLAotCQkJCQkgICAgICBfX1NjYW5fSSwgMiwgQVZfUEVTLCAwKTsKKwkJCQlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwKKwkJCQkJCSAgICBfX1NjYW5fSSwgMiwgQVZfUEVTLCAwKTsKIAkJCWlmIChhdjcxMTAtPnRyaWNrbW9kZSA9PSBUUklDS19TTE9XKSB7Ci0JCQkJYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksCi0JCQkJCSAgICAgIF9fU2xvdywgMiwgMCwgMCk7Ci0JCQkJdmlkY29tKGF2NzExMCwgVklERU9fQ01EX1NMT1csIGFyZyk7CisJCQkJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfUkVDX1BMQVksCisJCQkJCQkgICAgX19TbG93LCAyLCAwLCAwKTsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gdmlkY29tKGF2NzExMCwgVklERU9fQ01EX1NMT1csIGFyZyk7CiAJCQl9CiAJCQlpZiAoYXY3MTEwLT50cmlja21vZGUgPT0gVFJJQ0tfRlJFRVpFKQotCQkJCXZpZGNvbShhdjcxMTAsIFZJREVPX0NNRF9TVE9QLCAxKTsKKwkJCQlyZXQgPSB2aWRjb20oYXY3MTEwLCBWSURFT19DTURfU1RPUCwgMSk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTExNzAsNyArMTIwMCw3IEBACiAJdW5zaWduZWQgbG9uZyBhcmcgPSAodW5zaWduZWQgbG9uZykgcGFyZzsKIAlpbnQgcmV0ID0gMDsKIAotCWRwcmludGsoMiwgImF2NzExMDolcCwgXG4iLCBhdjcxMTApOworCWRwcmludGsoMSwgImF2NzExMDolcCwgY21kPSUwNHhcbiIsIGF2NzExMCxjbWQpOwogCiAJaWYgKCgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpICYmCiAJICAgIChjbWQgIT0gQVVESU9fR0VUX1NUQVRVUykpCkBAIC0xMTc5LDI4ICsxMjA5LDMyIEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEFVRElPX1NUT1A6CiAJCWlmIChhdjcxMTAtPmF1ZGlvc3RhdGUuc3RyZWFtX3NvdXJjZSA9PSBBVURJT19TT1VSQ0VfTUVNT1JZKQotCQkJYXY3MTEwX2F2X3N0b3AoYXY3MTEwLCBSUF9BVURJTyk7CisJCQlyZXQgPSBhdjcxMTBfYXZfc3RvcChhdjcxMTAsIFJQX0FVRElPKTsKIAkJZWxzZQotCQkJYXVkY29tKGF2NzExMCwgQVVESU9fQ01EX01VVEUpOwotCQlhdjcxMTAtPmF1ZGlvc3RhdGUucGxheV9zdGF0ZSA9IEFVRElPX1NUT1BQRUQ7CisJCQlyZXQgPSBhdWRjb20oYXY3MTEwLCBBVURJT19DTURfTVVURSk7CisJCWlmICghcmV0KQorCQkJYXY3MTEwLT5hdWRpb3N0YXRlLnBsYXlfc3RhdGUgPSBBVURJT19TVE9QUEVEOwogCQlicmVhazsKIAogCWNhc2UgQVVESU9fUExBWToKIAkJaWYgKGF2NzExMC0+YXVkaW9zdGF0ZS5zdHJlYW1fc291cmNlID09IEFVRElPX1NPVVJDRV9NRU1PUlkpCi0JCQlhdjcxMTBfYXZfc3RhcnRfcGxheShhdjcxMTAsIFJQX0FVRElPKTsKLQkJYXVkY29tKGF2NzExMCwgQVVESU9fQ01EX1VOTVVURSk7Ci0JCWF2NzExMC0+YXVkaW9zdGF0ZS5wbGF5X3N0YXRlID0gQVVESU9fUExBWUlORzsKKwkJCXJldCA9IGF2NzExMF9hdl9zdGFydF9wbGF5KGF2NzExMCwgUlBfQVVESU8pOworCQlpZiAoIXJldCkKKwkJCXJldCA9IGF1ZGNvbShhdjcxMTAsIEFVRElPX0NNRF9VTk1VVEUpOworCQlpZiAoIXJldCkKKwkJCWF2NzExMC0+YXVkaW9zdGF0ZS5wbGF5X3N0YXRlID0gQVVESU9fUExBWUlORzsKIAkJYnJlYWs7CiAKIAljYXNlIEFVRElPX1BBVVNFOgotCQlhdWRjb20oYXY3MTEwLCBBVURJT19DTURfTVVURSk7Ci0JCWF2NzExMC0+YXVkaW9zdGF0ZS5wbGF5X3N0YXRlID0gQVVESU9fUEFVU0VEOworCQlyZXQgPSBhdWRjb20oYXY3MTEwLCBBVURJT19DTURfTVVURSk7CisJCWlmICghcmV0KQorCQkJYXY3MTEwLT5hdWRpb3N0YXRlLnBsYXlfc3RhdGUgPSBBVURJT19QQVVTRUQ7CiAJCWJyZWFrOwogCiAJY2FzZSBBVURJT19DT05USU5VRToKIAkJaWYgKGF2NzExMC0+YXVkaW9zdGF0ZS5wbGF5X3N0YXRlID09IEFVRElPX1BBVVNFRCkgewogCQkJYXY3MTEwLT5hdWRpb3N0YXRlLnBsYXlfc3RhdGUgPSBBVURJT19QTEFZSU5HOwotCQkJYXVkY29tKGF2NzExMCwgQVVESU9fQ01EX01VVEUgfCBBVURJT19DTURfUENNMTYpOworCQkJcmV0ID0gYXVkY29tKGF2NzExMCwgQVVESU9fQ01EX1VOTVVURSB8IEFVRElPX0NNRF9QQ00xNik7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTEyMTAsMTQgKzEyNDQsMTUgQEAKIAogCWNhc2UgQVVESU9fU0VUX01VVEU6CiAJewotCQlhdWRjb20oYXY3MTEwLCBhcmcgPyBBVURJT19DTURfTVVURSA6IEFVRElPX0NNRF9VTk1VVEUpOwotCQlhdjcxMTAtPmF1ZGlvc3RhdGUubXV0ZV9zdGF0ZSA9IChpbnQpIGFyZzsKKwkJcmV0ID0gYXVkY29tKGF2NzExMCwgYXJnID8gQVVESU9fQ01EX01VVEUgOiBBVURJT19DTURfVU5NVVRFKTsKKwkJaWYgKCFyZXQpCisJCQlhdjcxMTAtPmF1ZGlvc3RhdGUubXV0ZV9zdGF0ZSA9IChpbnQpIGFyZzsKIAkJYnJlYWs7CiAJfQogCiAJY2FzZSBBVURJT19TRVRfQVZfU1lOQzoKIAkJYXY3MTEwLT5hdWRpb3N0YXRlLkFWX3N5bmNfc3RhdGUgPSAoaW50KSBhcmc7Ci0JCWF1ZGNvbShhdjcxMTAsIGFyZyA/IEFVRElPX0NNRF9TWU5DX09OIDogQVVESU9fQ01EX1NZTkNfT0ZGKTsKKwkJcmV0ID0gYXVkY29tKGF2NzExMCwgYXJnID8gQVVESU9fQ01EX1NZTkNfT04gOiBBVURJT19DTURfU1lOQ19PRkYpOwogCQlicmVhazsKIAogCWNhc2UgQVVESU9fU0VUX0JZUEFTU19NT0RFOgpAQCAtMTIyOSwyMSArMTI2NCwyNCBAQAogCiAJCXN3aXRjaChhdjcxMTAtPmF1ZGlvc3RhdGUuY2hhbm5lbF9zZWxlY3QpIHsKIAkJY2FzZSBBVURJT19TVEVSRU86Ci0JCQlhdWRjb20oYXY3MTEwLCBBVURJT19DTURfU1RFUkVPKTsKLQkJCWlmIChhdjcxMTAtPmFkYWNfdHlwZSA9PSBEVkJfQURBQ19DUllTVEFMKQotCQkJCWkyY193cml0ZXJlZyhhdjcxMTAsIDB4MjAsIDB4MDIsIDB4NDkpOworCQkJcmV0ID0gYXVkY29tKGF2NzExMCwgQVVESU9fQ01EX1NURVJFTyk7CisJCQlpZiAoIXJldCkKKwkJCQlpZiAoYXY3MTEwLT5hZGFjX3R5cGUgPT0gRFZCX0FEQUNfQ1JZU1RBTCkKKwkJCQkJaTJjX3dyaXRlcmVnKGF2NzExMCwgMHgyMCwgMHgwMiwgMHg0OSk7CiAJCQlicmVhazsKIAogCQljYXNlIEFVRElPX01PTk9fTEVGVDoKLQkJCWF1ZGNvbShhdjcxMTAsIEFVRElPX0NNRF9NT05PX0wpOwotCQkJaWYgKGF2NzExMC0+YWRhY190eXBlID09IERWQl9BREFDX0NSWVNUQUwpCi0JCQkJaTJjX3dyaXRlcmVnKGF2NzExMCwgMHgyMCwgMHgwMiwgMHg0YSk7CisJCQlyZXQgPSBhdWRjb20oYXY3MTEwLCBBVURJT19DTURfTU9OT19MKTsKKwkJCWlmICghcmV0KQorCQkJCWlmIChhdjcxMTAtPmFkYWNfdHlwZSA9PSBEVkJfQURBQ19DUllTVEFMKQorCQkJCQlpMmNfd3JpdGVyZWcoYXY3MTEwLCAweDIwLCAweDAyLCAweDRhKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQVVESU9fTU9OT19SSUdIVDoKLQkJCWF1ZGNvbShhdjcxMTAsIEFVRElPX0NNRF9NT05PX1IpOwotCQkJaWYgKGF2NzExMC0+YWRhY190eXBlID09IERWQl9BREFDX0NSWVNUQUwpCi0JCQkJaTJjX3dyaXRlcmVnKGF2NzExMCwgMHgyMCwgMHgwMiwgMHg0NSk7CisJCQlyZXQgPSBhdWRjb20oYXY3MTEwLCBBVURJT19DTURfTU9OT19SKTsKKwkJCWlmICghcmV0KQorCQkJCWlmIChhdjcxMTAtPmFkYWNfdHlwZSA9PSBEVkJfQURBQ19DUllTVEFMKQorCQkJCQlpMmNfd3JpdGVyZWcoYXY3MTEwLCAweDIwLCAweDAyLCAweDQ1KTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0xMjY0LDggKzEzMDIsOCBAQAogCQlkdmJfcmluZ2J1ZmZlcl9mbHVzaF9zcGlubG9ja193YWtldXAoJmF2NzExMC0+YW91dCk7CiAJCWF2NzExMF9pcGFja19yZXNldCgmYXY3MTEwLT5pcGFja1swXSk7CiAJCWlmIChhdjcxMTAtPnBsYXlpbmcgPT0gUlBfQVYpCi0JCQlhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwKLQkJCSAgICAgICBfX1BsYXksIDIsIEFWX1BFUywgMCk7CisJCQlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9SRUNfUExBWSwKKwkJCQkJICAgIF9fUGxheSwgMiwgQVZfUEVTLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURJT19TRVRfSUQ6CiAKQEAgLTEyNzQsNyArMTMxMiw3IEBACiAJewogCQlzdHJ1Y3QgYXVkaW9fbWl4ZXIgKmFtaXggPSAoc3RydWN0IGF1ZGlvX21peGVyICopcGFyZzsKIAotCQlhdjcxMTBfc2V0X3ZvbHVtZShhdjcxMTAsIGFtaXgtPnZvbHVtZV9sZWZ0LCBhbWl4LT52b2x1bWVfcmlnaHQpOworCQlyZXQgPSBhdjcxMTBfc2V0X3ZvbHVtZShhdjcxMTAsIGFtaXgtPnZvbHVtZV9sZWZ0LCBhbWl4LT52b2x1bWVfcmlnaHQpOwogCQlicmVhazsKIAl9CiAJY2FzZSBBVURJT19TRVRfU1RSRUFNVFlQRToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmgKaW5kZXggY2M1ZTdhNy4uNDVkYzE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmgKQEAgLTMsMTQgKzMsMTQgQEAKIAogc3RydWN0IGF2NzExMDsKIAotZXh0ZXJuIHZvaWQgYXY3MTEwX3NldF92aWRtb2RlKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgaW50IG1vZGUpOworZXh0ZXJuIGludCBhdjcxMTBfc2V0X3ZpZG1vZGUoc3RydWN0IGF2NzExMCAqYXY3MTEwLCBpbnQgbW9kZSk7CiAKIGV4dGVybiBpbnQgYXY3MTEwX3JlY29yZF9jYihzdHJ1Y3QgZHZiX2ZpbHRlcl9wZXMydHMgKnAydCwgdTggKmJ1Ziwgc2l6ZV90IGxlbik7CiBleHRlcm4gaW50IGF2NzExMF9wZXNfcGxheSh2b2lkICpkZXN0LCBzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKmJ1ZiwgaW50IGRsZW4pOwogZXh0ZXJuIGludCBhdjcxMTBfd3JpdGVfdG9fZGVjb2RlcihzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwogCiBleHRlcm4gaW50IGF2NzExMF9zZXRfdm9sdW1lKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgaW50IHZvbGxlZnQsIGludCB2b2xyaWdodCk7Ci1leHRlcm4gdm9pZCBhdjcxMTBfYXZfc3RvcChzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIGludCBhdik7CitleHRlcm4gaW50IGF2NzExMF9hdl9zdG9wKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgaW50IGF2KTsKIGV4dGVybiBpbnQgYXY3MTEwX2F2X3N0YXJ0X3JlY29yZChzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIGludCBhdiwKIAkJCSAgc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKTsKIGV4dGVybiBpbnQgYXY3MTEwX2F2X3N0YXJ0X3BsYXkoc3RydWN0IGF2NzExMCAqYXY3MTEwLCBpbnQgYXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuYwppbmRleCA3ZmE0YTBlLi4xMjIwODI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCQlyZXR1cm4gMDsKIAkJdWRlbGF5KDUpOwogCX0KLQlyZXR1cm4gLTE7CisJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKIHN0YXRpYyBpbnQgbG9hZF9kcmFtKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTMyICpkYXRhLCBpbnQgbGVuKQpAQCAtMTU1LDcgKzE1NSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGJsb2NrczsgaSsrKSB7CiAJCWlmICh3YWl0ZGViaShhdjcxMTAsIEJPT1RfU1RBVEUsIEJPT1RTVEFURV9CVUZGRVJfRU1QVFkpIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6IGxvYWRfZHJhbSgpOiB0aW1lb3V0IGF0IGJsb2NrICVkXG4iLCBpKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAJCWRwcmludGsoNCwgIndyaXRpbmcgRFJBTSBibG9jayAlZFxuIiwgaSk7CiAJCW13ZGViaShhdjcxMTAsIERFQklTV0FCLCBib290YmxvY2ssCkBAIC0xNzAsNyArMTcwLDcgQEAKIAlpZiAocmVzdCA+IDApIHsKIAkJaWYgKHdhaXRkZWJpKGF2NzExMCwgQk9PVF9TVEFURSwgQk9PVFNUQVRFX0JVRkZFUl9FTVBUWSkgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogbG9hZF9kcmFtKCk6IHRpbWVvdXQgYXQgbGFzdCBibG9ja1xuIik7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCQlpZiAocmVzdCA+IDQpCiAJCQltd2RlYmkoYXY3MTEwLCBERUJJU1dBQiwgYm9vdGJsb2NrLApAQCAtMTg1LDEzICsxODUsMTMgQEAKIAl9CiAJaWYgKHdhaXRkZWJpKGF2NzExMCwgQk9PVF9TVEFURSwgQk9PVFNUQVRFX0JVRkZFUl9FTVBUWSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBsb2FkX2RyYW0oKTogdGltZW91dCBhZnRlciBsYXN0IGJsb2NrXG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQk9PVF9TSVpFLCAwLCAyKTsKIAlpd2RlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBCT09UX1NUQVRFLCBCT09UU1RBVEVfQlVGRkVSX0ZVTEwsIDIpOwogCWlmICh3YWl0ZGViaShhdjcxMTAsIEJPT1RfU1RBVEUsIEJPT1RTVEFURV9CT09UX0NPTVBMRVRFKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6IGxvYWRfZHJhbSgpOiBmaW5hbCBoYW5kc2hha2UgdGltZW91dFxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjYzLDcgKzI2Myw3IEBACiAJaWYgKHNhYTcxNDZfd2FpdF9mb3JfZGViaV9kb25lKGF2NzExMC0+ZGV2LCAxKSkgewogCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogYXY3MTEwX2Jvb3Rhcm0oKTogIgogCQkgICAgICAgInNhYTcxNDZfd2FpdF9mb3JfZGViaV9kb25lKCkgdGltZWQgb3V0XG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAJc2FhNzE0Nl9zZXRncGlvKGRldiwgUkVTRVRfTElORSwgU0FBNzE0Nl9HUElPX09VVEhJKTsKIAltZGVsYXkoMSk7CkBAIC0yODQsNyArMjg0LDcgQEAKIAlpZiAoc2FhNzE0Nl93YWl0X2Zvcl9kZWJpX2RvbmUoYXY3MTEwLT5kZXYsIDEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBhdjcxMTBfYm9vdGFybSgpOiAiCiAJCSAgICAgICAic2FhNzE0Nl93YWl0X2Zvcl9kZWJpX2RvbmUoKSB0aW1lZCBvdXQgYWZ0ZXIgbG9hZGluZyBEUkFNXG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAJc2FhNzE0Nl9zZXRncGlvKGRldiwgUkVTRVRfTElORSwgU0FBNzE0Nl9HUElPX09VVEhJKTsKIAltc2xlZXAoMzApOwkvKiB0aGUgZmlybXdhcmUgbmVlZHMgc29tZSB0aW1lIHRvIGluaXRpYWxpemUgKi8KQEAgLTMwOCw2ICszMDgsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJdTMyIHN0YXQ7CisJaW50IGVycjsKIAogCWlmIChGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPD0gMHgyNjFjKSB7CiAJCS8qIG5vdCBzdXBwb3J0ZWQgYnkgb2xkIGZpcm13YXJlICovCkBAIC0zMTgsMTcgKzMxOSwxNyBAQAogCS8qIG5ldyBmaXJtd2FyZSAqLwogCXN0YXJ0ID0gamlmZmllczsKIAlmb3IgKDs7KSB7CisJCWVyciA9IHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnQgKyBBUk1fV0FJVF9GUkVFKTsKIAkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXY3MTEwLT5kY29tbG9jaykpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQlzdGF0ID0gcmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBNU0dTVEFURSwgMCwgMik7CiAJCXVwKCZhdjcxMTAtPmRjb21sb2NrKTsKLQkJaWYgKChzdGF0ICYgZmxhZ3MpID09IDApIHsKKwkJaWYgKChzdGF0ICYgZmxhZ3MpID09IDApCiAJCQlicmVhazsKLQkJfQotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX0ZSRUUpKSB7CisJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgTVNHU1RBVEUgJTA0eFxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIHN0YXQgJiBmbGFncyk7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCQltc2xlZXAoMSk7CiAJfQpAQCAtMzQyLDYgKzM0Myw3IEBACiAJY2hhciAqdHlwZSA9IE5VTEw7CiAJdTE2IGZsYWdzWzJdID0gezAsIDB9OwogCXUzMiBzdGF0OworCWludCBlcnI7CiAKIC8vCWRwcmludGsoNCwgIiVwXG4iLCBhdjcxMTApOwogCkBAIC0zNTEsMjQgKzM1MywzMCBAQAogCX0KIAogCXN0YXJ0ID0gamlmZmllczsKLQl3aGlsZSAocmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBDT01NQU5ELCAwLCAyICkpIHsKLQkJbXNsZWVwKDEpOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX0ZSRUUpKSB7CisJd2hpbGUgKDEpIHsKKwkJZXJyID0gdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX0ZSRUUpOworCQlpZiAocmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBDT01NQU5ELCAwLCAyKSA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiAlcygpOiB0aW1lb3V0IHdhaXRpbmcgZm9yIENPTU1BTkQgaWRsZVxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CisJCW1zbGVlcCgxKTsKIAl9CiAKIAl3ZGViaShhdjcxMTAsIERFQklOT1NXQVAsIENPTV9JRl9MT0NLLCAweGZmZmYsIDIpOwogCiAjaWZuZGVmIF9OT0hBTkRTSEFLRQogCXN0YXJ0ID0gamlmZmllczsKLQl3aGlsZSAocmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBIQU5EU0hBS0VfUkVHLCAwLCAyICkpIHsKLQkJbXNsZWVwKDEpOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX1NIQUtFKSkgeworCXdoaWxlICgxKSB7CisJCWVyciA9IHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnQgKyBBUk1fV0FJVF9TSEFLRSk7CisJCWlmIChyZGViaShhdjcxMTAsIERFQklOT1NXQVAsIEhBTkRTSEFLRV9SRUcsIDAsIDIpID09IDApCisJCQlicmVhazsKKwkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6ICVzKCk6IHRpbWVvdXQgd2FpdGluZyBmb3IgSEFORFNIQUtFX1JFR1xuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CisJCW1zbGVlcCgxKTsKIAl9CiAjZW5kaWYKIApAQCAtNDAxLDYgKzQwOSw3IEBACiAJCS8qIG5vbi1pbW1lZGlhdGUgQ09NTUFORCB0eXBlICovCiAJCXN0YXJ0ID0gamlmZmllczsKIAkJZm9yICg7OykgeworCQkJZXJyID0gdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX0ZSRUUpOwogCQkJc3RhdCA9IHJkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgTVNHU1RBVEUsIDAsIDIpOwogCQkJaWYgKHN0YXQgJiBmbGFnc1swXSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIFFVRVVFIG92ZXJmbG93XG4iLApAQCAtNDA5LDEwICs0MTgsMTAgQEAKIAkJCX0KIAkJCWlmICgoc3RhdCAmIGZsYWdzWzFdKSA9PSAwKQogCQkJCWJyZWFrOwotCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnQgKyBBUk1fV0FJVF9GUkVFKSkgeworCQkJaWYgKGVycikgewogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXQgd2FpdGluZyBvbiBidXN5ICVzIFFVRVVFXG4iLAogCQkJCQlfX0ZVTkNUSU9OX18sIHR5cGUpOwotCQkJCXJldHVybiAtMTsKKwkJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJCX0KIAkJCW1zbGVlcCgxKTsKIAkJfQpAQCAtNDMyLDEzICs0NDEsMTYgQEAKIAogI2lmZGVmIENPTV9ERUJVRwogCXN0YXJ0ID0gamlmZmllczsKLQl3aGlsZSAocmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBDT01NQU5ELCAwLCAyICkpIHsKLQkJbXNsZWVwKDEpOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX0ZSRUUpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogJXMoKTogdGltZW91dCB3YWl0aW5nIGZvciBDT01NQU5EIHRvIGNvbXBsZXRlXG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJd2hpbGUgKDEpIHsKKwkJZXJyID0gdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX0ZSRUUpOworCQlpZiAocmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBDT01NQU5ELCAwLCAyKSA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiAlcygpOiB0aW1lb3V0IHdhaXRpbmcgZm9yIENPTU1BTkQgJWQgdG8gY29tcGxldGVcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCAoYnVmWzBdID4+IDgpICYgMHhmZik7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQorCQltc2xlZXAoMSk7CiAJfQogCiAJc3RhdCA9IHJkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgTVNHU1RBVEUsIDAsIDIpOwpAQCAtNDcwLDcgKzQ4Miw3IEBACiAKIAlyZXQgPSBfX2F2NzExMF9zZW5kX2Z3X2NtZChhdjcxMTAsIGJ1ZiwgbGVuZ3RoKTsKIAl1cCgmYXY3MTEwLT5kY29tbG9jayk7Ci0JaWYgKHJldCkKKwlpZiAocmV0ICYmIHJldCE9LUVSRVNUQVJUU1lTKQogCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogJXMoKTogYXY3MTEwX3NlbmRfZndfY21kIGVycm9yICVkXG4iLAogCQkgICAgICAgX19GVU5DVElPTl9fLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC00OTUsNyArNTA3LDcgQEAKIAl9CiAKIAlyZXQgPSBhdjcxMTBfc2VuZF9md19jbWQoYXY3MTEwLCBidWYsIG51bSArIDIpOwotCWlmIChyZXQpCisJaWYgKHJldCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTKQogCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogYXY3MTEwX2Z3X2NtZCBlcnJvciAlZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTE4LDcgKzUzMCw3IEBACiAJfQogCiAJcmV0ID0gYXY3MTEwX3NlbmRfZndfY21kKGF2NzExMCwgY21kLCAxOCk7Ci0JaWYgKHJldCkKKwlpZiAocmV0ICYmIHJldCAhPSAtRVJFU1RBUlRTWVMpCiAJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBhdjcxMTBfc2VuZF9jaV9jbWQgZXJyb3IgJWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTU1MSwyNiArNTYzLDMyIEBACiAJfQogCiAJc3RhcnQgPSBqaWZmaWVzOwotCXdoaWxlIChyZGViaShhdjcxMTAsIERFQklOT1NXQVAsIENPTU1BTkQsIDAsIDIpKSB7CisJd2hpbGUgKDEpIHsKKwkJZXJyID0gdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX0ZSRUUpOworCQlpZiAocmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBDT01NQU5ELCAwLCAyKSA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgQ09NTUFORCB0byBjb21wbGV0ZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXVwKCZhdjcxMTAtPmRjb21sb2NrKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CiAjaWZkZWYgX05PSEFORFNIQUtFCiAJCW1zbGVlcCgxKTsKICNlbmRpZgotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX0ZSRUUpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIENPTU1BTkQgdG8gY29tcGxldGVcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQl1cCgmYXY3MTEwLT5kY29tbG9jayk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KIAl9CiAKICNpZm5kZWYgX05PSEFORFNIQUtFCiAJc3RhcnQgPSBqaWZmaWVzOwotCXdoaWxlIChyZGViaShhdjcxMTAsIERFQklOT1NXQVAsIEhBTkRTSEFLRV9SRUcsIDAsIDIgKSkgewotCQltc2xlZXAoMSk7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0ICsgQVJNX1dBSVRfU0hBS0UpKSB7CisJd2hpbGUgKDEpIHsKKwkJZXJyID0gdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX1NIQUtFKTsKKwkJaWYgKHJkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgSEFORFNIQUtFX1JFRywgMCwgMikgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIEhBTkRTSEFLRV9SRUdcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQl1cCgmYXY3MTEwLT5kY29tbG9jayk7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQorCQltc2xlZXAoMSk7CiAJfQogI2VuZGlmCiAKQEAgLTY2NywxMCArNjg1LDEwIEBACiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQogCQlidWZbaSArIDRdID0gbXNnW2ldOwogCi0JaWYgKChyZXQgPSBhdjcxMTBfc2VuZF9md19jbWQoYXY3MTEwLCBidWYsIDE4KSkpCisJcmV0ID0gYXY3MTEwX3NlbmRfZndfY21kKGF2NzExMCwgYnVmLCAxOCk7CisJaWYgKHJldCAmJiByZXQhPS1FUkVTVEFSVFNZUykKIAkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6IGF2NzExMF9kaXNlcWNfc2VuZCBlcnJvciAlZFxuIiwgcmV0KTsKLQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtNzA1LDE4ICs3MjMsMjIgQEAKIHN0YXRpYyBpbnQgRmx1c2hUZXh0KHN0cnVjdCBhdjcxMTAgKmF2NzExMCkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCBlcnI7CiAKIAlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhdjcxMTAtPmRjb21sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAlzdGFydCA9IGppZmZpZXM7Ci0Jd2hpbGUgKHJkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQlVGRjFfQkFTRSwgMCwgMikpIHsKLQkJbXNsZWVwKDEpOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX09TRCkpIHsKKwl3aGlsZSAoMSkgeworCQllcnIgPSB0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0ICsgQVJNX1dBSVRfT1NEKTsKKwkJaWYgKHJkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQlVGRjFfQkFTRSwgMCwgMikgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogJXMoKTogdGltZW91dCB3YWl0aW5nIGZvciBCVUZGMV9CQVNFID09IDBcbiIsCiAJCQkgICAgICAgX19GVU5DVElPTl9fKTsKIAkJCXVwKCZhdjcxMTAtPmRjb21sb2NrKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CisJCW1zbGVlcCgxKTsKIAl9CiAJdXAoJmF2NzExMC0+ZGNvbWxvY2spOwogCXJldHVybiAwOwpAQCAtNzMzLDI1ICs3NTUsMzEgQEAKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCXN0YXJ0ID0gamlmZmllczsKLQl3aGlsZSAocmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBCVUZGMV9CQVNFLCAwLCAyKSkgewotCQltc2xlZXAoMSk7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0ICsgQVJNX1dBSVRfT1NEKSkgeworCXdoaWxlICgxKSB7CisJCXJldCA9IHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnQgKyBBUk1fV0FJVF9PU0QpOworCQlpZiAocmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBCVUZGMV9CQVNFLCAwLCAyKSA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChyZXQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiAlczogdGltZW91dCB3YWl0aW5nIGZvciBCVUZGMV9CQVNFID09IDBcbiIsCiAJCQkgICAgICAgX19GVU5DVElPTl9fKTsKIAkJCXVwKCZhdjcxMTAtPmRjb21sb2NrKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CisJCW1zbGVlcCgxKTsKIAl9CiAjaWZuZGVmIF9OT0hBTkRTSEFLRQogCXN0YXJ0ID0gamlmZmllczsKLQl3aGlsZSAocmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBIQU5EU0hBS0VfUkVHLCAwLCAyKSkgewotCQltc2xlZXAoMSk7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0ICsgQVJNX1dBSVRfU0hBS0UpKSB7CisJd2hpbGUgKDEpIHsKKwkJcmV0ID0gdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIEFSTV9XQUlUX1NIQUtFKTsKKwkJaWYgKHJkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgSEFORFNIQUtFX1JFRywgMCwgMikgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgSEFORFNIQUtFX1JFR1xuIiwKIAkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwogCQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KKwkJbXNsZWVwKDEpOwogCX0KICNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGggLyAyOyBpKyspCkBAIC03NjEsNyArNzg5LDcgQEAKIAkJd2RlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBCVUZGMV9CQVNFICsgaSAqIDIsIDAsIDIpOwogCXJldCA9IF9fYXY3MTEwX3NlbmRfZndfY21kKGF2NzExMCwgY2J1ZiwgNSk7CiAJdXAoJmF2NzExMC0+ZGNvbWxvY2spOwotCWlmIChyZXQpCisJaWYgKHJldCAmJiByZXQhPS1FUkVTVEFSVFNZUykKIAkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6IFdyaXRlVGV4dCBlcnJvciAlZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtODE2LDkgKzg0NCwyNSBAQAogCU9TRF9CSVRNQVAxLCBPU0RfQklUTUFQMiwgMCwgT1NEX0JJVE1BUDQsIDAsIDAsIDAsIE9TRF9CSVRNQVA4CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBMb2FkQml0bWFwKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTE2IGZvcm1hdCwKK3N0YXRpYyBpbmxpbmUgaW50IFdhaXRVbnRpbEJtcExvYWRlZChzdHJ1Y3QgYXY3MTEwICphdjcxMTApCit7CisJaW50IHJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGF2NzExMC0+Ym1wcSwKKwkJCQlhdjcxMTAtPmJtcF9zdGF0ZSAhPSBCTVBfTE9BRElORywgMTAqSFopOworCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKQorCQlyZXR1cm4gcmV0OworCWlmIChyZXQgPT0gMCkgeworCQlwcmludGsoImR2Yi10dHBjaTogd2FybmluZzogdGltZW91dCB3YWl0aW5nIGluIExvYWRCaXRtYXA6ICVkLCAlZFxuIiwKKwkJICAgICAgIHJldCwgYXY3MTEwLT5ibXBfc3RhdGUpOworCQlhdjcxMTAtPmJtcF9zdGF0ZSA9IEJNUF9OT05FOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IExvYWRCaXRtYXAoc3RydWN0IGF2NzExMCAqYXY3MTEwLAogCQkJICAgICB1MTYgZHgsIHUxNiBkeSwgaW50IGluYywgdTggX191c2VyICogZGF0YSkKIHsKKwl1MTYgZm9ybWF0OwogCWludCBicHA7CiAJaW50IGk7CiAJaW50IGQsIGRlbHRhOwpAQCAtODI3LDE0ICs4NzEsNyBAQAogCiAJZHByaW50ayg0LCAiJXBcbiIsIGF2NzExMCk7CiAKLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChhdjcxMTAtPmJtcHEsIGF2NzExMC0+Ym1wX3N0YXRlICE9IEJNUF9MT0FESU5HLCBIWik7Ci0JaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMgfHwgcmV0ID09IDApIHsKLQkJcHJpbnRrKCJkdmItdHRwY2k6IHdhcm5pbmc6IHRpbWVvdXQgd2FpdGluZyBpbiBMb2FkQml0bWFwOiAlZCwgJWRcbiIsCi0JCSAgICAgICByZXQsIGF2NzExMC0+Ym1wX3N0YXRlKTsKLQkJYXY3MTEwLT5ibXBfc3RhdGUgPSBCTVBfTk9ORTsKLQkJcmV0dXJuIC0xOwotCX0KLQlCVUdfT04gKGF2NzExMC0+Ym1wX3N0YXRlID09IEJNUF9MT0FESU5HKTsKKwlmb3JtYXQgPSBicHAyYml0W2F2NzExMC0+b3NkYnBwW2F2NzExMC0+b3Nkd2luXV07CiAKIAlhdjcxMTAtPmJtcF9zdGF0ZSA9IEJNUF9MT0FESU5HOwogCWlmCShmb3JtYXQgPT0gT1NEX0JJVE1BUDgpIHsKQEAgLTg0NywxOCArODg0LDE4IEBACiAJCWJwcD0xOyBkZWx0YSA9IDg7CiAJfSBlbHNlIHsKIAkJYXY3MTEwLT5ibXBfc3RhdGUgPSBCTVBfTk9ORTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJYXY3MTEwLT5ibXBsZW4gPSAoKGR4ICogZHkgKiBicHAgKyA3KSAmIH43KSAvIDg7CiAJYXY3MTEwLT5ibXBwID0gMDsKIAlpZiAoYXY3MTEwLT5ibXBsZW4gPiAzMjc2OCkgewogCQlhdjcxMTAtPmJtcF9zdGF0ZSA9IEJNUF9OT05FOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgZHk7IGkrKykgewogCQlpZiAoY29weV9mcm9tX3VzZXIoYXY3MTEwLT5ibXBidWYgKyAxMDI0ICsgaSAqIGR4LCBkYXRhICsgaSAqIGluYywgZHgpKSB7CiAJCQlhdjcxMTAtPmJtcF9zdGF0ZSA9IEJNUF9OT05FOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAJaWYgKGZvcm1hdCAhPSBPU0RfQklUTUFQOCkgewpAQCAtODczLDM3ICs5MTAsMjcgQEAKIAl9CiAJYXY3MTEwLT5ibXBsZW4gKz0gMTAyNDsKIAlkcHJpbnRrKDQsICJhdjcxMTBfZndfY21kOiBMb2FkQm1wIHNpemUgJWRcbiIsIGF2NzExMC0+Ym1wbGVuKTsKLQlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfT1NELCBMb2FkQm1wLCAzLCBmb3JtYXQsIGR4LCBkeSk7CisJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfT1NELCBMb2FkQm1wLCAzLCBmb3JtYXQsIGR4LCBkeSk7CisJaWYgKCFyZXQpCisJCXJldCA9IFdhaXRVbnRpbEJtcExvYWRlZChhdjcxMTApOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgQmxpdEJpdG1hcChzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIHUxNiB3aW4sIHUxNiB4LCB1MTYgeSwgdTE2IHRyYW5zKQorc3RhdGljIGludCBCbGl0Qml0bWFwKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTE2IHgsIHUxNiB5KQogewotCWludCByZXQ7Ci0KIAlkcHJpbnRrKDQsICIlcFxuIiwgYXY3MTEwKTsKIAotCUJVR19PTiAoYXY3MTEwLT5ibXBfc3RhdGUgPT0gQk1QX05PTkUpOwotCi0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXY3MTEwLT5ibXBxLAotCQkJCWF2NzExMC0+Ym1wX3N0YXRlICE9IEJNUF9MT0FESU5HLCAxMCpIWik7Ci0JaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMgfHwgcmV0ID09IDApIHsKLQkJcHJpbnRrKCJkdmItdHRwY2k6IHdhcm5pbmc6IHRpbWVvdXQgd2FpdGluZyBpbiBCbGl0Qml0bWFwOiAlZCwgJWRcbiIsCi0JCSAgICAgICByZXQsIGF2NzExMC0+Ym1wX3N0YXRlKTsKLQkJYXY3MTEwLT5ibXBfc3RhdGUgPSBCTVBfTk9ORTsKLQkJcmV0dXJuIChyZXQgPT0gMCkgPyAtRVRJTUVET1VUIDogcmV0OwotCX0KLQotCUJVR19PTiAoYXY3MTEwLT5ibXBfc3RhdGUgIT0gQk1QX0xPQURFRCk7Ci0KLQlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfT1NELCBCbGl0Qm1wLCA0LCB3aW4sIHgsIHksIHRyYW5zKTsKKwlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfT1NELCBCbGl0Qm1wLCA0LCBhdjcxMTAtPm9zZHdpbiwgeCwgeSwgMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IFJlbGVhc2VCaXRtYXAoc3RydWN0IGF2NzExMCAqYXY3MTEwKQogewogCWRwcmludGsoNCwgIiVwXG4iLCBhdjcxMTApOwogCi0JaWYgKGF2NzExMC0+Ym1wX3N0YXRlICE9IEJNUF9MT0FERUQpCisJaWYgKGF2NzExMC0+Ym1wX3N0YXRlICE9IEJNUF9MT0FERUQgJiYgRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApIDwgMHgyNjFlKQogCQlyZXR1cm4gLTE7CisJaWYgKGF2NzExMC0+Ym1wX3N0YXRlID09IEJNUF9MT0FESU5HKQorCQlkcHJpbnRrKDEsIlJlbGVhc2VCaXRtYXAgY2FsbGVkIHdoaWxlIEJNUF9MT0FESU5HXG4iKTsKIAlhdjcxMTAtPmJtcF9zdGF0ZSA9IEJNUF9OT05FOwogCXJldHVybiBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9PU0QsIFJlbGVhc2VCbXAsIDApOwogfQpAQCAtOTI0LDE4ICs5NTEsMjIgQEAKIAlyZXR1cm4gQ3IgfCAoQ2IgPDwgMTYpIHwgKFkgPDwgOCk7CiB9CiAKLXN0YXRpYyB2b2lkIE9TRFNldENvbG9yKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTggY29sb3IsIHU4IHIsIHU4IGcsIHU4IGIsIHU4IGJsZW5kKQorc3RhdGljIGludCBPU0RTZXRDb2xvcihzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIHU4IGNvbG9yLCB1OCByLCB1OCBnLCB1OCBiLCB1OCBibGVuZCkKIHsKKwlpbnQgcmV0OworCiAJdTE2IGNoLCBjbDsKIAl1MzIgeXV2OwogCiAJeXV2ID0gYmxlbmQgPyBSR0IyWVVWKHIsZyxiKSA6IDA7CiAJY2wgPSAoeXV2ICYgMHhmZmZmKTsKIAljaCA9ICgoeXV2ID4+IDE2KSAmIDB4ZmZmZik7Ci0JU2V0Q29sb3JfKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIGJwcDJwYWxbYXY3MTEwLT5vc2RicHBbYXY3MTEwLT5vc2R3aW5dXSwKLQkJICBjb2xvciwgY2gsIGNsKTsKLQlTZXRCbGVuZF8oYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgYnBwMnBhbFthdjcxMTAtPm9zZGJwcFthdjcxMTAtPm9zZHdpbl1dLAotCQkgIGNvbG9yLCAoKGJsZW5kID4+IDQpICYgMHgwZikpOworCXJldCA9IFNldENvbG9yXyhhdjcxMTAsIGF2NzExMC0+b3Nkd2luLCBicHAycGFsW2F2NzExMC0+b3NkYnBwW2F2NzExMC0+b3Nkd2luXV0sCisJCQljb2xvciwgY2gsIGNsKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gU2V0QmxlbmRfKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIGJwcDJwYWxbYXY3MTEwLT5vc2RicHBbYXY3MTEwLT5vc2R3aW5dXSwKKwkJCQljb2xvciwgKChibGVuZCA+PiA0KSAmIDB4MGYpKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IE9TRFNldFBhbGV0dGUoc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MzIgX191c2VyICogY29sb3JzLCB1OCBmaXJzdCwgdTggbGFzdCkKQEAgLTk2OCwxNCArOTk5LDE0IEBACiB7CiAJdWludCB3LCBoLCBicHAsIGJwbCwgc2l6ZSwgbHBiLCBibnVtLCBicmVzdDsKIAlpbnQgaTsKLQlpbnQgcmM7CisJaW50IHJjLHJlbGVhc2VfcmM7CiAKIAl3ID0geDEgLSB4MCArIDE7CiAJaCA9IHkxIC0geTAgKyAxOwogCWlmIChpbmMgPD0gMCkKIAkJaW5jID0gdzsKIAlpZiAodyA8PSAwIHx8IHcgPiA3MjAgfHwgaCA8PSAwIHx8IGggPiA1NzYpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJYnBwID0gYXY3MTEwLT5vc2RicHBbYXY3MTEwLT5vc2R3aW5dICsgMTsKIAlicGwgPSAoKHcgKiBicHAgKyA3KSAmIH43KSAvIDg7CiAJc2l6ZSA9IGggKiBicGw7CkBAIC05ODMsMTc2ICsxMDE0LDE4NiBAQAogCWJudW0gPSBzaXplIC8gKGxwYiAqIGJwbCk7CiAJYnJlc3QgPSBzaXplIC0gYm51bSAqIGxwYiAqIGJwbDsKIAorCWlmIChhdjcxMTAtPmJtcF9zdGF0ZSA9PSBCTVBfTE9BRElORykgeworCQkvKiBwb3NzaWJsZSBpZiBzeXNjYWxsIGlzIHJlcGVhdGVkIGJ5IC1FUkVTVEFSVFNZUyBhbmQgaWYgZmlybXdhcmUgY2Fubm90IGFib3J0ICovCisJCUJVR19PTiAoRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApID49IDB4MjYxZSk7CisJCXJjID0gV2FpdFVudGlsQm1wTG9hZGVkKGF2NzExMCk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwkJLyoganVzdCBjb250aW51ZS4gVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGZ3IHZlcnNpb25zCisJCSAqIGlmIGJudW09PTEgJiYgIWJyZXN0ICYmIExvYWRCaXRtYXAgd2FzIHN1Y2Nlc3NmdWwKKwkJICovCisJfQorCisJcmMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBibnVtOyBpKyspIHsKLQkJcmMgPSBMb2FkQml0bWFwKGF2NzExMCwgYnBwMmJpdFthdjcxMTAtPm9zZGJwcFthdjcxMTAtPm9zZHdpbl1dLAotCQkJICAgdywgbHBiLCBpbmMsIGRhdGEpOworCQlyYyA9IExvYWRCaXRtYXAoYXY3MTEwLCB3LCBscGIsIGluYywgZGF0YSk7CiAJCWlmIChyYykKLQkJCXJldHVybiByYzsKLQkJcmMgPSBCbGl0Qml0bWFwKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIHgwLCB5MCArIGkgKiBscGIsIDApOworCQkJYnJlYWs7CisJCXJjID0gQmxpdEJpdG1hcChhdjcxMTAsIHgwLCB5MCArIGkgKiBscGIpOwogCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7CisJCQlicmVhazsKIAkJZGF0YSArPSBscGIgKiBpbmM7CiAJfQotCWlmIChicmVzdCkgewotCQlyYyA9IExvYWRCaXRtYXAoYXY3MTEwLCBicHAyYml0W2F2NzExMC0+b3NkYnBwW2F2NzExMC0+b3Nkd2luXV0sCi0JCQkgICB3LCBicmVzdCAvIGJwbCwgaW5jLCBkYXRhKTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCQlyYyA9IEJsaXRCaXRtYXAoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgeDAsIHkwICsgYm51bSAqIGxwYiwgMCk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKKwlpZiAoIXJjICYmIGJyZXN0KSB7CisJCXJjID0gTG9hZEJpdG1hcChhdjcxMTAsIHcsIGJyZXN0IC8gYnBsLCBpbmMsIGRhdGEpOworCQlpZiAoIXJjKQorCQkJcmMgPSBCbGl0Qml0bWFwKGF2NzExMCwgeDAsIHkwICsgYm51bSAqIGxwYik7CiAJfQotCVJlbGVhc2VCaXRtYXAoYXY3MTEwKTsKLQlyZXR1cm4gMDsKKwlyZWxlYXNlX3JjID0gUmVsZWFzZUJpdG1hcChhdjcxMTApOworCWlmICghcmMpCisJCXJjID0gcmVsZWFzZV9yYzsKKwlpZiAocmMpCisJCWRwcmludGsoMSwicmV0dXJucyAlZFxuIixyYyk7CisJcmV0dXJuIHJjOwogfQogCiBpbnQgYXY3MTEwX29zZF9jbWQoc3RydWN0IGF2NzExMCAqYXY3MTEwLCBvc2RfY21kX3QgKmRjKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBkb3duX2ludGVycnVwdGlibGUoJmF2NzExMC0+b3NkX3NlbWEpOwotCWlmIChyZXQpCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXY3MTEwLT5vc2Rfc2VtYSkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQkvKiBzdHVwaWQsIGJ1dCBPU0QgZnVuY3Rpb25zIGRvbid0IHByb3ZpZGUgYSByZXR1cm4gY29kZSBhbnl3YXkgKi8KLQlyZXQgPSAwOwotCiAJc3dpdGNoIChkYy0+Y21kKSB7CiAJY2FzZSBPU0RfQ2xvc2U6Ci0JCURlc3Ryb3lPU0RXaW5kb3coYXY3MTEwLCBhdjcxMTAtPm9zZHdpbik7Ci0JCWdvdG8gb3V0OworCQlyZXQgPSBEZXN0cm95T1NEV2luZG93KGF2NzExMCwgYXY3MTEwLT5vc2R3aW4pOworCQlicmVhazsKIAljYXNlIE9TRF9PcGVuOgogCQlhdjcxMTAtPm9zZGJwcFthdjcxMTAtPm9zZHdpbl0gPSAoZGMtPmNvbG9yIC0gMSkgJiA3OwotCQlDcmVhdGVPU0RXaW5kb3coYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwKKwkJcmV0ID0gQ3JlYXRlT1NEV2luZG93KGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sCiAJCQkJYnBwMmJpdFthdjcxMTAtPm9zZGJwcFthdjcxMTAtPm9zZHdpbl1dLAogCQkJCWRjLT54MSAtIGRjLT54MCArIDEsIGRjLT55MSAtIGRjLT55MCArIDEpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CiAJCWlmICghZGMtPmRhdGEpIHsKLQkJCU1vdmVXaW5kb3dBYnMoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgZGMtPngwLCBkYy0+eTApOwotCQkJU2V0Q29sb3JCbGVuZChhdjcxMTAsIGF2NzExMC0+b3Nkd2luKTsKKwkJCXJldCA9IE1vdmVXaW5kb3dBYnMoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgZGMtPngwLCBkYy0+eTApOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJCXJldCA9IFNldENvbG9yQmxlbmQoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbik7CiAJCX0KLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCWNhc2UgT1NEX1Nob3c6Ci0JCU1vdmVXaW5kb3dSZWwoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgMCwgMCk7Ci0JCWdvdG8gb3V0OworCQlyZXQgPSBNb3ZlV2luZG93UmVsKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIDAsIDApOworCQlicmVhazsKIAljYXNlIE9TRF9IaWRlOgotCQlIaWRlV2luZG93KGF2NzExMCwgYXY3MTEwLT5vc2R3aW4pOwotCQlnb3RvIG91dDsKKwkJcmV0ID0gSGlkZVdpbmRvdyhhdjcxMTAsIGF2NzExMC0+b3Nkd2luKTsKKwkJYnJlYWs7CiAJY2FzZSBPU0RfQ2xlYXI6Ci0JCURyYXdCbG9jayhhdjcxMTAsIGF2NzExMC0+b3Nkd2luLCAwLCAwLCA3MjAsIDU3NiwgMCk7Ci0JCWdvdG8gb3V0OworCQlyZXQgPSBEcmF3QmxvY2soYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgMCwgMCwgNzIwLCA1NzYsIDApOworCQlicmVhazsKIAljYXNlIE9TRF9GaWxsOgotCQlEcmF3QmxvY2soYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgMCwgMCwgNzIwLCA1NzYsIGRjLT5jb2xvcik7Ci0JCWdvdG8gb3V0OworCQlyZXQgPSBEcmF3QmxvY2soYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgMCwgMCwgNzIwLCA1NzYsIGRjLT5jb2xvcik7CisJCWJyZWFrOwogCWNhc2UgT1NEX1NldENvbG9yOgotCQlPU0RTZXRDb2xvcihhdjcxMTAsIGRjLT5jb2xvciwgZGMtPngwLCBkYy0+eTAsIGRjLT54MSwgZGMtPnkxKTsKLQkJZ290byBvdXQ7CisJCXJldCA9IE9TRFNldENvbG9yKGF2NzExMCwgZGMtPmNvbG9yLCBkYy0+eDAsIGRjLT55MCwgZGMtPngxLCBkYy0+eTEpOworCQlicmVhazsKIAljYXNlIE9TRF9TZXRQYWxldHRlOgotCXsKLQkJaWYgKEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA+PSAweDI2MTgpIHsKKwkJaWYgKEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA+PSAweDI2MTgpCiAJCQlyZXQgPSBPU0RTZXRQYWxldHRlKGF2NzExMCwgZGMtPmRhdGEsIGRjLT5jb2xvciwgZGMtPngwKTsKLQkJCWdvdG8gb3V0OwotCQl9IGVsc2UgeworCQllbHNlIHsKIAkJCWludCBpLCBsZW4gPSBkYy0+eDAtZGMtPmNvbG9yKzE7CiAJCQl1OCBfX3VzZXIgKmNvbG9ycyA9ICh1OCBfX3VzZXIgKilkYy0+ZGF0YTsKIAkJCXU4IHIsIGcsIGIsIGJsZW5kOwotCisJCQlyZXQgPSAwOwogCQkJZm9yIChpID0gMDsgaTxsZW47IGkrKykgewogCQkJCWlmIChnZXRfdXNlcihyLCBjb2xvcnMgKyBpICogNCkgfHwKIAkJCQkgICAgZ2V0X3VzZXIoZywgY29sb3JzICsgaSAqIDQgKyAxKSB8fAogCQkJCSAgICBnZXRfdXNlcihiLCBjb2xvcnMgKyBpICogNCArIDIpIHx8CiAJCQkJICAgIGdldF91c2VyKGJsZW5kLCBjb2xvcnMgKyBpICogNCArIDMpKSB7CiAJCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJCWdvdG8gb3V0OworCQkJCQlicmVhazsKIAkJCQkgICAgfQotCQkJCU9TRFNldENvbG9yKGF2NzExMCwgZGMtPmNvbG9yICsgaSwgciwgZywgYiwgYmxlbmQpOworCQkJCXJldCA9IE9TRFNldENvbG9yKGF2NzExMCwgZGMtPmNvbG9yICsgaSwgciwgZywgYiwgYmxlbmQpOworCQkJCWlmIChyZXQpCisJCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQljYXNlIE9TRF9TZXRUcmFuczoKLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCWNhc2UgT1NEX1NldFBpeGVsOgotCQlEcmF3TGluZShhdjcxMTAsIGF2NzExMC0+b3Nkd2luLAorCQlyZXQgPSBEcmF3TGluZShhdjcxMTAsIGF2NzExMC0+b3Nkd2luLAogCQkJIGRjLT54MCwgZGMtPnkwLCAwLCAwLCBkYy0+Y29sb3IpOwotCQlnb3RvIG91dDsKLQljYXNlIE9TRF9HZXRQaXhlbDoKLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCWNhc2UgT1NEX1NldFJvdzoKIAkJZGMtPnkxID0gZGMtPnkwOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIE9TRF9TZXRCbG9jazoKIAkJcmV0ID0gT1NEU2V0QmxvY2soYXY3MTEwLCBkYy0+eDAsIGRjLT55MCwgZGMtPngxLCBkYy0+eTEsIGRjLT5jb2xvciwgZGMtPmRhdGEpOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJY2FzZSBPU0RfRmlsbFJvdzoKLQkJRHJhd0Jsb2NrKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIGRjLT54MCwgZGMtPnkwLAorCQlyZXQgPSBEcmF3QmxvY2soYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgZGMtPngwLCBkYy0+eTAsCiAJCQkgIGRjLT54MS1kYy0+eDArMSwgZGMtPnkxLCBkYy0+Y29sb3IpOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJY2FzZSBPU0RfRmlsbEJsb2NrOgotCQlEcmF3QmxvY2soYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgZGMtPngwLCBkYy0+eTAsCisJCXJldCA9IERyYXdCbG9jayhhdjcxMTAsIGF2NzExMC0+b3Nkd2luLCBkYy0+eDAsIGRjLT55MCwKIAkJCSAgZGMtPngxIC0gZGMtPngwICsgMSwgZGMtPnkxIC0gZGMtPnkwICsgMSwgZGMtPmNvbG9yKTsKLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCWNhc2UgT1NEX0xpbmU6Ci0JCURyYXdMaW5lKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sCisJCXJldCA9IERyYXdMaW5lKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sCiAJCQkgZGMtPngwLCBkYy0+eTAsIGRjLT54MSAtIGRjLT54MCwgZGMtPnkxIC0gZGMtPnkwLCBkYy0+Y29sb3IpOwotCQlnb3RvIG91dDsKLQljYXNlIE9TRF9RdWVyeToKLQkJZ290byBvdXQ7Ci0JY2FzZSBPU0RfVGVzdDoKLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCWNhc2UgT1NEX1RleHQ6CiAJewogCQljaGFyIHRleHRidWZbMjQwXTsKIAogCQlpZiAoc3RybmNweV9mcm9tX3VzZXIodGV4dGJ1ZiwgZGMtPmRhdGEsIDI0MCkgPCAwKSB7CiAJCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJfQogCQl0ZXh0YnVmWzIzOV0gPSAwOwogCQlpZiAoZGMtPngxID4gMykKIAkJCWRjLT54MSA9IDM7Ci0JCVNldEZvbnQoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgZGMtPngxLAorCQlyZXQgPSBTZXRGb250KGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIGRjLT54MSwKIAkJCSh1MTYpIChkYy0+Y29sb3IgJiAweGZmZmYpLCAodTE2KSAoZGMtPmNvbG9yID4+IDE2KSk7Ci0JCUZsdXNoVGV4dChhdjcxMTApOwotCQlXcml0ZVRleHQoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgZGMtPngwLCBkYy0+eTAsIHRleHRidWYpOwotCQlnb3RvIG91dDsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBGbHVzaFRleHQoYXY3MTEwKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBXcml0ZVRleHQoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbiwgZGMtPngwLCBkYy0+eTAsIHRleHRidWYpOworCQlicmVhazsKIAl9CiAJY2FzZSBPU0RfU2V0V2luZG93OgotCQlpZiAoZGMtPngwIDwgMSB8fCBkYy0+eDAgPiA3KSB7CisJCWlmIChkYy0+eDAgPCAxIHx8IGRjLT54MCA+IDcpCiAJCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7CisJCWVsc2UgeworCQkJYXY3MTEwLT5vc2R3aW4gPSBkYy0+eDA7CisJCQlyZXQgPSAwOwogCQl9Ci0JCWF2NzExMC0+b3Nkd2luID0gZGMtPngwOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJY2FzZSBPU0RfTW92ZVdpbmRvdzoKLQkJTW92ZVdpbmRvd0FicyhhdjcxMTAsIGF2NzExMC0+b3Nkd2luLCBkYy0+eDAsIGRjLT55MCk7Ci0JCVNldENvbG9yQmxlbmQoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbik7Ci0JCWdvdG8gb3V0OworCQlyZXQgPSBNb3ZlV2luZG93QWJzKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIGRjLT54MCwgZGMtPnkwKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBTZXRDb2xvckJsZW5kKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4pOworCQlicmVhazsKIAljYXNlIE9TRF9PcGVuUmF3OgogCQlpZiAoZGMtPmNvbG9yIDwgT1NEX0JJVE1BUDEgfHwgZGMtPmNvbG9yID4gT1NEX0NVUlNPUikgewogCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGRjLT5jb2xvciA+PSBPU0RfQklUTUFQMSAmJiBkYy0+Y29sb3IgPD0gT1NEX0JJVE1BUDhIUikgeworCQlpZiAoZGMtPmNvbG9yID49IE9TRF9CSVRNQVAxICYmIGRjLT5jb2xvciA8PSBPU0RfQklUTUFQOEhSKQogCQkJYXY3MTEwLT5vc2RicHBbYXY3MTEwLT5vc2R3aW5dID0gKDEgPDwgKGRjLT5jb2xvciAmIDMpKSAtIDE7Ci0JCX0KLQkJZWxzZSB7CisJCWVsc2UKIAkJCWF2NzExMC0+b3NkYnBwW2F2NzExMC0+b3Nkd2luXSA9IDA7Ci0JCX0KLQkJQ3JlYXRlT1NEV2luZG93KGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIChvc2RfcmF3X3dpbmRvd190KWRjLT5jb2xvciwKKwkJcmV0ID0gQ3JlYXRlT1NEV2luZG93KGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIChvc2RfcmF3X3dpbmRvd190KWRjLT5jb2xvciwKIAkJCQlkYy0+eDEgLSBkYy0+eDAgKyAxLCBkYy0+eTEgLSBkYy0+eTAgKyAxKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOwogCQlpZiAoIWRjLT5kYXRhKSB7Ci0JCQlNb3ZlV2luZG93QWJzKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIGRjLT54MCwgZGMtPnkwKTsKLQkJCVNldENvbG9yQmxlbmQoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbik7CisJCQlyZXQgPSBNb3ZlV2luZG93QWJzKGF2NzExMCwgYXY3MTEwLT5vc2R3aW4sIGRjLT54MCwgZGMtPnkwKTsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IFNldENvbG9yQmxlbmQoYXY3MTEwLCBhdjcxMTAtPm9zZHdpbik7CiAJCX0KLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OworCQlicmVhazsKIAl9CiAKLW91dDoKIAl1cCgmYXY3MTEwLT5vc2Rfc2VtYSk7CisJaWYgKHJldD09LUVSRVNUQVJUU1lTKQorCQlkcHJpbnRrKDEsICJhdjcxMTBfb3NkX2NtZCglZCkgcmV0dXJucyB3aXRoIC1FUkVTVEFSVFNZU1xuIixkYy0+Y21kKTsKKwllbHNlIGlmIChyZXQpCisJCWRwcmludGsoMSwgImF2NzExMF9vc2RfY21kKCVkKSByZXR1cm5zIHdpdGggJWRcbiIsZGMtPmNtZCxyZXQpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmggYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuaAppbmRleCA1MjA2MWUxLi5mZWRkMjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuaApAQCAtNDU4LDI3ICs0NTgsMjcgQEAKIAlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfQVVESU9EQUMsIEF1ZGlvREFDLCAyLCBhZGRyLCBkYXRhKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF2NzcxMF9zZXRfdmlkZW9fbW9kZShzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIGludCBtb2RlKQorc3RhdGljIGlubGluZSBpbnQgYXY3NzEwX3NldF92aWRlb19tb2RlKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgaW50IG1vZGUpCiB7Ci0JYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfRU5DT0RFUiwgU2V0VmlkTW9kZSwgMSwgbW9kZSk7CisJcmV0dXJuIGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0VOQ09ERVIsIFNldFZpZE1vZGUsIDEsIG1vZGUpOwogfQogCi1zdGF0aWMgaW50IGlubGluZSB2aWRjb20oc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MzIgY29tLCB1MzIgYXJnKQorc3RhdGljIGlubGluZSBpbnQgdmlkY29tKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTMyIGNvbSwgdTMyIGFyZykKIHsKIAlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfTUlTQywgQVY3MTEwX0ZXX1ZJREVPX0NPTU1BTkQsIDQsCiAJCQkgICAgIChjb20+PjE2KSwgKGNvbSYweGZmZmYpLAogCQkJICAgICAoYXJnPj4xNiksIChhcmcmMHhmZmZmKSk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIGF1ZGNvbShzdHJ1Y3QgYXY3MTEwICphdjcxMTAsIHUzMiBjb20pCitzdGF0aWMgaW5saW5lIGludCBhdWRjb20oc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MzIgY29tKQogewogCXJldHVybiBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9NSVNDLCBBVjcxMTBfRldfQVVESU9fQ09NTUFORCwgMiwKIAkJCSAgICAgKGNvbT4+MTYpLCAoY29tJjB4ZmZmZikpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgU2V0MjJLKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgaW50IHN0YXRlKQorc3RhdGljIGlubGluZSBpbnQgU2V0MjJLKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgaW50IHN0YXRlKQogewotCWF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0FVRElPREFDLCAoc3RhdGUgPyBPTjIySyA6IE9GRjIySyksIDApOworCXJldHVybiBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9BVURJT0RBQywgKHN0YXRlID8gT04yMksgOiBPRkYyMkspLCAwKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXBhY2suYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9pcGFjay5jCmluZGV4IDI0NjY0MDcuLjY5OWVmOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9pcGFjay5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9pcGFjay5jCkBAIC0yNCw3ICsyNCw3IEBACiAJCSAgICAgIHZvaWQgKCpmdW5jKSh1OCAqYnVmLCBpbnQgc2l6ZSwgdm9pZCAqcHJpdikpCiB7CiAJaWYgKCEocC0+YnVmID0gdm1hbGxvYyhzaXplKnNpemVvZih1OCkpKSkgewotCQlwcmludGsgKCJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlwYWNrXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpcGFja1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlwLT5zaXplID0gc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggNmUwZjVkMy4uYjY1ZjRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTU3MCw5ICs1NzAsOSBAQAogCiAJYnVmWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7CiAJYnVmWzFdID0gZGl2ICYgMHhmZjsKLQlidWZbMl0gPSAweDhlOwotCWJ1ZlszXSA9IChwYXJhbXMtPmZyZXF1ZW5jeSA8IDE3NDUwMDAwMCA/IDB4YTEgOgotCQkgIHBhcmFtcy0+ZnJlcXVlbmN5IDwgNDU0MDAwMDAwID8gMHg5MiA6IDB4MzQpOworCWJ1ZlsyXSA9IDB4ODY7CisJYnVmWzNdID0gKHBhcmFtcy0+ZnJlcXVlbmN5IDwgMTUwMDAwMDAwID8gMHgwMSA6CisJCSAgcGFyYW1zLT5mcmVxdWVuY3kgPCA0NDUwMDAwMDAgPyAweDAyIDogMHgwNCk7CiAKIAlpZiAoaTJjX3RyYW5zZmVyKCZidWRnZXQtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKQogCQlyZXR1cm4gLUVJTzsKQEAgLTY5NSw4ICs2OTUsMTIgQEAKIAkuZGVtb2RfYWRkcmVzcyA9IDB4OCwKIAkuaW52ZXJ0ID0gMSwKIAkuaW52ZXJ0X29jbGsgPSAxLAorCS54dGFsX2ZyZXEgPSBUREExMDA0Nl9YVEFMXzRNLAorCS5hZ2NfY29uZmlnID0gVERBMTAwNDZfQUdDX0RFRkFVTFQsCisJLmlmX2ZyZXEgPSBUREExMDA0Nl9GUkVRXzM2MTcsCiAJLnBsbF9pbml0ID0gcGhpbGlwc190dTEyMTZfcGxsX2luaXQsCiAJLnBsbF9zZXQgPSBwaGlsaXBzX3R1MTIxNl9wbGxfc2V0LAorCS5wbGxfc2xlZXAgPSBOVUxMLAogCS5yZXF1ZXN0X2Zpcm13YXJlID0gcGhpbGlwc190dTEyMTZfcmVxdWVzdF9maXJtd2FyZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKaW5kZXggZGNlMTE2MS4uYTEyNjcwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKQEAgLTY5LDYgKzY5LDcgQEAKIAlpbnQgc2xvdF9zdGF0dXM7CiAJc3RydWN0IGR2Yl9jYV9lbjUwMjIxIGNhOwogCWNoYXIgaXJfZGV2X25hbWVbNTBdOworCXU4IHR1bmVyX3BsbF9hZGRyZXNzOyAvKiB1c2VkIGZvciBwaGlsaXBzX3RkbTEzMTZsIGNvbmZpZ3MgKi8KIH07CiAKIC8qIGZyb20gcmVhZGluZyB0aGUgZm9sbG93aW5nIHJlbW90ZXM6CkBAIC03MjMsNyArNzI0LDcgQEAKIAlzdHJ1Y3QgYnVkZ2V0X2NpICpidWRnZXRfY2kgPSAoc3RydWN0IGJ1ZGdldF9jaSAqKSBmZS0+ZHZiLT5wcml2OwogCXN0YXRpYyB1OCB0ZDEzMTZfaW5pdFtdID0geyAweDBiLCAweGY1LCAweDg1LCAweGFiIH07CiAJc3RhdGljIHU4IGRpc2FibGVfbWM0NEJDMzc0Y1tdID0geyAweDFkLCAweDc0LCAweGEwLCAweDY4IH07Ci0Jc3RydWN0IGkyY19tc2cgdHVuZXJfbXNnID0gey5hZGRyID0gMHg2MywuZmxhZ3MgPSAwLC5idWYgPSB0ZDEzMTZfaW5pdCwubGVuID0KKwlzdHJ1Y3QgaTJjX21zZyB0dW5lcl9tc2cgPSB7LmFkZHIgPSBidWRnZXRfY2ktPnR1bmVyX3BsbF9hZGRyZXNzLC5mbGFncyA9IDAsLmJ1ZiA9IHRkMTMxNl9pbml0LC5sZW4gPQogCQkJc2l6ZW9mKHRkMTMxNl9pbml0KSB9OwogCiAJLy8gc2V0dXAgUExMIGNvbmZpZ3VyYXRpb24KQEAgLTc0Niw3ICs3NDcsNyBAQAogewogCXN0cnVjdCBidWRnZXRfY2kgKmJ1ZGdldF9jaSA9IChzdHJ1Y3QgYnVkZ2V0X2NpICopIGZlLT5kdmItPnByaXY7CiAJdTggdHVuZXJfYnVmWzRdOwotCXN0cnVjdCBpMmNfbXNnIHR1bmVyX21zZyA9IHsuYWRkciA9IDB4NjMsLmZsYWdzID0gMCwuYnVmID0gdHVuZXJfYnVmLC5sZW4gPSBzaXplb2YodHVuZXJfYnVmKSB9OworCXN0cnVjdCBpMmNfbXNnIHR1bmVyX21zZyA9IHsuYWRkciA9IGJ1ZGdldF9jaS0+dHVuZXJfcGxsX2FkZHJlc3MsLmZsYWdzID0gMCwuYnVmID0gdHVuZXJfYnVmLC5sZW4gPSBzaXplb2YodHVuZXJfYnVmKSB9OwogCWludCB0dW5lcl9mcmVxdWVuY3kgPSAwOwogCXU4IGJhbmQsIGNwLCBmaWx0ZXI7CiAKQEAgLTgzOCw4ICs4MzksMTIgQEAKIAkuZGVtb2RfYWRkcmVzcyA9IDB4OCwKIAkuaW52ZXJ0ID0gMCwKIAkuaW52ZXJ0X29jbGsgPSAwLAorCS54dGFsX2ZyZXEgPSBUREExMDA0Nl9YVEFMXzRNLAorCS5hZ2NfY29uZmlnID0gVERBMTAwNDZfQUdDX0RFRkFVTFQsCisJLmlmX2ZyZXEgPSBUREExMDA0Nl9GUkVRXzM2MTcsCiAJLnBsbF9pbml0ID0gcGhpbGlwc190ZG0xMzE2bF9wbGxfaW5pdCwKIAkucGxsX3NldCA9IHBoaWxpcHNfdGRtMTMxNmxfcGxsX3NldCwKKwkucGxsX3NsZWVwID0gTlVMTCwKIAkucmVxdWVzdF9maXJtd2FyZSA9IHBoaWxpcHNfdGRtMTMxNmxfcmVxdWVzdF9maXJtd2FyZSwKIH07CiAKQEAgLTg2NSwxMiArODcwLDIyIEBACiAJCWJyZWFrOwogCiAJY2FzZSAweDEwMTE6CQkvLyBIYXVwcGF1Z2UvVFQgTm92YS1UIGJ1ZGdldCAodGRhMTAwNDUvUGhpbGlwcyB0ZG0xMzE2bCh0ZGE2NjUxdHQpICsgVERBOTg4OSkKKwkJYnVkZ2V0X2NpLT50dW5lcl9wbGxfYWRkcmVzcyA9IDB4NjM7CiAJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9CiAJCQl0ZGExMDA0NV9hdHRhY2goJnBoaWxpcHNfdGRtMTMxNmxfY29uZmlnLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSB7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKKworCWNhc2UgMHgxMDEyOgkJLy8gSGF1cHBhdWdlL1RUIE5vdmEtVCBDSSBidWRnZXQgKHRkYTEwMDQ1L1BoaWxpcHMgdGRtMTMxNmwodGRhNjY1MXR0KSArIFREQTk4ODkpCisJCWJ1ZGdldF9jaS0+dHVuZXJfcGxsX2FkZHJlc3MgPSAweDYwOworCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPQorCQkJdGRhMTAwNDZfYXR0YWNoKCZwaGlsaXBzX3RkbTEzMTZsX2NvbmZpZywgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwKTsKKwkJaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCkgeworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAJfQogCiAJaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9PSBOVUxMKSB7CkBAIC05NTAsMTEgKzk2NSwxMyBAQAogCiBNQUtFX0JVREdFVF9JTkZPKHR0YmNpLCAiVFQtQnVkZ2V0L1dpblRWLU5PVkEtQ0kgUENJIiwgQlVER0VUX1RUX0hXX0RJU0VRQyk7CiBNQUtFX0JVREdFVF9JTkZPKHR0YnQyLCAiVFQtQnVkZ2V0L1dpblRWLU5PVkEtVAkgUENJIiwgQlVER0VUX1RUKTsKK01BS0VfQlVER0VUX0lORk8odHRidGNpLCAiVFQtQnVkZ2V0LVQtQ0kgUENJIiwgQlVER0VUX1RUKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV90YmxbXSA9IHsKIAlNQUtFX0VYVEVOU0lPTl9QQ0kodHRiY2ksIDB4MTNjMiwgMHgxMDBjKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0kodHRiY2ksIDB4MTNjMiwgMHgxMDBmKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0kodHRidDIsIDB4MTNjMiwgMHgxMDExKSwKKwlNQUtFX0VYVEVOU0lPTl9QQ0kodHRidGNpLCAweDEzYzIsIDB4MTAxMiksCiAJewogCSAudmVuZG9yID0gMCwKIAkgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwppbmRleCAwODNmZDQ0Li45OTYxOTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgInZlczE4MjAuaCIKICNpbmNsdWRlICJsNjQ3ODEuaCIKICNpbmNsdWRlICJ0ZGE4MDgzLmgiCisjaW5jbHVkZSAiczVoMTQyMC5oIgogCiBzdGF0aWMgdm9pZCBTZXQyMksgKHN0cnVjdCBidWRnZXQgKmJ1ZGdldCwgaW50IHN0YXRlKQogewpAQCAtMTc3LDYgKzE3OCw2MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGxuYnAyMV9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCXN0cnVjdCBidWRnZXQqIGJ1ZGdldCA9IChzdHJ1Y3QgYnVkZ2V0KikgZmUtPmR2Yi0+cHJpdjsKKwl1OCBidWY7CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4MDgsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJmJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07CisKKwlpZiAoaTJjX3RyYW5zZmVyICgmYnVkZ2V0LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgcmV0dXJuIC1FSU87CisKKwlzd2l0Y2godm9sdGFnZSkgeworCWNhc2UgU0VDX1ZPTFRBR0VfMTM6CisJCWJ1ZiA9IChidWYgJiAweGY3KSB8IDB4MDQ7CisJCWJyZWFrOworCisJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJYnVmID0gKGJ1ZiAmIDB4ZjcpIHwgMHgwYzsKKwkJYnJlYWs7CisKKwljYXNlIFNFQ19WT0xUQUdFX09GRjoKKwkJYnVmID0gYnVmICYgMHhmMDsKKwkJYnJlYWs7CisJfQorCisJbXNnLmZsYWdzID0gMDsKKwlpZiAoaTJjX3RyYW5zZmVyICgmYnVkZ2V0LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBhcmcpCit7CisJc3RydWN0IGJ1ZGdldCogYnVkZ2V0ID0gKHN0cnVjdCBidWRnZXQqKSBmZS0+ZHZiLT5wcml2OworCXU4IGJ1ZjsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHgwOCwgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSAmYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKKworCWlmIChpMmNfdHJhbnNmZXIgKCZidWRnZXQtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSByZXR1cm4gLUVJTzsKKworCWlmIChhcmcpIHsKKwkJYnVmID0gYnVmIHwgMHgxMDsKKwl9IGVsc2UgeworCQlidWYgPSBidWYgJiAweGVmOworCX0KKworCW1zZy5mbGFncyA9IDA7CisJaWYgKGkyY190cmFuc2ZlciAoJmJ1ZGdldC0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxuYnAyMV9pbml0KHN0cnVjdCBidWRnZXQqIGJ1ZGdldCkKK3sKKwl1OCBidWYgPSAweDAwOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLCAuYnVmID0gJmJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07CisKKwlpMmNfdHJhbnNmZXIgKCZidWRnZXQtPmkyY19hZGFwLCAmbXNnLCAxKTsKK30KKwogc3RhdGljIGludCBhbHBzX2JzcnYyX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQogewogCXN0cnVjdCBidWRnZXQqIGJ1ZGdldCA9IChzdHJ1Y3QgYnVkZ2V0KikgZmUtPmR2Yi0+cHJpdjsKQEAgLTM5NSw2ICs0NTIsMzggQEAKIAkucGxsX3NldCA9IGdydW5kaWdfMjk1MDRfNDUxX3BsbF9zZXQsCiB9OwogCitzdGF0aWMgaW50IHM1aDE0MjBfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMsIHUzMiogZnJlcW91dCkKK3sKKwlzdHJ1Y3QgYnVkZ2V0KiBidWRnZXQgPSAoc3RydWN0IGJ1ZGdldCopIGZlLT5kdmItPnByaXY7CisJdTMyIGRpdjsKKwl1OCBkYXRhWzRdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDYxLCAuZmxhZ3MgPSAwLCAuYnVmID0gZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKSB9OworCisJZGl2ID0gcGFyYW1zLT5mcmVxdWVuY3kgLyAxMDAwOworCWRhdGFbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlkYXRhWzFdID0gZGl2ICYgMHhmZjsKKwlkYXRhWzJdID0gMHhjMjsKKworCWlmIChkaXYgPCAxNDUwKQorCQlkYXRhWzNdID0gMHgwMDsKKwllbHNlIGlmIChkaXYgPCAxODUwKQorCQlkYXRhWzNdID0gMHg0MDsKKwllbHNlIGlmIChkaXYgPCAyMDAwKQorCQlkYXRhWzNdID0gMHg4MDsKKwllbHNlCisJCWRhdGFbM10gPSAweGMwOworCisJaWYgKGkyY190cmFuc2ZlciAoJmJ1ZGdldC0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHJldHVybiAtRUlPOworCisJKmZyZXFvdXQgPSBkaXYgKiAxMDAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHM1aDE0MjBfY29uZmlnIHM1aDE0MjBfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg1MywKKwkucGxsX3NldCA9IHM1aDE0MjBfcGxsX3NldCwKK307CisKIHN0YXRpYyB1OCByZWFkX3B3bShzdHJ1Y3QgYnVkZ2V0KiBidWRnZXQpCiB7CiAJdTggYiA9IDB4ZmY7CkBAIC00NTksNiArNTQ4LDE1IEBACiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKKworCWNhc2UgMHgxMDE2OiAvLyBIYXVwcGF1Z2UvVFQgTm92YS1TIFNFIChzYW1zdW5nIHM1aDE0MjAvPz8/Pyh0ZGE4MjYwKSkKKwkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSBzNWgxNDIwX2F0dGFjaCgmczVoMTQyMF9jb25maWcsICZidWRnZXQtPmkyY19hZGFwKTsKKwkJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKSB7CisJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLT5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKKwkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlID0gbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlOworCQkJbG5icDIxX2luaXQoYnVkZ2V0KTsKKwkJCWJyZWFrOworCQl9CiAJfQogCiAJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kID09IE5VTEwpIHsKQEAgLTUzMiw2ICs2MzAsNyBAQAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJjLCAgMHgxM2MyLCAweDEwMDQpLAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJ0LCAgMHgxM2MyLCAweDEwMDUpLAogCU1BS0VfRVhURU5TSU9OX1BDSShzYXRlbCwgMHgxM2MyLCAweDEwMTMpLAorCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJzLCAgMHgxM2MyLCAweDEwMTYpLAogCU1BS0VfRVhURU5TSU9OX1BDSShmc2FjczEsMHgxMTMxLCAweDRmNjApLAogCU1BS0VfRVhURU5TSU9OX1BDSShmc2FjczAsMHgxMTMxLCAweDRmNjEpLAogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L0tjb25maWcKaW5kZXggNGFhNzE0YS4uYzZjMWQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBVU0IKIAlzZWxlY3QgRFZCX0NYMjI3MDAKIAlzZWxlY3QgRFZCX1REQTEwMDRYCisJc2VsZWN0IERWQl9WRVMxODIwCiAJc2VsZWN0IERWQl9UREE4MDgzCiAJc2VsZWN0IERWQl9TVFYwMjk5CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKaW5kZXggYWZhMGU3YS4uMmMxN2E1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiZG14ZGV2LmgiCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCiAjaW5jbHVkZSAiZHZiX25ldC5oIgorI2luY2x1ZGUgInZlczE4MjAuaCIKICNpbmNsdWRlICJjeDIyNzAwLmgiCiAjaW5jbHVkZSAidGRhMTAwNHguaCIKICNpbmNsdWRlICJzdHYwMjk5LmgiCkBAIC0xMzY3LDYgKzEzNjgsNDcgQEAKIAkucGxsX3NldCA9IHR0dXNiX25vdmFzX2dydW5kaWdfMjk1MDRfNDkxX3BsbF9zZXQsCiB9OwogCitzdGF0aWMgaW50IGFscHNfdGRiZTJfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpCit7CisJc3RydWN0IHR0dXNiKiB0dHVzYiA9IGZlLT5kdmItPnByaXY7CisJdTMyIGRpdjsKKwl1OCBkYXRhWzRdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDYyLCAuZmxhZ3MgPSAwLCAuYnVmID0gZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKSB9OworCisJZGl2ID0gKHBhcmFtcy0+ZnJlcXVlbmN5ICsgMzU5Mzc1MDAgKyAzMTI1MCkgLyA2MjUwMDsKKworCWRhdGFbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlkYXRhWzFdID0gZGl2ICYgMHhmZjsKKwlkYXRhWzJdID0gMHg4NSB8ICgoZGl2ID4+IDEwKSAmIDB4NjApOworCWRhdGFbM10gPSAocGFyYW1zLT5mcmVxdWVuY3kgPCAxNzQwMDAwMDAgPyAweDg4IDogcGFyYW1zLT5mcmVxdWVuY3kgPCA0NzAwMDAwMDAgPyAweDg0IDogMHg4MSk7CisKKwlpZiAoaTJjX3RyYW5zZmVyICgmdHR1c2ItPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdmVzMTgyMF9jb25maWcgYWxwc190ZGJlMl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDA5LAorCS54aW4gPSA1Nzg0MDAwMFVMLAorCS5pbnZlcnQgPSAxLAorCS5zZWxhZ2MgPSBWRVMxODIwX1NFTEFHQ19TSUdOQU1QRVJSLAorCS5wbGxfc2V0ID0gYWxwc190ZGJlMl9wbGxfc2V0LAorfTsKKworc3RhdGljIHU4IHJlYWRfcHdtKHN0cnVjdCB0dHVzYiogdHR1c2IpCit7CisJdTggYiA9IDB4ZmY7CisJdTggcHdtOworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geyB7IC5hZGRyID0gMHg1MCwuZmxhZ3MgPSAwLC5idWYgPSAmYiwubGVuID0gMSB9LAorCQkJCXsgLmFkZHIgPSAweDUwLC5mbGFncyA9IEkyQ19NX1JELC5idWYgPSAmcHdtLC5sZW4gPSAxfSB9OworCisJaWYgKChpMmNfdHJhbnNmZXIoJnR0dXNiLT5pMmNfYWRhcCwgbXNnLCAyKSAhPSAyKSB8fCAocHdtID09IDB4ZmYpKQorCQlwd20gPSAweDQ4OworCisJcmV0dXJuIHB3bTsKK30KIAogCiBzdGF0aWMgdm9pZCBmcm9udGVuZF9pbml0KHN0cnVjdCB0dHVzYiogdHR1c2IpCkBAIC0xMzk0LDYgKzE0MzYsMTIgQEAKIAogCQlicmVhazsKIAorCWNhc2UgMHgxMDA0OiAvLyBIYXVwcGF1Z2UvVFQgRFZCLUMgYnVkZ2V0ICh2ZXMxODIwL0FMUFMgVERCRTIoc3A1NjU5KSkKKwkJdHR1c2ItPmZlID0gdmVzMTgyMF9hdHRhY2goJmFscHNfdGRiZTJfY29uZmlnLCAmdHR1c2ItPmkyY19hZGFwLCByZWFkX3B3bSh0dHVzYikpOworCQlpZiAodHR1c2ItPmZlICE9IE5VTEwpCisJCQlicmVhazsKKwkJYnJlYWs7CisKIAljYXNlIDB4MTAwNTogLy8gSGF1cHBhdWdlL1RUIE5vdmEtVVNCLXQgYnVkZ2V0ICh0ZGExMDA0Ni9QaGlsaXBzIHRkMTMxNih0ZGE2NjUxdHQpIE9SIGN4MjI3MDAvQUxQUyBURE1CNyg/PykpCiAJCS8vIHRyeSB0aGUgQUxQUyBURE1CNyBmaXJzdAogCQl0dHVzYi0+ZmUgPSBjeDIyNzAwX2F0dGFjaCgmYWxwc190ZG1iN19jb25maWcsICZ0dHVzYi0+aTJjX2FkYXApOwpAQCAtMTU3MCw3ICsxNjE4LDcgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHR0dXNiX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHhiNDgsIDB4MTAwMyl9LAotLyoJe1VTQl9ERVZJQ0UoMHhiNDgsIDB4MTAwNCl9LFVOREVGSU5FRCBIQVJEV0FSRSAtIG1haWwgbGludXh0di5vcmcgbGlzdCovCS8qIHRvIGJlIGNvbmZpcm1lZCA/Pz8/ICAqLworCXtVU0JfREVWSUNFKDB4YjQ4LCAweDEwMDQpfSwKIAl7VVNCX0RFVklDRSgweGI0OCwgMHgxMDA1KX0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKaW5kZXggNTA1YmRhZi4uNDVjOWE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYwpAQCAtMTI4MSw2ICsxMjgxLDcgQEAKIAlpZiAoZmlybXdhcmVfc2l6ZSA8IDYwKSB7CiAJCXByaW50aygiJXM6IGZpcm13YXJlIHNpemUgdG9vIHNtYWxsIGZvciBEU1AgY29kZSAoJXp1IDwgNjApLlxuIiwKIAkJCV9fRlVOQ1RJT05fXywgZmlybXdhcmVfc2l6ZSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMjk0LDYgKzEyOTUsNyBAQAogCQlwcmludGsoIiVzOiBjcmMzMiBjaGVjayBvZiBEU1AgY29kZSBmYWlsZWQgKGNhbGN1bGF0ZWQgIgogCQkgICAgICAgIjB4JTA4eCAhPSAweCUwOHggaW4gZmlsZSksIGZpbGUgaW52YWxpZC5cbiIsCiAJCQlfX0ZVTkNUSU9OX18sIGNyYzMyX2NzdW0sIGNyYzMyX2NoZWNrKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJCXJldHVybiAtMTsKIAl9CiAJbWVtY3B5KGlkc3RyaW5nLCAmZmlybXdhcmVbMzZdLCAyMCk7CkBAIC0xMzA4LDE1ICsxMzEwLDE5IEBACiAKIAlyZXN1bHQgPSB0dHVzYl9kZWNfc2VuZF9jb21tYW5kKGRlYywgMHg0MSwgc2l6ZW9mKGIwKSwgYjAsIE5VTEwsIE5VTEwpOwogCi0JaWYgKHJlc3VsdCkKKwlpZiAocmVzdWx0KSB7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwogCQlyZXR1cm4gcmVzdWx0OworCX0KIAogCXRyYW5zX2NvdW50ID0gMDsKIAlqID0gMDsKIAogCWIgPSBrbWFsbG9jKEFSTV9QQUNLRVRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGIgPT0gTlVMTCkKKwlpZiAoYiA9PSBOVUxMKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgZmlybXdhcmVfc2l6ZTsgaSArPSBDT01NQU5EX1BBQ0tFVF9TSVpFKSB7CiAJCXNpemUgPSBmaXJtd2FyZV9zaXplIC0gaTsKQEAgLTEzNDUsNiArMTM1MSw3IEBACiAKIAlyZXN1bHQgPSB0dHVzYl9kZWNfc2VuZF9jb21tYW5kKGRlYywgMHg0Mywgc2l6ZW9mKGIxKSwgYjEsIE5VTEwsIE5VTEwpOwogCisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJa2ZyZWUoYik7CiAKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiZGVjZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYmRlY2ZlLmMKaW5kZXggMTY5OWNjOS4uNzI1YWYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiZGVjZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JkZWNmZS5jCkBAIC0xNTcsNyArMTU3LDggQEAKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCiAJc3RhdGUgPSAoc3RydWN0IHR0dXNiZGVjZmVfc3RhdGUqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHR1c2JkZWNmZV9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmIChzdGF0ZSA9PSBOVUxMKSBnb3RvIGVycm9yOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CkBAIC0xNjcsMTAgKzE2OCw2IEBACiAJc3RhdGUtPmZyb250ZW5kLm9wcyA9ICZzdGF0ZS0+b3BzOwogCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7Ci0KLWVycm9yOgotCWtmcmVlKHN0YXRlKTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHR0dXNiZGVjZmVfZHZic19vcHM7CkBAIC0xODEsNyArMTc4LDggQEAKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCiAJc3RhdGUgPSAoc3RydWN0IHR0dXNiZGVjZmVfc3RhdGUqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHR1c2JkZWNmZV9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmIChzdGF0ZSA9PSBOVUxMKSBnb3RvIGVycm9yOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CkBAIC0xOTMsMTAgKzE5MSw2IEBACiAJc3RhdGUtPmZyb250ZW5kLm9wcyA9ICZzdGF0ZS0+b3BzOwogCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7Ci0KLWVycm9yOgotCWtmcmVlKHN0YXRlKTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHR0dXNiZGVjZmVfZHZidF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggMWI3MGY4Yi4uZTc3MTA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMzQ0LDYgKzM0NCw3IEBACiAJc2VsZWN0IERWQl9NVDM1MgogCXNlbGVjdCBEVkJfT1I1MTEzMgogCXNlbGVjdCBEVkJfQ1gyMjcwMgorCXNlbGVjdCBEVkJfTEdEVDMzMDIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCL0FUU0MgY2FyZHMgYmFzZWQgb24gdGhlCiAJICBDb25uZXhhbnQgMjM4OHggY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IGIzZmIwNDMuLmIwYjQ3YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkSWQ6IGN4ODgtY2FyZHMuYyx2IDEuNzYgMjAwNS8wNi8wOCAwMToyODowOSBtY2hlaGFiIEV4cCAkCisgKiAkSWQ6IGN4ODgtY2FyZHMuYyx2IDEuODUgMjAwNS8wNy8wNCAxOTozNTowNSBta3J1Zmt5IEV4cCAkCiAgKgogICogZGV2aWNlIGRyaXZlciBmb3IgQ29uZXhhbnQgMjM4OHggYmFzZWQgVFYgY2FyZHMKICAqIGNhcmQtc3BlY2lmaWMgc3R1ZmYuCkBAIC00MDEsNyArNDAxLDcgQEAKIAkJLmR2YiAgICAgICAgICAgID0gMSwKIAl9LAogCVtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1QxXSA9IHsKLQkJLm5hbWUgICAgICAgICAgID0gIkRWSUNPIEZ1c2lvbkhEVFYgRFZCLVQxIiwKKwkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQxIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULCAvKiBObyBhbmFsb2cgdHVuZXIgKi8KIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTQ0NSw4ICs0NDUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4MDAwMDA3ZjgsCiAgICAgICAgICAgICAgICAgfSwKIAl9LAotCVtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfM19HT0xEXSA9IHsKLQkJLm5hbWUJCT0gIkRWaUNPIC0gRnVzaW9uSERUViAzIEdvbGQiLAorCVtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfM19HT0xEX1FdID0geworCQkubmFtZQkJPSAiRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtUSIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX01JQ1JPVFVORV80MDQyRkk1LAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtNDY0LDYgKzQ2NCw5IEBACiAJCSAgIEdQSU9bM10gc2VsZWN0cyBSRiBpbnB1dCBjb25uZWN0b3Igb24gdHVuZXIgbW9kdWxlCiAJCSAgICAwIC0gUkYgY29ubmVjdG9yIGxhYmVsZWQgQ0FCTEUKIAkJICAgIDEgLSBSRiBjb25uZWN0b3IgbGFiZWxlZCBBTlQKKwkJICAgR1BJT1s0XSBzZWxlY3RzIGhpZ2ggUkYgZm9yIFFBTTI1NiBtb2RlCisJCSAgICAwIC0gbm9ybWFsIFJGCisJCSAgICAxIC0gaGlnaCBSRgogCQkqLwogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLApAQCAtNDgyLDYgKzQ4NSw3IEBACiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMAk9IDB4MGYwMCwKIAkJfX0sCisJCS5kdmIgICAgICAgICAgICA9IDEsCiAJfSwKICAgICAgICAgW0NYODhfQk9BUkRfSEFVUFBBVUdFX0RWQl9UMV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgTm92YS1UIERWQi1UIiwKQEAgLTUyMCw3ICs1MjQsNyBAQAogCQkuYmxhY2tiaXJkID0gMSwKIAl9LAogCVtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfUExVU10gPSB7Ci0JCS5uYW1lICAgICAgICAgICA9ICJEVklDTyBGdXNpb25IRFRWIERWQi1UIFBsdXMiLAorCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBQbHVzIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULCAvKiBObyBhbmFsb2cgdHVuZXIgKi8KIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTcwMCwyMSArNzA0LDE3IEBACiAJCSB9LAogCX0sCiAgICAgICAgIFtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfM19HT0xEX1RdID0gewotICAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJEVmlDTyAtIEZ1c2lvbkhEVFYgMyBHb2xkLVQiLAorCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtVCIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RIT01TT05fRFRUNzYxMSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAotCQkvKiAgU2VlIERWaUNPIEZ1c2lvbkhEVFYgMyBHb2xkIGZvciBHUElPIGRvY3VtZW50YXRpb24uICAqLwotICAgICAgICAgICAgICAgIC5pbnB1dCAgICAgICAgICA9IHt7CisJCS8qICBTZWUgRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtUSBmb3IgR1BJTyBkb2N1bWVudGF0aW9uLiAgKi8KKwkJLmlucHV0ICAgICAgICAgID0ge3sKICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKICAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4MGYwZCwKICAgICAgICAgICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfQ0FCTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDBmMDUsCi0gICAgICAgICAgICAgICAgfSx7CiAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDBmMDAsCkBAIC03MjMsNyArNzIzLDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDBmMDAsCiAgICAgICAgICAgICAgICAgfX0sCisJCS5kdmIgICAgICAgICAgICA9IDEsCiAgICAgICAgIH0sCisgICAgICAgIFtDWDg4X0JPQVJEX0FEU1RFQ0hfRFZCX1RfUENJXSA9IHsKKyAgICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiQURTIFRlY2ggSW5zdGFudCBUViBEVkItVCBQQ0kiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKyAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4MDcwMCwKKwkJCS5ncGlvMiAgPSAweDAxMDEsCisgICAgICAgICAgICAgICAgfSx7CisgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKyAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAyLAorCQkJLmdwaW8wICA9IDB4MDcwMCwKKwkJCS5ncGlvMiAgPSAweDAxMDEsCisgICAgICAgICAgICAgICAgfX0sCisJCS5kdmIgICAgICAgICAgICA9IDEsCisJfSwKKwlbQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzE0MDBfRFZCX1QxXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhVGVjIENpbmVyZ3kgMTQwMCBEVkItVCIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfRFZCLAorCQkJLnZtdXggICA9IDAsCisJCX19LAorCQkuZHZiICAgICAgICAgICAgPSAxLAorCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4ODhfYmNvdW50ID0gQVJSQVlfU0laRShjeDg4X2JvYXJkcyk7CiAKQEAgLTc5NCw3ICs4MjMsNyBAQAogCX0sewogCQkuc3VidmVuZG9yID0gMHgxOGFjLAogCQkuc3ViZGV2aWNlID0gMHhkODEwLAotCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzNfR09MRCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8zX0dPTERfUSwKIAl9LHsKIAkJLnN1YnZlbmRvciA9IDB4MThhYywKIAkJLnN1YmRldmljZSA9IDB4ZDgyMCwKQEAgLTg0Myw3ICs4NzIsMTUgQEAKIAkJLnN1YnZlbmRvciA9IDB4MTBmYywKIAkJLnN1YmRldmljZSA9IDB4ZDAzNSwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfSU9EQVRBX0dWQkNUVjdFLAotCX0KKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MTQyMSwKKwkJLnN1YmRldmljZSA9IDB4MDMzNCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfQURTVEVDSF9EVkJfVF9QQ0ksCisgCX0seworCQkuc3VidmVuZG9yID0gMHgxNTNiLAorCQkuc3ViZGV2aWNlID0gMHgxMTY2LAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzE0MDBfRFZCX1QxLAorCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4ODhfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3g4OF9zdWJpZHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggYzA0NmEyMy4uOTZjYjBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkSWQ6IGN4ODgtY29yZS5jLHYgMS4yOCAyMDA1LzA2LzEyIDA0OjE5OjE5IG1jaGVoYWIgRXhwICQKKyAqICRJZDogY3g4OC1jb3JlLmMsdiAxLjMxIDIwMDUvMDYvMjIgMjI6NTg6MDQgbWNoZWhhYiBFeHAgJAogICoKICAqIGRldmljZSBkcml2ZXIgZm9yIENvbmV4YW50IDIzODh4IGJhc2VkIFRWIGNhcmRzCiAgKiBkcml2ZXIgY29yZQpAQCAtNTQ1LDEyICs1NDUsMTQgQEAKIAkgICAgICAgY29yZS0+bmFtZSxjeF9yZWFkKGNoLT5jbnQyX3JlZykpOwogfQogCisvKiBVc2VkIG9ubHkgb24gY3g4OC1jb3JlICovCiBzdGF0aWMgY2hhciAqY3g4OF9wY2lfaXJxc1szMl0gPSB7CiAJInZpZCIsICJhdWQiLCAidHMiLCAidmlwIiwgImhzdCIsICI1IiwgIjYiLCAidG0xIiwKIAkic3JjX2RtYSIsICJkc3RfZG1hIiwgInJpc2NfcmRfZXJyIiwgInJpc2Nfd3JfZXJyIiwKIAkiYnJkZ19lcnIiLCAic3JjX2RtYV9lcnIiLCAiZHN0X2RtYV9lcnIiLCAiaXBiX2RtYV9lcnIiLAogCSJpMmMiLCAiaTJjX3JhY2siLCAiaXJfc21wIiwgImdwaW8wIiwgImdwaW8xIgogfTsKKy8qIFVzZWQgb25seSBvbiBjeDg4LXZpZGVvICovCiBjaGFyICpjeDg4X3ZpZF9pcnFzWzMyXSA9IHsKIAkieV9yaXNjaTEiLCAidV9yaXNjaTEiLCAidl9yaXNjaTEiLCAidmJpX3Jpc2MxIiwKIAkieV9yaXNjaTIiLCAidV9yaXNjaTIiLCAidl9yaXNjaTIiLCAidmJpX3Jpc2MyIiwKQEAgLTU1OCw2ICs1NjAsNyBAQAogCSJ5X3N5bmMiLCAgICJ1X3N5bmMiLCAgICJ2X3N5bmMiLCAgICJ2Ymlfc3luYyIsCiAJIm9wY19lcnIiLCAgInBhcl9lcnIiLCAgInJpcF9lcnIiLCAgInBjaV9hYm9ydCIsCiB9OworLyogVXNlZCBvbmx5IG9uIGN4ODgtbXBlZyAqLwogY2hhciAqY3g4OF9tcGVnX2lycXNbMzJdID0gewogCSJ0c19yaXNjaTEiLCBOVUxMLCBOVUxMLCBOVUxMLAogCSJ0c19yaXNjaTIiLCBOVUxMLCBOVUxMLCBOVUxMLApAQCAtMTAwNiwyMSArMTAwOSw3IEBACiAJc2V0X3R2YXVkaW8oY29yZSk7CiAKIAkvLyB0ZWxsIGkyYyBjaGlwcwotI2lmZGVmIFY0TDJfSTJDX0NMSUVOVFMKIAljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfU19TVEQsJm5vcm0tPmlkKTsKLSNlbHNlCi0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBjOwotCQltZW1zZXQoJmMsMCxzaXplb2YoYykpOwotCQljLmNoYW5uZWwgPSBjb3JlLT5pbnB1dDsKLQkJYy5ub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JCWlmICgobm9ybS0+aWQgJiAoVjRMMl9TVERfTlRTQ19NfFY0TDJfU1REX05UU0NfTV9KUCkpKQotCQkJYy5ub3JtID0gVklERU9fTU9ERV9OVFNDOwotCQlpZiAobm9ybS0+aWQgJiBWNEwyX1NURF9TRUNBTSkKLQkJCWMubm9ybSA9IFZJREVPX01PREVfU0VDQU07Ci0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ1NDSEFOLCZjKTsKLQl9Ci0jZW5kaWYKIAogCS8vIGRvbmUKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggMWEyNTljMy4uNjkwNDc3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiBjeDg4LWR2Yi5jLHYgMS4zMyAyMDA1LzA2LzEyIDA0OjE5OjE5IG1jaGVoYWIgRXhwICQKKyAqICRJZDogY3g4OC1kdmIuYyx2IDEuMzkgMjAwNS8wNy8wMiAyMDowMDo0NiBta3J1Zmt5IEV4cCAkCiAgKgogICogZGV2aWNlIGRyaXZlciBmb3IgQ29uZXhhbnQgMjM4OHggYmFzZWQgVFYgY2FyZHMKICAqIE1QRUcgVHJhbnNwb3J0IFN0cmVhbSAoRFZCKSByb3V0aW5lcwpAQCAtMzAsOSArMzAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCi0vKiB0aG9zZSB0d28gZnJvbnRlbmRzIG5lZWQgbWVyZ2luZyB2aWEgbGludXh0diBjdnMgLi4uICovCisvKiB0aGVzZSB0aHJlZSBmcm9udGVuZHMgbmVlZCBtZXJnaW5nIHZpYSBsaW51eHR2IGN2cyAuLi4gKi8KICNkZWZpbmUgSEFWRV9DWDIyNzAyIDEKICNkZWZpbmUgSEFWRV9PUjUxMTMyIDEKKyNkZWZpbmUgSEFWRV9MR0RUMzMwMiAxCiAKICNpbmNsdWRlICJjeDg4LmgiCiAjaW5jbHVkZSAiZHZiLXBsbC5oIgpAQCAtNDQsNiArNDUsOSBAQAogI2lmIEhBVkVfT1I1MTEzMgogIyBpbmNsdWRlICJvcjUxMTMyLmgiCiAjZW5kaWYKKyNpZiBIQVZFX0xHRFQzMzAyCisjIGluY2x1ZGUgImxnZHQzMzAyLmgiCisjZW5kaWYKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJkcml2ZXIgZm9yIGN4MjM4OHggYmFzZWQgRFZCIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PiIpOwpAQCAtMTk5LDYgKzIwMywzMiBAQAogfTsKICNlbmRpZgogCisjaWYgSEFWRV9MR0RUMzMwMgorc3RhdGljIGludCBsZ2R0MzMwMl9zZXRfdHNfcGFyYW0oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpc19wdW5jdHVyZWQpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKKwlpZiAoaXNfcHVuY3R1cmVkKQorCQlkZXYtPnRzX2dlbl9jbnRybCB8PSAweDA0OworCWVsc2UKKwkJZGV2LT50c19nZW5fY250cmwgJj0gfjB4MDQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGdkdDMzMDJfY29uZmlnIGZ1c2lvbmhkdHZfM19nb2xkX3EgPSB7CisJLmRlbW9kX2FkZHJlc3MgICAgPSAweDBlLAorCS5wbGxfYWRkcmVzcyAgICAgID0gMHg2MSwKKwkucGxsX2Rlc2MgICAgICAgICA9ICZkdmJfcGxsX21pY3JvdHVuZV80MDQyLAorCS5zZXRfdHNfcGFyYW1zICAgID0gbGdkdDMzMDJfc2V0X3RzX3BhcmFtLAorfTsKKworc3RhdGljIHN0cnVjdCBsZ2R0MzMwMl9jb25maWcgZnVzaW9uaGR0dl8zX2dvbGRfdCA9IHsKKwkuZGVtb2RfYWRkcmVzcyAgICA9IDB4MGUsCisJLnBsbF9hZGRyZXNzICAgICAgPSAweDYxLAorCS5wbGxfZGVzYyAgICAgICAgID0gJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NjExLAorCS5zZXRfdHNfcGFyYW1zICAgID0gbGdkdDMzMDJfc2V0X3RzX3BhcmFtLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IGR2Yl9yZWdpc3RlcihzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQogewogCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLwpAQCAtMjEyLDYgKzI0Miw3IEBACiAJCWRldi0+ZHZiLmZyb250ZW5kID0gY3gyMjcwMl9hdHRhY2goJmhhdXBwYXVnZV9ub3ZhdF9jb25maWcsCiAJCQkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzE0MDBfRFZCX1QxOgogCWNhc2UgQ1g4OF9CT0FSRF9DT05FWEFOVF9EVkJfVDE6CiAJCWRldi0+ZHZiLmZyb250ZW5kID0gY3gyMjcwMl9hdHRhY2goJmNvbm5leGFudF9yZWZib2FyZF9jb25maWcsCiAJCQkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CkBAIC0yMzEsNiArMjYyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVDoKIAljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UOgorCWNhc2UgQ1g4OF9CT0FSRF9BRFNURUNIX0RWQl9UX1BDSToKIAkJZGV2LT5jb3JlLT5wbGxfYWRkciA9IDB4NjE7CiAJCWRldi0+Y29yZS0+cGxsX2Rlc2MgPSAmZHZiX3BsbF91bmtub3duXzE7CiAJCWRldi0+ZHZiLmZyb250ZW5kID0gbXQzNTJfYXR0YWNoKCZkbnR2X2xpdmVfZHZidF9jb25maWcsCkBAIC0yNDIsNiArMjc0LDM2IEBACiAJCQkJCQkgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlicmVhazsKICNlbmRpZgorI2lmIEhBVkVfTEdEVDMzMDIKKwljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8zX0dPTERfUToKKwkJZGV2LT50c19nZW5fY250cmwgPSAweDA4OworCQl7CisJCS8qIERvIGEgaGFyZHdhcmUgcmVzZXQgb2YgY2hpcCBiZWZvcmUgdXNpbmcgaXQuICovCisJCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CisKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAxKTsKKwkJbWRlbGF5KDEwMCk7CisJCWN4X3NldChNT19HUDBfSU8sIDkpOyAvLyBBTlQgY29ubmVjdG9yIHRvbyBGSVhNRQorCQltZGVsYXkoMjAwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBsZ2R0MzMwMl9hdHRhY2goJmZ1c2lvbmhkdHZfM19nb2xkX3EsCisJCQkJCQkgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzNfR09MRF9UOgorCQlkZXYtPnRzX2dlbl9jbnRybCA9IDB4MDg7CisJCXsKKwkJLyogRG8gYSBoYXJkd2FyZSByZXNldCBvZiBjaGlwIGJlZm9yZSB1c2luZyBpdC4gKi8KKwkJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKworCQljeF9jbGVhcihNT19HUDBfSU8sIDEpOworCQltZGVsYXkoMTAwKTsKKwkJY3hfc2V0KE1PX0dQMF9JTywgOSk7IC8qIEFOVCBjb25uZWN0b3IgdG9vIEZJWE1FICovCisJCW1kZWxheSgyMDApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGxnZHQzMzAyX2F0dGFjaCgmZnVzaW9uaGR0dl8zX2dvbGRfdCwKKwkJCQkJCSAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKIAlkZWZhdWx0OgogCQlwcmludGsoIiVzOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCiAJCSAgICAgICBkZXYtPmNvcmUtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwppbmRleCBlMjBhZGVmLi5iNTM0MjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gICAgJElkOiBjeDg4LWkyYy5jLHYgMS4yMyAyMDA1LzA2LzEyIDA0OjE5OjE5IG1jaGVoYWIgRXhwICQKKyAgICAkSWQ6IGN4ODgtaTJjLmMsdiAxLjI0IDIwMDUvMDYvMTcgMTg6NDY6MjMgbWtydWZreSBFeHAgJAogCiAgICAgY3g4OC1pMmMuYyAgLS0gIGFsbCB0aGUgaTJjIGNvZGUgaXMgaGVyZQogCkBAIC0xNTcsNiArMTU3LDcgQEAKIH07CiAKIHN0YXRpYyBjaGFyICppMmNfZGV2c1sxMjhdID0geworCVsgMHgxYyA+PiAxIF0gPSAibGdkdDMzMDIiLAogCVsgMHg4NiA+PiAxIF0gPSAidGRhOTg4Ny9jeDIyNzAyIiwKIAlbIDB4YTAgPj4gMSBdID0gImVlcHJvbSIsCiAJWyAweGMwID4+IDEgXSA9ICJ0dW5lciAoYW5hbG9nKSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCBkYzBkY2YyLi5iZGMyNmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiBjeDg4LWlucHV0LmMsdiAxLjExIDIwMDUvMDUvMjIgMjA6NTc6NTYgbnNoIEV4cCAkCisgKiAkSWQ6IGN4ODgtaW5wdXQuYyx2IDEuMTMgMjAwNS8wNi8xMyAxNjowNzo0NiBuc2ggRXhwICQKICAqCiAgKiBEZXZpY2UgZHJpdmVyIGZvciBHUElPIGF0dGFjaGVkIHJlbW90ZSBjb250cm9sIGludGVyZmFjZXMKICAqIG9uIENvbmV4YW50IDIzODh4IGJhc2VkIFRWL0RWQiBjYXJkcy4KQEAgLTEyNSw2ICsxMjUsODYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKiBBRFMgVGVjaCBJbnN0YW50IFRWIERWQi1UIFBDSSBSZW1vdGUgKi8KK3N0YXRpYyBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hZHN0ZWNoX2R2Yl90X3BjaVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDViIF0gPSBLRVlfUE9XRVIsCisJWyAweDVmIF0gPSBLRVlfTVVURSwKKwlbIDB4NTcgXSA9IEtFWV8xLAorCVsgMHg0ZiBdID0gS0VZXzIsCisJWyAweDUzIF0gPSBLRVlfMywKKwlbIDB4NTYgXSA9IEtFWV80LAorCVsgMHg0ZSBdID0gS0VZXzUsCisJWyAweDVlIF0gPSBLRVlfNiwKKwlbIDB4NTQgXSA9IEtFWV83LAorCVsgMHg0YyBdID0gS0VZXzgsCisJWyAweDVjIF0gPSBLRVlfOSwKKwlbIDB4NGQgXSA9IEtFWV8wLAorCVsgMHg1NSBdID0gS0VZX0dPVE8sCisJWyAweDVkIF0gPSBLRVlfU0VBUkNILAorCVsgMHgxNyBdID0gS0VZX0VQRywgICAgICAgICAgICAgLy8gR3VpZGUKKwlbIDB4MWYgXSA9IEtFWV9NRU5VLAorCVsgMHgwZiBdID0gS0VZX1VQLAorCVsgMHg0NiBdID0gS0VZX0RPV04sCisJWyAweDE2IF0gPSBLRVlfTEVGVCwKKwlbIDB4MWUgXSA9IEtFWV9SSUdIVCwKKwlbIDB4MGUgXSA9IEtFWV9TRUxFQ1QsICAgICAgICAgIC8vIEVudGVyCisJWyAweDVhIF0gPSBLRVlfSU5GTywKKwlbIDB4NTIgXSA9IEtFWV9FWElULAorCVsgMHg1OSBdID0gS0VZX1BSRVZJT1VTLAorCVsgMHg1MSBdID0gS0VZX05FWFQsCisJWyAweDU4IF0gPSBLRVlfUkVXSU5ELAorCVsgMHg1MCBdID0gS0VZX0ZPUldBUkQsCisJWyAweDQ0IF0gPSBLRVlfUExBWVBBVVNFLAorCVsgMHgwNyBdID0gS0VZX1NUT1AsCisJWyAweDFiIF0gPSBLRVlfUkVDT1JELAorCVsgMHgxMyBdID0gS0VZX1RVTkVSLCAgICAgICAgICAgLy8gTGl2ZQorCVsgMHgwYSBdID0gS0VZX0EsCisJWyAweDEyIF0gPSBLRVlfQiwKKwlbIDB4MDMgXSA9IEtFWV9QUk9HMSwgICAgICAgICAgIC8vIDEKKwlbIDB4MDEgXSA9IEtFWV9QUk9HMiwgICAgICAgICAgIC8vIDIKKwlbIDB4MDAgXSA9IEtFWV9QUk9HMywgICAgICAgICAgIC8vIDMKKwlbIDB4MDYgXSA9IEtFWV9EVkQsCisJWyAweDQ4IF0gPSBLRVlfQVVYLCAgICAgICAgICAgICAvLyBQaG90bworCVsgMHg0MCBdID0gS0VZX1ZJREVPLAorCVsgMHgxOSBdID0gS0VZX0FVRElPLCAgICAgICAgICAgLy8gTXVzaWMKKwlbIDB4MGIgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDA4IF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDE1IF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDFjIF0gPSBLRVlfVk9MVU1FRE9XTiwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogTVNJIFRWQG55d2hlcmUgcmVtb3RlICovCitzdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVbSVJfS0VZVEFCX1NJWkVdID0geworICAgICAgIFsgMHgwMCBdID0gS0VZXzAsICAgICAgICAgICAvKiAnMCcgKi8KKyAgICAgICBbIDB4MDEgXSA9IEtFWV8xLCAgICAgICAgICAgLyogJzEnICovCisgICAgICAgWyAweDAyIF0gPSBLRVlfMiwgICAgICAgICAgIC8qICcyJyAqLworICAgICAgIFsgMHgwMyBdID0gS0VZXzMsICAgICAgICAgICAvKiAnMycgKi8KKyAgICAgICBbIDB4MDQgXSA9IEtFWV80LCAgICAgICAgICAgLyogJzQnICovCisgICAgICAgWyAweDA1IF0gPSBLRVlfNSwgICAgICAgICAgIC8qICc1JyAqLworICAgICAgIFsgMHgwNiBdID0gS0VZXzYsICAgICAgICAgICAvKiAnNicgKi8KKyAgICAgICBbIDB4MDcgXSA9IEtFWV83LCAgICAgICAgICAgLyogJzcnICovCisgICAgICAgWyAweDA4IF0gPSBLRVlfOCwgICAgICAgICAgIC8qICc4JyAqLworICAgICAgIFsgMHgwOSBdID0gS0VZXzksICAgICAgICAgICAvKiAnOScgKi8KKyAgICAgICBbIDB4MGMgXSA9IEtFWV9NVVRFLCAgICAgICAgLyogJ011dGUnICovCisgICAgICAgWyAweDBmIF0gPSBLRVlfU0NSRUVOLCAgICAgIC8qICdGdWxsIFNjcmVlbicgKi8KKyAgICAgICBbIDB4MTAgXSA9IEtFWV9GLCAgICAgICAgICAgLyogJ0Z1bnRpb24nICovCisgICAgICAgWyAweDExIF0gPSBLRVlfVCwgICAgICAgICAgIC8qICdUaW1lIHNoaWZ0JyAqLworICAgICAgIFsgMHgxMiBdID0gS0VZX1BPV0VSLCAgICAgICAvKiAnUG93ZXInICovCisgICAgICAgWyAweDEzIF0gPSBLRVlfTUVESUEsICAgICAgIC8qICdNVFMnICovCisgICAgICAgWyAweDE0IF0gPSBLRVlfU0xPVywgICAgICAgIC8qICdTbG93JyAqLworICAgICAgIFsgMHgxNiBdID0gS0VZX1JFV0lORCwgICAgICAvKiAnYmFja3dhcmQgPDwnICovCisgICAgICAgWyAweDE3IF0gPSBLRVlfRU5URVIsICAgICAgIC8qICdSZXR1cm4nICovCisgICAgICAgWyAweDE4IF0gPSBLRVlfRkFTVEZPUldBUkQsIC8qICdmb3J3YXJkID4+JyAqLworICAgICAgIFsgMHgxYSBdID0gS0VZX0NIQU5ORUxVUCwgICAvKiAnQ2hhbm5lbCsnICovCisgICAgICAgWyAweDFiIF0gPSBLRVlfVk9MVU1FVVAsICAgIC8qICdWb2x1bWUrJyAqLworICAgICAgIFsgMHgxZSBdID0gS0VZX0NIQU5ORUxET1dOLCAvKiAnQ2hhbm5lbC0nICovCisgICAgICAgWyAweDFmIF0gPSBLRVlfVk9MVU1FRE9XTiwgIC8qICdWb2x1bWUtJyAqLworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCiBzdHJ1Y3QgY3g4OF9JUiB7CiAJc3RydWN0IGN4ODhfY29yZQkqY29yZTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICAgICAgICBpbnB1dDsKQEAgLTI2OSw2ICszNDksMjAgQEAKIAkJaXItPm1hc2tfa2V5dXAgICA9IDB4ODA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSAxOyAvLyBtcwogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfQURTVEVDSF9EVkJfVF9QQ0k6CisJCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19hZHN0ZWNoX2R2Yl90X3BjaTsKKwkJaXItPmdwaW9fYWRkciAgICA9IE1PX0dQMV9JTzsKKwkJaXItPm1hc2tfa2V5Y29kZSA9IDB4YmY7CisJCWlyLT5tYXNrX2tleXVwICAgPSAweDQwOworCQlpci0+cG9sbGluZyAgICAgID0gNTA7IC8vIG1zCisJCWJyZWFrOworICAgICAgICBjYXNlIENYODhfQk9BUkRfTVNJX1RWQU5ZV0hFUkVfTUFTVEVSOgorICAgICAgICAgICAgICAgIGlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZTsKKyAgICAgICAgICAgICAgICBpci0+Z3Bpb19hZGRyICAgID0gTU9fR1AxX0lPOworICAgICAgICAgICAgICAgIGlyLT5tYXNrX2tleWNvZGUgPSAweDFmOworICAgICAgICAgICAgICAgIGlyLT5tYXNrX2tleXVwICAgPSAweDQwOworICAgICAgICAgICAgICAgIGlyLT5wb2xsaW5nICAgICAgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwogCX0KIAogCWlmIChOVUxMID09IGlyX2NvZGVzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggOWFkZTJhZS4uODVkYTZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkSWQ6IGN4ODgtbXBlZy5jLHYgMS4yNiAyMDA1LzA2LzAzIDEzOjMxOjUxIG1jaGVoYWIgRXhwICQKKyAqICRJZDogY3g4OC1tcGVnLmMsdiAxLjMwIDIwMDUvMDcvMDUgMTk6NDQ6NDAgbWtydWZreSBFeHAgJAogICoKICAqICBTdXBwb3J0IGZvciB0aGUgbXBlZyB0cmFuc3BvcnQgc3RyZWFtIHRyYW5zZmVycwogICogIFBDSSBmdW5jdGlvbiAjMiBvZiB0aGUgY3gyMzg4eC4KQEAgLTcwLDExICs3MCwxNiBAQAogCiAJaWYgKGN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5kdmIpIHsKIAkJLyogbmVnZWRnZSBkcml2ZW4gJiBzb2Z0d2FyZSByZXNldCAqLwotCQljeF93cml0ZShUU19HRU5fQ05UUkwsIDB4NDApOworCQljeF93cml0ZShUU19HRU5fQ05UUkwsIDB4MDA0MCB8IGRldi0+dHNfZ2VuX2NudHJsKTsKIAkJdWRlbGF5KDEwMCk7CiAJCWN4X3dyaXRlKE1PX1BJTk1VWF9JTywgMHgwMCk7Ci0JCWN4X3dyaXRlKFRTX0hXX1NPUF9DTlRSTCw0Nzw8MTZ8MTg4PDw0fDB4MDApOwotCQljeF93cml0ZShUU19TT1BfU1RBVCwweDAwKTsKKwkJY3hfd3JpdGUoVFNfSFdfU09QX0NOVFJMLDB4NDc8PDE2fDE4ODw8NHwweDAxKTsKKwkJaWYgKChjb3JlLT5ib2FyZCA9PSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfM19HT0xEX1EpIHx8CisJCSAgICAoY29yZS0+Ym9hcmQgPT0gQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzNfR09MRF9UKSkgeworCQkJY3hfd3JpdGUoVFNfU09QX1NUQVQsIDA8PDE2IHwgMDw8MTQgfCAxPDwxMyB8IDA8PDEyKTsKKwkJfSBlbHNlIHsKKwkJCWN4X3dyaXRlKFRTX1NPUF9TVEFULDB4MDApOworCQl9CiAJCWN4X3dyaXRlKFRTX0dFTl9DTlRSTCwgZGV2LT50c19nZW5fY250cmwpOwogCQl1ZGVsYXkoMTAwKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCBlNGNhNzM1Li5kYzk5NzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiBjeDg4LXZpZGVvLmMsdiAxLjYzIDIwMDUvMDYvMTIgMDQ6MTk6MTkgbWNoZWhhYiBFeHAgJAorICogJElkOiBjeDg4LXZpZGVvLmMsdiAxLjcwIDIwMDUvMDYvMjAgMDM6MzY6MDAgbWtydWZreSBFeHAgJAogICoKICAqIGRldmljZSBkcml2ZXIgZm9yIENvbmV4YW50IDIzODh4IGJhc2VkIFRWIGNhcmRzCiAgKiB2aWRlbzRsaW51eCB2aWRlbyBpbnRlcmZhY2UKQEAgLTI2MSw3ICsyNjEsNyBAQAogCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAogCQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQl9LAotCQkub2ZmICAgICAgICAgICAgICAgICAgID0gMCwKKwkJLm9mZiAgICAgICAgICAgICAgICAgICA9IDEyOCwKIAkJLnJlZyAgICAgICAgICAgICAgICAgICA9IE1PX0hVRSwKIAkJLm1hc2sgICAgICAgICAgICAgICAgICA9IDB4MDBmZiwKIAkJLnNoaWZ0ICAgICAgICAgICAgICAgICA9IDAsCkBAIC0xMzUxLDkgKzEzNTEsNiBAQAogCQkJVjRMMl9DQVBfU1RSRUFNSU5HICAgICB8CiAJCQlWNEwyX0NBUF9WQklfQ0FQVFVSRSAgIHwKICNpZiAwCi0JCQlWNEwyX1RVTkVSX0NBUF9MT1cgICAgIHwKLSNlbmRpZgotI2lmIDAKIAkJCVY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgfAogI2VuZGlmCiAJCQkwOwpAQCAtMTQ3NSw3ICsxNDcyLDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlpZiAoQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzNfR09MRCA9PSBjb3JlLT5ib2FyZCkgeworCQkJaWYgKENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8zX0dPTERfUSA9PSBjb3JlLT5ib2FyZCkgewogCQkJCXN0cmNweShhLT5uYW1lLCJMaW5lIEluIik7CiAJCQkJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAkJCQlyZXR1cm4gMDsKQEAgLTE1ODgsMTEgKzE1ODUsMTEgQEAKIAl7CiAJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKIAorCQltZW1zZXQoZiwwLHNpemVvZigqZikpOworCiAJCWlmIChVTlNFVCA9PSBjb3JlLT50dW5lcl90eXBlKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChmLT50dW5lciAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW1lbXNldChmLDAsc2l6ZW9mKCpmKSk7CisKIAkJZi0+dHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAkJZi0+ZnJlcXVlbmN5ID0gZGV2LT5mcmVxOwogCQlyZXR1cm4gMDsKQEAgLTE2MTIsMTEgKzE2MDksNyBAQAogCQlkb3duKCZkZXYtPmxvY2spOwogCQlkZXYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAJCWN4ODhfbmV3c3RhdGlvbihjb3JlKTsKLSNpZmRlZiBWNEwyX0kyQ19DTElFTlRTCiAJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhkZXYtPmNvcmUsVklESU9DX1NfRlJFUVVFTkNZLGYpOwotI2Vsc2UKLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGRldi0+Y29yZSxWSURJT0NTRlJFUSwmZGV2LT5mcmVxKTsKLSNlbmRpZgogCQl1cCgmZGV2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTcxNCwxMSArMTcwNyw3IEBACiAJCQlzaXplb2YoY2FwLT5jYXJkKSk7CiAJCXNwcmludGYoY2FwLT5idXNfaW5mbywiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wY2kpKTsKIAkJY2FwLT52ZXJzaW9uID0gQ1g4OF9WRVJTSU9OX0NPREU7Ci0JCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIKLSNpZiAwCi0JCQkJICAgIHwgVjRMMl9UVU5FUl9DQVBfTE9XCi0jZW5kaWYKLQkJCQkgICAgOworCQljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NfR19UVU5FUjoKQEAgLTE3MzAsMTkgKzE3MTksOCBAQAogCiAJCW1lbXNldCh0LDAsc2l6ZW9mKCp0KSk7CiAJCXN0cmNweSh0LT5uYW1lLCAiUmFkaW8iKTsKLSAgICAgICAgICAgICAgICB0LT5yYW5nZWxvdyAgPSAoaW50KSg2NSoxNik7Ci0gICAgICAgICAgICAgICAgdC0+cmFuZ2VoaWdoID0gKGludCkoMTA4KjE2KTsKIAotI2lmZGVmIFY0TDJfSTJDX0NMSUVOVFMKIAkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGRldi0+Y29yZSxWSURJT0NfR19UVU5FUix0KTsKLSNlbHNlCi0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciB2dDsKLQkJCW1lbXNldCgmdnQsMCxzaXplb2YodnQpKTsKLQkJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhkZXYsVklESU9DR1RVTkVSLCZ2dCk7Ci0JCQl0LT5zaWduYWwgPSB2dC5zaWduYWw7Ci0JCX0KLSNlbmRpZgogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgpAQCAtMTc3NSw4ICsxNzUzLDI5IEBACiAJCSppZCA9IDA7CiAJCXJldHVybiAwOwogCX0KLQljYXNlIFZJRElPQ19TX0FVRElPOgorCWNhc2UgVklESU9DU1RVTkVSOgorCXsKKwkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOworCisJCWlmICh2LT50dW5lcikgLyogT25seSB0dW5lciAwICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoZGV2LT5jb3JlLFZJRElPQ1NUVU5FUix2KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwl9CiAJY2FzZSBWSURJT0NfU19UVU5FUjoKKwl7CisJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOworCisJCWlmICgwICE9IHQtPmluZGV4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGRldi0+Y29yZSxWSURJT0NfU19UVU5FUix0KTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19TX0FVRElPOgogCWNhc2UgVklESU9DX1NfSU5QVVQ6CiAJY2FzZSBWSURJT0NfU19TVEQ6CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggODY3ZTk4OC4uYmM1ZTAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICRJZDogY3g4OC5oLHYgMS42MiAyMDA1LzA2LzEyIDA0OjE5OjE5IG1jaGVoYWIgRXhwICQKKyAqICRJZDogY3g4OC5oLHYgMS42NyAyMDA1LzA3LzAxIDEyOjEwOjA3IG1rcnVma3kgRXhwICQKICAqCiAgKiB2NGwyIGRldmljZSBkcml2ZXIgZm9yIGN4MjM4OHggYmFzZWQgVFYgY2FyZHMKICAqCkBAIC01MSw4ICs1MSw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZGVmaW5lcyBhbmQgZW51bXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotI2RlZmluZSBWNEwyX0kyQ19DTElFTlRTIDEKLQogI2RlZmluZSBGT1JNQVRfRkxBR1NfUEFDS0VEICAgICAgIDB4MDEKICNkZWZpbmUgRk9STUFUX0ZMQUdTX1BMQU5BUiAgICAgICAweDAyCiAKQEAgLTE1OSw3ICsxNTcsNyBAQAogI2RlZmluZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVCAgICAgICAgICAgIDE0CiAjZGVmaW5lIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVDEgMTUKICNkZWZpbmUgQ1g4OF9CT0FSRF9LV09STERfTFRWODgzICAgICAgICAgICAxNgotI2RlZmluZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfM19HT0xEIDE3CisjZGVmaW5lIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8zX0dPTERfUSAgMTcKICNkZWZpbmUgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfRFZCX1QxICAgICAgICAxOAogI2RlZmluZSBDWDg4X0JPQVJEX0NPTkVYQU5UX0RWQl9UMSAgICAgICAgIDE5CiAjZGVmaW5lIENYODhfQk9BUkRfUFJPVklERU9fUFYyNTkgICAgICAgICAgMjAKQEAgLTE2NywxMCArMTY1LDEyIEBACiAjZGVmaW5lIENYODhfQk9BUkRfUENIRFRWX0hEMzAwMCAgICAgICAgICAgMjIKICNkZWZpbmUgQ1g4OF9CT0FSRF9ETlRWX0xJVkVfRFZCX1QgICAgICAgICAyMwogI2RlZmluZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9ST1NMWU4gICAgICAgIDI0Ci0jZGVmaW5lIENYODhfQk9BUkRfRElHSVRBTExPR0lDX01FQwkgICAgICAgMjUKKyNkZWZpbmUgQ1g4OF9CT0FSRF9ESUdJVEFMTE9HSUNfTUVDICAgICAgICAyNQogI2RlZmluZSBDWDg4X0JPQVJEX0lPREFUQV9HVkJDVFY3RSAgICAgICAgIDI2CiAjZGVmaW5lIENYODhfQk9BUkRfUElYRUxWSUVXX1BMQVlUVl9VTFRSQV9QUk8gMjcKICNkZWZpbmUgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzNfR09MRF9UICAyOAorI2RlZmluZSBDWDg4X0JPQVJEX0FEU1RFQ0hfRFZCX1RfUENJICAgICAgICAgIDI5CisjZGVmaW5lIENYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8xNDAwX0RWQl9UMSAgMzAKIAogZW51bSBjeDg4X2l0eXBlIHsKIAlDWDg4X1ZNVVhfQ09NUE9TSVRFMSA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IDhiNjIzMjcuLmZmYmU2ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0xMzYzLDE5ICsxMzYzLDcgQEAKIAl1MzIgZGV2aWNlX3N0YXRlOwogCU1QVF9BREFQVEVSICppb2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlzd2l0Y2goc3RhdGUpCi0JewotCQljYXNlIDE6IC8qIFMxICovCi0JCQlkZXZpY2Vfc3RhdGU9MTsgLyogRDEgKi87Ci0JCQlicmVhazsKLQkJY2FzZSAzOiAvKiBTMyAqLwotCQljYXNlIDQ6IC8qIFM0ICovCi0JCQlkZXZpY2Vfc3RhdGU9MzsgLyogRDMgKi87Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUFHQUlOIC8qRklYTUUqLzsKLQkJCWJyZWFrOwotCX0KKwlkZXZpY2Vfc3RhdGU9cGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSk7CiAKIAlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVAogCSJwY2ktc3VzcGVuZDogcGRldj0weCVwLCBzbG90PSVzLCBFbnRlcmluZyBvcGVyYXRpbmcgc3RhdGUgW0QlZF1cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKaW5kZXggNWVhODliZi4uZGViYjhhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaApAQCAtODQsNyArODQsNyBAQAogZXh0ZXJuIHZvaWQgbXB0c2NzaWhfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICopOwogZXh0ZXJuIHZvaWQgbXB0c2NzaWhfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKik7CiAjaWZkZWYgQ09ORklHX1BNCi1leHRlcm4gaW50IG1wdHNjc2loX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzdGF0ZSk7CitleHRlcm4gaW50IG1wdHNjc2loX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBleHRlcm4gaW50IG1wdHNjc2loX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAjZW5kaWYKIGV4dGVybiBpbnQgbXB0c2NzaWhfcHJvY19pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCBmdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vY29uZmlnLW9zbS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9jb25maWctb3NtLmMKaW5kZXggZDAyNjc2MC4uZmUyZTdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9jb25maWctb3NtLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9jb25maWctb3NtLmMKQEAgLTE1LDcgKzE1LDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyby5oPgorI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCmluZGV4IGMyNjU1YTguLmZmN2M1MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtODAwLDExICs3OTksNiBAQAogCiAJLyogUmVnaXN0ZXIgd2l0aCBDYXJkIFNlcnZpY2VzICovCiAJY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQkJQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLQljbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmcGNtY2lhbXRkX2V2ZW50OwogCWNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKIAljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogCURFQlVHKDIsICJDYWxsaW5nIFJlZ2lzdGVyQ2xpZW50Iik7CkBAIC04NTAsNiArODQ0LDcgQEAKIAkJLm5hbWUJPSAicGNtY2lhbXRkIgogCX0sCiAJLmF0dGFjaAkJPSBwY21jaWFtdGRfYXR0YWNoLAorCS5ldmVudAkJPSBwY21jaWFtdGRfZXZlbnQsCiAJLmRldGFjaAkJPSBwY21jaWFtdGRfZGV0YWNoLAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUJPSBwY21jaWFtdGRfaWRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm1hYy5jIGIvZHJpdmVycy9uZXQvYm1hYy5jCmluZGV4IDAwZTUyNTcuLjhkYzY1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JtYWMuYworKysgYi9kcml2ZXJzL25ldC9ibWFjLmMKQEAgLTEyNjEsNyArMTI2MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgYm1hY19wcm9iZShzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfbWF0Y2ggKm1hdGNoKQorc3RhdGljIGludCBfX2RldmluaXQgYm1hY19wcm9iZShzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlpbnQgaiwgcmV2LCByZXQ7CiAJc3RydWN0IGJtYWNfZGF0YSAqYnA7CkBAIC0xNjQ1LDE2ICsxNjQ1LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfbWF0Y2ggYm1hY19tYXRjaFtdID0gCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBibWFjX21hdGNoW10gPSAKIHsKIAl7CiAJLm5hbWUgCQk9ICJibWFjIiwKLQkudHlwZQkJPSBPRl9BTllfTUFUQ0gsCi0JLmNvbXBhdGlibGUJPSBPRl9BTllfTUFUQ0gsCiAJLmRhdGEJCT0gKHZvaWQgKikwLAogCX0sCiAJewotCS5uYW1lIAkJPSBPRl9BTllfTUFUQ0gsCiAJLnR5cGUJCT0gIm5ldHdvcmsiLAogCS5jb21wYXRpYmxlCT0gImJtYWMrIiwKIAkuZGF0YQkJPSAodm9pZCAqKTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCmluZGV4IGVjZTFiMWExLi5jMjdlNDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJCXNjYy0+dHhfYnVmZiA9IE5VTEw7CiAJfQogCQotCXdoaWxlIChza2JfcXVldWVfbGVuKCZzY2MtPnR4X3F1ZXVlKSkKKwl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmc2NjLT50eF9xdWV1ZSkpCiAJCWRldl9rZnJlZV9za2Ioc2tiX2RlcXVldWUoJnNjYy0+dHhfcXVldWUpKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTEyNiw4ICsxMTI2LDcgQEAKIAkKIAlpZiAoc2NjLT5zdGF0LnR4X3N0YXRlID09IFRYU19XQUlUKQkvKiBtYXhrZXl1cCBvciBpZGxlIHRpbWVvdXQgKi8KIAl7Ci0JCWlmIChza2JfcXVldWVfbGVuKCZzY2MtPnR4X3F1ZXVlKSA9PSAwKQkvKiBub3RoaW5nIHRvIHNlbmQgKi8KLQkJeworCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzY2MtPnR4X3F1ZXVlKSkgewkvKiBub3RoaW5nIHRvIHNlbmQgKi8KIAkJCXNjYy0+c3RhdC50eF9zdGF0ZSA9IFRYU19JRExFOwogCQkJbmV0aWZfd2FrZV9xdWV1ZShzY2MtPmRldik7CS8qIHRfbWF4a2V5dXAgbG9ja2VkIGl0LiAqLwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjZS5jIGIvZHJpdmVycy9uZXQvbWFjZS5jCmluZGV4IDZlZDJkN2QuLjgxZDBhMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2UuYworKysgYi9kcml2ZXJzL25ldC9tYWNlLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG1hY2VfcHJvYmUoc3RydWN0IG1hY2lvX2RldiAqbWRldiwgY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1hY2VfcHJvYmUoc3RydWN0IG1hY2lvX2RldiAqbWRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICptYWNlID0gbWFjaW9fZ2V0X29mX25vZGUobWRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEwMDksMTIgKzEwMDksMTAgQEAKICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfbWF0Y2ggbWFjZV9tYXRjaFtdID0gCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtYWNlX21hdGNoW10gPSAKIHsKIAl7CiAJLm5hbWUgCQk9ICJtYWNlIiwKLQkudHlwZQkJPSBPRl9BTllfTUFUQ0gsCi0JLmNvbXBhdGlibGUJPSBPRl9BTllfTUFUQ0gKIAl9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKaW5kZXggZjBmYzA0YmQuLjcxZmQ0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC04Niw3ICs4Niw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0zMTIsMTEgKzMxMSw2IEBACiAJbGluay0+bmV4dCA9IGRldl9saXN0OwogCWRldl9saXN0ID0gbGluazsKIAljbGllbnRfcmVnLmRldl9pbmZvID0gJmRldl9pbmZvOwotCWNsaWVudF9yZWcuRXZlbnRNYXNrID0KLQkJQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCQkJQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQkJCQlDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOwotCWNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9ICZ0YzU3NF9ldmVudDsKIAljbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAJY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKIAlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTEyOTksNiArMTI5Myw3IEBACiAJCS5uYW1lCT0gIjNjNTc0X2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gdGM1NzRfYXR0YWNoLAorCS5ldmVudAkJPSB0YzU3NF9ldmVudCwKIAkuZGV0YWNoCQk9IHRjNTc0X2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSB0YzU3NF9pZHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwppbmRleCA4ZmExYjVmLi5kODNmZGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0yMjYsMTEgKzIyNSw2IEBACiAgICAgbGluay0+bmV4dCA9IGRldl9saXN0OwogICAgIGRldl9saXN0ID0gbGluazsKICAgICBjbGllbnRfcmVnLmRldl9pbmZvID0gJmRldl9pbmZvOwotICAgIGNsaWVudF9yZWcuRXZlbnRNYXNrID0KLQlDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0JQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQlDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOwotICAgIGNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9ICZ0YzU4OV9ldmVudDsKICAgICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgICAgY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKICAgICByZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTEwNzQsNiArMTA2OCw3IEBACiAJCS5uYW1lCT0gIjNjNTg5X2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gdGM1ODlfYXR0YWNoLAorCS5ldmVudAkJPSB0YzU4OV9ldmVudCwKIAkuZGV0YWNoCQk9IHRjNTg5X2RldGFjaCwKICAgICAgICAgLmlkX3RhYmxlICAgICAgID0gdGM1ODlfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKaW5kZXggMjNjZTc3Yi4uOGJiNGU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlICIuLi84MzkwLmgiCiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTE4MSwxMSArMTgwLDYgQEAKICAgICBsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAgICAgZGV2X2xpc3QgPSBsaW5rOwogICAgIGNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0gICAgY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQlDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAotCUNTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0gICAgY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJmF4bmV0X2V2ZW50OwogICAgIGNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKICAgICBjbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogICAgIHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtODg0LDYgKzg3OCw3IEBACiAJCS5uYW1lCT0gImF4bmV0X2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gYXhuZXRfYXR0YWNoLAorCS5ldmVudAkJPSBheG5ldF9ldmVudCwKIAkuZGV0YWNoCQk9IGF4bmV0X2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBheG5ldF9pZHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYwppbmRleCA2OGQ1OGNjLi5iOTM1NWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2FyY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbTIwMDIwLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTIwMCwxMSArMTk5LDYgQEAKICAgICBsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAgICAgZGV2X2xpc3QgPSBsaW5rOwogICAgIGNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0gICAgY2xpZW50X3JlZy5FdmVudE1hc2sgPQotICAgICAgICBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0gICAgICAgIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0gICAgICAgIENTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0gICAgY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJmNvbTIwMDIwX2V2ZW50OwogICAgIGNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKICAgICBjbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogICAgIHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtNDk1LDYgKzQ4OSw3IEBACiAJCS5uYW1lCT0gImNvbTIwMDIwX2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gY29tMjAwMjBfYXR0YWNoLAorCS5ldmVudAkJPSBjb20yMDAyMF9ldmVudCwKIAkuZGV0YWNoCQk9IGNvbTIwMDIwX2RldGFjaCwKIAkuaWRfdGFibGUJPSBjb20yMDAyMF9pZHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKaW5kZXggOTE3YWRiYi4uOWQ4MTk3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtMjg4LDExICsyODcsNiBAQAogICAgIGxpbmstPm5leHQgPSBkZXZfbGlzdDsKICAgICBkZXZfbGlzdCA9IGxpbms7CiAgICAgY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLSAgICBjbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLSAgICBjbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmZm12ajE4eF9ldmVudDsKICAgICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgICAgY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKICAgICByZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTc5Nyw2ICs3OTEsNyBAQAogCQkubmFtZQk9ICJmbXZqMTh4X2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gZm12ajE4eF9hdHRhY2gsCisJLmV2ZW50CQk9IGZtdmoxOHhfZXZlbnQsCiAJLmRldGFjaAkJPSBmbXZqMTh4X2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBmbXZqMTh4X2lkcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCmluZGV4IGNmNmQwNzMuLmI2YzE0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCkBAIC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvdHJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pYm10ci5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0xOTAsMTEgKzE4OSw2IEBACiAgICAgbGluay0+bmV4dCA9IGRldl9saXN0OwogICAgIGRldl9saXN0ID0gbGluazsKICAgICBjbGllbnRfcmVnLmRldl9pbmZvID0gJmRldl9pbmZvOwotICAgIGNsaWVudF9yZWcuRXZlbnRNYXNrID0KLSAgICAgICAgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotICAgICAgICBDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAotICAgICAgICBDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOwotICAgIGNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9ICZpYm10cl9ldmVudDsKICAgICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgICAgY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKICAgICByZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTUyMSw2ICs1MTUsNyBAQAogCQkubmFtZQk9ICJpYm10cl9jcyIsCiAJfSwKIAkuYXR0YWNoCQk9IGlibXRyX2F0dGFjaCwKKwkuZXZlbnQJCT0gaWJtdHJfZXZlbnQsCiAJLmRldGFjaAkJPSBpYm10cl9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gaWJtdHJfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwppbmRleCBiODZlNzI1Li5kYmI5NDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCkBAIC0xNDYsNyArMTQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtNTAyLDExICs1MDEsNiBAQAogICAgIGxpbmstPm5leHQgPSBkZXZfbGlzdDsKICAgICBkZXZfbGlzdCA9IGxpbms7CiAgICAgY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLSAgICBjbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLSAgICBjbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmbm1jbGFuX2V2ZW50OwogICAgIGNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKICAgICBjbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogICAgIHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtMTY4OCw2ICsxNjgyLDcgQEAKIAkJLm5hbWUJPSAibm1jbGFuX2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gbm1jbGFuX2F0dGFjaCwKKwkuZXZlbnQJCT0gbm1jbGFuX2V2ZW50LAogCS5kZXRhY2gJCT0gbm1jbGFuX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBubWNsYW5faWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggODU1YTQ1ZC4uZTE2NjRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDwuLi9kcml2ZXJzL25ldC84MzkwLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTI3NiwxMSArMjc1LDYgQEAKICAgICBsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAgICAgZGV2X2xpc3QgPSBsaW5rOwogICAgIGNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0gICAgY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQlDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAotCUNTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0gICAgY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnBjbmV0X2V2ZW50OwogICAgIGNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKICAgICBjbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogICAgIHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtMTg0NCw2ICsxODM4LDcgQEAKIAkJLm5hbWUJPSAicGNuZXRfY3MiLAogCX0sCiAJLmF0dGFjaAkJPSBwY25ldF9hdHRhY2gsCisJLmV2ZW50CQk9IHBjbmV0X2V2ZW50LAogCS5kZXRhY2gJCT0gcGNuZXRfZGV0YWNoLAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUJPSBwY25ldF9pZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IGJjMDFjODguLmZiYzJmNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0zNzAsMTAgKzM2OSw2IEBACiAgICAgbGluay0+bmV4dCA9IGRldl9saXN0OwogICAgIGRldl9saXN0ID0gbGluazsKICAgICBjbGllbnRfcmVnLmRldl9pbmZvID0gJmRldl9pbmZvOwotICAgIGNsaWVudF9yZWcuRXZlbnRNYXNrID0gQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLSAgICBjbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmc21jOTFjOTJfZXZlbnQ7CiAgICAgY2xpZW50X3JlZy5WZXJzaW9uID0gMHgwMjEwOwogICAgIGNsaWVudF9yZWcuZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfZGF0YSA9IGxpbms7CiAgICAgcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX2NsaWVudCgmbGluay0+aGFuZGxlLCAmY2xpZW50X3JlZyk7CkBAIC0yMzY1LDYgKzIzNjAsNyBAQAogCQkubmFtZQk9ICJzbWM5MWM5Ml9jcyIsCiAJfSwKIAkuYXR0YWNoCQk9IHNtYzkxYzkyX2F0dGFjaCwKKwkuZXZlbnQJCT0gc21jOTFjOTJfZXZlbnQsCiAJLmRldGFjaAkJPSBzbWM5MWM5Ml9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gc21jOTFjOTJfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCmluZGV4IDBjZDIyNWUuLjlmMzNiYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwpAQCAtODEsNyArODEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC02MTksMTEgKzYxOCw2IEBACiAgICAgbGluay0+bmV4dCA9IGRldl9saXN0OwogICAgIGRldl9saXN0ID0gbGluazsKICAgICBjbGllbnRfcmVnLmRldl9pbmZvID0gJmRldl9pbmZvOwotICAgIGNsaWVudF9yZWcuRXZlbnRNYXNrID0KLQlDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0JQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQlDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOwotICAgIGNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9ICZ4aXJjMnBzX2V2ZW50OwogICAgIGNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKICAgICBjbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogICAgIGlmICgoZXJyID0gcGNtY2lhX3JlZ2lzdGVyX2NsaWVudCgmbGluay0+aGFuZGxlLCAmY2xpZW50X3JlZykpKSB7CkBAIC0yMDE2LDYgKzIwMTAsNyBAQAogCQkubmFtZQk9ICJ4aXJjMnBzX2NzIiwKIAl9LAogCS5hdHRhY2gJCT0geGlyYzJwc19hdHRhY2gsCisJLmV2ZW50CQk9IHhpcmMycHNfZXZlbnQsCiAJLmRldGFjaAkJPSB4aXJjMnBzX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSB4aXJjMnBzX2lkcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCmluZGV4IDVlNDhiOWEuLjU5ZTgxODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPnJlY3ZfbG9jaywgZmxhZ3MpOwogCXBwcF9hc3luY19pbnB1dChhcCwgYnVmLCBjZmxhZ3MsIGNvdW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+cmVjdl9sb2NrLCBmbGFncyk7Ci0JaWYgKHNrYl9xdWV1ZV9sZW4oJmFwLT5ycXVldWUpKQorCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhcC0+cnF1ZXVlKSkKIAkJdGFza2xldF9zY2hlZHVsZSgmYXAtPnRzayk7CiAJYXBfcHV0KGFwKTsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFRUWV9USFJPVFRMRUQsICZ0dHktPmZsYWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKaW5kZXggYWI3MjZhYi4uYTMyNjY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCkBAIC0xMjM3LDggKzEyMzcsOCBAQAogCQlwY2ggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjaGFubmVsLCBjbGlzdCk7CiAJCW5hdmFpbCArPSBwY2gtPmF2YWlsID0gKHBjaC0+Y2hhbiAhPSBOVUxMKTsKIAkJaWYgKHBjaC0+YXZhaWwpIHsKLQkJCWlmIChza2JfcXVldWVfbGVuKCZwY2gtPmZpbGUueHEpID09IDAKLQkJCSAgICB8fCAhcGNoLT5oYWRfZnJhZykgeworCQkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKSB8fAorCQkJICAgICFwY2gtPmhhZF9mcmFnKSB7CiAJCQkJcGNoLT5hdmFpbCA9IDI7CiAJCQkJKytuZnJlZTsKIAkJCX0KQEAgLTEzNzQsOCArMTM3NCw4IEBACiAKIAkJLyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqLwogCQljaGFuID0gcGNoLT5jaGFuOwotCQlpZiAoc2tiX3F1ZXVlX2xlbigmcGNoLT5maWxlLnhxKQotCQkgICAgfHwgIWNoYW4tPm9wcy0+c3RhcnRfeG1pdChjaGFuLCBmcmFnKSkKKwkJaWYgKCFza2JfcXVldWVfZW1wdHkoJnBjaC0+ZmlsZS54cSkgfHwKKwkJICAgICFjaGFuLT5vcHMtPnN0YXJ0X3htaXQoY2hhbiwgZnJhZykpCiAJCQlza2JfcXVldWVfdGFpbCgmcGNoLT5maWxlLnhxLCBmcmFnKTsKIAkJcGNoLT5oYWRfZnJhZyA9IDE7CiAJCXAgKz0gZmxlbjsKQEAgLTE0MTIsNyArMTQxMiw3IEBACiAKIAlzcGluX2xvY2tfYmgoJnBjaC0+ZG93bmwpOwogCWlmIChwY2gtPmNoYW4gIT0gMCkgewotCQl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcGNoLT5maWxlLnhxKSA+IDApIHsKKwkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJnBjaC0+ZmlsZS54cSkpIHsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZwY2gtPmZpbGUueHEpOwogCQkJaWYgKCFwY2gtPmNoYW4tPm9wcy0+c3RhcnRfeG1pdChwY2gtPmNoYW4sIHNrYikpIHsKIAkJCQkvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi8KQEAgLTE0MjYsNyArMTQyNiw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAkvKiBzZWUgaWYgdGhlcmUgaXMgYW55dGhpbmcgZnJvbSB0aGUgYXR0YWNoZWQgdW5pdCB0byBiZSBzZW50ICovCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnBjaC0+ZmlsZS54cSkgPT0gMCkgeworCWlmIChza2JfcXVldWVfZW1wdHkoJnBjaC0+ZmlsZS54cSkpIHsKIAkJcmVhZF9sb2NrX2JoKCZwY2gtPnVwbCk7CiAJCXBwcCA9IHBjaC0+cHBwOwogCQlpZiAocHBwICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYwppbmRleCBmZDlmNTAxLi40ZDUxYzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKQEAgLTQwNiw3ICs0MDYsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+cmVjdl9sb2NrLCBmbGFncyk7CiAJcHBwX3N5bmNfaW5wdXQoYXAsIGJ1ZiwgY2ZsYWdzLCBjb3VudCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPnJlY3ZfbG9jaywgZmxhZ3MpOwotCWlmIChza2JfcXVldWVfbGVuKCZhcC0+cnF1ZXVlKSkKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYXAtPnJxdWV1ZSkpCiAJCXRhc2tsZXRfc2NoZWR1bGUoJmFwLT50c2spOwogCXNwX3B1dChhcCk7CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChUVFlfVEhST1RUTEVELCAmdHR5LT5mbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCAzZGJiMWNiLi41Y2FjYzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0zMjU5LDcgKzMyNTksNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNrZ2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHN0YXRlKQorc3RhdGljIGludCBza2dlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBpLCB3b2wgPSAwOwpAQCAtMzI3OSw3ICszMjc5LDcgQEAKIAl9CiAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgc3RhdGUsIHdvbCk7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCB3b2wpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCAxZjU2NTU2Li4yNjA4ZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMzA3OSw3ICszMDc5LDkgQEAKIAlncC0+cGh5X21paS5kZXYgPSBkZXY7CiAJZ3AtPnBoeV9taWkubWRpb19yZWFkID0gX3BoeV9yZWFkOwogCWdwLT5waHlfbWlpLm1kaW9fd3JpdGUgPSBfcGh5X3dyaXRlOwotCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisJZ3AtPnBoeV9taWkucGxhdGZvcm1fZGF0YSA9IGdwLT5vZl9ub2RlOworI2VuZGlmCiAJLyogQnkgZGVmYXVsdCwgd2Ugc3RhcnQgd2l0aCBhdXRvbmVnICovCiAJZ3AtPndhbnRfYXV0b25lZyA9IDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYyBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYwppbmRleCAwZmNhNDE0Li5kM2RkYjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAic3VuZ2VtX3BoeS5oIgogCiAvKiBMaW5rIG1vZGVzIG9mIHRoZSBCQ001NDAwIFBIWSAqLwpAQCAtMjgxLDEwICsyODUsMTIgQEAKIHN0YXRpYyBpbnQgYmNtNTQyMV9pbml0KHN0cnVjdCBtaWlfcGh5KiBwaHkpCiB7CiAJdTE2IGRhdGE7Ci0JaW50IHJldjsKKwl1bnNpZ25lZCBpbnQgaWQ7CiAKLQlyZXYgPSBwaHlfcmVhZChwaHksIE1JSV9QSFlTSUQyKSAmIDB4MDAwZjsKLQlpZiAocmV2ID09IDApIHsKKwlpZCA9IChwaHlfcmVhZChwaHksIE1JSV9QSFlTSUQxKSA8PCAxNiB8IHBoeV9yZWFkKHBoeSwgTUlJX1BIWVNJRDIpKTsKKworCS8qIFJldmlzaW9uIDAgb2YgNTQyMSBuZWVkcyBzb21lIGZpeHVwcyAqLworCWlmIChpZCA9PSAweDAwMjA2MGUwKSB7CiAJCS8qIFRoaXMgaXMgYm9ycm93ZWQgZnJvbSBNYWNPUwogCQkgKi8KIAkJcGh5X3dyaXRlKHBoeSwgMHgxOCwgMHgxMDA3KTsKQEAgLTI5NywyMSArMzAzLDI4IEBACiAJCWRhdGEgPSBwaHlfcmVhZChwaHksIDB4MTUpOwogCQlwaHlfd3JpdGUocGh5LCAweDE1LCBkYXRhIHwgMHgwMjAwKTsKIAl9Ci0jaWYgMAotCS8qIFRoaXMgaGFzIHRvIGJlIHZlcmlmaWVkIGJlZm9yZSBJIGVuYWJsZSBpdCAqLwotCS8qIEVuYWJsZSBhdXRvbWF0aWMgbG93LXBvd2VyICovCi0JcGh5X3dyaXRlKHBoeSwgMHgxYywgMHg5MDAyKTsKLQlwaHlfd3JpdGUocGh5LCAweDFjLCAweGE4MjEpOwotCXBoeV93cml0ZShwaHksIDB4MWMsIDB4OTQxZCk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KIAotc3RhdGljIGludCBiY201NDIxazJfaW5pdChzdHJ1Y3QgbWlpX3BoeSogcGh5KQotewotCS8qIEluaXQgY29kZSBib3Jyb3dlZCBmcm9tIE9GICovCi0JcGh5X3dyaXRlKHBoeSwgNCwgMHgwMWUxKTsKLQlwaHlfd3JpdGUocGh5LCA5LCAweDAzMDApOworCS8qIFBpY2sgdXAgc29tZSBpbml0IGNvZGUgZnJvbSBPRiBmb3IgSzIgdmVyc2lvbiAqLworCWlmICgoaWQgJiAweGZmZmZmZmYwKSA9PSAweDAwMjA2MmUwKSB7CisJCXBoeV93cml0ZShwaHksIDQsIDB4MDFlMSk7CisJCXBoeV93cml0ZShwaHksIDksIDB4MDMwMCk7CisJfQorCisJLyogQ2hlY2sgaWYgd2UgY2FuIGVuYWJsZSBhdXRvbWF0aWMgbG93IHBvd2VyICovCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisJaWYgKHBoeS0+cGxhdGZvcm1fZGF0YSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZfZ2V0X3BhcmVudChwaHktPnBsYXRmb3JtX2RhdGEpOworCQlpbnQgY2FuX2xvd19wb3dlciA9IDE7CisJCWlmIChucCA9PSBOVUxMIHx8IGdldF9wcm9wZXJ0eShucCwgIm5vLWF1dG9sb3dwb3dlciIsIE5VTEwpKQorCQkJY2FuX2xvd19wb3dlciA9IDA7CisJCWlmIChjYW5fbG93X3Bvd2VyKSB7CisJCQkvKiBFbmFibGUgYXV0b21hdGljIGxvdy1wb3dlciAqLworCQkJcGh5X3dyaXRlKHBoeSwgMHgxYywgMHg5MDAyKTsKKwkJCXBoeV93cml0ZShwaHksIDB4MWMsIDB4YTgyMSk7CisJCQlwaHlfd3JpdGUocGh5LCAweDFjLCAweDk0MWQpOworCQl9CisJfQorI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NjIsNyArNzc1LDcgQEAKIAogLyogQnJvYWRjb20gQkNNIDU0MjEgYnVpbHQtaW4gSzIgKi8KIHN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgYmNtNTQyMWsyX3BoeV9vcHMgPSB7Ci0JLmluaXQJCT0gYmNtNTQyMWsyX2luaXQsCisJLmluaXQJCT0gYmNtNTQyMV9pbml0LAogCS5zdXNwZW5kCT0gYmNtNTQxMV9zdXNwZW5kLAogCS5zZXR1cF9hbmVnCT0gYmNtNTR4eF9zZXR1cF9hbmVnLAogCS5zZXR1cF9mb3JjZWQJPSBiY201NHh4X3NldHVwX2ZvcmNlZCwKQEAgLTc3OSw2ICs3OTIsMjUgQEAKIAkub3BzCQk9ICZiY201NDIxazJfcGh5X29wcwogfTsKIAorLyogQnJvYWRjb20gQkNNIDU0NjIgYnVpbHQtaW4gVmVzdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgYmNtNTQ2MlZfcGh5X29wcyA9IHsKKwkuaW5pdAkJPSBiY201NDIxX2luaXQsCisJLnN1c3BlbmQJPSBiY201NDExX3N1c3BlbmQsCisJLnNldHVwX2FuZWcJPSBiY201NHh4X3NldHVwX2FuZWcsCisJLnNldHVwX2ZvcmNlZAk9IGJjbTU0eHhfc2V0dXBfZm9yY2VkLAorCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLAorCS5yZWFkX2xpbmsJPSBiY201NHh4X3JlYWRfbGluaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9kZWYgYmNtNTQ2MlZfcGh5X2RlZiA9IHsKKwkucGh5X2lkCQk9IDB4MDAyMDYwZDAsCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiQkNNNTQ2Mi1WZXN0YSIsCisJLmZlYXR1cmVzCT0gTUlJX0dCSVRfRkVBVFVSRVMsCisJLm1hZ2ljX2FuZWcJPSAxLAorCS5vcHMJCT0gJmJjbTU0NjJWX3BoeV9vcHMKK307CisKIC8qIE1hcnZlbGwgODhFMTEwMSAoQXBwbGUgc2VlbSB0byBkZWFsIHdpdGggMiBkaWZmZXJlbnQgcmV2cywKICAqIEkgbWFza2VkIG91dCB0aGUgOCBsYXN0IGJpdHMgdG8gZ2V0IGJvdGgsIGJ1dCBzb21lIHNwZWNzCiAgKiB3b3VsZCBiZSB1c2VmdWwgaGVyZSkgLS1CZW5ILgpAQCAtODI0LDYgKzg1Niw3IEBACiAJJmJjbTU0MTFfcGh5X2RlZiwKIAkmYmNtNTQyMV9waHlfZGVmLAogCSZiY201NDIxazJfcGh5X2RlZiwKKwkmYmNtNTQ2MlZfcGh5X2RlZiwKIAkmbWFydmVsbF9waHlfZGVmLAogCSZnZW5taWlfcGh5X2RlZiwKIAlOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmggYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmgKaW5kZXggODIyY2I1OC4uNDMwNTQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuaApAQCAtNDMsOSArNDMsMTAgQEAKIAlpbnQJCQlwYXVzZTsKIAogCS8qIFByb3ZpZGVkIGJ5IGhvc3QgY2hpcCAqLwotCXN0cnVjdCBuZXRfZGV2aWNlKglkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKIAlpbnQgKCptZGlvX3JlYWQpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbWlpX2lkLCBpbnQgcmVnKTsKIAl2b2lkICgqbWRpb193cml0ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtaWlfaWQsIGludCByZWcsIGludCB2YWwpOworCXZvaWQJCQkqcGxhdGZvcm1fZGF0YTsKIH07CiAKIC8qIFBhc3MgaW4gYSBzdHJ1Y3QgbWlpX3BoeSB3aXRoIGRldiwgbWRpb19yZWFkIGFuZCBtZGlvX3dyaXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDdiZmVlMzYuLmVmZmFiMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAogCXBvbGxfd2FpdChmaWxlLCAmdHVuLT5yZWFkX3dhaXQsIHdhaXQpOwogIAotCWlmIChza2JfcXVldWVfbGVuKCZ0dW4tPnJlYWRxKSkKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmdHVuLT5yZWFkcSkpCiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIAogCXJldHVybiBtYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IDBiNWNhMjUuLmVjZmE2ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTE5MDYsOSArMTkwNiw5IEBACiAJICovCiAJbmV0aWZfY2Fycmllcl9vZmYodHAtPmRldik7CiAKLQlwY2lfZW5hYmxlX3dha2UodHAtPnBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCAxKTsKKwlwY2lfZW5hYmxlX3dha2UodHAtPnBkZXYsIHN0YXRlLCAxKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcmV0dXJuIHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXJldHVybiBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHN0YXRlKTsKIH0KIAogc3RhdGljIGludApAQCAtMjI3NCw3ICsyMjc0LDcgQEAKIAkJZ290byBuZWVkX3Jlc3VtZTsKIAl9CiAKLQlpZih0eXBob29uX3NsZWVwKHRwLCBzdGF0ZSwgdHAtPndvbF9ldmVudHMpIDwgMCkgeworCWlmKHR5cGhvb25fc2xlZXAodHAsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCB0cC0+d29sX2V2ZW50cykgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBwdXQgY2FyZCB0byBzbGVlcFxuIiwgZGV2LT5uYW1lKTsKIAkJZ290byBuZWVkX3Jlc3VtZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggYzEyNjQ4ZC4uNDdmM2M1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtMjM3NCw3ICsyMzc0LDcgQEAKIAkvKgogCSAqIENsZWFuIG91dCB0eCBxdWV1ZQogCSAqLwotCWlmICh0ZXN0X2JpdChGTEFHX01QSSwgJmFpLT5mbGFncykgJiYgc2tiX3F1ZXVlX2xlbiAoJmFpLT50eHEpID4gMCkgeworCWlmICh0ZXN0X2JpdChGTEFHX01QSSwgJmFpLT5mbGFncykgJiYgIXNrYl9xdWV1ZV9lbXB0eSgmYWktPnR4cSkpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJCWZvciAoOyhza2IgPSBza2JfZGVxdWV1ZSgmYWktPnR4cSkpOykKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTMyODcsNyArMzI4Nyw3IEBACiAJCQkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQogCQkJCQlnZXRfdHhfZXJyb3IoYXByaXYsIC0xKTsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXByaXYtPmF1eF9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKHNrYl9xdWV1ZV9sZW4gKCZhcHJpdi0+dHhxKSkgeworCQkJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhcHJpdi0+dHhxKSkgewogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcHJpdi0+YXV4X2xvY2ssZmxhZ3MpOwogCQkJCQltcGlfc2VuZF9wYWNrZXQgKGRldik7CiAJCQkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwppbmRleCBmMTBhOTUyLi5iZjI1NTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtMjEwLDExICsyMDksNiBAQAogCWxpbmstPm5leHQgPSBkZXZfbGlzdDsKIAlkZXZfbGlzdCA9IGxpbms7CiAJY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQkJQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQkJQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLQljbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmYWlyb19ldmVudDsKIAljbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAJY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKIAlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTU3NCw2ICs1NjgsNyBAQAogCQkubmFtZQk9ICJhaXJvX2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gYWlyb19hdHRhY2gsCisJLmV2ZW50CQk9IGFpcm9fZXZlbnQsCiAJLmRldGFjaAkJPSBhaXJvX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBhaXJvX2lkcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJwb3J0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJwb3J0LmMKaW5kZXggYjRmNGJkNy4uOWQ0OTY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlycG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpcnBvcnQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWFpcnBvcnRfYXR0YWNoKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYsIGNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqbWF0Y2gpCithaXJwb3J0X2F0dGFjaChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0yNjYsMTYgKzI2NiwxNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBBcHBsZSBBaXJwb3J0IHdpcmVsZXNzIGNhcmQuIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfbWF0Y2ggYWlycG9ydF9tYXRjaFtdID0gCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhaXJwb3J0X21hdGNoW10gPSAKIHsKIAl7CiAJLm5hbWUgCQk9ICJyYWRpbyIsCi0JLnR5cGUJCT0gT0ZfQU5ZX01BVENILAotCS5jb21wYXRpYmxlCT0gT0ZfQU5ZX01BVENICiAJfSwKIAl7fSwKIH07CiAKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKG9mLCBhaXJwb3J0X21hdGNoKTsKKwogc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgYWlycG9ydF9kcml2ZXIgPSAKIHsKIAkubmFtZSAJCT0gRFJJVkVSX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwppbmRleCA4NjM3OWQ0Li5mZjAzMWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0yMTgsMTEgKzIxNyw2IEBACiAJbGluay0+bmV4dCA9IGRldl9saXN0OwogCWRldl9saXN0ID0gbGluazsKIAljbGllbnRfcmVnLmRldl9pbmZvID0gJmRldl9pbmZvOwotCWNsaWVudF9yZWcuRXZlbnRNYXNrID0KLQkJQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCQlDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAotCQlDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOwotCWNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9ICZhdG1lbF9ldmVudDsKIAljbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAJY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKIAlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTY2OCwxMiArNjYyLDEzIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgYXRtZWxfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIGF0bWVsX2RyaXZlciA9IHsKLSAgICAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0gICAgICAgIC5kcnYgICAgICAgICAgICA9IHsKLSAgICAgICAgICAgICAgICAubmFtZSAgID0gImF0bWVsX2NzIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmRydgkJPSB7CisJCS5uYW1lCT0gImF0bWVsX2NzIiwKICAgICAgICAgfSwKLSAgICAgICAgLmF0dGFjaCAgICAgICAgID0gYXRtZWxfYXR0YWNoLAotICAgICAgICAuZGV0YWNoICAgICAgICAgPSBhdG1lbF9kZXRhY2gsCisJLmF0dGFjaCAgICAgICAgID0gYXRtZWxfYXR0YWNoLAorCS5ldmVudAkJPSBhdG1lbF9ldmVudCwKKwkuZGV0YWNoCQk9IGF0bWVsX2RldGFjaCwKIAkuaWRfdGFibGUJPSBhdG1lbF9pZHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKaW5kZXggZTEyYmQ3NS4uNWY1MDdjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwpAQCAtNjIsNyArNjIsNiBAQAogI2VuZGlmCS8qIFdJUkVMRVNTX0VYVCA+IDEyICovCiAjZW5kaWYKIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtNDkxLDExICs0OTAsNiBAQAogICAgIGxpbmstPm5leHQgPSBkZXZfbGlzdDsKICAgICBkZXZfbGlzdCA9IGxpbms7CiAgICAgY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLSAgICBjbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLSAgICBjbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmbmV0d2F2ZV9ldmVudDsKICAgICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgICAgY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKICAgICByZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTE2ODAsNiArMTY3NCw3IEBACiAJCS5uYW1lCT0gIm5ldHdhdmVfY3MiLAogCX0sCiAJLmF0dGFjaAkJPSBuZXR3YXZlX2F0dGFjaCwKKwkuZXZlbnQJCT0gbmV0d2F2ZV9ldmVudCwKIAkuZGV0YWNoCQk9IG5ldHdhdmVfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IG5ldHdhdmVfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYwppbmRleCA1OTdjNDU4Li4zNjhkMmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0xODYsMTEgKzE4NSw2IEBACiAJZGV2X2xpc3QgPSBsaW5rOwogCiAJY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQkJQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQkJQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLQljbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmb3Jpbm9jb19jc19ldmVudDsKIAljbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7IC8qIEZJWE1FOiB3aGF0IGRvZXMgdGhpcyBtZWFuPyAqLwogCWNsaWVudF9yZWcuZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfZGF0YSA9IGxpbms7CiAKQEAgLTY2NCw2ICs2NTgsNyBAQAogCQkubmFtZQk9IERSSVZFUl9OQU1FLAogCX0sCiAJLmF0dGFjaAkJPSBvcmlub2NvX2NzX2F0dGFjaCwKKwkuZXZlbnQJCT0gb3Jpbm9jb19jc19ldmVudCwKIAkuZGV0YWNoCQk9IG9yaW5vY29fY3NfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IG9yaW5vY29fY3NfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggMzE2NTJhZi4uMGUwYmE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTM5MywxMSArMzkyLDYgQEAKICAgICBsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAgICAgZGV2X2xpc3QgPSBsaW5rOwogICAgIGNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0gICAgY2xpZW50X3JlZy5FdmVudE1hc2sgPQotICAgICAgICBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0gICAgICAgIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0gICAgICAgIENTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0gICAgY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnJheV9ldmVudDsKICAgICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgICAgY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKIApAQCAtMjkxNiw2ICsyOTEwLDcgQEAKIAkJLm5hbWUJPSAicmF5X2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gcmF5X2F0dGFjaCwKKwkuZXZlbnQJCT0gcmF5X2V2ZW50LAogCS5kZXRhY2gJCT0gcmF5X2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSByYXlfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwppbmRleCA4OTUzMmZkLi5mNjEzMGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCkBAIC00Njg0LDEyICs0Njg0LDYgQEAKIAogICAvKiBSZWdpc3RlciB3aXRoIENhcmQgU2VydmljZXMgKi8KICAgY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLSAgY2xpZW50X3JlZy5FdmVudE1hc2sgPSAKLSAgICBDU19FVkVOVF9SRUdJU1RSQVRJT05fQ09NUExFVEUgfAotICAgIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLSAgICBDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAotICAgIENTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0gIGNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9ICZ3YXZlbGFuX2V2ZW50OwogICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgIGNsaWVudF9yZWcuZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfZGF0YSA9IGxpbms7CiAKQEAgLTQ5MDQsNiArNDg5OCw3IEBACiAJCS5uYW1lCT0gIndhdmVsYW5fY3MiLAogCX0sCiAJLmF0dGFjaAkJPSB3YXZlbGFuX2F0dGFjaCwKKwkuZXZlbnQJCT0gd2F2ZWxhbl9ldmVudCwKIAkuZGV0YWNoCQk9IHdhdmVsYW5fZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IHdhdmVsYW5faWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKaW5kZXggZWEyZWY4ZC4uNjc3ZmY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKQEAgLTQ1Miw3ICs0NTIsNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KIAogLyogV2F2ZWxhbiBkZWNsYXJhdGlvbnMgKi8KICNpbmNsdWRlICJpODI1OTMuaCIJLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBJbnRlbCBjaGlwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IGUzYTkwMDQuLmRkOTAyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC00OSw3ICs0OSw2IEBACiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0yMDA1LDEzICsyMDA0LDYgQEAKIAlsaW5rLT5uZXh0CQkgPSB3bDM1MDFfZGV2X2xpc3Q7CiAJd2wzNTAxX2Rldl9saXN0CQkgPSBsaW5rOwogCWNsaWVudF9yZWcuZGV2X2luZm8JID0gJndsMzUwMV9kZXZfaW5mbzsKLQljbGllbnRfcmVnLkV2ZW50TWFzawkgPSBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8Ci0JCQkJICAgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfAotCQkJCSAgIENTX0VWRU5UX0NBUkRfUkVTRVQgfAotCQkJCSAgIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0JCQkJICAgQ1NfRVZFTlRfUE1fU1VTUEVORCB8Ci0JCQkJICAgQ1NfRVZFTlRfUE1fUkVTVU1FOwotCWNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9IHdsMzUwMV9ldmVudDsKIAljbGllbnRfcmVnLlZlcnNpb24JID0gMHgwMjEwOwogCWNsaWVudF9yZWcuZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfZGF0YSA9IGxpbms7CiAJcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX2NsaWVudCgmbGluay0+aGFuZGxlLCAmY2xpZW50X3JlZyk7CkBAIC0yMjQ2LDEyICsyMjM4LDEzIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgd2wzNTAxX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciB3bDM1MDFfZHJpdmVyID0gewotCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5kcnYgICAgICAgICAgICA9IHsKLQkJLm5hbWUgICA9ICJ3bDM1MDFfY3MiLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZHJ2CQk9IHsKKwkJLm5hbWUJPSAid2wzNTAxX2NzIiwKIAl9LAotCS5hdHRhY2ggICAgICAgICA9IHdsMzUwMV9hdHRhY2gsCi0JLmRldGFjaCAgICAgICAgID0gd2wzNTAxX2RldGFjaCwKKwkuYXR0YWNoCQk9IHdsMzUwMV9hdHRhY2gsCisJLmV2ZW50CQk9IHdsMzUwMV9ldmVudCwKKwkuZGV0YWNoCQk9IHdsMzUwMV9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gd2wzNTAxX2lkcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jCmluZGV4IGZmNDU2NjIuLjI0ZTZhYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYwpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJwb3J0X3BjLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTEzMywxMSArMTMyLDYgQEAKICAgICBsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAgICAgZGV2X2xpc3QgPSBsaW5rOwogICAgIGNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0gICAgY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQlDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAotCUNTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0gICAgY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnBhcnBvcnRfZXZlbnQ7CiAgICAgY2xpZW50X3JlZy5WZXJzaW9uID0gMHgwMjEwOwogICAgIGNsaWVudF9yZWcuZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfZGF0YSA9IGxpbms7CiAgICAgcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX2NsaWVudCgmbGluay0+aGFuZGxlLCAmY2xpZW50X3JlZyk7CkBAIC0zODYsNiArMzgwLDcgQEAKIAkJLm5hbWUJPSAicGFycG9ydF9jcyIsCiAJfSwKIAkuYXR0YWNoCQk9IHBhcnBvcnRfYXR0YWNoLAorCS5ldmVudAkJPSBwYXJwb3J0X2V2ZW50LAogCS5kZXRhY2gJCT0gcGFycG9ydF9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gcGFycG9ydF9pZHMsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZwppbmRleCAxYTRkNGNhLi45YzRhMzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnCkBAIC0xODcsOSArMTg3LDEwIEBACiAKIGNvbmZpZyBIT1RQTFVHX1BDSV9TR0kKIAl0cmlzdGF0ZSAiU0dJIFBDSSBIb3RwbHVnIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBIT1RQTFVHX1BDSSAmJiBJQTY0X1NHSV9TTjIKKwlkZXBlbmRzIG9uIEhPVFBMVUdfUENJICYmIChJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDKQogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gU0dJIElBNjQgQWx0aXggc3lzdGVtLgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFNHSSBBbHRpeCBIb3RwbHVnCisJICBEcml2ZXIgZm9yIFBDSSBkZXZpY2VzLgogCiAJICBXaGVuIGluIGRvdWJ0LCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvTWFrZWZpbGUKaW5kZXggM2U2MzJmZi4uMzFhMzA3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiBvYmotJChDT05GSUdfSE9UUExVR19QQ0lfU0hQQykJCSs9IHNocGNocC5vCiBvYmotJChDT05GSUdfSE9UUExVR19QQ0lfUlBBKQkJKz0gcnBhcGhwLm8KIG9iai0kKENPTkZJR19IT1RQTFVHX1BDSV9SUEFfRExQQVIpCSs9IHJwYWRscGFyX2lvLm8KK29iai0kKENPTkZJR19IT1RQTFVHX1BDSV9TR0kpCQkrPSBzZ2lfaG90cGx1Zy5vCiAKIHBjaV9ob3RwbHVnLW9ianMJOj0JcGNpX2hvdHBsdWdfY29yZS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2dpX2hvdHBsdWcuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2dpX2hvdHBsdWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjMwNDFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zZ2lfaG90cGx1Zy5jCkBAIC0wLDAgKzEsNjExIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHdvcmsgd2FzIGJhc2VkIG9uIHRoZSAyLjQvMi42IGtlcm5lbCBkZXZlbG9wbWVudCBieSBEaWNrIFJlaWduZXIuCisgKiBXb3JrIHRvIGFkZCBCSU9TIFBST00gc3VwcG9ydCB3YXMgY29tcGxldGVkIGJ5IE1pa2UgSGFiZWNrLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KKyNpbmNsdWRlIDxhc20vc24vbDEuaD4KKyNpbmNsdWRlIDxhc20vc24vbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3NuL3BjaWJyX3Byb3ZpZGVyLmg+CisjaW5jbHVkZSA8YXNtL3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmg+CisjaW5jbHVkZSA8YXNtL3NuL3BjaWRldi5oPgorI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KKyNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KKworI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgInBjaV9ob3RwbHVnLmgiCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlNHSSAocHJhcml0QHNnaS5jb20sIGRpY2tpZUBzZ2kuY29tLCBoYWJlY2tAc2dpLmNvbSkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU0dJIEFsdGl4IEhvdCBQbHVnIFBDSSBDb250cm9sbGVyIERyaXZlciIpOworCisjZGVmaW5lIFBDSUlPX0FTSUNfVFlQRV9USU9DQSAgICAgNAorI2RlZmluZSBQQ0lfU0xPVF9BTFJFQURZX1VQICAgICAgIDIgICAgIC8qIHNsb3QgYWxyZWFkeSB1cCAqLworI2RlZmluZSBQQ0lfU0xPVF9BTFJFQURZX0RPV04gICAgIDMgICAgIC8qIHNsb3QgYWxyZWFkeSBkb3duICovCisjZGVmaW5lIFBDSV9MMV9FUlIgICAgICAgICAgICAgICAgNyAgICAgLyogTDEgY29uc29sZSBjb21tYW5kIGVycm9yICovCisjZGVmaW5lIFBDSV9FTVBUWV8zM01IWiAgICAgICAgICAxNSAgICAgLyogZW1wdHkgMzMgTUh6IGJ1cyAqLworI2RlZmluZSBQQ0lfTDFfUVNJWkUgICAgICAgICAgICAxMjggICAgIC8qIG91ciBMMSBtZXNzYWdlIGJ1ZmZlciBzaXplICovCisjZGVmaW5lIFNOX01BWF9IUF9TTE9UUwkJIDMyCS8qIG1heCBudW1iZXIgb2YgaG90cGx1ZyBzbG90cyAqLworI2RlZmluZSBTR0lfSE9UUExVR19QUk9NX1JFVgkweDA0MjAgIC8qIE1pbi4gcmVxdWlyZWQgUFJPTSB2ZXJzaW9uICovCisKKy8qIGludGVybmFsIGxpc3QgaGVhZCAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgc25faHBfbGlzdDsKKworLyogaG90cGx1Z19zbG90IHN0cnVjdCdzIHByaXZhdGUgcG9pbnRlciAqLworc3RydWN0IHNsb3QgeworCWludCBkZXZpY2VfbnVtOworCXN0cnVjdCBwY2lfYnVzICpwY2lfYnVzOworCS8qIHRoaXMgc3RydWN0IGZvciBnbHVlIGludGVybmFsIG9ubHkgKi8KKwlzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3Q7CisJc3RydWN0IGxpc3RfaGVhZCBocF9saXN0OworfTsKKworc3RydWN0IHBjaWJyX3Nsb3RfZW5hYmxlX3Jlc3AgeworCWludCByZXNwX3N1Yl9lcnJubzsKKwljaGFyIHJlc3BfbDFfbXNnW1BDSV9MMV9RU0laRSArIDFdOworfTsKKworc3RydWN0IHBjaWJyX3Nsb3RfZGlzYWJsZV9yZXNwIHsKKwlpbnQgcmVzcF9zdWJfZXJybm87CisJY2hhciByZXNwX2wxX21zZ1tQQ0lfTDFfUVNJWkUgKyAxXTsKK307CisKK2VudW0gc25fcGNpX3JlcV9lIHsKKwlQQ0lfUkVRX1NMT1RfRUxJR0lCTEUsCisJUENJX1JFUV9TTE9UX0RJU0FCTEUKK307CisKK3N0YXRpYyBpbnQgZW5hYmxlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCk7CitzdGF0aWMgaW50IGRpc2FibGVfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90KTsKK3N0YXRpYyBpbnQgZ2V0X3Bvd2VyX3N0YXR1cyhzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOworCitzdGF0aWMgc3RydWN0IGhvdHBsdWdfc2xvdF9vcHMgc25faG90cGx1Z19zbG90X29wcyA9IHsKKwkub3duZXIgICAgICAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5lbmFibGVfc2xvdCAgICAgICAgICAgID0gZW5hYmxlX3Nsb3QsCisJLmRpc2FibGVfc2xvdCAgICAgICAgICAgPSBkaXNhYmxlX3Nsb3QsCisJLmdldF9wb3dlcl9zdGF0dXMgICAgICAgPSBnZXRfcG93ZXJfc3RhdHVzLAorfTsKKworc3RhdGljIERFQ0xBUkVfTVVURVgoc25faG90cGx1Z19zZW0pOworCitzdGF0aWMgaW50IHNuX3BjaV9zbG90X3ZhbGlkKHN0cnVjdCBwY2lfYnVzICpwY2lfYnVzLCBpbnQgZGV2aWNlKQoreworCXN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm87CisJaW50IGJyaWNrdHlwZTsKKwlpbnQgYnVzX251bTsKKworCXBjaWJ1c19pbmZvID0gU05fUENJQlVTX0JVU1NPRlRfSU5GTyhwY2lfYnVzKTsKKworCS8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgdmFsaWQgc2xvdCBvbiAncGNpX2J1cycgKi8KKwlpZiAoIShwY2lidXNfaW5mby0+cGJpX3ZhbGlkX2RldmljZXMgJiAoMSA8PCBkZXZpY2UpKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWJyaWNrdHlwZSA9IE1PRFVMRV9HRVRfQlRZUEUocGNpYnVzX2luZm8tPnBiaV9tb2R1bGVpZCk7CisJYnVzX251bSA9IHBjaWJ1c19pbmZvLT5wYmlfYnVzY29tbW9uLmJzX3BlcnNpc3RfYnVzbnVtICYgMHhmOworCisJLyogRG8gbm90IGFsbG93IGhvdHBsdWcgb3BlcmF0aW9ucyBvbiBiYXNlIEkvTyBjYXJkcyAqLworCWlmICgoYnJpY2t0eXBlID09IEwxX0JSSUNLVFlQRV9JWCB8fCAgYnJpY2t0eXBlID09IEwxX0JSSUNLVFlQRV9JQSkgJiYKKwkgICAgKGJ1c19udW0gPT0gMSAmJiBkZXZpY2UgIT0gMSkpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzbl9wY2lfYnVzX3ZhbGlkKHN0cnVjdCBwY2lfYnVzICpwY2lfYnVzKQoreworCXN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm87CisJaW50IGFzaWNfdHlwZTsKKwlpbnQgYnJpY2t0eXBlOworCisJcGNpYnVzX2luZm8gPSBTTl9QQ0lCVVNfQlVTU09GVF9JTkZPKHBjaV9idXMpOworCisJLyogRG9uJ3QgcmVnaXN0ZXIgc2xvdHMgaGFuZ2luZyBvZmYgdGhlIFRJT0NBIGJ1cyAqLworCWFzaWNfdHlwZSA9IHBjaWJ1c19pbmZvLT5wYmlfYnVzY29tbW9uLmJzX2FzaWNfdHlwZTsKKwlpZiAoYXNpY190eXBlID09IFBDSUlPX0FTSUNfVFlQRV9USU9DQSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIE9ubHkgcmVnaXN0ZXIgc2xvdHMgaW4gSS9PIEJyaWNrcyB0aGF0IHN1cHBvcnQgaG90cGx1ZyAqLworCWJyaWNrdHlwZSA9IE1PRFVMRV9HRVRfQlRZUEUocGNpYnVzX2luZm8tPnBiaV9tb2R1bGVpZCk7CisJc3dpdGNoIChicmlja3R5cGUpIHsKKwljYXNlIEwxX0JSSUNLVFlQRV9JWDoKKwljYXNlIEwxX0JSSUNLVFlQRV9QWDoKKwljYXNlIEwxX0JSSUNLVFlQRV9JQToKKwljYXNlIEwxX0JSSUNLVFlQRV9QQToKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRVBFUk07CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHNuX2hwX3Nsb3RfcHJpdmF0ZV9hbGxvYyhzdHJ1Y3QgaG90cGx1Z19zbG90ICpic3NfaG90cGx1Z19zbG90LAorCQkJCSAgICBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cywgaW50IGRldmljZSkKK3sKKwlzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvOworCXN0cnVjdCBzbG90ICpzbG90OworCisJcGNpYnVzX2luZm8gPSBTTl9QQ0lCVVNfQlVTU09GVF9JTkZPKHBjaV9idXMpOworCisJYnNzX2hvdHBsdWdfc2xvdC0+cHJpdmF0ZSA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzbG90KSwKKwkJCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghYnNzX2hvdHBsdWdfc2xvdC0+cHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2xvdCA9IChzdHJ1Y3Qgc2xvdCAqKWJzc19ob3RwbHVnX3Nsb3QtPnByaXZhdGU7CisKKwlic3NfaG90cGx1Z19zbG90LT5uYW1lID0ga21hbGxvYygzMywgR0ZQX0tFUk5FTCk7CisJaWYgKCFic3NfaG90cGx1Z19zbG90LT5uYW1lKSB7CisJCWtmcmVlKGJzc19ob3RwbHVnX3Nsb3QtPnByaXZhdGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzbG90LT5kZXZpY2VfbnVtID0gZGV2aWNlOworCXNsb3QtPnBjaV9idXMgPSBwY2lfYnVzOworCisJc3ByaW50Zihic3NfaG90cGx1Z19zbG90LT5uYW1lLCAibW9kdWxlXyVjJWMlYyVjJS4yZF9iXyVkX3NfJWQiLAorCQknMCcrUkFDS19HRVRfQ0xBU1MoTU9EVUxFX0dFVF9SQUNLKHBjaWJ1c19pbmZvLT5wYmlfbW9kdWxlaWQpKSwKKwkJJzAnK1JBQ0tfR0VUX0dST1VQKE1PRFVMRV9HRVRfUkFDSyhwY2lidXNfaW5mby0+cGJpX21vZHVsZWlkKSksCisJCScwJytSQUNLX0dFVF9OVU0oTU9EVUxFX0dFVF9SQUNLKHBjaWJ1c19pbmZvLT5wYmlfbW9kdWxlaWQpKSwKKwkJTU9EVUxFX0dFVF9CVENIQVIocGNpYnVzX2luZm8tPnBiaV9tb2R1bGVpZCksCisJCU1PRFVMRV9HRVRfQlBPUyhwY2lidXNfaW5mby0+cGJpX21vZHVsZWlkKSwKKwkJKChpbnQpcGNpYnVzX2luZm8tPnBiaV9idXNjb21tb24uYnNfcGVyc2lzdF9idXNudW0pICYgMHhmLAorCQlkZXZpY2UgKyAxKTsKKworCXNsb3QtPmhvdHBsdWdfc2xvdCA9IGJzc19ob3RwbHVnX3Nsb3Q7CisJbGlzdF9hZGQoJnNsb3QtPmhwX2xpc3QsICZzbl9ocF9saXN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGhvdHBsdWdfc2xvdCAqIHNuX2hwX2Rlc3Ryb3kodm9pZCkKK3sKKwlzdHJ1Y3Qgc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmJzc19ob3RwbHVnX3Nsb3QgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaChsaXN0LCAmc25faHBfbGlzdCkgeworCQlzbG90ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgc2xvdCwgaHBfbGlzdCk7CisJCWJzc19ob3RwbHVnX3Nsb3QgPSBzbG90LT5ob3RwbHVnX3Nsb3Q7CisJCWxpc3RfZGVsKCYoKHN0cnVjdCBzbG90ICopYnNzX2hvdHBsdWdfc2xvdC0+cHJpdmF0ZSktPgorCQkJIGhwX2xpc3QpOworCQlicmVhazsKKwl9CisJcmV0dXJuIGJzc19ob3RwbHVnX3Nsb3Q7Cit9CisKK3N0YXRpYyB2b2lkIHNuX2J1c19hbGxvY19kYXRhKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZTsKKwlzdHJ1Y3QgcGNpX2J1cyAqc3Vib3JkaW5hdGVfYnVzOworCXN0cnVjdCBwY2lfZGV2ICpjaGlsZDsKKworCXNuX3BjaV9maXh1cF9zbG90KGRldik7CisKKwkvKiBSZWN1cnNpdmVseSBzZXRzIHVwIHRoZSBzbl9pcnFfaW5mbyBzdHJ1Y3RzICovCisJaWYgKGRldi0+c3Vib3JkaW5hdGUpIHsKKwkJc3Vib3JkaW5hdGVfYnVzID0gZGV2LT5zdWJvcmRpbmF0ZTsKKwkJbGlzdF9mb3JfZWFjaChub2RlLCAmc3Vib3JkaW5hdGVfYnVzLT5kZXZpY2VzKSB7CisJCQljaGlsZCA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IHBjaV9kZXYsIGJ1c19saXN0KTsKKwkJCXNuX2J1c19hbGxvY19kYXRhKGNoaWxkKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc25fYnVzX2ZyZWVfZGF0YShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CisJc3RydWN0IHBjaV9idXMgKnN1Ym9yZGluYXRlX2J1czsKKwlzdHJ1Y3QgcGNpX2RldiAqY2hpbGQ7CisKKwkvKiBSZWN1cnNpdmVseSBjbGVhbiB1cCBzbl9pcnFfaW5mbyBzdHJ1Y3RzICovCisJaWYgKGRldi0+c3Vib3JkaW5hdGUpIHsKKwkJc3Vib3JkaW5hdGVfYnVzID0gZGV2LT5zdWJvcmRpbmF0ZTsKKwkJbGlzdF9mb3JfZWFjaChub2RlLCAmc3Vib3JkaW5hdGVfYnVzLT5kZXZpY2VzKSB7CisJCQljaGlsZCA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IHBjaV9kZXYsIGJ1c19saXN0KTsKKwkJCXNuX2J1c19mcmVlX2RhdGEoY2hpbGQpOworCQl9CisJfQorCXNuX3BjaV91bmZpeHVwX3Nsb3QoZGV2KTsKK30KKworc3RhdGljIHU4IHNuX3Bvd2VyX3N0YXR1c19nZXQoc3RydWN0IGhvdHBsdWdfc2xvdCAqYnNzX2hvdHBsdWdfc2xvdCkKK3sKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IChzdHJ1Y3Qgc2xvdCAqKWJzc19ob3RwbHVnX3Nsb3QtPnByaXZhdGU7CisJc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbzsKKwl1OCByZXR2YWw7CisKKwlwY2lidXNfaW5mbyA9IFNOX1BDSUJVU19CVVNTT0ZUX0lORk8oc2xvdC0+cGNpX2J1cyk7CisJcmV0dmFsID0gcGNpYnVzX2luZm8tPnBiaV9lbmFibGVkX2RldmljZXMgJiAoMSA8PCBzbG90LT5kZXZpY2VfbnVtKTsKKworCXJldHVybiByZXR2YWwgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgc25fc2xvdF9tYXJrX2VuYWJsZShzdHJ1Y3QgaG90cGx1Z19zbG90ICpic3NfaG90cGx1Z19zbG90LAorCQkJCWludCBkZXZpY2VfbnVtKQoreworCXN0cnVjdCBzbG90ICpzbG90ID0gKHN0cnVjdCBzbG90ICopYnNzX2hvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvOworCisJcGNpYnVzX2luZm8gPSBTTl9QQ0lCVVNfQlVTU09GVF9JTkZPKHNsb3QtPnBjaV9idXMpOworCXBjaWJ1c19pbmZvLT5wYmlfZW5hYmxlZF9kZXZpY2VzIHw9ICgxIDw8IGRldmljZV9udW0pOworfQorCitzdGF0aWMgdm9pZCBzbl9zbG90X21hcmtfZGlzYWJsZShzdHJ1Y3QgaG90cGx1Z19zbG90ICpic3NfaG90cGx1Z19zbG90LAorCQkJCSBpbnQgZGV2aWNlX251bSkKK3sKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IChzdHJ1Y3Qgc2xvdCAqKWJzc19ob3RwbHVnX3Nsb3QtPnByaXZhdGU7CisJc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbzsKKworCXBjaWJ1c19pbmZvID0gU05fUENJQlVTX0JVU1NPRlRfSU5GTyhzbG90LT5wY2lfYnVzKTsKKwlwY2lidXNfaW5mby0+cGJpX2VuYWJsZWRfZGV2aWNlcyAmPSB+KDEgPDwgZGV2aWNlX251bSk7Cit9CisKK3N0YXRpYyBpbnQgc25fc2xvdF9lbmFibGUoc3RydWN0IGhvdHBsdWdfc2xvdCAqYnNzX2hvdHBsdWdfc2xvdCwKKwkJCSAgaW50IGRldmljZV9udW0pCit7CisJc3RydWN0IHNsb3QgKnNsb3QgPSAoc3RydWN0IHNsb3QgKilic3NfaG90cGx1Z19zbG90LT5wcml2YXRlOworCXN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm87CisJc3RydWN0IHBjaWJyX3Nsb3RfZW5hYmxlX3Jlc3AgcmVzcDsKKwlpbnQgcmM7CisKKwlwY2lidXNfaW5mbyA9IFNOX1BDSUJVU19CVVNTT0ZUX0lORk8oc2xvdC0+cGNpX2J1cyk7CisKKwkvKgorCSAqIFBvd2VyLW9uIGFuZCBpbml0aWFsaXplIHRoZSBzbG90IGluIHRoZSBTTgorCSAqIFBDSSBpbmZyYXN0cnVjdHVyZS4KKwkgKi8KKwlyYyA9IHNhbF9wY2licl9zbG90X2VuYWJsZShwY2lidXNfaW5mbywgZGV2aWNlX251bSwgJnJlc3ApOworCisJaWYgKHJjID09IFBDSV9TTE9UX0FMUkVBRFlfVVApIHsKKwkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLCAiaXMgYWxyZWFkeSBhY3RpdmVcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChyYyA9PSBQQ0lfTDFfRVJSKSB7CisJCWRldl9kYmcoc2xvdC0+cGNpX2J1cy0+c2VsZiwKKwkJCSJMMSBmYWlsdXJlICVkIHdpdGggbWVzc2FnZTogJXMiLAorCQkJcmVzcC5yZXNwX3N1Yl9lcnJubywgcmVzcC5yZXNwX2wxX21zZyk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJaWYgKHJjKSB7CisJCWRldl9kYmcoc2xvdC0+cGNpX2J1cy0+c2VsZiwKKwkJCSJpbnNlcnQgZmFpbGVkIHdpdGggZXJyb3IgJWQgc3ViLWVycm9yICVkXG4iLAorCQkJcmMsIHJlc3AucmVzcF9zdWJfZXJybm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzbl9zbG90X21hcmtfZW5hYmxlKGJzc19ob3RwbHVnX3Nsb3QsIGRldmljZV9udW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25fc2xvdF9kaXNhYmxlKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmJzc19ob3RwbHVnX3Nsb3QsCisJCQkgICBpbnQgZGV2aWNlX251bSwgaW50IGFjdGlvbikKK3sKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IChzdHJ1Y3Qgc2xvdCAqKWJzc19ob3RwbHVnX3Nsb3QtPnByaXZhdGU7CisJc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbzsKKwlzdHJ1Y3QgcGNpYnJfc2xvdF9kaXNhYmxlX3Jlc3AgcmVzcDsKKwlpbnQgcmM7CisKKwlwY2lidXNfaW5mbyA9IFNOX1BDSUJVU19CVVNTT0ZUX0lORk8oc2xvdC0+cGNpX2J1cyk7CisKKwlyYyA9IHNhbF9wY2licl9zbG90X2Rpc2FibGUocGNpYnVzX2luZm8sIGRldmljZV9udW0sIGFjdGlvbiwgJnJlc3ApOworCisJaWYgKGFjdGlvbiA9PSBQQ0lfUkVRX1NMT1RfRUxJR0lCTEUgJiYgcmMgPT0gUENJX1NMT1RfQUxSRUFEWV9ET1dOKSB7CisJCWRldl9kYmcoc2xvdC0+cGNpX2J1cy0+c2VsZiwgIlNsb3QgJXMgYWxyZWFkeSBpbmFjdGl2ZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChhY3Rpb24gPT0gUENJX1JFUV9TTE9UX0VMSUdJQkxFICYmIHJjID09IFBDSV9FTVBUWV8zM01IWikgeworCQlkZXZfZGJnKHNsb3QtPnBjaV9idXMtPnNlbGYsCisJCQkiQ2Fubm90IHJlbW92ZSBsYXN0IDMzTUh6IGNhcmRcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChhY3Rpb24gPT0gUENJX1JFUV9TTE9UX0VMSUdJQkxFICYmIHJjID09IFBDSV9MMV9FUlIpIHsKKwkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLAorCQkJIkwxIGZhaWx1cmUgJWQgd2l0aCBtZXNzYWdlIFxuJXNcbiIsCisJCQlyZXNwLnJlc3Bfc3ViX2Vycm5vLCByZXNwLnJlc3BfbDFfbXNnKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZiAoYWN0aW9uID09IFBDSV9SRVFfU0xPVF9FTElHSUJMRSAmJiByYykgeworCQlkZXZfZGJnKHNsb3QtPnBjaV9idXMtPnNlbGYsCisJCQkicmVtb3ZlIGZhaWxlZCB3aXRoIGVycm9yICVkIHN1Yi1lcnJvciAlZFxuIiwKKwkJCXJjLCByZXNwLnJlc3Bfc3ViX2Vycm5vKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGFjdGlvbiA9PSBQQ0lfUkVRX1NMT1RfRUxJR0lCTEUgJiYgIXJjKQorCQlyZXR1cm4gMDsKKworCWlmIChhY3Rpb24gPT0gUENJX1JFUV9TTE9UX0RJU0FCTEUgJiYgIXJjKSB7CisJCXNuX3Nsb3RfbWFya19kaXNhYmxlKGJzc19ob3RwbHVnX3Nsb3QsIGRldmljZV9udW0pOworCQlkZXZfZGJnKHNsb3QtPnBjaV9idXMtPnNlbGYsICJyZW1vdmUgc3VjY2Vzc2Z1bFxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChhY3Rpb24gPT0gUENJX1JFUV9TTE9UX0RJU0FCTEUgJiYgcmMpIHsKKwkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLCJyZW1vdmUgZmFpbGVkIHJjID0gJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBlbmFibGVfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpic3NfaG90cGx1Z19zbG90KQoreworCXN0cnVjdCBzbG90ICpzbG90ID0gKHN0cnVjdCBzbG90ICopYnNzX2hvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcGNpX2J1cyAqbmV3X2J1cyA9IE5VTEw7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgZnVuYywgbnVtX2Z1bmNzOworCWludCBuZXdfcHBiID0gMDsKKwlpbnQgcmM7CisKKwkvKiBTZXJpYWxpemUgdGhlIExpbnV4IFBDSSBpbmZyYXN0cnVjdHVyZSAqLworCWRvd24oJnNuX2hvdHBsdWdfc2VtKTsKKworCS8qCisJICogUG93ZXItb24gYW5kIGluaXRpYWxpemUgdGhlIHNsb3QgaW4gdGhlIFNOCisJICogUENJIGluZnJhc3RydWN0dXJlLgorCSAqLworCXJjID0gc25fc2xvdF9lbmFibGUoYnNzX2hvdHBsdWdfc2xvdCwgc2xvdC0+ZGV2aWNlX251bSk7CisJaWYgKHJjKSB7CisJCXVwKCZzbl9ob3RwbHVnX3NlbSk7CisJCXJldHVybiByYzsKKwl9CisKKwludW1fZnVuY3MgPSBwY2lfc2Nhbl9zbG90KHNsb3QtPnBjaV9idXMsIFBDSV9ERVZGTihzbG90LT5kZXZpY2VfbnVtKzEsCisJCQkJCQkJICAgUENJX0ZVTkMoMCkpKTsKKwlpZiAoIW51bV9mdW5jcykgeworCQlkZXZfZGJnKHNsb3QtPnBjaV9idXMtPnNlbGYsICJubyBkZXZpY2UgaW4gc2xvdFxuIik7CisJCXVwKCZzbl9ob3RwbHVnX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNuX3BjaV9jb250cm9sbGVyX2ZpeHVwKHBjaV9kb21haW5fbnIoc2xvdC0+cGNpX2J1cyksCisJCQkJc2xvdC0+cGNpX2J1cy0+bnVtYmVyLAorCQkJCXNsb3QtPnBjaV9idXMpOworCS8qCisJICogTWFwIFNOIHJlc291cmNlcyBmb3IgYWxsIGZ1bmN0aW9ucyBvbiB0aGUgY2FyZAorCSAqIHRvIHRoZSBMaW51eCBQQ0kgaW50ZXJmYWNlIGFuZCB0ZWxsIHRoZSBkcml2ZXJzCisJICogYWJvdXQgdGhlbS4KKwkgKi8KKwlmb3IgKGZ1bmMgPSAwOyBmdW5jIDwgbnVtX2Z1bmNzOyAgZnVuYysrKSB7CisJCWRldiA9IHBjaV9nZXRfc2xvdChzbG90LT5wY2lfYnVzLAorCQkJCSAgIFBDSV9ERVZGTihzbG90LT5kZXZpY2VfbnVtICsgMSwKKwkJCQkJICAgICBQQ0lfRlVOQyhmdW5jKSkpOworCisKKwkJaWYgKGRldikgeworCQkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgeworCQkJCXVuc2lnbmVkIGNoYXIgc2VjX2J1czsKKwkJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9TRUNPTkRBUllfQlVTLAorCQkJCQkJICAgICAmc2VjX2J1cyk7CisJCQkJbmV3X2J1cyA9IHBjaV9hZGRfbmV3X2J1cyhkZXYtPmJ1cywgZGV2LAorCQkJCQkJCSAgc2VjX2J1cyk7CisJCQkJcGNpX3NjYW5fY2hpbGRfYnVzKG5ld19idXMpOworCQkJCXNuX3BjaV9jb250cm9sbGVyX2ZpeHVwKHBjaV9kb21haW5fbnIobmV3X2J1cyksCisJCQkJCQkJbmV3X2J1cy0+bnVtYmVyLAorCQkJCQkJCW5ld19idXMpOworCQkJCW5ld19wcGIgPSAxOworCQkJfQorCQkJc25fYnVzX2FsbG9jX2RhdGEoZGV2KTsKKwkJCXBjaV9kZXZfcHV0KGRldik7CisJCX0KKwl9CisKKwkvKiBDYWxsIHRoZSBkcml2ZXIgZm9yIHRoZSBuZXcgZGV2aWNlICovCisJcGNpX2J1c19hZGRfZGV2aWNlcyhzbG90LT5wY2lfYnVzKTsKKwkvKiBDYWxsIHRoZSBkcml2ZXJzIGZvciB0aGUgbmV3IGRldmljZXMgc3Vib3JkaW5hdGUgdG8gUFBCICovCisJaWYgKG5ld19wcGIpCisJCXBjaV9idXNfYWRkX2RldmljZXMobmV3X2J1cyk7CisKKwl1cCgmc25faG90cGx1Z19zZW0pOworCisJaWYgKHJjID09IDApCisJCWRldl9kYmcoc2xvdC0+cGNpX2J1cy0+c2VsZiwKKwkJCSJpbnNlcnQgb3BlcmF0aW9uIHN1Y2Nlc3NmdWxcbiIpOworCWVsc2UKKwkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLAorCQkJImluc2VydCBvcGVyYXRpb24gZmFpbGVkIHJjID0gJWRcbiIsIHJjKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBkaXNhYmxlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqYnNzX2hvdHBsdWdfc2xvdCkKK3sKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IChzdHJ1Y3Qgc2xvdCAqKWJzc19ob3RwbHVnX3Nsb3QtPnByaXZhdGU7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgZnVuYzsKKwlpbnQgcmM7CisKKwkvKiBBY3F1aXJlIHVwZGF0ZSBhY2Nlc3MgdG8gdGhlIGJ1cyAqLworCWRvd24oJnNuX2hvdHBsdWdfc2VtKTsKKworCS8qIGlzIGl0IG9rYXkgdG8gYnJpbmcgdGhpcyBzbG90IGRvd24/ICovCisJcmMgPSBzbl9zbG90X2Rpc2FibGUoYnNzX2hvdHBsdWdfc2xvdCwgc2xvdC0+ZGV2aWNlX251bSwKKwkJCSAgICAgUENJX1JFUV9TTE9UX0VMSUdJQkxFKTsKKwlpZiAocmMpCisJCWdvdG8gbGVhdmluZzsKKworCS8qIEZyZWUgdGhlIFNOIHJlc291cmNlcyBhc3NpZ25lZCB0byB0aGUgTGludXggZGV2aWNlLiovCisJZm9yIChmdW5jID0gMDsgZnVuYyA8IDg7ICBmdW5jKyspIHsKKwkJZGV2ID0gcGNpX2dldF9zbG90KHNsb3QtPnBjaV9idXMsCisJCQkJICAgUENJX0RFVkZOKHNsb3QtPmRldmljZV9udW0rMSwKKwkJCQkgICAJICAgICBQQ0lfRlVOQyhmdW5jKSkpOworCQlpZiAoZGV2KSB7CisJCQkvKgorCQkJICogU29tZSBkcml2ZXJzIG1heSB1c2UgZG1hIGFjY2Vzc2VzIGR1cmluZyB0aGUKKwkJCSAqIGRyaXZlciByZW1vdmUgZnVuY3Rpb24uIFdlIHJlbGVhc2UgdGhlIHN5c2RhdGEKKwkJCSAqIGFyZWFzIGFmdGVyIHRoZSBkcml2ZXIgcmVtb3ZlIGZ1bmN0aW9ucyBoYXZlCisJCQkgKiBiZWVuIGNhbGxlZC4KKwkJCSAqLworCQkJc25fYnVzX3N0b3JlX3N5c2RhdGEoZGV2KTsKKwkJCXNuX2J1c19mcmVlX2RhdGEoZGV2KTsKKwkJCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOworCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJfQorCX0KKworCS8qIGZyZWUgdGhlIGNvbGxlY3RlZCBzeXNkYXRhIHBvaW50ZXJzICovCisJc25fYnVzX2ZyZWVfc3lzZGF0YSgpOworCisJLyogRGVhY3RpdmF0ZSBzbG90ICovCisJcmMgPSBzbl9zbG90X2Rpc2FibGUoYnNzX2hvdHBsdWdfc2xvdCwgc2xvdC0+ZGV2aWNlX251bSwKKwkJCSAgICAgUENJX1JFUV9TTE9UX0RJU0FCTEUpOworIGxlYXZpbmc6CisJLyogUmVsZWFzZSB0aGUgYnVzIGxvY2sgKi8KKwl1cCgmc25faG90cGx1Z19zZW0pOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGdldF9wb3dlcl9zdGF0dXMoc3RydWN0IGhvdHBsdWdfc2xvdCAqYnNzX2hvdHBsdWdfc2xvdCwgdTggKnZhbHVlKQoreworCWRvd24oJnNuX2hvdHBsdWdfc2VtKTsKKwkqdmFsdWUgPSBzbl9wb3dlcl9zdGF0dXNfZ2V0KGJzc19ob3RwbHVnX3Nsb3QpOworCXVwKCZzbl9ob3RwbHVnX3NlbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuX3JlbGVhc2Vfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpic3NfaG90cGx1Z19zbG90KQoreworCWtmcmVlKGJzc19ob3RwbHVnX3Nsb3QtPmluZm8pOworCWtmcmVlKGJzc19ob3RwbHVnX3Nsb3QtPm5hbWUpOworCWtmcmVlKGJzc19ob3RwbHVnX3Nsb3QtPnByaXZhdGUpOworCWtmcmVlKGJzc19ob3RwbHVnX3Nsb3QpOworfQorCitzdGF0aWMgaW50IHNuX2hvdHBsdWdfc2xvdF9yZWdpc3RlcihzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cykKK3sKKwlpbnQgZGV2aWNlOworCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmJzc19ob3RwbHVnX3Nsb3Q7CisJaW50IHJjID0gMDsKKworCS8qCisJICogQ3VycmVudGx5IG9ubHkgZm91ciBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQsCisJICogaW4gdGhlIGZ1dHVyZSB0aGVyZSBtYXliZSBtb3JlIC0tIHVwIHRvIDMyLgorCSAqLworCisJZm9yIChkZXZpY2UgPSAwOyBkZXZpY2UgPCBTTl9NQVhfSFBfU0xPVFMgOyBkZXZpY2UrKykgeworCQlpZiAoc25fcGNpX3Nsb3RfdmFsaWQocGNpX2J1cywgZGV2aWNlKSAhPSAxKQorCQkJY29udGludWU7CisKKwkJYnNzX2hvdHBsdWdfc2xvdCA9IGtjYWxsb2MoMSxzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdCksCisJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoIWJzc19ob3RwbHVnX3Nsb3QpIHsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gYWxsb2NfZXJyOworCQl9CisKKwkJYnNzX2hvdHBsdWdfc2xvdC0+aW5mbyA9CisJCQlrY2FsbG9jKDEsc2l6ZW9mKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghYnNzX2hvdHBsdWdfc2xvdC0+aW5mbykgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBhbGxvY19lcnI7CisJCX0KKworCQlpZiAoc25faHBfc2xvdF9wcml2YXRlX2FsbG9jKGJzc19ob3RwbHVnX3Nsb3QsCisJCQkJCSAgICAgcGNpX2J1cywgZGV2aWNlKSkgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBhbGxvY19lcnI7CisJCX0KKworCQlic3NfaG90cGx1Z19zbG90LT5vcHMgPSAmc25faG90cGx1Z19zbG90X29wczsKKwkJYnNzX2hvdHBsdWdfc2xvdC0+cmVsZWFzZSA9ICZzbl9yZWxlYXNlX3Nsb3Q7CisKKwkJcmMgPSBwY2lfaHBfcmVnaXN0ZXIoYnNzX2hvdHBsdWdfc2xvdCk7CisJCWlmIChyYykKKwkJCWdvdG8gcmVnaXN0ZXJfZXJyOworCX0KKwlkZXZfZGJnKHBjaV9idXMtPnNlbGYsICJSZWdpc3RlcmVkIGJ1cyB3aXRoIGhvdHBsdWdcbiIpOworCXJldHVybiByYzsKKworcmVnaXN0ZXJfZXJyOgorCWRldl9kYmcocGNpX2J1cy0+c2VsZiwgImJ1cyBmYWlsZWQgdG8gcmVnaXN0ZXIgd2l0aCBlcnIgPSAlZFxuIiwKKwkgICAgICAgIHJjKTsKKworYWxsb2NfZXJyOgorCWlmIChyYyA9PSAtRU5PTUVNKQorCQlkZXZfZGJnKHBjaV9idXMtPnNlbGYsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisKKwkvKiBkZXN0cm95IFRISVMgZWxlbWVudCAqLworCWlmIChic3NfaG90cGx1Z19zbG90KQorCQlzbl9yZWxlYXNlX3Nsb3QoYnNzX2hvdHBsdWdfc2xvdCk7CisKKwkvKiBkZXN0cm95IGFueXRoaW5nIGVsc2Ugb24gdGhlIGxpc3QgKi8KKwl3aGlsZSAoKGJzc19ob3RwbHVnX3Nsb3QgPSBzbl9ocF9kZXN0cm95KCkpKQorCQlwY2lfaHBfZGVyZWdpc3Rlcihic3NfaG90cGx1Z19zbG90KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzbl9wY2lfaG90cGx1Z19pbml0KHZvaWQpCit7CisJc3RydWN0IHBjaV9idXMgKnBjaV9idXMgPSBOVUxMOworCWludCByYzsKKwlpbnQgcmVnaXN0ZXJlZCA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmc25faHBfbGlzdCk7CisKKwlpZiAoc25fc2FsX3JldigpIDwgU0dJX0hPVFBMVUdfUFJPTV9SRVYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogUFJPTSB2ZXJzaW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIDQuMDVcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCXdoaWxlICgocGNpX2J1cyA9IHBjaV9maW5kX25leHRfYnVzKHBjaV9idXMpKSkgeworCQlpZiAoIXBjaV9idXMtPnN5c2RhdGEpCisJCQljb250aW51ZTsKKworCQlyYyA9IHNuX3BjaV9idXNfdmFsaWQocGNpX2J1cyk7CisJCWlmIChyYyAhPSAxKSB7CisJCQlkZXZfZGJnKHBjaV9idXMtPnNlbGYsICJub3QgYSB2YWxpZCBob3RwbHVnIGJ1c1xuIik7CisJCQljb250aW51ZTsKKwkJfQorCQlkZXZfZGJnKHBjaV9idXMtPnNlbGYsICJ2YWxpZCBob3RwbHVnIGJ1c1xuIik7CisKKwkJcmMgPSBzbl9ob3RwbHVnX3Nsb3RfcmVnaXN0ZXIocGNpX2J1cyk7CisJCWlmICghcmMpCisJCQlyZWdpc3RlcmVkID0gMTsKKwkJZWxzZSB7CisJCQlyZWdpc3RlcmVkID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJlZ2lzdGVyZWQgPT0gMSA/IDAgOiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBzbl9wY2lfaG90cGx1Z19leGl0KHZvaWQpCit7CisJc3RydWN0IGhvdHBsdWdfc2xvdCAqYnNzX2hvdHBsdWdfc2xvdDsKKworCXdoaWxlICgoYnNzX2hvdHBsdWdfc2xvdCA9IHNuX2hwX2Rlc3Ryb3koKSkpIHsKKwkJcGNpX2hwX2RlcmVnaXN0ZXIoYnNzX2hvdHBsdWdfc2xvdCk7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZzbl9ocF9saXN0KSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW50ZXJuYWwgbGlzdCBpcyBub3QgZW1wdHlcbiIsIF9fRklMRV9fKTsKK30KKworbW9kdWxlX2luaXQoc25fcGNpX2hvdHBsdWdfaW5pdCk7Cittb2R1bGVfZXhpdChzbl9wY2lfaG90cGx1Z19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCBhYWM2ZGU5Li5lNDExNWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC0xNywxMyArMTcsMTMgQEAKICAqIER5bmFtaWMgZGV2aWNlIElEcyBhcmUgZGlzYWJsZWQgZm9yICFDT05GSUdfSE9UUExVRwogICovCiAKLSNpZmRlZiBDT05GSUdfSE9UUExVRwotCiBzdHJ1Y3QgcGNpX2R5bmlkIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJc3RydWN0IHBjaV9kZXZpY2VfaWQgaWQ7CiB9OwogCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKwogLyoqCiAgKiBzdG9yZV9uZXdfaWQKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwppbmRleCA0ZGI2OTk4Li4zOTNlMGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogc3RhdGljIGludCBzdXNwZW5kX2l0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgKnNlcnZpY2VfZHJpdmVyOwotCXUzMiBzdGF0ZSA9ICh1MzIpZGF0YTsKKwlwbV9tZXNzYWdlX3Qgc3RhdGUgPSAqIChwbV9tZXNzYWdlX3QgKikgZGF0YTsKIAogIAlpZiAoKGRldi0+YnVzID09ICZwY2llX3BvcnRfYnVzX3R5cGUpICYmCiAgCSAgICAoZGV2LT5kcml2ZXIpKSB7CkBAIC0zMzYsOSArMzM2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3RhdGUpCitpbnQgcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCAodm9pZCAqKXN0YXRlLCBzdXNwZW5kX2l0ZXIpOworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2LT5kZXYsICZzdGF0ZSwgc3VzcGVuZF9pdGVyKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwppbmRleCBhOTBhNTMzLi4wNWZhOTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guYworKysgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwpAQCAtMzc5LDYgKzM3OSw3IEBACiBFWFBPUlRfU1lNQk9MKHBjaV9kZXZfcHJlc2VudCk7CiAKIEVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfYnVzKTsKK0VYUE9SVF9TWU1CT0wocGNpX2ZpbmRfbmV4dF9idXMpOwogRVhQT1JUX1NZTUJPTChwY2lfZmluZF9kZXZpY2UpOwogRVhQT1JUX1NZTUJPTChwY2lfZmluZF9kZXZpY2VfcmV2ZXJzZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9maW5kX3Nsb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCBjMWJkZmI0Li45ZmU0OGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtNzQsNiArNzQsNyBAQAogCQlpZHggPSByZXMgLSAmbGlzdC0+ZGV2LT5yZXNvdXJjZVswXTsKIAkJaWYgKHBjaV9hc3NpZ25fcmVzb3VyY2UobGlzdC0+ZGV2LCBpZHgpKSB7CiAJCQlyZXMtPnN0YXJ0ID0gMDsKKwkJCXJlcy0+ZW5kID0gMDsKIAkJCXJlcy0+ZmxhZ3MgPSAwOwogCQl9CiAJCXRtcCA9IGxpc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCA1MmVhMzQ1Li42NDg1Zjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTEsOCArMSw1IEBACiAjCi0jIFBDTUNJQSBidXMgc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb24KLSMKLSMgUmlnaHQgbm93IHRoZSBub24tQ2FyZEJ1cyBjaG9pY2VzIGFyZSBub3Qgc3VwcG9ydGVkCi0jIGJ5IHRoZSBpbnRlZ3JhdGVkIGtlcm5lbCBkcml2ZXIuCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIGJ1cyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbgogIwogCiBtZW51ICJQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0IgpAQCAtMzIsNyArMjksNyBAQAogCiAJICBUaGUga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZToKIAkgICAgcGNtY2lhX2NvcmUucGNfZGVidWc9TgotCSAgICBkcy5wY19kZWJ1Zz1OCisJICAgIHBjbWNpYS5wY19kZWJ1Zz1OCiAJICAgIHNhMTF4eF9jb3JlLnBjX2RlYnVnPU4KIAogCSAgVGhlIG1vZHVsZSBvcHRpb24gaXMgY2FsbGVkIHBjX2RlYnVnPU4KQEAgLTczLDcgKzcwLDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBQQ01DSUFfSU9DVEwKLQlib29sCisJYm9vbCAiUENNQ0lBIGNvbnRyb2wgaW9jdGwgKG9ic29sZXRlKSIKIAlkZXBlbmRzIG9uIFBDTUNJQQogCWRlZmF1bHQgeQogCWhlbHAKQEAgLTgxLDkgKzc4LDggQEAKIAkgIHN1YnN5c3RlbSB3aWxsIGJlIGJ1aWx0LiBJdCBpcyBuZWVkZWQgYnkgY2FyZG1nciBhbmQgY2FyZGN0bAogCSAgKHBjbWNpYS1jcykgdG8gZnVuY3Rpb24gcHJvcGVybHkuCiAKLQkgIElmIHlvdSBkbyBub3QgdXNlIHRoZSBuZXcgcGNtY2lhdXRpbHMgcGFja2FnZSwgYW5kIGhhdmUgYQotCSAgeWVudGEsIENpcnJ1cyBQRDY3MjksIGk4MjA5MiwgaTgyMzY1IG9yIHRjaWMgY29tcGF0aWJsZSBicmlkZ2UsCi0JICB5b3UgbmVlZCB0byBzYXkgWSBoZXJlIHRvIGJlIGFibGUgdG8gdXNlIDE2LWJpdCBQQ01DSUEgY2FyZHMuCisJICBZb3Ugc2hvdWxkIHVzZSB0aGUgbmV3IHBjbWNpYXV0aWxzIHBhY2thZ2UgaW5zdGVhZCAoc2VlCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXM+IGZvciBsb2NhdGlvbiBhbmQgZGV0YWlscykuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKQEAgLTEwNiw3ICsxMDIsOCBAQAogCiBjb25maWcgWUVOVEEKIAl0cmlzdGF0ZSAiQ2FyZEJ1cyB5ZW50YS1jb21wYXRpYmxlIGJyaWRnZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ0FSREJVUworCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IENBUkRCVVMgaWYgIUVNQkVEREVECiAJc2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIENhcmRCdXMgaG9zdCBicmlkZ2VzLiAgVmlydHVhbGx5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAppbmRleCA0MTdiYzE1Li5kNTEyMmIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCkBAIC0yMiw3ICsyMiw2IEBACiAjZGVmaW5lIF9fQVNNX0FVMTAwMF9QQ01DSUFfSAogCiAvKiBpbmNsdWRlIHRoZSB3b3JsZCAqLwotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKaW5kZXggZGYxOWNlMS4uZDQxNGEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCmluZGV4IDFkZmM3NzYuLmYxMTNiNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwppbmRleCAzY2NiNTI0Li4xZDc1NWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgSU5fQ0FSRF9TRVJWSUNFUwotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jcy5jIGIvZHJpdmVycy9wY21jaWEvY3MuYwppbmRleCBlODI4NTlkLi5lMzkxNzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNkZWZpbmUgSU5fQ0FSRF9TRVJWSUNFUwotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CkBAIC0yMTYsNiArMjE1LDEzIEBACiAJbGlzdF9hZGRfdGFpbCgmc29ja2V0LT5zb2NrZXRfbGlzdCwgJnBjbWNpYV9zb2NrZXRfbGlzdCk7CiAJdXBfd3JpdGUoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7CiAKKyNpZm5kZWYgQ09ORklHX0NBUkRCVVMKKwkvKgorCSAqIElmIHdlIGRvIG5vdCBzdXBwb3J0IENhcmRidXMsIGVuc3VyZSB0aGF0CisJICogdGhlIENhcmRidXMgc29ja2V0IGNhcGFiaWxpdHkgaXMgZGlzYWJsZWQuCisJICovCisJc29ja2V0LT5mZWF0dXJlcyAmPSB+U1NfQ0FQX0NBUkRCVVM7CisjZW5kaWYKIAogCS8qIHNldCBwcm9wZXIgdmFsdWVzIGluIHNvY2tldC0+ZGV2ICovCiAJc29ja2V0LT5kZXYuY2xhc3NfZGF0YSA9IHNvY2tldDsKQEAgLTQ0OSwxMSArNDU1LDExIEBACiAJfQogCiAJaWYgKHN0YXR1cyAmIFNTX0NBUkRCVVMpIHsKKwkJaWYgKCEoc2t0LT5mZWF0dXJlcyAmIFNTX0NBUF9DQVJEQlVTKSkgeworCQkJY3NfZXJyKHNrdCwgImNhcmRidXMgY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwkJCXJldHVybiBDU19CQURfVFlQRTsKKwkJfQogCQlza3QtPnN0YXRlIHw9IFNPQ0tFVF9DQVJEQlVTOwotI2lmbmRlZiBDT05GSUdfQ0FSREJVUwotCQljc19lcnIoc2t0LCAiY2FyZGJ1cyBjYXJkcyBhcmUgbm90IHN1cHBvcnRlZC5cbiIpOwotCQlyZXR1cm4gQ1NfQkFEX1RZUEU7Ci0jZW5kaWYKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaCBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKaW5kZXggMGI0YzE4ZS4uNmJiZmJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCkBAIC05OSwyMyArOTksMTEgQEAKIAl9CiB9CiAKLSNkZWZpbmUgQ0hFQ0tfSEFORExFKGgpIFwKLSAgICAoKChoKSA9PSBOVUxMKSB8fCAoKGgpLT5jbGllbnRfbWFnaWMgIT0gQ0xJRU5UX01BR0lDKSkKLQogI2RlZmluZSBDSEVDS19TT0NLRVQocykgXAogICAgICgoKHMpID49IHNvY2tldHMpIHx8IChzb2NrZXRfdGFibGVbc10tPm9wcyA9PSBOVUxMKSkKIAotI2RlZmluZSBTT0NLRVQoaCkgKGgtPlNvY2tldCkKLSNkZWZpbmUgQ09ORklHKGgpICgmU09DS0VUKGgpLT5jb25maWdbKGgpLT5GdW5jdGlvbl0pCi0KLSNkZWZpbmUgQ0hFQ0tfUkVHSU9OKHIpIFwKLSAgICAoKChyKSA9PSBOVUxMKSB8fCAoKHIpLT5yZWdpb25fbWFnaWMgIT0gUkVHSU9OX01BR0lDKSkKLQotI2RlZmluZSBDSEVDS19FUkFTRVEocSkgXAotICAgICgoKHEpID09IE5VTEwpIHx8ICgocSktPmVyYXNlcV9tYWdpYyAhPSBFUkFTRVFfTUFHSUMpKQotCi0jZGVmaW5lIEVWRU5UKGgsIGUsIHApIFwKLSAgICAoKGgpLT5ldmVudF9oYW5kbGVyKChlKSwgKHApLCAmKGgpLT5ldmVudF9jYWxsYmFja19hcmdzKSkKKyNkZWZpbmUgU09DS0VUKGgpIChoLT5zb2NrZXQpCisjZGVmaW5lIENPTkZJRyhoKSAoJlNPQ0tFVChoKS0+Y29uZmlnWyhoKS0+ZnVuY10pCiAKIC8qIEluIGNhcmRidXMuYyAqLwogaW50IGNiX2FsbG9jKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2RzLmMgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCmluZGV4IGQ1YWZkNTUuLjNlM2M2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2RzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvZHMuYwpAQCAtMTU4LDE3ICsxNTgsMTUgQEAKIH07CiAKIAotc3RhdGljIGludCBwY21jaWFfcmVwb3J0X2Vycm9yKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGVycm9yX2luZm9fdCAqZXJyKQorc3RhdGljIGludCBwY21jaWFfcmVwb3J0X2Vycm9yKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgZXJyb3JfaW5mb190ICplcnIpCiB7CiAJaW50IGk7CiAJY2hhciAqc2VydjsKIAotCWlmIChDSEVDS19IQU5ETEUoaGFuZGxlKSkKKwlpZiAoIXBfZGV2KQogCQlwcmludGsoS0VSTl9OT1RJQ0UpOwotCWVsc2UgewotCQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBoYW5kbGVfdG9fcGRldihoYW5kbGUpOworCWVsc2UKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogIiwgcF9kZXYtPmRldi5idXNfaWQpOwotCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlcnZpY2VfdGFibGUpOyBpKyspCiAJCWlmIChzZXJ2aWNlX3RhYmxlW2ldLmtleSA9PSBlcnItPmZ1bmMpCkBAIC0xOTMsMTAgKzE5MSwxMCBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi12b2lkIGNzX2Vycm9yKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGludCBmdW5jLCBpbnQgcmV0KQordm9pZCBjc19lcnJvcihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGludCBmdW5jLCBpbnQgcmV0KQogewogCWVycm9yX2luZm9fdCBlcnIgPSB7IGZ1bmMsIHJldCB9OwotCXBjbWNpYV9yZXBvcnRfZXJyb3IoaGFuZGxlLCAmZXJyKTsKKwlwY21jaWFfcmVwb3J0X2Vycm9yKHBfZGV2LCAmZXJyKTsKIH0KIEVYUE9SVF9TWU1CT0woY3NfZXJyb3IpOwogCkBAIC0yMDcsNiArMjA1LDEwIEBACiAJdW5zaWduZWQgaW50IGk7CiAJdTMyIGhhc2g7CiAKKwlpZiAoIXBfZHJ2LT5hdHRhY2ggfHwgIXBfZHJ2LT5ldmVudCB8fCAhcF9kcnYtPmRldGFjaCkKKwkJcHJpbnRrKEtFUk5fREVCVUcgInBjbWNpYTogJXMgZG9lcyBtaXNzZXMgYSBjYWxsYmFjayBmdW5jdGlvbiIsCisJCSAgICAgICBwX2Rydi0+ZHJ2Lm5hbWUpOworCiAJd2hpbGUgKGRpZCAmJiBkaWQtPm1hdGNoX2ZsYWdzKSB7CiAJCWZvciAoaT0wOyBpPDQ7IGkrKykgewogCQkJaWYgKCFkaWQtPnByb2RfaWRbaV0pCkBAIC0zNzYsNyArMzc4LDcgQEAKIAogCWlmIChwX2Rydi0+YXR0YWNoKSB7CiAJCXBfZGV2LT5pbnN0YW5jZSA9IHBfZHJ2LT5hdHRhY2goKTsKLQkJaWYgKCghcF9kZXYtPmluc3RhbmNlKSB8fCAocF9kZXYtPmNsaWVudC5zdGF0ZSAmIENMSUVOVF9VTkJPVU5EKSkgeworCQlpZiAoKCFwX2Rldi0+aW5zdGFuY2UpIHx8IChwX2Rldi0+c3RhdGUgJiBDTElFTlRfVU5CT1VORCkpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiZHM6IHVuYWJsZSB0byBjcmVhdGUgaW5zdGFuY2UgIgogCQkJICAgICAgICJvZiAnJXMnIVxuIiwgcF9kcnYtPmRydi5uYW1lKTsKIAkJCXJldCA9IC1FSU5WQUw7CkBAIC01MTYsMTAgKzUxOCw3IEBACiAJc3ByaW50ZiAocF9kZXYtPmRldi5idXNfaWQsICIlZC4lZCIsIHBfZGV2LT5zb2NrZXQtPnNvY2ssIHBfZGV2LT5kZXZpY2Vfbm8pOwogCiAJLyogY29tcGF0ICovCi0JcF9kZXYtPmNsaWVudC5jbGllbnRfbWFnaWMgPSBDTElFTlRfTUFHSUM7Ci0JcF9kZXYtPmNsaWVudC5Tb2NrZXQgPSBzOwotCXBfZGV2LT5jbGllbnQuRnVuY3Rpb24gPSBmdW5jdGlvbjsKLQlwX2Rldi0+Y2xpZW50LnN0YXRlID0gQ0xJRU5UX1VOQk9VTkQ7CisJcF9kZXYtPnN0YXRlID0gQ0xJRU5UX1VOQk9VTkQ7CiAKIAkvKiBBZGQgdG8gdGhlIGxpc3QgaW4gcGNtY2lhX2J1c19zb2NrZXQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTU3Myw4ICs1NzIsNiBAQAogCWVsc2UKIAkJbm9fZnVuY3MgPSAxOwogCi0JLyogdGhpcyBkb2Vzbid0IGhhbmRsZSBtdWx0aWZ1bmN0aW9uIGRldmljZXMgb24gb25lIHBjbWNpYSBmdW5jdGlvbgotCSAqIHlldC4gKi8KIAlmb3IgKGk9MDsgaSA8IG5vX2Z1bmNzOyBpKyspCiAJCXBjbWNpYV9kZXZpY2VfYWRkKHMsIGkpOwogCkBAIC05MTQsNiArOTExLDcgQEAKIHN0YXRpYyBpbnQgc2VuZF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKiBfZGF0YSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CisJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwogCXN0cnVjdCBzZW5kX2V2ZW50X2RhdGEgKmRhdGEgPSBfZGF0YTsKIAogCS8qIHdlIGdldCBjYWxsZWQgZm9yIGFsbCBzb2NrZXRzLCBidXQgbWF5IG9ubHkgcGFzcyB0aGUgZXZlbnQKQEAgLTkyMSwxMSArOTE5LDE2IEBACiAJaWYgKHBfZGV2LT5zb2NrZXQgIT0gZGF0YS0+c2t0KQogCQlyZXR1cm4gMDsKIAotCWlmIChwX2Rldi0+Y2xpZW50LnN0YXRlICYgKENMSUVOVF9VTkJPVU5EfENMSUVOVF9TVEFMRSkpCisJcF9kcnYgPSB0b19wY21jaWFfZHJ2KHBfZGV2LT5kZXYuZHJpdmVyKTsKKwlpZiAoIXBfZHJ2KQogCQlyZXR1cm4gMDsKIAotCWlmIChwX2Rldi0+Y2xpZW50LkV2ZW50TWFzayAmIGRhdGEtPmV2ZW50KQotCQlyZXR1cm4gRVZFTlQoJnBfZGV2LT5jbGllbnQsIGRhdGEtPmV2ZW50LCBkYXRhLT5wcmlvcml0eSk7CisJaWYgKHBfZGV2LT5zdGF0ZSAmIChDTElFTlRfVU5CT1VORHxDTElFTlRfU1RBTEUpKQorCQlyZXR1cm4gMDsKKworCWlmIChwX2Rydi0+ZXZlbnQpCisJCXJldHVybiBwX2Rydi0+ZXZlbnQoZGF0YS0+ZXZlbnQsIGRhdGEtPnByaW9yaXR5LAorCQkJCSAgICAmcF9kZXYtPmV2ZW50X2NhbGxiYWNrX2FyZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05ODcsMTEgKzk5MCwxMSBAQAogCiAKIAotaW50IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoY2xpZW50X2hhbmRsZV90ICpoYW5kbGUsIGNsaWVudF9yZWdfdCAqcmVxKQoraW50IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKipoYW5kbGUsIGNsaWVudF9yZWdfdCAqcmVxKQogewotCWNsaWVudF90ICpjbGllbnQgPSBOVUxMOwogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gTlVMTDsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBOVUxMOworCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydiA9IE5VTEw7CiAKIAkvKiBMb29rIGZvciB1bmJvdW5kIGNsaWVudCB3aXRoIG1hdGNoaW5nIGRldl9pbmZvICovCiAJZG93bl9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwpAQCAtMTAwNiwxOCArMTAwOSwxNiBAQAogCQkJY29udGludWU7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKLQkJCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKIAkJCXBfZGV2ID0gcGNtY2lhX2dldF9kZXYocF9kZXYpOwogCQkJaWYgKCFwX2RldikKIAkJCQljb250aW51ZTsKLQkJCWlmICghKHBfZGV2LT5jbGllbnQuc3RhdGUgJiBDTElFTlRfVU5CT1VORCkgfHwKKwkJCWlmICghKHBfZGV2LT5zdGF0ZSAmIENMSUVOVF9VTkJPVU5EKSB8fAogCQkJICAgICghcF9kZXYtPmRldi5kcml2ZXIpKSB7CiAJCQkJcGNtY2lhX3B1dF9kZXYocF9kZXYpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJcF9kcnYgPSB0b19wY21jaWFfZHJ2KHBfZGV2LT5kZXYuZHJpdmVyKTsKIAkJCWlmICghc3RybmNtcChwX2Rydi0+ZHJ2Lm5hbWUsIChjaGFyICopcmVxLT5kZXZfaW5mbywgREVWX05BTUVfTEVOKSkgewotCQkJCWNsaWVudCA9ICZwX2Rldi0+Y2xpZW50OwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAJCQkJZ290byBmb3VuZDsKIAkJCX0KQEAgLTEwMjgsMjYgKzEwMjksMjAgQEAKIAl9CiAgZm91bmQ6CiAJdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQlpZiAoIXBfZGV2IHx8ICFjbGllbnQpCisJaWYgKCFwX2RldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwY21jaWFfcHV0X3NvY2tldChzKTsgLyogc2FmZSwgYXMgd2UgYWxyZWFkeSBob2xkIGEgcmVmZXJlbmNlIGZyb20gYmluZF9kZXZpY2UgKi8KIAotCSpoYW5kbGUgPSBjbGllbnQ7Ci0JY2xpZW50LT5zdGF0ZSAmPSB+Q0xJRU5UX1VOQk9VTkQ7Ci0JY2xpZW50LT5Tb2NrZXQgPSBzOwotCWNsaWVudC0+RXZlbnRNYXNrID0gcmVxLT5FdmVudE1hc2s7Ci0JY2xpZW50LT5ldmVudF9oYW5kbGVyID0gcmVxLT5ldmVudF9oYW5kbGVyOwotCWNsaWVudC0+ZXZlbnRfY2FsbGJhY2tfYXJncyA9IHJlcS0+ZXZlbnRfY2FsbGJhY2tfYXJnczsKLQljbGllbnQtPmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2hhbmRsZSA9IGNsaWVudDsKKwkqaGFuZGxlID0gcF9kZXY7CisJcF9kZXYtPnN0YXRlICY9IH5DTElFTlRfVU5CT1VORDsKKwlwX2Rldi0+ZXZlbnRfY2FsbGJhY2tfYXJncyA9IHJlcS0+ZXZlbnRfY2FsbGJhY2tfYXJnczsKKwlwX2Rldi0+ZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfaGFuZGxlID0gcF9kZXY7CiAKLQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKLQkJY2xpZW50LT5zdGF0ZSB8PSBDTElFTlRfQ0FSREJVUzsKIAotCWlmICgoIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgJiYgKHMtPmZ1bmN0aW9ucyA9PSAwKSAmJgotCSAgICAoY2xpZW50LT5GdW5jdGlvbiAhPSBCSU5EX0ZOX0FMTCkpIHsKKwlpZiAoIXMtPmZ1bmN0aW9ucykgewogCQljaXN0cGxfbG9uZ2xpbmtfbWZjX3QgbWZjOwotCQlpZiAocGNjYXJkX3JlYWRfdHVwbGUocywgY2xpZW50LT5GdW5jdGlvbiwgQ0lTVFBMX0xPTkdMSU5LX01GQywgJm1mYykKKwkJaWYgKHBjY2FyZF9yZWFkX3R1cGxlKHMsIHBfZGV2LT5mdW5jLCBDSVNUUExfTE9OR0xJTktfTUZDLCAmbWZjKQogCQkgICAgPT0gQ1NfU1VDQ0VTUykKIAkJCXMtPmZ1bmN0aW9ucyA9IG1mYy5uZm47CiAJCWVsc2UKQEAgLTEwNjAsMTMgKzEwNTUsMTMgQEAKIAl9CiAKIAlkc19kYmcoMSwgInJlZ2lzdGVyX2NsaWVudCgpOiBjbGllbnQgMHglcCwgZGV2ICVzXG4iLAotCSAgICAgICBjbGllbnQsIHBfZGV2LT5kZXYuYnVzX2lkKTsKLQlpZiAoY2xpZW50LT5FdmVudE1hc2sgJiBDU19FVkVOVF9SRUdJU1RSQVRJT05fQ09NUExFVEUpCi0JCUVWRU5UKGNsaWVudCwgQ1NfRVZFTlRfUkVHSVNUUkFUSU9OX0NPTVBMRVRFLCBDU19FVkVOVF9QUklfTE9XKTsKKwkgICAgICAgcF9kZXYsIHBfZGV2LT5kZXYuYnVzX2lkKTsKIAogCWlmICgocy0+c3RhdGUgJiAoU09DS0VUX1BSRVNFTlR8U09DS0VUX0NBUkRCVVMpKSA9PSBTT0NLRVRfUFJFU0VOVCkgewotCQlpZiAoY2xpZW50LT5FdmVudE1hc2sgJiBDU19FVkVOVF9DQVJEX0lOU0VSVElPTikKLQkJCUVWRU5UKGNsaWVudCwgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04sIENTX0VWRU5UX1BSSV9MT1cpOworCQlpZiAocF9kcnYtPmV2ZW50KQorCQkJcF9kcnYtPmV2ZW50KENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLCBDU19FVkVOVF9QUklfTE9XLAorCQkJCSAgICAgJnBfZGV2LT5ldmVudF9jYWxsYmFja19hcmdzKTsKKwogCX0KIAogCXJldHVybiBDU19TVUNDRVNTOwpAQCAtMTA5OSw3ICsxMDk0LDcgQEAKIAkJfQogCQlwX2RldiA9IGxpc3RfZW50cnkoKCZzLT5kZXZpY2VzX2xpc3QpLT5uZXh0LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSwgc29ja2V0X2RldmljZV9saXN0KTsKIAkJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwotCQlwX2Rldi0+Y2xpZW50LnN0YXRlIHw9IENMSUVOVF9TVEFMRTsKKwkJcF9kZXYtPnN0YXRlIHw9IENMSUVOVF9TVEFMRTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKIAogCQlkZXZpY2VfdW5yZWdpc3RlcigmcF9kZXYtPmRldik7CkBAIC0xMTA4LDMxICsxMTAzLDI1IEBACiAJcmV0dXJuIDA7CiB9IC8qIHVuYmluZF9yZXF1ZXN0ICovCiAKLWludCBwY21jaWFfZGVyZWdpc3Rlcl9jbGllbnQoY2xpZW50X2hhbmRsZV90IGhhbmRsZSkKK2ludCBwY21jaWFfZGVyZWdpc3Rlcl9jbGllbnQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogCWludCBpOwotCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IGhhbmRsZV90b19wZGV2KGhhbmRsZSk7CiAKLQlpZiAoQ0hFQ0tfSEFORExFKGhhbmRsZSkpCi0JCXJldHVybiBDU19CQURfSEFORExFOworCXMgPSBwX2Rldi0+c29ja2V0OworCWRzX2RiZygxLCAiZGVyZWdpc3Rlcl9jbGllbnQoJXApXG4iLCBwX2Rldik7CiAKLQlzID0gU09DS0VUKGhhbmRsZSk7Ci0JZHNfZGJnKDEsICJkZXJlZ2lzdGVyX2NsaWVudCglcClcbiIsIGhhbmRsZSk7Ci0KLQlpZiAoaGFuZGxlLT5zdGF0ZSAmIChDTElFTlRfSVJRX1JFUXxDTElFTlRfSU9fUkVRfENMSUVOVF9DT05GSUdfTE9DS0VEKSkKKwlpZiAocF9kZXYtPnN0YXRlICYgKENMSUVOVF9JUlFfUkVRfENMSUVOVF9JT19SRVF8Q0xJRU5UX0NPTkZJR19MT0NLRUQpKQogCQlnb3RvIHdhcm5fb3V0OwogCWZvciAoaSA9IDA7IGkgPCBNQVhfV0lOOyBpKyspCi0JCWlmIChoYW5kbGUtPnN0YXRlICYgQ0xJRU5UX1dJTl9SRVEoaSkpCisJCWlmIChwX2Rldi0+c3RhdGUgJiBDTElFTlRfV0lOX1JFUShpKSkKIAkJCWdvdG8gd2Fybl9vdXQ7CiAKLQlpZiAoaGFuZGxlLT5zdGF0ZSAmIENMSUVOVF9TVEFMRSkgewotCQloYW5kbGUtPmNsaWVudF9tYWdpYyA9IDA7Ci0JCWhhbmRsZS0+c3RhdGUgJj0gfkNMSUVOVF9TVEFMRTsKKwlpZiAocF9kZXYtPnN0YXRlICYgQ0xJRU5UX1NUQUxFKSB7CisJCXBfZGV2LT5zdGF0ZSAmPSB+Q0xJRU5UX1NUQUxFOwogCQlwY21jaWFfcHV0X2RldihwX2Rldik7CiAJfSBlbHNlIHsKLQkJaGFuZGxlLT5zdGF0ZSA9IENMSUVOVF9VTkJPVU5EOwotCQloYW5kbGUtPmV2ZW50X2hhbmRsZXIgPSBOVUxMOworCQlwX2Rldi0+c3RhdGUgPSBDTElFTlRfVU5CT1VORDsKIAl9CiAKIAlyZXR1cm4gQ1NfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2hkNjQ0NjVfc3MuYyBiL2RyaXZlcnMvcGNtY2lhL2hkNjQ0NjVfc3MuYwppbmRleCA1YWI1NWFlLi4zMTZmOGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9oZDY0NDY1X3NzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvaGQ2NDQ2NV9zcy5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjUvaGQ2NDQ2NS5oPgogI2luY2x1ZGUgPGFzbS9oZDY0NDY1L2lvLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKaW5kZXggZDcyZjlhMy4uYTcxMzAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpAQCAtNjk4LDE0ICs2OTcsNiBAQAogICAgIHN0cnVjdCBpODIzNjVfc29ja2V0ICp0ID0gJnNvY2tldFtzb2NrZXRzLW5zXTsKIAogICAgIGJhc2UgPSBzb2NrZXRzLW5zOwotICAgIGlmICh0LT5pb2FkZHIgPiAwKSB7Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbih0LT5pb2FkZHIsIDIsICJpODIzNjUiKSkgewotCSAgICBwcmludGsoS0VSTl9FUlIgImk4MjM2NTogSU8gcmVnaW9uIGNvbmZsaWN0IGF0ICUjbHgsIG5vdCBhdmFpbGFibGVcbiIsCi0JCQl0LT5pb2FkZHIpOwotCSAgICByZXR1cm47Ci0JfQotICAgIH0KLSAgICAKICAgICBpZiAoYmFzZSA9PSAwKSBwcmludGsoIlxuIik7CiAgICAgcHJpbnRrKEtFUk5fSU5GTyAiICAlcyIsIHBjaWNbdHlwZV0ubmFtZSk7CiAgICAgcHJpbnRrKCIgSVNBLXRvLVBDTUNJQSBhdCBwb3J0ICUjbHggb2ZzIDB4JTAyeCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCBiMTExMWM2Li42NWYzZWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKaW5kZXggYzA5OTdjNC4uN2IxNGQ3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfY29tcGF0LmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfY29tcGF0LmMKaW5kZXggMWNjODMzMS4uZWJiMTYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2NvbXBhdC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9jb21wYXQuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2RlZmluZSBJTl9DQVJEX1NFUlZJQ0VTCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvYnVsa21lbS5oPgpAQCAtMjgsNjQgKzI3LDM5IEBACiAKICNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCi1pbnQgcGNtY2lhX2dldF9maXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSkKK2ludCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgdHVwbGVfdCAqdHVwbGUpCiB7Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0JaWYgKENIRUNLX0hBTkRMRShoYW5kbGUpKQotCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKLQlzID0gU09DS0VUKGhhbmRsZSk7Ci0JcmV0dXJuIHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgaGFuZGxlLT5GdW5jdGlvbiwgdHVwbGUpOworCXJldHVybiBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCB0dXBsZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUpOwogCi1pbnQgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlKQoraW50IHBjbWNpYV9nZXRfbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHR1cGxlX3QgKnR1cGxlKQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwotCWlmIChDSEVDS19IQU5ETEUoaGFuZGxlKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7Ci0JcyA9IFNPQ0tFVChoYW5kbGUpOwotCXJldHVybiBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgaGFuZGxlLT5GdW5jdGlvbiwgdHVwbGUpOworCXJldHVybiBwY2NhcmRfZ2V0X25leHRfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsIHR1cGxlKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF9uZXh0X3R1cGxlKTsKIAotaW50IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSkKK2ludCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCB0dXBsZV90ICp0dXBsZSkKIHsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLQlpZiAoQ0hFQ0tfSEFORExFKGhhbmRsZSkpCi0JCXJldHVybiBDU19CQURfSEFORExFOwotCXMgPSBTT0NLRVQoaGFuZGxlKTsKLQlyZXR1cm4gcGNjYXJkX2dldF90dXBsZV9kYXRhKHMsIHR1cGxlKTsKKwlyZXR1cm4gcGNjYXJkX2dldF90dXBsZV9kYXRhKHBfZGV2LT5zb2NrZXQsIHR1cGxlKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF90dXBsZV9kYXRhKTsKIAotaW50IHBjbWNpYV9wYXJzZV90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitpbnQgcGNtY2lhX3BhcnNlX3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewogCXJldHVybiBwY2NhcmRfcGFyc2VfdHVwbGUodHVwbGUsIHBhcnNlKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3BhcnNlX3R1cGxlKTsKIAotaW50IHBjbWNpYV92YWxpZGF0ZV9jaXMoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgY2lzaW5mb190ICppbmZvKQoraW50IHBjbWNpYV92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjaXNpbmZvX3QgKmluZm8pCiB7Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0JaWYgKENIRUNLX0hBTkRMRShoYW5kbGUpKQotCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKLQlzID0gU09DS0VUKGhhbmRsZSk7Ci0JcmV0dXJuIHBjY2FyZF92YWxpZGF0ZV9jaXMocywgaGFuZGxlLT5GdW5jdGlvbiwgaW5mbyk7CisJcmV0dXJuIHBjY2FyZF92YWxpZGF0ZV9jaXMocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsIGluZm8pOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfdmFsaWRhdGVfY2lzKTsKIAogCi1pbnQgcGNtY2lhX3Jlc2V0X2NhcmQoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgY2xpZW50X3JlcV90ICpyZXEpCitpbnQgcGNtY2lhX3Jlc2V0X2NhcmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjbGllbnRfcmVxX3QgKnJlcSkKIHsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0OwotICAgIAotCWlmIChDSEVDS19IQU5ETEUoaGFuZGxlKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7Ci0Jc2t0ID0gU09DS0VUKGhhbmRsZSk7Ci0JaWYgKCFza3QpCi0JCXJldHVybiBDU19CQURfSEFORExFOwotCi0JcmV0dXJuIHBjY2FyZF9yZXNldF9jYXJkKHNrdCk7CisJcmV0dXJuIHBjY2FyZF9yZXNldF9jYXJkKHBfZGV2LT5zb2NrZXQpOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVzZXRfY2FyZCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKaW5kZXggYjg4M2JjMS4uMzliYTY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2RlZmluZSBJTl9DQVJEX1NFUlZJQ0VTCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC03MSwyOSArNzAsNiBAQAogI2RlZmluZSBkc19kYmcobHZsLCBmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyICpyZWxlYXNlID0gIkxpbnV4IEtlcm5lbCBDYXJkIFNlcnZpY2VzIjsKLQotLyoqIHBjbWNpYV9nZXRfY2FyZF9zZXJ2aWNlc19pbmZvCi0gKgotICogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgdmVyc2lvbiBvZiBDYXJkIFNlcnZpY2VzCi0gKi8KLXN0YXRpYyBpbnQgcGNtY2lhX2dldF9jYXJkX3NlcnZpY2VzX2luZm8oc2VydmluZm9fdCAqaW5mbykKLXsKLQl1bnNpZ25lZCBpbnQgc29ja2V0X2NvdW50ID0gMDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0JaW5mby0+U2lnbmF0dXJlWzBdID0gJ0MnOwotCWluZm8tPlNpZ25hdHVyZVsxXSA9ICdTJzsKLQlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JbGlzdF9mb3JfZWFjaCh0bXAsICZwY21jaWFfc29ja2V0X2xpc3QpCi0JCXNvY2tldF9jb3VudCsrOwotCXVwX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JaW5mby0+Q291bnQgPSBzb2NrZXRfY291bnQ7Ci0JaW5mby0+UmV2aXNpb24gPSBDU19SRUxFQVNFX0NPREU7Ci0JaW5mby0+Q1NMZXZlbCA9IDB4MDIxMDsKLQlpbmZvLT5WZW5kb3JTdHJpbmcgPSAoY2hhciAqKXJlbGVhc2U7Ci0JcmV0dXJuIENTX1NVQ0NFU1M7Ci19IC8qIGdldF9jYXJkX3NlcnZpY2VzX2luZm8gKi8KLQogCiAvKiBiYWNrd2FyZHMtY29tcGF0aWJsZSBhY2Nlc3Npbmcgb2YgZHJpdmVyIC0tLSBieSBuYW1lISAqLwogCkBAIC01OTEsOSArNTY3LDYgQEAKICAgICBjYXNlIERTX0FESlVTVF9SRVNPVVJDRV9JTkZPOgogCXJldCA9IHBjbWNpYV9hZGp1c3RfcmVzb3VyY2VfaW5mbygmYnVmLT5hZGp1c3QpOwogCWJyZWFrOwotICAgIGNhc2UgRFNfR0VUX0NBUkRfU0VSVklDRVNfSU5GTzoKLQlyZXQgPSBwY21jaWFfZ2V0X2NhcmRfc2VydmljZXNfaW5mbygmYnVmLT5zZXJ2aW5mbyk7Ci0JYnJlYWs7CiAgICAgY2FzZSBEU19HRVRfQ09ORklHVVJBVElPTl9JTkZPOgogCWlmIChidWYtPmNvbmZpZy5GdW5jdGlvbiAmJgogCSAgIChidWYtPmNvbmZpZy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCBjMDFkYzZiLi4xODRmNGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjZGVmaW5lIElOX0NBUkRfU0VSVklDRVMKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpAQCAtMjAyLDE0ICsyMDEsMTEgQEAKIAlyZXR1cm4gQ1NfU1VDQ0VTUzsKIH0gLyogcGNjYXJkX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyICovCiAKLWludCBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwKK2ludCBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJCQkgY29uZl9yZWdfdCAqcmVnKQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwotCWlmIChDSEVDS19IQU5ETEUoaGFuZGxlKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7Ci0JcyA9IFNPQ0tFVChoYW5kbGUpOwotCXJldHVybiBwY2NhcmRfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIocywgaGFuZGxlLT5GdW5jdGlvbiwgcmVnKTsKKwlyZXR1cm4gcGNjYXJkX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKHBfZGV2LT5zb2NrZXQsCisJCQkJCQkgICAgcF9kZXYtPmZ1bmMsIHJlZyk7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcik7CiAKQEAgLTI3MSwxNyArMjY3LDExIEBACiAJcmV0dXJuIENTX1NVQ0NFU1M7CiB9IC8qIHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvICovCiAKLWludCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhjbGllbnRfaGFuZGxlX3QgaGFuZGxlLAoraW50IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJCQkgIGNvbmZpZ19pbmZvX3QgKmNvbmZpZykKIHsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLQotCWlmICgoQ0hFQ0tfSEFORExFKGhhbmRsZSkpIHx8ICFjb25maWcpCi0JCXJldHVybiBDU19CQURfSEFORExFOwotCXMgPSBTT0NLRVQoaGFuZGxlKTsKLQlpZiAoIXMpCi0JCXJldHVybiBDU19CQURfSEFORExFOwotCXJldHVybiBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzLCBoYW5kbGUtPkZ1bmN0aW9uLCBjb25maWcpOworCXJldHVybiBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKKwkJCQkJICAgICBjb25maWcpOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyk7CiAKQEAgLTM4MiwxMCArMzcyLDggQEAKIGludCBwY21jaWFfZ2V0X3N0YXR1cyhjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBjc19zdGF0dXNfdCAqc3RhdHVzKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwotCWlmIChDSEVDS19IQU5ETEUoaGFuZGxlKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7CiAJcyA9IFNPQ0tFVChoYW5kbGUpOwotCXJldHVybiBwY2NhcmRfZ2V0X3N0YXR1cyhzLCBoYW5kbGUtPkZ1bmN0aW9uLCBzdGF0dXMpOworCXJldHVybiBwY2NhcmRfZ2V0X3N0YXR1cyhzLCBoYW5kbGUtPmZ1bmMsIHN0YXR1cyk7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfc3RhdHVzKTsKIApAQCAtNDI2LDE2ICs0MTQsMTQgQEAKICAqCiAgKiBNb2RpZnkgYSBsb2NrZWQgc29ja2V0IGNvbmZpZ3VyYXRpb24KICAqLwotaW50IHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihjbGllbnRfaGFuZGxlX3QgaGFuZGxlLAoraW50IHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCiAJCQkJbW9kY29uZl90ICptb2QpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJY29uZmlnX3QgKmM7CiAKLQlpZiAoQ0hFQ0tfSEFORExFKGhhbmRsZSkpCi0JCXJldHVybiBDU19CQURfSEFORExFOwotCXMgPSBTT0NLRVQoaGFuZGxlKTsKLQljID0gQ09ORklHKGhhbmRsZSk7CisJcyA9IHBfZGV2LT5zb2NrZXQ7CisJYyA9IENPTkZJRyhwX2Rldik7CiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCXJldHVybiBDU19OT19DQVJEOwogCWlmICghKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpCkBAIC00NzIsMjUgKzQ1OCwxOCBAQAogRVhQT1JUX1NZTUJPTChwY21jaWFfbW9kaWZ5X2NvbmZpZ3VyYXRpb24pOwogCiAKLWludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUpCitpbnQgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJcGNjYXJkX2lvX21hcCBpbyA9IHsgMCwgMCwgMCwgMCwgMSB9OwotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAlpbnQgaTsKIAotCWlmIChDSEVDS19IQU5ETEUoaGFuZGxlKSB8fAotCSAgICAhKGhhbmRsZS0+c3RhdGUgJiBDTElFTlRfQ09ORklHX0xPQ0tFRCkpCisJaWYgKCEocF9kZXYtPnN0YXRlICYgQ0xJRU5UX0NPTkZJR19MT0NLRUQpKQogCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKLQloYW5kbGUtPnN0YXRlICY9IH5DTElFTlRfQ09ORklHX0xPQ0tFRDsKLQlzID0gU09DS0VUKGhhbmRsZSk7CisJcF9kZXYtPnN0YXRlICY9IH5DTElFTlRfQ09ORklHX0xPQ0tFRDsKIAotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0JaWYgKGhhbmRsZS0+c3RhdGUgJiBDTElFTlRfQ0FSREJVUykKLQkJcmV0dXJuIENTX1NVQ0NFU1M7Ci0jZW5kaWYKLQotCWlmICghKGhhbmRsZS0+c3RhdGUgJiBDTElFTlRfU1RBTEUpKSB7Ci0JCWNvbmZpZ190ICpjID0gQ09ORklHKGhhbmRsZSk7CisJaWYgKCEocF9kZXYtPnN0YXRlICYgQ0xJRU5UX1NUQUxFKSkgeworCQljb25maWdfdCAqYyA9IENPTkZJRyhwX2Rldik7CiAJCWlmICgtLShzLT5sb2NrX2NvdW50KSA9PSAwKSB7CiAJCQlzLT5zb2NrZXQuZmxhZ3MgPSBTU19PVVRQVVRfRU5BOyAgIC8qIElzIHRoaXMgY29ycmVjdD8gKi8KIAkJCXMtPnNvY2tldC5WcHAgPSAwOwpAQCAtNTIzLDIyICs1MDIsMTYgQEAKICAqIGRvbid0IGJvdGhlciBjaGVja2luZyB0aGUgcG9ydCByYW5nZXMgYWdhaW5zdCB0aGUgY3VycmVudCBzb2NrZXQKICAqIHZhbHVlcy4KICAqLwotaW50IHBjbWNpYV9yZWxlYXNlX2lvKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGlvX3JlcV90ICpyZXEpCitpbnQgcGNtY2lhX3JlbGVhc2VfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpb19yZXFfdCAqcmVxKQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAotCWlmIChDSEVDS19IQU5ETEUoaGFuZGxlKSB8fCAhKGhhbmRsZS0+c3RhdGUgJiBDTElFTlRfSU9fUkVRKSkKKwlpZiAoIShwX2Rldi0+c3RhdGUgJiBDTElFTlRfSU9fUkVRKSkKIAkJcmV0dXJuIENTX0JBRF9IQU5ETEU7Ci0JaGFuZGxlLT5zdGF0ZSAmPSB+Q0xJRU5UX0lPX1JFUTsKLQlzID0gU09DS0VUKGhhbmRsZSk7CisJcF9kZXYtPnN0YXRlICY9IH5DTElFTlRfSU9fUkVROwogCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLQlpZiAoaGFuZGxlLT5zdGF0ZSAmIENMSUVOVF9DQVJEQlVTKQotCQlyZXR1cm4gQ1NfU1VDQ0VTUzsKLSNlbmRpZgotCi0JaWYgKCEoaGFuZGxlLT5zdGF0ZSAmIENMSUVOVF9TVEFMRSkpIHsKLQkJY29uZmlnX3QgKmMgPSBDT05GSUcoaGFuZGxlKTsKKwlpZiAoIShwX2Rldi0+c3RhdGUgJiBDTElFTlRfU1RBTEUpKSB7CisJCWNvbmZpZ190ICpjID0gQ09ORklHKHBfZGV2KTsKIAkJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKIAkJCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKIAkJaWYgKChjLT5pby5CYXNlUG9ydDEgIT0gcmVxLT5CYXNlUG9ydDEpIHx8CkBAIC01NTgsMTYgKzUzMSwxNSBAQAogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVsZWFzZV9pbyk7CiAKIAotaW50IHBjbWNpYV9yZWxlYXNlX2lycShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpcnFfcmVxX3QgKnJlcSkKK2ludCBwY21jaWFfcmVsZWFzZV9pcnEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpcnFfcmVxX3QgKnJlcSkKIHsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLQlpZiAoQ0hFQ0tfSEFORExFKGhhbmRsZSkgfHwgIShoYW5kbGUtPnN0YXRlICYgQ0xJRU5UX0lSUV9SRVEpKQorCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKKwlpZiAoIShwX2Rldi0+c3RhdGUgJiBDTElFTlRfSVJRX1JFUSkpCiAJCXJldHVybiBDU19CQURfSEFORExFOwotCWhhbmRsZS0+c3RhdGUgJj0gfkNMSUVOVF9JUlFfUkVROwotCXMgPSBTT0NLRVQoaGFuZGxlKTsKKwlwX2Rldi0+c3RhdGUgJj0gfkNMSUVOVF9JUlFfUkVROwogCi0JaWYgKCEoaGFuZGxlLT5zdGF0ZSAmIENMSUVOVF9TVEFMRSkpIHsKLQkJY29uZmlnX3QgKmMgPSBDT05GSUcoaGFuZGxlKTsKKwlpZiAoIShwX2Rldi0+c3RhdGUgJiBDTElFTlRfU1RBTEUpKSB7CisJCWNvbmZpZ190ICpjID0gQ09ORklHKHBfZGV2KTsKIAkJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKIAkJCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKIAkJaWYgKGMtPmlycS5BdHRyaWJ1dGVzICE9IHJlcS0+QXR0cmlidXRlcykKQEAgLTYyMywyOSArNTk1LDIxIEBACiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZWxlYXNlX3dpbmRvdyk7CiAKIAotaW50IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oY2xpZW50X2hhbmRsZV90IGhhbmRsZSwKK2ludCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJCQkgY29uZmlnX3JlcV90ICpyZXEpCiB7CiAJaW50IGk7CiAJdV9pbnQgYmFzZTsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CiAJY29uZmlnX3QgKmM7CiAJcGNjYXJkX2lvX21hcCBpb21hcDsKIAotCWlmIChDSEVDS19IQU5ETEUoaGFuZGxlKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7Ci0JcyA9IFNPQ0tFVChoYW5kbGUpOwogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKIAotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0JaWYgKGhhbmRsZS0+c3RhdGUgJiBDTElFTlRfQ0FSREJVUykKLQkJcmV0dXJuIENTX1VOU1VQUE9SVEVEX01PREU7Ci0jZW5kaWYKLQogCWlmIChyZXEtPkludFR5cGUgJiBJTlRfQ0FSREJVUykKIAkJcmV0dXJuIENTX1VOU1VQUE9SVEVEX01PREU7Ci0JYyA9IENPTkZJRyhoYW5kbGUpOworCWMgPSBDT05GSUcocF9kZXYpOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCiAJCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKIApAQCAtNzQ2LDcgKzcxMCw3IEBACiAJfQogCiAJYy0+c3RhdGUgfD0gQ09ORklHX0xPQ0tFRDsKLQloYW5kbGUtPnN0YXRlIHw9IENMSUVOVF9DT05GSUdfTE9DS0VEOworCXBfZGV2LT5zdGF0ZSB8PSBDTElFTlRfQ09ORklHX0xPQ0tFRDsKIAlyZXR1cm4gQ1NfU1VDQ0VTUzsKIH0gLyogcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbiAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKTsKQEAgLTc1NywyOSArNzIxLDE3IEBACiAgKiBSZXF1ZXN0X2lvKCkgcmVzZXJ2ZXMgcmFuZ2VzIG9mIHBvcnQgYWRkcmVzc2VzIGZvciBhIHNvY2tldC4KICAqIEkgaGF2ZSBub3QgaW1wbGVtZW50ZWQgcmFuZ2Ugc2hhcmluZyBvciBhbGlhcyBhZGRyZXNzaW5nLgogICovCi1pbnQgcGNtY2lhX3JlcXVlc3RfaW8oY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgaW9fcmVxX3QgKnJlcSkKK2ludCBwY21jaWFfcmVxdWVzdF9pbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlvX3JlcV90ICpyZXEpCiB7Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CisJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwogCWNvbmZpZ190ICpjOwogCi0JaWYgKENIRUNLX0hBTkRMRShoYW5kbGUpKQotCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKLQlzID0gU09DS0VUKGhhbmRsZSk7CiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCXJldHVybiBDU19OT19DQVJEOwogCi0JaWYgKGhhbmRsZS0+c3RhdGUgJiBDTElFTlRfQ0FSREJVUykgewotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0JCWhhbmRsZS0+c3RhdGUgfD0gQ0xJRU5UX0lPX1JFUTsKLQkJcmV0dXJuIENTX1NVQ0NFU1M7Ci0jZWxzZQotCQlyZXR1cm4gQ1NfVU5TVVBQT1JURURfRlVOQ1RJT047Ci0jZW5kaWYKLQl9Ci0KIAlpZiAoIXJlcSkKIAkJcmV0dXJuIENTX1VOU1VQUE9SVEVEX01PREU7Ci0JYyA9IENPTkZJRyhoYW5kbGUpOworCWMgPSBDT05GSUcocF9kZXYpOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCiAJCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSU9fUkVRKQpAQCAtODA0LDcgKzc1Niw3IEBACiAKIAljLT5pbyA9ICpyZXE7CiAJYy0+c3RhdGUgfD0gQ09ORklHX0lPX1JFUTsKLQloYW5kbGUtPnN0YXRlIHw9IENMSUVOVF9JT19SRVE7CisJcF9kZXYtPnN0YXRlIHw9IENMSUVOVF9JT19SRVE7CiAJcmV0dXJuIENTX1NVQ0NFU1M7CiB9IC8qIHBjbWNpYV9yZXF1ZXN0X2lvICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X2lvKTsKQEAgLTgyNywxOSArNzc5LDE1IEBACiB9CiAjZW5kaWYKIAotaW50IHBjbWNpYV9yZXF1ZXN0X2lycShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpcnFfcmVxX3QgKnJlcSkKK2ludCBwY21jaWFfcmVxdWVzdF9pcnEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpcnFfcmVxX3QgKnJlcSkKIHsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CiAJY29uZmlnX3QgKmM7CiAJaW50IHJldCA9IENTX0lOX1VTRSwgaXJxID0gMDsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBoYW5kbGVfdG9fcGRldihoYW5kbGUpOwogCi0JaWYgKENIRUNLX0hBTkRMRShoYW5kbGUpKQotCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKLQlzID0gU09DS0VUKGhhbmRsZSk7CiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCXJldHVybiBDU19OT19DQVJEOwotCWMgPSBDT05GSUcoaGFuZGxlKTsKKwljID0gQ09ORklHKHBfZGV2KTsKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKQogCQlyZXR1cm4gQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQ7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lSUV9SRVEpCkBAIC05MDMsNyArODUxLDcgQEAKIAlzLT5pcnEuQ29uZmlnKys7CiAKIAljLT5zdGF0ZSB8PSBDT05GSUdfSVJRX1JFUTsKLQloYW5kbGUtPnN0YXRlIHw9IENMSUVOVF9JUlFfUkVROworCXBfZGV2LT5zdGF0ZSB8PSBDTElFTlRfSVJRX1JFUTsKIAogI2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkUKIAlwY21jaWFfdXNlZF9pcnFbaXJxXSsrOwpAQCAtOTE5LDE2ICs4NjcsMTMgQEAKICAqIFJlcXVlc3Rfd2luZG93KCkgZXN0YWJsaXNoZXMgYSBtYXBwaW5nIGJldHdlZW4gY2FyZCBtZW1vcnkgc3BhY2UKICAqIGFuZCBzeXN0ZW0gbWVtb3J5IHNwYWNlLgogICovCi1pbnQgcGNtY2lhX3JlcXVlc3Rfd2luZG93KGNsaWVudF9oYW5kbGVfdCAqaGFuZGxlLCB3aW5fcmVxX3QgKnJlcSwgd2luZG93X2hhbmRsZV90ICp3aCkKK2ludCBwY21jaWFfcmVxdWVzdF93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKipwX2Rldiwgd2luX3JlcV90ICpyZXEsIHdpbmRvd19oYW5kbGVfdCAqd2gpCiB7Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CisJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSAoKnBfZGV2KS0+c29ja2V0OwogCXdpbmRvd190ICp3aW47CiAJdV9sb25nIGFsaWduOwogCWludCB3OwogCi0JaWYgKENIRUNLX0hBTkRMRSgqaGFuZGxlKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7Ci0JcyA9ICgqaGFuZGxlKS0+U29ja2V0OwogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKIAlpZiAocmVxLT5BdHRyaWJ1dGVzICYgKFdJTl9QQUdFRCB8IFdJTl9TSEFSRUQpKQpAQCAtOTU3LDcgKzkwMiw3IEBACiAJd2luID0gJnMtPndpblt3XTsKIAl3aW4tPm1hZ2ljID0gV0lORE9XX01BR0lDOwogCXdpbi0+aW5kZXggPSB3OwotCXdpbi0+aGFuZGxlID0gKmhhbmRsZTsKKwl3aW4tPmhhbmRsZSA9ICpwX2RldjsKIAl3aW4tPnNvY2sgPSBzOwogCiAJaWYgKCEocy0+ZmVhdHVyZXMgJiBTU19DQVBfU1RBVElDX01BUCkpIHsKQEAgLTk2Niw3ICs5MTEsNyBAQAogCQlpZiAoIXdpbi0+Y3RsLnJlcykKIAkJCXJldHVybiBDU19JTl9VU0U7CiAJfQotCSgqaGFuZGxlKS0+c3RhdGUgfD0gQ0xJRU5UX1dJTl9SRVEodyk7CisJKCpwX2RldiktPnN0YXRlIHw9IENMSUVOVF9XSU5fUkVRKHcpOwogCiAJLyogQ29uZmlndXJlIHRoZSBzb2NrZXQgY29udHJvbGxlciAqLwogCXdpbi0+Y3RsLm1hcCA9IHcrMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCmluZGV4IGYxYmI3OTEuLmU5OGJiM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmggYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKaW5kZXggNzAwYTE1NS4uNmYxNDEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaApAQCAtMTEsNyArMTEsNiBAQAogCiAvKiBpbmNsdWRlIHRoZSB3b3JsZCAqLwogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwppbmRleCBmY2VmNTRjLi4xMDQwYTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2RlZmluZSBJTl9DQVJEX1NFUlZJQ0VTCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwppbmRleCBhYWNiYmI1Li5kNWE2MWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCkBAIC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oIGIvZHJpdmVycy9wY21jaWEvdGkxMTN4LmgKaW5kZXggYzdiYTk5OC4uZmJlMjMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdGkxMTN4LmgKKysrIGIvZHJpdmVycy9wY21jaWEvdGkxMTN4LmgKQEAgLTE1NCw4ICsxNTQsNiBAQAogI2RlZmluZSBFTkVfVEVTVF9DOQkJCTB4YzkJLyogOGJpdCAqLwogI2RlZmluZSBFTkVfVEVTVF9DOV9UTFRFTkFCTEUJCTB4MDIKIAotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0KIC8qCiAgKiBUZXhhcyBJbnN0cnVtZW50cyBDYXJkQnVzIGNvbnRyb2xsZXIgb3ZlcnJpZGVzLgogICovCkBAIC04NDMsNyArODQxLDUgQEAKIAlyZXR1cm4gdGkxMnh4X292ZXJyaWRlKHNvY2tldCk7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfQ0FSREJVUyAqLwotCiAjZW5kaWYgLyogX0xJTlVYX1RJMTEzWF9IICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggMDJiMjNhYi4uMGU3YWE4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KQEAgLTg2OSwxNCArODY4LDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIHllbnRhX2dldF9zb2NrZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgdTMyIGlzYV9pcnFfbWFzaykKIHsKLQlzb2NrZXQtPnNvY2tldC5mZWF0dXJlcyB8PSBTU19DQVBfUEFHRV9SRUdTIHwgU1NfQ0FQX1BDQ0FSRCB8IFNTX0NBUF9DQVJEQlVTOwotCXNvY2tldC0+c29ja2V0Lm1hcF9zaXplID0gMHgxMDAwOwogCXNvY2tldC0+c29ja2V0LnBjaV9pcnEgPSBzb2NrZXQtPmNiX2lycTsKIAlpZiAoaXNhX3Byb2JlKQogCQlzb2NrZXQtPnNvY2tldC5pcnFfbWFzayA9IHllbnRhX3Byb2JlX2lycShzb2NrZXQsIGlzYV9pcnFfbWFzayk7CiAJZWxzZQogCQlzb2NrZXQtPnNvY2tldC5pcnFfbWFzayA9IDA7Ci0Jc29ja2V0LT5zb2NrZXQuY2JfZGV2ID0gc29ja2V0LT5kZXY7CiAKIAlwcmludGsoS0VSTl9JTkZPICJZZW50YTogSVNBIElSUSBtYXNrIDB4JTA0eCwgUENJIGlycSAlZFxuIiwKIAkgICAgICAgc29ja2V0LT5zb2NrZXQuaXJxX21hc2ssIHNvY2tldC0+Y2JfaXJxKTsKQEAgLTk0Miw2ICs5MzgsOSBAQAogCXNvY2tldC0+c29ja2V0LmRldi5kZXYgPSAmZGV2LT5kZXY7CiAJc29ja2V0LT5zb2NrZXQuZHJpdmVyX2RhdGEgPSBzb2NrZXQ7CiAJc29ja2V0LT5zb2NrZXQub3duZXIgPSBUSElTX01PRFVMRTsKKwlzb2NrZXQtPnNvY2tldC5mZWF0dXJlcyA9IFNTX0NBUF9QQUdFX1JFR1MgfCBTU19DQVBfUENDQVJEOworCXNvY2tldC0+c29ja2V0Lm1hcF9zaXplID0gMHgxMDAwOworCXNvY2tldC0+c29ja2V0LmNiX2RldiA9IGRldjsKIAogCS8qIHByZXBhcmUgc3RydWN0IHllbnRhX3NvY2tldCAqLwogCXNvY2tldC0+ZGV2ID0gZGV2OwpAQCAtMTAxMiw2ICsxMDExLDEwIEBACiAJCXNvY2tldC0+cG9sbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpc29ja2V0OwogCQlzb2NrZXQtPnBvbGxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKIAkJYWRkX3RpbWVyKCZzb2NrZXQtPnBvbGxfdGltZXIpOworCQlwcmludGsoS0VSTl9JTkZPICJZZW50YTogbm8gUENJIElSUSwgQ2FyZEJ1cyBzdXBwb3J0IGRpc2FibGVkIGZvciB0aGlzIHNvY2tldC5cbiIKKwkJICAgICAgIEtFUk5fSU5GTyAiWWVudGE6IGNoZWNrIHlvdXIgQklPUyBDYXJkQnVzLCBCSU9TIElSUSBvciBBQ1BJIHNldHRpbmdzLlxuIik7CisJfSBlbHNlIHsKKwkJc29ja2V0LT5zb2NrZXQuZmVhdHVyZXMgfD0gU1NfQ0FQX0NBUkRCVVM7CiAJfQogCiAJLyogRmlndXJlIG91dCB3aGF0IHRoZSBkYW5nIHRoaW5nIGNhbiBkbyBmb3IgdGhlIFBDTUNJQSBsYXllci4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwppbmRleCA2MDQ0MGRiLi4yNGMwYWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJbmV3X3NrYiA9IE5VTEw7CQkvKiBhc3N1bWUgbm8gZGljZSAqLwogCXBrdF9jbnQgPSAwOwogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiUGFja1NLQmUiKTsKLQlpZiAoc2tiX3F1ZXVlX2xlbigmcF9jaC0+Y29sbGVjdF9xdWV1ZSkgPiAwKSB7CisJaWYgKCFza2JfcXVldWVfZW1wdHkoJnBfY2gtPmNvbGxlY3RfcXVldWUpKSB7CiAJLyogc29tZSBkYXRhICovCiAJCWhlbGRfc2tiID0gc2tiX2RlcXVldWUoJnBfY2gtPmNvbGxlY3RfcXVldWUpOwogCQlpZiAocF9lbnYtPnBhY2tpbmcgIT0gRE9fUEFDS0VEKQpAQCAtMTI1NCw3ICsxMjU0LDcgQEAKIAlwcml2cHRyID0gKHN0cnVjdCBjbGF3X3ByaXZiayAqKSBkZXYtPnByaXY7CiAgICAgICAgIGNsYXdfZnJlZV93cnRfYnVmKCBkZXYgKTsKIAlpZiAoKHByaXZwdHItPndyaXRlX2ZyZWVfY291bnQgPiAwKSAmJgotCSAgICAoc2tiX3F1ZXVlX2xlbigmcF9jaC0+Y29sbGVjdF9xdWV1ZSkgPiAwKSkgeworCSAgICAhc2tiX3F1ZXVlX2VtcHR5KCZwX2NoLT5jb2xsZWN0X3F1ZXVlKSkgewogCSAgCXBrX3NrYiA9IGNsYXdfcGFja19za2IocHJpdnB0cik7CiAJCXdoaWxlIChwa19za2IgIT0gTlVMTCkgewogCQkJcmMgPSBjbGF3X2h3X3R4KCBwa19za2IsIGRldiwxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjdHR5LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y3R0eS5jCmluZGV4IDMwODAzOTMuLjk2OGYyYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjdHR5LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCQkJCXNrYl9xdWV1ZV9oZWFkKCZpbmZvLT5yeF9xdWV1ZSwgc2tiKTsKIAkJCQllbHNlIHsKIAkJCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQkJCXJldCA9IHNrYl9xdWV1ZV9sZW4oJmluZm8tPnJ4X3F1ZXVlKTsKKwkJCQkJcmV0ID0gIXNrYl9xdWV1ZV9lbXB0eSgmaW5mby0+cnhfcXVldWUpOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtNTMwLDcgKzUzMCw3IEBACiAJCXRvdGFsICs9IGM7CiAJCWNvdW50IC09IGM7CiAJfQotCWlmIChza2JfcXVldWVfbGVuKCZpbmZvLT50eF9xdWV1ZSkpIHsKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmaW5mby0+dHhfcXVldWUpKSB7CiAJCWluZm8tPmxzciAmPSB+VUFSVF9MU1JfVEVNVDsKIAkJdGFza2xldF9zY2hlZHVsZSgmaW5mby0+dGFza2xldCk7CiAJfQpAQCAtNTk0LDcgKzU5NCw3IEBACiAJCXJldHVybjsKIAlpZiAoY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X2ZsdXNoX2NoYXJzIikpCiAJCXJldHVybjsKLQlpZiAodHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCB8fCAoIXNrYl9xdWV1ZV9sZW4oJmluZm8tPnR4X3F1ZXVlKSkpCisJaWYgKHR0eS0+c3RvcHBlZCB8fCB0dHktPmh3X3N0b3BwZWQgfHwgc2tiX3F1ZXVlX2VtcHR5KCZpbmZvLT50eF9xdWV1ZSkpCiAJCXJldHVybjsKIAl0YXNrbGV0X3NjaGVkdWxlKCZpbmZvLT50YXNrbGV0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tYWM1M2M5NC5jIGIvZHJpdmVycy9zY3NpL21hYzUzYzk0LmMKaW5kZXggZWRkNDdkMS4uOTMyZGNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21hYzUzYzk0LmMKKysrIGIvZHJpdmVycy9zY3NpL21hYzUzYzk0LmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogCS51c2VfY2x1c3RlcmluZwk9IERJU0FCTEVfQ0xVU1RFUklORywKIH07CiAKLXN0YXRpYyBpbnQgbWFjNTNjOTRfcHJvYmUoc3RydWN0IG1hY2lvX2RldiAqbWRldiwgY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaCkKK3N0YXRpYyBpbnQgbWFjNTNjOTRfcHJvYmUoc3RydWN0IG1hY2lvX2RldiAqbWRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gbWFjaW9fZ2V0X29mX25vZGUobWRldik7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtYWNpb19nZXRfcGNpX2RldihtZGV2KTsKQEAgLTU0NCwxNSArNTQ0LDE0IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBvZl9tYXRjaCBtYWM1M2M5NF9tYXRjaFtdID0gCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtYWM1M2M5NF9tYXRjaFtdID0gCiB7CiAJewogCS5uYW1lIAkJPSAiNTNjOTQiLAotCS50eXBlCQk9IE9GX0FOWV9NQVRDSCwKLQkuY29tcGF0aWJsZQk9IE9GX0FOWV9NQVRDSAogCX0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRSAob2YsIG1hYzUzYzk0X21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgbWFjNTNjOTRfZHJpdmVyID0gCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVzaC5jIGIvZHJpdmVycy9zY3NpL21lc2guYwppbmRleCBiMDU3MzdhLi5mZjE5MzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVzaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZXNoLmMKQEAgLTE4NDcsNyArMTg0Nyw3IEBACiAJLnVzZV9jbHVzdGVyaW5nCQkJPSBESVNBQkxFX0NMVVNURVJJTkcsCiB9OwogCi1zdGF0aWMgaW50IG1lc2hfcHJvYmUoc3RydWN0IG1hY2lvX2RldiAqbWRldiwgY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaCkKK3N0YXRpYyBpbnQgbWVzaF9wcm9iZShzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lc2ggPSBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KTsKIAlzdHJ1Y3QgcGNpX2RldiogcGRldiA9IG1hY2lvX2dldF9wY2lfZGV2KG1kZXYpOwpAQCAtMjAxMiwyMCArMjAxMiwxOCBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfbWF0Y2ggbWVzaF9tYXRjaFtdID0gCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtZXNoX21hdGNoW10gPSAKIHsKIAl7CiAJLm5hbWUgCQk9ICJtZXNoIiwKLQkudHlwZQkJPSBPRl9BTllfTUFUQ0gsCi0JLmNvbXBhdGlibGUJPSBPRl9BTllfTUFUQ0gKIAl9LAogCXsKLQkubmFtZSAJCT0gT0ZfQU5ZX01BVENILAogCS50eXBlCQk9ICJzY3NpIiwKIAkuY29tcGF0aWJsZQk9ICJjaHJwLG1lc2gwIgogCX0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRSAob2YsIG1lc2hfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBtZXNoX2RyaXZlciA9IAogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMKaW5kZXggZjFmNmJmNS4uN2M1MzA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jCkBAIC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlICJhaGExNTJ4LmgiCiAKLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTEzNCwxMSArMTMzLDYgQEAKICAgICBsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAgICAgZGV2X2xpc3QgPSBsaW5rOwogICAgIGNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0gICAgY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJmFoYTE1MnhfZXZlbnQ7Ci0gICAgY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCUNTX0VWRU5UX1JFU0VUX1JFUVVFU1QgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQlDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0JQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKICAgICBjbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAgICAgY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKICAgICByZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTMzNCw2ICszMjgsNyBAQAogCQkubmFtZQk9ICJhaGExNTJ4X2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gYWhhMTUyeF9hdHRhY2gsCisJLmV2ZW50CQk9IGFoYTE1MnhfZXZlbnQsCiAJLmRldGFjaAkJPSBhaGExNTJ4X2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBhaGExNTJ4X2lkcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYwppbmRleCA4NTNlNmVlLi5kYjhmNWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgImZkb21haW4uaCIKIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtMTIwLDExICsxMTksNiBAQAogICAgIGxpbmstPm5leHQgPSBkZXZfbGlzdDsKICAgICBkZXZfbGlzdCA9IGxpbms7CiAgICAgY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLSAgICBjbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmZmRvbWFpbl9ldmVudDsKLSAgICBjbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JQ1NfRVZFTlRfUkVTRVRfUkVRVUVTVCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAotCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQlDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOwogICAgIGNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKICAgICBjbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogICAgIHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtMzE0LDYgKzMwOCw3IEBACiAJCS5uYW1lCT0gImZkb21haW5fY3MiLAogCX0sCiAJLmF0dGFjaAkJPSBmZG9tYWluX2F0dGFjaCwKKwkuZXZlbnQJCT0gZmRvbWFpbl9ldmVudCwKIAkuZGV0YWNoCQk9IGZkb21haW5fZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IGZkb21haW5faWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCmluZGV4IDkxYjNmMjguLjNjZDNiNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYwpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9pb2N0bC5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0xNjQyLDExICsxNjQxLDYgQEAKIAlsaW5rLT5uZXh0ICAgICAgICAgICAgICAgPSBkZXZfbGlzdDsKIAlkZXZfbGlzdCAgICAgICAgICAgICAgICAgPSBsaW5rOwogCWNsaWVudF9yZWcuZGV2X2luZm8JID0gJmRldl9pbmZvOwotCWNsaWVudF9yZWcuRXZlbnRNYXNrCSA9Ci0JCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQkJQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUCXwKLQkJQ1NfRVZFTlRfUE1fU1VTUEVORAl8IENTX0VWRU5UX1BNX1JFU1VNRQkgOwotCWNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9ICZuc3BfY3NfZXZlbnQ7CiAJY2xpZW50X3JlZy5WZXJzaW9uCSA9IDB4MDIxMDsKIAljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtMjEzOCwxMiArMjEzMiwxMyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIG5zcF9jc19pZHMpOwogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgbnNwX2RyaXZlciA9IHsKLQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKLQkuZHJ2ICAgICAgICAgICAgPSB7Ci0JCS5uYW1lICAgPSAibnNwX2NzIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmRydgkJPSB7CisJCS5uYW1lCT0gIm5zcF9jcyIsCiAJfSwKLQkuYXR0YWNoICAgICAgICAgPSBuc3BfY3NfYXR0YWNoLAotCS5kZXRhY2ggICAgICAgICA9IG5zcF9jc19kZXRhY2gsCisJLmF0dGFjaAkJPSBuc3BfY3NfYXR0YWNoLAorCS5ldmVudAkJPSBuc3BfY3NfZXZlbnQsCisJLmRldGFjaAkJPSBuc3BfY3NfZGV0YWNoLAogCS5pZF90YWJsZQk9IG5zcF9jc19pZHMsCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKaW5kZXggMGRjZjQxMS4uN2E1MTZmMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgIi4uL3Fsb2dpY2ZhczQwOC5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0xOTQsOCArMTkzLDYgQEAKIAlsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAJZGV2X2xpc3QgPSBsaW5rOwogCWNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0JY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnFsb2dpY19ldmVudDsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9IENTX0VWRU5UX1JFU0VUX1JFUVVFU1QgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfCBDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOwogCWNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKIAljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtNDIzLDYgKzQyMCw3IEBACiAJLm5hbWUJCT0gInFsb2dpY19jcyIsCiAJfSwKIAkuYXR0YWNoCQk9IHFsb2dpY19hdHRhY2gsCisJLmV2ZW50CQk9IHFsb2dpY19ldmVudCwKIAkuZGV0YWNoCQk9IHFsb2dpY19kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gcWxvZ2ljX2lkcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYwppbmRleCA3ZDRiMTZiLi5iNGIzYTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKQEAgLTk3OSwxMCArOTc5LDYgQEAKIAlsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAJZGV2X2xpc3QgPSBsaW5rOwogCWNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0JY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJlNZTTUzQzUwMF9ldmVudDsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9IENTX0VWRU5UX1JFU0VUX1JFUVVFU1QgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQkgICAgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04gfCBDU19FVkVOVF9DQVJEX1JFTU9WQUwgfAotCSAgICBDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOwogCWNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKIAljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtMTAxMyw2ICsxMDA5LDcgQEAKIAkJLm5hbWUJPSAic3ltNTNjNTAwX2NzIiwKIAl9LAogCS5hdHRhY2gJCT0gU1lNNTNDNTAwX2F0dGFjaCwKKwkuZXZlbnQJCT0gU1lNNTNDNTAwX2V2ZW50LAogCS5kZXRhY2gJCT0gU1lNNTNDNTAwX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBzeW01M2M1MDBfaWRzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwppbmRleCAxYzlmNzE2Li43ZGIyZjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogLyoKICAqIENhbGxlZCB1cG9uIG1hdGNoIHdpdGggYW4gZXNjYyBub2RlIGluIHRoZSBkZXZpdmUtdHJlZS4KICAqLwotc3RhdGljIGludCBwbXpfYXR0YWNoKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYsIGNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqbWF0Y2gpCitzdGF0aWMgaW50IHBtel9hdHRhY2goc3RydWN0IG1hY2lvX2RldiAqbWRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJaW50IGk7CiAJCkBAIC0xODUwLDIwICsxODUwLDE3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX21hdGNoIHBtel9tYXRjaFtdID0gCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwbXpfbWF0Y2hbXSA9IAogewogCXsKIAkubmFtZSAJCT0gImNoLWEiLAotCS50eXBlCQk9IE9GX0FOWV9NQVRDSCwKLQkuY29tcGF0aWJsZQk9IE9GX0FOWV9NQVRDSAogCX0sCiAJewogCS5uYW1lIAkJPSAiY2gtYiIsCi0JLnR5cGUJCT0gT0ZfQU5ZX01BVENILAotCS5jb21wYXRpYmxlCT0gT0ZfQU5ZX01BVENICiAJfSwKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFIChvZiwgcG16X21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgcG16X2RyaXZlciA9IAogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCA3M2EzNGIxLi5kZTAxMzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtMjMyLDExICsyMzEsNiBAQAogCWxpbmstPm5leHQgPSBkZXZfbGlzdDsKIAlkZXZfbGlzdCA9IGxpbms7CiAJY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9Ci0JICAgIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKLQkgICAgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwgfCBDU19FVkVOVF9DQVJEX1JFU0VUIHwKLQkgICAgQ1NfRVZFTlRfUE1fU1VTUEVORCB8IENTX0VWRU5UX1BNX1JFU1VNRTsKLQljbGllbnRfcmVnLmV2ZW50X2hhbmRsZXIgPSAmc2VyaWFsX2V2ZW50OwogCWNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKIAljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtODgzLDYgKzg3Nyw3IEBACiAJCS5uYW1lCT0gInNlcmlhbF9jcyIsCiAJfSwKIAkuYXR0YWNoCQk9IHNlcmlhbF9hdHRhY2gsCisJLmV2ZW50CQk9IHNlcmlhbF9ldmVudCwKIAkuZGV0YWNoCQk9IHNlcmlhbF9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gc2VyaWFsX2lkcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMgYi9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMKaW5kZXggY2U1ZWJmZS4uNTdjMGM2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiBlcnJvciBjb2RlcyAqLwogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtNjksMTEgKzY4LDYgQEAKIAlsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CiAJZGV2X2xpc3QgPSBsaW5rOwogCWNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87Ci0JY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCSAgICBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0JICAgIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JICAgIENTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0JY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJml4al9ldmVudDsKIAljbGllbnRfcmVnLlZlcnNpb24gPSAweDAyMTA7CiAJY2xpZW50X3JlZy5ldmVudF9jYWxsYmFja19hcmdzLmNsaWVudF9kYXRhID0gbGluazsKIAlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKQEAgLTMwNyw2ICszMDEsNyBAQAogCQkubmFtZQk9ICJpeGpfY3MiLAogCX0sCiAJLmF0dGFjaAkJPSBpeGpfYXR0YWNoLAorCS5ldmVudAkJPSBpeGpfZXZlbnQsCiAJLmRldGFjaAkJPSBpeGpfZGV0YWNoLAogCS5pZF90YWJsZQk9IGl4al9pZHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jCmluZGV4IDI2OWQ4ZWYuLjM4YWViZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0zODksMTEgKzM4OCw2IEBACiAJZGV2X2xpc3QgPSBsaW5rOwogCWNsaWVudF9yZWcuZGV2X2luZm8gPSAoZGV2X2luZm9fdCAqKSAmZHJpdmVyX25hbWU7CiAJY2xpZW50X3JlZy5BdHRyaWJ1dGVzID0gSU5GT19JT19DTElFTlQgfCBJTkZPX0NBUkRfU0hBUkU7Ci0JY2xpZW50X3JlZy5FdmVudE1hc2sgPQotCQlDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8Ci0JCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8Ci0JCUNTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7Ci0JY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnNsODExX2NzX2V2ZW50OwogCWNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKIAljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoJmxpbmstPmhhbmRsZSwgJmNsaWVudF9yZWcpOwpAQCAtNDE4LDYgKzQxMiw3IEBACiAJCS5uYW1lCT0gKGNoYXIgKilkcml2ZXJfbmFtZSwKIAl9LAogCS5hdHRhY2gJCT0gc2w4MTFfY3NfYXR0YWNoLAorCS5ldmVudAkJPSBzbDgxMV9jc19ldmVudCwKIAkuZGV0YWNoCQk9IHNsODExX2NzX2RldGFjaCwKIAkuaWRfdGFibGUJPSBzbDgxMV9pZHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jIGIvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCmluZGV4IDhhOTQ1ZjQuLjU3NmYzYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMKQEAgLTMyMjcsOSArMzIyNyw5IEBACiAJdGVtcCA9IHVubGlua191cmJzIChkZXYsICZkZXYtPnR4cSkgKyB1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT5yeHEpOwogCiAJLy8gbWF5YmUgd2FpdCBmb3IgZGVsZXRpb25zIHRvIGZpbmlzaC4KLQl3aGlsZSAoc2tiX3F1ZXVlX2xlbiAoJmRldi0+cnhxKQotCQkJJiYgc2tiX3F1ZXVlX2xlbiAoJmRldi0+dHhxKQotCQkJJiYgc2tiX3F1ZXVlX2xlbiAoJmRldi0+ZG9uZSkpIHsKKwl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmZGV2LT5yeHEpICYmCisJICAgICAgICFza2JfcXVldWVfZW1wdHkoJmRldi0+dHhxKSAmJgorCSAgICAgICAhc2tiX3F1ZXVlX2VtcHR5KCZkZXYtPmRvbmUpKSB7CiAJCW1zbGVlcChVTkxJTktfVElNRU9VVF9NUyk7CiAJCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQogCQkJZGV2ZGJnIChkZXYsICJ3YWl0ZWQgZm9yICVkIHVyYiBjb21wbGV0aW9ucyIsIHRlbXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwppbmRleCA3ZGZiZjM5Li5kZGM5NDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJdW5zaWduZWQgaW50IG9mZnNldCA9IDAsIGk7CiAKIAlpZiAoIWZiX2luZm8tPmNtYXAucmVkIHx8ICFmYl9pbmZvLT5jbWFwLmJsdWUgfHwKLQkgICAgZmJfaW5mby0+Y21hcC5ncmVlbiB8fCBmYl9pbmZvLT5jbWFwLnRyYW5zcCkKKwkgICAgIWZiX2luZm8tPmNtYXAuZ3JlZW4gfHwgIWZiX2luZm8tPmNtYXAudHJhbnNwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZvciAoaSA9IDA7IGkgPCBmYl9pbmZvLT5jbWFwLmxlbjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2xvZ28vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vbG9nby9LY29uZmlnCmluZGV4IDZiYTEwZTMuLjNlOWNjZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbG9nby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vbG9nby9LY29uZmlnCkBAIC02Myw1ICs2MywxMCBAQAogCWRlcGVuZHMgb24gTE9HTyAmJiBTVVBFUkgKIAlkZWZhdWx0IHkKIAorY29uZmlnIExPR09fTTMyUl9DTFVUMjI0CisJYm9vbCAiMjI0LWNvbG9yIE0zMlIgTGludXggbG9nbyIKKwlkZXBlbmRzIG9uIExPR08gJiYgTTMyUgorCWRlZmF1bHQgeQorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbG9nby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vbG9nby9NYWtlZmlsZQppbmRleCBiMGQ5OTUwLi5kMDI0NGMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9sb2dvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vbG9nby9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNyBAQAogb2JqLSQoQ09ORklHX0xPR09fU1VQRVJIX01PTk8pCQkrPSBsb2dvX3N1cGVyaF9tb25vLm8KIG9iai0kKENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNikJCSs9IGxvZ29fc3VwZXJoX3ZnYTE2Lm8KIG9iai0kKENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0KQkrPSBsb2dvX3N1cGVyaF9jbHV0MjI0Lm8KK29iai0kKENPTkZJR19MT0dPX00zMlJfQ0xVVDIyNCkJCSs9IGxvZ29fbTMycl9jbHV0MjI0Lm8KIAogIyBIb3cgdG8gZ2VuZXJhdGUgbG9nbydzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvLmMgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nby5jCmluZGV4IDc3YjYyMjAuLjc4OGZhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvLmMKKysrIGIvZHJpdmVycy92aWRlby9sb2dvL2xvZ28uYwpAQCAtMzMsNiArMzMsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBsaW51eF9sb2dvIGxvZ29fc3VwZXJoX21vbm87CiBleHRlcm4gY29uc3Qgc3RydWN0IGxpbnV4X2xvZ28gbG9nb19zdXBlcmhfdmdhMTY7CiBleHRlcm4gY29uc3Qgc3RydWN0IGxpbnV4X2xvZ28gbG9nb19zdXBlcmhfY2x1dDIyNDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbGludXhfbG9nbyBsb2dvX20zMnJfY2x1dDIyNDsKIAogCiBjb25zdCBzdHJ1Y3QgbGludXhfbG9nbyAqZmJfZmluZF9sb2dvKGludCBkZXB0aCkKQEAgLTk3LDYgKzk4LDEwIEBACiAJCS8qIFN1cGVySCBMaW51eCBsb2dvICovCiAJCWxvZ28gPSAmbG9nb19zdXBlcmhfY2x1dDIyNDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19MT0dPX00zMlJfQ0xVVDIyNAorCQkvKiBNMzJSIExpbnV4IGxvZ28gKi8KKwkJbG9nbyA9ICZsb2dvX20zMnJfY2x1dDIyNDsKKyNlbmRpZgogCX0KIAlyZXR1cm4gbG9nbzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvX20zMnJfY2x1dDIyNC5wcG0gYi9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nb19tMzJyX2NsdXQyMjQucHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMjk4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nb19tMzJyX2NsdXQyMjQucHBtCkBAIC0wLDAgKzEsMTI5MiBAQAorUDMKKyMgQ1JFQVRPUjogVGhlIEdJTVAncyBQTk0gRmlsdGVyIFZlcnNpb24gMS4wCisjCisjIE5vdGU6IGhvdyB0byBjb252ZXJ0IHBwbSB0byBwbm0oYXNjaWkpLgorIyAgICQgY29udmVydCAtcG9zdGVyaXplIDIyNCBtMzJyLnBwbSAtIHwgcG5tMmFzYyAtZjUgPmxvZ29fbTMycl9jbHV0MjI0LnBwbQorIworIyBjb252ZXJ0IC0gaW1hZ2VtYWdpY2s6IC91c3IvYmluL2NvbnZlcnQKKyMgcG5tMmFzYyAtIHBubSB0byBhc2NpaS1wbm0gZm9ybWF0IGNvbnZlcnRlcgorIyAgIGh0dHA6Ly93d3cuaXMuYWlzdC5nby5qcC9ldGxjZGIvdXRpbC9wMmEuaHRtI0VuZ2xpc2gKKworODAgODAKKzI1NQorICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICA0MyA0MyA0MyAgNzUgNzUgNzUgIDI3IDI3IDI3ICAyIDIgMworICAyIDIgMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICA1OSA1OSA1OSAgMTIzIDEyMyAxMjMgIDY3IDY3IDY3ICAyNyAyNyAyNworICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAxMCA2IDMgIDU5IDU5IDU5ICA4MCA4MCA4MCAgNDMgNDMgNDMgIDI3IDI3IDI3CisgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMTkgMTkgMTkgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAxMCA2IDMgIDEwIDYgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDEwIDYgMyAgMTEgMTEgMTEgIDExIDExIDExICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDI3IDI3IDI3ICAxMCA2IDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDE5IDE5IDE5ICAyIDIgMyAgMiAyIDMgIDUxIDUxIDUxICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMiAyIDMgIDEyMyAxMjMgMTIzICAxOTYgMTk2IDE5NiAgMTE1IDExNSAxMTUgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDc1IDc1IDc1ICAxNDEgMTQxIDE0MAorICAxNzIgMTcyIDE3MiAgMTk2IDE5NiAxOTYgIDE5MCAxODkgMTg4ICAyIDIgMyAgMTEgMTEgMTEKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzCisgIDI3IDI3IDI3ICAxNjQgMTY0IDE2NCAgMjI4IDIyOCAyMjggIDIyMSAyMjEgMjIwICAxMCA2IDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMTcyIDE3MiAxNzIgIDI0NSAyNDUgMjQ1CisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjIxIDIyMSAyMjAgIDM1IDM1IDM1ICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMTY0IDE2NCAxNjQgIDIyOCAyMjggMjI4ICAzNSAzNSAzNSAgMjM2IDIzNiAyMzYgIDIzNiAyMzYgMjM2CisgIDIgMiAzICAxMSAxMSAxMSAgMiAyIDMgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NQorICAyIDIgMyAgNzUgNzUgNzUgIDI0NSAyNDUgMjQ1ICAyNDUgMjQ1IDI0NSAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzCisgIDIxMiAyMTIgMjEyICAyIDIgMyAgNTEgNTEgNTEgIDExIDExIDExICAyNDUgMjQ1IDI0NQorICAyNyAyNyAyNyAgODAgODAgODAgIDEwIDYgMyAgMjU0IDI1NCAyNTIgIDIgMiAzCisgIDIgMiAzICA5MSA5MSA5MSAgMTkgMTkgMTkgIDI1NCAyNTQgMjUyICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMTk2IDE5NiAxOTYgIDEwIDYgMyAgMiAyIDMgIDExIDExIDExICAxMDcgMTA3IDEwNworICA0OSAzNSA1ICA1NyA0MiAxMSAgMzEgMjIgMyAgMjM2IDIzNiAyMzYgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDI1NCAyNTQgMjUyICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMTA3IDEwNyAxMDcgIDIyMSAyMjEgMjIwICAyIDIgMyAgNjQgNDMgNyAgMTk0IDE0OCAxMAorICAyMzYgMTg4IDEwICAyMjUgMTgwIDEwICAxNzAgMTI2IDEwICAyMzYgMTg4IDEwICA5NCA4NiA2NworICAyIDIgMyAgMiAyIDMgIDIwNCAyMDQgMjA0ICAyMzYgMjM2IDIzNiAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzCisgIDIgMiAzICAyMjggMjI4IDIyOCAgMTgyIDEyNiAxMCAgMjE4IDE2NCA5ICAyMzYgMTg4IDEwCisgIDIzNiAxODggMTAgIDIzNyAyMDQgMTQgIDIzNiAyMDUgNDAgIDI0NiAyMTQgNDggIDI0NiAyMTQgNDgKKyAgMjQ1IDE4OSAxMSAgMjA5IDE1NiA5ICAxOTYgMTk2IDE5NiAgMTEgMTEgMTEgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyIDIgMworICAyIDIgMyAgMTY1IDExNCAxMCAgMjA3IDE0OCA3ICAyMjkgMTcyIDkgIDIzNiAxODAgMTAKKyAgMjM2IDE5NiAxMSAgMjM3IDIwNCAxNCAgMjQyIDIxOCA0MyAgMjQ2IDIxOCA3NSAgMjQ2IDIxOCAxOQorICAyNDYgMjEzIDEzICAyNDYgMjE4IDE5ICAyNDQgMjA1IDExICAyMTggMTY0IDkgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyIDIgMworICAxNjQgMTA5IDUgIDE5MiAxMzMgNyAgMjI0IDE2NSA5ICAyMzYgMTgwIDEwICAyMzYgMTg4IDEwCisgIDIzNiAxOTYgMTEgIDI0MSAyMTIgNDIgIDI0NiAyMTggNzUgIDI0NiAyMTggMTkgIDI0NiAyMTggMTkKKyAgMjQ2IDIxOCAxOSAgMjM2IDE5NiAxMSAgMTUwIDExNCAxMCAgMjI5IDE3MiA5ICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMTY1IDExNCAxMCAgMjAxIDE0MiA3ICAyMjkgMTcyIDkgIDI0MiAxODIgMTEgIDIzNiAxODggMTAKKyAgMjM3IDIwNCAxNCAgMjQ1IDIxMyA2NyAgMjQ2IDIxOCAxOSAgMjQ2IDIxMyAxMyAgMjQ2IDIxMyAxMworICAxNTQgMTE5IDEwICAyMDcgMTQ4IDcgIDIxOCAxNjQgOSAgMjE2IDE1NiA4ICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzCisgIDIgMiAzICAxMjAgNzggMyAgMjI1IDE4MCAxMCAgMjQ1IDE4OSAxMSAgMjM2IDIwNSA0MAorICAyNDEgMjEyIDQyICAyNDEgMjEyIDE3ICAyMzcgMjA0IDE0ICAxNDggMTA3IDkgIDE4MiAxMjYgMTAKKyAgMjE2IDE1NiA4ICAyMTggMTY0IDkgIDIwNyAxNDggNyAgODIgNzAgNDMgIDIgMiAzCisgIDIgMiAzICAxMjMgMTIzIDEyMyAgMzUgMzUgMzUgIDIgMiAzICAyIDIgMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMTAgNiAzICAxODAgMTgwIDE4MCAgMTU2IDEwMiA1ICAxMzUgODggNSAgMTQyIDEwNiA3CisgIDEyNiA5OCAxMSAgMTY1IDExNCAxMCAgMTg1IDEzMiA5ICAyMDcgMTQ4IDcgIDIxNSAxNTAgMTMKKyAgMTk5IDE0MCA4ICAxODggMTQ4IDcxICAxOTYgMTk2IDE5NiAgMTkwIDE4OSAxODggIDIgMiAzCisgIDIgMiAzICAxMSAxMSAxMSAgMTMyIDEzMiAxMzIgIDc1IDc1IDc1ICAyIDIgMworICAyIDIgMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzCisgIDEwIDYgMyAgMTkwIDE4OSAxODggIDE5MCAxODkgMTg4ICAxNTEgOTcgNSAgMTkyIDEzMyA3CisgIDIwNyAxNDggNyAgMjA2IDE0MiA4ICAxOTkgMTQwIDggIDE4MCAxMjEgNyAgMTgwIDEzMiAzMQorICAxOTAgMTg5IDE4OCAgMTkwIDE4OSAxODggIDIxMiAyMTIgMjEyICAyMTIgMjEyIDIxMiAgMTA3IDEwNyAxMDcKKyAgMiAyIDMgIDIgMiAzICA5OSA5OSA5OSAgNTEgNTEgNTEgIDIgMiAzCisgIDIgMiAzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMKKyAgMiAyIDMgIDE5MCAxODkgMTg4ICAxOTAgMTg5IDE4OCAgMTkwIDE4OSAxODggIDEzNiA5NSA3CisgIDE1MSA5NyA1ICAxNTEgOTcgNSAgMTUxIDk3IDUgIDE4MyAxNTYgOTEgIDE5MCAxODkgMTg4CisgIDE5MCAxODkgMTg4ICAyMjggMjI4IDIyOCAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyMjEgMjIxIDIyMAorICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDEwIDYgMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzICAyIDIgMworICA3NSA3NSA3NSAgMjQ1IDI0NSAyNDUgIDE5NiAxOTYgMTk2ICAxOTAgMTg5IDE4OCAgMTkwIDE4OSAxODgKKyAgMTkwIDE4OSAxODggIDE5NiAxOTYgMTk2ICAxOTAgMTg5IDE4OCAgMTkwIDE4OSAxODggIDIwNCAyMDQgMjA0CisgIDIzNiAyMzYgMjM2ICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAzNSAzNSAzNSAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMgIDI3IDI3IDI3ICAyIDIgMworICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1ICAxOTAgMTg5IDE4OCAgMTkwIDE4OSAxODgKKyAgMTkwIDE4OSAxODggIDE5MCAxODkgMTg4ICAxOTAgMTg5IDE4OCAgMjEyIDIxMiAyMTIgIDI0NSAyNDUgMjQ1CisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMTAgNiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyIDIgMyAgMiAyIDMgIDEzMiAxMzIgMTMyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDIzNiAyMzYgMjM2ICAxOTYgMTk2IDE5NgorICAxOTAgMTg5IDE4OCAgMjA0IDIwNCAyMDQgIDI0NSAyNDUgMjQ1ICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICA4MCA4MCA4MCAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NQorICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxMiAyMTIgMjEyICAyNDUgMjQ1IDI0NQorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIwNCAyMDQgMjA0ICAyNDUgMjQ1IDI0NQorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNDUgMjQ1IDI0NSAgMjM2IDIzNiAyMzYgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAxMSAxMSAxMSAgMTY0IDE2NCAxNjQgIDIxMiAyMTIgMjEyCisgIDIzNiAyMzYgMjM2ICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDIzNiAyMzYgMjM2ICAyMjEgMjIxIDIyMAorICAyMjEgMjIxIDIyMCAgMjI4IDIyOCAyMjggIDI0NSAyNDUgMjQ1ICAyNDUgMjQ1IDI0NSAgMjQ1IDI0NSAyNDUKKyAgMjM2IDIzNiAyMzYgIDIyMSAyMjEgMjIwICAyMTIgMjEyIDIxMiAgMjA0IDIwNCAyMDQgIDIwNCAyMDQgMjA0CisgIDE5NiAxOTYgMTk2ICAyMDQgMjA0IDIwNCAgNTkgNTkgNTkgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyNyAyNyAyNyAgMTcyIDE3MiAxNzIgIDIxMiAyMTIgMjEyCisgIDIzNiAyMzYgMjM2ICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyMjggMjI4IDIyOAorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1ICAyMjEgMjIxIDIyMCAgMjA0IDIwNCAyMDQgIDE5NiAxOTYgMTk2CisgIDE5NiAxOTYgMTk2ICAxOTYgMTk2IDE5NiAgMjI4IDIyOCAyMjggIDE5IDE5IDE5ICAyIDIgMworICA4MCA4MCA4MCAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDExIDExIDExICAyIDIgMyAgMTY0IDE2NCAxNjQgIDIzNiAyMzYgMjM2ICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyMzYgMjM2IDIzNiAgMjEyIDIxMiAyMTIgIDE5NiAxOTYgMTk2ICAyNDUgMjQ1IDI0NSAgMiAyIDMKKyAgMiAyIDMgIDExIDExIDExICA1MSA1MSA1MSAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzICAyIDIgMyAgODYgODYgODMKKyAgMiAyIDMgIDI3IDI3IDI3ICAyMzYgMjM2IDIzNiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjEyIDIxMiAyMTIgIDE5NiAxOTYgMTk2ICA5MSA5MSA5MQorICAyIDIgMyAgMiAyIDMgIDIgMiAzICAxMSAxMSAxMSAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1CisgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjIxIDIyMSAyMjAgIDI0NSAyNDUgMjQ1CisgIDIgMiAzICAxMSAxMSAxMSAgNDMgNDMgNDMgIDE5IDE5IDE5ICAxMCA2IDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzICA4MCA4MCA4MCAgMiAyIDMKKyAgMiAyIDMgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICA0MyA0MyA0MyAgMjcgMjcgMjcgIDgwIDgwIDgwICAxOSAxOSAxOSAgODAgODAgODAKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjM2IDIzNiAyMzYgIDE3IDExIDIzMworICAxNyAxMSAyMzMgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NQorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDExIDExIDExICAxMSAxMSAxMSAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyIDIgMyAgNjcgNjcgNjcgIDIgMiAzICAxOSAxOSAxOQorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1ICAxNyAxMSAyMzMgIDI0NSAyNDUgMjQ1CisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMTcgMTEgMjMzICAyMjggMjI4IDIyOCAgMTcgMTEgMjMzCisgIDE3IDExIDIzMyAgMTcgMTEgMjMzICAxNyAxMSAyMzMgIDI1NCAyNTQgMjUyICAxNyAxMSAyMzMKKyAgMTcgMTEgMjMzICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMyAgMTcgMTEgMjMzCisgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDExIDExIDExICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMiAyIDMgIDEwIDYgMyAgMTEgMTEgMTEgIDIgMiAzICAyMjggMjI4IDIyOAorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAxNyAxMSAyMzMgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAxNyAxMSAyMzMgIDE3IDExIDIzMyAgMTcgMTEgMjMzICAyNDUgMjQ1IDI0NQorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMyAgMTcgMTEgMjMzICAxNyAxMSAyMzMKKyAgMTcgMTEgMjMzICAxNyAxMSAyMzMgIDI1NCAyNTQgMjUyICAxNyAxMSAyMzMgIDE3IDExIDIzMworICAxNyAxMSAyMzMgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMjcgMjcgMjcgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMTcgMTEgMjMzICAxNyAxMSAyMzMKKyAgMTcgMTEgMjMzICAxNyAxMSAyMzMgIDE3IDExIDIzMyAgMTcgMTEgMjMzICAyNTQgMjU0IDI1MgorICAxNyAxMSAyMzMgIDE3IDExIDIzMyAgMTcgMTEgMjMzICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMTcgMTEgMjMzICAxNyAxMSAyMzMgIDI1NCAyNTQgMjUyICAxNyAxMSAyMzMgIDE3IDExIDIzMworICAyNTQgMjU0IDI1MiAgMTcgMTEgMjMzICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAxMSAxMSAxMSAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyIDIgMworICAyIDIgMyAgMTkgMTkgMTkgIDIgMiAzICAyIDIgMyAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAxNyAxMSAyMzMgIDI0NSAyNDUgMjQ1ICAxNyAxMSAyMzMKKyAgMTcgMTEgMjMzICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIKKyAgMTcgMTEgMjMzICAxNyAxMSAyMzMgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDE3IDExIDIzMyAgMTcgMTEgMjMzICAyNTQgMjU0IDI1MiAgMTcgMTEgMjMzICAxNyAxMSAyMzMKKyAgMTcgMTEgMjMzICAxNyAxMSAyMzMgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzCisgIDIgMiAzICAxOSAxOSAxOSAgMiAyIDMgIDE5IDE5IDE5ICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMworICAxNyAxMSAyMzMgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMTcgMTEgMjMzICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMyAgMTcgMTEgMjMzICAyNTQgMjU0IDI1MgorICAxNyAxMSAyMzMgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMyAgMTcgMTEgMjMzCisgIDE3IDExIDIzMyAgMTcgMTEgMjMzICAxNyAxMSAyMzMgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgNDMgNDMgNDMgIDIgMiAzICA0MyA0MyA0MyAgMjU0IDI1NCAyNTIKKyAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAxNyAxMSAyMzMgIDI1NCAyNTQgMjUyICAxNyAxMSAyMzMKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMTcgMTEgMjMzICAxNyAxMSAyMzMKKyAgMTcgMTEgMjMzICAxNyAxMSAyMzMgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMworICAxNyAxMSAyMzMgIDE3IDExIDIzMyAgMTcgMTEgMjMzICAxNyAxMSAyMzMgIDE3IDExIDIzMworICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI0NSAyNDUgMjQ1ICAyIDIgMyAgMiAyIDMgIDIgMiAzICAxMSAxMSAxMQorICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICA3NSA3NSA3NSAgMiAyIDMgIDk5IDk5IDk5ICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDIyOCAyMjggMjI4ICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMTcgMTEgMjMzICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDE3IDExIDIzMyAgMTcgMTEgMjMzCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMiAyIDMgIDIgMiAzICAyIDIgMyAgNzUgNzUgNzUKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDExIDExIDExICAxMDcgMTA3IDEwNyAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDIzNiAyMzYgMjM2ICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1CisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMiAyIDMgIDIgMiAzICAxMSAxMSAxMSAgMTkgMTkgMTkKKyAgMTEgMTEgMTEgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIgMiAzICAxMSAxMSAxMQorICAxNDAgMTAyIDMgIDExIDExIDExICAxMCA2IDMgIDY3IDY3IDY3ICAyNTQgMjU0IDI1MgorICAyNDUgMjQ1IDI0NSAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NSAgMjI4IDIyOCAyMjggIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyIDIgMyAgNDMgNDMgNDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMTEgMTEgMTEgIDY3IDY3IDY3ICAxMSAxMSAxMSAgMiAyIDMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAxODUgMTMyIDkgIDI0MiAxODIgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgNDkgMzUgNSAgMiAyIDMgIDIyOCAyMjggMjI4CisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyMjggMjI4IDIyOCAgMjQ1IDI0NSAyNDUKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNDUgMjM4IDIyMiAgMjMyIDE4OSA5NAorICAyMjYgMTg2IDk5ICA0MyA0MyA0MyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICA1OSA1OSA1OSAgMiAyIDMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTYgMTU2IDggIDIzNiAxODAgMjIKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgNDkgMzUgNSAgMTEgMTEgMTEKKyAgMjEyIDIxMiAyMTIgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDIyOCAyMjggMjI4ICAyNTQgMjU0IDI1MgorICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDIyOSAxNzIgOSAgMjQ2IDIxOCAxOQorICAyNDYgMjE4IDE5ICA0MSAyNyAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMTkgMTkgMTkgIDI3IDI3IDI3ICAxOTYgMTU0IDE0CisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMTk5IDE0MCA4ICAyMjkgMTcyIDkgIDI0MiAxODIgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ0IDE5NiAxMCAgMiAyIDMKKyAgMiAyIDMgIDExNSAxMTUgMTE1ICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDIyOCAyMjggMjI4ICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDIyNCAxNjUgOSAgMjQ1IDE4OSAxMQorICAyMzYgMTk2IDExICAxOSAxOSAxOSAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAxMSAxMSAxMSAgMjM2IDE5NiAxMQorICAyNDQgMjA1IDExICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAxODIgMTI2IDEwICAyMDkgMTU2IDkgIDIxNSAxNTAgMTMKKyAgMTkzIDE0MCAxMCAgMjA3IDE0OCAyNCAgMjE2IDE1NiA4ICAyNDIgMTgyIDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDIwOSAxNTYgOQorICAyIDIgMyAgMiAyIDMgIDQzIDQzIDQzICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1CisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NQorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyMzYgMjM2IDIzNiAgMjE2IDE1NiA4ICAyNDUgMTg5IDExCisgIDIyOSAxNzIgOSAgNjQgNDMgNyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyMDcgMTQ4IDcgIDIzNiAxODggMTAKKyAgMjQ1IDE4OSAxMSAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMTgwIDEyMSA3ICAyMTYgMTU2IDggIDI0MiAxODIgMTEgIDIzNiAxODAgMTAKKyAgMjI5IDE3MiA5ICAyNDIgMTgyIDExICAyNDIgMTgyIDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDIzNyAyMDQgMTQKKyAgMTcwIDEyNiAxMCAgMiAyIDMgIDIgMiAzICAxMSAxMSAxMSAgMjM2IDIzNiAyMzYKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDIwNCAyMDQgMjA0ICAxOTYgMTk2IDE5NiAgMjE2IDE1NiA4ICAyMzYgMTgwIDEwCisgIDIyNCAxNjUgOSAgMTgyIDEyNiAxMCAgNzMgNDggNiAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICA0MSAyNyAzICAxOTkgMTQwIDggIDIyOSAxNzIgOSAgMjM2IDE4MCAxMAorICAyNDUgMTg5IDExICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAxODUgMTMyIDkgIDIyOSAxNzIgOSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjI2IDE4OCAxMSAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMTEgMTEgMTEKKyAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDE5NiAxOTYgMTk2ICAxOTYgMTk2IDE5NiAgMjE1IDE1MCAxMyAgMjM2IDE4MCAxMAorICAyMjkgMTcyIDkgIDIwMSAxNDIgNyAgMTg1IDEzMiA5ICAxODAgMTIxIDcgIDE3MyAxMjAgMTAKKyAgMTgwIDEyMSA3ICAxOTIgMTMzIDcgIDIyOSAxNzIgOSAgMjQyIDE4MiAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAxODAgMTI2IDQ3ICAyMjQgMTY1IDkgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDIzNiAxODggMTAgIDE5MyAxNDAgMTAgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIxMiAyMTIgMjEyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDI0NSAyNDUgMjQ1CisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDIwNCAyMDQgMjA0ICAxOTYgMTk2IDE5NiAgMTk5IDE0MCA4ICAyMjkgMTcyIDkKKyAgMjM2IDE4MCAxMCAgMjE4IDE2NCA5ICAyMTUgMTUwIDEzICAyMDcgMTQ4IDcgIDIwNyAxNDggNworICAyMTYgMTU2IDggIDIyOSAxNzIgOSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDIgMTgyIDExICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAxODUgMTMyIDkgIDIxNiAxNTYgOCAgMjQyIDE4MiAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjM2IDE5NiAxMSAgMTkgMTkgMTkgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMTEgMTEgMTEgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNDUgMjQ1IDI0NSAgMjIxIDIyMSAyMjAgIDE5NiAxOTYgMTk2ICAxODUgMTMyIDkgIDIyOSAxNzIgOQorICAyNDIgMTgyIDExICAyMjkgMTcyIDkgIDIyNCAxNjUgOSAgMjE4IDE2NCA5ICAyMjQgMTY1IDkKKyAgMjI5IDE3MiA5ICAyMzYgMTgwIDEwICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDIzNiAxODAgMjIgIDI0MiAxODIgMTEgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIzNiAxODAgMjIgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDIzNiAxODggMTAgIDIyNSAxODAgMTAgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMTEgMTEgMTEgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjIxIDIyMSAyMjAgIDE5IDE5IDE5ICAxODUgMTMyIDkgIDIyNCAxNjUgOQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDIgMTgyIDExICAyMzYgMTgwIDEwICAyMzYgMTgwIDEwCisgIDI0MiAxODIgMTEgIDI0MiAxODIgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMTk2IDE1NCAxNAorICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjA3IDE0OCA3ICAyMzYgMTgwIDIyICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQyIDE4MiAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyMzcgMjA0IDE0ICAxMzUgODggNSAgMiAyIDMKKyAgMjcgMjcgMjcgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NSAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NQorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDY3IDY3IDY3ICAxOSAxMyAzICAxODUgMTMyIDkgIDIyOSAxNzIgOQorICAyNDIgMTgyIDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyMzYgMTgwIDIyICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjQ1IDE4OSAxMSAgMjQyIDE4MiAxMQorICAyNDIgMTgyIDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjM2IDE4OCAxMCAgMjI2IDE4OCAxMSAgMTA0IDgzIDQ4CisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNDUgMjQ1IDI0NQorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUKKyAgMjU0IDI1NCAyNTIgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDIgMiAzICAyIDIgMyAgNTYgMzggNSAgMTg1IDEzMiA5ICAyMjkgMTcyIDkKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0MiAxODIgMTEKKyAgMjI5IDE3MiA5ICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMTgyIDEyNiAxMCAgMjE1IDE1MCAxMyAgMjQyIDE4MiAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQyIDE4MiAxMSAgMjQ1IDE4OSAxMSAgMjM2IDE5NiAxMSAgMjE2IDE1NiA4CisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIKKyAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjQ1IDI0NSAyNDUgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgNzUgNTQgMyAgMTgyIDEyNiAxMCAgMjI5IDE3MiA5CisgIDI0MiAxODIgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyMjkgMTcyIDkKKyAgMjA3IDE0OCAyNCAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDE5MiAxMzMgNyAgMjI5IDE3MiA5ICAyNDIgMTgyIDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDIgMTgyIDExICAyMjUgMTgwIDEwICAyMjQgMTY1IDkKKyAgMTA3IDY5IDUgIDI0NSAyNDUgMjQ1ICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyCisgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjU0IDI1NCAyNTIgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MgorICAyNTQgMjU0IDI1MiAgMjM2IDIzNiAyMzYgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICA5MSA2NyA5ICAxODIgMTI2IDEwICAyMjkgMTcyIDkKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0MiAxODIgMTEgIDI0MiAxODIgMTEgIDIxNiAxNTYgOCAgMTgwIDEyNiA0NworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjA2IDE0MiA4ICAyMjQgMTY1IDkgIDI0NSAxODkgMTEgIDI0MiAxODIgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDIgMTgyIDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0MiAxODIgMTEgIDI0MiAxODIgMTEgIDIxNiAxNTYgOAorICAxNTYgMTAyIDUgIDE5IDEzIDMgIDQzIDQzIDQzICAxOTYgMTk2IDE5NiAgMjU0IDI1NCAyNTIKKyAgMjQ1IDI0NSAyNDUgIDI1NCAyNTQgMjUyICAyNTQgMjU0IDI1MiAgMjA0IDIwNCAyMDQgIDUxIDUxIDUxCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDk1IDYyIDUgIDE4NSAxMzIgOSAgMjI5IDE3MiA5CisgIDI0MiAxODIgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQyIDE4MiAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyMzYgMTgwIDIyICAyMTYgMTU2IDggIDIwNiAxNDIgOCAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMTkyIDEzMyA3ICAyMTUgMTUwIDEzICAyMjkgMTcyIDkgIDIyOSAxNzIgOQorICAyMzYgMTgwIDEwICAyMzYgMTgwIDIyICAyNDIgMTgyIDExICAyNDIgMTgyIDExICAyNDUgMTg5IDExCisgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEgIDI0NSAxODkgMTEKKyAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjI5IDE3MiA5ICAyMTYgMTU2IDgKKyAgMTU2IDEwMiA1ICA4MyA1NCA2ICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAxMTUgNzMgMyAgMTg1IDEzMiA5ICAyMjkgMTcyIDkKKyAgMjQyIDE4MiAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMSAgMjQ1IDE4OSAxMQorICAyNDUgMTg5IDExICAyNDIgMTgyIDExICAyMjkgMTcyIDkgIDIyOSAxNzIgOSAgMjE2IDE1NiA4CisgIDE4MCAxMjEgNyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMTgwIDEyMSA3ICAxODIgMTI2IDEwICAxOTIgMTMzIDcgIDE5OSAxNDAgOAorICAyMDcgMTQ4IDcgIDIxNSAxNTAgMTMgIDIxNiAxNTYgOCAgMjI0IDE2NSA5ICAyMjkgMTcyIDkKKyAgMjM2IDE4MCAyMiAgMjQ1IDE4OSAxMSAgMjQyIDE4MiAxMSAgMjQ1IDE4OSAxMSAgMjQyIDE4MiAxMQorICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDIgMTgyIDExICAyMjkgMTcyIDkgIDE5OSAxNDAgOAorICAxNTEgOTcgNSAgMTAxIDY3IDcgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDExNSA3MyAzICAxODAgMTIxIDcgIDIxNiAxNTYgOAorICAyMzYgMTgwIDIyICAyNDIgMTgyIDExICAyNDUgMTg5IDExICAyNDUgMTg5IDExICAyNDIgMTgyIDExCisgIDIzNiAxODAgMTAgIDIyNCAxNjUgOSAgMjE1IDE1MCAxMyAgMjA2IDE0MiA4ICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMTU2IDEwMiA1ICAxNjQgMTA5IDUgIDE3MiAxMTQgNSAgMTgwIDEyMSA3ICAxODAgMTIxIDcKKyAgMTkyIDEzMyA3ICAyMDEgMTQyIDcgIDIxNiAxNTYgOCAgMjI0IDE2NSA5ICAyMzYgMTgwIDIyCisgIDI0NSAxODkgMTEgIDI0MiAxODIgMTEgIDIyOSAxNzIgOSAgMjAxIDE0MiA3ICAxNzIgMTE0IDUKKyAgMTI1IDgzIDUgIDgzIDU0IDYgIDIgMiAzICAyIDIgMyAgMiAyIDMKKyAgMiAyIDMgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzCisgIDIgMiAzICAyIDIgMyAgMiAyIDMgIDIgMiAzICAyIDIgMworICAyIDIgMyAgMiAyIDMgIDkxIDU4IDUgIDE1NiAxMDIgNSAgMTkyIDEzMyA3CisgIDIxNiAxNTYgOCAgMjI5IDE3MiA5ICAyMzYgMTgwIDEwICAyMzYgMTgwIDEwICAyMjkgMTcyIDkKKyAgMjE1IDE1MCAxMyAgMTk5IDE0MCA4ICAxNjQgMTA5IDUgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAxMjAgNzggMyAgMTMyIDgyIDMKKyAgMTUxIDk3IDUgIDE1NyAxMDYgNyAgMTgwIDEyMSA3ICAxODUgMTMyIDkgIDE5MyAxNDAgMTAKKyAgMjA3IDE0OCA3ICAyMDcgMTQ4IDcgIDE5MiAxMzMgNyAgMTcyIDExNCA1ICAxMzIgODIgMworICAxMDEgNjcgNyAgNDEgMjcgMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgNzMgNDggNiAgMTQzIDkwIDMgIDE4MCAxMjEgNworICAxOTIgMTMzIDcgIDIwNyAxNDggNyAgMjA3IDE0OCA3ICAyMDEgMTQyIDcgIDE4NSAxMzIgOQorICAxNzMgMTIwIDEwICAxMzYgOTUgNyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgOTEgNTggNSAgMTI1IDgzIDUgIDEzNSA4OCA1CisgIDE0NCA5NSA3ICAxNTEgOTcgNSAgMTMyIDgyIDMgIDExNSA3MyAzICA5NSA2MiA1CisgIDY0IDQzIDcgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDY0IDQzIDcgIDkxIDU4IDUgIDE1MSA5NyA1CisgIDE1NyAxMDYgNyAgMTcyIDExNCA1ICAxNzIgMTE0IDUgIDE2NCAxMDkgNSAgMTUxIDk3IDUKKyAgODUgNTkgNiAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgNzMgNDggNgorICA5MSA1OCA1ICA5NSA2MiA1ICA5NSA2MiA1ICA5MSA1OCA1ICA1NiAzOCA1CisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDgzIDU0IDYKKyAgMTA3IDY5IDUgIDEzMiA4MiAzICAxMjUgODMgNSAgMTAxIDY3IDcgIDcxIDQ3IDMxCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMworICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzICAyMTUgMTUwIDEzCisgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMgIDIxNSAxNTAgMTMKKyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMyAgMjE1IDE1MCAxMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbGF0aW51bWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYwppbmRleCAzZGQxZGUxLi5iMDA4ODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYwpAQCAtNTIzLDcgKzUyMyw3IEBACiAjZGVmaW5lIGludmFsaWRhdGVfY2FjaGUoYWRkcikKICNlbmRpZgogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwbGF0aW51bWZiX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UqIG9kZXYsIGNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqbWF0Y2gpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbGF0aW51bWZiX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UqIG9kZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZQkqZHAgPSBvZGV2LT5ub2RlOwogCXN0cnVjdCBmYl9pbmZvCQkqaW5mbzsKQEAgLTY0NywxMiArNjQ3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfbWF0Y2ggcGxhdGludW1mYl9tYXRjaFtdID0gCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwbGF0aW51bWZiX21hdGNoW10gPSAKIHsKIAl7CiAJLm5hbWUgCQk9ICJwbGF0aW51bSIsCi0JLnR5cGUJCT0gT0ZfQU5ZX01BVENILAotCS5jb21wYXRpYmxlCT0gT0ZfQU5ZX01BVENILAogCX0sCiAJe30sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwppbmRleCA3ODlkZTEzLi4zODQ4YmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwpAQCAtNjcsMTIgKzY3LDE4IEBACiBzdGF0aWMgaW5saW5lIHU4CiBzMWQxM3h4eGZiX3JlYWRyZWcoc3RydWN0IHMxZDEzeHh4ZmJfcGFyICpwYXIsIHUxNiByZWdubykKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX09QU1BVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTMpCisJcmVnbm89KChyZWdubyAmIDEpID8gKHJlZ25vICYgfjFMKSA6IChyZWdubyArIDEpKTsKKyNlbmRpZgogCXJldHVybiByZWFkYihwYXItPnJlZ3MgKyByZWdubyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogczFkMTN4eHhmYl93cml0ZXJlZyhzdHJ1Y3QgczFkMTN4eHhmYl9wYXIgKnBhciwgdTE2IHJlZ25vLCB1OCB2YWx1ZSkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX09QU1BVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTMpCisJcmVnbm89KChyZWdubyAmIDEpID8gKHJlZ25vICYgfjFMKSA6IChyZWdubyArIDEpKTsKKyNlbmRpZgogCXdyaXRlYih2YWx1ZSwgcGFyLT5yZWdzICsgcmVnbm8pOwogfQogCkBAIC0yNTksNyArMjY1LDExIEBACiAJCQlkYmcoInMxZDEzeHh4ZmJfc2V0Y29scmVnOiBwc2V1ZG8gJWQsIHZhbCAlMDh4XG4iLAogCQkJCSAgICByZWdubywgcHNldWRvX3ZhbCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJKQorCQkJKCh1MzIgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0gY3B1X3RvX2xlMTYocHNldWRvX3ZhbCk7CisjZWxzZQogCQkJKCh1MzIgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0gcHNldWRvX3ZhbDsKKyNlbmRpZgogCiAJCQlicmVhazsKIAkJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IDhmYWRjZGEuLmY0NjMzZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0yMTEzLDcgKzIxMTMsNyBAQAogCXByaW50ayhLRVJOX0RFQlVHICJzdGF0ZTogJXVcbiIsIHN0YXRlKTsKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQlmYl9zZXRfc3VzcGVuZChpbmZvLCBzdGF0ZSk7CisJZmJfc2V0X3N1c3BlbmQoaW5mbywgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CiAJc2F2YWdlX2Rpc2FibGVfbW1pbyhwYXIpOwogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIApkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggOGQ1MGE2MS4uZjkzZmQ0MWIgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMjksNiArMjksNyBAQAogY29uZmlnIEVYVDJfRlNfUE9TSVhfQUNMCiAJYm9vbCAiRXh0MiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKIAlkZXBlbmRzIG9uIEVYVDJfRlNfWEFUVFIKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCiAJaGVscAogCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAogCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgpAQCAtMTE0LDYgKzExNSw3IEBACiBjb25maWcgRVhUM19GU19QT1NJWF9BQ0wKIAlib29sICJFeHQzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgogCWRlcGVuZHMgb24gRVhUM19GU19YQVRUUgorCXNlbGVjdCBGU19QT1NJWF9BQ0wKIAloZWxwCiAJICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCiAJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCkBAIC0yNDEsNiArMjQzLDcgQEAKIGNvbmZpZyBSRUlTRVJGU19GU19QT1NJWF9BQ0wKIAlib29sICJSZWlzZXJGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKIAlkZXBlbmRzIG9uIFJFSVNFUkZTX0ZTX1hBVFRSCisJc2VsZWN0IEZTX1BPU0lYX0FDTAogCWhlbHAKIAkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKIAkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KQEAgLTI3NCw2ICsyNzcsNyBAQAogY29uZmlnIEpGU19QT1NJWF9BQ0wKIAlib29sICJKRlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCiAJZGVwZW5kcyBvbiBKRlNfRlMKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCiAJaGVscAogCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAogCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgpAQCAtMzE4LDggKzMyMiw3IEBACiAjIAlOZXZlciB1c2UgdGhpcyBzeW1ib2wgZm9yIGlmZGVmcy4KICMKIAlib29sCi0JZGVwZW5kcyBvbiBFWFQyX0ZTX1BPU0lYX0FDTCB8fCBFWFQzX0ZTX1BPU0lYX0FDTCB8fCBKRlNfUE9TSVhfQUNMIHx8IFJFSVNFUkZTX0ZTX1BPU0lYX0FDTCB8fCBORlNEX1Y0Ci0JZGVmYXVsdCB5CisJZGVmYXVsdCBuCiAKIHNvdXJjZSAiZnMveGZzL0tjb25maWciCiAKQEAgLTE0MzAsNiArMTQzMyw3IEBACiAJc2VsZWN0IE5GU0RfVENQCiAJc2VsZWN0IENSWVBUT19NRDUKIAlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IEZTX1BPU0lYX0FDTAogCWhlbHAKIAkgIElmIHlvdSB3b3VsZCBsaWtlIHRvIGluY2x1ZGUgdGhlIE5GU3Y0IHNlcnZlciBhcyB3ZWxsIGFzIHRoZSBORlN2MgogCSAgYW5kIE5GU3YzIHNlcnZlcnMsIHNheSBZIGhlcmUuICBUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLCBhbmQKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvd2FpdHEuYyBiL2ZzL2F1dG9mczQvd2FpdHEuYwppbmRleCBmYTIzNDhkLi4zZGY4NjI4IDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3dhaXRxLmMKKysrIGIvZnMvYXV0b2ZzNC93YWl0cS5jCkBAIC0yMzEsOCArMjMxLDggQEAKIAkJaW50IHR5cGUgPSAobm90aWZ5ID09IE5GWV9NT1VOVCA/CiAJCQlhdXRvZnNfcHR5cGVfbWlzc2luZyA6IGF1dG9mc19wdHlwZV9leHBpcmVfbXVsdGkpOwogCi0JCURQUklOVEsoKCJuZXcgd2FpdCBpZCA9IDB4JTA4bHgsIG5hbWUgPSAlLipzLCBuZnk9JWRcbiIsCi0JCQkodW5zaWduZWQgbG9uZykgd3EtPndhaXRfcXVldWVfdG9rZW4sIHdxLT5sZW4sIHdxLT5uYW1lLCBub3RpZnkpKTsKKwkJRFBSSU5USygibmV3IHdhaXQgaWQgPSAweCUwOGx4LCBuYW1lID0gJS4qcywgbmZ5PSVkXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpIHdxLT53YWl0X3F1ZXVlX3Rva2VuLCB3cS0+bGVuLCB3cS0+bmFtZSwgbm90aWZ5KTsKIAogCQkvKiBhdXRvZnM0X25vdGlmeV9kYWVtb24oKSBtYXkgYmxvY2sgKi8KIAkJYXV0b2ZzNF9ub3RpZnlfZGFlbW9uKHNiaSwgd3EsIHR5cGUpOwpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9mcy9iaW8uYwppbmRleCAzYTE0NzJhLi5jYThmN2E4IDEwMDY0NAotLS0gYS9mcy9iaW8uYworKysgYi9mcy9iaW8uYwpAQCAtNTIsNyArNTIsNyBAQAogICovCiAKICNkZWZpbmUgQlYoeCkgeyAubnJfdmVjcyA9IHgsIC5uYW1lID0gImJpb3ZlYy0iX19zdHJpbmdpZnkoeCkgfQotc3RhdGljIHN0cnVjdCBiaW92ZWNfc2xhYiBidmVjX3NsYWJzW0JJT1ZFQ19OUl9QT09MU10gPSB7CitzdGF0aWMgc3RydWN0IGJpb3ZlY19zbGFiIGJ2ZWNfc2xhYnNbQklPVkVDX05SX1BPT0xTXSBfX3JlYWRfbW9zdGx5ID0gewogCUJWKDEpLCBCVig0KSwgQlYoMTYpLCBCVig2NCksIEJWKDEyOCksIEJWKEJJT19NQVhfUEFHRVMpLAogfTsKICN1bmRlZiBCVgpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCA1NjFlNjNhLi42YTI1ZDdkIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtNTEzLDggKzUxMyw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGVuZF9idWZmZXJfYXN5bmNfcmVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpCiB7Ci0Jc3RhdGljIERFRklORV9TUElOTE9DSyhwYWdlX3VwdG9kYXRlX2xvY2spOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpmaXJzdDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgcGFnZV91cHRvZGF0ZSA9IDE7CkBAIC01MzYsNyArNTM2LDkgQEAKIAkgKiB0d28gYnVmZmVyIGhlYWRzIGVuZCBJTyBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBhbmQgYm90aAogCSAqIGRlY2lkZSB0aGF0IHRoZSBwYWdlIGlzIG5vdyBjb21wbGV0ZWx5IGRvbmUuCiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBhZ2VfdXB0b2RhdGVfbG9jaywgZmxhZ3MpOworCWZpcnN0ID0gcGFnZV9idWZmZXJzKHBhZ2UpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwliaXRfc3Bpbl9sb2NrKEJIX1VwdG9kYXRlX0xvY2ssICZmaXJzdC0+Yl9zdGF0ZSk7CiAJY2xlYXJfYnVmZmVyX2FzeW5jX3JlYWQoYmgpOwogCXVubG9ja19idWZmZXIoYmgpOwogCXRtcCA9IGJoOwpAQCAtNTQ5LDcgKzU1MSw4IEBACiAJCX0KIAkJdG1wID0gdG1wLT5iX3RoaXNfcGFnZTsKIAl9IHdoaWxlICh0bXAgIT0gYmgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBhZ2VfdXB0b2RhdGVfbG9jaywgZmxhZ3MpOworCWJpdF9zcGluX3VubG9jayhCSF9VcHRvZGF0ZV9Mb2NrLCAmZmlyc3QtPmJfc3RhdGUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCS8qCiAJICogSWYgbm9uZSBvZiB0aGUgYnVmZmVycyBoYWQgZXJyb3JzIGFuZCB0aGV5IGFyZSBhbGwKQEAgLTU2MSw3ICs1NjQsOCBAQAogCXJldHVybjsKIAogc3RpbGxfYnVzeToKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYWdlX3VwdG9kYXRlX2xvY2ssIGZsYWdzKTsKKwliaXRfc3Bpbl91bmxvY2soQkhfVXB0b2RhdGVfTG9jaywgJmZpcnN0LT5iX3N0YXRlKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuOwogfQogCkBAIC01NzIsOCArNTc2LDggQEAKIHZvaWQgZW5kX2J1ZmZlcl9hc3luY193cml0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpCiB7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFnZV91cHRvZGF0ZV9sb2NrKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZmlyc3Q7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKQEAgLTU5NCw3ICs1OTgsMTAgQEAKIAkJU2V0UGFnZUVycm9yKHBhZ2UpOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwYWdlX3VwdG9kYXRlX2xvY2ssIGZsYWdzKTsKKwlmaXJzdCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJYml0X3NwaW5fbG9jayhCSF9VcHRvZGF0ZV9Mb2NrLCAmZmlyc3QtPmJfc3RhdGUpOworCiAJY2xlYXJfYnVmZmVyX2FzeW5jX3dyaXRlKGJoKTsKIAl1bmxvY2tfYnVmZmVyKGJoKTsKIAl0bXAgPSBiaC0+Yl90aGlzX3BhZ2U7CkBAIC02MDUsMTIgKzYxMiwxNCBAQAogCQl9CiAJCXRtcCA9IHRtcC0+Yl90aGlzX3BhZ2U7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBhZ2VfdXB0b2RhdGVfbG9jaywgZmxhZ3MpOworCWJpdF9zcGluX3VubG9jayhCSF9VcHRvZGF0ZV9Mb2NrLCAmZmlyc3QtPmJfc3RhdGUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CiAJcmV0dXJuOwogCiBzdGlsbF9idXN5OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBhZ2VfdXB0b2RhdGVfbG9jaywgZmxhZ3MpOworCWJpdF9zcGluX3VubG9jayhCSF9VcHRvZGF0ZV9Mb2NrLCAmZmlyc3QtPmJfc3RhdGUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Rjb29raWVzLmMgYi9mcy9kY29va2llcy5jCmluZGV4IDU4MWFhYzkuLjAyYWEwZGQgMTAwNjQ0Ci0tLSBhL2ZzL2Rjb29raWVzLmMKKysrIGIvZnMvZGNvb2tpZXMuYwpAQCAtOTQsMTIgKzk0LDEwIEBACiAJaWYgKCFkY3MpCiAJCXJldHVybiBOVUxMOwogCi0JYXRvbWljX2luYygmZGVudHJ5LT5kX2NvdW50KTsKLQlhdG9taWNfaW5jKCZ2ZnNtbnQtPm1udF9jb3VudCk7CiAJZGVudHJ5LT5kX2Nvb2tpZSA9IGRjczsKIAotCWRjcy0+ZGVudHJ5ID0gZGVudHJ5OwotCWRjcy0+dmZzbW50ID0gdmZzbW50OworCWRjcy0+ZGVudHJ5ID0gZGdldChkZW50cnkpOworCWRjcy0+dmZzbW50ID0gbW50Z2V0KHZmc21udCk7CiAJaGFzaF9kY29va2llKGRjcyk7CiAKIAlyZXR1cm4gZGNzOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IDBiMmRiNGYuLjk5ODlmZGMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTI2NjMsNyArMjY2Myw3IEBACiAJfSBlbHNlIGZvciAoYmxvY2sgPSAwOyBibG9jayA8IEVYVDNfTl9CTE9DS1M7IGJsb2NrKyspCiAJCXJhd19pbm9kZS0+aV9ibG9ja1tibG9ja10gPSBlaS0+aV9kYXRhW2Jsb2NrXTsKIAotCWlmIChFWFQzX0lOT0RFX1NJWkUoaW5vZGUtPmlfc2IpID4gRVhUM19HT09EX09MRF9JTk9ERV9TSVpFKQorCWlmIChlaS0+aV9leHRyYV9pc2l6ZSkKIAkJcmF3X2lub2RlLT5pX2V4dHJhX2lzaXplID0gY3B1X3RvX2xlMTYoZWktPmlfZXh0cmFfaXNpemUpOwogCiAJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEiKTsKZGlmZiAtLWdpdCBhL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYyBiL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYwppbmRleCBmOGUwY2JkLi42ZjU1M2UxIDEwMDY0NAotLS0gYS9mcy9ocHBmcy9ocHBmc19rZXJuLmMKKysrIGIvZnMvaHBwZnMvaHBwZnNfa2Vybi5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDkxLDcgKzQ5Miw3IEBACiAJCWZkID0gb3Blbl9ob3N0X3NvY2soaG9zdF9maWxlLCAmZmlsdGVyKTsKIAkJaWYoZmQgPiAwKXsKIAkJCWRhdGEtPmNvbnRlbnRzID0gaHBwZnNfZ2V0X2RhdGEoZmQsIGZpbHRlciwKLQkJCQkJCQkmZGF0YS0+cHJvY19maWxlLAorCQkJCQkJCWRhdGEtPnByb2NfZmlsZSwKIAkJCQkJCQlmaWxlLCAmZGF0YS0+bGVuKTsKIAkJCWlmKCFJU19FUlIoZGF0YS0+Y29udGVudHMpKQogCQkJCWRhdGEtPmhvc3RfZmQgPSBmZDsKQEAgLTU0Myw3ICs1NDQsNyBAQAogc3RhdGljIGxvZmZfdCBocHBmc19sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmYsIGludCB3aGVyZSkKIHsKIAlzdHJ1Y3QgaHBwZnNfcHJpdmF0ZSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZmlsZSAqcHJvY19maWxlID0gJmRhdGEtPnByb2NfZmlsZTsKKwlzdHJ1Y3QgZmlsZSAqcHJvY19maWxlID0gZGF0YS0+cHJvY19maWxlOwogCWxvZmZfdCAoKmxsc2Vlaykoc3RydWN0IGZpbGUgKiwgbG9mZl90LCBpbnQpOwogCWxvZmZfdCByZXQ7CiAKQEAgLTU4Niw3ICs1ODcsNyBAQAogc3RhdGljIGludCBocHBmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICplbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewogCXN0cnVjdCBocHBmc19wcml2YXRlICpkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBmaWxlICpwcm9jX2ZpbGUgPSAmZGF0YS0+cHJvY19maWxlOworCXN0cnVjdCBmaWxlICpwcm9jX2ZpbGUgPSBkYXRhLT5wcm9jX2ZpbGU7CiAJaW50ICgqcmVhZGRpcikoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGlyX3QpOwogCXN0cnVjdCBocHBmc19kaXJlbnQgZGlyZW50ID0gKChzdHJ1Y3QgaHBwZnNfZGlyZW50KQogCQkgICAgICAgICAgICAgICAgICAgICAgeyAudmZzX2RpcmVudCAgCT0gZW50LApkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggMWY5YTNhMi4uNmQ2OTUwMyAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogICogaW5vZGUgd2hlbiB0aGUgdXNhZ2UgY291bnQgZHJvcHMgdG8gemVybywgYW5kCiAgKiBpX25saW5rIGlzIHplcm8uCiAgKi8KLXN0YXRpYyB2b2lkIGdlbmVyaWNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQordm9pZCBnZW5lcmljX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpZiAoIWlub2RlLT5pX25saW5rKQogCQlnZW5lcmljX2RlbGV0ZV9pbm9kZShpbm9kZSk7CkBAIC0xMDYwLDYgKzEwNjAsOCBAQAogCQlnZW5lcmljX2ZvcmdldF9pbm9kZShpbm9kZSk7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfZHJvcF9pbm9kZSk7CisKIC8qCiAgKiBDYWxsZWQgd2hlbiB3ZSdyZSBkcm9wcGluZyB0aGUgbGFzdCByZWZlcmVuY2UKICAqIHRvIGFuIGlub2RlLiAKZGlmZiAtLWdpdCBhL2ZzL2lvcHJpby5jIGIvZnMvaW9wcmlvLmMKaW5kZXggNjYzZTQyMC4uOTdlMWYwOCAxMDA2NDQKLS0tIGEvZnMvaW9wcmlvLmMKKysrIGIvZnMvaW9wcmlvLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotYXNtbGlua2FnZSBpbnQgc3lzX2lvcHJpb19zZXQoaW50IHdoaWNoLCBpbnQgd2hvLCBpbnQgaW9wcmlvKQorYXNtbGlua2FnZSBsb25nIHN5c19pb3ByaW9fc2V0KGludCB3aGljaCwgaW50IHdobywgaW50IGlvcHJpbykKIHsKIAlpbnQgY2xhc3MgPSBJT1BSSU9fUFJJT19DTEFTUyhpb3ByaW8pOwogCWludCBkYXRhID0gSU9QUklPX1BSSU9fREFUQShpb3ByaW8pOwpAQCAtMTE1LDcgKzExNSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotYXNtbGlua2FnZSBpbnQgc3lzX2lvcHJpb19nZXQoaW50IHdoaWNoLCBpbnQgd2hvKQorYXNtbGlua2FnZSBsb25nIHN5c19pb3ByaW9fZ2V0KGludCB3aGljaCwgaW50IHdobykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOwogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IGEwYmMwMzQuLjI5ZmE1ZGEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKKysrIGIvZnMvbG9ja3MuYwpAQCAtMTI3Niw3ICsxMjc2LDcgQEAKICAqLwogc3RhdGljIGludCBfX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBsb25nIGFyZywgc3RydWN0IGZpbGVfbG9jayAqKmZscCkKIHsKLQlzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgKipiZWZvcmUsICoqbXlfYmVmb3JlID0gTlVMTCwgKmxlYXNlID0gKmZscDsKKwlzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgKipiZWZvcmUsICoqbXlfYmVmb3JlID0gTlVMTCwgKmxlYXNlOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJaW50IGVycm9yLCByZGxlYXNlX2NvdW50ID0gMCwgd3JsZWFzZV9jb3VudCA9IDA7CkBAIC0xMjg3LDYgKzEyODcsOCBAQAogCWlmICghZmxwIHx8ICEoKmZscCkgfHwgISgqZmxwKS0+ZmxfbG1vcHMgfHwgISgqZmxwKS0+ZmxfbG1vcHMtPmZsX2JyZWFrKQogCQlnb3RvIG91dDsKIAorCWxlYXNlID0gKmZscDsKKwogCWVycm9yID0gLUVBR0FJTjsKIAlpZiAoKGFyZyA9PSBGX1JETENLKSAmJiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpID4gMCkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZmE4ZGY4MS4uMWQ5M2NiNCAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIHZvaWQgcGF0aF9yZWxlYXNlX29uX3Vtb3VudChzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAlkcHV0KG5kLT5kZW50cnkpOwotCV9tbnRwdXQobmQtPm1udCk7CisJbW50cHV0X25vX2V4cGlyZShuZC0+bW50KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggMjA4YzA3OS4uNTg3ZWIwZCAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJm1udC0+bW50X2NoaWxkKTsKIAkJSU5JVF9MSVNUX0hFQUQoJm1udC0+bW50X21vdW50cyk7CiAJCUlOSVRfTElTVF9IRUFEKCZtbnQtPm1udF9saXN0KTsKLQkJSU5JVF9MSVNUX0hFQUQoJm1udC0+bW50X2ZzbGluayk7CisJCUlOSVRfTElTVF9IRUFEKCZtbnQtPm1udF9leHBpcmUpOwogCQlpZiAobmFtZSkgewogCQkJaW50IHNpemUgPSBzdHJsZW4obmFtZSkrMTsKIAkJCWNoYXIgKm5ld25hbWUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwpAQCAtMTY1LDggKzE2NSw4IEBACiAJCS8qIHN0aWNrIHRoZSBkdXBsaWNhdGUgbW91bnQgb24gdGhlIHNhbWUgZXhwaXJ5IGxpc3QKIAkJICogYXMgdGhlIG9yaWdpbmFsIGlmIHRoYXQgd2FzIG9uIG9uZSAqLwogCQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwotCQlpZiAoIWxpc3RfZW1wdHkoJm9sZC0+bW50X2ZzbGluaykpCi0JCQlsaXN0X2FkZCgmbW50LT5tbnRfZnNsaW5rLCAmb2xkLT5tbnRfZnNsaW5rKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZvbGQtPm1udF9leHBpcmUpKQorCQkJbGlzdF9hZGQoJm1udC0+bW50X2V4cGlyZSwgJm9sZC0+bW50X2V4cGlyZSk7CiAJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAl9CiAJcmV0dXJuIG1udDsKQEAgLTM0NSwxMiArMzQ1LDEzIEBACiAJZm9yIChwID0gbW50OyBwOyBwID0gbmV4dF9tbnQocCwgbW50KSkgewogCQlsaXN0X2RlbCgmcC0+bW50X2xpc3QpOwogCQlsaXN0X2FkZCgmcC0+bW50X2xpc3QsICZraWxsKTsKKwkJcC0+bW50X25hbWVzcGFjZSA9IE5VTEw7CiAJfQogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZraWxsKSkgewogCQltbnQgPSBsaXN0X2VudHJ5KGtpbGwubmV4dCwgc3RydWN0IHZmc21vdW50LCBtbnRfbGlzdCk7CiAJCWxpc3RfZGVsX2luaXQoJm1udC0+bW50X2xpc3QpOwotCQlsaXN0X2RlbF9pbml0KCZtbnQtPm1udF9mc2xpbmspOworCQlsaXN0X2RlbF9pbml0KCZtbnQtPm1udF9leHBpcmUpOwogCQlpZiAobW50LT5tbnRfcGFyZW50ID09IG1udCkgewogCQkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogCQl9IGVsc2UgewpAQCAtNjQ0LDcgKzY0NSw3IEBACiAJaWYgKG1udCkgewogCQkvKiBzdG9wIGJpbmQgbW91bnRzIGZyb20gZXhwaXJpbmcgKi8KIAkJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKLQkJbGlzdF9kZWxfaW5pdCgmbW50LT5tbnRfZnNsaW5rKTsKKwkJbGlzdF9kZWxfaW5pdCgmbW50LT5tbnRfZXhwaXJlKTsKIAkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogCiAJCWVyciA9IGdyYWZ0X3RyZWUobW50LCBuZCk7CkBAIC03NDMsNyArNzQ0LDcgQEAKIAogCS8qIGlmIHRoZSBtb3VudCBpcyBtb3ZlZCwgaXQgc2hvdWxkIG5vIGxvbmdlciBiZSBleHBpcmUKIAkgKiBhdXRvbWF0aWNhbGx5ICovCi0JbGlzdF9kZWxfaW5pdCgmb2xkX25kLm1udC0+bW50X2ZzbGluayk7CisJbGlzdF9kZWxfaW5pdCgmb2xkX25kLm1udC0+bW50X2V4cGlyZSk7CiBvdXQyOgogCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIG91dDE6CkBAIC04MDcsMTIgKzgwOCwxMyBAQAogCQlnb3RvIHVubG9jazsKIAogCW5ld21udC0+bW50X2ZsYWdzID0gbW50X2ZsYWdzOworCW5ld21udC0+bW50X25hbWVzcGFjZSA9IGN1cnJlbnQtPm5hbWVzcGFjZTsKIAllcnIgPSBncmFmdF90cmVlKG5ld21udCwgbmQpOwogCiAJaWYgKGVyciA9PSAwICYmIGZzbGlzdCkgewogCQkvKiBhZGQgdG8gdGhlIHNwZWNpZmllZCBleHBpcmF0aW9uIGxpc3QgKi8KIAkJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmbmV3bW50LT5tbnRfZnNsaW5rLCBmc2xpc3QpOworCQlsaXN0X2FkZF90YWlsKCZuZXdtbnQtPm1udF9leHBpcmUsIGZzbGlzdCk7CiAJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAl9CiAKQEAgLTgyNCw2ICs4MjYsNTQgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZG9fYWRkX21vdW50KTsKIAorc3RhdGljIHZvaWQgZXhwaXJlX21vdW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgbGlzdF9oZWFkICptb3VudHMpCit7CisJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKworCS8qCisJICogQ2hlY2sgaWYgbW91bnQgaXMgc3RpbGwgYXR0YWNoZWQsIGlmIG5vdCwgbGV0IHdob2V2ZXIgaG9sZHMgaXQgZGVhbAorCSAqIHdpdGggdGhlIHN1Y2tlcgorCSAqLworCWlmIChtbnQtPm1udF9wYXJlbnQgPT0gbW50KSB7CisJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogQ2hlY2sgdGhhdCBpdCBpcyBzdGlsbCBkZWFkOiB0aGUgY291bnQgc2hvdWxkIG5vdyBiZSAyIC0gYXMKKwkgKiBjb250cmlidXRlZCBieSB0aGUgdmZzbW91bnQgcGFyZW50IGFuZCB0aGUgbW50Z2V0IGFib3ZlCisJICovCisJaWYgKGF0b21pY19yZWFkKCZtbnQtPm1udF9jb3VudCkgPT0gMikgeworCQlzdHJ1Y3QgbmFtZWlkYXRhIG9sZF9uZDsKKworCQkvKiBkZWxldGUgZnJvbSB0aGUgbmFtZXNwYWNlICovCisJCWxpc3RfZGVsX2luaXQoJm1udC0+bW50X2xpc3QpOworCQltbnQtPm1udF9uYW1lc3BhY2UgPSBOVUxMOworCQlkZXRhY2hfbW50KG1udCwgJm9sZF9uZCk7CisJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJcGF0aF9yZWxlYXNlKCZvbGRfbmQpOworCisJCS8qCisJCSAqIE5vdyBsYXkgaXQgdG8gcmVzdCBpZiB0aGlzIHdhcyB0aGUgbGFzdCByZWYgb24gdGhlIHN1cGVyYmxvY2sKKwkJICovCisJCWlmIChhdG9taWNfcmVhZCgmbW50LT5tbnRfc2ItPnNfYWN0aXZlKSA9PSAxKSB7CisJCQkvKiBsYXN0IGluc3RhbmNlIC0gdHJ5IHRvIGJlIHNtYXJ0ICovCisJCQlsb2NrX2tlcm5lbCgpOworCQkJRFFVT1RfT0ZGKG1udC0+bW50X3NiKTsKKwkJCWFjY3RfYXV0b19jbG9zZShtbnQtPm1udF9zYik7CisJCQl1bmxvY2tfa2VybmVsKCk7CisJCX0KKwkJbW50cHV0KG1udCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogU29tZW9uZSBicm91Z2h0IGl0IGJhY2sgdG8gbGlmZSB3aGlsc3Qgd2UgZGlkbid0IGhhdmUgYW55CisJCSAqIGxvY2tzIGhlbGQgc28gcmV0dXJuIGl0IHRvIHRoZSBleHBpcmF0aW9uIGxpc3QKKwkJICovCisJCWxpc3RfYWRkX3RhaWwoJm1udC0+bW50X2V4cGlyZSwgbW91bnRzKTsKKwkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOworCX0KK30KKwogLyoKICAqIHByb2Nlc3MgYSBsaXN0IG9mIGV4cGlyYWJsZSBtb3VudHBvaW50cyB3aXRoIHRoZSBpbnRlbnQgb2YgZGlzY2FyZGluZyBhbnkKICAqIG1vdW50cG9pbnRzIHRoYXQgYXJlbid0IGluIHVzZSBhbmQgaGF2ZW4ndCBiZWVuIHRvdWNoZWQgc2luY2UgbGFzdCB3ZSBjYW1lCkBAIC04NDYsMTMgKzg5NiwxMyBAQAogCSAqIC0gc3RpbGwgbWFya2VkIGZvciBleHBpcnkgKG1hcmtlZCBvbiB0aGUgbGFzdCBjYWxsIGhlcmU7IG1hcmtzIGFyZQogCSAqICAgY2xlYXJlZCBieSBtbnRwdXQoKSkKIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW50LCBuZXh0LCBtb3VudHMsIG1udF9mc2xpbmspIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW50LCBuZXh0LCBtb3VudHMsIG1udF9leHBpcmUpIHsKIAkJaWYgKCF4Y2hnKCZtbnQtPm1udF9leHBpcnlfbWFyaywgMSkgfHwKIAkJICAgIGF0b21pY19yZWFkKCZtbnQtPm1udF9jb3VudCkgIT0gMSkKIAkJCWNvbnRpbnVlOwogCiAJCW1udGdldChtbnQpOwotCQlsaXN0X21vdmUoJm1udC0+bW50X2ZzbGluaywgJmdyYXZleWFyZCk7CisJCWxpc3RfbW92ZSgmbW50LT5tbnRfZXhwaXJlLCAmZ3JhdmV5YXJkKTsKIAl9CiAKIAkvKgpAQCAtODYyLDYxICs5MTIsMTkgQEAKIAkgKiAtIGRpc3Bvc2Ugb2YgdGhlIGNvcnBzZQogCSAqLwogCXdoaWxlICghbGlzdF9lbXB0eSgmZ3JhdmV5YXJkKSkgewotCQltbnQgPSBsaXN0X2VudHJ5KGdyYXZleWFyZC5uZXh0LCBzdHJ1Y3QgdmZzbW91bnQsIG1udF9mc2xpbmspOwotCQlsaXN0X2RlbF9pbml0KCZtbnQtPm1udF9mc2xpbmspOworCQltbnQgPSBsaXN0X2VudHJ5KGdyYXZleWFyZC5uZXh0LCBzdHJ1Y3QgdmZzbW91bnQsIG1udF9leHBpcmUpOworCQlsaXN0X2RlbF9pbml0KCZtbnQtPm1udF9leHBpcmUpOwogCiAJCS8qIGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBuYW1lc3BhY2UgaXMgZGVhZCAtIGFsbCB0aGUKIAkJICogdmZzbW91bnRzIGZyb20gaXQgYXJlIGdvaW5nIGF3YXkgYW55d2F5ICovCiAJCW5hbWVzcGFjZSA9IG1udC0+bW50X25hbWVzcGFjZTsKLQkJaWYgKCFuYW1lc3BhY2UgfHwgYXRvbWljX3JlYWQoJm5hbWVzcGFjZS0+Y291bnQpIDw9IDApCisJCWlmICghbmFtZXNwYWNlIHx8ICFuYW1lc3BhY2UtPnJvb3QpCiAJCQljb250aW51ZTsKIAkJZ2V0X25hbWVzcGFjZShuYW1lc3BhY2UpOwogCiAJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAkJZG93bl93cml0ZSgmbmFtZXNwYWNlLT5zZW0pOwotCQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwotCi0JCS8qIGNoZWNrIHRoYXQgaXQgaXMgc3RpbGwgZGVhZDogdGhlIGNvdW50IHNob3VsZCBub3cgYmUgMiAtIGFzCi0JCSAqIGNvbnRyaWJ1dGVkIGJ5IHRoZSB2ZnNtb3VudCBwYXJlbnQgYW5kIHRoZSBtbnRnZXQgYWJvdmUgKi8KLQkJaWYgKGF0b21pY19yZWFkKCZtbnQtPm1udF9jb3VudCkgPT0gMikgewotCQkJc3RydWN0IHZmc21vdW50ICp4ZG1udDsKLQkJCXN0cnVjdCBkZW50cnkgKnhkZW50cnk7Ci0KLQkJCS8qIGRlbGV0ZSBmcm9tIHRoZSBuYW1lc3BhY2UgKi8KLQkJCWxpc3RfZGVsX2luaXQoJm1udC0+bW50X2xpc3QpOwotCQkJbGlzdF9kZWxfaW5pdCgmbW50LT5tbnRfY2hpbGQpOwotCQkJbGlzdF9kZWxfaW5pdCgmbW50LT5tbnRfaGFzaCk7Ci0JCQltbnQtPm1udF9tb3VudHBvaW50LT5kX21vdW50ZWQtLTsKLQotCQkJeGRlbnRyeSA9IG1udC0+bW50X21vdW50cG9pbnQ7Ci0JCQltbnQtPm1udF9tb3VudHBvaW50ID0gbW50LT5tbnRfcm9vdDsKLQkJCXhkbW50ID0gbW50LT5tbnRfcGFyZW50OwotCQkJbW50LT5tbnRfcGFyZW50ID0gbW50OwotCi0JCQlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7Ci0KLQkJCW1udHB1dCh4ZG1udCk7Ci0JCQlkcHV0KHhkZW50cnkpOwotCi0JCQkvKiBub3cgbGF5IGl0IHRvIHJlc3QgaWYgdGhpcyB3YXMgdGhlIGxhc3QgcmVmIG9uIHRoZQotCQkJICogc3VwZXJibG9jayAqLwotCQkJaWYgKGF0b21pY19yZWFkKCZtbnQtPm1udF9zYi0+c19hY3RpdmUpID09IDEpIHsKLQkJCQkvKiBsYXN0IGluc3RhbmNlIC0gdHJ5IHRvIGJlIHNtYXJ0ICovCi0JCQkJbG9ja19rZXJuZWwoKTsKLQkJCQlEUVVPVF9PRkYobW50LT5tbnRfc2IpOwotCQkJCWFjY3RfYXV0b19jbG9zZShtbnQtPm1udF9zYik7Ci0JCQkJdW5sb2NrX2tlcm5lbCgpOwotCQkJfQotCi0JCQltbnRwdXQobW50KTsKLQkJfSBlbHNlIHsKLQkJCS8qIHNvbWVvbmUgYnJvdWdodCBpdCBiYWNrIHRvIGxpZmUgd2hpbHN0IHdlIGRpZG4ndAotCQkJICogaGF2ZSBhbnkgbG9ja3MgaGVsZCBzbyByZXR1cm4gaXQgdG8gdGhlIGV4cGlyYXRpb24KLQkJCSAqIGxpc3QgKi8KLQkJCWxpc3RfYWRkX3RhaWwoJm1udC0+bW50X2ZzbGluaywgbW91bnRzKTsKLQkJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKLQkJfQotCisJCWV4cGlyZV9tb3VudChtbnQsIG1vdW50cyk7CiAJCXVwX3dyaXRlKCZuYW1lc3BhY2UtPnNlbSk7CiAKIAkJbW50cHV0KG1udCk7CkBAIC0xNDQ5LDE2ICsxNDU3LDEyIEBACiAKIHZvaWQgX19wdXRfbmFtZXNwYWNlKHN0cnVjdCBuYW1lc3BhY2UgKm5hbWVzcGFjZSkKIHsKLQlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKLQorCXN0cnVjdCB2ZnNtb3VudCAqcm9vdCA9IG5hbWVzcGFjZS0+cm9vdDsKKwluYW1lc3BhY2UtPnJvb3QgPSBOVUxMOworCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAlkb3duX3dyaXRlKCZuYW1lc3BhY2UtPnNlbSk7CiAJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobW50LCAmbmFtZXNwYWNlLT5saXN0LCBtbnRfbGlzdCkgewotCQltbnQtPm1udF9uYW1lc3BhY2UgPSBOVUxMOwotCX0KLQotCXVtb3VudF90cmVlKG5hbWVzcGFjZS0+cm9vdCk7CisJdW1vdW50X3RyZWUocm9vdCk7CiAJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogCXVwX3dyaXRlKCZuYW1lc3BhY2UtPnNlbSk7CiAJa2ZyZWUobmFtZXNwYWNlKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHByb2MuYyBiL2ZzL25mc2QvbmZzNHByb2MuYwppbmRleCBkNzFmMTQ1Li5lMDhlZGMxIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnM0cHJvYy5jCkBAIC0xNjksMTIgKzE2OSw2IEBACiAJCShpbnQpb3Blbi0+b3BfZm5hbWUubGVuLCBvcGVuLT5vcF9mbmFtZS5kYXRhLAogCQlvcGVuLT5vcF9zdGF0ZW93bmVyKTsKIAotCWlmIChuZnM0X2luX2dyYWNlKCkgJiYgb3Blbi0+b3BfY2xhaW1fdHlwZSAhPSBORlM0X09QRU5fQ0xBSU1fUFJFVklPVVMpCi0JCXJldHVybiBuZnNlcnJfZ3JhY2U7Ci0KLQlpZiAoIW5mczRfaW5fZ3JhY2UoKSAmJiBvcGVuLT5vcF9jbGFpbV90eXBlID09IE5GUzRfT1BFTl9DTEFJTV9QUkVWSU9VUykKLQkJcmV0dXJuIG5mc2Vycl9ub19ncmFjZTsKLQogCS8qIFRoaXMgY2hlY2sgcmVxdWlyZWQgYnkgc3BlYy4gKi8KIAlpZiAob3Blbi0+b3BfY3JlYXRlICYmIG9wZW4tPm9wX2NsYWltX3R5cGUgIT0gTkZTNF9PUEVOX0NMQUlNX05VTEwpCiAJCXJldHVybiBuZnNlcnJfaW52YWw7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRyZWNvdmVyLmMgYi9mcy9uZnNkL25mczRyZWNvdmVyLmMKaW5kZXggMDk1ZjE3NC4uNTdlZDUwZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCisrKyBiL2ZzL25mc2QvbmZzNHJlY292ZXIuYwpAQCAtMTE5LDI1ICsxMTksMTIgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50Ci1uZnNkNF9yZWNfZnN5bmMoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIHZvaWQKK25mc2Q0X3N5bmNfcmVjX2Rpcih2b2lkKQogewotCXN0cnVjdCBmaWxlICpmaWxwOwotCWludCBzdGF0dXMgPSBuZnNfb2s7Ci0KLQlkcHJpbnRrKCJORlNEOiBuZnM0X2ZzeW5jX3JlY19kaXJcbiIpOwotCWZpbHAgPSBkZW50cnlfb3BlbihkZ2V0KGRlbnRyeSksIG1udGdldChyZWNfZGlyLm1udCksIE9fUkRXUik7Ci0JaWYgKElTX0VSUihmaWxwKSkgewotCQlzdGF0dXMgPSBQVFJfRVJSKGZpbHApOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGZpbHAtPmZfb3AgJiYgZmlscC0+Zl9vcC0+ZnN5bmMpCi0JCXN0YXR1cyA9IGZpbHAtPmZfb3AtPmZzeW5jKGZpbHAsIGZpbHAtPmZfZGVudHJ5LCAwKTsKLQlmcHV0KGZpbHApOwotb3V0OgotCWlmIChzdGF0dXMpCi0JCXByaW50aygibmZzZDQ6IHVuYWJsZSB0byBzeW5jIHJlY292ZXJ5IGRpcmVjdG9yeVxuIik7Ci0JcmV0dXJuIHN0YXR1czsKKwlkb3duKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCW5mc2Rfc3luY19kaXIocmVjX2Rpci5kZW50cnkpOworCXVwKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOwogfQogCiBpbnQKQEAgLTE3Niw3ICsxNjMsNyBAQAogCXVwKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOwogCWlmIChzdGF0dXMgPT0gMCkgewogCQljbHAtPmNsX2ZpcnN0c3RhdGUgPSAxOwotCQlzdGF0dXMgPSBuZnNkNF9yZWNfZnN5bmMocmVjX2Rpci5kZW50cnkpOworCQluZnNkNF9zeW5jX3JlY19kaXIoKTsKIAl9CiAJbmZzNF9yZXNldF91c2VyKHVpZCwgZ2lkKTsKIAlkcHJpbnRrKCJORlNEOiBuZnNkNF9jcmVhdGVfY2xpZF9kaXIgcmV0dXJucyAlZFxuIiwgc3RhdHVzKTsKQEAgLTMwMiw3ICsyODksOSBAQAogCiAJZHByaW50aygiTkZTRDogbmZzZDRfdW5saW5rX2NsaWRfZGlyLiBuYW1lICUuKnNcbiIsIG5hbWxlbiwgbmFtZSk7CiAKKwlkb3duKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOwogCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHJlY19kaXIuZGVudHJ5LCBuYW1sZW4pOworCXVwKCZyZWNfZGlyLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOwogCWlmIChJU19FUlIoZGVudHJ5KSkgewogCQlzdGF0dXMgPSBQVFJfRVJSKGRlbnRyeSk7CiAJCXJldHVybiBzdGF0dXM7CkBAIC0zMjcsMTEgKzMxNiwxMiBAQAogCWlmICghcmVjX2Rpcl9pbml0IHx8ICFjbHAtPmNsX2ZpcnN0c3RhdGUpCiAJCXJldHVybjsKIAorCWNscC0+Y2xfZmlyc3RzdGF0ZSA9IDA7CiAJbmZzNF9zYXZlX3VzZXIoJnVpZCwgJmdpZCk7CiAJc3RhdHVzID0gbmZzZDRfdW5saW5rX2NsaWRfZGlyKGNscC0+Y2xfcmVjZGlyLCBIRVhESVJfTEVOLTEpOwogCW5mczRfcmVzZXRfdXNlcih1aWQsIGdpZCk7CiAJaWYgKHN0YXR1cyA9PSAwKQotCQlzdGF0dXMgPSBuZnNkNF9yZWNfZnN5bmMocmVjX2Rpci5kZW50cnkpOworCQluZnNkNF9zeW5jX3JlY19kaXIoKTsKIAlpZiAoc3RhdHVzKQogCQlwcmludGsoIk5GU0Q6IEZhaWxlZCB0byByZW1vdmUgZXhwaXJlZCBjbGllbnQgc3RhdGUgZGlyZWN0b3J5IgogCQkJCSIgJS4qc1xuIiwgSEVYRElSX0xFTiwgY2xwLT5jbF9yZWNkaXIpOwpAQCAtMzYyLDcgKzM1Miw3IEBACiAJCXJldHVybjsKIAlzdGF0dXMgPSBuZnNkNF9saXN0X3JlY19kaXIocmVjX2Rpci5kZW50cnksIHB1cmdlX29sZCk7CiAJaWYgKHN0YXR1cyA9PSAwKQotCQlzdGF0dXMgPSBuZnNkNF9yZWNfZnN5bmMocmVjX2Rpci5kZW50cnkpOworCQluZnNkNF9zeW5jX3JlY19kaXIoKTsKIAlpZiAoc3RhdHVzKQogCQlwcmludGsoIm5mc2Q0OiBmYWlsZWQgdG8gcHVyZ2Ugb2xkIGNsaWVudHMgZnJvbSByZWNvdmVyeSIKIAkJCSIgZGlyZWN0b3J5ICVzXG4iLCByZWNfZGlyLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggODllMzY1Mi4uYjgzZjhmYiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC04NzQsNiArODc0LDcgQEAKIAkJCSAgKiBjaGFuZ2UgcmVxdWVzdCBjb3JyZWN0bHkuICovCiAJCQlhdG9taWNfc2V0KCZjb25mLT5jbF9jYWxsYmFjay5jYl9zZXQsIDApOwogCQkJZ2VuX2NvbmZpcm0oY29uZik7CisJCQluZnNkNF9yZW1vdmVfY2xpZF9kaXIodW5jb25mKTsKIAkJCWV4cGlyZV9jbGllbnQodW5jb25mKTsKIAkJCXN0YXR1cyA9IG5mc19vazsKIApAQCAtMTE1OSw2ICsxMTYwLDcgQEAKIAlzdHAtPnN0X2RlbnlfYm1hcCA9IDA7CiAJX19zZXRfYml0KG9wZW4tPm9wX3NoYXJlX2FjY2VzcywgJnN0cC0+c3RfYWNjZXNzX2JtYXApOwogCV9fc2V0X2JpdChvcGVuLT5vcF9zaGFyZV9kZW55LCAmc3RwLT5zdF9kZW55X2JtYXApOworCXN0cC0+c3Rfb3BlbnN0cCA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjk0LDcgKzEyOTYsNyBAQAogCWZwID0gZmluZF9maWxlKGlubyk7CiAJaWYgKCFmcCkKIAkJcmV0dXJuIG5mc19vazsKLQlyZXQgPSBuZnNlcnJfc2hhcmVfZGVuaWVkOworCXJldCA9IG5mc2Vycl9sb2NrZWQ7CiAJLyogU2VhcmNoIGZvciBjb25mbGljdGluZyBzaGFyZSByZXNlcnZhdGlvbnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0cCwgJmZwLT5maV9zdGF0ZWlkcywgc3RfcGVyZmlsZSkgewogCQlpZiAodGVzdF9iaXQoZGVueV90eXBlLCAmc3RwLT5zdF9kZW55X2JtYXApIHx8CkBAIC0xNDgyLDcgKzE0ODQsNyBAQAogCWlmIChzb3ApIHsKIAkJb3Blbi0+b3Bfc3RhdGVvd25lciA9IHNvcDsKIAkJLyogY2hlY2sgZm9yIHJlcGxheSAqLwotCQlpZiAob3Blbi0+b3Bfc2VxaWQgPT0gc29wLT5zb19zZXFpZCl7CisJCWlmIChvcGVuLT5vcF9zZXFpZCA9PSBzb3AtPnNvX3NlcWlkIC0gMSl7CiAJCQlpZiAoc29wLT5zb19yZXBsYXkucnBfYnVmbGVuKQogCQkJCXJldHVybiBORlNFUlJfUkVQTEFZX01FOwogCQkJZWxzZSB7CkBAIC0xNDk3LDcgKzE0OTksNyBAQAogCQkJCWdvdG8gcmVuZXc7CiAJCQl9CiAJCX0gZWxzZSBpZiAoc29wLT5zb19jb25maXJtZWQpIHsKLQkJCWlmIChvcGVuLT5vcF9zZXFpZCA9PSBzb3AtPnNvX3NlcWlkICsgMSkKKwkJCWlmIChvcGVuLT5vcF9zZXFpZCA9PSBzb3AtPnNvX3NlcWlkKQogCQkJCWdvdG8gcmVuZXc7CiAJCQlzdGF0dXMgPSBuZnNlcnJfYmFkX3NlcWlkOwogCQkJZ290byBvdXQ7CkBAIC0xNTMwLDggKzE1MzIsNiBAQAogCXN0YXR1cyA9IG5mc19vazsKIAlyZW5ld19jbGllbnQoc29wLT5zb19jbGllbnQpOwogb3V0OgotCWlmIChzdGF0dXMgJiYgb3Blbi0+b3BfY2xhaW1fdHlwZSA9PSBORlM0X09QRU5fQ0xBSU1fUFJFVklPVVMpCi0JCXN0YXR1cyA9IG5mc2Vycl9yZWNsYWltX2JhZDsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xNjg1LDE5ICsxNjg1LDExIEBACiB9CiAKIAotLyogZGVjcmVtZW50IHNlcWlkIG9uIHN1Y2Nlc3NmdWwgcmVjbGFpbSwgaXQgd2lsbCBiZSBidW1wZWQgaW4gZW5jb2RlX29wZW4gKi8KIHN0YXRpYyB2b2lkCi1uZnM0X3NldF9jbGFpbV9wcmV2KHN0cnVjdCBuZnNkNF9vcGVuICpvcGVuLCBpbnQgKnN0YXR1cykKK25mczRfc2V0X2NsYWltX3ByZXYoc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pCiB7Ci0JaWYgKG9wZW4tPm9wX2NsYWltX3R5cGUgPT0gTkZTNF9PUEVOX0NMQUlNX1BSRVZJT1VTKSB7Ci0JCWlmICgqc3RhdHVzKQotCQkJKnN0YXR1cyA9IG5mc2Vycl9yZWNsYWltX2JhZDsKLQkJZWxzZSB7Ci0JCQlvcGVuLT5vcF9zdGF0ZW93bmVyLT5zb19jb25maXJtZWQgPSAxOwotCQkJb3Blbi0+b3Bfc3RhdGVvd25lci0+c29fY2xpZW50LT5jbF9maXJzdHN0YXRlID0gMTsKLQkJCW9wZW4tPm9wX3N0YXRlb3duZXItPnNvX3NlcWlkLS07Ci0JCX0KLQl9CisJb3Blbi0+b3Bfc3RhdGVvd25lci0+c29fY29uZmlybWVkID0gMTsKKwlvcGVuLT5vcF9zdGF0ZW93bmVyLT5zb19jbGllbnQtPmNsX2ZpcnN0c3RhdGUgPSAxOwogfQogCiAvKgpAQCAtMTc4OSw2ICsxNzgxLDEyIEBACiAJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAgPSBOVUxMOwogCWludCBzdGF0dXM7CiAKKwlpZiAobmZzNF9pbl9ncmFjZSgpICYmIG9wZW4tPm9wX2NsYWltX3R5cGUgIT0gTkZTNF9PUEVOX0NMQUlNX1BSRVZJT1VTKQorCQlyZXR1cm4gbmZzZXJyX2dyYWNlOworCisJaWYgKCFuZnM0X2luX2dyYWNlKCkgJiYgb3Blbi0+b3BfY2xhaW1fdHlwZSA9PSBORlM0X09QRU5fQ0xBSU1fUFJFVklPVVMpCisJCXJldHVybiBuZnNlcnJfbm9fZ3JhY2U7CisKIAlzdGF0dXMgPSBuZnNlcnJfaW52YWw7CiAJaWYgKCFURVNUX0FDQ0VTUyhvcGVuLT5vcF9zaGFyZV9hY2Nlc3MpIHx8ICFURVNUX0RFTlkob3Blbi0+b3Bfc2hhcmVfZGVueSkpCiAJCWdvdG8gb3V0OwpAQCAtMTgyMyw2ICsxODIxLDcgQEAKIAkJc3RhdHVzID0gbmZzNF91cGdyYWRlX29wZW4ocnFzdHAsIGN1cnJlbnRfZmgsIHN0cCwgb3Blbik7CiAJCWlmIChzdGF0dXMpCiAJCQlnb3RvIG91dDsKKwkJdXBkYXRlX3N0YXRlaWQoJnN0cC0+c3Rfc3RhdGVpZCk7CiAJfSBlbHNlIHsKIAkJLyogU3RhdGVpZCB3YXMgbm90IGZvdW5kLCB0aGlzIGlzIGEgbmV3IE9QRU4gKi8KIAkJaW50IGZsYWdzID0gMDsKQEAgLTE4NTYsOCArMTg1NSw4IEBACiBvdXQ6CiAJaWYgKGZwKQogCQlwdXRfbmZzNF9maWxlKGZwKTsKLQkvKiBDTEFJTV9QUkVWSU9VUyBoYXMgZGlmZmVyZW50IGVycm9yIHJldHVybnMgKi8KLQluZnM0X3NldF9jbGFpbV9wcmV2KG9wZW4sICZzdGF0dXMpOworCWlmIChzdGF0dXMgPT0gMCAmJiBvcGVuLT5vcF9jbGFpbV90eXBlID09IE5GUzRfT1BFTl9DTEFJTV9QUkVWSU9VUykKKwkJbmZzNF9zZXRfY2xhaW1fcHJldihvcGVuKTsKIAkvKgogCSogVG8gZmluaXNoIHRoZSBvcGVuIHJlc3BvbnNlLCB3ZSBqdXN0IG5lZWQgdG8gc2V0IHRoZSByZmxhZ3MuCiAJKi8KQEAgLTE5OTAsMTQgKzE5ODksMTEgQEAKIAlxdWV1ZV9kZWxheWVkX3dvcmsobGF1bmRyeV93cSwgJmxhdW5kcm9tYXRfd29yaywgdCpIWik7CiB9CiAKLS8qIHNlYXJjaCBvd25lcmlkX2hhc2h0YmxbXSBhbmQgY2xvc2VfbHJ1IGZvciBzdGF0ZWlkIG93bmVyCi0gKiAoc3RhdGVpZC0+c2lfc3RhdGVvd25lcmlkKQotICovCiBzdGF0aWMgc3RydWN0IG5mczRfc3RhdGVvd25lciAqCi1maW5kX29wZW5zdGF0ZW93bmVyX2lkKHUzMiBzdF9pZCwgaW50IGZsYWdzKSB7CitzZWFyY2hfY2xvc2VfbHJ1KHUzMiBzdF9pZCwgaW50IGZsYWdzKQorewogCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKmxvY2FsID0gTlVMTDsKIAotCWRwcmludGsoIk5GU0Q6IGZpbmRfb3BlbnN0YXRlb3duZXJfaWQgJWRcbiIsIHN0X2lkKTsKIAlpZiAoZmxhZ3MgJiBDTE9TRV9TVEFURSkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2FsLCAmY2xvc2VfbHJ1LCBzb19jbG9zZV9scnUpIHsKIAkJCWlmIChsb2NhbC0+c29faWQgPT0gc3RfaWQpCkBAIC0yMTYzLDE0ICsyMTU5LDE5IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK3NldGxrZmxnIChpbnQgdHlwZSkKK3sKKwlyZXR1cm4gKHR5cGUgPT0gTkZTNF9SRUFEV19MVCB8fCB0eXBlID09IE5GUzRfUkVBRF9MVCkgPworCQlSRF9TVEFURSA6IFdSX1NUQVRFOworfQogCiAvKiAKICAqIENoZWNrcyBmb3Igc2VxdWVuY2UgaWQgbXV0YXRpbmcgb3BlcmF0aW9ucy4gCiAgKi8KIHN0YXRpYyBpbnQKLW5mczRfcHJlcHJvY2Vzc19zZXFpZF9vcChzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCB1MzIgc2VxaWQsIHN0YXRlaWRfdCAqc3RhdGVpZCwgaW50IGZsYWdzLCBzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICoqc29wcCwgc3RydWN0IG5mczRfc3RhdGVpZCAqKnN0cHAsIGNsaWVudGlkX3QgKmxvY2tjbGlkKQorbmZzNF9wcmVwcm9jZXNzX3NlcWlkX29wKHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHUzMiBzZXFpZCwgc3RhdGVpZF90ICpzdGF0ZWlkLCBpbnQgZmxhZ3MsIHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKipzb3BwLCBzdHJ1Y3QgbmZzNF9zdGF0ZWlkICoqc3RwcCwgc3RydWN0IG5mc2Q0X2xvY2sgKmxvY2spCiB7Ci0JaW50IHN0YXR1czsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZWlkICpzdHA7CiAJc3RydWN0IG5mczRfc3RhdGVvd25lciAqc29wOwogCkBAIC0yMTc4LDUzICsyMTc5LDY1IEBACiAJCQkic3RhdGVpZCA9ICglMDh4LyUwOHgvJTA4eC8lMDh4KVxuIiwgc2VxaWQsCiAJCXN0YXRlaWQtPnNpX2Jvb3QsIHN0YXRlaWQtPnNpX3N0YXRlb3duZXJpZCwgc3RhdGVpZC0+c2lfZmlsZWlkLAogCQlzdGF0ZWlkLT5zaV9nZW5lcmF0aW9uKTsKLQkJCSAgICAgICAgCisKIAkqc3RwcCA9IE5VTEw7CiAJKnNvcHAgPSBOVUxMOwogCi0Jc3RhdHVzID0gbmZzZXJyX2JhZF9zdGF0ZWlkOwogCWlmIChaRVJPX1NUQVRFSUQoc3RhdGVpZCkgfHwgT05FX1NUQVRFSUQoc3RhdGVpZCkpIHsKIAkJcHJpbnRrKCJORlNEOiBwcmVwcm9jZXNzX3NlcWlkX29wOiBtYWdpYyBzdGF0ZWlkIVxuIik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gbmZzZXJyX2JhZF9zdGF0ZWlkOwogCX0KIAotCXN0YXR1cyA9IG5mc2Vycl9zdGFsZV9zdGF0ZWlkOwogCWlmIChTVEFMRV9TVEFURUlEKHN0YXRlaWQpKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIG5mc2Vycl9zdGFsZV9zdGF0ZWlkOwogCS8qCiAJKiBXZSByZXR1cm4gQkFEX1NUQVRFSUQgaWYgZmlsZWhhbmRsZSBkb2Vzbid0IG1hdGNoIHN0YXRlaWQsIAogCSogdGhlIGNvbmZpcm1lZCBmbGFnIGlzIGluY29ycmVjbHkgc2V0LCBvciB0aGUgZ2VuZXJhdGlvbiAKIAkqIG51bWJlciBpcyBpbmNvcnJlY3QuICAKLQkqIElmIHRoZXJlIGlzIG5vIGVudHJ5IGluIHRoZSBvcGVuZmlsZSB0YWJsZSBmb3IgdGhpcyBpZCwgCi0JKiB3ZSBjYW4ndCBhbHdheXMgcmV0dXJuIEJBRF9TVEFURUlEOwotCSogdGhpcyBtaWdodCBiZSBhIHJldHJhbnNtaXR0ZWQgQ0xPU0Ugd2hpY2ggaGFzIGFycml2ZWQgYWZ0ZXIgCi0JKiB0aGUgb3BlbmZpbGUgaGFzIGJlZW4gcmVsZWFzZWQuCiAJKi8KLQlpZiAoIShzdHAgPSBmaW5kX3N0YXRlaWQoc3RhdGVpZCwgZmxhZ3MpKSkKLQkJZ290byBub19uZnM0X3N0YXRlaWQ7CisJc3RwID0gZmluZF9zdGF0ZWlkKHN0YXRlaWQsIGZsYWdzKTsKKwlpZiAoc3RwID09IE5VTEwpIHsKKwkJLyoKKwkJICogQWxzbywgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGp1c3QgdGhlIHJlc3VsdCBvZgorCQkgKiBhIHJlcGxheWVkIGNsb3NlOgorCQkgKi8KKwkJc29wID0gc2VhcmNoX2Nsb3NlX2xydShzdGF0ZWlkLT5zaV9zdGF0ZW93bmVyaWQsIGZsYWdzKTsKKwkJaWYgKHNvcCA9PSBOVUxMKQorCQkJcmV0dXJuIG5mc2Vycl9iYWRfc3RhdGVpZDsKKwkJKnNvcHAgPSBzb3A7CisJCWdvdG8gY2hlY2tfcmVwbGF5OworCX0KIAotCXN0YXR1cyA9IG5mc2Vycl9iYWRfc3RhdGVpZDsKLQotCS8qIGZvciBuZXcgbG9jayBzdGF0ZW93bmVyczoKLQkgKiBjaGVjayB0aGF0IHRoZSBsb2NrLT52Lm5ldy5vcGVuX3N0YXRlaWQKLQkgKiByZWZlcnMgdG8gYW4gb3BlbiBzdGF0ZW93bmVyCi0JICoKLQkgKiBjaGVjayB0aGF0IHRoZSBsb2NrY2xpZCAobmZzNF9sb2NrLT52Lm5ldy5jbGllbnRpZCkgaXMgdGhlIHNhbWUKLQkgKiBhcyB0aGUgb3Blbl9zdGF0ZWlkLT5zdF9zdGF0ZW93bmVyLT5zb19jbGllbnQtPmNsaWVudGlkCi0JICovCi0JaWYgKGxvY2tjbGlkKSB7CisJaWYgKGxvY2spIHsKIAkJc3RydWN0IG5mczRfc3RhdGVvd25lciAqc29wID0gc3RwLT5zdF9zdGF0ZW93bmVyOworCQljbGllbnRpZF90ICpsb2NrY2xpZCA9ICZsb2NrLT52Lm5ldy5jbGllbnRpZDsKIAkJc3RydWN0IG5mczRfY2xpZW50ICpjbHAgPSBzb3AtPnNvX2NsaWVudDsKKwkJaW50IGxrZmxnID0gMDsKKwkJaW50IHN0YXR1czsKIAotCQlpZiAoIXNvcC0+c29faXNfb3Blbl9vd25lcikKLQkJCWdvdG8gb3V0OwotCQlpZiAoIWNtcF9jbGlkKCZjbHAtPmNsX2NsaWVudGlkLCBsb2NrY2xpZCkpCi0JCQlnb3RvIG91dDsKKwkJbGtmbGcgPSBzZXRsa2ZsZyhsb2NrLT5sa190eXBlKTsKKworCQlpZiAobG9jay0+bGtfaXNfbmV3KSB7CisgICAgICAgICAgICAgICAgICAgICAgIGlmICghc29wLT5zb19pc19vcGVuX293bmVyKQorCQkJICAgICAgIHJldHVybiBuZnNlcnJfYmFkX3N0YXRlaWQ7CisgICAgICAgICAgICAgICAgICAgICAgIGlmICghY21wX2NsaWQoJmNscC0+Y2xfY2xpZW50aWQsIGxvY2tjbGlkKSkKKwkJCSAgICAgICByZXR1cm4gbmZzZXJyX2JhZF9zdGF0ZWlkOworICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHAgaXMgdGhlIG9wZW4gc3RhdGVpZCAqLworICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBuZnM0X2NoZWNrX29wZW5tb2RlKHN0cCwgbGtmbGcpOworICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKQorCQkJICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHAgaXMgdGhlIGxvY2sgc3RhdGVpZCAqLworICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBuZnM0X2NoZWNrX29wZW5tb2RlKHN0cC0+c3Rfb3BlbnN0cCwgbGtmbGcpOworICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKQorCQkJICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICB9CisKIAl9CiAKIAlpZiAoKGZsYWdzICYgQ0hFQ0tfRkgpICYmIG5mczRfY2hlY2tfZmgoY3VycmVudF9maCwgc3RwKSkgewogCQlwcmludGsoIk5GU0Q6IHByZXByb2Nlc3Nfc2VxaWRfb3A6IGZoLXN0YXRlaWQgbWlzbWF0Y2ghXG4iKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiBuZnNlcnJfYmFkX3N0YXRlaWQ7CiAJfQogCiAJKnN0cHAgPSBzdHA7CkBAIC0yMjM1LDYzICsyMjQ4LDQxIEBACiAJKiAgRm9yIHRoZSBtb21lbnQsIHdlIGlnbm9yZSB0aGUgcG9zc2liaWxpdHkgb2YgCiAJKiAgZ2VuZXJhdGlvbiBudW1iZXIgd3JhcGFyb3VuZC4KIAkqLwotCWlmIChzZXFpZCAhPSBzb3AtPnNvX3NlcWlkICsgMSkKKwlpZiAoc2VxaWQgIT0gc29wLT5zb19zZXFpZCkKIAkJZ290byBjaGVja19yZXBsYXk7CiAKLQlpZiAoc29wLT5zb19jb25maXJtZWQpIHsKLQkJaWYgKGZsYWdzICYgQ09ORklSTSkgewotCQkJcHJpbnRrKCJORlNEOiBwcmVwcm9jZXNzX3NlcWlkX29wOiBleHBlY3RlZCB1bmNvbmZpcm1lZCBzdGF0ZW93bmVyIVxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQorCWlmIChzb3AtPnNvX2NvbmZpcm1lZCAmJiBmbGFncyAmIENPTkZJUk0pIHsKKwkJcHJpbnRrKCJORlNEOiBwcmVwcm9jZXNzX3NlcWlkX29wOiBleHBlY3RlZCIKKwkJCQkiIHVuY29uZmlybWVkIHN0YXRlb3duZXIhXG4iKTsKKwkJcmV0dXJuIG5mc2Vycl9iYWRfc3RhdGVpZDsKIAl9Ci0JZWxzZSB7Ci0JCWlmICghKGZsYWdzICYgQ09ORklSTSkpIHsKLQkJCXByaW50aygiTkZTRDogcHJlcHJvY2Vzc19zZXFpZF9vcDogc3RhdGVvd25lciBub3QgY29uZmlybWVkIHlldCFcbiIpOwotCQkJZ290byBvdXQ7Ci0JCX0KKwlpZiAoIXNvcC0+c29fY29uZmlybWVkICYmICEoZmxhZ3MgJiBDT05GSVJNKSkgeworCQlwcmludGsoIk5GU0Q6IHByZXByb2Nlc3Nfc2VxaWRfb3A6IHN0YXRlb3duZXIgbm90IgorCQkJCSIgY29uZmlybWVkIHlldCFcbiIpOworCQlyZXR1cm4gbmZzZXJyX2JhZF9zdGF0ZWlkOwogCX0KIAlpZiAoc3RhdGVpZC0+c2lfZ2VuZXJhdGlvbiA+IHN0cC0+c3Rfc3RhdGVpZC5zaV9nZW5lcmF0aW9uKSB7CiAJCXByaW50aygiTkZTRDogcHJlcHJvY2Vzc19zZXFpZF9vcDogZnV0dXJlIHN0YXRlaWQ/IVxuIik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gbmZzZXJyX2JhZF9zdGF0ZWlkOwogCX0KIAotCXN0YXR1cyA9IG5mc2Vycl9vbGRfc3RhdGVpZDsKIAlpZiAoc3RhdGVpZC0+c2lfZ2VuZXJhdGlvbiA8IHN0cC0+c3Rfc3RhdGVpZC5zaV9nZW5lcmF0aW9uKSB7CiAJCXByaW50aygiTkZTRDogcHJlcHJvY2Vzc19zZXFpZF9vcDogb2xkIHN0YXRlaWQhXG4iKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiBuZnNlcnJfb2xkX3N0YXRlaWQ7CiAJfQotCS8qIFhYWCByZW5ldyB0aGUgY2xpZW50IGxlYXNlIGhlcmUgKi8KLQlzdGF0dXMgPSBuZnNfb2s7Ci0KLW91dDoKLQlyZXR1cm4gc3RhdHVzOwotCi1ub19uZnM0X3N0YXRlaWQ6Ci0KLQkvKgotCSogV2UgZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIGJhZCBzdGF0ZWlkIG9yIGEgcmVwbGF5LCAKLQkqIHN0YXJ0aW5nIGJ5IHRyeWluZyB0byBsb29rIHVwIHRoZSBzdGF0ZW93bmVyLgotCSogSWYgc3RhdGVvd25lciBpcyBub3QgZm91bmQgLSBzdGF0ZWlkIGlzIGJhZC4KLQkqLwotCWlmICghKHNvcCA9IGZpbmRfb3BlbnN0YXRlb3duZXJfaWQoc3RhdGVpZC0+c2lfc3RhdGVvd25lcmlkLCBmbGFncykpKSB7Ci0JCXByaW50aygiTkZTRDogcHJlcHJvY2Vzc19zZXFpZF9vcDogbm8gc3RhdGVvd25lciBvciBuZnM0X3N0YXRlaWQhXG4iKTsKLQkJc3RhdHVzID0gbmZzZXJyX2JhZF9zdGF0ZWlkOwotCQlnb3RvIG91dDsKLQl9Ci0JKnNvcHAgPSBzb3A7CisJcmVuZXdfY2xpZW50KHNvcC0+c29fY2xpZW50KTsKKwlyZXR1cm4gbmZzX29rOwogCiBjaGVja19yZXBsYXk6Ci0JaWYgKHNlcWlkID09IHNvcC0+c29fc2VxaWQpIHsKKwlpZiAoc2VxaWQgPT0gc29wLT5zb19zZXFpZCAtIDEpIHsKIAkJcHJpbnRrKCJORlNEOiBwcmVwcm9jZXNzX3NlcWlkX29wOiByZXRyYW5zbWlzc2lvbj9cbiIpOwogCQkvKiBpbmRpY2F0ZSByZXBsYXkgdG8gY2FsbGluZyBmdW5jdGlvbiAqLwotCQlzdGF0dXMgPSBORlNFUlJfUkVQTEFZX01FOwotCX0gZWxzZSAgewotCQlwcmludGsoIk5GU0Q6IHByZXByb2Nlc3Nfc2VxaWRfb3A6IGJhZCBzZXFpZCAoZXhwZWN0ZWQgJWQsIGdvdCAlZFxuIiwgc29wLT5zb19zZXFpZCArMSwgc2VxaWQpOwotCi0JCSpzb3BwID0gTlVMTDsKLQkJc3RhdHVzID0gbmZzZXJyX2JhZF9zZXFpZDsKKwkJcmV0dXJuIE5GU0VSUl9SRVBMQVlfTUU7CiAJfQotCWdvdG8gb3V0OworCXByaW50aygiTkZTRDogcHJlcHJvY2Vzc19zZXFpZF9vcDogYmFkIHNlcWlkIChleHBlY3RlZCAlZCwgZ290ICVkKVxuIiwKKwkJCXNvcC0+c29fc2VxaWQsIHNlcWlkKTsKKwkqc29wcCA9IE5VTEw7CisJcmV0dXJuIG5mc2Vycl9iYWRfc2VxaWQ7CiB9CiAKIGludApAQCAtMjYwOSw3ICsyNjAwLDYgQEAKICAqIG9jY3VyZWQuIAogICoKICAqIHN0cmhhc2h2YWwgPSBsb2NrX293bmVyc3RyX2hhc2h2YWwgCi0gKiBzb19zZXFpZCA9IGxvY2stPmxrX25ld19sb2NrX3NlcWlkIC0gMTogaXQgZ2V0cyBidW1wZWQgaW4gZW5jb2RlIAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICoKQEAgLTI2MzQsNyArMjYyNCw3IEBACiAJc29wLT5zb19pc19vcGVuX293bmVyID0gMDsKIAlzb3AtPnNvX2lkID0gY3VycmVudF9vd25lcmlkKys7CiAJc29wLT5zb19jbGllbnQgPSBjbHA7Ci0Jc29wLT5zb19zZXFpZCA9IGxvY2stPmxrX25ld19sb2NrX3NlcWlkIC0gMTsKKwlzb3AtPnNvX3NlcWlkID0gbG9jay0+bGtfbmV3X2xvY2tfc2VxaWQ7CiAJc29wLT5zb19jb25maXJtZWQgPSAxOwogCXJwID0gJnNvcC0+c29fcmVwbGF5OwogCXJwLT5ycF9zdGF0dXMgPSBORlNFUlJfU0VSVkVSRkFVTFQ7CkBAIC0yNjY5LDYgKzI2NTksNyBAQAogCXN0cC0+c3RfdmZzX2ZpbGUgPSBvcGVuX3N0cC0+c3RfdmZzX2ZpbGU7IC8qIEZJWE1FIHJlZmNvdW50Pz8gKi8KIAlzdHAtPnN0X2FjY2Vzc19ibWFwID0gb3Blbl9zdHAtPnN0X2FjY2Vzc19ibWFwOwogCXN0cC0+c3RfZGVueV9ibWFwID0gb3Blbl9zdHAtPnN0X2RlbnlfYm1hcDsKKwlzdHAtPnN0X29wZW5zdHAgPSBvcGVuX3N0cDsKIAogb3V0OgogCXJldHVybiBzdHA7CkBAIC0yNjk5LDIyICsyNjkwLDE3IEBACiAJCShsb25nIGxvbmcpIGxvY2stPmxrX29mZnNldCwKIAkJKGxvbmcgbG9uZykgbG9jay0+bGtfbGVuZ3RoKTsKIAotCWlmIChuZnM0X2luX2dyYWNlKCkgJiYgIWxvY2stPmxrX3JlY2xhaW0pCi0JCXJldHVybiBuZnNlcnJfZ3JhY2U7Ci0JaWYgKCFuZnM0X2luX2dyYWNlKCkgJiYgbG9jay0+bGtfcmVjbGFpbSkKLQkJcmV0dXJuIG5mc2Vycl9ub19ncmFjZTsKLQogCWlmIChjaGVja19sb2NrX2xlbmd0aChsb2NrLT5sa19vZmZzZXQsIGxvY2stPmxrX2xlbmd0aCkpCiAJCSByZXR1cm4gbmZzZXJyX2ludmFsOwogCiAJbmZzNF9sb2NrX3N0YXRlKCk7CiAKIAlpZiAobG9jay0+bGtfaXNfbmV3KSB7Ci0JLyoKLQkgKiBDbGllbnQgaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhIG5ldyBsb2Nrb3duZXIuCi0JICogVXNlIG9wZW4gb3duZXIgYW5kIG9wZW4gc3RhdGVpZCB0byBjcmVhdGUgbG9jayBvd25lciBhbmQgbG9jayAKLQkgKiBzdGF0ZWlkLgotCSAqLworCQkvKgorCQkgKiBDbGllbnQgaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhIG5ldyBsb2Nrb3duZXIuCisJCSAqIFVzZSBvcGVuIG93bmVyIGFuZCBvcGVuIHN0YXRlaWQgdG8gY3JlYXRlIGxvY2sgb3duZXIgYW5kCisJCSAqIGxvY2sgc3RhdGVpZC4KKwkJICovCiAJCXN0cnVjdCBuZnM0X3N0YXRlaWQgKm9wZW5fc3RwID0gTlVMTDsKIAkJc3RydWN0IG5mczRfZmlsZSAqZnA7CiAJCQpAQCAtMjcyNCwyMyArMjcxMCwxNCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQkvKiBpcyB0aGUgbmV3IGxvY2sgc2VxaWQgcHJlc2VudGVkIGJ5IHRoZSBjbGllbnQgemVybz8gKi8KLQkJc3RhdHVzID0gbmZzZXJyX2JhZF9zZXFpZDsKLQkJaWYgKGxvY2stPnYubmV3LmxvY2tfc2VxaWQgIT0gMCkKLQkJCWdvdG8gb3V0OwotCiAJCS8qIHZhbGlkYXRlIGFuZCB1cGRhdGUgb3BlbiBzdGF0ZWlkIGFuZCBvcGVuIHNlcWlkICovCiAJCXN0YXR1cyA9IG5mczRfcHJlcHJvY2Vzc19zZXFpZF9vcChjdXJyZW50X2ZoLCAKIAkJCQkgICAgICAgIGxvY2stPmxrX25ld19vcGVuX3NlcWlkLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAmbG9jay0+bGtfbmV3X29wZW5fc3RhdGVpZCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRkggfCBPUEVOX1NUQVRFLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAmb3Blbl9zb3AsICZvcGVuX3N0cCwKLQkJCQkJJmxvY2stPnYubmV3LmNsaWVudGlkKTsKLQkJaWYgKHN0YXR1cykgewotCQkJaWYgKGxvY2stPmxrX3JlY2xhaW0pCi0JCQkJc3RhdHVzID0gbmZzZXJyX3JlY2xhaW1fYmFkOworCQkgICAgICAgICAgICAgICAgICAgICAgICAmb3Blbl9zb3AsICZvcGVuX3N0cCwgbG9jayk7CisJCWlmIChzdGF0dXMpCiAJCQlnb3RvIG91dDsKLQkJfQogCQkvKiBjcmVhdGUgbG9ja293bmVyIGFuZCBsb2NrIHN0YXRlaWQgKi8KIAkJZnAgPSBvcGVuX3N0cC0+c3RfZmlsZTsKIAkJc3RyaGFzaHZhbCA9IGxvY2tfb3duZXJzdHJfaGFzaHZhbChmcC0+ZmlfaW5vZGUsIApAQCAtMjc2Niw3ICsyNzQzLDcgQEAKIAkJCQkgICAgICAgbG9jay0+bGtfb2xkX2xvY2tfc2VxaWQsIAogCQkJCSAgICAgICAmbG9jay0+bGtfb2xkX2xvY2tfc3RhdGVpZCwgCiAJCQkJICAgICAgIENIRUNLX0ZIIHwgTE9DS19TVEFURSwgCi0JCQkJICAgICAgICZsb2NrLT5sa19zdGF0ZW93bmVyLCAmbG9ja19zdHAsIE5VTEwpOworCQkJCSAgICAgICAmbG9jay0+bGtfc3RhdGVvd25lciwgJmxvY2tfc3RwLCBsb2NrKTsKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTI3NzgsNiArMjc1NSwxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlzdGF0dXMgPSBuZnNlcnJfZ3JhY2U7CisJaWYgKG5mczRfaW5fZ3JhY2UoKSAmJiAhbG9jay0+bGtfcmVjbGFpbSkKKwkJZ290byBvdXQ7CisJc3RhdHVzID0gbmZzZXJyX25vX2dyYWNlOworCWlmICghbmZzNF9pbl9ncmFjZSgpICYmIGxvY2stPmxrX3JlY2xhaW0pCisJCWdvdG8gb3V0OworCiAJbG9ja3NfaW5pdF9sb2NrKCZmaWxlX2xvY2spOwogCXN3aXRjaCAobG9jay0+bGtfdHlwZSkgewogCQljYXNlIE5GUzRfUkVBRF9MVDoKQEAgLTI4NDQsMTAgKzI4MjgsMTAgQEAKIG91dF9kZXN0cm95X25ld19zdGF0ZWlkOgogCWlmIChsb2NrLT5sa19pc19uZXcpIHsKIAkJZHByaW50aygiTkZTRDogbmZzZDRfbG9jazogZGVzdHJveSBuZXcgc3RhdGVpZCFcbiIpOwotCS8qCi0JKiBBbiBlcnJvciBlbmNvdW50ZXJlZCBhZnRlciBpbnN0YW50aWF0aW9uIG9mIHRoZSBuZXcKLQkqIHN0YXRlaWQgaGFzIGZvcmNlZCB1cyB0byBkZXN0cm95IGl0LgotCSovCisJCS8qCisJCSAqIEFuIGVycm9yIGVuY291bnRlcmVkIGFmdGVyIGluc3RhbnRpYXRpb24gb2YgdGhlIG5ldworCQkgKiBzdGF0ZWlkIGhhcyBmb3JjZWQgdXMgdG8gZGVzdHJveSBpdC4KKwkJICovCiAJCWlmICghc2VxaWRfbXV0YXRpbmdfZXJyKHN0YXR1cykpCiAJCQlvcGVuX3NvcC0+c29fc2VxaWQtLTsKIApAQCAtMzA4Myw3ICszMDY3LDEyIEBACiAJICogb2YgdGhlIGxvY2tvd25lciBzdGF0ZSByZWxlYXNlZDsgc28gZG9uJ3QgcmVsZWFzZSBhbnkgdW50aWwgYWxsCiAJICogaGF2ZSBiZWVuIGNoZWNrZWQuICovCiAJc3RhdHVzID0gbmZzX29rOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc29wLCAmbWF0Y2hlcywgc29fcGVyY2xpZW50KSB7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZtYXRjaGVzKSkgeworCQlzb3AgPSBsaXN0X2VudHJ5KG1hdGNoZXMubmV4dCwgc3RydWN0IG5mczRfc3RhdGVvd25lciwKKwkJCQkJCQkJc29fcGVyY2xpZW50KTsKKwkJLyogdW5oYXNoX3N0YXRlb3duZXIgZGVsZXRlcyBzb19wZXJjbGllbnQgb25seQorCQkgKiBmb3Igb3Blbm93bmVycy4gKi8KKwkJbGlzdF9kZWwoJnNvcC0+c29fcGVyY2xpZW50KTsKIAkJcmVsZWFzZV9zdGF0ZW93bmVyKHNvcCk7CiAJfQogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0eGRyLmMgYi9mcy9uZnNkL25mczR4ZHIuYwppbmRleCA5MWZiMTcxLi40YzQxNDYzIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczR4ZHIuYworKysgYi9mcy9uZnNkL25mczR4ZHIuYwpAQCAtMTIxMCwxNiArMTIxMCwxNSBAQAogCXNhdmUgPSByZXNwLT5wOwogCiAvKgotICogUm91dGluZSBmb3IgZW5jb2RpbmcgdGhlIHJlc3VsdCBvZiBhCi0gKiAic2VxaWQtbXV0YXRpbmciIE5GU3Y0IG9wZXJhdGlvbi4gIFRoaXMgaXMKLSAqIHdoZXJlIHNlcWlkcyBhcmUgaW5jcmVtZW50ZWQsIGFuZCB0aGUKLSAqIHJlcGxheSBjYWNoZSBpcyBmaWxsZWQuCisgKiBSb3V0aW5lIGZvciBlbmNvZGluZyB0aGUgcmVzdWx0IG9mIGEgInNlcWlkLW11dGF0aW5nIiBORlN2NCBvcGVyYXRpb24uICBUaGlzCisgKiBpcyB3aGVyZSBzZXF1ZW5jZSBpZCdzIGFyZSBpbmNyZW1lbnRlZCwgYW5kIHRoZSByZXBsYXkgY2FjaGUgaXMgZmlsbGVkLgorICogTm90ZSB0aGF0IHdlIGluY3JlbWVudCBzZXF1ZW5jZSBpZCdzIGhlcmUsIGF0IHRoZSBsYXN0IG1vbWVudCwgc28gd2UncmUgc3VyZQorICogd2Uga25vdyB3aGV0aGVyIHRoZSBlcnJvciB0byBiZSByZXR1cm5lZCBpcyBhIHNlcXVlbmNlIGlkIG11dGF0aW5nIGVycm9yLgogICovCiAKICNkZWZpbmUgRU5DT0RFX1NFUUlEX09QX1RBSUwoc3RhdGVvd25lcikgZG8gewkJCVwKIAlpZiAoc2VxaWRfbXV0YXRpbmdfZXJyKG5mc2VycikgJiYgc3RhdGVvd25lcikgeyAJXAotCQlpZiAoc3RhdGVvd25lci0+c29fY29uZmlybWVkKQkJCVwKLQkJCXN0YXRlb3duZXItPnNvX3NlcWlkKys7CQkJXAorCQlzdGF0ZW93bmVyLT5zb19zZXFpZCsrOwkJCQlcCiAJCXN0YXRlb3duZXItPnNvX3JlcGxheS5ycF9zdGF0dXMgPSBuZnNlcnI7ICAgCVwKIAkJc3RhdGVvd25lci0+c29fcmVwbGF5LnJwX2J1ZmxlbiA9IAkJXAogCQkJICAoKChjaGFyICopKHJlc3ApLT5wIC0gKGNoYXIgKilzYXZlKSk7IFwKQEAgLTEzNjcsOSArMTM2Niw5IEBACiAJCWlmICgoYnVmbGVuIC09IDQpIDwgMCkKIAkJCWdvdG8gb3V0X3Jlc291cmNlOwogCQlpZiAoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9OT1NVQlRSRUVDSEVDSykKLQkJCVdSSVRFMzIoTkZTNF9GSF9WT0xBVElMRV9BTlkpOworCQkJV1JJVEUzMihORlM0X0ZIX1BFUlNJU1RFTlQpOwogCQllbHNlCi0JCQlXUklURTMyKE5GUzRfRkhfVk9MQVRJTEVfQU5ZfE5GUzRfRkhfVk9MX1JFTkFNRSk7CisJCQlXUklURTMyKE5GUzRfRkhfUEVSU0lTVEVOVHxORlM0X0ZIX1ZPTF9SRU5BTUUpOwogCX0KIAlpZiAoYm12YWwwICYgRkFUVFI0X1dPUkQwX0NIQU5HRSkgewogCQkvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggYmUyNGVhZC4uNWUwYmYzOTEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtNzMzLDcgKzczMyw3IEBACiAJdXAoJmlub2RlLT5pX3NlbSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBuZnNkX3N5bmNfZGlyKHN0cnVjdCBkZW50cnkgKmRwKQogewogCW5mc2RfZG9zeW5jKE5VTEwsIGRwLCBkcC0+ZF9pbm9kZS0+aV9mb3ApOwpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggMjViYzFlYy4uNmU1N2VlMiAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC04NDAsNyArODQwLDYgQEAKIAltbnQtPm1udF9yb290ID0gZGdldChzYi0+c19yb290KTsKIAltbnQtPm1udF9tb3VudHBvaW50ID0gc2ItPnNfcm9vdDsKIAltbnQtPm1udF9wYXJlbnQgPSBtbnQ7Ci0JbW50LT5tbnRfbmFtZXNwYWNlID0gY3VycmVudC0+bmFtZXNwYWNlOwogCXVwX3dyaXRlKCZzYi0+c191bW91bnQpOwogCWZyZWVfc2VjZGF0YShzZWNkYXRhKTsKIAlwdXRfZmlsZXN5c3RlbSh0eXBlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaAppbmRleCA0MDhhZWE1Li5lMTM5NDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oCkBAIC0xMzIsNiArMTMyLDggQEAKICNkZWZpbmUgX19TMTEwCV9QQUdFX1MoMCkKICNkZWZpbmUgX19TMTExCV9QQUdFX1MoMCkKIAorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCShwcm90KQorCiAvKgogICogQkFEX1BBR0VUQUJMRSBpcyB1c2VkIHdoZW4gd2UgbmVlZCBhIGJvZ3VzIHBhZ2UtdGFibGUsIHdoaWxlCiAgKiBCQURfUEFHRSBpcyB1c2VkIGZvciBhIGJvZ3VzIHBhZ2UuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmgKaW5kZXggNTJkZWQ1MS4uYzBjYWYzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvcGxhdGZvcm0uaApAQCAtMTE1LDYgKzExNSw3IEBACiB9CiAKIHZvaWQgaXhwMjAwMF9tYXBfaW8odm9pZCk7Cit2b2lkIGl4cDIwMDBfdWFydF9pbml0KHZvaWQpOwogdm9pZCBpeHAyMDAwX2luaXRfaXJxKHZvaWQpOwogdm9pZCBpeHAyMDAwX2luaXRfdGltZSh1bnNpZ25lZCBsb25nKTsKIHVuc2lnbmVkIGxvbmcgaXhwMjAwMF9nZXR0aW1lb2Zmc2V0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaAppbmRleCBjMjdiOWQzLi43NDk1MDI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBBdXRob3I6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA1ICBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0zODMsNiArMzgzLDE4MCBAQAogCQkqdmFkZHIrKyA9IGlubChpb19hZGRyKTsKIH0KIAorI2RlZmluZQlfX2lzX2lvX2FkZHJlc3MocCkJKCgodW5zaWduZWQgbG9uZylwID49IDB4MCkgJiYgXAorCQkJCQkoKHVuc2lnbmVkIGxvbmcpcCA8PSAweDAwMDBmZmZmKSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitfX2l4cDR4eF9pb3JlYWQ4KHZvaWQgX19pb21lbSAqcG9ydCkKK3sKKwlpZiAoX19pc19pb19hZGRyZXNzKHBvcnQpKQorCQlyZXR1cm4JKHVuc2lnbmVkIGludClfX2l4cDR4eF9pbmIoKHVuc2lnbmVkIGludClwb3J0KTsKKwllbHNlCisjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCisJCXJldHVybiAodW5zaWduZWQgaW50KV9fcmF3X3JlYWRiKCh1MzIpcG9ydCk7CisjZWxzZQorCQlyZXR1cm4gKHVuc2lnbmVkIGludClfX2l4cDR4eF9yZWFkYigodTMyKXBvcnQpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19peHA0eHhfaW9yZWFkOF9yZXAodTMyIHBvcnQsIHU4ICp2YWRkciwgdTMyIGNvdW50KQoreworCWlmIChfX2lzX2lvX2FkZHJlc3MocG9ydCkpCisJCV9faXhwNHh4X2luc2IocG9ydCwgdmFkZHIsIGNvdW50KTsKKwllbHNlCisjaWZuZGVmCUNPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCisJCV9fcmF3X3JlYWRzYigodm9pZCBfX2lvbWVtICopcG9ydCwgdmFkZHIsIGNvdW50KTsKKyNlbHNlCisJCV9faXhwNHh4X3JlYWRzYihwb3J0LCB2YWRkciwgY291bnQpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitfX2l4cDR4eF9pb3JlYWQxNih2b2lkIF9faW9tZW0gKnBvcnQpCit7CisJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKKwkJcmV0dXJuCSh1bnNpZ25lZCBpbnQpX19peHA0eHhfaW53KCh1bnNpZ25lZCBpbnQpcG9ydCk7CisJZWxzZQorI2lmbmRlZiBDT05GSUdfSVhQNFhYX0lORElSRUNUX1BDSQorCQlyZXR1cm4gbGUxNl90b19jcHUoX19yYXdfcmVhZHcoKHUzMilwb3J0KSk7CisjZWxzZQorCQlyZXR1cm4gKHVuc2lnbmVkIGludClfX2l4cDR4eF9yZWFkdygodTMyKXBvcnQpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19peHA0eHhfaW9yZWFkMTZfcmVwKHUzMiBwb3J0LCB1MTYgKnZhZGRyLCB1MzIgY291bnQpCit7CisJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKKwkJX19peHA0eHhfaW5zdyhwb3J0LCB2YWRkciwgY291bnQpOworCWVsc2UKKyNpZm5kZWYJQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKKwkJX19yYXdfcmVhZHN3KCh2b2lkIF9faW9tZW0gKilwb3J0LCB2YWRkciwgY291bnQpOworI2Vsc2UKKwkJX19peHA0eHhfcmVhZHN3KHBvcnQsIHZhZGRyLCBjb3VudCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK19faXhwNHh4X2lvcmVhZDMyKHZvaWQgX19pb21lbSAqcG9ydCkKK3sKKwlpZiAoX19pc19pb19hZGRyZXNzKHBvcnQpKQorCQlyZXR1cm4JKHVuc2lnbmVkIGludClfX2l4cDR4eF9pbmwoKHVuc2lnbmVkIGludClwb3J0KTsKKwllbHNlIHsKKyNpZm5kZWYgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKKwkJcmV0dXJuIGxlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKCh1MzIpcG9ydCkpOworI2Vsc2UKKwkJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19peHA0eHhfcmVhZGwoKHUzMilwb3J0KTsKKyNlbmRpZgorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX2l4cDR4eF9pb3JlYWQzMl9yZXAodTMyIHBvcnQsIHUzMiAqdmFkZHIsIHUzMiBjb3VudCkKK3sKKwlpZiAoX19pc19pb19hZGRyZXNzKHBvcnQpKQorCQlfX2l4cDR4eF9pbnNsKHBvcnQsIHZhZGRyLCBjb3VudCk7CisJZWxzZQorI2lmbmRlZglDT05GSUdfSVhQNFhYX0lORElSRUNUX1BDSQorCQlfX3Jhd19yZWFkc2woKHZvaWQgX19pb21lbSAqKXBvcnQsIHZhZGRyLCBjb3VudCk7CisjZWxzZQorCQlfX2l4cDR4eF9yZWFkc2wocG9ydCwgdmFkZHIsIGNvdW50KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19faXhwNHh4X2lvd3JpdGU4KHU4IHZhbHVlLCB2b2lkIF9faW9tZW0gKnBvcnQpCit7CisJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKKwkJX19peHA0eHhfb3V0Yih2YWx1ZSwgKHVuc2lnbmVkIGludClwb3J0KTsKKwllbHNlCisjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCisJCV9fcmF3X3dyaXRlYih2YWx1ZSwgKHUzMilwb3J0KTsKKyNlbHNlCisJCV9faXhwNHh4X3dyaXRlYih2YWx1ZSwgKHUzMilwb3J0KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19faXhwNHh4X2lvd3JpdGU4X3JlcCh1MzIgcG9ydCwgdTggKnZhZGRyLCB1MzIgY291bnQpCit7CisJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKKwkJX19peHA0eHhfb3V0c2IocG9ydCwgdmFkZHIsIGNvdW50KTsKKyNpZm5kZWYgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKKwkJX19yYXdfd3JpdGVzYigodm9pZCBfX2lvbWVtICopcG9ydCwgdmFkZHIsIGNvdW50KTsKKyNlbHNlCisJCV9faXhwNHh4X3dyaXRlc2IocG9ydCwgdmFkZHIsIGNvdW50KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19faXhwNHh4X2lvd3JpdGUxNih1MTYgdmFsdWUsIHZvaWQgX19pb21lbSAqcG9ydCkKK3sKKwlpZiAoX19pc19pb19hZGRyZXNzKHBvcnQpKQorCQlfX2l4cDR4eF9vdXR3KHZhbHVlLCAodW5zaWduZWQgaW50KXBvcnQpOworCWVsc2UKKyNpZm5kZWYgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKKwkJX19yYXdfd3JpdGV3KGNwdV90b19sZTE2KHZhbHVlKSwgKHUzMilwb3J0KTsKKyNlbHNlCisJCV9faXhwNHh4X3dyaXRldyh2YWx1ZSwgKHUzMilwb3J0KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19faXhwNHh4X2lvd3JpdGUxNl9yZXAodTMyIHBvcnQsIHUxNiAqdmFkZHIsIHUzMiBjb3VudCkKK3sKKwlpZiAoX19pc19pb19hZGRyZXNzKHBvcnQpKQorCQlfX2l4cDR4eF9vdXRzdyhwb3J0LCB2YWRkciwgY291bnQpOworI2lmbmRlZiBDT05GSUdfSVhQNFhYX0lORElSRUNUX1BDSQorCQlfX3Jhd19yZWFkc3coKHZvaWQgX19pb21lbSAqKXBvcnQsIHZhZGRyLCBjb3VudCk7CisjZWxzZQorCQlfX2l4cDR4eF93cml0ZXN3KHBvcnQsIHZhZGRyLCBjb3VudCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX2l4cDR4eF9pb3dyaXRlMzIodTMyIHZhbHVlLCB2b2lkIF9faW9tZW0gKnBvcnQpCit7CisJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKKwkJX19peHA0eHhfb3V0bCh2YWx1ZSwgKHVuc2lnbmVkIGludClwb3J0KTsKKwllbHNlCisjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCisJCV9fcmF3X3dyaXRlbChjcHVfdG9fbGUzMih2YWx1ZSksICh1MzIpcG9ydCk7CisjZWxzZQorCQlfX2l4cDR4eF93cml0ZWwodmFsdWUsICh1MzIpcG9ydCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX2l4cDR4eF9pb3dyaXRlMzJfcmVwKHUzMiBwb3J0LCB1MzIgKnZhZGRyLCB1MzIgY291bnQpCit7CisJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKKwkJX19peHA0eHhfb3V0c2wocG9ydCwgdmFkZHIsIGNvdW50KTsKKyNpZm5kZWYgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKKwkJX19yYXdfcmVhZHNsKCh2b2lkIF9faW9tZW0gKilwb3J0LCB2YWRkciwgY291bnQpOworI2Vsc2UKKwkJX19peHA0eHhfb3V0c2wocG9ydCwgdmFkZHIsIGNvdW50KTsKKyNlbmRpZgorfQorCisjZGVmaW5lCWlvcmVhZDgocCkJCQlfX2l4cDR4eF9pb3JlYWQ4KHApCisjZGVmaW5lCWlvcmVhZDE2KHApCQkJX19peHA0eHhfaW9yZWFkMTYocCkKKyNkZWZpbmUJaW9yZWFkMzIocCkJCQlfX2l4cDR4eF9pb3JlYWQzMihwKQorCisjZGVmaW5lCWlvcmVhZDhfcmVwKHAsIHYsIGMpCQlfX2l4cDR4eF9pb3JlYWQ4X3JlcChwLCB2LCBjKQorI2RlZmluZQlpb3JlYWQxNl9yZXAocCwgdiwgYykJCV9faXhwNHh4X2lvcmVhZDE2X3JlcChwLCB2LCBjKQorI2RlZmluZQlpb3JlYWQzMl9yZXAocCwgdiwgYykJCV9faXhwNHh4X2lvcmVhZDMyX3JlcChwLCB2LCBjKQorCisjZGVmaW5lCWlvd3JpdGU4KHYscCkJCQlfX2l4cDR4eF9pb3dyaXRlOCh2LHApCisjZGVmaW5lCWlvd3JpdGUxNih2LHApCQkJX19peHA0eHhfaW93cml0ZTE2KHYscCkKKyNkZWZpbmUJaW93cml0ZTMyKHYscCkJCQlfX2l4cDR4eF9pb3dyaXRlMzIodixwKQorCisjZGVmaW5lCWlvd3JpdGU4X3JlcChwLCB2LCBjKQkJX19peHA0eHhfaW93cml0ZThfcmVwKHAsIHYsIGMpCisjZGVmaW5lCWlvd3JpdGUxNl9yZXAocCwgdiwgYykJCV9faXhwNHh4X2lvd3JpdGUxNl9yZXAocCwgdiwgYykKKyNkZWZpbmUJaW93cml0ZTMyX3JlcChwLCB2LCBjKQkJX19peHA0eHhfaW93cml0ZTMyX3JlcChwLCB2LCBjKQorCisjZGVmaW5lCWlvcG9ydF9tYXAocG9ydCwgbnIpCQkoKHZvaWQgX19pb21lbSopcG9ydCkKKyNkZWZpbmUJaW9wb3J0X3VubWFwKGFkZHIpCiAKICNlbmRpZgkvLyAgX19BU01fQVJNX0FSQ0hfSU9fSAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgyLmgKaW5kZXggNjBmMDAyYi4uMzljYTVhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDIuaApAQCAtMzQsMTEgKzM0LDYgQEAKIC8qIEF0IE9NQVAxNjEwIElubm92YXRvciB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLwogI2RlZmluZSBPTUFQMTYxMF9FVEhSX1NUQVJUCQkweDA0MDAwMzAwCiAKLS8qIEludGVsIFNUUkFUQSBOT1IgZmxhc2ggYXQgQ1MzIG9yIENTMkIoTkFORCBCb290KSAqLwotI2RlZmluZSBPTUFQX05PUl9GTEFTSF9TSVpFICAgICAgICAgICAgIFNaXzMyTQotI2RlZmluZSBPTUFQX05PUl9GTEFTSF9TVEFSVDEgICAgICAgICAgIDB4MEMwMDAwMDAgLyogQ1MzICovCi0jZGVmaW5lIE9NQVBfTk9SX0ZMQVNIX1NUQVJUMiAgICAgICAgICAgMHgwQTAwMDAwMCAvKiBDUzJCICovCi0KIC8qIFNhbXN1bmcgTkFORCBmbGFzaCBhdCBDUzJCIG9yIENTMyhOQU5EIEJvb3QpICovCiAjZGVmaW5lIE9NQVBfTkFORF9GTEFTSF9TVEFSVDEgICAgICAgICAgIDB4MEEwMDAwMDAgLyogQ1MyQiAqLwogI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyICAgICAgICAgICAweDBDMDAwMDAwIC8qIENTMyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMy5oCmluZGV4IGU0ZDFjZDIuLjFiMTJjMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgzLmgKQEAgLTMwLDExICszMCw2IEBACiAvKiBJbiBPTUFQMTcxMCBIMyB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLwogI2RlZmluZSBPTUFQMTcxMF9FVEhSX1NUQVJUCQkweDA0MDAwMzAwCiAKLS8qIEludGVsIFNUUkFUQSBOT1IgZmxhc2ggYXQgQ1MzIG9yIENTMkIoTkFORCBCb290KSAqLwotI2RlZmluZSBPTUFQX05PUl9GTEFTSF9TSVpFICAgICAgICAgICAgIFNaXzMyTQotI2RlZmluZSBPTUFQX05PUl9GTEFTSF9TVEFSVDEgCQkweDBDMDAwMDAwIC8qIENTMyAqLwotI2RlZmluZSBPTUFQX05PUl9GTEFTSF9TVEFSVDIgCQkweDBBMDAwMDAwIC8qIENTMkIgKi8KLQogLyogU2Ftc3VuZyBOQU5EIGZsYXNoIGF0IENTMkIgb3IgQ1MzKE5BTkQgQm9vdCkgKi8KICNkZWZpbmUgT01BUF9OQU5EX0ZMQVNIX1NUQVJUMSAgICAgICAgICAgMHgwQTAwMDAwMCAvKiBDUzJCICovCiAjZGVmaW5lIE9NQVBfTkFORF9GTEFTSF9TVEFSVDIgICAgICAgICAgIDB4MEMwMDAwMDAgLyogQ1MzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW9zay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1vc2suaAppbmRleCBhYWE0OWEwLi4yYjFhOGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW9zay5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtb3NrLmgKQEAgLTMyLDEwICszMiw1IEBACiAvKiBBdCBPTUFQNTkxMiBPU0sgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KICNkZWZpbmUgT01BUF9PU0tfRVRIUl9TVEFSVAkJMHgwNDgwMDMwMAogCi0vKiBNaWNyb24gTk9SIGZsYXNoIGF0IENTMyBtYXBwZWQgdG8gYWRkcmVzcyAweDAgaWYgQk0gYml0IGlzIDEgKi8KLSNkZWZpbmUgT01BUF9PU0tfTk9SX0ZMQVNIX0JBU0UJCTB4RDgwMDAwMDAKLSNkZWZpbmUgT01BUF9PU0tfTk9SX0ZMQVNIX1NJWkUJCVNaXzMyTQotI2RlZmluZSBPTUFQX09TS19OT1JfRkxBU0hfU1RBUlQJMHgwMDAwMDAwMAotCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9PU0tfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKaW5kZXggMWNlZmQ2MC4uOTViZDYyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQuaApAQCAtMTYsMTAgKzE2LDExIEBACiAvKiBEaWZmZXJlbnQgcGVyaXBoZXJhbCBpZHMgKi8KICNkZWZpbmUgT01BUF9UQUdfQ0xPQ0sJCTB4NGYwMQogI2RlZmluZSBPTUFQX1RBR19NTUMJCTB4NGYwMgotI2RlZmluZSBPTUFQX1RBR19VQVJUCQkweDRmMDMKKyNkZWZpbmUgT01BUF9UQUdfU0VSSUFMX0NPTlNPTEUgMHg0ZjAzCiAjZGVmaW5lIE9NQVBfVEFHX1VTQgkJMHg0ZjA0CiAjZGVmaW5lIE9NQVBfVEFHX0xDRAkJMHg0ZjA1CiAjZGVmaW5lIE9NQVBfVEFHX0dQSU9fU1dJVENICTB4NGYwNgorI2RlZmluZSBPTUFQX1RBR19VQVJUCQkweDRmMDcKIAogI2RlZmluZSBPTUFQX1RBR19CT09UX1JFQVNPTiAgICAweDRmODAKICNkZWZpbmUgT01BUF9UQUdfRkxBU0hfUEFSVAkweDRmODEKQEAgLTM1LDcgKzM2LDcgQEAKIAlzMTYgbW1jMV9zd2l0Y2hfcGluLCBtbWMyX3N3aXRjaF9waW47CiB9OwogCi1zdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyB7CitzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcgewogCXU4IGNvbnNvbGVfdWFydDsKIAl1MzIgY29uc29sZV9zcGVlZDsKIH07CkBAIC04Miw3ICs4Myw4IEBACiAgKi8KICNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9UWVBFX0NPVkVSCQkweDAwMDAKICNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9UWVBFX0NPTk5FQ1RJT04JMHgwMDAxCi0jZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfRkxBR19JTlZFUlRFRCAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9GTEFHX0lOVkVSVEVECQkweDAwMDEKKyNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9GTEFHX09VVFBVVAkJMHgwMDAyCiBzdHJ1Y3Qgb21hcF9ncGlvX3N3aXRjaF9jb25maWcgewogCWNoYXIgbmFtZVsxMl07CiAJdTE2IGdwaW87CkBAIC05OSw2ICsxMDEsMTAgQEAKIAljaGFyIHJlYXNvbl9zdHJbMTJdOwogfTsKIAorc3RydWN0IG9tYXBfdWFydF9jb25maWcgeworCS8qIEJpdCBmaWVsZCBvZiBVQVJUcyBwcmVzZW50OyBiaXQgMCAtLT4gVUFSVDEgKi8KKwl1bnNpZ25lZCBpbnQgZW5hYmxlZF91YXJ0czsKK307CiAKIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19lbnRyeSB7CiAJdTE2IHRhZzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcC9jb21tb24uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY29tbW9uLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwL2NvbW1vbi5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oCmluZGV4IDlmNjI4NTguLjJhNjc2YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcC9jb21tb24uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9jb21tb24uaAorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jb21tb24uaAogICoKICAqIEhlYWRlciBmb3IgY29kZSBjb21tb24gdG8gYWxsIE9NQVAgbWFjaGluZXMuCiAgKgpAQCAtMjksNyArMjksNyBAQAogCiBzdHJ1Y3Qgc3lzX3RpbWVyOwogCi1leHRlcm4gdm9pZCBvbWFwX21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7CiBleHRlcm4gdm9pZCBvbWFwX3NlcmlhbF9pbml0KGludCBwb3J0c1tdKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKaW5kZXggZDc4NTI0OC4uY2UxMTRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCkBAIC0yNDEsNiArMjQxLDcgQEAKIGV4dGVybiBkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpOwogZXh0ZXJuIGRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX2RzdF9wb3MoaW50IGxjaCk7CiBleHRlcm4gdm9pZCBvbWFwX2NsZWFyX2RtYShpbnQgbGNoKTsKK2V4dGVybiBpbnQgb21hcF9kbWFfcnVubmluZyh2b2lkKTsKIAogLyogUmV0dXJucyAxIGlmIHRoZSBETUEgbW9kdWxlIGlzIGluIE9NQVAxNTEwLWNvbXBhdGlibGUgbW9kZSwgMCBvdGhlcndpc2UgKi8KIGV4dGVybiBpbnQgb21hcF9kbWFfaW5fMTUxMF9tb2RlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCmluZGV4IDM3ZTA2YzcuLjQ4MjU4YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKQEAgLTU0LDYgKzU0LDE5IEBACiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaW1lcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQX01QVV9USU1FUjFfQkFTRQkoMHhmZmZlYzUwMCkKKyNkZWZpbmUgT01BUF9NUFVfVElNRVIyX0JBU0UJKDB4ZmZmZWM2MDApCisjZGVmaW5lIE9NQVBfTVBVX1RJTUVSM19CQVNFCSgweGZmZmVjNzAwKQorI2RlZmluZSBNUFVfVElNRVJfRlJFRQkJKDEgPDwgNikKKyNkZWZpbmUgTVBVX1RJTUVSX0NMT0NLX0VOQUJMRQkoMSA8PCA1KQorI2RlZmluZSBNUFVfVElNRVJfQVIJCSgxIDw8IDEpCisjZGVmaW5lIE1QVV9USU1FUl9TVAkJKDEgPDwgMCkKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENsb2NrcwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCkBAIC03OCw2ICs5MSw3IEBACiAKIC8qIERTUCBjbG9jayBjb250cm9sICovCiAjZGVmaW5lIERTUF9DT05GSUdfUkVHX0JBU0UgICAgICgweGUxMDA4MDAwKQorI2RlZmluZSBEU1BfQ0tDVEwJCShEU1BfQ09ORklHX1JFR19CQVNFICsgMHgwKQogI2RlZmluZSBEU1BfSURMRUNUMQkJKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDQpCiAjZGVmaW5lIERTUF9JRExFQ1QyCQkoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4OCkKIApAQCAtODgsNiArMTAyLDcgQEAKICAqLwogI2RlZmluZSBVTFBEX1JFR19CQVNFCQkoMHhmZmZlMDgwMCkKICNkZWZpbmUgVUxQRF9JVF9TVEFUVVMJCShVTFBEX1JFR19CQVNFICsgMHgxNCkKKyNkZWZpbmUgVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zCShVTFBEX1JFR19CQVNFICsgMHgyNCkKICNkZWZpbmUgVUxQRF9DTE9DS19DVFJMCQkoVUxQRF9SRUdfQkFTRSArIDB4MzApCiAjCWRlZmluZSBESVNfVVNCX1BWQ0lfQ0xLCQkoMSA8PCA1KQkvKiBubyBVU0IvRkFDIHN5bmNoICovCiAjCWRlZmluZSBVU0JfTUNMS19FTgkJKDEgPDwgNCkJLyogZW5hYmxlIFc0X1VTQl9DTEtPICovCkBAIC0yNjgsMTcgKzI4MywxMCBAQAogICogUHJvY2Vzc29yIHNwZWNpZmljIGRlZmluZXMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorCiAjaW5jbHVkZSAib21hcDczMC5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAogI2luY2x1ZGUgIm9tYXAxNTEwLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiAjaW5jbHVkZSAib21hcDE2eHguaCIKLSNlbmRpZgogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCmluZGV4IDY3MDFmZDkuLjBkMDVhN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCkBAIC0xNTksNiArMTU5LDcgQEAKICNkZWZpbmUgSU5UXzE2MTBfR1BJT19CQU5LMwkoNDEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfTU1DMgkJKDQyICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX0NGCQkoNDMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfV0FLRV9VUF9SRVEJKDQ2ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX0dQSU9fQkFOSzQJKDQ4ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX1NQSQkJKDQ5ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDYJKDUzICsgSUgyX0JBU0UpCkBAIC0yMzgsNiArMjM5LDggQEAKICNkZWZpbmUgSUhfTVBVSU9fQkFTRQkJKE9NQVBfTUFYX0dQSU9fTElORVMgKyBJSF9HUElPX0JBU0UpCiAjZGVmaW5lIElIX0JPQVJEX0JBU0UJCSgxNiArIElIX01QVUlPX0JBU0UpCiAKKyNkZWZpbmUgT01BUF9JUlFfQklUKGlycSkJKDEgPDwgKChpcnEpICUgMzIpKQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHZvaWQgb21hcF9pbml0X2lycSh2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKaW5kZXggMzlmOTlkZS4uNWJkM2YwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlKMTlfMTYxMF9FVE1fRDYsCiAJSjE4XzE2MTBfRVRNX0Q3LAogCi0JLyogT01BUC0xNjEwIEdQSU8gKi8KKwkvKiBPTUFQMTZYWCBHUElPICovCiAJUDIwXzE2MTBfR1BJTzQsCiAJVjlfMTYxMF9HUElPNywKIAlXOF8xNjEwX0dQSU85LApAQCAtMjQxLDYgKzI0MSw5IEBACiAJQUEyMF8xNjEwX0dQSU9fNDEsCiAJVzE5XzE2MTBfR1BJTzQ4LAogCU03XzE2MTBfR1BJTzYyLAorCVYxNF8xNlhYX0dQSU8zNywKKwlSOV8xNlhYX0dQSU8xOCwKKwlMMTRfMTZYWF9HUElPNDksCiAKIAkvKiBPTUFQLTE2MTAgdVdpcmUgKi8KIAlWMTlfMTYxMF9VV0lSRV9TQ0xLLApAQCAtMjg1LDEyICsyODgsMTMgQEAKIAlWNl9VU0IyX1RYRCwKIAlXNV9VU0IyX1NFMCwKIAotCS8qIFVBUlQxIDE2MTAgKi8KLQorCS8qIDE2WFggVUFSVCAqLwogCVIxM18xNjEwX1VBUlQxX1RYLAotCVYxNF8xNjEwX1VBUlQxX1JYLAorCVYxNF8xNlhYX1VBUlQxX1JYLAogCVIxNF8xNjEwX1VBUlQxX0NUUywKIAlBQTE1XzE2MTBfVUFSVDFfUlRTLAorCVI5XzE2WFhfVUFSVDJfUlgsCisJTDE0XzE2WFhfVUFSVDNfUlgsCiAKIAkvKiBJMkMgT01BUC0xNjEwICovCiAJSTJDX1NDTCwKQEAgLTMzMiw3ICszMzYsNyBAQAogICogVGFibGUgb2YgdmFyaW91cyBGVU5DX01VWCBhbmQgUFVMTF9EV04gY29tYmluYXRpb25zIGZvciBlYWNoIGRldmljZS4KICAqIFNlZSBhbHNvIHJlZ19jZmdfdCBhYm92ZSBmb3IgdGhlIGxvb2t1cCB0YWJsZS4KICAqLwotc3RhdGljIHJlZ19jZmdfc2V0IF9faW5pdGRhdGFfb3JfbW9kdWxlCitzdGF0aWMgY29uc3QgcmVnX2NmZ19zZXQgX19pbml0ZGF0YV9vcl9tb2R1bGUKIHJlZ19jZmdfdGFibGVbXSA9IHsKIC8qCiAgKgkgZGVzY3JpcHRpb24JCW11eCAgbW9kZSAgIG11eAkgcHVsbCBwdWxsICBwdWxsICBwdV9wZAkgcHUgIGRiZwpAQCAtNDU1LDcgKzQ1OSw3IEBACiBNVVhfQ0ZHKCJKMTlfMTYxMF9FVE1fRDYiLAkgNSwgICAgMCwgICAgMSwJICAwLCAgMjAsICAgMCwJICAwLAkgMCwgIDEpCiBNVVhfQ0ZHKCJKMThfMTYxMF9FVE1fRDciLAkgNSwgICAyNywgICAgMSwJICAwLCAgMTksICAgMCwJICAwLAkgMCwgIDEpCiAKLS8qIE9NQVAtMTYxMCBHUElPICovCisvKiBPTUFQMTZYWCBHUElPICovCiBNVVhfQ0ZHKCJQMjBfMTYxMF9HUElPNCIsCSA2LCAgIDI3LCAgICAwLAkgIDEsICAgNywgICAwLAkgIDEsCSAxLCAgMSkKIE1VWF9DRkcoIlY5XzE2MTBfR1BJTzciLAkgQiwgICAxMiwgICAgMSwJICAyLCAgMjAsICAgMCwJICAyLAkgMSwgIDEpCiBNVVhfQ0ZHKCJXOF8xNjEwX0dQSU85IiwJIEIsICAgMjEsICAgIDAsCSAgMiwgIDIzLCAgIDAsCSAgMiwJIDEsICAxKQpAQCAtNDY1LDYgKzQ2OSw5IEBACiBNVVhfQ0ZHKCJBQTIwXzE2MTBfR1BJT180MSIsCSA5LCAgICA5LCAgICA3LAkgIDEsICAzMSwgICAwLAkgIDEsCSAxLCAgMSkKIE1VWF9DRkcoIlcxOV8xNjEwX0dQSU80OCIsCSA4LCAgIDE1LCAgICA3LCAgIDEsICAyMywgICAxLCAgICAxLCAgICAgMCwgIDEpCiBNVVhfQ0ZHKCJNN18xNjEwX0dQSU82MiIsCTEwLCAgICAwLCAgICAwLCAgIDQsICAyNCwgICAwLCAgICA0LCAgICAgMCwgIDEpCitNVVhfQ0ZHKCJWMTRfMTZYWF9HUElPMzciLAkgOSwgICAxOCwgICAgNywJICAyLCAgIDIsICAgMCwJICAyLAkgMiwgIDApCitNVVhfQ0ZHKCJSOV8xNlhYX0dQSU8xOCIsCSBDLCAgIDE4LCAgICA3LCAgIDMsICAgMCwgICAwLCAgICAzLCAgICAgMCwgIDApCitNVVhfQ0ZHKCJMMTRfMTZYWF9HUElPNDkiLAkgNiwgICAgMywgICAgNywgICAwLCAgMzEsICAgMCwgICAgMCwgICAgMzEsICAwKQogCiAvKiBPTUFQLTE2MTAgdVdpcmUgKi8KIE1VWF9DRkcoIlYxOV8xNjEwX1VXSVJFX1NDTEsiLAkgOCwgICAgNiwgICAgMCwJICAxLCAgMjAsICAgMCwJICAxLAkgMSwgIDEpCkBAIC01MDMsMTYgKzUxMCwxNyBAQAogTVVYX0NGRygiVzlfVVNCMl9UWEVOIiwJCSBCLCAgIDksICAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKIE1VWF9DRkcoIkFBOV9VU0IyX1ZQIiwJCSBCLCAgIDYsICAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKIE1VWF9DRkcoIlk1X1VTQjJfUkNWIiwJCSBDLCAgMjEsICAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlI4X1VTQjJfVk0iLAkJIEMsICAxOCwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjlfVVNCMl9WTSIsCQkgQywgIDE4LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCiBNVVhfQ0ZHKCJWNl9VU0IyX1RYRCIsCQkgQywgIDI3LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCiBNVVhfQ0ZHKCJXNV9VU0IyX1NFMCIsCQkgQywgIDI0LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCiAKLQotLyogVUFSVDEgKi8KKy8qIDE2WFggVUFSVCAqLwogTVVYX0NGRygiUjEzXzE2MTBfVUFSVDFfVFgiLAkgQSwgIDEyLCAgICAgNiwJICAyLCAgMTAsICAgMCwJICAyLAkxMCwgIDEpCi1NVVhfQ0ZHKCJWMTRfMTYxMF9VQVJUMV9SWCIsCSA5LCAgMTgsICAgICAwLAkgIDIsICAgMiwgICAwLAkgIDIsCSAyLCAgMSkKK01VWF9DRkcoIlYxNF8xNlhYX1VBUlQxX1JYIiwJIDksICAxOCwgICAgIDAsCSAgMiwgICAyLCAgIDAsCSAgMiwJIDIsICAxKQogTVVYX0NGRygiUjE0XzE2MTBfVUFSVDFfQ1RTIiwJIDksICAxNSwgICAgIDAsCSAgMiwgICAxLCAgIDAsCSAgMiwJIDEsICAxKQogTVVYX0NGRygiQUExNV8xNjEwX1VBUlQxX1JUUyIsCSA5LCAgMTIsICAgICAxLAkgIDIsICAgMCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlI5XzE2WFhfVUFSVDJfUlgiLAkgQywgIDE4LCAgICAgMCwgICAzLCAgIDAsICAgMCwgICAgMywgICAgIDAsICAxKQorTVVYX0NGRygiTDE0XzE2WFhfVUFSVDNfUlgiLAkgNiwgICAzLCAgICAgMCwgICAwLCAgMzEsICAgMCwgICAgMCwgICAgMzEsICAxKQogCiAvKiBJMkMgaW50ZXJmYWNlICovCiBNVVhfQ0ZHKCJJMkNfU0NMIiwJCSA3LCAgMjQsICAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE2eHguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE2eHguaAppbmRleCA4OGIxZmU0Li4zOGE5Yjk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNnh4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTZ4eC5oCkBAIC0xODMsNSArMTgzLDM3IEBACiAjZGVmaW5lIE9NQVAxNlhYX1BXTF9FTkFCTEUJKE9NQVAxNlhYX1BXTF9CQVNFICsgMHgwMCkKICNkZWZpbmUgT01BUDE2WFhfUFdMX0NMS19FTkFCTEUJKE9NQVAxNlhYX1BXTF9CQVNFICsgMHgwNCkKIAorLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV2F0Y2hkb2cgdGltZXIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIDMyLWJpdCBXYXRjaGRvZyB0aW1lciBpbiBPTUFQIDE2WFggKi8KKyNkZWZpbmUgT01BUF8xNlhYX1dBVENIRE9HX0JBU0UgICAgICAgICgweGZmZmViMDAwKQorI2RlZmluZSBPTUFQXzE2WFhfV0lEUiAgICAgICAgIChPTUFQXzE2WFhfV0FUQ0hET0dfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVBfMTZYWF9XRF9TWVNDT05GSUcgKE9NQVBfMTZYWF9XQVRDSERPR19CQVNFICsgMHgxMCkKKyNkZWZpbmUgT01BUF8xNlhYX1dEX1NZU1NUQVRVUyAoT01BUF8xNlhYX1dBVENIRE9HX0JBU0UgKyAweDE0KQorI2RlZmluZSBPTUFQXzE2WFhfV0NMUiAgICAgICAgIChPTUFQXzE2WFhfV0FUQ0hET0dfQkFTRSArIDB4MjQpCisjZGVmaW5lIE9NQVBfMTZYWF9XQ1JSICAgICAgICAgKE9NQVBfMTZYWF9XQVRDSERPR19CQVNFICsgMHgyOCkKKyNkZWZpbmUgT01BUF8xNlhYX1dMRFIgICAgICAgICAoT01BUF8xNlhYX1dBVENIRE9HX0JBU0UgKyAweDJjKQorI2RlZmluZSBPTUFQXzE2WFhfV1RHUiAgICAgICAgIChPTUFQXzE2WFhfV0FUQ0hET0dfQkFTRSArIDB4MzApCisjZGVmaW5lIE9NQVBfMTZYWF9XV1BTICAgICAgICAgKE9NQVBfMTZYWF9XQVRDSERPR19CQVNFICsgMHgzNCkKKyNkZWZpbmUgT01BUF8xNlhYX1dTUFIgICAgICAgICAoT01BUF8xNlhYX1dBVENIRE9HX0JBU0UgKyAweDQ4KQorCisjZGVmaW5lIFdDTFJfUFJFX1NISUZUICAgICAgICAgNQorI2RlZmluZSBXQ0xSX1BUVl9TSElGVCAgICAgICAgIDIKKworI2RlZmluZSBXV1BTX1dfUEVORF9XU1BSICAgICAgICgxIDw8IDQpCisjZGVmaW5lIFdXUFNfV19QRU5EX1dUR1IgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgV1dQU19XX1BFTkRfV0xEUiAgICAgICAoMSA8PCAyKQorI2RlZmluZSBXV1BTX1dfUEVORF9XQ1JSICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFdXUFNfV19QRU5EX1dDTFIgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBXU1BSX0VOQUJMRV8wICAgICAgICAgICgweDAwMDBiYmJiKQorI2RlZmluZSBXU1BSX0VOQUJMRV8xICAgICAgICAgICgweDAwMDA0NDQ0KQorI2RlZmluZSBXU1BSX0RJU0FCTEVfMCAgICAgICAgICgweDAwMDBhYWFhKQorI2RlZmluZSBXU1BSX0RJU0FCTEVfMSAgICAgICAgICgweDAwMDA1NTU1KQorCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUDE2WFhfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaAppbmRleCAxN2EyYzQ4Li5mZjM3YmMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKQEAgLTUsNyArNSw5IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CkBAIC0xNCw3ICsxNiwyNCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCiB7Ci0Jb21hcF93cml0ZXcoMSwgQVJNX1JTVENUMSk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAorCS8qCisJICogV29ya2Fyb3VuZCBmb3IgNTkxMi8xNjExYiBidWcgbWVudGlvbmVkIGluIHNwcnoyMDlkLnBkZiBwLiAyOAorCSAqICJHbG9iYWwgU29mdHdhcmUgUmVzZXQgQWZmZWN0cyBUcmFmZmljIENvbnRyb2xsZXIgRnJlcXVlbmN5Ii4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXA1OTEyKCkpIHsKKwkJb21hcF93cml0ZXcob21hcF9yZWFkdyhEUExMX0NUTCkgJiB+KDEgPDwgNCksCisJCQkJIERQTExfQ1RMKTsKKwkJb21hcF93cml0ZXcoMHg4LCBBUk1fUlNUQ1QxKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUFDSF9WT0lDRUJMVUUKKwlpZiAobWFjaGluZV9pc192b2ljZWJsdWUoKSkKKwkJdm9pY2VibHVlX3Jlc2V0KCk7CisJZWxzZQorI2VuZGlmCisJCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDEpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmggYi9pbmNsdWRlL2FzbS1pMzg2L21tem9uZS5oCmluZGV4IDMzY2U1ZDMuLjUxNjQyMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tbXpvbmUuaApAQCAtOCwyMCArOCwxNSBAQAogCiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCi0jaWYgQ09ORklHX05VTUEKKyNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW107CiAjZGVmaW5lIE5PREVfREFUQShuaWQpCShub2RlX2RhdGFbbmlkXSkKIAotI2lmZGVmIENPTkZJR19OVU1BCi0JI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLQkJI2luY2x1ZGUgPGFzbS9udW1hcS5oPgotCSNlbHNlCS8qIHN1bW1pdCBvciBnZW5lcmljIGFyY2ggKi8KLQkJI2luY2x1ZGUgPGFzbS9zcmF0Lmg+Ci0JI2VuZGlmCi0jZWxzZSAvKiAhQ09ORklHX05VTUEgKi8KLQkjZGVmaW5lIGdldF9tZW1jZmdfbnVtYSBnZXRfbWVtY2ZnX251bWFfZmxhdAotCSNkZWZpbmUgZ2V0X3pob2xlc19zaXplKG4pICgwKQotI2VuZGlmIC8qIENPTkZJR19OVU1BICovCisjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQorCSNpbmNsdWRlIDxhc20vbnVtYXEuaD4KKyNlbHNlCS8qIHN1bW1pdCBvciBnZW5lcmljIGFyY2ggKi8KKwkjaW5jbHVkZSA8YXNtL3NyYXQuaD4KKyNlbmRpZgogCiBleHRlcm4gaW50IGdldF9tZW1jZmdfbnVtYV9mbGF0KHZvaWQgKTsKIC8qCkBAIC00Miw2ICszNywxMSBAQAogCWdldF9tZW1jZmdfbnVtYV9mbGF0KCk7CiB9CiAKK2V4dGVybiBpbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7CisKKyNlbHNlIC8qICFDT05GSUdfTlVNQSAqLworI2RlZmluZSBnZXRfbWVtY2ZnX251bWEgZ2V0X21lbWNmZ19udW1hX2ZsYXQKKyNkZWZpbmUgZ2V0X3pob2xlc19zaXplKG4pICgwKQogI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKICNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCkBAIC0xNTEsNiArMTUxLDQgQEAKIAogI2VuZGlmIC8qIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTICovCiAKLWV4dGVybiBpbnQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7Ci0KICNlbmRpZiAvKiBfQVNNX01NWk9ORV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmgKaW5kZXggNmYwZjkzZC4uNWQwNmU2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oCkBAIC02OTQsNCArNjk0LDEyIEBACiBleHRlcm4gdm9pZCBlbmFibGVfc2VwX2NwdSh2b2lkKTsKIGV4dGVybiBpbnQgc3lzZW50ZXJfc2V0dXAodm9pZCk7CiAKKyNpZmRlZiBDT05GSUdfTVRSUgorZXh0ZXJuIHZvaWQgbXRycl9hcF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbXRycl9icF9pbml0KHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgbXRycl9hcF9pbml0KCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIG10cnJfYnBfaW5pdCgpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0FTTV9JMzg2X1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2FyY2guaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCmluZGV4IDYzNWZkY2UuLmFiODI3ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaWZuZGVmIF9BU01fSUE2NF9TTl9BUkNIX0gKICNkZWZpbmUgX0FTTV9JQTY0X1NOX0FSQ0hfSAogCisjaW5jbHVkZSA8bGludXgvbnVtYS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vaW50ci5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9pbnRyLmgKaW5kZXggZTUxNDcxZi4uZTE5MGRkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9pbnRyLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9pbnRyLmgKQEAgLTksNiArOSw4IEBACiAjaWZuZGVmIF9BU01fSUE2NF9TTl9JTlRSX0gKICNkZWZpbmUgX0FTTV9JQTY0X1NOX0lOVFJfSAogCisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKwogI2RlZmluZSBTR0lfVUFSVF9WRUNUT1IJCSgweGU5KQogI2RlZmluZSBTR0lfUENJQlJfRVJST1IJCSgweDMzKQogCkBAIC0zMyw3ICszNSw3IEBACiAKIC8vIFRoZSBTTiBQUk9NIGlycSBzdHJ1Y3QKIHN0cnVjdCBzbl9pcnFfaW5mbyB7Ci0Jc3RydWN0IHNuX2lycV9pbmZvICppcnFfbmV4dDsJLyogc2hhcmluZyBpcnEgbGlzdAkgICAgICovCisJc3RydWN0IHNuX2lycV9pbmZvICppcnFfbmV4dDsJLyogZGVwcmVjYXRlZCBETyBOT1QgVVNFICAgICAqLwogCXNob3J0CQlpcnFfbmFzaWQ7CS8qIE5hc2lkIElSUSBpcyBhc3NpZ25lZCB0byAgKi8KIAlpbnQJCWlycV9zbGljZTsJLyogc2xpY2UgSVJRIGlzIGFzc2lnbmVkIHRvICAqLwogCWludAkJaXJxX2NwdWlkOwkvKiBrZXJuZWwgbG9naWNhbCBjcHVpZAkgICAgICovCkBAIC00Nyw2ICs0OSw4IEBACiAJaW50CQlpcnFfY29va2llOwkvKiB1bmlxdWUgY29va2llIAkgICAgICovCiAJaW50CQlpcnFfZmxhZ3M7CS8qIGZsYWdzICovCiAJaW50CQlpcnFfc2hhcmVfY250OwkvKiBudW0gZGV2aWNlcyBzaGFyaW5nIElSUSAgICovCisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkvKiBsaXN0IG9mIHNuX2lycV9pbmZvIHN0cnVjdHMgKi8KKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsJLyogcmN1IGNhbGxiYWNrIGxpc3QgKi8KIH07CiAKIGV4dGVybiB2b2lkIHNuX3NlbmRfSVBJX3BoeXMoaW50LCBsb25nLCBpbnQsIGludCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vaW5jbHVkZS9wY2kvcGNpYnJfcHJvdmlkZXIuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcGNpYnJfcHJvdmlkZXIuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBhcmNoL2lhNjQvc24vaW5jbHVkZS9wY2kvcGNpYnJfcHJvdmlkZXIuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20taWE2NC9zbi9wY2licl9wcm92aWRlci5oCmluZGV4IDFjZDI5MWQuLmY5YjhkMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3BjaS9wY2licl9wcm92aWRlci5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcGNpYnJfcHJvdmlkZXIuaApAQCAtOCw2ICs4LDkgQEAKICNpZm5kZWYgX0FTTV9JQTY0X1NOX1BDSV9QQ0lCUl9QUk9WSURFUl9ICiAjZGVmaW5lIF9BU01fSUE2NF9TTl9QQ0lfUENJQlJfUFJPVklERVJfSAogCisjaW5jbHVkZSA8YXNtL3NuL2ludHIuaD4KKyNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KKwogLyogV29ya2Fyb3VuZHMgKi8KICNkZWZpbmUgUFY5MDc1MTYgKDEgPDwgMSkgLyogVElPQ1A6IERvbid0IHdyaXRlIHRoZSB3cml0ZSBidWZmZXIgZmx1c2ggcmVnICovCiAKQEAgLTIwLDcgKzIzLDcgQEAKICNkZWZpbmUgSVNfUElDX1NPRlQocHMpICAgICAocHMtPnBiaV9icmlkZ2VfdHlwZSA9PSBQQ0lCUl9CUklER0VUWVBFX1BJQykKIAogCi0vKiAKKy8qCiAgKiBUaGUgZGlmZmVyZW50IFBDSSBCcmlkZ2UgdHlwZXMgc3VwcG9ydGVkIG9uIHRoZSBTR0kgQWx0aXggcGxhdGZvcm1zCiAgKi8KICNkZWZpbmUgUENJQlJfQlJJREdFVFlQRV9VTktOT1dOICAgICAgIC0xCkBAIC0xMDAsMTUgKzEwMywxNiBAQAogCiAJc3RydWN0IGF0ZV9yZXNvdXJjZSAgICAgcGJpX2ludF9hdGVfcmVzb3VyY2U7CiAJdWludDY0X3QgICAgICAgICAgICAgICAgcGJpX2ludF9hdGVfc2l6ZTsKLQkKKwogCXVpbnQ2NF90ICAgICAgICAgICAgICAgIHBiaV9kaXJfeGJhc2U7CiAJY2hhciAgICAgICAgICAgICAgICAgICAgcGJpX2h1Yl94aWQ7CiAKIAl1aW50NjRfdCAgICAgICAgICAgICAgICBwYmlfZGV2cmVnWzhdOwotCXNwaW5sb2NrX3QgICAgICAgICAgICAgIHBiaV9sb2NrOwogCiAJdWludDMyX3QJCXBiaV92YWxpZF9kZXZpY2VzOwogCXVpbnQzMl90CQlwYmlfZW5hYmxlZF9kZXZpY2VzOworCisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgcGJpX2xvY2s7CiB9OwogCiAvKgpAQCAtMTQ4LDQgKzE1Miw4IEBACiBleHRlcm4gaW50IAkJcGNpYnJfYXRlX2FsbG9jKHN0cnVjdCBwY2lidXNfaW5mbyAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgCQlwY2licl9hdGVfZnJlZShzdHJ1Y3QgcGNpYnVzX2luZm8gKiwgaW50KTsKIGV4dGVybiB2b2lkIAkJYXRlX3dyaXRlKHN0cnVjdCBwY2lidXNfaW5mbyAqLCBpbnQsIGludCwgdWludDY0X3QpOworZXh0ZXJuIGludCBzYWxfcGNpYnJfc2xvdF9lbmFibGUoc3RydWN0IHBjaWJ1c19pbmZvICpzb2Z0LCBpbnQgZGV2aWNlLAorCQkJCSB2b2lkICpyZXNwKTsKK2V4dGVybiBpbnQgc2FsX3BjaWJyX3Nsb3RfZGlzYWJsZShzdHJ1Y3QgcGNpYnVzX2luZm8gKnNvZnQsIGludCBkZXZpY2UsCisJCQkJICBpbnQgYWN0aW9uLCB2b2lkICpyZXNwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9wY2lkZXYuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcGNpZGV2LmgKaW5kZXggZWQ0MDMxZC4uNDk3MTFkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9wY2lkZXYuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3BjaWRldi5oCkBAIC0xMCwxMSArMTAsMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCi1leHRlcm4gc3RydWN0IHNuX2lycV9pbmZvICoqc25faXJxOwotCiAjZGVmaW5lIFNOX1BDSURFVl9JTkZPKHBjaV9kZXYpIFwKICAgICAgICAgKChzdHJ1Y3QgcGNpZGV2X2luZm8gKikocGNpX2RldiktPnN5c2RhdGEpCiAKKyNkZWZpbmUgU05fUENJQlVTX0JVU1NPRlRfSU5GTyhwY2lfYnVzKSBcCisJKHN0cnVjdCBwY2lidXNfaW5mbyAqKSgoc3RydWN0IHBjaWJ1c19idXNzb2Z0ICopKFBDSV9DT05UUk9MTEVSKChwY2lfYnVzKSktPnBsYXRmb3JtX2RhdGEpKQogLyoKICAqIEdpdmVuIGEgcGNpX2J1cywgcmV0dXJuIHRoZSBzbiBwY2lidXNfYnVzc29mdCBzdHJ1Y3QuICBOb3RlIHRoYXQKICAqIHRoaXMgb25seSB3b3JrcyBmb3Igcm9vdCBidXNzZXMsIG5vdCBmb3IgYnVzc2VzIHJlcHJlc2VudGVkIGJ5IFBQQidzLgpAQCAtMjMsNiArMjMsOCBAQAogI2RlZmluZSBTTl9QQ0lCVVNfQlVTU09GVChwY2lfYnVzKSBcCiAgICAgICAgICgoc3RydWN0IHBjaWJ1c19idXNzb2Z0ICopKFBDSV9DT05UUk9MTEVSKChwY2lfYnVzKSktPnBsYXRmb3JtX2RhdGEpKQogCisjZGVmaW5lIFNOX1BDSUJVU19CVVNTT0ZUX0lORk8ocGNpX2J1cykgXAorCShzdHJ1Y3QgcGNpYnVzX2luZm8gKikoKHN0cnVjdCBwY2lidXNfYnVzc29mdCAqKShQQ0lfQ09OVFJPTExFUigocGNpX2J1cykpLT5wbGF0Zm9ybV9kYXRhKSkKIC8qCiAgKiBHaXZlbiBhIHN0cnVjdCBwY2lfZGV2LCByZXR1cm4gdGhlIHNuIHBjaWJ1c19idXNzb2Z0IHN0cnVjdC4gIE5vdGUKICAqIHRoYXQgdGhpcyBpcyBub3QgZXF1aXZhbGVudCB0byBTTl9QQ0lCVVNfQlVTU09GVChwY2lfZGV2LT5idXMpIGR1ZQpAQCAtNTAsOSArNTIsMTcgQEAKIAogCXN0cnVjdCBzbl9pcnFfaW5mbwkqcGRpX3NuX2lycV9pbmZvOwogCXN0cnVjdCBzbl9wY2lidXNfcHJvdmlkZXIgKnBkaV9wcm92aWRlcjsJLyogc24gcGNpIG9wcyAqLworCXN0cnVjdCBwY2lfZGV2IAkJKmhvc3RfcGNpX2RldjsJCS8qIGhvc3QgYnVzIGxpbmsgKi8KIH07CiAKIGV4dGVybiB2b2lkIHNuX2lycV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKIAkJCSBzdHJ1Y3Qgc25faXJxX2luZm8gKnNuX2lycV9pbmZvKTsKLQorZXh0ZXJuIHZvaWQgc25faXJxX3VuZml4dXAoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpOworZXh0ZXJuIHZvaWQgc25fcGNpX2NvbnRyb2xsZXJfZml4dXAoaW50IHNlZ21lbnQsIGludCBidXNudW0sCisgCQkJCSAgICBzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK2V4dGVybiB2b2lkIHNuX2J1c19zdG9yZV9zeXNkYXRhKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgc25fYnVzX2ZyZWVfc3lzZGF0YSh2b2lkKTsKK2V4dGVybiB2b2lkIHNuX3BjaV9maXh1cF9zbG90KHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgc25fcGNpX3VuZml4dXBfc2xvdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIHNuX2lycV9saF9pbml0KHZvaWQpOwogI2VuZGlmCQkJCS8qIF9BU01fSUE2NF9TTl9QQ0lfUENJREVWX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3BjaS9waWMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcGljLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9pYTY0L3NuL2luY2x1ZGUvcGNpL3BpYy5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1pYTY0L3NuL3BpYy5oCmluZGV4IGZkMThhY2UuLjBkZTgyZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3BjaS9waWMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3BpYy5oCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBQSUMgaGFuZGxlcyBQQ0kvWCBidXNzZXMuICBQQ0kvWCByZXF1aXJlcyB0aGF0IHRoZSAnYnJpZGdlJyAoaS5lLiBQSUMpCiAgKiBiZSBkZXNpZ25hdGVkIGFzICdkZXZpY2UgMCcuICAgVGhhdCBpcyBhIGRlcGFydHVyZSBmcm9tIGVhcmxpZXIgU0dJCiAgKiBQQ0kgYnJpZGdlcy4gIEJlY2F1c2Ugb2YgdGhhdCB3ZSB1c2UgY29uZmlnIHNwYWNlIDEgdG8gYWNjZXNzIHRoZQotICogY29uZmlnIHNwYWNlIG9mIHRoZSBmaXJzdCBhY3R1YWwgUENJIGRldmljZSBvbiB0aGUgYnVzLiAKKyAqIGNvbmZpZyBzcGFjZSBvZiB0aGUgZmlyc3QgYWN0dWFsIFBDSSBkZXZpY2Ugb24gdGhlIGJ1cy4KICAqIEhlcmUncyB3aGF0IHRoZSBQSUMgbWFudWFsIHNheXM6CiAgKgogICogICAgIFRoZSBjdXJyZW50IFBDSS1YIGJ1cyBzcGVjaWZpY2F0aW9uIG5vdyBkZWZpbmVzIHRoYXQgdGhlIHBhcmVudApAQCAtMjksMTQgKzI5LDE0IEBACiAgKiAgICAgY29ycmVsYXRlZCBDb25maWdzIHBhY2UgYW5kIG91ciBkZXZpY2Ugc3BhY2UgMCA8LT4gMCwgMSA8LT4gMSwgZXRjLgogICogICAgIFBDSS1YIHJlcXVpcmVzIHdlIHN0YXJ0IGEgMSwgbm90IDAgYW5kIGN1cnJlbnRseSB0aGUgUFggYnJpY2sKICAqICAgICBkb2VzIGFzc29jaWF0ZSBvdXI6Ci0gKiAKKyAqCiAgKiAgICAgICAgIGRldmljZSAwIHdpdGggY29uZmlndXJhdGlvbiBzcGFjZSB3aW5kb3cgMSwKLSAqICAgICAgICAgZGV2aWNlIDEgd2l0aCBjb25maWd1cmF0aW9uIHNwYWNlIHdpbmRvdyAyLCAKKyAqICAgICAgICAgZGV2aWNlIDEgd2l0aCBjb25maWd1cmF0aW9uIHNwYWNlIHdpbmRvdyAyLAogICogICAgICAgICBkZXZpY2UgMiB3aXRoIGNvbmZpZ3VyYXRpb24gc3BhY2Ugd2luZG93IDMsCiAgKiAgICAgICAgIGRldmljZSAzIHdpdGggY29uZmlndXJhdGlvbiBzcGFjZSB3aW5kb3cgNC4KICAqCi0gKiBUaGUgbmV0IGVmZmVjdCBpcyB0aGF0IGFsbCBjb25maWcgc3BhY2UgYWNjZXNzIGFyZSBvZmYtYnktb25lIHdpdGggCi0gKiByZWxhdGlvbiB0byBvdGhlciBwZXItc2xvdCBhY2Nlc3NlcyBvbiB0aGUgUElDLiAgIAorICogVGhlIG5ldCBlZmZlY3QgaXMgdGhhdCBhbGwgY29uZmlnIHNwYWNlIGFjY2VzcyBhcmUgb2ZmLWJ5LW9uZSB3aXRoCisgKiByZWxhdGlvbiB0byBvdGhlciBwZXItc2xvdCBhY2Nlc3NlcyBvbiB0aGUgUElDLgogICogSGVyZSBpcyBhIHRhYmxlIHRoYXQgc2hvd3Mgc29tZSBvZiB0aGF0OgogICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsIFNsb3QjCkBAIC02NSw3ICs2NSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIE5PVEU6IFBJQyBXQVIuIFBWIzg1NDY5Ny4gIFBJQyBkb2VzIG5vdCBhbGxvdyB3cml0ZXMganVzdCB0byBbMzE6MF0KLSAqIG9mIGEgNjQtYml0IHJlZ2lzdGVyLiAgV2hlbiB3cml0aW5nIFBJQyByZWdpc3RlcnMsIGFsd2F5cyB3cml0ZSB0aGUgCisgKiBvZiBhIDY0LWJpdCByZWdpc3Rlci4gIFdoZW4gd3JpdGluZyBQSUMgcmVnaXN0ZXJzLCBhbHdheXMgd3JpdGUgdGhlCiAgKiBlbnRpcmUgNjQgYml0cy4KICAqLwogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAl1aW50NjRfdAljbGVhcl9hbGw7CQkJLyogMHgwMDB7NDM4LCwsNUY4fSAqLwogICAgIH0gcF9idWZfY291bnRbOF07CiAKLSAgICAKKwogICAgIC8qIDB4MDAwNjAwLTB4MDAwOUZGIC0tIFBDSS9YIHJlZ2lzdGVycyAqLwogICAgIHVpbnQ2NF90CQlwX3BjaXhfYnVzX2Vycl9hZGRyOwkJLyogMHgwMDA2MDAgKi8KICAgICB1aW50NjRfdAkJcF9wY2l4X2J1c19lcnJfYXR0cjsJCS8qIDB4MDAwNjA4ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX2NwdWlkLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX2NwdWlkLmgKaW5kZXggMjBiMzAwMS4uZDJjMWQzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9jcHVpZC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fY3B1aWQuaApAQCAtODEsMTEgKzgxLDYgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHVpZCkJCQkoKGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9MSUQpID4+IDE2KSAmIDB4ZmZmZikKLSNlbmRpZgotCi0KICNkZWZpbmUgZ2V0X25vZGVfbnVtYmVyKGFkZHIpCQkJTkFTSURfR0VUKGFkZHIpCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaAppbmRleCAxNDU1Mzc1Li4yNzk3NmQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKQEAgLTEzNCw0MyArMTM0LDI4IEBACiAKICNkZWZpbmUgU05fU0FMX0ZBS0VfUFJPTQkJCSAgIDB4MDIwMDk5OTkKIAotCiAvKioKLSAqIHNuX3NhbF9yZXZfbWFqb3IgLSBnZXQgdGhlIG1ham9yIFNHSSBTQUwgcmV2aXNpb24gbnVtYmVyCi0gKgotICogVGhlIFNHSSBQUk9NIHN0b3JlcyBpdHMgdmVyc2lvbiBpbiBzYWxfW2FiXV9yZXZfKG1ham9yfG1pbm9yKS4KLSAqIFRoaXMgcm91dGluZSBzaW1wbHkgZXh0cmFjdHMgdGhlIG1ham9yIHZhbHVlIGZyb20gdGhlCi0gKiBAaWE2NF9zYWxfc3lzdGFiIHN0cnVjdHVyZSBjb25zdHJ1Y3RlZCBieSBpYTY0X3NhbF9pbml0KCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1zbl9zYWxfcmV2X21ham9yKHZvaWQpCisgICogc25fc2FsX3JldmlzaW9uIC0gZ2V0IHRoZSBTR0kgU0FMIHJldmlzaW9uIG51bWJlcgorICAqCisgICogVGhlIFNHSSBQUk9NIHN0b3JlcyBpdHMgdmVyc2lvbiBpbiB0aGUgc2FsX1thYl1fcmV2XyhtYWpvcnxtaW5vcikuCisgICogVGhpcyByb3V0aW5lIHNpbXBseSBleHRyYWN0cyB0aGUgbWFqb3IgYW5kIG1pbm9yIHZhbHVlcyBhbmQKKyAgKiBwcmVzZW50cyB0aGVtIGluIGEgdTMyIGZvcm1hdC4KKyAgKgorICAqIEZvciBleGFtcGxlLCB2ZXJzaW9uIDQuMDUgd291bGQgYmUgcmVwcmVzZW50ZWQgYXQgMHgwNDA1LgorICAqLworc3RhdGljIGlubGluZSB1MzIKK3NuX3NhbF9yZXYodm9pZCkKIHsKIAlzdHJ1Y3QgaWE2NF9zYWxfc3lzdGFiICpzeXN0YWIgPSBlZmkuc2FsX3N5c3RhYjsKIAotCXJldHVybiAoaW50KXN5c3RhYi0+c2FsX2JfcmV2X21ham9yOwotfQotCi0vKioKLSAqIHNuX3NhbF9yZXZfbWlub3IgLSBnZXQgdGhlIG1pbm9yIFNHSSBTQUwgcmV2aXNpb24gbnVtYmVyCi0gKgotICogVGhlIFNHSSBQUk9NIHN0b3JlcyBpdHMgdmVyc2lvbiBpbiBzYWxfW2FiXV9yZXZfKG1ham9yfG1pbm9yKS4KLSAqIFRoaXMgcm91dGluZSBzaW1wbHkgZXh0cmFjdHMgdGhlIG1pbm9yIHZhbHVlIGZyb20gdGhlCi0gKiBAaWE2NF9zYWxfc3lzdGFiIHN0cnVjdHVyZSBjb25zdHJ1Y3RlZCBieSBpYTY0X3NhbF9pbml0KCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1zbl9zYWxfcmV2X21pbm9yKHZvaWQpCi17Ci0Jc3RydWN0IGlhNjRfc2FsX3N5c3RhYiAqc3lzdGFiID0gZWZpLnNhbF9zeXN0YWI7Ci0JCi0JcmV0dXJuIChpbnQpc3lzdGFiLT5zYWxfYl9yZXZfbWlub3I7CisJcmV0dXJuICh1MzIpKHN5c3RhYi0+c2FsX2JfcmV2X21ham9yIDw8IDggfCBzeXN0YWItPnNhbF9iX3Jldl9taW5vcik7CiB9CiAKIC8qCiAgKiBTcGVjaWZ5IHRoZSBtaW5pbXVtIFBST00gcmV2c2lvbiByZXF1aXJlZCBmb3IgdGhpcyBrZXJuZWwuCiAgKiBOb3RlIHRoYXQgdGhleSdyZSBzdG9yZWQgaW4gaGV4IGZvcm1hdC4uLgogICovCi0jZGVmaW5lIFNOX1NBTF9NSU5fTUFKT1IJMHg0ICAvKiBTTjIga2VybmVscyBuZWVkIGF0IGxlYXN0IFBST00gNC4wICovCi0jZGVmaW5lIFNOX1NBTF9NSU5fTUlOT1IJMHgwCisjZGVmaW5lIFNOX1NBTF9NSU5fVkVSU0lPTgkweDA0MDQKIAogLyoKICAqIFJldHVybnMgdGhlIG1hc3RlciBjb25zb2xlIG5hc2lkLCBpZiB0aGUgY2FsbCBmYWlscywgcmV0dXJuIGFuIGlsbGVnYWwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3BjaS90aW9jcC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jcC5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvaWE2NC9zbi9pbmNsdWRlL3BjaS90aW9jcC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NwLmgKaW5kZXggZjA3YzgzYi4uNWYyNDg5YyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2luY2x1ZGUvcGNpL3Rpb2NwLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jcC5oCkBAIC0xMTEsNyArMTExLDcgQEAKIAl1aW50NjRfdAljbGVhcl9hbGw7CQkJLyogMHgwMDB7NDM4LCwsNUY4fSAqLwogICAgIH0gY3BfYnVmX2NvdW50WzhdOwogCi0gICAgCisKICAgICAvKiAweDAwMDYwMC0weDAwMDlGRiAtLSBQQ0kvWCByZWdpc3RlcnMgKi8KICAgICB1aW50NjRfdAkJY3BfcGNpeF9idXNfZXJyX2FkZHI7CQkvKiAweDAwMDYwMCAqLwogICAgIHVpbnQ2NF90CQljcF9wY2l4X2J1c19lcnJfYXR0cjsJCS8qIDB4MDAwNjA4ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3MxZDEzODA2LmggYi9pbmNsdWRlL2FzbS1tMzJyL3MxZDEzODA2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4ZDM2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvczFkMTM4MDYuaApAQCAtMCwwICsxLDE5OSBAQAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gIEZpbGUgZ2VuZXJhdGVkIGJ5IFMxRDEzODA2Q0ZHLkVYRQorLy8KKy8vICBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwMSBFcHNvbiBSZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQsIEluYy4KKy8vICBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBQYW5lbDogIChhY3RpdmUpICA2NDB4NDgwIDc3SHogU1ROIFNpbmdsZSA4LWJpdCAoUENMSz1DTEtJPTI1LjE3NU1IeikKKy8vIE1lbW9yeTogRW1iZWRkZWQgU0RSQU0gKE1DTEs9Q0xLSTM9NTAuMDAwTUh6KSAoQlVTQ0xLPTMzLjMzM01IeikKKworI2RlZmluZSBTV0lWRUxfVklFVwkJMAkvKiAwOm5vbmUsIDE6OTAgbm90IGNvbXBsZXRlZCAqLworCitzdGF0aWMgc3RydWN0IHMxZDEzeHh4ZmJfcmVndmFsIHMxZDEzeHh4ZmJfaW5pdHJlZ3NbXSA9IHsKKworICAgIHsweDAwMDEsMHgwMH0sICAgLy8gTWlzY2VsbGFuZW91cyBSZWdpc3RlcgorICAgIHsweDAxRkMsMHgwMH0sICAgLy8gRGlzcGxheSBNb2RlIFJlZ2lzdGVyCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSSkKKyAgICB7MHgwMDA0LDB4MDB9LCAgIC8vIEdlbmVyYWwgSU8gUGlucyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAKKyAgICB7MHgwMDA1LDB4MDB9LCAgIC8vIEdlbmVyYWwgSU8gUGlucyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICB7MHgwMDA4LDB4MDB9LCAgIC8vIEdlbmVyYWwgSU8gUGlucyBDb250cm9sIFJlZ2lzdGVyIDAKKyAgICB7MHgwMDA5LDB4MDB9LCAgIC8vIEdlbmVyYWwgSU8gUGlucyBDb250cm9sIFJlZ2lzdGVyIDEKKyAgICB7MHgwMDEwLDB4MDB9LCAgIC8vIE1lbW9yeSBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgICAgezB4MDAxNCwweDAwfSwgICAvLyBMQ0QgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICAgIHsweDAwMTgsMHgwMH0sICAgLy8gQ1JUL1RWIFBpeGVsIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAgICB7MHgwMDFDLDB4MDB9LCAgIC8vIE1lZGlhUGx1ZyBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisvKgorICogLi4gMTBNSHo6IDB4MDAKKyAqIC4uIDMwTUh6OiAweDAxCisgKiAzME1IeiAuLjogMHgwMgorICovCisgICAgezB4MDAxRSwweDAyfSwgICAvLyBDUFUgVG8gTWVtb3J5IFdhaXQgU3RhdGUgU2VsZWN0IFJlZ2lzdGVyCisgICAgezB4MDAyMSwweDAyfSwgICAvLyBEUkFNIFJlZnJlc2ggUmF0ZSBSZWdpc3RlcgorICAgIHsweDAwMkEsMHgxMX0sICAgLy8gRFJBTSBUaW1pbmdzIENvbnRyb2wgUmVnaXN0ZXIgMAorICAgIHsweDAwMkIsMHgxM30sICAgLy8gRFJBTSBUaW1pbmdzIENvbnRyb2wgUmVnaXN0ZXIgMQorICAgIHsweDAwMjAsMHg4MH0sICAgLy8gTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAgICB7MHgwMDMwLDB4MjV9LCAgIC8vIFBhbmVsIFR5cGUgUmVnaXN0ZXIKKyAgICB7MHgwMDMxLDB4MDB9LCAgIC8vIE1PRCBSYXRlIFJlZ2lzdGVyCisgICAgezB4MDAzMiwweDRGfSwgICAvLyBMQ0QgSG9yaXpvbnRhbCBEaXNwbGF5IFdpZHRoIFJlZ2lzdGVyCisgICAgezB4MDAzNCwweDEyfSwgICAvLyBMQ0QgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIKKyAgICB7MHgwMDM1LDB4MDF9LCAgIC8vIFRGVCBGUExJTkUgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIKKyAgICB7MHgwMDM2LDB4MEJ9LCAgIC8vIFRGVCBGUExJTkUgUHVsc2UgV2lkdGggUmVnaXN0ZXIKKyAgICB7MHgwMDM4LDB4REZ9LCAgIC8vIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwCisgICAgezB4MDAzOSwweDAxfSwgICAvLyBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMQorICAgIHsweDAwM0EsMHgyQ30sICAgLy8gTENEIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlcgorICAgIHsweDAwM0IsMHgwQX0sICAgLy8gVEZUIEZQRlJBTUUgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIKKyAgICB7MHgwMDNDLDB4MDF9LCAgIC8vIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCisKKyAgICB7MHgwMDQxLDB4MDB9LCAgIC8vIExDRCBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyCisgICAgezB4MDA0MiwweDAwfSwgICAvLyBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAKKyAgICB7MHgwMDQzLDB4MDB9LCAgIC8vIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMQorICAgIHsweDAwNDQsMHgwMH0sICAgLy8gTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVQpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfT1BTUFVUKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMykKKyAgICB7MHgwMDA0LDB4MDd9LCAgIC8vIEdQSU9bMDo3XSBkaXJlY3Rpb24KKyAgICB7MHgwMDA1LDB4MDB9LCAgIC8vIEdQSU9bODoxMl0gZGlyZWN0aW9uCisgICAgezB4MDAwOCwweDAwfSwgICAvLyBHUElPWzA6N10gZGF0YQorICAgIHsweDAwMDksMHgwMH0sICAgLy8gR1BJT1s4OjEyXSBkYXRhCisgICAgezB4MDAwOCwweDA0fSwgICAvLyBMQ0QgcGFuZWwgVmNjIG9uCisgICAgezB4MDAwOCwweDA1fSwgICAvLyBMQ0QgcGFuZWwgcmVzZXQKKyAgICB7MHgwMDEwLDB4MDF9LCAgIC8vIE1lbW9yeSBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgICAgezB4MDAxNCwweDMwfSwgICAvLyBMQ0QgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoQ0xLSSAyMk1Iei80KQorICAgIHsweDAwMTgsMHgwMH0sICAgLy8gQ1JUL1RWIFBpeGVsIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAgICB7MHgwMDFDLDB4MDB9LCAgIC8vIE1lZGlhUGx1ZyBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKDEwTUh6KQorICAgIHsweDAwMUUsMHgwMH0sICAgLy8gQ1BVIFRvIE1lbW9yeSBXYWl0IFN0YXRlIFNlbGVjdCBSZWdpc3RlcgorICAgIHsweDAwMjAsMHg4MH0sICAgLy8gTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAgICB7MHgwMDIxLDB4MDN9LCAgIC8vIERSQU0gUmVmcmVzaCBSYXRlIFJlZ2lzdGVyCisgICAgezB4MDAyQSwweDAwfSwgICAvLyBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAwCisgICAgezB4MDAyQiwweDAxfSwgICAvLyBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAxCisgICAgezB4MDAzMCwweDI1fSwgICAvLyBQYW5lbCBUeXBlIFJlZ2lzdGVyCisgICAgezB4MDAzMSwweDAwfSwgICAvLyBNT0QgUmF0ZSBSZWdpc3RlcgorICAgIHsweDAwMzIsMHgxZH0sICAgLy8gTENEIEhvcml6b250YWwgRGlzcGxheSBXaWR0aCBSZWdpc3RlcgorICAgIHsweDAwMzQsMHgwNX0sICAgLy8gTENEIEhvcml6b250YWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyCisgICAgezB4MDAzNSwweDAxfSwgICAvLyBURlQgRlBMSU5FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyCisgICAgezB4MDAzNiwweDAxfSwgICAvLyBURlQgRlBMSU5FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCisgICAgezB4MDAzOCwweDNGfSwgICAvLyBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMAorICAgIHsweDAwMzksMHgwMX0sICAgLy8gTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEKKyAgICB7MHgwMDNBLDB4MGJ9LCAgIC8vIExDRCBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIKKyAgICB7MHgwMDNCLDB4MDd9LCAgIC8vIFRGVCBGUEZSQU1FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyCisgICAgezB4MDAzQywweDAyfSwgICAvLyBURlQgRlBGUkFNRSBQdWxzZSBXaWR0aCBSZWdpc3RlcgorCisgICAgezB4MDA0MSwweDAwfSwgICAvLyBMQ0QgTWlzY2VsbGFuZW91cyBSZWdpc3RlcgorI2lmIChTV0lWRUxfVklFVyA9PSAwKQorICAgIHsweDAwNDIsMHgwMH0sICAgLy8gTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwCisgICAgezB4MDA0MywweDAwfSwgICAvLyBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEKKyAgICB7MHgwMDQ0LDB4MDB9LCAgIC8vIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMgorCisjZWxpZiAoU1dJVkVMX1ZJRVcgPT0gMSkKKyAgICAvLyAxMDI0IC0gVygzMjApID0gMHgyQzAKKyAgICB7MHgwMDQyLDB4QzB9LCAgIC8vIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMAorICAgIHsweDAwNDMsMHgwMn0sICAgLy8gTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxCisgICAgezB4MDA0NCwweDAwfSwgICAvLyBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIKKyAgICAvLyAxMDI0CisgICAgezB4MDA0NiwweDAwfSwgICAvLyBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAKKyAgICB7MHgwMDQ3LDB4MDJ9LCAgIC8vIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMQorI2Vsc2UKKyNlcnJvciB1bnN1cHBvcnRlZCBTV0lWRUxfVklFVyBtb2RlCisjZW5kaWYKKyNlbHNlCisjZXJyb3Igbm8gcGxhdGZvcm0gY29uZmlndXJhdGlvbgorI2VuZGlmICAvKiBDT05GSUdfUExBVF9YWFggKi8KKworICAgIHsweDAwNDgsMHgwMH0sICAgLy8gTENEIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIKKyAgICB7MHgwMDRBLDB4MDB9LCAgIC8vIExDRCBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlcgorICAgIHsweDAwNEIsMHgwMH0sICAgLy8gTENEIERpc3BsYXkgRklGTyBMb3cgVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIKKyAgICB7MHgwMDUwLDB4NEZ9LCAgIC8vIENSVC9UViBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIKKyAgICB7MHgwMDUyLDB4MTN9LCAgIC8vIENSVC9UViBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlcgorICAgIHsweDAwNTMsMHgwMX0sICAgLy8gQ1JUL1RWIEhSVEMgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIKKyAgICB7MHgwMDU0LDB4MEJ9LCAgIC8vIENSVC9UViBIUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCisgICAgezB4MDA1NiwweERGfSwgICAvLyBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMAorICAgIHsweDAwNTcsMHgwMX0sICAgLy8gQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEKKyAgICB7MHgwMDU4LDB4MkJ9LCAgIC8vIENSVC9UViBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIKKyAgICB7MHgwMDU5LDB4MDl9LCAgIC8vIENSVC9UViBWUlRDIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyCisgICAgezB4MDA1QSwweDAxfSwgICAvLyBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlcgorICAgIHsweDAwNUIsMHgxMH0sICAgLy8gVFYgT3V0cHV0IENvbnRyb2wgUmVnaXN0ZXIKKworICAgIHsweDAwNjIsMHgwMH0sICAgLy8gQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwCisgICAgezB4MDA2MywweDAwfSwgICAvLyBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEKKyAgICB7MHgwMDY0LDB4MDB9LCAgIC8vIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMgorCisgICAgezB4MDA2OCwweDAwfSwgICAvLyBDUlQvVFYgUGl4ZWwgUGFubmluZyBSZWdpc3RlcgorICAgIHsweDAwNkEsMHgwMH0sICAgLy8gQ1JUL1RWIERpc3BsYXkgRklGTyBIaWdoIFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyCisgICAgezB4MDA2QiwweDAwfSwgICAvLyBDUlQvVFYgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlcgorICAgIHsweDAwNzAsMHgwMH0sICAgLy8gTENEIEluay9DdXJzb3IgQ29udHJvbCBSZWdpc3RlcgorICAgIHsweDAwNzEsMHgwMX0sICAgLy8gTENEIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgorICAgIHsweDAwNzIsMHgwMH0sICAgLy8gTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAKKyAgICB7MHgwMDczLDB4MDB9LCAgIC8vIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAxCisgICAgezB4MDA3NCwweDAwfSwgICAvLyBMQ0QgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMAorICAgIHsweDAwNzUsMHgwMH0sICAgLy8gTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEKKyAgICB7MHgwMDc2LDB4MDB9LCAgIC8vIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMCBSZWdpc3RlcgorICAgIHsweDAwNzcsMHgwMH0sICAgLy8gTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlcgorICAgIHsweDAwNzgsMHgwMH0sICAgLy8gTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIKKyAgICB7MHgwMDdBLDB4MUZ9LCAgIC8vIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMSBSZWdpc3RlcgorICAgIHsweDAwN0IsMHgzRn0sICAgLy8gTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlcgorICAgIHsweDAwN0MsMHgxRn0sICAgLy8gTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIKKyAgICB7MHgwMDdFLDB4MDB9LCAgIC8vIExDRCBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyCisgICAgezB4MDA4MCwweDAwfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBDb250cm9sIFJlZ2lzdGVyCisgICAgezB4MDA4MSwweDAxfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCisgICAgezB4MDA4MiwweDAwfSwgICAvLyBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMAorICAgIHsweDAwODMsMHgwMH0sICAgLy8gQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDEKKyAgICB7MHgwMDg0LDB4MDB9LCAgIC8vIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwCisgICAgezB4MDA4NSwweDAwfSwgICAvLyBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMQorICAgIHsweDAwODYsMHgwMH0sICAgLy8gQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAwIFJlZ2lzdGVyCisgICAgezB4MDA4NywweDAwfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyCisgICAgezB4MDA4OCwweDAwfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMCBSZWdpc3RlcgorICAgIHsweDAwOEEsMHgxRn0sICAgLy8gQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAxIFJlZ2lzdGVyCisgICAgezB4MDA4QiwweDNGfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyCisgICAgezB4MDA4QywweDFGfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMSBSZWdpc3RlcgorICAgIHsweDAwOEUsMHgwMH0sICAgLy8gQ1JUL1RWIEluay9DdXJzb3IgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIKKyAgICB7MHgwMTAwLDB4MDB9LCAgIC8vIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDAKKyAgICB7MHgwMTAxLDB4MDB9LCAgIC8vIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDEKKyAgICB7MHgwMTAyLDB4MDB9LCAgIC8vIEJpdEJsdCBST1AgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIKKyAgICB7MHgwMTAzLDB4MDB9LCAgIC8vIEJpdEJsdCBPcGVyYXRpb24gUmVnaXN0ZXIKKyAgICB7MHgwMTA0LDB4MDB9LCAgIC8vIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwCisgICAgezB4MDEwNSwweDAwfSwgICAvLyBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMQorICAgIHsweDAxMDYsMHgwMH0sICAgLy8gQml0Qmx0IFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIKKyAgICB7MHgwMTA4LDB4MDB9LCAgIC8vIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAKKyAgICB7MHgwMTA5LDB4MDB9LCAgIC8vIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEKKyAgICB7MHgwMTBBLDB4MDB9LCAgIC8vIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIKKyAgICB7MHgwMTBDLDB4MDB9LCAgIC8vIEJpdEJsdCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMAorICAgIHsweDAxMEQsMHgwMH0sICAgLy8gQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxCisgICAgezB4MDExMCwweDAwfSwgICAvLyBCaXRCbHQgV2lkdGggUmVnaXN0ZXIgMAorICAgIHsweDAxMTEsMHgwMH0sICAgLy8gQml0Qmx0IFdpZHRoIFJlZ2lzdGVyIDEKKyAgICB7MHgwMTEyLDB4MDB9LCAgIC8vIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMAorICAgIHsweDAxMTMsMHgwMH0sICAgLy8gQml0Qmx0IEhlaWdodCBSZWdpc3RlciAxCisgICAgezB4MDExNCwweDAwfSwgICAvLyBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAwCisgICAgezB4MDExNSwweDAwfSwgICAvLyBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAxCisgICAgezB4MDExOCwweDAwfSwgICAvLyBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAwCisgICAgezB4MDExOSwweDAwfSwgICAvLyBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAxCisgICAgezB4MDFFMCwweDAwfSwgICAvLyBMb29rLVVwIFRhYmxlIE1vZGUgUmVnaXN0ZXIKKyAgICB7MHgwMUUyLDB4MDB9LCAgIC8vIExvb2stVXAgVGFibGUgQWRkcmVzcyBSZWdpc3RlcgorICAgIHsweDAxRjAsMHgxMH0sICAgLy8gUG93ZXIgU2F2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgICAgezB4MDFGMSwweDAwfSwgICAvLyBQb3dlciBTYXZlIFN0YXR1cyBSZWdpc3RlcgorICAgIHsweDAxRjQsMHgwMH0sICAgLy8gQ1BVLXRvLU1lbW9yeSBBY2Nlc3MgV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXIKKyNpZiAoU1dJVkVMX1ZJRVcgPT0gMCkKKyAgICB7MHgwMUZDLDB4MDF9LCAgIC8vIERpc3BsYXkgTW9kZSBSZWdpc3RlcigweDAxOkxDRCwgMHgwMjpDUlQsIDB4MDM6TENEJkNSVCkKKyNlbGlmIChTV0lWRUxfVklFVyA9PSAxKQorICAgIHsweDAxRkMsMHg0MX0sICAgLy8gRGlzcGxheSBNb2RlIFJlZ2lzdGVyKDB4MDE6TENELCAweDAyOkNSVCwgMHgwMzpMQ0QmQ1JUKQorI2Vsc2UKKyNlcnJvciB1bnN1cHBvcnRlZCBTV0lWRUxfVklFVyBtb2RlCisjZW5kaWYgIC8qIFNXSVZFTF9WSUVXICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX09QU1BVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTMpCisgICAgezB4MDAwOCwweDA3fSwgICAvLyBMQ0QgcGFuZWwgVmRkICYgVmcgb24KKyNlbmRpZgorCisgICAgezB4MDA0MCwweDA1fSwgICAvLyBMQ0QgRGlzcGxheSBNb2RlIFJlZ2lzdGVyICgyOjRicHAsMzo4YnBwLDU6MTZicHApCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSSkKKyAgICB7MHgwMDQ2LDB4ODB9LCAgIC8vIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMAorICAgIHsweDAwNDcsMHgwMn0sICAgLy8gTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxCisjZWxpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX09QU1BVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTMpCisgICAgezB4MDA0NiwweGYwfSwgICAvLyBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAKKyAgICB7MHgwMDQ3LDB4MDB9LCAgIC8vIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMQorI2VuZGlmCisgICAgezB4MDA2MCwweDA1fSwgICAvLyBDUlQvVFYgRGlzcGxheSBNb2RlIFJlZ2lzdGVyICgyOjRicHAsMzo4YnBwLDU6MTZicHApCisgICAgezB4MDA2NiwweDgwfSwgICAvLyBDUlQvVFYgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAJLy8gdGFrZW8KKyAgICB7MHgwMDY3LDB4MDJ9LCAgIC8vIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMQorfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tYWNpby5oIGIvaW5jbHVkZS9hc20tcHBjL21hY2lvLmgKaW5kZXggMmNhZmM5OS4uYTQ4MWI3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21hY2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21hY2lvLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9fTUFDSU9fQVNJQ19IX18KICNkZWZpbmUgX19NQUNJT19BU0lDX0hfXwogCisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIG1hY2lvX2J1c190eXBlOwpAQCAtMTIwLDEwICsxMjEsMTAgQEAKIHN0cnVjdCBtYWNpb19kcml2ZXIKIHsKIAljaGFyCQkJKm5hbWU7Ci0Jc3RydWN0IG9mX21hdGNoCQkqbWF0Y2hfdGFibGU7CisJc3RydWN0IG9mX2RldmljZV9pZAkqbWF0Y2hfdGFibGU7CiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCi0JaW50CSgqcHJvYmUpKHN0cnVjdCBtYWNpb19kZXYqIGRldiwgY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaCk7CisJaW50CSgqcHJvYmUpKHN0cnVjdCBtYWNpb19kZXYqIGRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpOwogCWludAkoKnJlbW92ZSkoc3RydWN0IG1hY2lvX2RldiogZGV2KTsKIAogCWludAkoKnN1c3BlbmQpKHN0cnVjdCBtYWNpb19kZXYqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9vZl9kZXZpY2UuaCBiL2luY2x1ZGUvYXNtLXBwYy9vZl9kZXZpY2UuaAppbmRleCA3MjI5NzM1Li40YjI2NGNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvb2ZfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL29mX2RldmljZS5oCkBAIC0yNCwyMCArMjQsOCBAQAogfTsKICNkZWZpbmUJdG9fb2ZfZGV2aWNlKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgb2ZfZGV2aWNlLCBkZXYpCiAKLS8qCi0gKiBTdHJ1Y3QgdXNlZCBmb3IgbWF0Y2hpbmcgYSBkZXZpY2UKLSAqLwotc3RydWN0IG9mX21hdGNoCi17Ci0JY2hhcgkqbmFtZTsKLQljaGFyCSp0eXBlOwotCWNoYXIJKmNvbXBhdGlibGU7Ci0Jdm9pZAkqZGF0YTsKLX07Ci0jZGVmaW5lIE9GX0FOWV9NQVRDSAkJKChjaGFyICopLTFMKQotCi1leHRlcm4gY29uc3Qgc3RydWN0IG9mX21hdGNoICpvZl9tYXRjaF9kZXZpY2UoCi0JY29uc3Qgc3RydWN0IG9mX21hdGNoICptYXRjaGVzLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX21hdGNoX2RldmljZSgKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpOwogCiBleHRlcm4gc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2X2dldChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgb2ZfZGV2X3B1dChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpOwpAQCAtNDksMTAgKzM3LDEwIEBACiBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyCiB7CiAJY2hhcgkJCSpuYW1lOwotCXN0cnVjdCBvZl9tYXRjaAkJKm1hdGNoX3RhYmxlOworCXN0cnVjdCBvZl9kZXZpY2VfaWQJKm1hdGNoX3RhYmxlOwogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAotCWludAkoKnByb2JlKShzdHJ1Y3Qgb2ZfZGV2aWNlKiBkZXYsIGNvbnN0IHN0cnVjdCBvZl9tYXRjaCAqbWF0Y2gpOworCWludAkoKnByb2JlKShzdHJ1Y3Qgb2ZfZGV2aWNlKiBkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKTsKIAlpbnQJKCpyZW1vdmUpKHN0cnVjdCBvZl9kZXZpY2UqIGRldik7CiAKIAlpbnQJKCpzdXNwZW5kKShzdHJ1Y3Qgb2ZfZGV2aWNlKiBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1wcGMvdW5pc3RkLmgKaW5kZXggZThiNzkyMi4uYTc4OTRlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy91bmlzdGQuaApAQCAtMjYyLDcgKzI2Miw3IEBACiAjZGVmaW5lIF9fTlJfcnRhcwkJMjU1CiAjZGVmaW5lIF9fTlJfc3lzX2RlYnVnX3NldGNvbnRleHQgMjU2CiAvKiBOdW1iZXIgMjU3IGlzIHJlc2VydmVkIGZvciB2c2VydmVyICovCi0vKiBOdW1iZXIgMjU4IGlzIHJlc2VydmVkIGZvciBuZXcgc3lzX3JlbWFwX2ZpbGVfcGFnZXMgKi8KKy8qIDI1OCBjdXJyZW50bHkgdW51c2VkICovCiAvKiBOdW1iZXIgMjU5IGlzIHJlc2VydmVkIGZvciBuZXcgc3lzX21iaW5kICovCiAvKiBOdW1iZXIgMjYwIGlzIHJlc2VydmVkIGZvciBuZXcgc3lzX2dldF9tZW1wb2xpY3kgKi8KIC8qIE51bWJlciAyNjEgaXMgcmVzZXJ2ZWQgZm9yIG5ldyBzeXNfc2V0X21lbXBvbGljeSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvY3B1dGFibGUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2NwdXRhYmxlLmgKaW5kZXggY2JiZmJlYy4uZDY3ZmE5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvY3B1dGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9jcHV0YWJsZS5oCkBAIC0xMzgsNiArMTM4LDcgQEAKICNkZWZpbmUgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgIAlBU01fQ09OU1QoMHgwMDAwMDIwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX0xPQ0tMRVNTX1RMQklFCQlBU01fQ09OU1QoMHgwMDAwMDQwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX01NQ1JBX1NJSFYJCUFTTV9DT05TVCgweDAwMDAwODAwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfQ1RSTAkJCUFTTV9DT05TVCgweDAwMDAxMDAwMDAwMDAwMDApCiAKIC8qIFBsYXRmb3JtIGZpcm13YXJlIGZlYXR1cmVzICovCiAjZGVmaW5lIEZXX0ZUUl8JCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwMSkKQEAgLTE0OCw3ICsxNDksNyBAQAogCiAjZGVmaW5lIENQVV9GVFJfUFBDQVNfQVJDSF9WMl9CQVNFIChDUFVfRlRSX1NMQiB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVV9GVFJfVExCSUVMIHwgQ1BVX0ZUUl9OT0VYRUNVVEUgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFVfRlRSX05PRFNJU1JBTElHTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgQ1BVX0ZUUl9DVFJMKQogCiAvKiBpU2VyaWVzIGRvZXNuJ3Qgc3VwcG9ydCBsYXJnZSBwYWdlcyAqLwogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaHZjb25zb2xlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9odmNvbnNvbGUuaAppbmRleCBkODlkOTRjLi42ZGE5M2NlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9odmNvbnNvbGUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9odmNvbnNvbGUuaApAQCAtMjksMTIgKzI5LDIxIEBACiAgKi8KICNkZWZpbmUgTUFYX05SX0hWQ19DT05TT0xFUwkxNgogCisvKiBpbXBsZW1lbnRlZCBieSBhIGxvdyBsZXZlbCBkcml2ZXIgKi8KK3N0cnVjdCBodl9vcHMgeworCWludCAoKmdldF9jaGFycykodWludDMyX3QgdnRlcm1ubywgY2hhciAqYnVmLCBpbnQgY291bnQpOworCWludCAoKnB1dF9jaGFycykodWludDMyX3QgdnRlcm1ubywgY29uc3QgY2hhciAqYnVmLCBpbnQgY291bnQpOworfTsKIGV4dGVybiBpbnQgaHZjX2dldF9jaGFycyh1aW50MzJfdCB2dGVybW5vLCBjaGFyICpidWYsIGludCBjb3VudCk7CiBleHRlcm4gaW50IGh2Y19wdXRfY2hhcnModWludDMyX3QgdnRlcm1ubywgY29uc3QgY2hhciAqYnVmLCBpbnQgY291bnQpOwogCi0vKiBFYXJseSBkaXNjb3Zlcnkgb2YgY29uc29sZSBhZGFwdGVycy4gKi8KLWV4dGVybiBpbnQgaHZjX2ZpbmRfdnR5cyh2b2lkKTsKK3N0cnVjdCBodmNfc3RydWN0OwogCi0vKiBJbXBsZW1lbnRlZCBieSBhIGNvbnNvbGUgZHJpdmVyICovCi1leHRlcm4gaW50IGh2Y19pbnN0YW50aWF0ZSh1aW50MzJfdCB2dGVybW5vLCBpbnQgaW5kZXgpOworLyogUmVnaXN0ZXIgYSB2dGVybSBhbmQgYSBzbG90IGluZGV4IGZvciB1c2UgYXMgYSBjb25zb2xlIChjb25zb2xlX2luaXQpICovCitleHRlcm4gaW50IGh2Y19pbnN0YW50aWF0ZSh1aW50MzJfdCB2dGVybW5vLCBpbnQgaW5kZXgsIHN0cnVjdCBodl9vcHMgKm9wcyk7CisvKiByZWdpc3RlciBhIHZ0ZXJtIGZvciBodmMgdHR5IG9wZXJhdGlvbiAobW9kdWxlX2luaXQgb3IgaG90cGx1ZyBhZGQpICovCitleHRlcm4gc3RydWN0IGh2Y19zdHJ1Y3QgKiBfX2RldmluaXQgaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpcnEsCisJCQkJCQkgc3RydWN0IGh2X29wcyAqb3BzKTsKKy8qIHJlbW92ZSBhIHZ0ZXJtIGZyb20gaHZjIHR0eSBvcGVyYXRpb24gKG1vZGVsZV9leGl0IG9yIGhvdHBsdWcgcmVtb3ZlKSAqLworZXh0ZXJuIGludCBfX2RldmV4aXQgaHZjX3JlbW92ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHApOwogI2VuZGlmIC8qIF9QUEM2NF9IVkNPTlNPTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbWFjaGRlcC5oCmluZGV4IDljZGFkM2UuLjFlNmFkNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L21hY2hkZXAuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9tYWNoZGVwLmgKQEAgLTE0MCw4ICsxNDAsMTMgQEAKIAkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJCXBncHJvdF90IHZtYV9wcm90KTsKIAorCS8qIElkbGUgbG9vcCBmb3IgdGhpcyBwbGF0Zm9ybSwgbGVhdmUgZW1wdHkgZm9yIGRlZmF1bHQgaWRsZSBsb29wICovCisJaW50CQkoKmlkbGVfbG9vcCkodm9pZCk7CiB9OwogCitleHRlcm4gaW50IGRlZmF1bHRfaWRsZSh2b2lkKTsKK2V4dGVybiBpbnQgbmF0aXZlX2lkbGUodm9pZCk7CisKIGV4dGVybiBzdHJ1Y3QgbWFjaGRlcF9jYWxscyBwcGNfbWQ7CiBleHRlcm4gY2hhciBjbWRfbGluZVtDT01NQU5EX0xJTkVfU0laRV07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcHJvY2Vzc29yLmgKaW5kZXggYWYyOGFhNS4uMzUyMzA2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcHJvY2Vzc29yLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogCiAvKiBNYWNoaW5lIFN0YXRlIFJlZ2lzdGVyIChNU1IpIEZpZWxkcyAqLwogI2RlZmluZSBNU1JfU0ZfTEcJNjMgICAgICAgICAgICAgIC8qIEVuYWJsZSA2NCBiaXQgbW9kZSAqLwpAQCAtNTAxLDI0ICs1MDIsMzcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGN0cmw7CiAKLQljdHJsID0gbWZzcHIoU1BSTl9DVFJMRik7Ci0JY3RybCB8PSBDVFJMX1JVTkxBVENIOwotCW10c3ByKFNQUk5fQ1RSTFQsIGN0cmwpOworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DVFJMKSkgeworCQljdHJsID0gbWZzcHIoU1BSTl9DVFJMRik7CisJCWN0cmwgfD0gQ1RSTF9SVU5MQVRDSDsKKwkJbXRzcHIoU1BSTl9DVFJMVCwgY3RybCk7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHBjNjRfcnVubGF0Y2hfb2ZmKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBjdHJsOwogCi0JY3RybCA9IG1mc3ByKFNQUk5fQ1RSTEYpOwotCWN0cmwgJj0gfkNUUkxfUlVOTEFUQ0g7Ci0JbXRzcHIoU1BSTl9DVFJMVCwgY3RybCk7CisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NUUkwpKSB7CisJCWN0cmwgPSBtZnNwcihTUFJOX0NUUkxGKTsKKwkJY3RybCAmPSB+Q1RSTF9SVU5MQVRDSDsKKwkJbXRzcHIoU1BSTl9DVFJMVCwgY3RybCk7CisJfQogfQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFJVTkxBVENIX09OKFJFRykJCQlcCitCRUdJTl9GVFJfU0VDVElPTgkJCQlcCisJbWZzcHIJKFJFRyksU1BSTl9DVFJMRjsJCVwKKwlvcmkJKFJFRyksKFJFRyksQ1RSTF9SVU5MQVRDSDsJXAorCW10c3ByCVNQUk5fQ1RSTFQsKFJFRyk7CQlcCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9DVFJMKQorI2VuZGlmCisKIC8qCiAgKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgU0xCLiBJZiB0aGlzIGV2ZXIgY2hhbmdlcyB3ZSBzaG91bGQgaGFuZGxlCiAgKiBpdCB3aXRoIGEgdXNlIGEgY3B1IGZlYXR1cmUgZml4dXAuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3VuaXN0ZC5oCmluZGV4IDYwNWQ5MWUuLjRhOTRhY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3VuaXN0ZC5oCkBAIC0yNjgsNyArMjY4LDcgQEAKICNkZWZpbmUgX19OUl9ydGFzCQkyNTUKIC8qIE51bWJlciAyNTYgaXMgcmVzZXJ2ZWQgZm9yIHN5c19kZWJ1Z19zZXRjb250ZXh0ICovCiAvKiBOdW1iZXIgMjU3IGlzIHJlc2VydmVkIGZvciB2c2VydmVyICovCi0vKiBOdW1iZXIgMjU4IGlzIHJlc2VydmVkIGZvciBuZXcgc3lzX3JlbWFwX2ZpbGVfcGFnZXMgKi8KKy8qIDI1OCBjdXJyZW50bHkgdW51c2VkICovCiAjZGVmaW5lIF9fTlJfbWJpbmQJCTI1OQogI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjYwCiAjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNjEKQEAgLTI4Myw4ICsyODMsMTAgQEAKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyNzAKICNkZWZpbmUgX19OUl9rZXljdGwJCTI3MQogI2RlZmluZSBfX05SX3dhaXRpZAkJMjcyCisjZGVmaW5lIF9fTlJfaW9wcmlvX3NldAkJMjczCisjZGVmaW5lIF9fTlJfaW9wcmlvX2dldAkJMjc0CiAKLSNkZWZpbmUgX19OUl9zeXNjYWxscwkJMjczCisjZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTI3NQogI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgTlJfc3lzY2FsbHMJX19OUl9zeXNjYWxscwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCmluZGV4IDg0NjcwODQuLmFlZTE3ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCkBAIC0yMTIsNyArMjEyLDcgQEAKICNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgICAgICAgMTkzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9lcG9sbF9jdGwgICAgICAgICAgMTk0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9lcG9sbF93YWl0ICAgICAgICAgMTk1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl91bGltaXQgICAgICAgICAgMTk2ICAgIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pb3ByaW9fc2V0ICAgICAgICAgMTk2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9nZXRwcGlkICAgICAgICAgICAgMTk3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zaWdhY3Rpb24gICAgICAgICAgMTk4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zZ2V0bWFzayAgICAgICAgICAgMTk5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIzNCw3ICsyMzQsNyBAQAogI2RlZmluZSBfX05SX2lwYyAgICAgICAgICAgICAgICAyMTUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX3NpZ3JldHVybiAgICAgICAgICAyMTYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX2Nsb25lICAgICAgICAgICAgICAyMTcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX21vZGlmeV9sZHQgICAgICAyMTggICAgTGludXggU3BlY2lmaWMgLSBpMzg2IHNwZWNpZmljLCB1bnVzZWQgICAgICAqLworI2RlZmluZSBfX05SX2lvcHJpb19nZXQgICAgICAgICAyMTggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX2FkanRpbWV4ICAgICAgICAgICAyMTkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrICAgICAgICAyMjAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUgICAgICAyMjEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJhbS5oCmluZGV4IDZhMTJmM2EuLmExY2Q0OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcmFtLmgKQEAgLTEsOSArMSwxMCBAQAotLyogJElkOiBwYXJhbS5oLHYgMS4yIDIwMDAvMTAvMzAgMjE6MDE6NDEgZGF2ZW0gRXhwICQgKi8KICNpZm5kZWYgX0FTTVNQQVJDNjRfUEFSQU1fSAogI2RlZmluZSBfQVNNU1BBUkM2NF9QQVJBTV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KLSMgZGVmaW5lIEhaCQkxMDAwCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIEhaCQlDT05GSUdfSFoJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLwogIyBkZWZpbmUgVVNFUl9IWgkxMDAJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KICMgZGVmaW5lIENMT0NLU19QRVJfU0VDIChVU0VSX0haKQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFycG9ydC5oCmluZGV4IGI3ZTYzNTUuLjU2YjUxOTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcnBvcnQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcnBvcnQuaApAQCAtMjcsMTIgKzI3LDEyIEBACiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCiB7CisJZWJ1c19kbWFfZW5hYmxlKCZzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmluZm8sIDEpOworCiAJaWYgKGVidXNfZG1hX3JlcXVlc3QoJnNwYXJjX2VidXNfZG1hc1tkbWFucl0uaW5mbywKIAkJCSAgICAgc3BhcmNfZWJ1c19kbWFzW2RtYW5yXS5hZGRyLAogCQkJICAgICBzcGFyY19lYnVzX2RtYXNbZG1hbnJdLmNvdW50KSkKIAkJQlVHKCk7Ci0KLQllYnVzX2RtYV9lbmFibGUoJnNwYXJjX2VidXNfZG1hc1tkbWFucl0uaW5mbywgMSk7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90aHJlYWRfaW5mby5oCmluZGV4IDBjZDY1MjkuLmExZDI1YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RocmVhZF9pbmZvLmgKQEAgLTIyMCw4ICsyMjAsOCBAQAogI2RlZmluZSBUSUZfTkVXU0lHTkFMUwkJNgkvKiB3YW50cyBuZXctc3R5bGUgc2lnbmFscyAqLwogI2RlZmluZSBUSUZfMzJCSVQJCTcJLyogMzItYml0IGJpbmFyeSAqLwogI2RlZmluZSBUSUZfTkVXQ0hJTEQJCTgJLyoganVzdC1zcGF3bmVkIGNoaWxkIHByb2Nlc3MgKi8KLS8qIFRJRl8qIHZhbHVlIDkgaXMgYXZhaWxhYmxlICovCi0jZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxMAorI2RlZmluZSBUSUZfU0VDQ09NUAkJOQkvKiBzZWN1cmUgY29tcHV0aW5nICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTEwCS8qIHN5c2NhbGwgYXVkaXRpbmcgYWN0aXZlICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX1NVQ0NFU1MJMTEKIC8qIE5PVEU6IFRocmVhZCBmbGFncyA+PSAxMiBzaG91bGQgYmUgb25lcyB3ZSBoYXZlIG5vIGludGVyZXN0CiAgKiAgICAgICBpbiB1c2luZyBpbiBhc3NlbWJseSwgZWxzZSB3ZSBjYW4ndCB1c2UgdGhlIG1hc2sgYXMKQEAgLTIyOSw2ICsyMjksNyBAQAogICovCiAjZGVmaW5lIFRJRl9BQklfUEVORElORwkJMTIKICNkZWZpbmUgVElGX01FTURJRQkJMTMKKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE0CiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTIzOSw5ICsyNDAsMTEgQEAKICNkZWZpbmUgX1RJRl9ORVdTSUdOQUxTCQkoMTw8VElGX05FV1NJR05BTFMpCiAjZGVmaW5lIF9USUZfMzJCSVQJCSgxPDxUSUZfMzJCSVQpCiAjZGVmaW5lIF9USUZfTkVXQ0hJTEQJCSgxPDxUSUZfTkVXQ0hJTEQpCi0jZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKLSNkZWZpbmUgX1RJRl9BQklfUEVORElORwkoMTw8VElGX0FCSV9QRU5ESU5HKQorI2RlZmluZSBfVElGX1NFQ0NPTVAJCSgxPDxUSUZfU0VDQ09NUCkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1NVQ0NFU1MJKDE8PFRJRl9TWVNDQUxMX1NVQ0NFU1MpCisjZGVmaW5lIF9USUZfQUJJX1BFTkRJTkcJKDE8PFRJRl9BQklfUEVORElORykKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQogCiAjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sJKCgweGZmIDw8IFRJX0ZMQUdfV1NBVkVEX1NISUZUKSB8IFwKIAkJCQkgKF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfU0lHUEVORElORyB8IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCmluZGV4IDViOGRjZjUuLmY1OTE0NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaApAQCAtMjEyLDcgKzIxMiw3IEBACiAjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlICAgICAgIDE5MyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3RsICAgICAgICAgIDE5NCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAgICAgICAgIDE5NSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfdWxpbWl0ICAgICAgICAgIDE5NiAgICBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfaW9wcmlvX3NldCAgICAgICAgIDE5NiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfZ2V0cHBpZCAgICAgICAgICAgIDE5NyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfc2lnYWN0aW9uICAgICAgICAgIDE5OCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfc2dldG1hc2sgICAgICAgICAgIDE5OSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yMzQsNyArMjM0LDcgQEAKICNkZWZpbmUgX19OUl9pcGMgICAgICAgICAgICAgICAgMjE1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zaWdyZXR1cm4gICAgICAgICAgMjE2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9jbG9uZSAgICAgICAgICAgICAgMjE3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9tb2RpZnlfbGR0ICAgICAgMjE4ICAgIExpbnV4IFNwZWNpZmljIC0gaTM4NiBzcGVjaWZpYywgdW51c2VkICAgICAgKi8KKyNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0ICAgICAgICAgMjE4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9hZGp0aW1leCAgICAgICAgICAgMjE5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zaWdwcm9jbWFzayAgICAgICAgMjIwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlICAgICAgMjIxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS11bS9tbXVfY29udGV4dC5oCmluZGV4IDg5YmZmMzEuLjc1MjljOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vbW11X2NvbnRleHQuaApAQCAtNyw3ICs3LDkgQEAKICNkZWZpbmUgX19VTV9NTVVfQ09OVEVYVF9ICiAKICNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgorI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCisjaW5jbHVkZSAidW1fbW11LmgiCiAKICNkZWZpbmUgZ2V0X21tdV9jb250ZXh0KHRhc2spIGRvIDsgd2hpbGUoMCkKICNkZWZpbmUgYWN0aXZhdGVfY29udGV4dCh0c2spIGRvIDsgd2hpbGUoMCkKQEAgLTE4LDggKzIwLDYgQEAKIHsKIH0KIAotZXh0ZXJuIHZvaWQgc3dpdGNoX21tX3NrYXMoaW50IG1tX2ZkKTsKLQogc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCAKIAkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CkBAIC0zMCw3ICszMCw3IEBACiAJCWNwdV9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzayk7CiAJCWlmKG5leHQgIT0gJmluaXRfbW0pCiAJCQlDSE9PU0VfTU9ERSgodm9pZCkgMCwgCi0JCQkJICAgIHN3aXRjaF9tbV9za2FzKG5leHQtPmNvbnRleHQuc2thcy5tbV9mZCkpOworCQkJCSAgICBzd2l0Y2hfbW1fc2thcygmbmV4dC0+Y29udGV4dC5za2FzLmlkKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcHJvdG8uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm90by5oCmluZGV4IGYyZjA3MzYuLjZjODEzZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm90by5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm90by5oCkBAIC0xNSw2ICsxNSwxMyBAQAogZXh0ZXJuIHZvaWQgZWFybHlfaWR0X2hhbmRsZXIodm9pZCk7CiAKIGV4dGVybiB2b2lkIG1jaGVja19pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CisjaWZkZWYgQ09ORklHX01UUlIKK2V4dGVybiB2b2lkIG10cnJfYXBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG10cnJfYnBfaW5pdCh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIG10cnJfYXBfaW5pdCgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBtdHJyX2JwX2luaXQoKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgogZXh0ZXJuIHZvaWQgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiAKIGV4dGVybiB2b2lkIHN5c3RlbV9jYWxsKHZvaWQpOyAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcGMuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTllZWQ0ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvaXBjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20teHRlbnNhL2lwYy5oCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZgotICogdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwNSBUZW5zaWxpY2EgSW5jLgotICovCi0KLSNpZm5kZWYgX1hURU5TQV9JUENfSAotI2RlZmluZSBfWFRFTlNBX0lQQ19ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KLQotI2VuZGlmCS8qIF9YVEVOU0FfSVBDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS91bmlzdGQuaAppbmRleCA2NGM2NGRkLi42YjM5ZDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3VuaXN0ZC5oCkBAIC0xMyw0MiArMTMsMzEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAotLy8jZGVmaW5lIF9fTlJfc2V0dXAJCSAgMCAvKiB1c2VkIG9ubHkgYnkgaW5pdCwgdG8gZ2V0IHN5c3RlbSBnb2luZyAqLwogI2RlZmluZSBfX05SX3NwaWxsCQkgIDAKICNkZWZpbmUgX19OUl9leGl0CQkgIDEKLSNkZWZpbmUgX19OUl9mb3JrCQkgIDIKICNkZWZpbmUgX19OUl9yZWFkCQkgIDMKICNkZWZpbmUgX19OUl93cml0ZQkJICA0CiAjZGVmaW5lIF9fTlJfb3BlbgkJICA1CiAjZGVmaW5lIF9fTlJfY2xvc2UJCSAgNgotI2RlZmluZSBfX05SX3dhaXRwaWQJCSAgNwogI2RlZmluZSBfX05SX2NyZWF0CQkgIDgKICNkZWZpbmUgX19OUl9saW5rCQkgIDkKICNkZWZpbmUgX19OUl91bmxpbmsJCSAxMAogI2RlZmluZSBfX05SX2V4ZWN2ZQkJIDExCiAjZGVmaW5lIF9fTlJfY2hkaXIJCSAxMgotI2RlZmluZSBfX05SX3RpbWUJCSAxMwogI2RlZmluZSBfX05SX21rbm9kCQkgMTQKICNkZWZpbmUgX19OUl9jaG1vZAkJIDE1CiAjZGVmaW5lIF9fTlJfbGNob3duCQkgMTYKICNkZWZpbmUgX19OUl9icmVhawkJIDE3Ci0jZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CiAjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQogI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCiAjZGVmaW5lIF9fTlJfbW91bnQJCSAyMQotI2RlZmluZSBfX05SX29sZHVtb3VudAkJIDIyCiAjZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKICNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAotI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKICNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgotI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKLSNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4Ci0jZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQogI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKICNkZWZpbmUgX19OUl9zdHR5CQkgMzEKICNkZWZpbmUgX19OUl9ndHR5CQkgMzIKICNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMwotI2RlZmluZSBfX05SX25pY2UJCSAzNAogI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKICNkZWZpbmUgX19OUl9zeW5jCQkgMzYKICNkZWZpbmUgX19OUl9raWxsCQkgMzcKQEAgLTY2LDI0ICs1NSwxOCBAQAogI2RlZmluZSBfX05SX2dldGV1aWQJCSA0OQogI2RlZmluZSBfX05SX2dldGVnaWQJCSA1MAogI2RlZmluZSBfX05SX2FjY3QJCSA1MQotI2RlZmluZSBfX05SX3Vtb3VudAkJIDUyCiAjZGVmaW5lIF9fTlJfbG9jawkJIDUzCiAjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAogI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKLSNkZWZpbmUgX19OUl9tcHgJCSA1NgogI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NwogI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4Ci0jZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5CiAjZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAogI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCiAjZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgogI2RlZmluZSBfX05SX2R1cDIJCSA2MwogI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAotI2RlZmluZSBfX05SX2dldHBncnAJCSA2NQogI2RlZmluZSBfX05SX3NldHNpZAkJIDY2CiAjZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKLSNkZWZpbmUgX19OUl9zZ2V0bWFzawkJIDY4Ci0jZGVmaW5lIF9fTlJfc3NldG1hc2sJCSA2OQogI2RlZmluZSBfX05SX3NldHJldWlkCQkgNzAKICNkZWZpbmUgX19OUl9zZXRyZWdpZAkJIDcxCiAjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJIDcyCkBAIC05OCwxMyArODEsMTAgQEAKICNkZWZpbmUgX19OUl9zZXRncm91cHMJCSA4MQogI2RlZmluZSBfX05SX3NlbGVjdAkJIDgyCiAjZGVmaW5lIF9fTlJfc3ltbGluawkJIDgzCi0jZGVmaW5lIF9fTlJfb2xkbHN0YXQJCSA4NAogI2RlZmluZSBfX05SX3JlYWRsaW5rCQkgODUKICNkZWZpbmUgX19OUl91c2VsaWIJCSA4NgogI2RlZmluZSBfX05SX3N3YXBvbgkJIDg3CiAjZGVmaW5lIF9fTlJfcmVib290CQkgODgKLSNkZWZpbmUgX19OUl9yZWFkZGlyCQkgODkKLSNkZWZpbmUgX19OUl9tbWFwCQkgOTAKICNkZWZpbmUgX19OUl9tdW5tYXAJCSA5MQogI2RlZmluZSBfX05SX3RydW5jYXRlCQkgOTIKICNkZWZpbmUgX19OUl9mdHJ1bmNhdGUJCSA5MwpAQCAtMTE2LDIyICs5NiwxOCBAQAogI2RlZmluZSBfX05SX3N0YXRmcwkJIDk5CiAjZGVmaW5lIF9fTlJfZnN0YXRmcwkJMTAwCiAjZGVmaW5lIF9fTlJfaW9wZXJtCQkxMDEKLSNkZWZpbmUgX19OUl9zb2NrZXRjYWxsCQkxMDIKICNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMwogI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0CiAjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkxMDUKICNkZWZpbmUgX19OUl9zdGF0CQkxMDYKICNkZWZpbmUgX19OUl9sc3RhdAkJMTA3CiAjZGVmaW5lIF9fTlJfZnN0YXQJCTEwOAotI2RlZmluZSBfX05SX29sZHVuYW1lCQkxMDkKICNkZWZpbmUgX19OUl9pb3BsCQkxMTAKICNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKICNkZWZpbmUgX19OUl9pZGxlCQkxMTIKLSNkZWZpbmUgX19OUl92bTg2CQkxMTMKICNkZWZpbmUgX19OUl93YWl0NAkJMTE0CiAjZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1CiAjZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2Ci0jZGVmaW5lIF9fTlJfaXBjCQkxMTcKICNkZWZpbmUgX19OUl9mc3luYwkJMTE4CiAjZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMTkKICNkZWZpbmUgX19OUl9jbG9uZQkJMTIwCkBAIC0xNDAsMTggKzExNiwxNSBAQAogI2RlZmluZSBfX05SX21vZGlmeV9sZHQJCTEyMwogI2RlZmluZSBfX05SX2FkanRpbWV4CQkxMjQKICNkZWZpbmUgX19OUl9tcHJvdGVjdAkJMTI1Ci0jZGVmaW5lIF9fTlJfc2lncHJvY21hc2sJMTI2CiAjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZQkxMjcKICNkZWZpbmUgX19OUl9pbml0X21vZHVsZQkxMjgKICNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlCTEyOQotI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkxMzAKICNkZWZpbmUgX19OUl9xdW90YWN0bAkJMTMxCiAjZGVmaW5lIF9fTlJfZ2V0cGdpZAkJMTMyCiAjZGVmaW5lIF9fTlJfZmNoZGlyCQkxMzMKICNkZWZpbmUgX19OUl9iZGZsdXNoCQkxMzQKICNkZWZpbmUgX19OUl9zeXNmcwkJMTM1CiAjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkJMTM2Ci0jZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwJMTM3IC8qIFN5c2NhbGwgZm9yIEFuZHJldyBGaWxlIFN5c3RlbSAqLwogI2RlZmluZSBfX05SX3NldGZzdWlkCQkxMzgKICNkZWZpbmUgX19OUl9zZXRmc2dpZAkJMTM5CiAjZGVmaW5lIF9fTlJfX2xsc2VlawkJMTQwCkBAIC0yMjIsOCArMTk1LDYgQEAKICNkZWZpbmUgX19OUl9jYXBzZXQJCTIwNQogI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCTIwNgogI2RlZmluZSBfX05SX3NlbmRmaWxlCQkyMDcKLSNkZWZpbmUgX19OUl9zdHJlYW1zMQkJMjA4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgaXQgKi8KLSNkZWZpbmUgX19OUl9zdHJlYW1zMgkJMjA5CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgaXQgKi8KICNkZWZpbmUgX19OUl9tbWFwMgkJMjEwCiAjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJMjExCiAjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQJMjEyCkBAIC0yMzQsNyArMjA1LDYgQEAKICNkZWZpbmUgX19OUl9taW5jb3JlCQkyMTcKICNkZWZpbmUgX19OUl9tYWR2aXNlCQkyMTgKICNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMTkKLSNkZWZpbmUgX19OUl92Zm9yawkJMjIwCiAKIC8qIEtlZXAgdGhpcyBsYXN0OyBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBsYXN0IHZhbGlkIGNhbGwgbnVtYmVyLiAqLwogI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzICAgICAyMjAKQEAgLTQ0OCw1NSArNDE4LDcgQEAKIAogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0KLS8qCi0gKiB3ZSBuZWVkIHRoaXMgaW5saW5lIC0gZm9ya2luZyBmcm9tIGtlcm5lbCBzcGFjZSB3aWxsIHJlc3VsdAotICogaW4gTk8gQ09QWSBPTiBXUklURSAoISEhKSwgdW50aWwgYW4gZXhlY3ZlIGlzIGV4ZWN1dGVkLiBUaGlzCi0gKiBpcyBubyBwcm9ibGVtLCBidXQgZm9yIHRoZSBzdGFjay4gVGhpcyBpcyBoYW5kbGVkIGJ5IG5vdCBsZXR0aW5nCi0gKiBtYWluKCkgdXNlIHRoZSBzdGFjayBhdCBhbGwgYWZ0ZXIgZm9yaygpLiBUaHVzLCBubyBmdW5jdGlvbgotICogY2FsbHMgLSB3aGljaCBtZWFucyBpbmxpbmUgY29kZSBmb3IgZm9yayB0b28sIGFzIG90aGVyd2lzZSB3ZQotICogd291bGQgdXNlIHRoZSBzdGFjayB1cG9uIGV4aXQgZnJvbSAnZm9yaygpJy4KLSAqCi0gKiBBY3R1YWxseSBvbmx5IHBhdXNlIGFuZCBmb3JrIGFyZSBuZWVkZWQgaW5saW5lLCBzbyB0aGF0IHRoZXJlCi0gKiB3b24ndCBiZSBhbnkgbWVzc2luZyB3aXRoIHRoZSBzdGFjayBmcm9tIG1haW4oKSwgYnV0IHdlIGRlZmluZQotICogc29tZSBvdGhlcnMgdG9vLgotICovCi0KLSNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKLQotc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwwKGludCxwYXVzZSkKLS8vc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwxKGludCxzZXR1cCxpbnQsbWFnaWMpIEZJWE1FCi1zdGF0aWMgX19pbmxpbmVfXyBfc3lzY2FsbDAoaW50LHN5bmMpCi1zdGF0aWMgX19pbmxpbmVfXyBfc3lzY2FsbDAocGlkX3Qsc2V0c2lkKQotc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKGludCx3cml0ZSxpbnQsZmQsY29uc3QgY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKLXN0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhpbnQscmVhZCxpbnQsZmQsY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKLXN0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhvZmZfdCxsc2VlayxpbnQsZmQsb2ZmX3Qsb2Zmc2V0LGludCxjb3VudCkKLXN0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsZHVwLGludCxmZCkKIHN0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMyhpbnQsZXhlY3ZlLGNvbnN0IGNoYXIqLGZpbGUsY2hhcioqLGFyZ3YsY2hhcioqLGVudnApCi1zdGF0aWMgX19pbmxpbmVfXyBfc3lzY2FsbDMoaW50LG9wZW4sY29uc3QgY2hhciAqLGZpbGUsaW50LGZsYWcsaW50LG1vZGUpCi1zdGF0aWMgX19pbmxpbmVfXyBfc3lzY2FsbDEoaW50LGNsb3NlLGludCxmZCkKLXN0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsX2V4aXQsaW50LGV4aXRjb2RlKQotc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwzKHBpZF90LHdhaXRwaWQscGlkX3QscGlkLGludCAqLHdhaXRfc3RhdCxpbnQsb3B0aW9ucykKLXN0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsZGVsZXRlX21vZHVsZSxjb25zdCBjaGFyICosbmFtZSkKLQotc3RydWN0IHN0YXQ7Ci1zdGF0aWMgX19pbmxpbmVfXyBfc3lzY2FsbDIoaW50LGZzdGF0LGludCxmZCxzdHJ1Y3Qgc3RhdCAqLGJ1ZikKLXN0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMChwaWRfdCxnZXRwaWQpCi1zdGF0aWMgX19pbmxpbmVfXyBfc3lzY2FsbDIoaW50LGtpbGwsaW50LHBpZCxpbnQsc2lnKQotc3RhdGljIF9faW5saW5lX18gX3N5c2NhbGwyKGludCxzdGF0LGNvbnN0IGNoYXIgKiwgcGF0aCxzdHJ1Y3Qgc3RhdCAqLGJ1ZikKLXN0YXRpYyBfX2lubGluZV9fIF9zeXNjYWxsMShpbnQsdW5saW5rLGNoYXIgKixwYXRobmFtZSkKLQotCi0KLWV4dGVybiBwaWRfdCB3YWl0cGlkKGludCwgaW50KiwgaW50ICk7Ci1zdGF0aWMgX19pbmxpbmVfXyBwaWRfdCB3YWl0KGludCAqIHdhaXRfc3RhdCkKLXsKLQlyZXR1cm4gd2FpdHBpZCgtMSx3YWl0X3N0YXQsMCk7Ci19CiAjZW5kaWYKIAogLyoKQEAgLTUwOCwzMCArNDMwLDEwIEBACiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIik7CiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KICNlbmRpZgogCi0KLQogI2VuZGlmCS8qIF9YVEVOU0FfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCBiZjJhZDNiLi42OGFiYTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC0xNjUsNyArMTY1LDcgQEAKICNkZWZpbmUgQVVESVRfQVJDSF9TSDY0CQkoRU1fU0h8X19BVURJVF9BUkNIXzY0QklUKQogI2RlZmluZSBBVURJVF9BUkNIX1NIRUw2NAkoRU1fU0h8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKICNkZWZpbmUgQVVESVRfQVJDSF9TUEFSQwkoRU1fU1BBUkMpCi0jZGVmaW5lIEFVRElUX0FSQ0hfU1BBUkM2NAkoRU1fU1BBUkM2NHxfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfU1BBUkM2NAkoRU1fU1BBUkNWOXxfX0FVRElUX0FSQ0hfNjRCSVQpCiAjZGVmaW5lIEFVRElUX0FSQ0hfVjg1MAkJKEVNX1Y4NTB8X19BVURJVF9BUkNIX0xFKQogI2RlZmluZSBBVURJVF9BUkNIX1g4Nl82NAkoRU1fWDg2XzY0fF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCA4MDJjOTFlLi45MDgyODQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCkBAIC0xOSw2ICsxOSw5IEBACiAJQkhfRGlydHksCS8qIElzIGRpcnR5ICovCiAJQkhfTG9jaywJLyogSXMgbG9ja2VkICovCiAJQkhfUmVxLAkJLyogSGFzIGJlZW4gc3VibWl0dGVkIGZvciBJL08gKi8KKwlCSF9VcHRvZGF0ZV9Mb2NrLC8qIFVzZWQgYnkgdGhlIGZpcnN0IGJoIGluIGEgcGFnZSwgdG8gc2VyaWFsaXNlCisJCQkgICogSU8gY29tcGxldGlvbiBvZiBvdGhlciBidWZmZXJzIGluIHRoZSBwYWdlCisJCQkgICovCiAKIAlCSF9NYXBwZWQsCS8qIEhhcyBhIGRpc2sgbWFwcGluZyAqLwogCUJIX05ldywJCS8qIERpc2sgbWFwcGluZyB3YXMgbmV3bHkgY3JlYXRlZCBieSBnZXRfYmxvY2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvY2FjaGUuaAppbmRleCA0ZDc2N2I5Li5mNmI1YTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jYWNoZS5oCkBAIC0xMyw2ICsxMywxMiBAQAogI2RlZmluZSBTTVBfQ0FDSEVfQllURVMgTDFfQ0FDSEVfQllURVMKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19TUEFSQzY0KQorI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKKyNlbHNlCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkKKyNlbmRpZgorCiAjaWZuZGVmIF9fX19jYWNoZWxpbmVfYWxpZ25lZAogI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWQgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oU01QX0NBQ0hFX0JZVEVTKSkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKaW5kZXggOTI3ZGFhOC4uZmY3ZjgwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKQEAgLTIwMSw3ICsyMDEsNyBAQAogCiAJLyogb3B0aW9uYWwgKi8KIAlpbnQJKCpleGl0KQkJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KTsKLQlpbnQJKCpzdXNwZW5kKQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHUzMiBzdGF0ZSk7CisJaW50CSgqc3VzcGVuZCkJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBwbV9tZXNzYWdlX3QgcG1zZyk7CiAJaW50CSgqcmVzdW1lKQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOwogCXN0cnVjdCBmcmVxX2F0dHIJKiphdHRyOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3J5cHRvLmggYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCmluZGV4IDM4N2RhNmEuLjVlMmJjYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaApAQCAtNjEsNiArNjEsMTUgQEAKICNkZWZpbmUgQ1JZUFRPX0RJUl9ERUNSWVBUCQkwCiAKIHN0cnVjdCBzY2F0dGVybGlzdDsKK3N0cnVjdCBjcnlwdG9fdGZtOworCitzdHJ1Y3QgY2lwaGVyX2Rlc2MgeworCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CisJdm9pZCAoKmNyZm4pKHZvaWQgKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYyk7CisJdW5zaWduZWQgaW50ICgqcHJmbikoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLCB1OCAqZHN0LAorCQkJICAgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKKwl2b2lkICppbmZvOworfTsKIAogLyoKICAqIEFsZ29yaXRobXM6IG1vZHVsYXIgY3J5cHRvIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbnMsIG1hbmFnZWQKQEAgLTczLDYgKzgyLDE5IEBACiAJICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbiwgdTMyICpmbGFncyk7CiAJdm9pZCAoKmNpYV9lbmNyeXB0KSh2b2lkICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOwogCXZvaWQgKCpjaWFfZGVjcnlwdCkodm9pZCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKTsKKworCXVuc2lnbmVkIGludCAoKmNpYV9lbmNyeXB0X2VjYikoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLAorCQkJCQl1OCAqZHN0LCBjb25zdCB1OCAqc3JjLAorCQkJCQl1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKKwl1bnNpZ25lZCBpbnQgKCpjaWFfZGVjcnlwdF9lY2IpKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQkJdTggKmRzdCwgY29uc3QgdTggKnNyYywKKwkJCQkJdW5zaWduZWQgaW50IG5ieXRlcyk7CisJdW5zaWduZWQgaW50ICgqY2lhX2VuY3J5cHRfY2JjKShjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJCXU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisJCQkJCXVuc2lnbmVkIGludCBuYnl0ZXMpOworCXVuc2lnbmVkIGludCAoKmNpYV9kZWNyeXB0X2NiYykoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLAorCQkJCQl1OCAqZHN0LCBjb25zdCB1OCAqc3JjLAorCQkJCQl1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKIH07CiAKIHN0cnVjdCBkaWdlc3RfYWxnIHsKQEAgLTEwMiw2ICsxMjQsNyBAQAogCXUzMiBjcmFfZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNyYV9ibG9ja3NpemU7CiAJdW5zaWduZWQgaW50IGNyYV9jdHhzaXplOworCXVuc2lnbmVkIGludCBjcmFfYWxpZ25tYXNrOwogCWNvbnN0IGNoYXIgY3JhX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CiAKIAl1bmlvbiB7CkBAIC0xMzYsNyArMTU5LDYgQEAKICAqIGFuZCBjb3JlIHByb2Nlc3NpbmcgbG9naWMuICBNYW5hZ2VkIHZpYSBjcnlwdG9fYWxsb2NfdGZtKCkgYW5kCiAgKiBjcnlwdG9fZnJlZV90Zm0oKSwgYXMgd2VsbCBhcyB0aGUgdmFyaW91cyBoZWxwZXJzIGJlbG93LgogICovCi1zdHJ1Y3QgY3J5cHRvX3RmbTsKIAogc3RydWN0IGNpcGhlcl90Zm0gewogCXZvaWQgKmNpdF9pdjsKQEAgLTI2Niw2ICsyODgsMTYgQEAKIAlyZXR1cm4gdGZtLT5fX2NydF9hbGctPmNyYV9kaWdlc3QuZGlhX2RpZ2VzdHNpemU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b190Zm1fYWxnX2FsaWdubWFzayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXJldHVybiB0Zm0tPl9fY3J0X2FsZy0+Y3JhX2FsaWdubWFzazsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpjcnlwdG9fdGZtX2N0eChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXJldHVybiAodm9pZCAqKSZ0Zm1bMV07Cit9CisKIC8qCiAgKiBBUEkgd3JhcHBlcnMuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAwNDdiZGUzLi4zMDJlYzIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0xNDM1LDYgKzE0MzUsNyBAQAogZXh0ZXJuIGlub190IGl1bmlxdWUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGlub190KTsKIGV4dGVybiBpbnQgaW5vZGVfbmVlZHNfc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGdlbmVyaWNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiBleHRlcm4gc3RydWN0IGlub2RlICppbG9va3VwNShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGhhc2h2YWwsCiAJCWludCAoKnRlc3QpKHN0cnVjdCBpbm9kZSAqLCB2b2lkICopLCB2b2lkICpkYXRhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IDhkNmJmNjAuLjdjNzQwMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMTIsOCArMTIsOCBAQAogICogR0ZQIGJpdG1hc2tzLi4KICAqLwogLyogWm9uZSBtb2RpZmllcnMgaW4gR0ZQX1pPTkVNQVNLIChzZWUgbGludXgvbW16b25lLmggLSBsb3cgdHdvIGJpdHMpICovCi0jZGVmaW5lIF9fR0ZQX0RNQQkweDAxCi0jZGVmaW5lIF9fR0ZQX0hJR0hNRU0JMHgwMgorI2RlZmluZSBfX0dGUF9ETUEJMHgwMXUKKyNkZWZpbmUgX19HRlBfSElHSE1FTQkweDAydQogCiAvKgogICogQWN0aW9uIG1vZGlmaWVycyAtIGRvZXNuJ3QgY2hhbmdlIHRoZSB6b25pbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKaW5kZXggMzkwZTc2MC4uMGMzMWVmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTE0OCw3ICsxNDgsNiBAQAogc3RydWN0IGlwX21jX3NvY2tsaXN0CiB7CiAJc3RydWN0IGlwX21jX3NvY2tsaXN0CSpuZXh0OwotCWludAkJCWNvdW50OwogCXN0cnVjdCBpcF9tcmVxbgkJbXVsdGk7CiAJdW5zaWduZWQgaW50CQlzZm1vZGU7CQkvKiBNQ0FTVF97SU5DTFVERSxFWENMVURFfSAqLwogCXN0cnVjdCBpcF9zZl9zb2NrbGlzdAkqc2ZsaXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb3ByaW8uaCBiL2luY2x1ZGUvbGludXgvaW9wcmlvLmgKaW5kZXggOGE0NTNhMC4uODhkNTk2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb3ByaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvcHJpby5oCkBAIC0zNCw5ICszNCw2IEBACiAgKi8KICNkZWZpbmUgSU9QUklPX0JFX05SCSg4KQogCi1hc21saW5rYWdlIGludCBzeXNfaW9wcmlvX3NldChpbnQsIGludCwgaW50KTsKLWFzbWxpbmthZ2UgaW50IHN5c19pb3ByaW9fZ2V0KGludCwgaW50KTsKLQogZW51bSB7CiAJSU9QUklPX1dIT19QUk9DRVNTID0gMSwKIAlJT1BSSU9fV0hPX1BHUlAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAppbmRleCA5YjZkMDUxLi5kY2U1M2FjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTE3NCw2ICsxNzQsMTcgQEAKIAlfX3U4IHByb3RvOwogfTsKIAorLyoKKyAqIFN0cnVjdCB1c2VkIGZvciBtYXRjaGluZyBhIGRldmljZQorICovCitzdHJ1Y3Qgb2ZfZGV2aWNlX2lkCit7CisJY2hhcgluYW1lWzMyXTsKKwljaGFyCXR5cGVbMzJdOworCWNoYXIJY29tcGF0aWJsZVsxMjhdOworCXZvaWQJKmRhdGE7Cit9OworCiAKIC8qIFBDTUNJQSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKaW5kZXggOGI4ZDNiOS4uNzRiNDcyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW91bnQuaApAQCAtMzQsNyArMzQsNyBAQAogCWludCBtbnRfZXhwaXJ5X21hcms7CQkvKiB0cnVlIGlmIG1hcmtlZCBmb3IgZXhwaXJ5ICovCiAJY2hhciAqbW50X2Rldm5hbWU7CQkvKiBOYW1lIG9mIGRldmljZSBlLmcuIC9kZXYvZHNrL2hkYTEgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG1udF9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgbW50X2ZzbGluazsJLyogbGluayBpbiBmcy1zcGVjaWZpYyBleHBpcnkgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbW50X2V4cGlyZTsJLyogbGluayBpbiBmcy1zcGVjaWZpYyBleHBpcnkgbGlzdCAqLwogCXN0cnVjdCBuYW1lc3BhY2UgKm1udF9uYW1lc3BhY2U7IC8qIGNvbnRhaW5pbmcgbmFtZXNwYWNlICovCiB9OwogCkBAIC00Nyw3ICs0Nyw3IEBACiAKIGV4dGVybiB2b2lkIF9fbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9tbnRwdXQoc3RydWN0IHZmc21vdW50ICptbnQpCitzdGF0aWMgaW5saW5lIHZvaWQgbW50cHV0X25vX2V4cGlyZShzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKIAlpZiAobW50KSB7CiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtbnQtPm1udF9jb3VudCkpCkBAIC01OSw3ICs1OSw3IEBACiB7CiAJaWYgKG1udCkgewogCQltbnQtPm1udF9leHBpcnlfbWFyayA9IDA7Ci0JCV9tbnRwdXQobW50KTsKKwkJbW50cHV0X25vX2V4cGlyZShtbnQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvbmFtZXNwYWNlLmgKaW5kZXggNjk3OTkxYi4uMGU1YTg2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1lc3BhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25hbWVzcGFjZS5oCkBAIC0xNyw3ICsxNyw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfbmFtZXNwYWNlKHN0cnVjdCBuYW1lc3BhY2UgKm5hbWVzcGFjZSkKIHsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbmFtZXNwYWNlLT5jb3VudCkpCisJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJm5hbWVzcGFjZS0+Y291bnQsICZ2ZnNtb3VudF9sb2NrKSkKKwkJLyogcmVsZWFzZXMgdmZzbW91bnRfbG9jayAqLwogCQlfX3B1dF9uYW1lc3BhY2UobmFtZXNwYWNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKaW5kZXggNTc5MWRmZC4uNmQ1YTI0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCkBAIC0xMjQsNiArMTI0LDcgQEAKIAogaW50CQluZnNkX25vdGlmeV9jaGFuZ2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBpYXR0ciAqKTsKIGludAkJbmZzZF9wZXJtaXNzaW9uKHN0cnVjdCBzdmNfZXhwb3J0ICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKK3ZvaWQJCW5mc2Rfc3luY19kaXIoc3RydWN0IGRlbnRyeSAqZHApOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTRF9WMl9BQ0wpIHx8IGRlZmluZWQoQ09ORklHX05GU0RfVjNfQUNMKQogI2lmZGVmIENPTkZJR19ORlNEX1YyX0FDTApAQCAtMjMwLDYgKzIzMSw3IEBACiAjZGVmaW5lCW5mc2Vycl9yZWNsYWltX2JhZAlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9SRUNMQUlNX0JBRCkKICNkZWZpbmUJbmZzZXJyX2JhZG5hbWUJCV9fY29uc3RhbnRfaHRvbmwoTkZTRVJSX0JBRE5BTUUpCiAjZGVmaW5lCW5mc2Vycl9jYl9wYXRoX2Rvd24JX19jb25zdGFudF9odG9ubChORlNFUlJfQ0JfUEFUSF9ET1dOKQorI2RlZmluZQluZnNlcnJfbG9ja2VkCQlfX2NvbnN0YW50X2h0b25sKE5GU0VSUl9MT0NLRUQpCiAKIC8qIGVycm9yIGNvZGVzIGZvciBpbnRlcm5hbCB1c2UgKi8KIC8qIGlmIGEgcmVxdWVzdCBmYWlscyBkdWUgdG8ga21hbGxvYyBmYWlsdXJlLCBpdCBnZXRzIGRyb3BwZWQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdGUuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oCmluZGV4IGE4NGEzZmEuLjhiZjIzY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oCkBAIC0yMDMsNyArMjAzLDkgQEAKIAlpbnQJCQlzb19pc19vcGVuX293bmVyOyAvKiAxPW9wZW5vd25lciwwPWxvY2tvd25lciAqLwogCXUzMiAgICAgICAgICAgICAgICAgICAgIHNvX2lkOwogCXN0cnVjdCBuZnM0X2NsaWVudCAqICAgIHNvX2NsaWVudDsKLQl1MzIgICAgICAgICAgICAgICAgICAgICBzb19zZXFpZDsgICAgCisJLyogYWZ0ZXIgaW5jcmVtZW50IGluIEVOQ09ERV9TRVFJRF9PUF9UQUlMLCByZXByZXNlbnRzIHRoZSBuZXh0CisJICogc2VxdWVuY2UgaWQgZXhwZWN0ZWQgZnJvbSB0aGUgY2xpZW50OiAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIHNvX3NlcWlkOwogCXN0cnVjdCB4ZHJfbmV0b2JqICAgICAgIHNvX293bmVyOyAgICAgLyogb3BlbiBvd25lciBuYW1lICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgc29fY29uZmlybWVkOyAvKiBzdWNjZXNzZnVsIE9QRU5fQ09ORklSTT8gKi8KIAlzdHJ1Y3QgbmZzNF9yZXBsYXkJc29fcmVwbGF5OwpAQCAtMjM1LDYgKzIzNywxMCBAQAogKiAgICAgICBzdF9wZXJsb2Nrb3duZXI6IChvcGVuIHN0YXRlaWQpIGxpc3Qgb2YgbG9jayBuZnM0X3N0YXRlb3duZXJzCiAqIAlzdF9hY2Nlc3NfYm1hcDogdXNlZCBvbmx5IGZvciBvcGVuIHN0YXRlaWQKICogCXN0X2RlbnlfYm1hcDogdXNlZCBvbmx5IGZvciBvcGVuIHN0YXRlaWQKKyoJc3Rfb3BlbnN0cDogb3BlbiBzdGF0ZWlkIGxvY2sgc3RhdGVpZCB3YXMgZGVyaXZlZCBmcm9tCisqCisqIFhYWDogb3BlbiBzdGF0ZWlkcyBhbmQgbG9jayBzdGF0ZWlkcyBoYXZlIGRpdmVyZ2VkIHN1ZmZpY2llbnRseSB0aGF0CisqIHdlIHNob3VsZCBjb25zaWRlciBkZWZpbmluZyBzZXBhcmF0ZSBzdHJ1Y3RzIGZvciB0aGUgdHdvIGNhc2VzLgogKi8KIAogc3RydWN0IG5mczRfc3RhdGVpZCB7CkBAIC0yNDgsNiArMjU0LDcgQEAKIAlzdHJ1Y3QgZmlsZSAgICAgICAgICAgICAgICAgKiBzdF92ZnNfZmlsZTsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICBzdF9hY2Nlc3NfYm1hcDsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICBzdF9kZW55X2JtYXA7CisJc3RydWN0IG5mczRfc3RhdGVpZCAgICAgICAgICogc3Rfb3BlbnN0cDsKIH07CiAKIC8qIGZsYWdzIGZvciBwcmVwcm9jZXNzX3NlcWlkX29wKCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDE0Yjk1MDQuLjVkNGE5OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMzAwLDIwICszMDAsMjYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKIGV4dGVybiB2b2lkCSAgICAgICBfX2tmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBpbnQgcHJpb3JpdHkpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICphbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsCisJCQkJIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mcm9tX2NhY2hlKGttZW1fY2FjaGVfdCAqY3AsCi0JCQkJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IHByaW9yaXR5KTsKKwkJCQkJICAgIHVuc2lnbmVkIGludCBzaXplLAorCQkJCQkgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KTsKIGV4dGVybiB2b2lkCSAgICAgICBrZnJlZV9za2JtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJpb3JpdHkpOwotZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJpb3JpdHkpOwotZXh0ZXJuIHN0cnVjdCBza19idWZmICpwc2tiX2NvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGdmcF9tYXNrKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2Nsb25lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqcHNrYl9jb3B5KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzayk7CiBleHRlcm4gaW50CSAgICAgICBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCWludCBuaGVhZCwgaW50IG50YWlsLCBpbnQgZ2ZwX21hc2spOworCQkJCQlpbnQgbmhlYWQsIGludCBudGFpbCwKKwkJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3JlYWxsb2NfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgIHVuc2lnbmVkIGludCBoZWFkcm9vbSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICBpbnQgbmV3aGVhZHJvb20sIGludCBuZXd0YWlscm9vbSwKLQkJCQkgICAgICAgaW50IHByaW9yaXR5KTsKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqCQlza2JfcGFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBwYWQpOwogI2RlZmluZSBkZXZfa2ZyZWVfc2tiKGEpCWtmcmVlX3NrYihhKQogZXh0ZXJuIHZvaWQJICAgICAgc2tiX292ZXJfcGFuaWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwKQEAgLTQ2NCw3ICs0NzAsOCBAQAogICoKICAqCU5VTEwgaXMgcmV0dXJuZWQgb24gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2Jfc2hhcmVfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByaSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9zaGFyZV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpKQogewogCW1pZ2h0X3NsZWVwX2lmKHByaSAmIF9fR0ZQX1dBSVQpOwogCWlmIChza2Jfc2hhcmVkKHNrYikpIHsKQEAgLTEwMDEsNyArMTAwOCw3IEBACiAgKgklTlVMTCBpcyByZXR1cm5lZCBpbiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeS4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX19kZXZfYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBsZW5ndGgsCi0JCQkJCSAgICAgIGludCBnZnBfbWFzaykKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IobGVuZ3RoICsgMTYsIGdmcF9tYXNrKTsKIAlpZiAobGlrZWx5KHNrYikpCkBAIC0xMTE0LDggKzExMjEsOCBAQAogICoJSWYgdGhlcmUgaXMgbm8gZnJlZSBtZW1vcnkgLUVOT01FTSBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIHplcm8KICAqCWlzIHJldHVybmVkIGFuZCB0aGUgb2xkIHNrYiBkYXRhIHJlbGVhc2VkLgogICovCi1leHRlcm4gaW50IF9fc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ2ZwKTsKLXN0YXRpYyBpbmxpbmUgaW50IHNrYl9saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGdmcCkKK2V4dGVybiBpbnQgX19za2JfbGluZWFyaXplKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworc3RhdGljIGlubGluZSBpbnQgc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQogewogCXJldHVybiBfX3NrYl9saW5lYXJpemUoc2tiLCBnZnApOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCA3NmNmN2U2Li40YzhlNTUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaApAQCAtNjUsNyArNjUsNyBAQAogZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfdCAqLCB2b2lkICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NpemUoa21lbV9jYWNoZV90ICopOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmttZW1fY2FjaGVfbmFtZShrbWVtX2NhY2hlX3QgKik7Ci1leHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZV90IHNpemUsIGludCBnZnBmbGFncyk7CitleHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBmbGFncyk7CiAKIC8qIFNpemUgZGVzY3JpcHRpb24gc3RydWN0IGZvciBnZW5lcmFsIGNhY2hlcy4gKi8KIHN0cnVjdCBjYWNoZV9zaXplcyB7CkBAIC0xMDUsNyArMTA1LDcgQEAKIAogI2lmZGVmIENPTkZJR19OVU1BCiBleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW1fY2FjaGVfdCAqLCBpbnQgZmxhZ3MsIGludCBub2RlKTsKLWV4dGVybiB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IG5vZGUpOworZXh0ZXJuIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzLCBpbnQgbm9kZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICpjYWNoZXAsIGludCBmbGFncywgaW50IG5vZGUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCA5Mzk5NGM2Li5kYWIyNjUyYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtODgsNyArODgsNyBAQAogZXh0ZXJuIHZvaWQgKiBtZW1jaHIoY29uc3Qgdm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOwogI2VuZGlmCiAKLWV4dGVybiBjaGFyICprc3RyZHVwKGNvbnN0IGNoYXIgKnMsIGludCBnZnApOworZXh0ZXJuIGNoYXIgKmtzdHJkdXAoY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAyMzQzZjk5Li5jNzU5NTRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMTQ4LDcgKzE0OCw3IEBACiAjZGVmaW5lIHZtX3N3YXBfZnVsbCgpIChucl9zd2FwX3BhZ2VzKjIgPCB0b3RhbF9zd2FwX3BhZ2VzKQogCiAvKiBsaW51eC9tbS9vb21fa2lsbC5jICovCi1leHRlcm4gdm9pZCBvdXRfb2ZfbWVtb3J5KHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzayk7CitleHRlcm4gdm9pZCBvdXRfb2ZfbWVtb3J5KHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgaW50IG9yZGVyKTsKIAogLyogbGludXgvbW0vbWVtb3J5LmMgKi8KIGV4dGVybiB2b2lkIHN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCA1MjgzMGI2Li40MjVmNThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC01MDYsNCArNTA2LDcgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfa2V5Y3RsKGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmc0LCB1bnNpZ25lZCBsb25nIGFyZzUpOwogCithc21saW5rYWdlIGxvbmcgc3lzX2lvcHJpb19zZXQoaW50IHdoaWNoLCBpbnQgd2hvLCBpbnQgaW9wcmlvKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfaW9wcmlvX2dldChpbnQgd2hpY2gsIGludCB3aG8pOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYV9kZXZpY2UuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYV9kZXZpY2UuaAppbmRleCA3MWQ2YWY4Li45MmM4MjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oCkBAIC0yMjQsNyArMjI0LDcgQEAKIC8qIEludGVyZmFjZSBmb3IgaW50ZXJuYWwgdXNlICovCiBzdGF0aWMgaW5saW5lIGludCBpcmRhX2RldmljZV90eHF1ZXVlX2VtcHR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChza2JfcXVldWVfbGVuKCZkZXYtPnFkaXNjLT5xKSA9PSAwKTsKKwlyZXR1cm4gc2tiX3F1ZXVlX2VtcHR5KCZkZXYtPnFkaXNjLT5xKTsKIH0KIGludCAgaXJkYV9kZXZpY2Vfc2V0X3Jhd19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlKiBzZWxmLCBpbnQgc3RhdHVzKTsKIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pcmRhZGV2KGludCBzaXplb2ZfcHJpdik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDQ3NzI3YzcuLjc0MzU1MjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC01ODIsNyArNTgyLDYgQEAKIHZvaWQgc2N0cF9jaHVua19mYWlsKHN0cnVjdCBzY3RwX2NodW5rICosIGludCBlcnJvcik7CiBpbnQgc2N0cF9jaHVua19hYmFuZG9uZWQoc3RydWN0IHNjdHBfY2h1bmsgKik7CiAKLQogLyogUkZDMjk2MCAxLjQgS2V5IFRlcm1zCiAgKgogICogbyBDaHVuazogQSB1bml0IG9mIGluZm9ybWF0aW9uIHdpdGhpbiBhbiBTQ1RQIHBhY2tldCwgY29uc2lzdGluZyBvZgpAQCAtNTkyLDEzICs1OTEsOCBAQAogICogZWFjaCBjaHVuayBhcyB3ZWxsIGFzIGEgZmV3IG90aGVyIGhlYWRlciBwb2ludGVycy4uLgogICovCiBzdHJ1Y3Qgc2N0cF9jaHVuayB7Ci0JLyogVGhlc2UgZmlyc3QgdGhyZWUgZWxlbWVudHMgTVVTVCBQUkVDSVNFTFkgbWF0Y2ggdGhlIGZpcnN0Ci0JICogdGhyZWUgZWxlbWVudHMgb2Ygc3RydWN0IHNrX2J1ZmYuICBUaGlzIGFsbG93cyB1cyB0byByZXVzZQotCSAqIGFsbCB0aGUgc2tiXyogcXVldWUgbWFuYWdlbWVudCBmdW5jdGlvbnMuCi0JICovCi0Jc3RydWN0IHNjdHBfY2h1bmsgKm5leHQ7Ci0Jc3RydWN0IHNjdHBfY2h1bmsgKnByZXY7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKIAlhdG9taWNfdCByZWZjbnQ7CiAKIAkvKiBUaGlzIGlzIG91ciBsaW5rIHRvIHRoZSBwZXItdHJhbnNwb3J0IHRyYW5zbWl0dGVkIGxpc3QuICAqLwpAQCAtNzE3LDcgKzcxMSw3IEBACiAJX191MzIgdnRhZzsKIAogCS8qIFRoaXMgY29udGFpbnMgdGhlIHBheWxvYWQgY2h1bmtzLiAgKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGNodW5rczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNodW5rX2xpc3Q7CiAKIAkvKiBUaGlzIGlzIHRoZSBvdmVyaGVhZCBvZiB0aGUgc2N0cCBhbmQgaXAgaGVhZGVycy4gKi8KIAlzaXplX3Qgb3ZlcmhlYWQ7CkBAIC05NzQsNyArOTY4LDcgQEAKIAkvKiBUaGlzIGlzIGFjdHVhbGx5IGEgcXVldWUgb2Ygc2N0cF9jaHVuayBlYWNoCiAJICogY29udGFpbmluZyBhIHBhcnRpYWxseSBkZWNvZGVkIHBhY2tldC4KIAkgKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGluOworCXN0cnVjdCBsaXN0X2hlYWQgaW5fY2h1bmtfbGlzdDsKIAkvKiBUaGlzIGlzIHRoZSBwYWNrZXQgd2hpY2ggaXMgY3VycmVudGx5IG9mZiB0aGUgaW4gcXVldWUgYW5kIGlzCiAJICogYmVpbmcgd29ya2VkIG9uIHRocm91Z2ggdGhlIGluYm91bmQgY2h1bmsgcHJvY2Vzc2luZy4KIAkgKi8KQEAgLTEwMTcsNyArMTAxMSw3IEBACiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CiAKIAkvKiBEYXRhIHBlbmRpbmcgdGhhdCBoYXMgbmV2ZXIgYmVlbiB0cmFuc21pdHRlZC4gICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBvdXQ7CisJc3RydWN0IGxpc3RfaGVhZCBvdXRfY2h1bmtfbGlzdDsKIAogCXVuc2lnbmVkIG91dF9xbGVuOwkvKiBUb3RhbCBsZW5ndGggb2YgcXVldWVkIGRhdGEgY2h1bmtzLiAqLwogCkBAIC0xMDI1LDcgKzEwMTksNyBAQAogCXVuc2lnbmVkIGVycm9yOwogCiAJLyogVGhlc2UgYXJlIGNvbnRyb2wgY2h1bmtzIHdlIHdhbnQgdG8gc2VuZC4gICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBjb250cm9sOworCXN0cnVjdCBsaXN0X2hlYWQgY29udHJvbF9jaHVua19saXN0OwogCiAJLyogVGhlc2UgYXJlIGNodW5rcyB0aGF0IGhhdmUgYmVlbiBzYWNrZWQgYnV0IGFyZSBhYm92ZSB0aGUKIAkgKiBDVFNOLCBvciBjdW11bGF0aXZlIHRzbiBhY2sgcG9pbnQuCkBAIC0xNjcyLDcgKzE2NjYsNyBAQAogCSAqICB3aGljaCBhbHJlYWR5IHJlc2lkZXMgaW4gc2N0cF9vdXRxLgkgUGxlYXNlIG1vdmUgdGhpcwogCSAqICBxdWV1ZSBhbmQgaXRzIHN1cHBvcnRpbmcgbG9naWMgZG93biB0aGVyZS4JLS1waWdneV0KIAkgKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFkZGlwX2NodW5rczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFkZGlwX2NodW5rX2xpc3Q7CiAKIAkvKiBBRERJUCBTZWN0aW9uIDQuMSBBU0NPTkYgQ2h1bmsgUHJvY2VkdXJlcwogCSAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggN2I3NmY4OS4uYTEwNDJkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtNjg0LDE2ICs2ODQsMTcgQEAKICNkZWZpbmUgYmhfbG9ja19zb2NrKF9fc2spCXNwaW5fbG9jaygmKChfX3NrKS0+c2tfbG9jay5zbG9jaykpCiAjZGVmaW5lIGJoX3VubG9ja19zb2NrKF9fc2spCXNwaW5fdW5sb2NrKCYoKF9fc2spLT5za19sb2NrLnNsb2NrKSkKIAotZXh0ZXJuIHN0cnVjdCBzb2NrCQkqc2tfYWxsb2MoaW50IGZhbWlseSwgaW50IHByaW9yaXR5LAorZXh0ZXJuIHN0cnVjdCBzb2NrCQkqc2tfYWxsb2MoaW50IGZhbWlseSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHksCiAJCQkJCSAgc3RydWN0IHByb3RvICpwcm90LCBpbnQgemVyb19pdCk7CiBleHRlcm4gdm9pZAkJCXNrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKTsKIAogZXh0ZXJuIHN0cnVjdCBza19idWZmCQkqc29ja193bWFsbG9jKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZm9yY2UsCi0JCQkJCSAgICAgIGludCBwcmlvcml0eSk7CisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYJCSpzb2NrX3JtYWxsb2Moc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIGludCBmb3JjZSwKLQkJCQkJICAgICAgaW50IHByaW9yaXR5KTsKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KTsKIGV4dGVybiB2b2lkCQkJc29ja193ZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkCQkJc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIApAQCAtNzA4LDcgKzcwOSw4IEBACiAJCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJCSAgICAgaW50IG5vYmxvY2ssCiAJCQkJCQkgICAgIGludCAqZXJyY29kZSk7Ci1leHRlcm4gdm9pZCAqc29ja19rbWFsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBwcmlvcml0eSk7CitleHRlcm4gdm9pZCAqc29ja19rbWFsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsCisJCQkgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7CiBleHRlcm4gdm9pZCBzb2NrX2tmcmVlX3Moc3RydWN0IHNvY2sgKnNrLCB2b2lkICptZW0sIGludCBzaXplKTsKIGV4dGVybiB2b2lkIHNrX3NlbmRfc2lndXJnKHN0cnVjdCBzb2NrICpzayk7CiAKQEAgLTExMzIsNyArMTEzNCw4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrX3N0cmVhbV9hbGxvY19wc2tiKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCSAgIGludCBzaXplLCBpbnQgbWVtLCBpbnQgZ2ZwKQorCQkJCQkJICAgaW50IHNpemUsIGludCBtZW0sCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGhkcl9sZW47CkBAIC0xMTU1LDcgKzExNTgsOCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza19zdHJlYW1fYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCSAgaW50IHNpemUsIGludCBnZnApCisJCQkJCQkgIGludCBzaXplLAorCQkJCQkJICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQogewogCXJldHVybiBza19zdHJlYW1fYWxsb2NfcHNrYihzaywgc2l6ZSwgMCwgZ2ZwKTsKIH0KQEAgLTExODgsNyArMTE5Miw3IEBACiAJcmV0dXJuIGF0b21pY19yZWFkKCZzay0+c2tfd21lbV9hbGxvYykgPCAoc2stPnNrX3NuZGJ1ZiAvIDIpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBnZnBfYW55KHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfYW55KHZvaWQpCiB7CiAJcmV0dXJuIGluX3NvZnRpcnEoKSA/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCBhMTY2OTE4Li5mNGY5YWJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtODYwLDcgKzg2MCw4IEBACiBleHRlcm4gdm9pZCB0Y3Bfc2VuZF9wYXJ0aWFsKHN0cnVjdCBzb2NrICopOwogZXh0ZXJuIGludCAgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqKTsKIGV4dGVybiB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spOwotZXh0ZXJuIHZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgaW50IHByaW9yaXR5KTsKK2V4dGVybiB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KTsKIGV4dGVybiBpbnQgIHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqKTsKIGV4dGVybiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7CiBleHRlcm4gdm9pZCB0Y3Bfc2VuZF9hY2soc3RydWN0IHNvY2sgKnNrKTsKQEAgLTk5MSw3ICs5OTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2Zhc3RfcGF0aF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc29jayAqdHApCiB7Ci0JaWYgKHNrYl9xdWV1ZV9sZW4oJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpID09IDAgJiYKKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlKSAmJgogCSAgICB0cC0+cmN2X3duZCAmJgogCSAgICBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpIDwgc2stPnNrX3JjdmJ1ZiAmJgogCSAgICAhdHAtPnVyZ19kYXRhKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY3MuaCBiL2luY2x1ZGUvcGNtY2lhL2NzLmgKaW5kZXggYjQyZGRjMC4uMmNhYjM5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvY3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jcy5oCkBAIC02OCwyMSArNjgsOSBAQAogI2RlZmluZSBSRVNfQUxMT0NBVEVECQkJMHgyMAogI2RlZmluZSBSRVNfUkVNT1ZFRAkJCTB4NDAKIAotdHlwZWRlZiBzdHJ1Y3Qgc2VydmluZm9fdCB7Ci0gICAgY2hhcglTaWduYXR1cmVbMl07Ci0gICAgdV9pbnQJQ291bnQ7Ci0gICAgdV9pbnQJUmV2aXNpb247Ci0gICAgdV9pbnQJQ1NMZXZlbDsKLSAgICBjaGFyCSpWZW5kb3JTdHJpbmc7Ci19IHNlcnZpbmZvX3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGV2ZW50X2NhbGxiYWNrX2FyZ3NfdCB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGNsaWVudF9oYW5kbGU7Ci0gICAgdm9pZAkqaW5mbzsKLSAgICB2b2lkCSptdGRyZXF1ZXN0OwotICAgIHZvaWQJKmJ1ZmZlcjsKLSAgICB2b2lkCSptaXNjOwotICAgIHZvaWQJKmNsaWVudF9kYXRhOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpjbGllbnRfaGFuZGxlOworCXZvaWQJCQkqY2xpZW50X2RhdGE7CiB9IGV2ZW50X2NhbGxiYWNrX2FyZ3NfdDsKIAogLyogZm9yIEdldENvbmZpZ3VyYXRpb25JbmZvICovCkBAIC0zOTMsMjUgKzM4MSwyNSBAQAogCiBzdHJ1Y3QgcGNtY2lhX3NvY2tldDsKIAotaW50IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBjb25mX3JlZ190ICpyZWcpOwotaW50IHBjbWNpYV9kZXJlZ2lzdGVyX2NsaWVudChjbGllbnRfaGFuZGxlX3QgaGFuZGxlKTsKLWludCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBjb25maWdfaW5mb190ICpjb25maWcpOworaW50IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGNvbmZfcmVnX3QgKnJlZyk7CitpbnQgcGNtY2lhX2RlcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CitpbnQgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjb25maWdfaW5mb190ICpjb25maWcpOwogaW50IHBjbWNpYV9nZXRfZmlyc3Rfd2luZG93KHdpbmRvd19oYW5kbGVfdCAqd2luLCB3aW5fcmVxX3QgKnJlcSk7CiBpbnQgcGNtY2lhX2dldF9uZXh0X3dpbmRvdyh3aW5kb3dfaGFuZGxlX3QgKndpbiwgd2luX3JlcV90ICpyZXEpOwotaW50IHBjbWNpYV9nZXRfc3RhdHVzKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGNzX3N0YXR1c190ICpzdGF0dXMpOworaW50IHBjbWNpYV9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY3Nfc3RhdHVzX3QgKnN0YXR1cyk7CiBpbnQgcGNtY2lhX2dldF9tZW1fcGFnZSh3aW5kb3dfaGFuZGxlX3Qgd2luLCBtZW1yZXFfdCAqcmVxKTsKIGludCBwY21jaWFfbWFwX21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpOwotaW50IHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBtb2Rjb25mX3QgKm1vZCk7CitpbnQgcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgbW9kY29uZl90ICptb2QpOwogaW50IHBjbWNpYV9yZWdpc3Rlcl9jbGllbnQoY2xpZW50X2hhbmRsZV90ICpoYW5kbGUsIGNsaWVudF9yZWdfdCAqcmVxKTsKLWludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUpOwotaW50IHBjbWNpYV9yZWxlYXNlX2lvKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGlvX3JlcV90ICpyZXEpOwotaW50IHBjbWNpYV9yZWxlYXNlX2lycShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpcnFfcmVxX3QgKnJlcSk7CitpbnQgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworaW50IHBjbWNpYV9yZWxlYXNlX2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaW9fcmVxX3QgKnJlcSk7CitpbnQgcGNtY2lhX3JlbGVhc2VfaXJxKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaXJxX3JlcV90ICpyZXEpOwogaW50IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyh3aW5kb3dfaGFuZGxlX3Qgd2luKTsKLWludCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGNvbmZpZ19yZXFfdCAqcmVxKTsKLWludCBwY21jaWFfcmVxdWVzdF9pbyhjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpb19yZXFfdCAqcmVxKTsKLWludCBwY21jaWFfcmVxdWVzdF9pcnEoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgaXJxX3JlcV90ICpyZXEpOwotaW50IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhjbGllbnRfaGFuZGxlX3QgKmhhbmRsZSwgd2luX3JlcV90ICpyZXEsIHdpbmRvd19oYW5kbGVfdCAqd2gpOwotaW50IHBjbWNpYV9yZXNldF9jYXJkKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGNsaWVudF9yZXFfdCAqcmVxKTsKK2ludCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY29uZmlnX3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9yZXF1ZXN0X2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaW9fcmVxX3QgKnJlcSk7CitpbnQgcGNtY2lhX3JlcXVlc3RfaXJxKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaXJxX3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKnBfZGV2LCB3aW5fcmVxX3QgKnJlcSwgd2luZG93X2hhbmRsZV90ICp3aCk7CitpbnQgcGNtY2lhX3Jlc2V0X2NhcmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjbGllbnRfcmVxX3QgKnJlcSk7CiBpbnQgcGNtY2lhX3N1c3BlbmRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIGludCBwY21jaWFfcmVzdW1lX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiBpbnQgcGNtY2lhX2VqZWN0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jc190eXBlcy5oIGIvaW5jbHVkZS9wY21jaWEvY3NfdHlwZXMuaAppbmRleCA3ODgxZDQwLi5jMWQxNjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9jc190eXBlcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmgKQEAgLTM0LDggKzM0LDggQEAKIHR5cGVkZWYgdV9jaGFyCWNpc2RhdGFfdDsKIHR5cGVkZWYgdV9zaG9ydAlwYWdlX3Q7CiAKLXN0cnVjdCBjbGllbnRfdDsKLXR5cGVkZWYgc3RydWN0IGNsaWVudF90ICpjbGllbnRfaGFuZGxlX3Q7CitzdHJ1Y3QgcGNtY2lhX2RldmljZTsKK3R5cGVkZWYgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmNsaWVudF9oYW5kbGVfdDsKIAogc3RydWN0IHdpbmRvd190OwogdHlwZWRlZiBzdHJ1Y3Qgd2luZG93X3QgKndpbmRvd19oYW5kbGVfdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2RzLmggYi9pbmNsdWRlL3BjbWNpYS9kcy5oCmluZGV4IDJiNTI1NTMuLjAxOTBlNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2RzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvZHMuaApAQCAtNDksNyArNDksNiBAQAogfSBtdGRfaW5mb190OwogCiB0eXBlZGVmIHVuaW9uIGRzX2lvY3RsX2FyZ190IHsKLSAgICBzZXJ2aW5mb190CQlzZXJ2aW5mbzsKICAgICBhZGp1c3RfdAkJYWRqdXN0OwogICAgIGNvbmZpZ19pbmZvX3QJY29uZmlnOwogICAgIHR1cGxlX3QJCXR1cGxlOwpAQCAtNjUsNyArNjQsNiBAQAogICAgIGNpc2R1bXBfdAkJY2lzZHVtcDsKIH0gZHNfaW9jdGxfYXJnX3Q7CiAKLSNkZWZpbmUgRFNfR0VUX0NBUkRfU0VSVklDRVNfSU5GTwlfSU9SICgnZCcsIDEsIHNlcnZpbmZvX3QpCiAjZGVmaW5lIERTX0FESlVTVF9SRVNPVVJDRV9JTkZPCQlfSU9XUignZCcsIDIsIGFkanVzdF90KQogI2RlZmluZSBEU19HRVRfQ09ORklHVVJBVElPTl9JTkZPCV9JT1dSKCdkJywgMywgY29uZmlnX2luZm9fdCkKICNkZWZpbmUgRFNfR0VUX0ZJUlNUX1RVUExFCQlfSU9XUignZCcsIDQsIHR1cGxlX3QpCkBAIC0xMzMsNiArMTMxLDggQEAKIAogc3RydWN0IHBjbWNpYV9kcml2ZXIgewogCWRldl9saW5rX3QJCSooKmF0dGFjaCkodm9pZCk7CisJaW50ICgqZXZlbnQpCQkoZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5LAorCQkJCSBldmVudF9jYWxsYmFja19hcmdzX3QgKik7CiAJdm9pZAkJCSgqZGV0YWNoKShkZXZfbGlua190ICopOwogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZAkqaWRfdGFibGU7CkBAIC0xNTksMTYgKzE1OSw4IEBACiAJLyogZGVwcmVjYXRlZCwgYSBjbGVhbmVkIHVwIHZlcnNpb24gd2lsbCBiZSBtb3ZlZCBpbnRvIHRoaXMKIAkgICBzdHJ1Y3Qgc29vbiAqLwogCWRldl9saW5rX3QJCSppbnN0YW5jZTsKLQlzdHJ1Y3QgY2xpZW50X3QgewotCQl1X3Nob3J0CQkJY2xpZW50X21hZ2ljOwotCQlzdHJ1Y3QgcGNtY2lhX3NvY2tldAkqU29ja2V0OwotCQl1X2NoYXIJCQlGdW5jdGlvbjsKLQkJdV9pbnQJCQlzdGF0ZTsKLQkJZXZlbnRfdAkJCUV2ZW50TWFzazsKLQkJaW50ICgqZXZlbnRfaGFuZGxlcikJKGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSwKLQkJCQkJIGV2ZW50X2NhbGxiYWNrX2FyZ3NfdCAqKTsKLQkJZXZlbnRfY2FsbGJhY2tfYXJnc190IAlldmVudF9jYWxsYmFja19hcmdzOwotCX0JCQljbGllbnQ7CisJZXZlbnRfY2FsbGJhY2tfYXJnc190IAlldmVudF9jYWxsYmFja19hcmdzOworCXVfaW50CQkJc3RhdGU7CiAKIAkvKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRldmljZSAqLwogCXU4CQkJaGFzX21hbmZfaWQ6MTsKQEAgLTE5Myw4ICsxODUsOCBAQAogI2RlZmluZSB0b19wY21jaWFfZGV2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNtY2lhX2RldmljZSwgZGV2KQogI2RlZmluZSB0b19wY21jaWFfZHJ2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNtY2lhX2RyaXZlciwgZHJ2KQogCi0jZGVmaW5lIGhhbmRsZV90b19wZGV2KGhhbmRsZSkgY29udGFpbmVyX29mKGhhbmRsZSwgc3RydWN0IHBjbWNpYV9kZXZpY2UsIGNsaWVudCk7Ci0jZGVmaW5lIGhhbmRsZV90b19kZXYoaGFuZGxlKSAoKGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBwY21jaWFfZGV2aWNlLCBjbGllbnQpKS0+ZGV2KQorI2RlZmluZSBoYW5kbGVfdG9fcGRldihoYW5kbGUpIChoYW5kbGUpCisjZGVmaW5lIGhhbmRsZV90b19kZXYoaGFuZGxlKSAoaGFuZGxlLT5kZXYpCiAKIC8qIGVycm9yIHJlcG9ydGluZyAqLwogdm9pZCBjc19lcnJvcihjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZnVuYywgaW50IHJldCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS92ZXJzaW9uLmggYi9pbmNsdWRlL3BjbWNpYS92ZXJzaW9uLmgKaW5kZXggZWI4ODI2My4uNWFkOWM1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3ZlcnNpb24uaApAQCAtMSw0ICsxLDMgQEAKIC8qIHZlcnNpb24uaCAxLjk0IDIwMDAvMTAvMDMgMTc6NTU6NDggKERhdmlkIEhpbmRzKSAqLwogCi0jZGVmaW5lIENTX1JFTEVBU0UgIjMuMS4yMiIKLSNkZWZpbmUgQ1NfUkVMRUFTRV9DT0RFIDB4MzExNgorLyogVGhpcyBmaWxlIHdpbGwgYmUgcmVtb3ZlZCwgcGxlYXNlIGRvbid0IGluY2x1ZGUgaXQgKi8KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCBiMTA5MWQ3Li43NTc1NWVmIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogY29uZmlnIEFVRElUU1lTQ0FMTAogCWJvb2wgIkVuYWJsZSBzeXN0ZW0tY2FsbCBhdWRpdGluZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVVESVQgJiYgKFg4NiB8fCBQUEMgfHwgUFBDNjQgfHwgQVJDSF9TMzkwIHx8IElBNjQgfHwgVU1MKQorCWRlcGVuZHMgb24gQVVESVQgJiYgKFg4NiB8fCBQUEMgfHwgUFBDNjQgfHwgQVJDSF9TMzkwIHx8IElBNjQgfHwgVU1MIHx8IFNQQVJDNjQpCiAJZGVmYXVsdCB5IGlmIFNFQ1VSSVRZX1NFTElOVVgKIAloZWxwCiAJICBFbmFibGUgbG93LW92ZXJoZWFkIHN5c3RlbS1jYWxsIGF1ZGl0aW5nIGluZnJhc3RydWN0dXJlIHRoYXQKZGlmZiAtLWdpdCBhL2lwYy9jb21wYXQuYyBiL2lwYy9jb21wYXQuYwppbmRleCA3MGU0ZTRlLi4zODgxZDU2IDEwMDY0NAotLS0gYS9pcGMvY29tcGF0LmMKKysrIGIvaXBjL2NvbXBhdC5jCkBAIC01NzIsNiArNTcyLDcgQEAKIAllcnIgfD0gX19wdXRfdXNlcihzbWktPnNobW1uaSwgJnVwLT5zaG1tbmkpOwogCWVyciB8PSBfX3B1dF91c2VyKHNtaS0+c2htc2VnLCAmdXAtPnNobXNlZyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoc21pLT5zaG1hbGwsICZ1cC0+c2htYWxsKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwdXRfY29tcGF0X3NobV9pbmZvKHN0cnVjdCBzaG1faW5mbyBfX3VzZXIgKmlwLApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2Rpc2suYyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKaW5kZXggZmI4ZGU2My4uYzUxYTRkOSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2Rpc2suYworKysgYi9rZXJuZWwvcG93ZXIvZGlzay5jCkBAIC0yMzQsNiArMjM0LDE2IEBACiB7CiAJaW50IGVycm9yOwogCisJaWYgKCFzd3N1c3BfcmVzdW1lX2RldmljZSkgeworCQlpZiAoIXN0cmxlbihyZXN1bWVfZmlsZSkpCisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJc3dzdXNwX3Jlc3VtZV9kZXZpY2UgPSBuYW1lX3RvX2Rldl90KHJlc3VtZV9maWxlKTsKKwkJcHJfZGVidWcoInN3c3VzcDogUmVzdW1lIEZyb20gUGFydGl0aW9uICVzXG4iLCByZXN1bWVfZmlsZSk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoInN3c3VzcDogUmVzdW1lIEZyb20gUGFydGl0aW9uICVkOiVkXG4iLAorCQkJIE1BSk9SKHN3c3VzcF9yZXN1bWVfZGV2aWNlKSwgTUlOT1Ioc3dzdXNwX3Jlc3VtZV9kZXZpY2UpKTsKKwl9CisKIAlpZiAobm9yZXN1bWUpIHsKIAkJLyoqCiAJCSAqIEZJWE1FOiBJZiBub3Jlc3VtZSBpcyBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFydGl0aW9uCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwppbmRleCAwYTA4NjY0Li4zYmQwZDI2IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCisrKyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKQEAgLTU5LDYgKzU5LDcgQEAKIAlpbnQgdG9kbzsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpbnRrKCAiU3RvcHBpbmcgdGFza3M6ICIgKTsKIAlzdGFydF90aW1lID0gamlmZmllczsKQEAgLTY2LDEyICs2Nyw5IEBACiAJCXRvZG8gPSAwOwogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlkb19lYWNoX3RocmVhZChnLCBwKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQkJaWYgKCFmcmVlemVhYmxlKHApKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKChmcm96ZW4ocCkpIHx8Ci0JCQkgICAgKHAtPnN0YXRlID09IFRBU0tfVFJBQ0VEKSB8fAotCQkJICAgIChwLT5zdGF0ZSA9PSBUQVNLX1NUT1BQRUQpKQorCQkJaWYgKGZyb3plbihwKSkKIAkJCQljb250aW51ZTsKIAogCQkJZnJlZXplKHApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCmluZGV4IGMyODVmYzUuLjdkNzgwMWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYworKysgYi9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKQEAgLTg2OSwxMyArODY5LDYgQEAKIAogYXNtbGlua2FnZSBpbnQgc3dzdXNwX3NhdmUodm9pZCkKIHsKLQlpbnQgZXJyb3IgPSAwOwotCi0JaWYgKChlcnJvciA9IHN3c3VzcF9zd2FwX2NoZWNrKCkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic3dzdXNwOiBGQVRBTDogY2Fubm90IGZpbmQgc3dhcCBkZXZpY2UsIHRyeSAiCi0JCQkJInN3YXBvbiAtYSFcbiIpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQogCXJldHVybiBzdXNwZW5kX3ByZXBhcmVfaW1hZ2UoKTsKIH0KIApAQCAtODkyLDE0ICs4ODUsMjAgQEAKIAkgKiBhdCByZXN1bWUgdGltZSwgYW5kIGV2aWwgd2VpcmRuZXNzIGVuc3Vlcy4KIAkgKi8KIAlpZiAoKGVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19GUkVFWkUpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlNvbWUgZGV2aWNlcyBmYWlsZWQgdG8gcG93ZXIgZG93biwgYWJvcnRpbmcgc3VzcGVuZFxuIik7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJc3dzdXNwX2ZyZWUoKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KKworCWlmICgoZXJyb3IgPSBzd3N1c3Bfc3dhcF9jaGVjaygpKSkgeworCQlwcmludGsoS0VSTl9FUlIgInN3c3VzcDogRkFUQUw6IGNhbm5vdCBmaW5kIHN3YXAgZGV2aWNlLCB0cnkgIgorCQkJCSJzd2Fwb24gLWEhXG4iKTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoKTsKIAlpZiAoKGVycm9yID0gc3dzdXNwX2FyY2hfc3VzcGVuZCgpKSkKLQkJc3dzdXNwX2ZyZWUoKTsKKwkJcHJpbnRrKCJFcnJvciAlZCBzdXNwZW5kaW5nXG4iLCBlcnJvcik7CiAJLyogUmVzdG9yZSBjb250cm9sIGZsb3cgbWFnaWNhbGx5IGFwcGVhcnMgaGVyZSAqLwogCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7CiAJQlVHX09OIChucl9jb3B5X3BhZ2VzX2NoZWNrICE9IG5yX2NvcHlfcGFnZXMpOwpAQCAtMTE2Niw5ICsxMTY1LDkgQEAKIHN0YXRpYyBjb25zdCBjaGFyICogc2FuaXR5X2NoZWNrKHZvaWQpCiB7CiAJZHVtcF9pbmZvKCk7Ci0JaWYoc3dzdXNwX2luZm8udmVyc2lvbl9jb2RlICE9IExJTlVYX1ZFUlNJT05fQ09ERSkKKwlpZiAoc3dzdXNwX2luZm8udmVyc2lvbl9jb2RlICE9IExJTlVYX1ZFUlNJT05fQ09ERSkKIAkJcmV0dXJuICJrZXJuZWwgdmVyc2lvbiI7Ci0JaWYoc3dzdXNwX2luZm8ubnVtX3BoeXNwYWdlcyAhPSBudW1fcGh5c3BhZ2VzKQorCWlmIChzd3N1c3BfaW5mby5udW1fcGh5c3BhZ2VzICE9IG51bV9waHlzcGFnZXMpCiAJCXJldHVybiAibWVtb3J5IHNpemUiOwogCWlmIChzdHJjbXAoc3dzdXNwX2luZm8udXRzLnN5c25hbWUsc3lzdGVtX3V0c25hbWUuc3lzbmFtZSkpCiAJCXJldHVybiAic3lzdGVtIHR5cGUiOwpAQCAtMTM1NiwxNiArMTM1NSw2IEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKCFzd3N1c3BfcmVzdW1lX2RldmljZSkgewotCQlpZiAoIXN0cmxlbihyZXN1bWVfZmlsZSkpCi0JCQlyZXR1cm4gLUVOT0VOVDsKLQkJc3dzdXNwX3Jlc3VtZV9kZXZpY2UgPSBuYW1lX3RvX2Rldl90KHJlc3VtZV9maWxlKTsKLQkJcHJfZGVidWcoInN3c3VzcDogUmVzdW1lIEZyb20gUGFydGl0aW9uICVzXG4iLCByZXN1bWVfZmlsZSk7Ci0JfSBlbHNlIHsKLQkJcHJfZGVidWcoInN3c3VzcDogUmVzdW1lIEZyb20gUGFydGl0aW9uICVkOiVkXG4iLAotCQkJIE1BSk9SKHN3c3VzcF9yZXN1bWVfZGV2aWNlKSwgTUlOT1Ioc3dzdXNwX3Jlc3VtZV9kZXZpY2UpKTsKLQl9Ci0KIAlyZXN1bWVfYmRldiA9IG9wZW5fYnlfZGV2bnVtKHN3c3VzcF9yZXN1bWVfZGV2aWNlLCBGTU9ERV9SRUFEKTsKIAlpZiAoIUlTX0VSUihyZXN1bWVfYmRldikpIHsKIAkJc2V0X2Jsb2Nrc2l6ZShyZXN1bWVfYmRldiwgUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcm9maWxlLmMgYi9rZXJuZWwvcHJvZmlsZS5jCmluZGV4IGFkOGNiYjcuLmY4OTI0OGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcm9maWxlLmMKKysrIGIva2VybmVsL3Byb2ZpbGUuYwpAQCAtMzUsMTEgKzM1LDExIEBACiAjZGVmaW5lIE5SX1BST0ZJTEVfR1JQCQkoTlJfUFJPRklMRV9ISVQvUFJPRklMRV9HUlBTWikKIAogLyogT3Byb2ZpbGUgdGltZXIgdGljayBob29rICovCi1pbnQgKCp0aW1lcl9ob29rKShzdHJ1Y3QgcHRfcmVncyAqKTsKK2ludCAoKnRpbWVyX2hvb2spKHN0cnVjdCBwdF9yZWdzICopIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBhdG9taWNfdCAqcHJvZl9idWZmZXI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwcm9mX2xlbiwgcHJvZl9zaGlmdDsKLXN0YXRpYyBpbnQgcHJvZl9vbjsKK3N0YXRpYyBpbnQgcHJvZl9vbiBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGNwdW1hc2tfdCBwcm9mX2NwdV9tYXNrID0gQ1BVX01BU0tfQUxMOwogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHJvZmlsZV9oaXQgKlsyXSwgY3B1X3Byb2ZpbGVfaGl0cyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDVmMjE4MmQuLjQxMDdkYjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0zODc3LDYgKzM4NzcsMTMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fY29uZF9yZXNjaGVkKHZvaWQpCiB7CisJLyoKKwkgKiBUaGUgQktTIG1pZ2h0IGJlIHJlYWNxdWlyZWQgYmVmb3JlIHdlIGhhdmUgZHJvcHBlZAorCSAqIFBSRUVNUFRfQUNUSVZFLCB3aGljaCBjb3VsZCB0cmlnZ2VyIGEgc2Vjb25kCisJICogY29uZF9yZXNjaGVkKCkgY2FsbC4KKwkgKi8KKwlpZiAodW5saWtlbHkocHJlZW1wdF9jb3VudCgpKSkKKwkJcmV0dXJuOwogCWRvIHsKIAkJYWRkX3ByZWVtcHRfY291bnQoUFJFRU1QVF9BQ1RJVkUpOwogCQlzY2hlZHVsZSgpOwpkaWZmIC0tZ2l0IGEvbGliL3JhZGl4LXRyZWUuYyBiL2xpYi9yYWRpeC10cmVlLmMKaW5kZXggMDRkNjY0My4uMTBiZWQxYyAxMDA2NDQKLS0tIGEvbGliL3JhZGl4LXRyZWUuYworKysgYi9saWIvcmFkaXgtdHJlZS5jCkBAIC01OCw3ICs1OCw3IEBACiAjZGVmaW5lIFJBRElYX1RSRUVfSU5ERVhfQklUUyAgKDggLyogQ0hBUl9CSVQgKi8gKiBzaXplb2YodW5zaWduZWQgbG9uZykpCiAjZGVmaW5lIFJBRElYX1RSRUVfTUFYX1BBVEggKFJBRElYX1RSRUVfSU5ERVhfQklUUy9SQURJWF9UUkVFX01BUF9TSElGVCArIDIpCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhlaWdodF90b19tYXhpbmRleFtSQURJWF9UUkVFX01BWF9QQVRIXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhlaWdodF90b19tYXhpbmRleFtSQURJWF9UUkVFX01BWF9QQVRIXSBfX3JlYWRfbW9zdGx5OwogCiAvKgogICogUmFkaXggdHJlZSBub2RlIGNhY2hlLgpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9vbC5jIGIvbW0vbWVtcG9vbC5jCmluZGV4IDlhNzJmN2QuLjY1ZjI5NTcgMTAwNjQ0Ci0tLSBhL21tL21lbXBvb2wuYworKysgYi9tbS9tZW1wb29sLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCXZvaWQgKmVsZW1lbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKLQlpbnQgZ2ZwX3RlbXA7CisJdW5zaWduZWQgaW50IGdmcF90ZW1wOwogCiAJbWlnaHRfc2xlZXBfaWYoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKTsKIApkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNTk2NjZkOS4uMWU1NjA3NiAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC0yNTMsMTQgKzI1MywxNiBAQAogICogT1IgdHJ5IHRvIGJlIHNtYXJ0IGFib3V0IHdoaWNoIHByb2Nlc3MgdG8ga2lsbC4gTm90ZSB0aGF0IHdlCiAgKiBkb24ndCBoYXZlIHRvIGJlIHBlcmZlY3QgaGVyZSwgd2UganVzdCBoYXZlIHRvIGJlIGdvb2QuCiAgKi8KLXZvaWQgb3V0X29mX21lbW9yeSh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCit2b2lkIG91dF9vZl9tZW1vcnkodW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCBpbnQgb3JkZXIpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOwogCXRhc2tfdCAqIHA7CiAKLQlwcmludGsoIm9vbS1raWxsZXI6IGdmcF9tYXNrPTB4JXhcbiIsIGdmcF9tYXNrKTsKLQkvKiBwcmludCBtZW1vcnkgc3RhdHMgKi8KLQlzaG93X21lbSgpOworCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJcHJpbnRrKCJvb20ta2lsbGVyOiBnZnBfbWFzaz0weCV4LCBvcmRlcj0lZFxuIiwKKwkJCWdmcF9tYXNrLCBvcmRlcik7CisJCXNob3dfbWVtKCk7CisJfQogCiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIHJldHJ5OgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDNjOWY3ZjguLjFkNmJhNmEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTg5NywxMiArODk3LDYgQEAKIAljb25kX3Jlc2NoZWQoKTsKIAogCWlmIChsaWtlbHkoZGlkX3NvbWVfcHJvZ3Jlc3MpKSB7Ci0JCS8qCi0JCSAqIEdvIHRocm91Z2ggdGhlIHpvbmVsaXN0IHlldCBvbmUgbW9yZSB0aW1lLCBrZWVwCi0JCSAqIHZlcnkgaGlnaCB3YXRlcm1hcmsgaGVyZSwgdGhpcyBpcyBvbmx5IHRvIGNhdGNoCi0JCSAqIGEgcGFyYWxsZWwgb29tIGtpbGxpbmcsIHdlIG11c3QgZmFpbCBpZiB3ZSdyZSBzdGlsbAotCQkgKiB1bmRlciBoZWF2eSBwcmVzc3VyZS4KLQkJICovCiAJCWZvciAoaSA9IDA7ICh6ID0gem9uZXNbaV0pICE9IE5VTEw7IGkrKykgewogCQkJaWYgKCF6b25lX3dhdGVybWFya19vayh6LCBvcmRlciwgei0+cGFnZXNfbWluLAogCQkJCQkgICAgICAgY2xhc3N6b25lX2lkeCwgY2FuX3RyeV9oYXJkZXIsCkBAIC05MzYsNyArOTMwLDcgQEAKIAkJCQlnb3RvIGdvdF9wZzsKIAkJfQogCi0JCW91dF9vZl9tZW1vcnkoZ2ZwX21hc2spOworCQlvdXRfb2ZfbWVtb3J5KGdmcF9tYXNrLCBvcmRlcik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCAxMjJkMDMxLi5jOWU3MDZkIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC01ODQsNyArNTg0LDggQEAKIAlyZXR1cm4gY2FjaGVwLT5hcnJheVtzbXBfcHJvY2Vzc29yX2lkKCldOwogfQogCi1zdGF0aWMgaW5saW5lIGttZW1fY2FjaGVfdCAqX19maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLCBpbnQgZ2ZwZmxhZ3MpCitzdGF0aWMgaW5saW5lIGttZW1fY2FjaGVfdCAqX19maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLAorCQkJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcGZsYWdzKQogewogCXN0cnVjdCBjYWNoZV9zaXplcyAqY3NpemVwID0gbWFsbG9jX3NpemVzOwogCkBAIC02MDgsNyArNjA5LDggQEAKIAlyZXR1cm4gY3NpemVwLT5jc19jYWNoZXA7CiB9CiAKLWttZW1fY2FjaGVfdCAqa21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLCBpbnQgZ2ZwZmxhZ3MpCitrbWVtX2NhY2hlX3QgKmttZW1fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplX3Qgc2l6ZSwKKwkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcGZsYWdzKQogewogCXJldHVybiBfX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZSwgZ2ZwZmxhZ3MpOwogfQpAQCAtMjEwMCw3ICsyMTAyLDcgQEAKICNpZiBERUJVRwogc3RhdGljIHZvaWQgKgogY2FjaGVfYWxsb2NfZGVidWdjaGVja19hZnRlcihrbWVtX2NhY2hlX3QgKmNhY2hlcCwKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKm9ianAsIHZvaWQgKmNhbGxlcikKKwkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncywgdm9pZCAqb2JqcCwgdm9pZCAqY2FsbGVyKQogewogCWlmICghb2JqcCkJCiAJCXJldHVybiBvYmpwOwpAQCAtMjM3Miw2ICsyMzc0LDkgQEAKIAlzdHJ1Y3Qgc2xhYiAqc2xhYnA7CiAJa21lbV9idWZjdGxfdCBuZXh0OwogCisJaWYgKG5vZGVpZCA9PSAtMSkKKwkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncyk7CisKIAlmb3IgKGxvb3AgPSAwOztsb29wKyspIHsKIAkJc3RydWN0IGxpc3RfaGVhZCAqcTsKIApAQCAtMjQzOSw3ICsyNDQ0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlKTsKIAotdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCBub2RlKQordm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MsIGludCBub2RlKQogewogCWttZW1fY2FjaGVfdCAqY2FjaGVwOwogCkBAIC0zMDkxLDcgKzMwOTYsNyBAQAogICogQHM6IHRoZSBzdHJpbmcgdG8gZHVwbGljYXRlCiAgKiBAZ2ZwOiB0aGUgR0ZQIG1hc2sgdXNlZCBpbiB0aGUga21hbGxvYygpIGNhbGwgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeQogICovCi1jaGFyICprc3RyZHVwKGNvbnN0IGNoYXIgKnMsIGludCBnZnApCitjaGFyICprc3RyZHVwKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCiB7CiAJc2l6ZV90IGxlbjsKIAljaGFyICpidWY7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwppbmRleCAyZTM0MWRlLi45MDFlZmY3IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXJldHVybiBrZXJuZWxfc2VuZG1zZyhzb2NrLCAmbXNnLCAmaXYsIDEsIGxlbik7CiB9CiAKLXN0YXRpYyBpbnQgY210cF9wcm9jZXNzX3RyYW5zbWl0KHN0cnVjdCBjbXRwX3Nlc3Npb24gKnNlc3Npb24pCitzdGF0aWMgdm9pZCBjbXRwX3Byb2Nlc3NfdHJhbnNtaXQoc3RydWN0IGNtdHBfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbnNrYjsKIAl1bnNpZ25lZCBjaGFyICpoZHI7CkBAIC0yMjMsNyArMjIzLDcgQEAKIAogCWlmICghKG5za2IgPSBhbGxvY19za2Ioc2Vzc2lvbi0+bXR1LCBHRlBfQVRPTUlDKSkpIHsKIAkJQlRfRVJSKCJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBmcmFtZSIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuOwogCX0KIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNlc3Npb24tPnRyYW5zbWl0KSkpIHsKQEAgLTI3NSw4ICsyNzUsNiBAQAogCWNtdHBfc2VuZF9mcmFtZShzZXNzaW9uLCBuc2tiLT5kYXRhLCBuc2tiLT5sZW4pOwogCiAJa2ZyZWVfc2tiKG5za2IpOwotCi0JcmV0dXJuIHNrYl9xdWV1ZV9sZW4oJnNlc3Npb24tPnRyYW5zbWl0KTsKIH0KIAogc3RhdGljIGludCBjbXRwX3Nlc3Npb24odm9pZCAqYXJnKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggYWZmYmM1NS4uZGU4YWY1ZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAlyZXR1cm4ga2VybmVsX3NlbmRtc2coc29jaywgJm1zZywgJml2LCAxLCBsZW4pOwogfQogCi1zdGF0aWMgaW50IGhpZHBfcHJvY2Vzc190cmFuc21pdChzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uKQorc3RhdGljIHZvaWQgaGlkcF9wcm9jZXNzX3RyYW5zbWl0KHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtNDUzLDkgKzQ1Myw2IEBACiAJCWhpZHBfc2V0X3RpbWVyKHNlc3Npb24pOwogCQlrZnJlZV9za2Ioc2tiKTsKIAl9Ci0KLQlyZXR1cm4gc2tiX3F1ZXVlX2xlbigmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCkgKwotCQkJCXNrYl9xdWV1ZV9sZW4oJnNlc3Npb24tPmludHJfdHJhbnNtaXQpOwogfQogCiBzdGF0aWMgaW50IGhpZHBfc2Vzc2lvbih2b2lkICphcmcpCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKaW5kZXggZjNmNjM1NS4uNjNhMTIzYyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwpAQCAtNTkwLDggKzU5MCwxMSBAQAogCWZvciAoOzspIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQlpZiAoc2tiX3F1ZXVlX2xlbigmc2stPnNrX3JlY2VpdmVfcXVldWUpIHx8IHNrLT5za19lcnIgfHwgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikgfHwKLQkJCQlzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCAhdGltZW8pCisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkgfHwKKwkJICAgIHNrLT5za19lcnIgfHwKKwkJICAgIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pIHx8CisJCSAgICBzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fAorCQkgICAgIXRpbWVvKQogCQkJYnJlYWs7CiAKIAkJc2V0X2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwppbmRleCA2ZDY4OTIwLi42MzA0NTkwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwpAQCAtNzgxLDcgKzc4MSw3IEBACiAKIAlCVF9EQkcoInR0eSAlcCBkZXYgJXAiLCB0dHksIGRldik7CiAKLQlpZiAoc2tiX3F1ZXVlX2xlbigmZGxjLT50eF9xdWV1ZSkpCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJmRsYy0+dHhfcXVldWUpKQogCQlyZXR1cm4gZGxjLT5tdHU7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggN2Y1ZjYyYy4uZmY5ZGMwMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExMjcsNyArMTEyNyw3IEBACiBleHRlcm4gdm9pZCBza2JfcmVsZWFzZV9kYXRhKHN0cnVjdCBza19idWZmICopOwogCiAvKiBLZWVwIGhlYWQgdGhlIHNhbWU6IHJlcGxhY2UgZGF0YSAqLwotaW50IF9fc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ2ZwX21hc2spCitpbnQgX19za2JfbGluZWFyaXplKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAl1OCAqZGF0YTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggNzMzZGVlZS4uZDlmN2IwNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogICoJQnVmZmVycyBtYXkgb25seSBiZSBhbGxvY2F0ZWQgZnJvbSBpbnRlcnJ1cHRzIHVzaW5nIGEgQGdmcF9tYXNrIG9mCiAgKgklR0ZQX0FUT01JQy4KICAqLwotc3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGdmcF9tYXNrKQorc3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTggKmRhdGE7CkBAIC0xODIsNyArMTgyLDggQEAKICAqCSVHRlBfQVRPTUlDLgogICovCiBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zyb21fY2FjaGUoa21lbV9jYWNoZV90ICpjcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBzaXplLCBpbnQgZ2ZwX21hc2spCisJCQkJICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXU4ICpkYXRhOwpAQCAtMzIyLDcgKzMyMyw3IEBACiAgKgklR0ZQX0FUT01JQy4KICAqLwogCi1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2Nsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBnZnBfbWFzaykKK3N0cnVjdCBza19idWZmICpza2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKQogewogCXN0cnVjdCBza19idWZmICpuID0ga21lbV9jYWNoZV9hbGxvYyhza2J1ZmZfaGVhZF9jYWNoZSwgZ2ZwX21hc2spOwogCkBAIC00NjAsNyArNDYxLDcgQEAKICAqCWhlYWRlciBpcyBnb2luZyB0byBiZSBtb2RpZmllZC4gVXNlIHBza2JfY29weSgpIGluc3RlYWQuCiAgKi8KIAotc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBnZnBfbWFzaykKK3N0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCiB7CiAJaW50IGhlYWRlcmxlbiA9IHNrYi0+ZGF0YSAtIHNrYi0+aGVhZDsKIAkvKgpAQCAtNDk5LDcgKzUwMCw3IEBACiAgKglUaGUgcmV0dXJuZWQgYnVmZmVyIGhhcyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgogICovCiAKLXN0cnVjdCBza19idWZmICpwc2tiX2NvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGdmcF9tYXNrKQorc3RydWN0IHNrX2J1ZmYgKnBza2JfY29weShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCiB7CiAJLyoKIAkgKglBbGxvY2F0ZSB0aGUgY29weSBidWZmZXIKQEAgLTU1Nyw3ICs1NTgsOCBAQAogICoJcmVsb2FkZWQgYWZ0ZXIgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgogICovCiAKLWludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLCBpbnQgZ2ZwX21hc2spCitpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCwKKwkJICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCiB7CiAJaW50IGk7CiAJdTggKmRhdGE7CkBAIC02NDcsNyArNjQ5LDggQEAKICAqCW9ubHkgYnkgbmV0ZmlsdGVyIGluIHRoZSBjYXNlcyB3aGVuIGNoZWNrc3VtIGlzIHJlY2FsY3VsYXRlZD8gLS1BTksKICAqLwogc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCWludCBuZXdoZWFkcm9vbSwgaW50IG5ld3RhaWxyb29tLCBpbnQgZ2ZwX21hc2spCisJCQkJaW50IG5ld2hlYWRyb29tLCBpbnQgbmV3dGFpbHJvb20sCisJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKQogewogCS8qCiAJICoJQWxsb2NhdGUgdGhlIGNvcHkgYnVmZmVyCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggYTZlYzNhZC4uOGIzNWNjZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtNjIyLDcgKzYyMiw4IEBACiAgKglAcHJvdDogc3RydWN0IHByb3RvIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5ldyBzb2NrIGluc3RhbmNlCiAgKglAemVyb19pdDogaWYgd2Ugc2hvdWxkIHplcm8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzb2NrCiAgKi8KLXN0cnVjdCBzb2NrICpza19hbGxvYyhpbnQgZmFtaWx5LCBpbnQgcHJpb3JpdHksIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IHplcm9faXQpCitzdHJ1Y3Qgc29jayAqc2tfYWxsb2MoaW50IGZhbWlseSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5LAorCQkgICAgICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCB6ZXJvX2l0KQogewogCXN0cnVjdCBzb2NrICpzayA9IE5VTEw7CiAJa21lbV9jYWNoZV90ICpzbGFiID0gcHJvdC0+c2xhYjsKQEAgLTc1MCw3ICs3NTEsOCBAQAogLyoKICAqIEFsbG9jYXRlIGEgc2tiIGZyb20gdGhlIHNvY2tldCdzIHNlbmQgYnVmZmVyLgogICovCi1zdHJ1Y3Qgc2tfYnVmZiAqc29ja193bWFsbG9jKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZm9yY2UsIGludCBwcmlvcml0eSkKK3N0cnVjdCBza19idWZmICpzb2NrX3dtYWxsb2Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBmb3JjZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KQogewogCWlmIChmb3JjZSB8fCBhdG9taWNfcmVhZCgmc2stPnNrX3dtZW1fYWxsb2MpIDwgc2stPnNrX3NuZGJ1ZikgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiA9IGFsbG9jX3NrYihzaXplLCBwcmlvcml0eSk7CkBAIC03NjUsNyArNzY3LDggQEAKIC8qCiAgKiBBbGxvY2F0ZSBhIHNrYiBmcm9tIHRoZSBzb2NrZXQncyByZWNlaXZlIGJ1ZmZlci4KICAqLyAKLXN0cnVjdCBza19idWZmICpzb2NrX3JtYWxsb2Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBmb3JjZSwgaW50IHByaW9yaXR5KQorc3RydWN0IHNrX2J1ZmYgKnNvY2tfcm1hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGZvcmNlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpCiB7CiAJaWYgKGZvcmNlIHx8IGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPCBzay0+c2tfcmN2YnVmKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2Ioc2l6ZSwgcHJpb3JpdHkpOwpAQCAtNzgwLDcgKzc4Myw3IEBACiAvKiAKICAqIEFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGZyb20gdGhlIHNvY2tldCdzIG9wdGlvbiBtZW1vcnkgYnVmZmVyLgogICovIAotdm9pZCAqc29ja19rbWFsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBwcmlvcml0eSkKK3ZvaWQgKnNvY2tfa21hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpCiB7CiAJaWYgKCh1bnNpZ25lZClzaXplIDw9IHN5c2N0bF9vcHRtZW1fbWF4ICYmCiAJICAgIGF0b21pY19yZWFkKCZzay0+c2tfb21lbV9hbGxvYykgKyBzaXplIDwgc3lzY3RsX29wdG1lbV9tYXgpIHsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCmluZGV4IDI5YmIzY2QuLjk2YTAyODAgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwpAQCAtNTM2LDcgKzUzNiw3IEBACiAJICogd2UgYXJlIGRvdWJsZSBjaGVja2luZyB0aGF0IHdlIGFyZSBub3Qgc2VuZGluZyB0b28KIAkgKiBtYW55IG9mIHRoZXNlIGtlZXBhbGl2ZSBmcmFtZXMuCiAJICovCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnNjcC0+b3RoZXJfeG1pdF9xdWV1ZSkgPT0gMCkKKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzY3AtPm90aGVyX3htaXRfcXVldWUpKQogCQlkbl9uc3Bfc2VuZF9saW5rKHNrLCBETl9OT0NIQU5HRSwgMCk7CiB9CiAKQEAgLTExOTEsNyArMTE5MSw3IEBACiAJc3RydWN0IGRuX3NjcCAqc2NwID0gRE5fU0soc2spOwogCWludCBtYXNrID0gZGF0YWdyYW1fcG9sbChmaWxlLCBzb2NrLCB3YWl0KTsKIAotCWlmIChza2JfcXVldWVfbGVuKCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpKQorCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpKQogCQltYXNrIHw9IFBPTExSREJBTkQ7CiAKIAlyZXR1cm4gbWFzazsKQEAgLTEyMTQsNyArMTIxNCw3IEBACiAKIAljYXNlIFNJT0NBVE1BUks6CiAJCWxvY2tfc29jayhzayk7Ci0JCXZhbCA9IChza2JfcXVldWVfbGVuKCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpICE9IDApOworCQl2YWwgPSAhc2tiX3F1ZXVlX2VtcHR5KCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpOwogCQlpZiAoc2NwLT5zdGF0ZSAhPSBETl9SVU4pCiAJCQl2YWwgPSAtRU5PVENPTk47CiAJCXJlbGVhc2Vfc29jayhzayk7CkBAIC0xNjMwLDcgKzE2MzAsNyBAQAogCWludCBsZW4gPSAwOwogCiAJaWYgKGZsYWdzICYgTVNHX09PQikKLQkJcmV0dXJuIHNrYl9xdWV1ZV9sZW4ocSkgPyAxIDogMDsKKwkJcmV0dXJuICFza2JfcXVldWVfZW1wdHkocSkgPyAxIDogMDsKIAogCXdoaWxlKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKilxKSB7CiAJCXN0cnVjdCBkbl9za2JfY2IgKmNiID0gRE5fU0tCX0NCKHNrYik7CkBAIC0xNzA3LDcgKzE3MDcsNyBAQAogCQlpZiAoc2stPnNrX2VycikKIAkJCWdvdG8gb3V0OwogCi0JCWlmIChza2JfcXVldWVfbGVuKCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpKSB7CisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpKSB7CiAJCQlpZiAoIShmbGFncyAmIE1TR19PT0IpKSB7CiAJCQkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX09PQjsKIAkJCQlpZiAoIXNjcC0+b3RoZXJfcmVwb3J0KSB7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX25zcF9vdXQuYyBiL25ldC9kZWNuZXQvZG5fbnNwX291dC5jCmluZGV4IDQyYWJiZjMuLjhjY2UxZmQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbnNwX291dC5jCisrKyBiL25ldC9kZWNuZXQvZG5fbnNwX291dC5jCkBAIC0zNDIsNyArMzQyLDggQEAKIAogCWRuX25zcF9vdXRwdXQoc2spOwogCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnNjcC0+ZGF0YV94bWl0X3F1ZXVlKSB8fCBza2JfcXVldWVfbGVuKCZzY3AtPm90aGVyX3htaXRfcXVldWUpKQorCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzY3AtPmRhdGFfeG1pdF9xdWV1ZSkgfHwKKwkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmc2NwLT5vdGhlcl94bWl0X3F1ZXVlKSkKIAkJc2NwLT5wZXJzaXN0ID0gZG5fbnNwX3BlcnNpc3Qoc2spOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggY2I3NTk0OC4uMjc5ZjU3YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtOTcwLDcgKzk3MCw4IEBACiAJCSAqCVJGQyAxMTIyOiAzLjIuMi44IEFuIElDTVBfVElNRVNUQU1QIE1BWSBiZSBzaWxlbnRseQogCQkgKgkgIGRpc2NhcmRlZCBpZiB0byBicm9hZGNhc3QvbXVsdGljYXN0LgogCQkgKi8KLQkJaWYgKGljbXBoLT50eXBlID09IElDTVBfRUNITyAmJgorCQlpZiAoKGljbXBoLT50eXBlID09IElDTVBfRUNITyB8fAorCQkgICAgIGljbXBoLT50eXBlID09IElDTVBfVElNRVNUQU1QKSAmJgogCQkgICAgc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cykgewogCQkJZ290byBlcnJvcjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IDFmMzE4MzEuLjUwODhmOTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTE2MTUsOSArMTYxNSwxMCBAQAogewogCWludCBlcnI7CiAJdTMyIGFkZHIgPSBpbXItPmltcl9tdWx0aWFkZHIuc19hZGRyOwotCXN0cnVjdCBpcF9tY19zb2NrbGlzdCAqaW1sLCAqaTsKKwlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKmltbD1OVUxMLCAqaTsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCWludCBpZmluZGV4OwogCWludCBjb3VudCA9IDA7CiAKIAlpZiAoIU1VTFRJQ0FTVChhZGRyKSkKQEAgLTE2MzMsMzcgKzE2MzQsMzAgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWltbCA9IChzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKilzb2NrX2ttYWxsb2Moc2ssIHNpemVvZigqaW1sKSwgR0ZQX0tFUk5FTCk7Ci0KIAllcnIgPSAtRUFERFJJTlVTRTsKKwlpZmluZGV4ID0gaW1yLT5pbXJfaWZpbmRleDsKIAlmb3IgKGkgPSBpbmV0LT5tY19saXN0OyBpOyBpID0gaS0+bmV4dCkgewotCQlpZiAobWVtY21wKCZpLT5tdWx0aSwgaW1yLCBzaXplb2YoKmltcikpID09IDApIHsKLQkJCS8qIE5ldyBzdHlsZSBhZGRpdGlvbnMgYXJlIHJlZmVyZW5jZSBjb3VudGVkICovCi0JCQlpZiAoaW1yLT5pbXJfYWRkcmVzcy5zX2FkZHIgPT0gMCkgewotCQkJCWktPmNvdW50Kys7Ci0JCQkJZXJyID0gMDsKLQkJCX0KKwkJaWYgKGktPm11bHRpLmltcl9tdWx0aWFkZHIuc19hZGRyID09IGFkZHIgJiYKKwkJICAgIGktPm11bHRpLmltcl9pZmluZGV4ID09IGlmaW5kZXgpCiAJCQlnb3RvIGRvbmU7Ci0JCX0KIAkJY291bnQrKzsKIAl9CiAJZXJyID0gLUVOT0JVRlM7Ci0JaWYgKGltbCA9PSBOVUxMIHx8IGNvdW50ID49IHN5c2N0bF9pZ21wX21heF9tZW1iZXJzaGlwcykKKwlpZiAoY291bnQgPj0gc3lzY3RsX2lnbXBfbWF4X21lbWJlcnNoaXBzKQogCQlnb3RvIGRvbmU7CisJaW1sID0gKHN0cnVjdCBpcF9tY19zb2NrbGlzdCAqKXNvY2tfa21hbGxvYyhzayxzaXplb2YoKmltbCksR0ZQX0tFUk5FTCk7CisJaWYgKGltbCA9PSBOVUxMKQorCQlnb3RvIGRvbmU7CisKIAltZW1jcHkoJmltbC0+bXVsdGksIGltciwgc2l6ZW9mKCppbXIpKTsKIAlpbWwtPm5leHQgPSBpbmV0LT5tY19saXN0OwotCWltbC0+Y291bnQgPSAxOwogCWltbC0+c2ZsaXN0ID0gTlVMTDsKIAlpbWwtPnNmbW9kZSA9IE1DQVNUX0VYQ0xVREU7CiAJaW5ldC0+bWNfbGlzdCA9IGltbDsKIAlpcF9tY19pbmNfZ3JvdXAoaW5fZGV2LCBhZGRyKTsKLQlpbWwgPSBOVUxMOwogCWVyciA9IDA7Ci0KIGRvbmU6CiAJcnRubF9zaHVubG9jaygpOwotCWlmIChpbWwpCi0JCXNvY2tfa2ZyZWVfcyhzaywgaW1sLCBzaXplb2YoKmltbCkpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE2OTMsMzAgKzE2ODcsMjUgQEAKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwX21jX3NvY2tsaXN0ICppbWwsICoqaW1scDsKKwlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CisJdTMyIGdyb3VwID0gaW1yLT5pbXJfbXVsdGlhZGRyLnNfYWRkcjsKKwl1MzIgaWZpbmRleDsKIAogCXJ0bmxfbG9jaygpOworCWluX2RldiA9IGlwX21jX2ZpbmRfZGV2KGltcik7CisJaWYgKCFpbl9kZXYpIHsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmaW5kZXggPSBpbXItPmltcl9pZmluZGV4OwogCWZvciAoaW1scCA9ICZpbmV0LT5tY19saXN0OyAoaW1sID0gKmltbHApICE9IE5VTEw7IGltbHAgPSAmaW1sLT5uZXh0KSB7Ci0JCWlmIChpbWwtPm11bHRpLmltcl9tdWx0aWFkZHIuc19hZGRyPT1pbXItPmltcl9tdWx0aWFkZHIuc19hZGRyICYmCi0JCSAgICBpbWwtPm11bHRpLmltcl9hZGRyZXNzLnNfYWRkcj09aW1yLT5pbXJfYWRkcmVzcy5zX2FkZHIgJiYKLQkJICAgICghaW1yLT5pbXJfaWZpbmRleCB8fCBpbWwtPm11bHRpLmltcl9pZmluZGV4PT1pbXItPmltcl9pZmluZGV4KSkgewotCQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCi0JCQlpbl9kZXYgPSBpbmV0ZGV2X2J5X2luZGV4KGltbC0+bXVsdGkuaW1yX2lmaW5kZXgpOwotCQkJaWYgKGluX2RldikKLQkJCQkodm9pZCkgaXBfbWNfbGVhdmVfc3JjKHNrLCBpbWwsIGluX2Rldik7Ci0JCQlpZiAoLS1pbWwtPmNvdW50KSB7Ci0JCQkJcnRubF91bmxvY2soKTsKLQkJCQlpZiAoaW5fZGV2KQotCQkJCQlpbl9kZXZfcHV0KGluX2Rldik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9CisJCWlmIChpbWwtPm11bHRpLmltcl9tdWx0aWFkZHIuc19hZGRyID09IGdyb3VwICYmCisJCSAgICBpbWwtPm11bHRpLmltcl9pZmluZGV4ID09IGlmaW5kZXgpIHsKKwkJCSh2b2lkKSBpcF9tY19sZWF2ZV9zcmMoc2ssIGltbCwgaW5fZGV2KTsKIAogCQkJKmltbHAgPSBpbWwtPm5leHQ7CiAKLQkJCWlmIChpbl9kZXYpIHsKLQkJCQlpcF9tY19kZWNfZ3JvdXAoaW5fZGV2LCBpbXItPmltcl9tdWx0aWFkZHIuc19hZGRyKTsKLQkJCQlpbl9kZXZfcHV0KGluX2Rldik7Ci0JCQl9CisJCQlpcF9tY19kZWNfZ3JvdXAoaW5fZGV2LCBncm91cCk7CiAJCQlydG5sX3VubG9jaygpOwogCQkJc29ja19rZnJlZV9zKHNrLCBpbWwsIHNpemVvZigqaW1sKSk7CiAJCQlyZXR1cm4gMDsKQEAgLTE3MzYsNiArMTcyNSw3IEBACiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwX3NmX3NvY2tsaXN0ICpwc2w7CisJaW50IGxlYXZlZ3JvdXAgPSAwOwogCWludCBpLCBqLCBydjsKIAogCWlmICghTVVMVElDQVNUKGFkZHIpKQpAQCAtMTc1NSwxNSArMTc0NSwyMCBAQAogCWVyciA9IC1FQUREUk5PVEFWQUlMOwogCiAJZm9yIChwbWM9aW5ldC0+bWNfbGlzdDsgcG1jOyBwbWM9cG1jLT5uZXh0KSB7Ci0JCWlmIChtZW1jbXAoJnBtYy0+bXVsdGksIG1yZXFzLCAyKnNpemVvZihfX3UzMikpID09IDApCisJCWlmIChwbWMtPm11bHRpLmltcl9tdWx0aWFkZHIuc19hZGRyID09IGltci5pbXJfbXVsdGlhZGRyLnNfYWRkcgorCQkgICAgJiYgcG1jLT5tdWx0aS5pbXJfaWZpbmRleCA9PSBpbXIuaW1yX2lmaW5kZXgpCiAJCQlicmVhazsKIAl9Ci0JaWYgKCFwbWMpCQkvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovCisJaWYgKCFwbWMpIHsJCS8qIG11c3QgaGF2ZSBhIHByaW9yIGpvaW4gKi8KKwkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBkb25lOworCX0KIAkvKiBpZiBhIHNvdXJjZSBmaWx0ZXIgd2FzIHNldCwgbXVzdCBiZSB0aGUgc2FtZSBtb2RlIGFzIGJlZm9yZSAqLwogCWlmIChwbWMtPnNmbGlzdCkgewotCQlpZiAocG1jLT5zZm1vZGUgIT0gb21vZGUpCisJCWlmIChwbWMtPnNmbW9kZSAhPSBvbW9kZSkgeworCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gZG9uZTsKKwkJfQogCX0gZWxzZSBpZiAocG1jLT5zZm1vZGUgIT0gb21vZGUpIHsKIAkJLyogYWxsb3cgbW9kZSBzd2l0Y2hlcyBmb3IgZW1wdHktc2V0IGZpbHRlcnMgKi8KIAkJaXBfbWNfYWRkX3NyYyhpbl9kZXYsICZtcmVxcy0+aW1yX211bHRpYWRkciwgb21vZGUsIDAsIE5VTEwsIDApOwpAQCAtMTc3NSw3ICsxNzcwLDcgQEAKIAlwc2wgPSBwbWMtPnNmbGlzdDsKIAlpZiAoIWFkZCkgewogCQlpZiAoIXBzbCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gZG9uZTsJLyogZXJyID0gLUVBRERSTk9UQVZBSUwgKi8KIAkJcnYgPSAhMDsKIAkJZm9yIChpPTA7IGk8cHNsLT5zbF9jb3VudDsgaSsrKSB7CiAJCQlydiA9IG1lbWNtcCgmcHNsLT5zbF9hZGRyW2ldLCAmbXJlcXMtPmltcl9zb3VyY2VhZGRyLApAQCAtMTc4NCw3ICsxNzc5LDEzIEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHJ2KQkJLyogc291cmNlIG5vdCBmb3VuZCAqLworCQkJZ290byBkb25lOwkvKiBlcnIgPSAtRUFERFJOT1RBVkFJTCAqLworCisJCS8qIHNwZWNpYWwgY2FzZSAtIChJTkNMVURFLCBlbXB0eSkgPT0gTEVBVkVfR1JPVVAgKi8KKwkJaWYgKHBzbC0+c2xfY291bnQgPT0gMSAmJiBvbW9kZSA9PSBNQ0FTVF9JTkNMVURFKSB7CisJCQlsZWF2ZWdyb3VwID0gMTsKIAkJCWdvdG8gZG9uZTsKKwkJfQogCiAJCS8qIHVwZGF0ZSB0aGUgaW50ZXJmYWNlIGZpbHRlciAqLwogCQlpcF9tY19kZWxfc3JjKGluX2RldiwgJm1yZXFzLT5pbXJfbXVsdGlhZGRyLCBvbW9kZSwgMSwgCkBAIC0xODQyLDE4ICsxODQzLDIxIEBACiAJCSZtcmVxcy0+aW1yX3NvdXJjZWFkZHIsIDEpOwogZG9uZToKIAlydG5sX3NodW5sb2NrKCk7CisJaWYgKGxlYXZlZ3JvdXApCisJCXJldHVybiBpcF9tY19sZWF2ZV9ncm91cChzaywgJmltcik7CiAJcmV0dXJuIGVycjsKIH0KIAogaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KQogewotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAJc3RydWN0IGlwX21yZXFuCWltcjsKIAl1MzIgYWRkciA9IG1zZi0+aW1zZl9tdWx0aWFkZHI7CiAJc3RydWN0IGlwX21jX3NvY2tsaXN0ICpwbWM7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKm5ld3BzbCwgKnBzbDsKKwlpbnQgbGVhdmVncm91cCA9IDA7CiAKIAlpZiAoIU1VTFRJQ0FTVChhZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xODcyLDE1ICsxODc2LDIyIEBACiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JZXJyID0gLUVBRERSTk9UQVZBSUw7CisKKwkvKiBzcGVjaWFsIGNhc2UgLSAoSU5DTFVERSwgZW1wdHkpID09IExFQVZFX0dST1VQICovCisJaWYgKG1zZi0+aW1zZl9mbW9kZSA9PSBNQ0FTVF9JTkNMVURFICYmIG1zZi0+aW1zZl9udW1zcmMgPT0gMCkgeworCQlsZWF2ZWdyb3VwID0gMTsKKwkJZ290byBkb25lOworCX0KIAogCWZvciAocG1jPWluZXQtPm1jX2xpc3Q7IHBtYzsgcG1jPXBtYy0+bmV4dCkgewogCQlpZiAocG1jLT5tdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PSBtc2YtPmltc2ZfbXVsdGlhZGRyICYmCiAJCSAgICBwbWMtPm11bHRpLmltcl9pZmluZGV4ID09IGltci5pbXJfaWZpbmRleCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoIXBtYykJCS8qIG11c3QgaGF2ZSBhIHByaW9yIGpvaW4gKi8KKwlpZiAoIXBtYykgewkJLyogbXVzdCBoYXZlIGEgcHJpb3Igam9pbiAqLworCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CisJfQogCWlmIChtc2YtPmltc2ZfbnVtc3JjKSB7CiAJCW5ld3BzbCA9IChzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKilzb2NrX2ttYWxsb2Moc2ssCiAJCQkJSVBfU0ZMU0laRShtc2YtPmltc2ZfbnVtc3JjKSwgR0ZQX0tFUk5FTCk7CkBAIC0xOTA5LDggKzE5MjAsMTEgQEAKIAkJCTAsIE5VTEwsIDApOwogCXBtYy0+c2ZsaXN0ID0gbmV3cHNsOwogCXBtYy0+c2Ztb2RlID0gbXNmLT5pbXNmX2Ztb2RlOworCWVyciA9IDA7CiBkb25lOgogCXJ0bmxfc2h1bmxvY2soKTsKKwlpZiAobGVhdmVncm91cCkKKwkJZXJyID0gaXBfbWNfbGVhdmVfZ3JvdXAoc2ssICZpbXIpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IGY4YjE3MmYuLmZjN2M0ODEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtNjc3LDExICs2NzcsMTEgQEAKIAkJCQltcmVxLmltcl9hZGRyZXNzLnNfYWRkciA9IG1yZXFzLmltcl9pbnRlcmZhY2U7CiAJCQkJbXJlcS5pbXJfaWZpbmRleCA9IDA7CiAJCQkJZXJyID0gaXBfbWNfam9pbl9ncm91cChzaywgJm1yZXEpOwotCQkJCWlmIChlcnIpCisJCQkJaWYgKGVyciAmJiBlcnIgIT0gLUVBRERSSU5VU0UpCiAJCQkJCWJyZWFrOwogCQkJCW9tb2RlID0gTUNBU1RfSU5DTFVERTsKIAkJCQlhZGQgPSAxOwotCQkJfSBlbHNlIC8qSVBfRFJPUF9TT1VSQ0VfTUVNQkVSU0hJUCAqLyB7CisJCQl9IGVsc2UgLyogSVBfRFJPUF9TT1VSQ0VfTUVNQkVSU0hJUCAqLyB7CiAJCQkJb21vZGUgPSBNQ0FTVF9JTkNMVURFOwogCQkJCWFkZCA9IDA7CiAJCQl9CkBAIC03NTQsNyArNzU0LDcgQEAKIAkJCQltcmVxLmltcl9hZGRyZXNzLnNfYWRkciA9IDA7CiAJCQkJbXJlcS5pbXJfaWZpbmRleCA9IGdyZXFzLmdzcl9pbnRlcmZhY2U7CiAJCQkJZXJyID0gaXBfbWNfam9pbl9ncm91cChzaywgJm1yZXEpOwotCQkJCWlmIChlcnIpCisJCQkJaWYgKGVyciAmJiBlcnIgIT0gLUVBRERSSU5VU0UpCiAJCQkJCWJyZWFrOwogCQkJCWdyZXFzLmdzcl9pbnRlcmZhY2UgPSBtcmVxLmltcl9pZmluZGV4OwogCQkJCW9tb2RlID0gTUNBU1RfSU5DTFVERTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggMjk4OTRjNy4uZGRiNmNlNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTExMDUsNyArMTEwNSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAotCU5FVF9BRERfU1RBVFNfVVNFUihMSU5VWF9NSUJfVENQUFJFUVVFVUVELCBza2JfcXVldWVfbGVuKCZ0cC0+dWNvcHkucHJlcXVldWUpKTsKKwlORVRfSU5DX1NUQVRTX1VTRVIoTElOVVhfTUlCX1RDUFBSRVFVRVVFRCk7CiAKIAkvKiBSWCBwcm9jZXNzIHdhbnRzIHRvIHJ1biB3aXRoIGRpc2FibGVkIEJIcywgdGhvdWdoIGl0IGlzIG5vdAogCSAqIG5lY2Vzc2FyeSAqLwpAQCAtMTM2OSw3ICsxMzY5LDcgQEAKIAkJCSAqIGlzIG5vdCBlbXB0eS4gSXQgaXMgbW9yZSBlbGVnYW50LCBidXQgZWF0cyBjeWNsZXMsCiAJCQkgKiB1bmZvcnR1bmF0ZWx5LgogCQkJICovCi0JCQlpZiAoc2tiX3F1ZXVlX2xlbigmdHAtPnVjb3B5LnByZXF1ZXVlKSkKKwkJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZ0cC0+dWNvcHkucHJlcXVldWUpKQogCQkJCWdvdG8gZG9fcHJlcXVldWU7CiAKIAkJCS8qIF9fIFNldCByZWFsdGltZSBwb2xpY3kgaW4gc2NoZWR1bGVyIF9fICovCkBAIC0xMzk0LDcgKzEzOTQsNyBAQAogCQkJfQogCiAJCQlpZiAodHAtPnJjdl9ueHQgPT0gdHAtPmNvcGllZF9zZXEgJiYKLQkJCSAgICBza2JfcXVldWVfbGVuKCZ0cC0+dWNvcHkucHJlcXVldWUpKSB7CisJCQkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmdHAtPnVjb3B5LnByZXF1ZXVlKSkgewogZG9fcHJlcXVldWU6CiAJCQkJdGNwX3ByZXF1ZXVlX3Byb2Nlc3Moc2spOwogCkBAIC0xNDc2LDcgKzE0NzYsNyBAQAogCX0gd2hpbGUgKGxlbiA+IDApOwogCiAJaWYgKHVzZXJfcmVjdikgewotCQlpZiAoc2tiX3F1ZXVlX2xlbigmdHAtPnVjb3B5LnByZXF1ZXVlKSkgeworCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmdHAtPnVjb3B5LnByZXF1ZXVlKSkgewogCQkJaW50IGNodW5rOwogCiAJCQl0cC0+dWNvcHkubGVuID0gY29waWVkID4gMCA/IGxlbiA6IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IDhkZTJmMTAuLjUzYThhNTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC0yODAyLDcgKzI4MDIsNyBAQAogCWludCB0aGlzX3NhY2s7CiAKIAkvKiBFbXB0eSBvZm8gcXVldWUsIGhlbmNlLCBhbGwgdGhlIFNBQ0tzIGFyZSBlYXRlbi4gQ2xlYXIuICovCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpID09IDApIHsKKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlKSkgewogCQl0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IDA7CiAJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5kc2FjazsKIAkJcmV0dXJuOwpAQCAtMjkzNSwxMyArMjkzNSwxMyBAQAogCQlpZih0aC0+ZmluKQogCQkJdGNwX2Zpbihza2IsIHNrLCB0aCk7CiAKLQkJaWYgKHNrYl9xdWV1ZV9sZW4oJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpKSB7CisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlKSkgewogCQkJdGNwX29mb19xdWV1ZShzayk7CiAKIAkJCS8qIFJGQzI1ODEuIDQuMi4gU0hPVUxEIHNlbmQgaW1tZWRpYXRlIEFDSywgd2hlbgogCQkJICogZ2FwIGluIHF1ZXVlIGlzIGZpbGxlZC4KIAkJCSAqLwotCQkJaWYgKCFza2JfcXVldWVfbGVuKCZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlKSkKKwkJCWlmIChza2JfcXVldWVfZW1wdHkoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpKQogCQkJCXRwLT5hY2sucGluZ3BvbmcgPSAwOwogCQl9CiAKQEAgLTMyNDksOSArMzI0OSw4IEBACiAJICogVGhpcyBtdXN0IG5vdCBldmVyIG9jY3VyLiAqLwogCiAJLyogRmlyc3QsIHB1cmdlIHRoZSBvdXRfb2Zfb3JkZXIgcXVldWUuICovCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpKSB7Ci0JCU5FVF9BRERfU1RBVFNfQkgoTElOVVhfTUlCX09GT1BSVU5FRCwgCi0JCQkJIHNrYl9xdWV1ZV9sZW4oJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpKTsKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSkpIHsKKwkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfT0ZPUFJVTkVEKTsKIAkJX19za2JfcXVldWVfcHVyZ2UoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpOwogCiAJCS8qIFJlc2V0IFNBQ0sgc3RhdGUuICBBIGNvbmZvcm1pbmcgU0FDSyBpbXBsZW1lbnRhdGlvbiB3aWxsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggZTA0MWQwNS4uZTNmOGVhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMTYxMyw3ICsxNjEzLDcgQEAKICAqIHdhcyB1bnJlYWQgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoaXMgYmVoYXZpb3IgaXMgcmVjb21tZW5kZWQKICAqIGJ5IGRyYWZ0LWlldGYtdGNwaW1wbC1wcm9iLTAzLnR4dCBzZWN0aW9uIDMuMTAuICAtRGF2ZU0KICAqLwotdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgcHJpb3JpdHkpCit2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwppbmRleCBiMTI3YjQ0Li4wMDg0MjI3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuYworKysgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwpAQCAtMjMxLDExICsyMzEsMTAgQEAKIAl9CiAJdHAtPmFjay5wZW5kaW5nICY9IH5UQ1BfQUNLX1RJTUVSOwogCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnRwLT51Y29weS5wcmVxdWV1ZSkpIHsKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmdHAtPnVjb3B5LnByZXF1ZXVlKSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JCU5FVF9BRERfU1RBVFNfQkgoTElOVVhfTUlCX1RDUFNDSEVEVUxFUkZBSUxFRCwgCi0JCQkJIHNrYl9xdWV1ZV9sZW4oJnRwLT51Y29weS5wcmVxdWV1ZSkpOworCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BTQ0hFRFVMRVJGQUlMRUQpOwogCiAJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmdHAtPnVjb3B5LnByZXF1ZXVlKSkgIT0gTlVMTCkKIAkJCXNrLT5za19iYWNrbG9nX3Jjdihzaywgc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L21jYXN0LmMgYi9uZXQvaXB2Ni9tY2FzdC5jCmluZGV4IDU2MmZjZDEuLjI5ZmVkNmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L21jYXN0LmMKKysrIGIvbmV0L2lwdjYvbWNhc3QuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJfQogCXdyaXRlX3VubG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKIAotCXJldHVybiAtRU5PRU5UOworCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIH0KIAogc3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwNl9tY19maW5kX2RldihzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwLCBpbnQgaWZpbmRleCkKQEAgLTM4NiwxMiArMzg2LDE2IEBACiAJCWlmIChpcHY2X2FkZHJfZXF1YWwoJnBtYy0+YWRkciwgZ3JvdXApKQogCQkJYnJlYWs7CiAJfQotCWlmICghcG1jKQkJLyogbXVzdCBoYXZlIGEgcHJpb3Igam9pbiAqLworCWlmICghcG1jKSB7CQkvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovCisJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKKwl9CiAJLyogaWYgYSBzb3VyY2UgZmlsdGVyIHdhcyBzZXQsIG11c3QgYmUgdGhlIHNhbWUgbW9kZSBhcyBiZWZvcmUgKi8KIAlpZiAocG1jLT5zZmxpc3QpIHsKLQkJaWYgKHBtYy0+c2Ztb2RlICE9IG9tb2RlKQorCQlpZiAocG1jLT5zZm1vZGUgIT0gb21vZGUpIHsKKwkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIGRvbmU7CisJCX0KIAl9IGVsc2UgaWYgKHBtYy0+c2Ztb2RlICE9IG9tb2RlKSB7CiAJCS8qIGFsbG93IG1vZGUgc3dpdGNoZXMgZm9yIGVtcHR5LXNldCBmaWx0ZXJzICovCiAJCWlwNl9tY19hZGRfc3JjKGlkZXYsIGdyb3VwLCBvbW9kZSwgMCwgTlVMTCwgMCk7CkBAIC00MDIsNyArNDA2LDcgQEAKIAlwc2wgPSBwbWMtPnNmbGlzdDsKIAlpZiAoIWFkZCkgewogCQlpZiAoIXBzbCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gZG9uZTsJLyogZXJyID0gLUVBRERSTk9UQVZBSUwgKi8KIAkJcnYgPSAhMDsKIAkJZm9yIChpPTA7IGk8cHNsLT5zbF9jb3VudDsgaSsrKSB7CiAJCQlydiA9IG1lbWNtcCgmcHNsLT5zbF9hZGRyW2ldLCBzb3VyY2UsCkBAIC00MTEsNyArNDE1LDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAocnYpCQkvKiBzb3VyY2Ugbm90IGZvdW5kICovCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIGRvbmU7CS8qIGVyciA9IC1FQUREUk5PVEFWQUlMICovCiAKIAkJLyogc3BlY2lhbCBjYXNlIC0gKElOQ0xVREUsIGVtcHR5KSA9PSBMRUFWRV9HUk9VUCAqLwogCQlpZiAocHNsLT5zbF9jb3VudCA9PSAxICYmIG9tb2RlID09IE1DQVNUX0lOQ0xVREUpIHsKQEAgLTQ4OCw2ICs0OTIsNyBAQAogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlwdjZfcGluZm8gKmluZXQ2ID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBpcDZfc2Zfc29ja2xpc3QgKm5ld3BzbCwgKnBzbDsKKwlpbnQgbGVhdmVncm91cCA9IDA7CiAJaW50IGksIGVycjsKIAogCWdyb3VwID0gJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSZnc2YtPmdmX2dyb3VwKS0+c2luNl9hZGRyOwpAQCAtNTAzLDcgKzUwOCwxMiBAQAogCWlmICghaWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZGV2ID0gaWRldi0+ZGV2OwotCWVyciA9IC1FQUREUk5PVEFWQUlMOworCisJZXJyID0gMDsKKwlpZiAoZ3NmLT5nZl9mbW9kZSA9PSBNQ0FTVF9JTkNMVURFICYmIGdzZi0+Z2ZfbnVtc3JjID09IDApIHsKKwkJbGVhdmVncm91cCA9IDE7CisJCWdvdG8gZG9uZTsKKwl9CiAKIAlmb3IgKHBtYz1pbmV0Ni0+aXB2Nl9tY19saXN0OyBwbWM7IHBtYz1wbWMtPm5leHQpIHsKIAkJaWYgKHBtYy0+aWZpbmRleCAhPSBnc2YtPmdmX2ludGVyZmFjZSkKQEAgLTUxMSw4ICs1MjEsMTAgQEAKIAkJaWYgKGlwdjZfYWRkcl9lcXVhbCgmcG1jLT5hZGRyLCBncm91cCkpCiAJCQlicmVhazsKIAl9Ci0JaWYgKCFwbWMpCQkvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovCisJaWYgKCFwbWMpIHsJCS8qIG11c3QgaGF2ZSBhIHByaW9yIGpvaW4gKi8KKwkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBkb25lOworCX0KIAlpZiAoZ3NmLT5nZl9udW1zcmMpIHsKIAkJbmV3cHNsID0gKHN0cnVjdCBpcDZfc2Zfc29ja2xpc3QgKilzb2NrX2ttYWxsb2Moc2ssCiAJCQkJSVA2X1NGTFNJWkUoZ3NmLT5nZl9udW1zcmMpLCBHRlBfQVRPTUlDKTsKQEAgLTU0NCwxMCArNTU2LDEzIEBACiAJCSh2b2lkKSBpcDZfbWNfZGVsX3NyYyhpZGV2LCBncm91cCwgcG1jLT5zZm1vZGUsIDAsIE5VTEwsIDApOwogCXBtYy0+c2ZsaXN0ID0gbmV3cHNsOwogCXBtYy0+c2Ztb2RlID0gZ3NmLT5nZl9mbW9kZTsKKwllcnIgPSAwOwogZG9uZToKIAlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJaW42X2Rldl9wdXQoaWRldik7CiAJZGV2X3B1dChkZXYpOworCWlmIChsZWF2ZWdyb3VwKQorCQllcnIgPSBpcHY2X3NvY2tfbWNfZHJvcChzaywgZ3NmLT5nZl9pbnRlcmZhY2UsIGdyb3VwKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhcC5jIGIvbmV0L2lyZGEvaXJsYXAuYwppbmRleCAwNDZhZDA3Li43MDI5NjE4IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhcC5jCisrKyBiL25ldC9pcmRhL2lybGFwLmMKQEAgLTQ0NSw5ICs0NDUsOCBAQAogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CiAKIAkvKiBEb24ndCBkaXNjb25uZWN0IHVudGlsIGFsbCBkYXRhIGZyYW1lcyBhcmUgc3VjY2Vzc2Z1bGx5IHNlbnQgKi8KLQlpZiAoc2tiX3F1ZXVlX2xlbigmc2VsZi0+dHhxKSA+IDApIHsKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc2VsZi0+dHhxKSkgewogCQlzZWxmLT5kaXNjb25uZWN0X3BlbmRpbmcgPSBUUlVFOwotCiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCmluZGV4IDFjZDg5ZjUuLmE1MDViNTQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJICogU2VuZCBvdXQgdGhlIFJSIGZyYW1lcyBmYXN0ZXIgaWYgb3VyIG93biB0cmFuc21pdCBxdWV1ZSBpcyBlbXB0eSwgb3IKIAkgKiBpZiB0aGUgcGVlciBpcyBidXN5LiBUaGUgZWZmZWN0IGlzIGEgbXVjaCBmYXN0ZXIgY29udmVyc2F0aW9uCiAJICovCi0JaWYgKChza2JfcXVldWVfbGVuKCZzZWxmLT50eHEpID09IDApIHx8IChzZWxmLT5yZW1vdGVfYnVzeSkpIHsKKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzZWxmLT50eHEpIHx8IHNlbGYtPnJlbW90ZV9idXN5KSB7CiAJCWlmIChzZWxmLT5mYXN0X1JSID09IFRSVUUpIHsKIAkJCS8qCiAJCQkgKiAgQXNzZXJ0IHRoYXQgdGhlIGZhc3QgcG9sbCB0aW1lciBoYXMgbm90IHJlYWNoZWQgdGhlCkBAIC0yNjMsNyArMjYzLDcgQEAKIAkJSVJEQV9ERUJVRygyLCAiJXMoKSA6IHF1ZXVlIGxlbiA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sCiAJCQkgICBza2JfcXVldWVfbGVuKCZzZWxmLT50eHEpKTsKIAotCQlpZiAoc2tiX3F1ZXVlX2xlbigmc2VsZi0+dHhxKSkgeworCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc2VsZi0+dHhxKSkgewogCQkJLyogUHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBpcmxhcF9kYXRhX3JlcXVlc3QoKSAqLwogCQkJc2VsZi0+bG9jYWxfYnVzeSA9IFRSVUU7CiAKQEAgLTEwNzQsNyArMTA3NCw3IEBACiAjZWxzZQkvKiBDT05GSUdfSVJEQV9EWU5BTUlDX1dJTkRPVyAqLwogCQkJLyogV2luZG93IGhhcyBiZWVuIGFkanVzdGVkIGZvciB0aGUgbWF4IHBhY2tldAogCQkJICogc2l6ZSwgc28gbXVjaCBzaW1wbGVyLi4uIC0gSmVhbiBJSSAqLwotCQkJbmV4dGZpdCA9IChza2JfcXVldWVfbGVuKCZzZWxmLT50eHEpID4gMCk7CisJCQluZXh0Zml0ID0gIXNrYl9xdWV1ZV9lbXB0eSgmc2VsZi0+dHhxKTsKICNlbmRpZgkvKiBDT05GSUdfSVJEQV9EWU5BTUlDX1dJTkRPVyAqLwogCQkJLyoKIAkJCSAqICBTZW5kIGRhdGEgd2l0aCBwb2xsIGJpdCBjbGVhcmVkIG9ubHkgaWYgd2luZG93ID4gMQpAQCAtMTgxNCw3ICsxODE0LDcgQEAKICNlbHNlCS8qIENPTkZJR19JUkRBX0RZTkFNSUNfV0lORE9XICovCiAJCQkvKiBXaW5kb3cgaGFzIGJlZW4gYWRqdXN0ZWQgZm9yIHRoZSBtYXggcGFja2V0CiAJCQkgKiBzaXplLCBzbyBtdWNoIHNpbXBsZXIuLi4gLSBKZWFuIElJICovCi0JCQluZXh0Zml0ID0gKHNrYl9xdWV1ZV9sZW4oJnNlbGYtPnR4cSkgPiAwKTsKKwkJCW5leHRmaXQgPSAhc2tiX3F1ZXVlX2VtcHR5KCZzZWxmLT50eHEpOwogI2VuZGlmIC8qIENPTkZJR19JUkRBX0RZTkFNSUNfV0lORE9XICovCiAJCQkvKgogCQkJICogIFNlbmQgZGF0YSB3aXRoIGZpbmFsIGJpdCBjbGVhcmVkIG9ubHkgaWYgd2luZG93ID4gMQpAQCAtMTkzNyw3ICsxOTM3LDcgQEAKIAkJCQlpcmxhcF9kYXRhX2luZGljYXRpb24oc2VsZiwgc2tiLCBGQUxTRSk7CiAKIAkJCQkvKiBBbnkgcGVuZGluZyBkYXRhIHJlcXVlc3RzPyAgKi8KLQkJCQlpZiAoKHNrYl9xdWV1ZV9sZW4oJnNlbGYtPnR4cSkgPiAwKSAmJgorCQkJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzZWxmLT50eHEpICYmCiAJCQkJICAgIChzZWxmLT53aW5kb3cgPiAwKSkKIAkJCQl7CiAJCQkJCXNlbGYtPmFja19yZXF1aXJlZCA9IFRSVUU7CkBAIC0yMDM4LDcgKzIwMzgsNyBAQAogCQkJLyoKIAkJCSAqICBBbnkgcGVuZGluZyBkYXRhIHJlcXVlc3RzPwogCQkJICovCi0JCQlpZiAoKHNrYl9xdWV1ZV9sZW4oJnNlbGYtPnR4cSkgPiAwKSAmJgorCQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJnNlbGYtPnR4cSkgJiYKIAkJCSAgICAoc2VsZi0+d2luZG93ID4gMCkgJiYgIXNlbGYtPnJlbW90ZV9idXN5KQogCQkJewogCQkJCWlybGFwX2RhdGFfaW5kaWNhdGlvbihzZWxmLCBza2IsIFRSVUUpOwpAQCAtMjA2OSw3ICsyMDY5LDcgQEAKIAkJICovCiAJCW5yX3N0YXR1cyA9IGlybGFwX3ZhbGlkYXRlX25yX3JlY2VpdmVkKHNlbGYsIGluZm8tPm5yKTsKIAkJaWYgKG5yX3N0YXR1cyA9PSBOUl9FWFBFQ1RFRCkgewotCQkJaWYgKChza2JfcXVldWVfbGVuKCAmc2VsZi0+dHhxKSA+IDApICYmCisJCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc2VsZi0+dHhxKSAmJgogCQkJICAgIChzZWxmLT53aW5kb3cgPiAwKSkgewogCQkJCXNlbGYtPnJlbW90ZV9idXN5ID0gRkFMU0U7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMgYi9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jCmluZGV4IDA0MGFiZTcuLjZkYWZiYjQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMKKysrIGIvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYwpAQCAtMTAxOCwxMSArMTAxOCwxMCBAQAogCS8qCiAJICogIFdlIGNhbiBub3cgZmlsbCB0aGUgd2luZG93IHdpdGggYWRkaXRpb25hbCBkYXRhIGZyYW1lcwogCSAqLwotCXdoaWxlIChza2JfcXVldWVfbGVuKCAmc2VsZi0+dHhxKSA+IDApIHsKKwl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmc2VsZi0+dHhxKSkgewogCiAJCUlSREFfREVCVUcoMCwgIiVzKCksIHNlbmRpbmcgYWRkaXRpb25hbCBmcmFtZXMhXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlpZiAoKHNrYl9xdWV1ZV9sZW4oICZzZWxmLT50eHEpID4gMCkgJiYKLQkJICAgIChzZWxmLT53aW5kb3cgPiAwKSkgeworCQlpZiAoc2VsZi0+d2luZG93ID4gMCkgewogCQkJc2tiID0gc2tiX2RlcXVldWUoICZzZWxmLT50eHEpOwogCQkJSVJEQV9BU1NFUlQoc2tiICE9IE5VTEwsIHJldHVybjspOwogCkBAIC0xMDMxLDggKzEwMzAsNyBAQAogCQkJICogIGJpdCBjbGVhcmVkCiAJCQkgKi8KIAkJCWlmICgoc2VsZi0+d2luZG93ID4gMSkgJiYKLQkJCSAgICBza2JfcXVldWVfbGVuKCZzZWxmLT50eHEpID4gMCkKLQkJCXsKKwkJCSAgICAhc2tiX3F1ZXVlX2VtcHR5KCZzZWxmLT50eHEpKSB7CiAJCQkJaXJsYXBfc2VuZF9kYXRhX3ByaW1hcnkoc2VsZiwgc2tiKTsKIAkJCX0gZWxzZSB7CiAJCQkJaXJsYXBfc2VuZF9kYXRhX3ByaW1hcnlfcG9sbChzZWxmLCBza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJ0dHAuYyBiL25ldC9pcmRhL2lydHRwLmMKaW5kZXggZDA5MWNjZi4uNjYwMmQ5MCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJ0dHAuYworKysgYi9uZXQvaXJkYS9pcnR0cC5jCkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogCS8qCiAJICogIENoZWNrIGlmIHRoZXJlIGlzIHN0aWxsIGRhdGEgc2VnbWVudHMgaW4gdGhlIHRyYW5zbWl0IHF1ZXVlCiAJICovCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnNlbGYtPnR4X3F1ZXVlKSA+IDApIHsKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc2VsZi0+dHhfcXVldWUpKSB7CiAJCWlmIChwcmlvcml0eSA9PSBQX0hJR0gpIHsKIAkJCS8qCiAJCQkgKiAgTm8gbmVlZCB0byBzZW5kIHRoZSBxdWV1ZWQgZGF0YSwgaWYgd2UgYXJlCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jX2V2LmMgYi9uZXQvbGxjL2xsY19jX2V2LmMKaW5kZXggY2QxMzBjMy4uZDViZGI1MyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY19ldi5jCisrKyBiL25ldC9sbGMvbGxjX2NfZXYuYwpAQCAtODQsNyArODQsNyBAQAogCWlmIChsbGMtPmRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spCiAJCWdvdG8gb3V0OwogCXJjID0gMTsKLQlpZiAoIXNrYl9xdWV1ZV9sZW4oJmxsYy0+cGR1X3VuYWNrX3EpKQorCWlmIChza2JfcXVldWVfZW1wdHkoJmxsYy0+cGR1X3VuYWNrX3EpKQogCQlnb3RvIG91dDsKIAlza2IgPSBza2JfcGVlaygmbGxjLT5wZHVfdW5hY2tfcSk7CiAJcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwppbmRleCBmYzQ1NmE3Li4zNDA1ZmRmIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCkBAIC04NTgsNyArODU4LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2soc2spOwogCi0JaWYgKCFza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpCisJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKQogCQljbGVhcl9iaXQoMCwgJm5say0+c3RhdGUpOwogCWlmICghdGVzdF9iaXQoMCwgJm5say0+c3RhdGUpKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm5say0+d2FpdCk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3JlZC5jIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwppbmRleCA2NjRkMGU0Li43ODQ1ZDA0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3JlZC5jCisrKyBiL25ldC9zY2hlZC9zY2hfcmVkLmMKQEAgLTM4NSw3ICszODUsNyBAQAogCW1lbWNweShxLT5TdGFiLCBSVEFfREFUQSh0YltUQ0FfUkVEX1NUQUItMV0pLCAyNTYpOwogCiAJcS0+cWNvdW50ID0gLTE7Ci0JaWYgKHNrYl9xdWV1ZV9sZW4oJnNjaC0+cSkgPT0gMCkKKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzY2gtPnEpKQogCQlQU0NIRURfU0VUX1BBU1RQRVJGRUNUKHEtPnFpZGxlc3RhcnQpOwogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwppbmRleCA3YWU2YWE3Li40YjQ3ZGQ2IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuYworKysgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJICovCiAJYXNvYy0+YWRkaXBfc2VyaWFsID0gYXNvYy0+Yy5pbml0aWFsX3RzbjsKIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFzb2MtPmFkZGlwX2NodW5rcyk7CisJSU5JVF9MSVNUX0hFQUQoJmFzb2MtPmFkZGlwX2NodW5rX2xpc3QpOwogCiAJLyogTWFrZSBhbiBlbXB0eSBsaXN0IG9mIHJlbW90ZSB0cmFuc3BvcnQgYWRkcmVzc2VzLiAgKi8KIAlJTklUX0xJU1RfSEVBRCgmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0KTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucHV0LmMgYi9uZXQvc2N0cC9pbnB1dC5jCmluZGV4IDMzOWY3YWMuLjVlMDg1ZTAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucHV0LmMKKysrIGIvbmV0L3NjdHAvaW5wdXQuYwpAQCAtMTE1LDYgKzExNSwxNyBAQAogCWF0b21pY19hZGQoc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5rKSwmc2stPnNrX3JtZW1fYWxsb2MpOwogfQogCitzdHJ1Y3Qgc2N0cF9pbnB1dF9jYiB7CisJdW5pb24geworCQlzdHJ1Y3QgaW5ldF9za2JfcGFybQloNDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCisJCXN0cnVjdCBpbmV0Nl9za2JfcGFybQloNjsKKyNlbmRpZgorCX0gaGVhZGVyOworCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKK307CisjZGVmaW5lIFNDVFBfSU5QVVRfQ0IoX19za2IpCSgoc3RydWN0IHNjdHBfaW5wdXRfY2IgKikmKChfX3NrYiktPmNiWzBdKSkKKwogLyoKICAqIFRoaXMgaXMgdGhlIHJvdXRpbmUgd2hpY2ggSVAgY2FsbHMgd2hlbiByZWNlaXZpbmcgYW4gU0NUUCBwYWNrZXQuCiAgKi8KQEAgLTI0Myw2ICsyNTQsNyBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGRpc2NhcmRfcmVsZWFzZTsKIAl9CisJU0NUUF9JTlBVVF9DQihza2IpLT5jaHVuayA9IGNodW5rOwogCiAJc2N0cF9yY3Zfc2V0X293bmVyX3Ioc2tiLHNrKTsKIApAQCAtMjY1LDkgKzI3Nyw5IEBACiAJc2N0cF9iaF9sb2NrX3NvY2soc2spOwogCiAJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpCi0JCXNrX2FkZF9iYWNrbG9nKHNrLCAoc3RydWN0IHNrX2J1ZmYgKikgY2h1bmspOworCQlza19hZGRfYmFja2xvZyhzaywgc2tiKTsKIAllbHNlCi0JCXNjdHBfYmFja2xvZ19yY3Yoc2ssIChzdHJ1Y3Qgc2tfYnVmZiAqKSBjaHVuayk7CisJCXNjdHBfYmFja2xvZ19yY3Yoc2ssIHNrYik7CiAKIAkvKiBSZWxlYXNlIHRoZSBzb2NrIGFuZCBhbnkgcmVmZXJlbmNlIGNvdW50cyB3ZSB0b29rIGluIHRoZQogCSAqIGxvb2t1cCBjYWxscy4KQEAgLTMwMiwxNCArMzE0LDggQEAKICAqLwogaW50IHNjdHBfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKLQlzdHJ1Y3Qgc2N0cF9pbnEgKmlucXVldWU7Ci0KLQkvKiBPbmUgZGF5IGNodW5rIHdpbGwgbGl2ZSBpbnNpZGUgdGhlIHNrYiwgYnV0IGZvcgotCSAqIG5vdyB0aGlzIHdvcmtzLgotCSAqLwotCWNodW5rID0gKHN0cnVjdCBzY3RwX2NodW5rICopIHNrYjsKLQlpbnF1ZXVlID0gJmNodW5rLT5yY3ZyLT5pbnF1ZXVlOworCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuayA9IFNDVFBfSU5QVVRfQ0Ioc2tiKS0+Y2h1bms7CisJc3RydWN0IHNjdHBfaW5xICppbnF1ZXVlID0gJmNodW5rLT5yY3ZyLT5pbnF1ZXVlOwogCiAJc2N0cF9pbnFfcHVzaChpbnF1ZXVlLCBjaHVuayk7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5xdWV1ZS5jIGIvbmV0L3NjdHAvaW5xdWV1ZS5jCmluZGV4IGNlZGY0MzUuLjJkMzM5MjIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucXVldWUuYworKysgYi9uZXQvc2N0cC9pbnF1ZXVlLmMKQEAgLTUwLDcgKzUwLDcgQEAKIC8qIEluaXRpYWxpemUgYW4gU0NUUCBpbnF1ZXVlLiAgKi8KIHZvaWQgc2N0cF9pbnFfaW5pdChzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlKQogewotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnF1ZXVlLT5pbik7CisJSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT5pbl9jaHVua19saXN0KTsKIAlxdWV1ZS0+aW5fcHJvZ3Jlc3MgPSBOVUxMOwogCiAJLyogQ3JlYXRlIGEgdGFzayBmb3IgZGVsaXZlcmluZyBkYXRhLiAgKi8KQEAgLTYyLDExICs2MiwxMyBAQAogLyogUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhbiBTQ1RQIGlucXVldWUuICAqLwogdm9pZCBzY3RwX2lucV9mcmVlKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpCiB7Ci0Jc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOworCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgKnRtcDsKIAogCS8qIEVtcHR5IHRoZSBxdWV1ZS4gICovCi0Jd2hpbGUgKChjaHVuayA9IChzdHJ1Y3Qgc2N0cF9jaHVuayAqKSBza2JfZGVxdWV1ZSgmcXVldWUtPmluKSkgIT0gTlVMTCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2h1bmssIHRtcCwgJnF1ZXVlLT5pbl9jaHVua19saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJmNodW5rLT5saXN0KTsKIAkJc2N0cF9jaHVua19mcmVlKGNodW5rKTsKKwl9CiAKIAkvKiBJZiB0aGVyZSBpcyBhIHBhY2tldCB3aGljaCBpcyBjdXJyZW50bHkgYmVpbmcgd29ya2VkIG9uLAogCSAqIGZyZWUgaXQgYXMgd2VsbC4KQEAgLTkyLDcgKzk0LDcgQEAKIAkgKiBFdmVudHVhbGx5LCB3ZSBzaG91bGQgY2xlYW4gdXAgaW5xdWV1ZSB0byBub3QgcmVseQogCSAqIG9uIHRoZSBCSCByZWxhdGVkIGRhdGEgc3RydWN0dXJlcy4KIAkgKi8KLQlza2JfcXVldWVfdGFpbCgmKHEtPmluKSwgKHN0cnVjdCBza19idWZmICopIHBhY2tldCk7CisJbGlzdF9hZGRfdGFpbCgmcGFja2V0LT5saXN0LCAmcS0+aW5fY2h1bmtfbGlzdCk7CiAJcS0+aW1tZWRpYXRlLmZ1bmMocS0+aW1tZWRpYXRlLmRhdGEpOwogfQogCkBAIC0xMzEsMTIgKzEzMywxNiBAQAogCiAJLyogRG8gd2UgbmVlZCB0byB0YWtlIHRoZSBuZXh0IHBhY2tldCBvdXQgb2YgdGhlIHF1ZXVlIHRvIHByb2Nlc3M/ICovCiAJaWYgKCFjaHVuaykgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwogCQkvKiBJcyB0aGUgcXVldWUgZW1wdHk/ICAqLwotICAgICAgICAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcXVldWUtPmluKSkKKwkJaWYgKGxpc3RfZW1wdHkoJnF1ZXVlLT5pbl9jaHVua19saXN0KSkKIAkJCXJldHVybiBOVUxMOwogCisJCWVudHJ5ID0gcXVldWUtPmluX2NodW5rX2xpc3QubmV4dDsKIAkJY2h1bmsgPSBxdWV1ZS0+aW5fcHJvZ3Jlc3MgPQotCQkJKHN0cnVjdCBzY3RwX2NodW5rICopIHNrYl9kZXF1ZXVlKCZxdWV1ZS0+aW4pOworCQkJbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHNjdHBfY2h1bmssIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KGVudHJ5KTsKIAogCQkvKiBUaGlzIGlzIHRoZSBmaXJzdCBjaHVuayBpbiB0aGUgcGFja2V0LiAgKi8KIAkJY2h1bmstPnNpbmdsZXRvbiA9IDE7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jCmluZGV4IDg0YjViMzcuLjkzMTM3MTYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHB1dC5jCisrKyBiL25ldC9zY3RwL291dHB1dC5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlwYWNrZXQtPnRyYW5zcG9ydCA9IHRyYW5zcG9ydDsKIAlwYWNrZXQtPnNvdXJjZV9wb3J0ID0gc3BvcnQ7CiAJcGFja2V0LT5kZXN0aW5hdGlvbl9wb3J0ID0gZHBvcnQ7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcGFja2V0LT5jaHVua3MpOworCUlOSVRfTElTVF9IRUFEKCZwYWNrZXQtPmNodW5rX2xpc3QpOwogCWlmIChhc29jKSB7CiAJCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhhc29jLT5iYXNlLnNrKTsJCiAJCW92ZXJoZWFkID0gc3AtPnBmLT5hZi0+bmV0X2hlYWRlcl9sZW47IApAQCAtMTI5LDEyICsxMjksMTQgQEAKIC8qIEZyZWUgYSBwYWNrZXQuICAqLwogdm9pZCBzY3RwX3BhY2tldF9mcmVlKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0KQogewotCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssICp0bXA7CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHBhY2tldDolcFxuIiwgX19GVU5DVElPTl9fLCBwYWNrZXQpOwogCi0gICAgICAgIHdoaWxlICgoY2h1bmsgPSAoc3RydWN0IHNjdHBfY2h1bmsgKilfX3NrYl9kZXF1ZXVlKCZwYWNrZXQtPmNodW5rcykpICE9IE5VTEwpCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNodW5rLCB0bXAsICZwYWNrZXQtPmNodW5rX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmY2h1bmstPmxpc3QpOwogCQlzY3RwX2NodW5rX2ZyZWUoY2h1bmspOworCX0KIAogCWlmIChwYWNrZXQtPm1hbGxvY2VkKQogCQlrZnJlZShwYWNrZXQpOwpAQCAtMjc2LDcgKzI3OCw3IEBACiAJCXBhY2tldC0+aGFzX3NhY2sgPSAxOwogCiAJLyogSXQgaXMgT0sgdG8gc2VuZCB0aGlzIGNodW5rLiAgKi8KLQlfX3NrYl9xdWV1ZV90YWlsKCZwYWNrZXQtPmNodW5rcywgKHN0cnVjdCBza19idWZmICopY2h1bmspOworCWxpc3RfYWRkX3RhaWwoJmNodW5rLT5saXN0LCAmcGFja2V0LT5jaHVua19saXN0KTsKIAlwYWNrZXQtPnNpemUgKz0gY2h1bmtfbGVuOwogCWNodW5rLT50cmFuc3BvcnQgPSBwYWNrZXQtPnRyYW5zcG9ydDsKIGZpbmlzaDoKQEAgLTI5NSw3ICsyOTcsNyBAQAogCXN0cnVjdCBzY3RwaGRyICpzaDsKIAlfX3UzMiBjcmMzMjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKLQlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CisJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLCAqdG1wOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgZXJyID0gMDsKIAlpbnQgcGFkZGluZzsJCS8qIEhvdyBtdWNoIHBhZGRpbmcgZG8gd2UgbmVlZD8gICovCkBAIC0zMDUsMTEgKzMwNywxMSBAQAogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogcGFja2V0OiVwXG4iLCBfX0ZVTkNUSU9OX18sIHBhY2tldCk7CiAKIAkvKiBEbyBOT1QgZ2VuZXJhdGUgYSBjaHVua2xlc3MgcGFja2V0LiAqLwotCWNodW5rID0gKHN0cnVjdCBzY3RwX2NodW5rICopc2tiX3BlZWsoJnBhY2tldC0+Y2h1bmtzKTsKLQlpZiAodW5saWtlbHkoIWNodW5rKSkKKwlpZiAobGlzdF9lbXB0eSgmcGFja2V0LT5jaHVua19saXN0KSkKIAkJcmV0dXJuIGVycjsKIAogCS8qIFNldCB1cCBjb252ZW5pZW5jZSB2YXJpYWJsZXMuLi4gKi8KKwljaHVuayA9IGxpc3RfZW50cnkocGFja2V0LT5jaHVua19saXN0Lm5leHQsIHN0cnVjdCBzY3RwX2NodW5rLCBsaXN0KTsKIAlzayA9IGNodW5rLT5za2ItPnNrOwogCiAJLyogQWxsb2NhdGUgdGhlIG5ldyBza2IuICAqLwpAQCAtMzcwLDcgKzM3Miw4IEBACiAJICogW1RoaXMgd2hvbGUgY29tbWVudCBleHBsYWlucyBXT1JEX1JPVU5EKCkgYmVsb3cuXQogCSAqLwogCVNDVFBfREVCVUdfUFJJTlRLKCIqKipzY3RwX3RyYW5zbWl0X3BhY2tldCoqKlxuIik7Ci0Jd2hpbGUgKChjaHVuayA9IChzdHJ1Y3Qgc2N0cF9jaHVuayAqKV9fc2tiX2RlcXVldWUoJnBhY2tldC0+Y2h1bmtzKSkgIT0gTlVMTCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgdG1wLCAmcGFja2V0LT5jaHVua19saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJmNodW5rLT5saXN0KTsKIAkJaWYgKHNjdHBfY2h1bmtfaXNfZGF0YShjaHVuaykpIHsKIAogCQkJaWYgKCFjaHVuay0+aGFzX3RzbikgewpAQCAtNTExLDcgKzUxNCw4IEBACiAJICogd2lsbCBnZXQgcmVzZW50IG9yIGRyb3BwZWQgbGF0ZXIuCiAJICovCiAKLQl3aGlsZSAoKGNodW5rID0gKHN0cnVjdCBzY3RwX2NodW5rICopX19za2JfZGVxdWV1ZSgmcGFja2V0LT5jaHVua3MpKSAhPSBOVUxMKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNodW5rLCB0bXAsICZwYWNrZXQtPmNodW5rX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmY2h1bmstPmxpc3QpOwogCQlpZiAoIXNjdHBfY2h1bmtfaXNfZGF0YShjaHVuaykpCiAgICAgCQkJc2N0cF9jaHVua19mcmVlKGNodW5rKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRxdWV1ZS5jIGIvbmV0L3NjdHAvb3V0cXVldWUuYwppbmRleCA0ZWI4MWExLi5lZmI3MmZhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRxdWV1ZS5jCisrKyBiL25ldC9zY3RwL291dHF1ZXVlLmMKQEAgLTc1LDcgKzc1LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX291dHFfaGVhZF9kYXRhKHN0cnVjdCBzY3RwX291dHEgKnEsCiAJCQkJCXN0cnVjdCBzY3RwX2NodW5rICpjaCkKIHsKLQlfX3NrYl9xdWV1ZV9oZWFkKCZxLT5vdXQsIChzdHJ1Y3Qgc2tfYnVmZiAqKWNoKTsKKwlsaXN0X2FkZCgmY2gtPmxpc3QsICZxLT5vdXRfY2h1bmtfbGlzdCk7CiAJcS0+b3V0X3FsZW4gKz0gY2gtPnNrYi0+bGVuOwogCXJldHVybjsKIH0KQEAgLTgzLDE3ICs4MywyMiBAQAogLyogVGFrZSBkYXRhIGZyb20gdGhlIGZyb250IG9mIHRoZSBxdWV1ZS4gKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfb3V0cV9kZXF1ZXVlX2RhdGEoc3RydWN0IHNjdHBfb3V0cSAqcSkKIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2g7Ci0JY2ggPSAoc3RydWN0IHNjdHBfY2h1bmsgKilfX3NrYl9kZXF1ZXVlKCZxLT5vdXQpOwotCWlmIChjaCkKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2ggPSBOVUxMOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5vdXRfY2h1bmtfbGlzdCkpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqZW50cnkgPSBxLT5vdXRfY2h1bmtfbGlzdC5uZXh0OworCisJCWNoID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHNjdHBfY2h1bmssIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KGVudHJ5KTsKIAkJcS0+b3V0X3FsZW4gLT0gY2gtPnNrYi0+bGVuOworCX0KIAlyZXR1cm4gY2g7CiB9CiAvKiBBZGQgZGF0YSBjaHVuayB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX291dHFfdGFpbF9kYXRhKHN0cnVjdCBzY3RwX291dHEgKnEsCiAJCQkJICAgICAgIHN0cnVjdCBzY3RwX2NodW5rICpjaCkKIHsKLQlfX3NrYl9xdWV1ZV90YWlsKCZxLT5vdXQsIChzdHJ1Y3Qgc2tfYnVmZiAqKWNoKTsKKwlsaXN0X2FkZF90YWlsKCZjaC0+bGlzdCwgJnEtPm91dF9jaHVua19saXN0KTsKIAlxLT5vdXRfcWxlbiArPSBjaC0+c2tiLT5sZW47CiAJcmV0dXJuOwogfQpAQCAtMTk3LDggKzIwMiw4IEBACiB2b2lkIHNjdHBfb3V0cV9pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9vdXRxICpxKQogewogCXEtPmFzb2MgPSBhc29jOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnEtPm91dCk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcS0+Y29udHJvbCk7CisJSU5JVF9MSVNUX0hFQUQoJnEtPm91dF9jaHVua19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcS0+Y29udHJvbF9jaHVua19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcS0+cmV0cmFuc21pdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnEtPnNhY2tlZCk7CiAJSU5JVF9MSVNUX0hFQUQoJnEtPmFiYW5kb25lZCk7CkBAIC0yMTcsNyArMjIyLDcgQEAKIHsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsY2h1bmssICpwb3MsICp0ZW1wOwotCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssICp0bXA7CiAKIAkvKiBUaHJvdyBhd2F5IHVuYWNrbm93bGVkZ2VkIGNodW5rcy4gKi8KIAlsaXN0X2Zvcl9lYWNoKHBvcywgJnEtPmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewpAQCAtMjY5LDggKzI3NCwxMCBAQAogCXEtPmVycm9yID0gMDsKIAogCS8qIFRocm93IGF3YXkgYW55IGxlZnRvdmVyIGNvbnRyb2wgY2h1bmtzLiAqLwotCXdoaWxlICgoY2h1bmsgPSAoc3RydWN0IHNjdHBfY2h1bmsgKikgc2tiX2RlcXVldWUoJnEtPmNvbnRyb2wpKSAhPSBOVUxMKQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgdG1wLCAmcS0+Y29udHJvbF9jaHVua19saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJmNodW5rLT5saXN0KTsKIAkJc2N0cF9jaHVua19mcmVlKGNodW5rKTsKKwl9CiB9CiAKIC8qIEZyZWUgdGhlIG91dHF1ZXVlIHN0cnVjdHVyZSBhbmQgYW55IHJlbGF0ZWQgcGVuZGluZyBjaHVua3MuICAqLwpAQCAtMzMzLDcgKzM0MCw3IEBACiAJCQlicmVhazsKIAkJfTsKIAl9IGVsc2UgewotCQlfX3NrYl9xdWV1ZV90YWlsKCZxLT5jb250cm9sLCAoc3RydWN0IHNrX2J1ZmYgKikgY2h1bmspOworCQlsaXN0X2FkZF90YWlsKCZjaHVuay0+bGlzdCwgJnEtPmNvbnRyb2xfY2h1bmtfbGlzdCk7CiAJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX09VVENUUkxDSFVOS1MpOwogCX0KIApAQCAtNjUwLDEwICs2NTcsOSBAQAogCV9fdTE2IHNwb3J0ID0gYXNvYy0+YmFzZS5iaW5kX2FkZHIucG9ydDsKIAlfX3UxNiBkcG9ydCA9IGFzb2MtPnBlZXIucG9ydDsKIAlfX3UzMiB2dGFnID0gYXNvYy0+cGVlci5pLmluaXRfdGFnOwotCXN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gTlVMTDsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKm5ld190cmFuc3BvcnQ7Ci0Jc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOworCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgKnRtcDsKIAlzY3RwX3htaXRfdCBzdGF0dXM7CiAJaW50IGVycm9yID0gMDsKIAlpbnQgc3RhcnRfdGltZXIgPSAwOwpAQCAtNjc1LDggKzY4MSw5IEBACiAJICogICAuLi4KIAkgKi8KIAotCXF1ZXVlID0gJnEtPmNvbnRyb2w7Ci0Jd2hpbGUgKChjaHVuayA9IChzdHJ1Y3Qgc2N0cF9jaHVuayAqKXNrYl9kZXF1ZXVlKHF1ZXVlKSkgIT0gTlVMTCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgdG1wLCAmcS0+Y29udHJvbF9jaHVua19saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJmNodW5rLT5saXN0KTsKKwogCQkvKiBQaWNrIHRoZSByaWdodCB0cmFuc3BvcnQgdG8gdXNlLiAqLwogCQluZXdfdHJhbnNwb3J0ID0gY2h1bmstPnRyYW5zcG9ydDsKIApAQCAtODE0LDggKzgyMSw2IEBACiAKIAkJLyogRmluYWxseSwgdHJhbnNtaXQgbmV3IHBhY2tldHMuICAqLwogCQlzdGFydF90aW1lciA9IDA7Ci0JCXF1ZXVlID0gJnEtPm91dDsKLQogCQl3aGlsZSAoKGNodW5rID0gc2N0cF9vdXRxX2RlcXVldWVfZGF0YShxKSkgIT0gTlVMTCkgewogCQkJLyogUkZDIDI5NjAgNi41IEV2ZXJ5IERBVEEgY2h1bmsgTVVTVCBjYXJyeSBhIHZhbGlkCiAJCQkgKiBzdHJlYW0gaWRlbnRpZmllci4KQEAgLTExNDksOCArMTE1NCw5IEBACiAJLyogU2VlIGlmIGFsbCBjaHVua3MgYXJlIGFja2VkLgogCSAqIE1ha2Ugc3VyZSB0aGUgZW1wdHkgcXVldWUgaGFuZGxlciB3aWxsIGdldCBydW4gbGF0ZXIuCiAJICovCi0JcS0+ZW1wdHkgPSBza2JfcXVldWVfZW1wdHkoJnEtPm91dCkgJiYgc2tiX3F1ZXVlX2VtcHR5KCZxLT5jb250cm9sKSAmJgotCQkJbGlzdF9lbXB0eSgmcS0+cmV0cmFuc21pdCk7CisJcS0+ZW1wdHkgPSAobGlzdF9lbXB0eSgmcS0+b3V0X2NodW5rX2xpc3QpICYmCisJCSAgICBsaXN0X2VtcHR5KCZxLT5jb250cm9sX2NodW5rX2xpc3QpICYmCisJCSAgICBsaXN0X2VtcHR5KCZxLT5yZXRyYW5zbWl0KSk7CiAJaWYgKCFxLT5lbXB0eSkKIAkJZ290byBmaW5pc2g7CiAKQEAgLTE2NzksOSArMTY4NSw5IEBACiAJCWlmIChUU05fbHRlKHRzbiwgY3RzbikpIHsKIAkJCWxpc3RfZGVsX2luaXQobGNodW5rKTsKIAkJCWlmICghY2h1bmstPnRzbl9nYXBfYWNrZWQpIHsKLQkJCWNodW5rLT50cmFuc3BvcnQtPmZsaWdodF9zaXplIC09Ci0JCQkJCQkgc2N0cF9kYXRhX3NpemUoY2h1bmspOwotCQkJcS0+b3V0c3RhbmRpbmdfYnl0ZXMgLT0gc2N0cF9kYXRhX3NpemUoY2h1bmspOworCQkJCWNodW5rLT50cmFuc3BvcnQtPmZsaWdodF9zaXplIC09CisJCQkJCXNjdHBfZGF0YV9zaXplKGNodW5rKTsKKwkJCQlxLT5vdXRzdGFuZGluZ19ieXRlcyAtPSBzY3RwX2RhdGFfc2l6ZShjaHVuayk7CiAJCQl9CiAJCQlzY3RwX2NodW5rX2ZyZWUoY2h1bmspOwogCQl9IGVsc2UgewpAQCAtMTcyOSw3ICsxNzM1LDcgQEAKIAkJCQkJICAgICAgbnNraXBzLCAmZnRzbl9za2lwX2FyclswXSk7IAogCiAJaWYgKGZ0c25fY2h1bmspIHsKLQkJX19za2JfcXVldWVfdGFpbCgmcS0+Y29udHJvbCwgKHN0cnVjdCBza19idWZmICopZnRzbl9jaHVuayk7CisJCWxpc3RfYWRkX3RhaWwoJmZ0c25fY2h1bmstPmxpc3QsICZxLT5jb250cm9sX2NodW5rX2xpc3QpOwogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9PVVRDVFJMQ0hVTktTKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggNWJhZWQ5Yi4uNzczY2Q5MyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMTAwMyw2ICsxMDAzLDcgQEAKIAkJU0NUUF9ERUJVR19QUklOVEsoImNodW5raWZ5aW5nIHNrYiAlcCB3L28gYW4gc2tcbiIsIHNrYik7CiAJfQogCisJSU5JVF9MSVNUX0hFQUQoJnJldHZhbC0+bGlzdCk7CiAJcmV0dmFsLT5za2IJCT0gc2tiOwogCXJldHZhbC0+YXNvYwkJPSAoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKilhc29jOwogCXJldHZhbC0+cmVzZW50ICAJPSAwOwpAQCAtMTExNiw4ICsxMTE3LDcgQEAKIC8qIFBvc3NpYmx5LCBmcmVlIHRoZSBjaHVuay4gICovCiB2b2lkIHNjdHBfY2h1bmtfZnJlZShzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmspCiB7Ci0JLyogTWFrZSBzdXJlIHRoYXQgd2UgYXJlIG5vdCBvbiBhbnkgbGlzdC4gICovCi0Jc2tiX3VubGluaygoc3RydWN0IHNrX2J1ZmYgKikgY2h1bmspOworCUJVR19PTighbGlzdF9lbXB0eSgmY2h1bmstPmxpc3QpKTsKIAlsaXN0X2RlbF9pbml0KCZjaHVuay0+dHJhbnNtaXR0ZWRfbGlzdCk7CiAKIAkvKiBSZWxlYXNlIG91ciByZWZlcmVuY2Ugb24gdGhlIG1lc3NhZ2UgdHJhY2tlci4gKi8KQEAgLTI3MzksOCArMjczOSwxMiBAQAogCWFzb2MtPmFkZGlwX2xhc3RfYXNjb25mID0gTlVMTDsKIAogCS8qIFNlbmQgdGhlIG5leHQgYXNjb25mIGNodW5rIGZyb20gdGhlIGFkZGlwIGNodW5rIHF1ZXVlLiAqLwotCWFzY29uZiA9IChzdHJ1Y3Qgc2N0cF9jaHVuayAqKV9fc2tiX2RlcXVldWUoJmFzb2MtPmFkZGlwX2NodW5rcyk7Ci0JaWYgKGFzY29uZikgeworCWlmICghbGlzdF9lbXB0eSgmYXNvYy0+YWRkaXBfY2h1bmtfbGlzdCkpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqZW50cnkgPSBhc29jLT5hZGRpcF9jaHVua19saXN0Lm5leHQ7CisJCWFzY29uZiA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCBzY3RwX2NodW5rLCBsaXN0KTsKKworCQlsaXN0X2RlbF9pbml0KGVudHJ5KTsKKwogCQkvKiBIb2xkIHRoZSBjaHVuayB1bnRpbCBhbiBBU0NPTkZfQUNLIGlzIHJlY2VpdmVkLiAqLwogCQlzY3RwX2NodW5rX2hvbGQoYXNjb25mKTsKIAkJaWYgKHNjdHBfcHJpbWl0aXZlX0FTQ09ORihhc29jLCBhc2NvbmYpKQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBhYWQ1NWRjLi4wOTFhNjZmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJICogdHJhbnNtaXNzaW9uLgogCSAqLwkKIAlpZiAoYXNvYy0+YWRkaXBfbGFzdF9hc2NvbmYpIHsKLQkJX19za2JfcXVldWVfdGFpbCgmYXNvYy0+YWRkaXBfY2h1bmtzLCAoc3RydWN0IHNrX2J1ZmYgKiljaHVuayk7CisJCWxpc3RfYWRkX3RhaWwoJmNodW5rLT5saXN0LCAmYXNvYy0+YWRkaXBfY2h1bmtfbGlzdCk7CiAJCWdvdG8gb3V0OwkKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMKaW5kZXggMjY5ZjIxNy4uM2M2NTRlMCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMKQEAgLTE0NSw4ICsxNDUsNiBAQAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFhQUlRfTE9DS0VELCAmeHBydC0+c29ja3N0YXRlKSkgewogCQlpZiAodGFzayA9PSB4cHJ0LT5zbmRfdGFzaykKIAkJCXJldHVybiAxOwotCQlpZiAodGFzayA9PSBOVUxMKQotCQkJcmV0dXJuIDA7CiAJCWdvdG8gb3V0X3NsZWVwOwogCX0KIAlpZiAoeHBydC0+bm9jb25nIHx8IF9feHBydF9nZXRfY29uZyh4cHJ0LCB0YXNrKSkgewpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IGM0MjBlYmEuLmQ0MDNlMzQgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2FmX3VuaXguYworKysgYi9uZXQvdW5peC9hZl91bml4LmMKQEAgLTMwMiw3ICszMDIsNyBAQAogICogbWF5IHJlY2VpdmUgbWVzc2FnZXMgb25seSBmcm9tIHRoYXQgcGVlci4gKi8KIHN0YXRpYyB2b2lkIHVuaXhfZGdyYW1fZGlzY29ubmVjdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm90aGVyKQogewotCWlmIChza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSB7CiAJCXNrYl9xdWV1ZV9wdXJnZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZ1bml4X3NrKHNrKS0+cGVlcl93YWl0KTsKIApAQCAtMTYxOSw3ICsxNjE5LDcgQEAKIAlmb3IgKDs7KSB7CiAJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCWlmIChza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkgfHwKKwkJaWYgKCFza2JfcXVldWVfZW1wdHkoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSB8fAogCQkgICAgc2stPnNrX2VyciB8fAogCQkgICAgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikgfHwKIAkJICAgIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKaW5kZXggOTA4YmZmNi4uNTE4MDQwNSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCisrKyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwpAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxjdHlwZS5oPgorCiB0eXBlZGVmIHVpbnQzMl90CV9fdTMyOwogdHlwZWRlZiB1aW50MTZfdAlfX3UxNjsKIHR5cGVkZWYgdW5zaWduZWQgY2hhcglfX3U4OwpAQCAtMzIzLDYgKzMyNSwyMiBAQAogCiAKIAorc3RhdGljIGludCBkb19vZl9lbnRyeSAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mLCBjaGFyICphbGlhcykKK3sKKyAgICBjaGFyICp0bXA7CisgICAgc3ByaW50ZiAoYWxpYXMsICJvZjpOJXNUJXNDJXMiLAorICAgICAgICAgICAgICAgICAgICBvZi0+bmFtZVswXSA/IG9mLT5uYW1lIDogIioiLAorICAgICAgICAgICAgICAgICAgICBvZi0+dHlwZVswXSA/IG9mLT50eXBlIDogIioiLAorICAgICAgICAgICAgICAgICAgICBvZi0+Y29tcGF0aWJsZVswXSA/IG9mLT5jb21wYXRpYmxlIDogIioiKTsKKworICAgIC8qIFJlcGxhY2UgYWxsIHdoaXRlc3BhY2Ugd2l0aCB1bmRlcnNjb3JlcyAqLworICAgIGZvciAodG1wID0gYWxpYXM7IHRtcCAmJiAqdG1wOyB0bXArKykKKyAgICAgICAgaWYgKGlzc3BhY2UgKCp0bXApKQorICAgICAgICAgICAgKnRtcCA9ICdfJzsKKworICAgIHJldHVybiAxOworfQorCiAvKiBJZ25vcmUgYW55IHByZWZpeCwgZWcuIHY4NTAgcHJlcGVuZHMgXyAqLwogc3RhdGljIGlubGluZSBpbnQgc3ltX2lzKGNvbnN0IGNoYXIgKnN5bWJvbCwgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTQwMSw2ICs0MTksMTAgQEAKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX3BjbWNpYV9kZXZpY2VfdGFibGUiKSkKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsIHNpemVvZihzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCksCiAJCQkgZG9fcGNtY2lhX2VudHJ5LCBtb2QpOworICAgICAgICBlbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX29mX2RldmljZV90YWJsZSIpKQorCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBvZl9kZXZpY2VfaWQpLAorCQkJIGRvX29mX2VudHJ5LCBtb2QpOworCiB9CiAKIC8qIE5vdyBhZGQgb3V0IGJ1ZmZlcmVkIGluZm9ybWF0aW9uIHRvIHRoZSBnZW5lcmF0ZWQgQyBzb3VyY2UgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKaW5kZXggOTBhNTUxZS4uYTFmNmJhYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCWludCBsb29wLCByZXQ7CiAKIAljb25zdCB1bnNpZ25lZCBsaW1pdCA9Ci0JCShQQUdFX1NJWkUgLSBzaXplb2YoKmtsaXN0KSkgLyBzaXplb2Yoc3RydWN0IGtleSk7CisJCShQQUdFX1NJWkUgLSBzaXplb2YoKmtsaXN0KSkgLyBzaXplb2Yoc3RydWN0IGtleSAqKTsKIAogCXJldCA9IDA7CiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogCQkJbWF4ID0gbGltaXQ7CiAKIAkJcmV0ID0gLUVOT01FTTsKLQkJc2l6ZSA9IHNpemVvZigqa2xpc3QpICsgc2l6ZW9mKHN0cnVjdCBrZXkpICogbWF4OworCQlzaXplID0gc2l6ZW9mKCprbGlzdCkgKyBzaXplb2Yoc3RydWN0IGtleSAqKSAqIG1heDsKIAkJa2xpc3QgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWtsaXN0KQogCQkJZ290byBlcnJvcjsKQEAgLTE2Myw3ICsxNjMsNyBAQAogCQlrbGlzdC0+bmtleXMgPSBza2xpc3QtPm5rZXlzOwogCQltZW1jcHkoa2xpc3QtPmtleXMsCiAJCSAgICAgICBza2xpc3QtPmtleXMsCi0JCSAgICAgICBza2xpc3QtPm5rZXlzICogc2l6ZW9mKHN0cnVjdCBrZXkpKTsKKwkJICAgICAgIHNrbGlzdC0+bmtleXMgKiBzaXplb2Yoc3RydWN0IGtleSAqKSk7CiAKIAkJZm9yIChsb29wID0ga2xpc3QtPm5rZXlzIC0gMTsgbG9vcCA+PSAwOyBsb29wLS0pCiAJCQlhdG9taWNfaW5jKCZrbGlzdC0+a2V5c1tsb29wXS0+dXNhZ2UpOwpAQCAtNzgzLDcgKzc4Myw3IEBACiAJCXJldCA9IC1FTkZJTEU7CiAJCWlmIChtYXggPiA2NTUzNSkKIAkJCWdvdG8gZXJyb3IzOwotCQlzaXplID0gc2l6ZW9mKCprbGlzdCkgKyBzaXplb2YoKmtleSkgKiBtYXg7CisJCXNpemUgPSBzaXplb2YoKmtsaXN0KSArIHNpemVvZihzdHJ1Y3Qga2V5ICopICogbWF4OwogCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKIAkJCWdvdG8gZXJyb3IzOwogCkBAIC04OTUsNyArODk1LDggQEAKIAoga2V5X2lzX3ByZXNlbnQ6CiAJLyogd2UgbmVlZCB0byBjb3B5IHRoZSBrZXkgbGlzdCBmb3IgUkNVIHB1cnBvc2VzICovCi0JbmtsaXN0ID0ga21hbGxvYyhzaXplb2YoKmtsaXN0KSArIHNpemVvZigqa2V5KSAqIGtsaXN0LT5tYXhrZXlzLAorCW5rbGlzdCA9IGttYWxsb2Moc2l6ZW9mKCprbGlzdCkgKworCQkJIHNpemVvZihzdHJ1Y3Qga2V5ICopICoga2xpc3QtPm1heGtleXMsCiAJCQkgR0ZQX0tFUk5FTCk7CiAJaWYgKCFua2xpc3QpCiAJCWdvdG8gbm9tZW07CkBAIC05MDUsMTIgKzkwNiwxMiBAQAogCWlmIChsb29wID4gMCkKIAkJbWVtY3B5KCZua2xpc3QtPmtleXNbMF0sCiAJCSAgICAgICAma2xpc3QtPmtleXNbMF0sCi0JCSAgICAgICBsb29wICogc2l6ZW9mKGtsaXN0LT5rZXlzWzBdKSk7CisJCSAgICAgICBsb29wICogc2l6ZW9mKHN0cnVjdCBrZXkgKikpOwogCiAJaWYgKGxvb3AgPCBua2xpc3QtPm5rZXlzKQogCQltZW1jcHkoJm5rbGlzdC0+a2V5c1tsb29wXSwKIAkJICAgICAgICZrbGlzdC0+a2V5c1tsb29wICsgMV0sCi0JCSAgICAgICAobmtsaXN0LT5ua2V5cyAtIGxvb3ApICogc2l6ZW9mKGtsaXN0LT5rZXlzWzBdKSk7CisJCSAgICAgICAobmtsaXN0LT5ua2V5cyAtIGxvb3ApICogc2l6ZW9mKHN0cnVjdCBrZXkgKikpOwogCiAJLyogYWRqdXN0IHRoZSB1c2VyJ3MgcXVvdGEgKi8KIAlrZXlfcGF5bG9hZF9yZXNlcnZlKGtleXJpbmcsCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvY3M0Nnh4LmMgYi9zb3VuZC9vc3MvY3M0Nnh4LmMKaW5kZXggOWU0MmExYS4uY2I5OThlOCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2NzNDZ4eC5jCisrKyBiL3NvdW5kL29zcy9jczQ2eHguYwpAQCAtNDE3NCw3ICs0MTc0LDcgQEAKIAkJCQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmY3M0Nnh4X2RldnMpCiAJCQkJewogCQkJCQljYXJkID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGNzX2NhcmQsIGxpc3QpOwotCQkJCQljczQ2eHhfc3VzcGVuZChjYXJkLCAwKTsKKwkJCQkJY3M0Nnh4X3N1c3BlbmQoY2FyZCwgUE1TR19PTik7CiAJCQkJfQogCiAJCQl9CkBAIC01NzQ5LDcgKzU3NDksNyBAQAogCQkJY2FzZSBQTV9TVVNQRU5EOgogCQkJCUNTX0RCR09VVChDU19QTSwgMiwgcHJpbnRrKEtFUk5fSU5GTwogCQkJCQkiY3M0Nnh4OiBQTSBzdXNwZW5kIHJlcXVlc3RcbiIpKTsKLQkJCQlpZihjczQ2eHhfc3VzcGVuZChjYXJkLCAwKSkKKwkJCQlpZihjczQ2eHhfc3VzcGVuZChjYXJkLCBQTVNHX1NVU1BFTkQpKQogCQkJCXsKIAkJCQkgICAgQ1NfREJHT1VUKENTX0VSUk9SLCAyLCBwcmludGsoS0VSTl9JTkZPCiAJCQkJCSJjczQ2eHg6IFBNIHN1c3BlbmQgcmVxdWVzdCByZWZ1c2VkXG4iKSk7CkBAIC01Nzc5LDcgKzU3NzksNyBAQAogCXN0cnVjdCBjc19jYXJkICpzID0gUENJX0dFVF9EUklWRVJfREFUQShwY2lkZXYpOwogCUNTX0RCR09VVChDU19QTSB8IENTX0ZVTkNUSU9OLCAyLCAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY3M0Nnh4OiBjczQ2eHhfc3VzcGVuZF90YmwgcmVxdWVzdFxuIikpOwotCWNzNDZ4eF9zdXNwZW5kKHMsIDApOworCWNzNDZ4eF9zdXNwZW5kKHMsIHN0YXRlKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2J0ODd4LmMgYi9zb3VuZC9wY2kvYnQ4N3guYwppbmRleCA5MDlmZWY4Li5jNTU1N2VhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYnQ4N3guYworKysgYi9zb3VuZC9wY2kvYnQ4N3guYwpAQCAtNzk4LDEzICs3OTgsMTUgQEAKIAl7MHgyNzBmLCAweGZjMDB9LCAvKiBDaGFpbnRlY2ggRGlnaXRvcCBEU1QtMTAwMCBEVkItUyAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcjsKKwogLyogcmV0dXJuIHRoZSByYXRlIG9mIHRoZSBjYXJkLCBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIGl0J3MgYmxhY2tsaXN0ZWQgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9idDg3eF9kZXRlY3RfY2FyZChzdHJ1Y3QgcGNpX2RldiAqcGNpKQogewogCWludCBpOwogCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpzdXBwb3J0ZWQ7CiAKLQlzdXBwb3J0ZWQgPSBwY2lfbWF0Y2hfZGV2aWNlKGRyaXZlciwgcGNpKTsKKwlzdXBwb3J0ZWQgPSBwY2lfbWF0Y2hfZGV2aWNlKCZkcml2ZXIsIHBjaSk7CiAJaWYgKHN1cHBvcnRlZCkKIAkJcmV0dXJuIHN1cHBvcnRlZC0+ZHJpdmVyX2RhdGE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCmluZGV4IDJkNGY4ZTIuLmQ2OTE4YjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNjb2RlLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgogI2luY2x1ZGUgInBkYXVkaW9jZi5oIgpAQCAtMTcxLDE0ICsxNzAsNiBAQAogCiAJLyogUmVnaXN0ZXIgd2l0aCBDYXJkIFNlcnZpY2VzICovCiAJY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9IAotCQlDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTAotI2lmZGVmIENPTkZJR19QTQotCQl8IENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVAotCQl8IENTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUUKLSNlbmRpZgotCQk7Ci0JY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnBkYWNmX2V2ZW50OwogCWNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKIAljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogCkBAIC0zODcsMTIgKzM3OCwxMyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIHNuZF9wZGFjZl9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgcGRhY2ZfY3NfZHJpdmVyID0gewotCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5kcnYgICAgICAgICAgICA9IHsKLQkJLm5hbWUgICA9ICJzbmQtcGRhdWRpb2NmIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmRydgkJPSB7CisJCS5uYW1lCT0gInNuZC1wZGF1ZGlvY2YiLAogCX0sCi0JLmF0dGFjaCAgICAgICAgID0gc25kX3BkYWNmX2F0dGFjaCwKLQkuZGV0YWNoICAgICAgICAgPSBzbmRfcGRhY2ZfZGV0YWNoLAorCS5hdHRhY2gJCT0gc25kX3BkYWNmX2F0dGFjaCwKKwkuZXZlbnQJCT0gcGRhY2ZfZXZlbnQsCisJLmRldGFjaAkJPSBzbmRfcGRhY2ZfZGV0YWNoLAogCS5pZF90YWJsZQk9IHNuZF9wZGFjZl9pZHMsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhfZW50cnkuYyBiL3NvdW5kL3BjbWNpYS92eC92eF9lbnRyeS5jCmluZGV4IDMzMmJiY2EuLmRmN2EzOWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eF9lbnRyeS5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eF9lbnRyeS5jCkBAIC0zNSw3ICszNSw2IEBACiAgKiBwcm90b3R5cGVzCiAgKi8KIHN0YXRpYyB2b2lkIHZ4cG9ja2V0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyBpbnQgdnhwb2NrZXRfZXZlbnQoZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5LCBldmVudF9jYWxsYmFja19hcmdzX3QgKmFyZ3MpOwogCiAKIHN0YXRpYyB2b2lkIHZ4cG9ja2V0X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKQEAgLTE2OSwxNCArMTY4LDYgQEAKIAkvKiBSZWdpc3RlciB3aXRoIENhcmQgU2VydmljZXMgKi8KIAltZW1zZXQoJmNsaWVudF9yZWcsIDAsIHNpemVvZihjbGllbnRfcmVnKSk7CiAJY2xpZW50X3JlZy5kZXZfaW5mbyA9IGh3LT5kZXZfaW5mbzsKLQljbGllbnRfcmVnLkV2ZW50TWFzayA9IAotCQlDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTAotI2lmZGVmIENPTkZJR19QTQotCQl8IENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVAotCQl8IENTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUUKLSNlbmRpZgotCQk7Ci0JY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnZ4cG9ja2V0X2V2ZW50OwogCWNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKIAljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOwogCkBAIC0zMjEsNyArMzEyLDcgQEAKIC8qCiAgKiBldmVudCBjYWxsYmFjawogICovCi1zdGF0aWMgaW50IHZ4cG9ja2V0X2V2ZW50KGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSwgZXZlbnRfY2FsbGJhY2tfYXJnc190ICphcmdzKQoraW50IHZ4cG9ja2V0X2V2ZW50KGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSwgZXZlbnRfY2FsbGJhY2tfYXJnc190ICphcmdzKQogewogCWRldl9saW5rX3QgKmxpbmsgPSBhcmdzLT5jbGllbnRfZGF0YTsKIAl2eF9jb3JlX3QgKmNoaXAgPSBsaW5rLT5wcml2OwpAQCAtMzgwLDQgKzM3MSw1IEBACiAgKi8KIEVYUE9SVF9TWU1CT0woc25kX3Z4cG9ja2V0X29wcyk7CiBFWFBPUlRfU1lNQk9MKHNuZF92eHBvY2tldF9hdHRhY2gpOworRVhQT1JUX1NZTUJPTCh2eHBvY2tldF9ldmVudCk7CiBFWFBPUlRfU1lNQk9MKHNuZF92eHBvY2tldF9kZXRhY2gpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwppbmRleCA1ZjRjMTMyLi42MmQ2ZmExIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYworKysgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgogI2luY2x1ZGUgInZ4cG9ja2V0LmgiCiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCg==